Is Linux POSIX-compatibel?

Is Linux Posix Compliant



Software is geschreven door tal van ontwikkelaars met verschillende achtergronden. Algemene algoritmen zijn beschikbaar onder een gratis licentie of zijn wetenschappelijk gepubliceerd, en ze kunnen ook gratis beschikbaar zijn voor studiedoeleinden. Dit resulteert in verschillende implementaties en softwareversies die aan verschillende behoeften voldoen. Een standaardisatie van interfaces en dataformaten is nodig om deze verschillende implementaties zowel uitwisselbaar als modulair te maken.

Kortom, POSIX [1] doet precies dat voor UNIX en UNIX-achtige systemen (zie Zak H's artikel [4] voor een meer gedetailleerde geschiedenis over dit onderwerp). Het definieert de uitwisselingsinterfaces, oproepmechanismen en overgedragen gegevens voor de software, maar laat de interne implementatie over aan de ontwikkelaar of onderhouder van de software. Het doel is om alle verschillende UNIX-vorken en UNIX-achtige systemen zo te verenigen dat verschillende software-implementaties met elkaar kunnen communiceren. Het belangrijkste voordeel van POSIX is dat er bindende documentatie voor deze componenten - interfaces, mechanismen en gegevens - beschikbaar is in schriftelijke vorm.







Een besturingssysteem dat de POSIX-standaard in zijn geheel volgt, wordt geclassificeerd als POSIX-compatibel. In dit artikel leggen we uit waar POSIX voor staat, bepalen we of Linux tot deze categorie behoort en zetten we op een rij welke Linux-componenten van deze classificatie moeten worden uitgesloten.



Waar staat de term POSIX voor?

POSIX is een afkorting voor Portable Operating System Interface. Zoals hierboven kort uitgelegd, is POSIX de naam voor een verzameling standaarden die nodig zijn om de compatibiliteit tussen besturingssystemen te behouden. Zoals vermeld in [1], definieert [it] de Application Programming Interface (API), samen met opdrachtregelshells en hulpprogramma-interfaces, voor softwarecompatibiliteit met varianten van Unix en andere besturingssystemen. De eerste versie van POSIX werd gepubliceerd in 1988. Sindsdien is POSIX voortdurend uitgebreid en bijgewerkt door de Austin Common Standards Revision Group (ook bekend als The Austin Group) [7].



Vanaf 2021 bevat de POSIX-standaard de volgende onderdelen:





  1. Kerndiensten (Bevat standaard ANSI C) (IEEE std 1003.1-1988) - Procescreatie en -besturing, signalen, bestands- en directorybewerkingen, buizen, C-bibliotheek, I/O-poortinterface en -besturing, procestriggers
  1. Extensies (Symbolische koppelingen)
  2. Realtime en I/O-extensies (IEEE Std 1003.1b-1993) - Prioriteitsplanning, realtime signalen, klokken en timers, semaforen, berichten doorgeven, gedeeld geheugen, asynchrone en synchrone I/O, interface voor geheugenvergrendeling
  3. Threads-extensies (IEEE Std 1003.1c-1995) - Threadcreatie, controle en opschonen, threadplanning, threadsynchronisatie, signaalverwerking
  4. Meer realtime extensies
  5. Beveiligingsextensies (Toegangscontrolelijsten)
  1. Shell en hulpprogramma's (IEEE Std 1003.2-1992) – Command Interpreter, Utility Programs

De norm wordt regelmatig herzien om technische wijzigingen en verbeteringen weer te geven. Het kan soms enkele jaren duren voordat een nieuwe versie wordt gepubliceerd en de wijzigingen zijn verwerkt. Dit kan nadelig zijn, maar is begrijpelijk gezien de reikwijdte van de norm.

De afgelopen jaren zijn er uitbreidingen op realtime verwerking toegevoegd. De huidige versie is begin 2018 uitgebracht [3]. De auteurs van SibylFS [5] hebben ook veel annotaties bij de POSIX-standaard gepubliceerd om logica en interacties van hogere orde te bepalen.



Wat betekent POSIX-compatibel zijn?

De term POSIX-compatibel betekent dat een besturingssysteem aan alle POSIX-criteria voldoet. Een besturingssysteem kan native UNIX-programma's uitvoeren, of een toepassing kan van het UNIX-systeem naar een ander systeem worden geporteerd. Het overzetten van een applicatie van UNIX naar het doelbesturingssysteem is eenvoudig, of in ieder geval gemakkelijker, dan wanneer het POSIX niet ondersteunt. Voor de zekerheid moet een besturingssysteem de POSIX-certificering [2] hebben behaald. Deze stap wordt (tegen betaling) bereikt door een geautomatiseerde certificeringstest te doorstaan. De bijbehorende testsuite vindt u hier [11].

Vanaf 2021 bevat de lijst van POSIX-gecertificeerde besturingssystemen AIX van IBM, HP-UX van HP, IRIX van SGI, EulerOS [6] van Huawei, Mac OS X van Apple (sinds 10.5 Leopard), Solaris en QNX Neutrino van Oracle, Inspur's K-UX [11], en de real-time OS INTEGRITY van Green Hills Software [15]. Het is momenteel onduidelijk of nieuwere versies van de drie Solaris-opvolgers, OpenSolaris, Illumos en OpenIndiana, ook worden geclassificeerd als volledig POSIX-compatibel. Deze besturingssystemen waren POSIX-compatibel tot POSIX 2001.

Andere besturingssystemen die grotendeels (maar niet volledig) POSIX-compatibel zijn, zijn Android, BeOS, FreeBSD, Haiku, Linux (zie hieronder) en VMWare ESXi. Voor Microsoft Windows biedt Cygwin een grotendeels POSIX-compatibele ontwikkel- en runtime-omgeving.

Is Linux POSIX-compatibel?

De term Linux verwijst naar het volledige Linux-besturingssysteem, ongeacht de smaak, zoals bijvoorbeeld Debian GNU/Linux, RedHat Linux, Linux Mint, Ubuntu Linux, Fedora en CentOS. Om precies te zijn, Linux is gewoon de naam van de kernel die het kernonderdeel is van dit gratis besturingssysteem.

Zoals Linus Torvalds in het boek Just For Fun [8] beschreef, vroeg hij om een ​​kopie van de POSIX-standaard om de Linux-kernel te ontwikkelen. Dit hielp hem om dezelfde mechanismen te implementeren die worden gebruikt in commerciële UNIX-systemen. Bovendien kon hij hierdoor de Linux-kernel koppelen aan de GNU-tools die grotendeels dezelfde aanpak volgden. Om eerlijk te zijn, de software op een Linux-systeem is afkomstig van verschillende bronnen die de POSIX-standaard respecteren, maar die soms ook hun eigen concepten implementeren. Tegelijkertijd toont dit echter ook de diversiteit waaruit Linux als besturingssysteem bestaat.

Een voorbeeld hiervan is de manier waarop opdrachtregelargumenten worden geschreven. Argumenten met twee streepjes (bijv. –help) zijn GNU-conventies, terwijl POSIX-commando's nooit argumenten met twee streepjes gebruiken, maar slechts één (bijv. -help). Vanaf het begin is Linux ontworpen met GNU in gedachten, en daarom bevatten de commando's GNU-stijl

argumenten. Om POSIX-compliance te bereiken, zijn stapsgewijs POSIX-achtige argumenten toegevoegd. Toch wordt de uiteindelijke beslissing genomen door de ontwikkelaar. Vanaf vandaag accepteren de meeste commando's zowel korte als lange argumenten, of zelfs argumenten zonder streepjes, zoals bijvoorbeeld het find commando. Om eerlijk te zijn, is er geen consistentie tussen de commando's op het ene systeem, en dit kan een probleem zijn wanneer je van plan bent hetzelfde commando te gebruiken op een ander UNIX-gebaseerd systeem, vooral bij het schakelen tussen Linux, OS X en Solaris.

Voorlopig is Linux vanwege de hoge kosten niet POSIX-gecertificeerd, behalve de twee commerciële Linux-distributies Inspur K-UX [12] en Huawei EulerOS [6]. In plaats daarvan wordt Linux gezien als grotendeels POSIX-compatibel.

Deze beoordeling is te wijten aan het feit dat grote Linux-distributies de Linux Standard Base (LSB) volgen in plaats van POSIX [9]. LSB streeft ernaar de verschillen tussen individuele Linux-distributies te minimaliseren [14]. Dit verwijst naar de structuur van het softwaresysteem, inclusief de Filesystem Hierarchy Standard (FHS) die in de Linux-kernel wordt gebruikt. LSB is gebaseerd op de POSIX-specificatie, de Single UNIX-specificatie (SUS) [10] en verschillende andere open standaarden, maar breidt deze ook op bepaalde gebieden uit.

Op LSB gebaseerde Linux-distributies omvatten RedHat Linux, Debian GNU/Linux (2002-2015) en Ubuntu (tot 2015), om er maar een paar te noemen.

Ontwikkelen met POSIX in gedachten

Om POSIX in meer detail te begrijpen, raden we aan om een ​​kopie van de POSIX-standaard aan te schaffen en deze volledig te lezen. U kunt het boek downloaden van de Open Group-website. Dit vereist een registratievergoeding, maar geeft u volledige toegang tot deze waardevolle bron. Standaarden helpen omdat ze je in staat stellen om software zo te ontwikkelen dat deze zich op alle UNIX-platforms op dezelfde manier gedraagt.

Links en referenties

Bedankt

De auteur wil Axel Beckert en Veit Schiele bedanken voor hun hulp en advies bij het opstellen van dit artikel.