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.