Är Linux POSIX-kompatibelt?

Is Linux Posix Compliant



Programvaran är skriven av många utvecklare med olika bakgrunder. Allmänna algoritmer är tillgängliga under en gratis licens eller har publicerats vetenskapligt, och de kan också vara tillgängliga gratis för studier. Detta resulterar i olika implementeringar och programvaruversioner som passar olika behov. En standardisering av gränssnitt och dataformat är nödvändig för att göra dessa olika implementationer både utbytbara och modulära.

Kort sagt, POSIX [1] gör exakt det för UNIX och UNIX-liknande system (se Zak Hs artikel [4] för en mer detaljerad historik om detta ämne). Den definierar utbytesgränssnitt, anropsmekanismer och överförd data för programvaran men lämnar den interna implementeringen till utvecklaren eller underhållaren av programvaran. Målet är att förena alla olika UNIX-gafflar och UNIX-liknande system på ett sådant sätt att olika programvaruimplementeringar kan interagera med varandra. Den största fördelen med POSIX är att ha en bindande dokumentation för dessa komponenter - gränssnitt, mekanismer och data - tillgänglig i skriftlig form.







Ett operativsystem som följer POSIX-standarden i sin helhet klassas som POSIX-kompatibelt. I den här artikeln förklarar vi vad POSIX står för, avgör om Linux tillhör denna kategori och listar vilka Linux -komponenter som måste uteslutas från denna klassificering.



Vad står termen POSIX för?

POSIX är en förkortning för Portable Operating System Interface. Som kort förklarat ovan är POSIX namnet på en samling standarder som krävs för att upprätthålla kompatibilitet mellan operativsystem. Som anges i [1] definierar [det] applikationsprogrammeringsgränssnittet (API), tillsammans med kommandoradsskal och verktygsgränssnitt, för programvarukompatibilitet med varianter av Unix och andra operativsystem. Den första versionen av POSIX publicerades 1988. Sedan dess har POSIX kontinuerligt utökats och uppdaterats av Austin Common Standards Revision Group (även kallat The Austin Group) [7].



Från och med 2021 innehåller POSIX -standarden följande delar:





  1. Kärn tjänster (Innehåller standard ANSI C) (IEEE std 1003.1-1988)-Processskapande och kontroll, signaler, fil- och katalogoperationer, rör, C-bibliotek, I/O-portgränssnitt och kontroll, Processutlösare
  1. Tillägg (Symboliska länkar)
  2. Realtid och I/O-tillägg (IEEE Std 1003.1b-1993)-Prioritetsplanering, realtidssignaler, klockor och tidtagare, semaforer, meddelandeöverföring, delat minne, asynkron och synkron I/O, minneslåsande gränssnitt
  3. Trådtillägg (IEEE Std 1003.1c-1995)-Trådskapande, kontroll och sanering, trådschemaläggning, trådsynkronisering, signalhantering
  4. Fler realtidstillägg
  5. Säkerhetstillägg (Listor över åtkomstkontroll)
  1. Shell och verktyg (IEEE Std 1003.2-1992)-Kommandotolk, verktygsprogram

Standarden granskas regelbundet för att återspegla tekniska förändringar och förbättringar. Det kan ibland ta flera år innan en ny version publiceras och ändringarna införlivas. Detta kan vara ofördelaktigt, men det är förståeligt med tanke på standardens omfattning.

Under de senaste åren har tillägg till bearbetning i realtid lagts till. Den nuvarande versionen släpptes i början av 2018 [3]. Författarna till SibylFS [5] har också publicerat många kommentarer till POSIX-standarden för att bestämma logik och interaktioner av högre ordning.



Vad innebär det att vara POSIX-kompatibel?

Termen POSIX-kompatibel innebär att ett operativsystem uppfyller alla POSIX-kriterier. Ett operativsystem kan köra UNIX -program inbyggt, eller en applikation kan portas från UNIX -systemet till ett annat system. Att överföra en applikation från UNIX till måloperativsystemet är enkelt, eller åtminstone enklare, än om det inte stöder POSIX. För att vara på den säkra sidan borde ett operativsystem ha uppnått POSIX -certifieringen [2]. Detta steg uppnås (till en kostnad) genom att klara ett automatiserat certifieringstest. Motsvarande testsvit hittar du här [11].

Från och med 2021 innehåller listan över POSIX-certifierade operativsystem AIX från IBM, HP-UX från HP, IRIX från SGI, EulerOS [6] från Huawei, Mac OS X från Apple (sedan 10.5 Leopard), Solaris och QNX Neutrino från Oracle, Inspurs K-UX [11] och OS-INTEGRITET i realtid från Green Hills Software [15]. Det är för närvarande oklart om nyare versioner av de tre Solaris-efterföljarna OpenSolaris, Illumos och OpenIndiana också är klassificerade som helt POSIX-kompatibla. Dessa operativsystem var POSIX-kompatibla fram till POSIX 2001.

Andra operativsystem som anses vara mestadels (men inte helt) POSIX-kompatibla inkluderar Android, BeOS, FreeBSD, Haiku, Linux (se nedan) och VMWare ESXi. För Microsoft Windows erbjuder Cygwin en i stort sett POSIX-kompatibel utvecklings- och körtidsmiljö.

Är Linux POSIX-kompatibelt?

Termen Linux hänvisar till hela Linux -operativsystemet, oavsett smak, till exempel Debian GNU/Linux, RedHat Linux, Linux Mint, Ubuntu Linux, Fedora och CentOS, till exempel. För att vara exakt är Linux bara namnet på kärnan som är kärnkomponenten i detta gratis operativsystem.

Som Linus Torvalds beskrev i boken Just For Fun [8], för att utveckla Linux -kärnan, begärde han en kopia av POSIX -standarden. Detta hjälpte honom att implementera samma mekanismer som används i kommersiella UNIX -system. Dessutom tillät detta honom att länka Linux -kärnan med GNU -verktygen som huvudsakligen följde samma tillvägagångssätt. För att vara rättvis, är programvaran på ett Linux -system bidragit från en mängd olika källor som respekterar POSIX -standarden, men som också ibland implementerar sina egna koncept. Samtidigt visar detta dock också mångfalden som utgör Linux som operativsystem.

Ett exempel på detta är hur kommandoradsargument skrivs. Argument med två bindestreck (t.ex. –hjälp) är GNU -konventioner, medan POSIX -kommandon aldrig använder tvåstreckade argument utan istället bara en enda (t.ex. -hjälp). Redan från början designades Linux med GNU i åtanke, och det är därför kommandona innehåller GNU-stil

argument. För att uppnå POSIX-efterlevnad har argument i POSIX-stil lagts till steg för steg. Ändå fattas det slutgiltiga beslutet av utvecklaren. Från och med idag accepterar de flesta kommandon både korta och långa argument, eller till och med argument utan bindestreck, till exempel find -kommandot. För att vara rättvis finns det ingen överensstämmelse mellan kommandona på ett system, och detta kan vara ett problem när du tänker använda samma kommando på ett annat UNIX-baserat system, särskilt när du växlar mellan Linux, OS X och Solaris.

För närvarande är Linux inte POSIX-certifierat på grund av höga kostnader, förutom de två kommersiella Linux-distributionerna Inspur K-UX [12] och Huawei EulerOS [6]. Istället ses Linux som mestadels POSIX-kompatibelt.

Denna bedömning beror på att stora Linux -distributioner följer Linux Standard Base (LSB) istället för POSIX [9]. LSB syftar till att minimera skillnaderna mellan enskilda Linux -distributioner [14]. Detta hänvisar till mjukvarusystemstrukturen, inklusive Filesystem Hierarchy Standard (FHS) som används i Linux -kärnan. LSB är baserat på POSIX -specifikationen, Single UNIX Specification (SUS) [10] och flera andra öppna standarder, men utvidgar dem också inom vissa områden.

LSB-baserade Linux-distributioner inkluderar RedHat Linux, Debian GNU/Linux (2002-2015) och Ubuntu (fram till 2015), för att nämna några.

Utvecklas med POSIX i åtanke

För att förstå POSIX mer detaljerat rekommenderar vi att du skaffar en kopia av POSIX -standarden och läser den i sin helhet. Du kan hämta boken från Open Groups webbplats. Detta kräver en registreringsavgift men ger dig full tillgång till denna värdefulla resurs. Standarder hjälper eftersom de låter dig utveckla programvara på ett sådant sätt att den beter sig på samma sätt på alla UNIX -plattformar.

Länkar och referenser

Tack

Författaren vill tacka Axel Beckert och Veit Schiele för deras hjälp och råd under utarbetandet av denna artikel.