# POSIX När vi säger att Linux är ett Unix-likt system menas det att Linux följer POSIX. POSIX är först och främst ett API (C POSIX biblioteket) mellan kernel och applikationer i userspace, men också kräver POSIX att det finns vissa verktyg tillgängliga som `ls` och `vi` (userspace). När vi kodar C ska vi aldrig behöva köra ett system call direkt (även om det kan göras genom functionen `syscall()` i C), utan istället använda detta C-bibliotek som gör massa nice - framför allt gör detta det lättare att korskompilera till andra system som följer POSIX. Så om du ska programmera till Unix-liknande system bör du göra det genom att använda C POSIX biblioteket. (Exekverar då alla andra programmeringsspråk dessa C funktioner eller kör dom system calls direkt?) System som Linux och varianter på BSD är typ POSIX-kompatibla, då dessa lovar att erbjuda MINST det POSIX kräver. T ex att pipes är bidirectional på BSD, men bara unidirectional i Linux och enligt POSIX. # Linux Ett vanligt Linux-system innehåller alltså flera viktiga delar: * Linux kernel * C POSIX library (API) * Systemd (systemhanterare (allt möjligt), processhanterare (startar processer, agerar scheduler, etc)) * Core Utilities (exempelvis GNU Coreutils som inkluderar mångs program så som bash, gcc, ls, och cd) * X11 (grafiskt system) Men en Linuxdistribution behöver inte ha GNU Utils (ex. Alpine Linux), eller vara POSIX (ex. Android), eller använda SystemD (ex. Slackware), eller använda X11 (eller grafik överhuvudtaget). Det som gör dessa till Linux är att de alla kör Linuxkärnan