Was genau ist POSIX?

139

Ich sehe POSIX oft und überall erwähnt, und ich hatte angenommen, es sei der Grundstandard für UNIX. Bis ich auf einer Wikipedia-Seite den folgenden Auszug bemerkte: The Open Group

Die Open Group ist am bekanntesten als Zertifizierungsstelle für die Marke UNIX und deren Veröffentlichung des technischen Standards Single UNIX Specification , der die POSIX-Standards erweitert und die offizielle Definition eines UNIX-Systems darstellt .

Wenn die offizielle Definition eines UNIX-Systems eine Erweiterung von POSIX ist, was genau ist dann POSIX? ,,, Es scheint sicherlich ein Prüfstein der UNIX-Welt zu sein, aber ich weiß nicht, wie es in das Gesamtbild passt.

Peter.O
quelle
2
SUS ist die offizielle Definition von UNIX, da The Open Group, nicht die IEEE, die Marke UNIX besitzt. Siehe meine Antwort unten.
Pinguin359

Antworten:

125

POSIX war 1988 erstmals ein Standard, lange vor der Single-UNIX-Spezifikation. Es war einer der Versuche, alle verschiedenen UNIX-Forks und UNIX-ähnlichen Systeme zu vereinheitlichen. POSIX ist ein IEEE-Standard, aber da das IEEE keine UNIX®-Marke besitzt, handelt es sich bei dem Standard nicht um UNIX®, obwohl er auf der zu diesem Zeitpunkt vorhandenen UNIX-API basiert. Der erste Standard POSIX.1 ist offiziell als IEEE std 1003.1-1988 bekannt. [ 1 ] IEEE hat eine erhebliche Gebühr erhoben, um eine Kopie des Standards zu erhalten.

Die Open Group veröffentlichte 1997 die Single UNIX Specification (SUSv2) auf der Grundlage der IEEE-Arbeit des POSIX-Standards. SUSv3 wurde 2001 von einer gemeinsamen Arbeitsgruppe von IEEE und The Open Group, der Austin Group, veröffentlicht. SUSv3 ist auch bekannt als POSIX: 2001 [ 2 ]. Es gibt jetzt auch POSIX: 2004 und POSIX: 2008, die den Kern von SUSv4 bilden. Was UNIX® anbelangt, so ist UNIX® das, was der derzeit eingetragene Markeninhaber angibt. Seit 1994 ist das The Open Group.

Novell erwarb das UNIX®-Systemgeschäft von AT & T / USL, wo UNIX® geboren wurde. 1994 verkauften sie das Recht an der Marke UNIX® an X / Open [ 3 ], das jetzt als The Open Group bekannt ist. Anschließend verkauften sie den UNIX®-Quellcode als UNIXWARE® an SCO. [ 3 ] UNIX® selbst hat sich unter anderem aufgrund des Lizenzmodells von AT & T mehrmals [ 4 ] [ 5 ] verzweigt . Mit dem Kauf von UNIX® haben Sie die vollständige Quelle des Betriebssystems und die gesamte Toolkette für dessen Erstellung erhalten. Änderungen an der Quelle können von jedem, der eine Lizenz für UNIX® von AT & T besitzt, verteilt und verwendet werden. Die Lizenzgebühr lag bei Tausenden.

BSD war ein Projekt in Berkeley, bei dem das UNIX®-Betriebssystem um eine Reihe von Verbesserungen erweitert wurde. BSD-Code wurde unter einer viel liberaleren Lizenz veröffentlicht als der von AT & T. Im Gegensatz zur GPL, die das GNU-Projekt und Linux verwenden, erforderten sie weder eine Lizenzgebühr noch eine Anforderung, um mit dem Quellcode verbreitet zu werden. Dies hat dazu geführt, dass ein Großteil des BSD-Codes in verschiedenen kommerziellen UNIX-Gabeln enthalten war. Gegen 4.3BSD hatten sie den ursprünglichen AT & T UNIX®-Quellcode fast vollständig ersetzt. FreeBSD / NetBSD / OpenBSD sind alle Forks von 4.3BSD, die ein vollständiges Betriebssystem darstellen und keinen der ursprünglichen AT & T-Quellcodes enthalten. Sie haben auch kein Recht auf die Marke UNIX®, aber ein Großteil ihres Codes wird von kommerziellen UNIX-Betriebssystemen verwendet.

Linux wurde 1991 entwickelt, wurde aber im Gegensatz zu BSD von Grund auf neu entwickelt und verwendet das vorhandene GNU-Projekt, das eine Reinraumimplementierung eines Großteils des UNIX-Benutzerraums darstellt. Es implementiert einen Großteil von POSIX aus Kompatibilitätsgründen und ist im Design UNIX-ähnlich, hat jedoch nicht die enge Verbindung zu AT & T oder UNIX®, die die BSDs haben.

penguin359
quelle
1
Eine großartige Antwort. Alle (3) Antworten waren gut, aber diese war äußerst informativ (insbesondere nachdem sie von den anderen 2 vorbereitet wurden). genau das, was ich brauchte ... und danke für den Kommentar (unter dem Fragenkörper) zu SUS, ich verstehe ihn jetzt gut genug, danke ... (und ich habe nicht bemerkt, dass es nur ein Absatz war ... das war es auch interessant :)
Peter.O
2
@Mikel hoffentlich hilft meine Bearbeitung ein wenig
Pinguin359
1
Das ist eine fantastische Antwort dort @ Pinguin359!
Boehj
Hat jemand eine gute Vorstellung davon, wofür das X steht? Wenn es nur ein Suffix ist, um eine Beziehung zu Unix anzuzeigen, sollte es nicht Kleinbuchstaben sein?
Alex W
Ausgezeichnet. Danke. Ich habe einen Großteil dieser Geschichte mit dem Rechnen verbracht, aber die "klatschhaften" Details darüber, wie die Dinge passiert sind, waren nichts, worauf ich mich konzentrierte. Schön den Trail zu sehen.
Ken Ingram
55

Das Wichtigste, was POSIX 7 definiert

  1. C API

    Erweitert ANSI C in großem Maße mit Dingen wie:

    • mehr Dateioperationen: mkdir, dirname, symlink, readlink, link(Hardlinks) poll(), stat, sync,nftw()
    • Prozess und Threads: fork, execl, wait, pipe, Semaphoren sem_*, gemeinsam benutzter Speicher ( shm_*) kill, Scheduling - Parameter ( nice, sched_*), sleep, mkfifo,setpgid()
    • Vernetzung: socket()
    • Speicherverwaltung: mmap, mlock, mprotect, madvise,brk()
    • Dienstprogramme: reguläre Ausdrücke ( reg*)

    Diese APIs bestimmen auch zugrunde liegende Systemkonzepte, von denen sie abhängen, z. B. forkein Prozesskonzept.

    Viele Linux - Systemaufrufe existieren eine bestimmte POSIX - C - API - Funktion zu implementieren und Linux - konform machen, zum Beispiel sys_write, sys_read... Viele dieser syscalls haben auch Linux-spezifische Erweiterungen jedoch.

    Hauptimplementierung des Linux-Desktops: glibc, das in vielen Fällen nur einen flachen Wrapper für Systemaufrufe bereitstellt.

  2. CLI-Dienstprogramme

    Zum Beispiel: cd, ls, echo, ...

    Viele Dienstprogramme sind direkte Shell-Frontends für eine entsprechende C-API-Funktion, z mkdir.

    Wichtige Linux - Desktop - Implementierung: GNU Coreutils für die kleinen, separaten GNU - Projekte für die Großen: sed, grep, awk, ... Einige CLI - Dienstprogramme von Bash implementiert werden als Einbauten .

  3. Shell-Sprache

    Z.B, a=b; echo "$a"

    Wichtige Linux-Desktop-Implementierung: GNU Bash .

  4. Umgebungsvariablen

    Zum Beispiel: HOME, PATH.

    PATH Die Suchsemantik wird angegeben , einschließlich der Art und WeisePATH , wie Schrägstriche die Suche verhindern .

  5. Programm beenden Status

    ANSI C sagt 0oder EXIT_SUCCESSfür Erfolg, EXIT_FAILUREfür Misserfolg und lässt den Rest der Implementierung definiert.

    POSIX fügt hinzu:

    • 126: Befehl gefunden, aber nicht ausführbar.

    • 127: Befehl nicht gefunden.

    • > 128: durch ein Signal beendet.

      POSIX scheint jedoch nicht die 128 + SIGNAL_IDRegel anzugeben, die von Bash verwendet wird: Standard-Exit-Code, wenn der Prozess beendet wird?

  6. Regulären Ausdruck

    Es gibt zwei Arten: BRE (Basic) und ERE (Extended). Basic ist veraltet und wird nur beibehalten, um APIs nicht zu beschädigen.

    Diese werden von C-API-Funktionen implementiert und in allen CLI-Dienstprogrammen verwendet, z. B. grepakzeptiert standardmäßig BREs und EREs mit -E.

    Z.B: echo 'a.1' | grep -E 'a.[[:digit:]]'

    Hauptimplementierung von Linux: glibc implementiert die Funktionen unter regex.h, die Programme wie dieses grepals Backend verwenden können.

  7. Verzeichnisstruktur

    Zum Beispiel: /dev/null,/tmp

    Das Linux FHS erweitert POSIX erheblich.

  8. Dateinamen

    • / ist das Pfadtrennzeichen
    • NUL kann nicht verwendet werden
    • .ist cwd, ..Elternteil
    • tragbare Dateinamen
      • Verwenden Sie maximal 14 Zeichen und 256 Zeichen für den vollständigen Pfad
      • kann nur enthalten: a-zA-Z0-9._-

    Siehe auch: https://stackoverflow.com/questions/18550253/what-is-posix-compliance-for-filesystem

  9. API-Konventionen für Befehlszeilendienstprogramme

    Nicht obligatorisch, von POSIX verwendet, aber fast nirgendwo anders, insbesondere nicht in GNU. Es ist jedoch zu restriktiv, z. B. nur Kennzeichen für einzelne Buchstaben (z. B. -a), keine langen Versionen mit doppeltem Bindestrich (z --all. B. ).

    Einige weit verbreitete Konventionen:

    • - bedeutet stdin, wo eine Datei erwartet wird
    • --Beendet Flags, um zB ls -- -lein Verzeichnis mit dem Namen aufzulisten-l

    Siehe auch: https://stackoverflow.com/questions/8957222/are-there-standards-for-linux-command-line-switches-and-arguments

  10. "POSIX ACLs" (Access Control Lists), zB als Backend für setfacl.

    Dies wurde zurückgezogen, aber es wurde in mehreren Betriebssystemen implementiert, darunter in Linux mitsetxattr .

Wer entspricht POSIX?

Viele Systeme folgen POSIX genau, aber nur wenige sind tatsächlich von der Open Group zertifiziert, die den Standard beibehält. Bemerkenswerte zertifizierte sind:

Die meisten Linux-Distributionen sind sehr konform, aber nicht zertifiziert, da sie die Konformitätsprüfung nicht bezahlen möchten. Inspur's K-UX und Huawei's EulerOS sind zwei zertifizierte Beispiele.

Die offizielle Liste der zertifizierten Systeme finden Sie unter: https://www.opengroup.org/openbrand/register/ und auch auf der Wiki-Seite .

Windows

Windows hat POSIX auf einigen seiner professionellen Distributionen implementiert.

Da es sich um eine optionale Funktion handelte, konnten sich Programmierer bei den meisten Endbenutzeranwendungen nicht darauf verlassen.

Unterstützung wurde in Windows 8 veraltet:

2016 wurde eine neue offizielle Linux-ähnliche API namens "Windows Subsystem for Linux" angekündigt. Es enthält Linux - Systemaufrufe, ELF Lauf, Teile des /procDateisystems, Bash, GCC, (TODO glibc wahrscheinlich?), apt-getUnd mehr: https://channel9.msdn.com/Events/Build/2016/P488 so glaube ich, dass es ermöglicht Windows die Ausführung vieler, wenn nicht aller POSIX-Anwendungen. Es konzentriert sich jedoch auf Entwickler / Bereitstellung anstelle von Endbenutzern. Insbesondere war nicht geplant, den Zugriff auf die Windows-GUI zuzulassen.

Historischer Überblick über die offizielle Microsoft POSIX-Kompatibilität: http://brianreiter.org/2010/08/24/the-sad-history-of-the-microsoft-posix-subsystem/

Cygwin ist ein bekanntes GPL-Projekt von Drittanbietern, das "umfangreiche POSIX-API-Funktionen" für Windows bereitstellt, aber erfordert, dass Sie "Ihre Anwendung aus dem Quellcode neu erstellen, wenn Sie möchten, dass sie unter Windows ausgeführt wird". MSYS2 ist ein verwandtes Projekt, das neben Cygwin weitere Funktionen zu bieten scheint.

Android

Android verfügt über eine eigene C-Bibliothek (Bionic), die POSIX ab Android O nicht vollständig unterstützt: https://stackoverflow.com/questions/27604455/is-android-posix-compatible

Bonuslevel

Die Linux Standard Base erweitert POSIX weiter.

Verwenden Sie die Nicht-Frames-Indizes. Sie sind viel lesbarer und durchsuchbarer: http://pubs.opengroup.org/onlinepubs/9699919799/nfindex.html

Holen Sie sich eine vollständig komprimierte Version der HTML-Seiten zum Greifen: https://stackoverflow.com/questions/453993/is-there-a-listing-of-the-posix-api-functions/45832939#45832939

Ciro Santilli ist ein Schauspieler
quelle
Die Frage war über POSIX und SUS, aber diese Antwort erwähnt SUS überhaupt nicht ...
Kidburla
1
@Kidburla eine großartige Gelegenheit, Ihre eigene Antwort hinzuzufügen und einen Vertreter zu finden :-) (oder bearbeiten Sie sie in meiner und geben Sie mir einen Vertreter, hehe)
Ciro Santilli
@phuclv danke, das habe ich zur Antwort hinzugefügt.
Ciro Santilli
16

POSIX ist der Standard für tragbare Betriebssysteme. Es beschreibt bestimmte Dienstprogramme, APIs und Dienste, die ein kompatibles Betriebssystem für die Software bereitstellen muss (z. B. Sockets, Datei-E / A und Threading), sowie Konventionen, wie diese von einem Programm aus aufgerufen werden sollen.

Die Idee ist, dass ein Programm, das für ein POSIX-kompatibles Betriebssystem geschrieben wurde, leichter auf ein anderes POSIX-kompatibles Betriebssystem portiert werden kann als zwischen nicht POSIX-kompatiblen Betriebssystemen. Aus diesem Grund ist es viel einfacher, eine Anwendung von beispielsweise FreeBSD auf Linux zu portieren, als sie von FreeBSD auf Windows zu portieren (obwohl Windows angeblich eine Teilmenge von POSIX unterstützt).

Andrew Lambert
quelle
14

POSIX ist eine Untergruppe von UNIX, die verschiedene Unix-ähnliche Umgebungen für andere Betriebssysteme abdecken soll. Dies umfasste ursprünglich Umgebungen wie Eunice für VMS, die POSIX-Persönlichkeit von Windows NT und Apollo Domain / OS. Sie können es sich als Standard-Portabilitäts-API für eine Teilmenge von Betriebssystemdiensten vorstellen, deren Verhalten Unix und Nicht-Unix gemeinsam hat. Weitere Informationen finden Sie unter http://standards.ieee.org/develop/wg/POSIX.html .

Geekosaurier
quelle
Ich habe jetzt mehr darüber gelesen, und es scheint, dass Uinx das Huhn und POSIX das Ei war. Aber ich frage mich, ob UNIX immer noch den Schlafplatz regiert. und UNIX müssen POSIX entsprechen? ... übrigens. es scheint, dass der Name POSIX von Richard Stallman geprägt wurde ....
Peter.O
@ fred.bear: Kurze Antwort: UNIX (die Marke) muss POSIX entsprechen; Unix (das Produkt) war die Hauptbasis für POSIX; Unices (die Familie der Betriebssysteme) passen sich meistens an, haben aber mehr gemeinsam. Siehe Ist Linux ein Unix? und ist Mac OS X, UNIX? für verwandte Diskussionen.
Gilles
@ Fred-Bär Viele Leute argumentieren, dass der POSIX-Standard heutzutage von der Linux-Kernel-Entwickler-Community geleitet wird, was
meiner Meinung nach
1
@faif Ich habe das noch nie gehört und finde es unwahrscheinlich, kannst du eine Referenz posten?
Pinguin359
2
@Gilles Die Open Group, Inhaber der UNIX®-Marke, ist auch für die UNIX®-Zertifizierung und -Spezifikation verantwortlich, die sie als Single UNIX Specification oder SUS bezeichnen. POSIX wird vom IEEE entwickelt, das nicht für UNIX® zuständig ist. Seit 2001 wurden sie weitgehend synchron entwickelt, aber technisch gesehen ist es SUS, das jetzt in Version 4 UNIX® definiert.
Pinguin359