Czy Linux jest zgodny z POSIX?

Is Linux Posix Compliant



Oprogramowanie jest pisane przez wielu programistów z różnych środowisk. Ogólne algorytmy są dostępne na wolnej licencji lub zostały opublikowane naukowo, a także mogą być dostępne bezpłatnie do celów badawczych. Skutkuje to różnymi implementacjami i wersjami oprogramowania, które pasują do różnych potrzeb. Konieczna jest standaryzacja interfejsów i formatów danych, aby te różne implementacje były zarówno wymienne, jak i modułowe.

Krótko mówiąc, POSIX [1] robi dokładnie to dla systemów UNIX i UNIX-podobnych (zobacz artykuł Zaka H [4], aby uzyskać bardziej szczegółową historię na ten temat). Definiuje interfejsy wymiany, mechanizmy wywoływania i przesyłane dane dla oprogramowania, ale pozostawia wewnętrzną implementację programiście lub opiekunowi oprogramowania. Celem jest ujednolicenie wszystkich różnych widelców UNIX i systemów podobnych do UNIX w taki sposób, aby różne implementacje oprogramowania mogły ze sobą współdziałać. Główną zaletą POSIX jest posiadanie wiążącej dokumentacji dla tych komponentów – interfejsów, mechanizmów i danych – dostępnej w formie pisemnej.







System operacyjny, który jest zgodny ze standardem POSIX w całości, jest klasyfikowany jako zgodny z POSIX. W tym artykule wyjaśnimy, co oznacza POSIX, określimy, czy Linux należy do tej kategorii i wymienimy, które komponenty Linuksa muszą być wyłączone z tej klasyfikacji.



Co oznacza termin POSIX?

POSIX to skrót od Portable Operating System Interface. Jak krótko wyjaśniono powyżej, POSIX to nazwa zbioru standardów, które są wymagane do zachowania zgodności między systemami operacyjnymi. Jak stwierdzono w [1], [to] definiuje interfejs programowania aplikacji (API), wraz z powłokami wiersza poleceń i interfejsami narzędzi, dla zgodności oprogramowania z wariantami Uniksa i innych systemów operacyjnych. Pierwsza wersja POSIX została opublikowana w 1988 roku. Od tego czasu POSIX jest stale rozszerzany i aktualizowany przez Austin Common Standards Revision Group (znaną również jako The Austin Group) [7].



Od 2021 r. standard POSIX zawiera następujące części:





  1. Podstawowe usługi (Zawiera standard ANSI C) (IEEE std 1003.1-1988) — tworzenie i sterowanie procesami, sygnały, operacje na plikach i katalogach, potoki, biblioteka C, interfejs i sterowanie portów we/wy, wyzwalacze procesów
  1. Rozszerzenia (Łącza symboliczne)
  2. Rozszerzenia czasu rzeczywistego i I/O (IEEE Std 1003.1b-1993) — planowanie priorytetów, sygnały w czasie rzeczywistym, zegary i timery, semafory, przekazywanie komunikatów, pamięć współdzielona, ​​asynchroniczne i synchroniczne we/wy, interfejs blokowania pamięci
  3. Rozszerzenia wątków (IEEE Std 1003.1c-1995) — tworzenie, kontrola i czyszczenie wątków, planowanie wątków, synchronizacja wątków, obsługa sygnałów
  4. Więcej rozszerzeń w czasie rzeczywistym
  5. Rozszerzenia bezpieczeństwa (Listy kontroli dostępu)
  1. Powłoka i narzędzia (IEEE Std 1003.2-1992) — interpreter poleceń, programy narzędziowe

Standard jest regularnie weryfikowany w celu odzwierciedlenia zmian i ulepszeń technicznych. Czasami może upłynąć kilka lat, zanim nowa wersja zostanie opublikowana i wprowadzone zmiany. Może to być niekorzystne, ale jest zrozumiałe, biorąc pod uwagę zakres normy.

W ostatnich latach dodano rozszerzenia przetwarzania w czasie rzeczywistym. Obecna wersja została wydana na początku 2018 roku [3]. Autorzy SibylFS [5] opublikowali również wiele adnotacji do standardu POSIX w celu określenia logiki i interakcji wyższego rzędu.



Co oznacza zgodność z POSIX?

Termin zgodny z POSIX oznacza, że ​​system operacyjny spełnia wszystkie kryteria POSIX. System operacyjny może natywnie uruchamiać programy UNIX lub aplikacja może zostać przeniesiona z systemu UNIX do innego systemu. Przenoszenie aplikacji z UNIX-a na docelowy system operacyjny jest łatwe, a przynajmniej łatwiejsze, niż jeśli nie obsługuje POSIX. Aby być po bezpiecznej stronie, system operacyjny powinien pomyślnie uzyskać certyfikat POSIX [2]. Ten krok jest osiągany (odpłatnie) poprzez zdanie automatycznego testu certyfikacyjnego. Odpowiedni zestaw testów można znaleźć tutaj [11].

Od 2021 r. lista systemów operacyjnych z certyfikatem POSIX obejmuje AIX firmy IBM, HP-UX firmy HP, IRIX firmy SGI, EulerOS [6] firmy Huawei, Mac OS X firmy Apple (od 10.5 Leopard), Solaris i QNX Neutrino firmy Oracle, K-UX [11] firmy Inspur oraz INTEGRITY systemu operacyjnego czasu rzeczywistego firmy Green Hills Software [15]. Obecnie nie jest jasne, czy nowsze wersje trzech następców Solarisa, OpenSolaris, Illumos i OpenIndiana, są również klasyfikowane jako w pełni zgodne z POSIX. Te systemy operacyjne były zgodne z POSIX do POSIX 2001.

Inne systemy operacyjne, które są postrzegane jako w większości (ale nie w pełni) zgodne z POSIX, to Android, BeOS, FreeBSD, Haiku, Linux (patrz poniżej) i VMWare ESXi. W przypadku systemu Microsoft Windows Cygwin zapewnia środowisko programistyczne i wykonawcze w dużej mierze zgodne z POSIX.

Czy Linux jest zgodny z POSIX?

Termin Linux odnosi się do całego systemu operacyjnego Linux, niezależnie od smaku, na przykład Debian GNU/Linux, RedHat Linux, Linux Mint, Ubuntu Linux, Fedora i CentOS. Aby być precyzyjnym, Linux to tylko nazwa jądra, które jest podstawowym składnikiem tego wolnego systemu operacyjnego.

Jak Linus Torvalds opisał w książce Just For Fun [8], aby opracować jądro Linuksa, poprosił o kopię standardu POSIX. Pomogło mu to zaimplementować te same mechanizmy, które są wykorzystywane w komercyjnych systemach UNIX. Co więcej, pozwoliło mu to połączyć jądro Linuksa z narzędziami GNU, które głównie stosowały to samo podejście. Aby być uczciwym, oprogramowanie w systemie Linux pochodzi z różnych źródeł, które przestrzegają standardu POSIX, ale czasami implementują własne koncepcje. Jednocześnie jednak pokazuje to również różnorodność, która składa się na Linuksa jako system operacyjny.

Jednym z przykładów jest sposób pisania argumentów wiersza poleceń. Argumenty z dwoma myślnikami (np. –help) są konwencjami GNU, podczas gdy polecenia POSIX nigdy nie używają argumentów z dwoma myślnikami, lecz tylko z jednym (np. -help). Od samego początku Linux był projektowany z myślą o GNU i dlatego polecenia zawierają styl GNU

argumenty. Aby osiągnąć zgodność z POSIX, krok po kroku dodano argumenty w stylu POSIX. Jednak ostateczną decyzję podejmuje deweloper. Na dzień dzisiejszy większość poleceń akceptuje zarówno krótkie, jak i długie argumenty, a nawet argumenty bez myślników, takie jak na przykład polecenie find. Aby być uczciwym, nie ma spójności między poleceniami w jednym systemie, co może stanowić problem, gdy zamierzasz użyć tego samego polecenia w innym systemie opartym na systemie UNIX, szczególnie podczas przełączania między systemami Linux, OS X i Solaris.

Na razie Linux nie ma certyfikatu POSIX ze względu na wysokie koszty, z wyjątkiem dwóch komercyjnych dystrybucji Linuksa Inspur K-UX [12] i Huawei EulerOS [6]. Zamiast tego Linux jest postrzegany jako w większości zgodny z POSIX.

Ta ocena wynika z faktu, że główne dystrybucje Linuksa stosują się do Linux Standard Base (LSB) zamiast POSIX [9]. LSB ma na celu zminimalizowanie różnic pomiędzy poszczególnymi dystrybucjami Linuksa [14]. Odnosi się to do struktury systemu oprogramowania, w tym do standardu Filesystem Hierarchy Standard (FHS) używanego w jądrze Linux. LSB opiera się na specyfikacji POSIX, Single UNIX Specification (SUS) [10] i kilku innych otwartych standardach, ale także rozszerza je w pewnych obszarach.

Dystrybucje Linuksa oparte na LSB obejmują RedHat Linux, Debian GNU/Linux (2002-2015) i Ubuntu (do 2015), żeby wymienić tylko kilka.

Programowanie z myślą o POSIX

Aby zrozumieć POSIX bardziej szczegółowo, zalecamy uzyskanie kopii standardu POSIX i przeczytanie go w całości. Książkę można pobrać ze strony Open Group. Wymaga to opłaty rejestracyjnej, ale daje pełny dostęp do tego cennego zasobu. Standardy pomagają, ponieważ pozwalają na tworzenie oprogramowania w taki sposób, aby zachowywało się w ten sam sposób na wszystkich platformach UNIX.

Linki i referencje

Dziękuję

Autor dziękuje Axelowi Beckertowi i Veitowi Schiele za pomoc i rady w przygotowaniu tego artykułu.