Czym dokładnie jest POSIX?


139

Widzę często wymieniane POSIX i wszędzie, i założyłem, że jest to podstawowy standard UNIX .. dopóki nie zauważyłem następującego fragmentu na stronie Wikipedii: The Open Group

Grupa Open jest najbardziej znana jako jednostka certyfikująca znak towarowy UNIX, a publikacja standardu technicznego Single UNIX Specification , który rozszerza standardy POSIX i jest oficjalną definicją systemu UNIX .

Jeśli oficjalna definicja systemu UNIX jest rozszerzeniem POSIX, to czym dokładnie jest POSIX? ,,, Z pewnością wydaje się to kamieniem węgielnym świata UNIX, ale nie wiem, jak to pasuje do ogólnego obrazu.


2
SUS jest oficjalną definicją UNIX, ponieważ Open Group, a nie IEEE, jest właścicielem znaku towarowego UNIX. Zobacz moją odpowiedź poniżej.
— penguin359,


Odpowiedzi:


125

POSIX po raz pierwszy był standardem w 1988 r. Na długo przed specyfikacją Single UNIX. Była to jedna z prób ujednolicenia wszystkich różnych wideł i systemów uniksopodobnych. POSIX jest standardem IEEE, ale ponieważ IEEE nie jest właścicielem znaku towarowego UNIX®, standard ten nie jest UNIX®, chociaż opiera się na istniejącym wówczas interfejsie API UNIX®. Pierwszy standard POSIX.1 jest formalnie znany jako IEEE std 1003.1-1988. [ 1 ] IEEE naliczyła znaczną opłatę za uzyskanie kopii standardu.

Grupa Open wydała specyfikację Single UNIX (SUSv2) w 1997 r. W oparciu o pracę IEEE dotyczącą standardu POSIX. SUSv3 został wydany w 2001 roku ze wspólnej grupy roboczej IEEE i The Open Group znanej jako Austin Group. SUSv3 jest również znany jako POSIX: 2001 [ 2 ]. Istnieje również POSIX: 2004 i POSIX: 2008, który jest rdzeniem SUSv4. Jeśli chodzi o to, czym jest UNIX®, UNIX® jest tym, co twierdzi obecny zarejestrowany właściciel znaku towarowego. Od 1994 roku jest to The Open Group.

Firma Novell przejęła działalność w zakresie systemów UNIX® od AT & T / USL, w której narodził się UNIX®. W 1994 roku sprzedali prawo do znaku towarowego UNIX® firmie X / Open [ 3 ], znanej obecnie jako The Open Group. Następnie sprzedali SCO kod źródłowy UNIX jako UNIXWARE®. [ 3 ] Sam UNIX® rozwidlił się wiele razy [ 4 ] [ 5 ] częściowo z powodu modelu licencyjnego AT&T. Zakup UNIX® zapewnił pełne źródło systemu operacyjnego i pełny łańcuch narzędzi do jego zbudowania. Modyfikacje źródła mogą być rozpowszechniane i wykorzystywane przez każdego, kto posiadał licencję na system UNIX® od AT&T. Opłata licencyjna była w tysiącach.

BSD był projektem w Berkeley, który dodał szereg ulepszeń do systemu operacyjnego UNIX®. Kod BSD został wydany na podstawie znacznie bardziej liberalnej licencji niż źródło AT&T i nie wymagał opłaty licencyjnej ani nawet wymogu dystrybucji ze źródłem, w przeciwieństwie do GPL, której używają Projekt GNU i Linux. Spowodowało to włączenie znacznej części kodu BSD do różnych komercyjnych rozwidleń UNIX. Około 4,3BSD prawie zastąpili jakąkolwiek potrzebę oryginalnego kodu źródłowego AT&T UNIX®. FreeBSD / NetBSD / OpenBSD to wszystkie widelce 4.3BSD, które są kompletnym systemem operacyjnym i nie mają oryginalnego kodu źródłowego AT&T. Nie mają też prawa do znaku towarowego UNIX®, ale znaczna część ich kodu jest używana przez komercyjne systemy operacyjne UNIX.

Linux został opracowany w 1991 roku, ale został opracowany od zera w przeciwieństwie do BSD i wykorzystuje istniejący Projekt GNU, który jest czystą implementacją dużej części przestrzeni użytkownika UNIX. Implementuje wiele POSIX dla kompatybilności i ma konstrukcję podobną do UNIX, ale nie ma ścisłego połączenia z AT&T lub UNIX®, które mają BSD.


1
Świetna odpowiedź ... wszystkie (3) odpowiedzi były dobre, ale ta była niezwykle pouczająca (szczególnie po przygotowaniu przez pozostałe 2); właśnie tego potrzebowałem ... i dziękuję za komentarz (pod pytaniem) na temat SUS, rozumiem to teraz wystarczająco dobrze, dzięki ... (i nie zauważyłem, że to tylko jeden akapit ... To też było ciekawe :)
— Peter.O

2
@Mikel mam nadzieję, że moja edycja trochę pomaga
— penguin359 26.04.11

1
To fantastyczna odpowiedź tam @ penguin359!
— boehj

Czy ktoś ma dobry pomysł na to, co oznacza X? Jeśli to tylko przyrostek wskazujący na związek z Uniksem, czy nie powinien być pisany małymi literami?
— Alex W

Doskonały. Dziękuję Ci. Przez większą część tej historii zajmowałem się informatyką, ale „plotkarskie” szczegóły tego, jak to się stało, nie były czymś, na czym się skupiłem. Dobrze widzieć szlak.
— Ken Ingram,

55

Najważniejsze rzeczy, które definiuje POSIX 7

  1. C API

    Znacznie rozszerza ANSI C o takie rzeczy jak:

    • więcej operacji na plikach: mkdir, dirname, symlink, readlink, link(hardlinki), poll(), stat, sync,nftw()
    • Sposób i nici: fork, execl, wait, pipe, semaphors sem_*, wspólna pamięć ( shm_*) kill, parametrów harmonogramu ( nice, sched_*) sleep, mkfifo,setpgid()
    • sieć: socket()
    • Zarządzanie pamięcią: mmap, mlock, mprotect, madvise,brk()
    • narzędzia: wyrażenia regularne ( reg*)

    Te interfejsy API określają również podstawowe koncepcje systemu, od których są zależne, np. forkWymagają koncepcji procesu.

    Wiele wywołania systemowe Linux istnieć w celu realizacji określonej funkcji POSIX API C i uczynić Linux zgodny np sys_write, sys_read... Wiele z tych syscalli również specyficzne dla Linuksa rozszerzeń jednak.

    Główna implementacja pulpitu Linux: glibc, który w wielu przypadkach zapewnia płytkie opakowanie dla wywołań systemowych.

  2. Narzędzia CLI

    Np: cd, ls, echo, ...

    Wiele narzędzi to bezpośrednie interfejsy powłoki dla odpowiedniej funkcji API C, np mkdir.

    Główne Linux realizacja pulpit: GNU Coreutils dla małych, oddzielnych Projekt GNU dla tych dużych: sed, grep, awk, ... Niektóre narzędzia CLI są realizowane przez Bash jako wbudowanych wtyczek .

  3. Język powłoki

    Na przykład, a=b; echo "$a"

    Główne implementacje pulpitu Linux: GNU Bash .

  4. Zmienne środowiska

    Np .: HOME, PATH.

    PATH semantyka wyszukiwania jest określona , w tym sposóbPATH , w jaki ukośniki uniemożliwiają wyszukiwanie .

  5. Status wyjścia z programu

    ANSI C mówi 0lub EXIT_SUCCESSdla sukcesu, EXIT_FAILUREdla niepowodzenia i pozostawia zdefiniowaną resztę implementacji.

    POSIX dodaje:

    • 126: znaleziono polecenie, ale nie można go wykonać.

    • 127: nie znaleziono polecenia.

    • > 128: zakończone sygnałem.

      Ale wydaje się, że POSIX nie określa 128 + SIGNAL_IDreguły używanej przez Bash: Domyślny kod wyjścia po zakończeniu procesu?

  6. Wyrażenie regularne

    Istnieją dwa typy: BRE (podstawowy) i ERE (rozszerzony). Podstawowy jest przestarzały i jest przechowywany tylko po to, by nie łamać interfejsów API.

    Są one implementowane przez funkcje C API i używane w narzędziach CLI, np. grepDomyślnie akceptują BRE, a ERE z -E.

    Na przykład: echo 'a.1' | grep -E 'a.[[:digit:]]'

    Ważna implementacja Linuksa: glibc implementuje funkcje w regex.h, których programy grepmogą używać jako backend.

  7. Struktura katalogu

    Np /dev/null,/tmp

    Linux FHS znacznie rozszerza POSIX.

  8. Nazwy plików

    • / jest separatorem ścieżki
    • NUL nie może być użyty
    • .jest cwd, ..rodzic
    • przenośne nazwy plików
      • użyj maksymalnie 14 znaków i 256 dla pełnej ścieżki
      • może zawierać tylko: a-zA-Z0-9._-

    Zobacz także: https://stackoverflow.com/questions/18550253/what-is-posix-compliance-for-filesystem

  9. Konwencje API narzędzi wiersza poleceń

    Nieobowiązkowe, używane przez POSIX, ale prawie nigdzie indziej, zwłaszcza nie w GNU. Ale to prawda, jest zbyt restrykcyjne, np. Tylko flagi z jedną literą (np. -a), Brak podwójnych długich łączników (np --all.).

    Kilka powszechnie stosowanych konwencji:

    • - oznacza standardowe wejście, w którym oczekiwany jest plik
    • --kończy flagi, np. ls -- -laby wyświetlić katalog o nazwie-l

    Zobacz także: https://stackoverflow.com/questions/8957222/are-there-standards-for-linux-command-line-switches-and-arguments

  10. „POSIX ACL” (listy kontroli dostępu), np. Używane jako backend dla setfacl.

    Zostało to wycofane, ale zostało zaimplementowane w kilku systemach operacyjnych, w tym w systemie Linux zsetxattr .

Kto jest zgodny z POSIX?

Wiele systemów ściśle przestrzega POSIX, ale niewiele z nich jest certyfikowanych przez Open Group, która utrzymuje ten standard. Godne uwagi certyfikowane obejmują:

Większość dystrybucji Linuksa jest bardzo zgodna, ale nie ma certyfikatu, ponieważ nie chcą płacić za sprawdzenie zgodności. Inspur K-UX i Huawei EulerOS to dwa certyfikowane przykłady.

Oficjalna lista certyfikowanych systemów znajduje się na stronie : https://www.opengroup.org/openbrand/register/, a także na stronie wiki .

Windows

System Windows wdrożył POSIX w niektórych swoich profesjonalnych dystrybucjach.

Ponieważ była to funkcja opcjonalna, programiści nie mogli na niej polegać w większości aplikacji dla użytkowników końcowych.

Wsparcie zostało wycofane w Windows 8:

W 2016 r. Ogłoszono nowy oficjalny interfejs API podobny do systemu Linux o nazwie „Windows Subsystem for Linux”. Obejmuje wywołania systemowe Linux, uruchamianie ELF, części /procsystemu plików, Bash, GCC, (TODO prawdopodobnie glibc?) apt-getI więcej: https://channel9.msdn.com/Events/Build/2016/P488, więc uważam, że to pozwoli Windowsowi uruchomić wiele, jeśli nie wszystkie, POSIX. Jednak koncentruje się na programistach / wdrożeniach zamiast na użytkownikach końcowych. W szczególności nie było planów zezwolenia na dostęp do GUI systemu Windows.

Przegląd historyczny oficjalnej zgodności Microsoft POSIX: http://brianreiter.org/2010/08/24/the-sad-history-of-the-microsoft-posix-subsystem/

Cygwin jest znanym projektem firmy GPL, który „zapewnia znaczną funkcjonalność interfejsu API POSIX” dla systemu Windows, ale wymaga „przebudowania aplikacji ze źródła, jeśli chcesz, aby działała w systemie Windows”. MSYS2 to pokrewny projekt, który wydaje się dodawać więcej funkcji na Cygwin.

Android

Android ma własną bibliotekę C (Bionic), która nie w pełni obsługuje POSIX od Androida O: https://stackoverflow.com/questions/27604455/is-android-posix-compatible

Poziom bonusowy

Linux Standard Base rozszerza POSIX.

Użyj indeksów innych niż ramki, są one znacznie bardziej czytelne i możliwe do przeszukiwania: http://pubs.opengroup.org/onlinepubs/9699919799/nfindex.html

Pobierz pełną wersję zip stron HTML do grepping: https://stackoverflow.com/questions/453993/is-there-a-listing-of-the-posix-api-functions/45832939#45832939


Pytanie dotyczyło POSIX i SUS, ale ta odpowiedź w ogóle nie wspomina o SUS ...
— Kidburla

1
@Kidburla świetna okazja, aby dodać własną odpowiedź i zdobyć przedstawiciela :-) (lub edytuj go w moim i daj mi
— powtórkę


@phuclv dzięki, dodałem to do odpowiedzi.
— Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

16

POSIX jest standardem przenośnego systemu operacyjnego. Opisuje niektóre narzędzia, interfejsy API i usługi, które zgodny system operacyjny musi zapewnić oprogramowaniu (na przykład gniazda, operacje we / wy plików i wątki), a także konwencje, w jaki sposób należy je wywoływać z programu.

Chodzi o to, że program napisany dla jednego systemu operacyjnego zgodnego z POSIX byłby łatwiejszy do przeniesienia do innego systemu zgodnego z POSIX niż między systemami niezgodnymi z POSIX. Dlatego znacznie łatwiej jest przenieść aplikację z, powiedzmy, FreeBSD na Linuksa, niż przenieść ją z FreeBSD na Windows (chociaż Windows rzekomo obsługuje podzbiór POSIX).


14

POSIX jest podzbiorem UNIX, który ma na celu objęcie różnych środowisk uniksowych dla innych systemów operacyjnych; pierwotnie obejmowało środowiska takie jak Eunice dla VMS, osobowość POSIX systemu Windows NT oraz domenę / system operacyjny Apollo. Można go traktować jako standardowy interfejs API do przenoszenia dla podzbioru usług systemu operacyjnego, których zachowanie jest wspólne dla systemów Unix i innych niż Unix. Więcej informacji można znaleźć na stronie http://standards.ieee.org/develop/wg/POSIX.html .


Przeczytałem o tym teraz więcej i na pewno wydaje się, że Uinx był kurczakiem, a POSIX był jajkiem .. ale zastanawiam się, czy UNIX nadal rządzi kurnikiem .. tj. Czy POSIX ma teraz swoje własne życie, i UNIX musi być zgodny z POSIX? ... btw. wygląda na to, że nazwa POSIX została skodyfikowana przez Richarda Stallmana ....
— Peter.O

@ fred.bear: Krótka odpowiedź: UNIX (znak towarowy) musi być zgodny z POSIX; Unix (produkt) był główną podstawą POSIX; jednorożce (rodzina systemów operacyjnych) w większości są zgodne, ale mają więcej wspólnego. Zobacz: Czy Linux jest Uniksem? i Czy Mac OS X, UNIX? do powiązanych dyskusji.
— Gilles,

@ Fred-Bear Wielu ludzi twierdzi, że standard POSIX jest obecnie kierowany przez społeczność rozwoju jądra Linuksa, które (jeśli jest prawdziwa) IMHO nie jest dobrą rzeczą ...
— sakisk

1
@faif Nigdy tego nie słyszałem i uważam to za mało prawdopodobne, czy możesz opublikować referencję?
— penguin359 28.04.11

2
@Gilles Open Group, właściciel znaku towarowego UNIX®, odpowiada również za certyfikację i specyfikację UNIX®, którą nazywają specyfikacją Single UNIX lub SUS. POSIX został opracowany przez IEEE, które nie są odpowiedzialne za UNIX®. Od 2001 r. Zostały opracowane głównie w synchronizacji, ale technicznie jest to SUS, który jest teraz w wersji 4, która zdefiniowała UNIX®.
— penguin359 28.04.11
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.