Ist POSIX normativ oder deskriptiv?

Ist POSIX normativ oder deskriptiv?

Ist POSIX eine Beschreibung, wie Anwendungen in der Vergangenheit jeden spezifischen Teil von UNIX implementiert haben, oder ist es eine verbindliche Norm, wie UNIX implementiert werden muss?

Wenn beschreibend, wären nur die Funktionen gültig, die allen enthaltenen Implementierungen gemeinsam sind. Wenn eine Implementierung eine Funktion nicht implementiert hat, ist diese Funktion „undefiniert“.

Falls normativ: Auf welchem ​​theoretischen Rahmen basiert es? Mathematik? C-Sprache? Erfahrung?

Antwort1

Es ist normativvon Rechts wegen, aber meist beschreibendde facto.

POSIX ist eine Reihe von Spezifikationen, mit denen Implementierungen verglichen werden können. Dabei werden sowohl Implementierungen berücksichtigt, die zum Zeitpunkt der Veröffentlichung des Dokuments bereits vorhanden sind, als auch zukünftige Implementierungen. Es handelt sich also um normativ.

In der Praxis begann POSIX hauptsächlich als gemeinsame Teilmenge bestehender Implementierungen. In diesem Sinne ist es also größtenteils beschreibend. Aber POSIX schreibt manchmal neues Verhalten vor. Am häufigsten wurden für Funktionen, die in vielen Implementierungen vorhanden waren, aber unterschiedliche Schnittstellen hatten (Funktionsnamen, Befehlszeilenoptionen usw.), mehrere Funktionen und Dienstprogramme eingeführt, wie z. B.pax(ein Ersatz für tarund cpio, die in den verschiedenen Unix-Varianten sehr unterschiedlich waren) und verschiedeneposix_xxxFunktionen. POSIX führte auch neue Konstanten- und Kommandozeilenoptionen ein; zum Beispiel fürps, „Die -AOption ist äquivalent zu BSD -gund SVID -e. Da sich die beiden Systeme unterschieden, wurde ein mnemonischer Kompromiss gewählt.“. In den Begründungsabschnitten wird oft erklärt, warum diese oder jene Funktion aufgenommen wurde. Oft wird erwähnt, welche Implementierungen eine Funktion bereits hatten oder warum eine Wahl zwischen inkompatiblen Implementierungen getroffen oder nicht getroffen wurde.

Antwort2

Die Absicht von POSIX besteht darin, bestehendes Verhalten zu beschreiben und historisches Verhalten nicht zu unterbrechen (nicht historisches UNIX nicht-konform zu machen), es sei denn, das historische Verhalten könnte bereits als eindeutiger historischer Fehler angesehen werden.

Die weitere Absicht von POSIX ist nicht, eigene Erfindungen einzuführen. Wenn sich herausstellt, dass eine sogenannte eigene Erfindung erforderlich ist (weil vorhandene Implementierungen für eine Standardisierung nicht geeignet sind), werden die Ideen des POSIX-Komitees mit den Autoren verschiedener UNIX- (oder Programm-)Versionen diskutiert, um die beste Lösung zu finden. Aus einer solchen Diskussion resultieren häufig neue Implementierungen, die den endgültigen Vorschlag bereits zum Zeitpunkt ihrer Niederschrift unterstützen.

Es gibt einige Ausnahmen. POSIX ist beispielsweise auf eine Weise definiert getpgrp(), setpgrp()die im Konflikt mit den BSD-Schnittstellen steht, die es bereits 10 Jahre zuvor gab. POSIX ist auf eine Weise definiert, getline()die fexec()völlig inkompatibel mit Implementierungen ist, die fast 30 Jahre lang existierten, bevor die inkompatiblen Schnittstellen aus der GNU libc eingeführt wurden.

Stellt sich heraus, dass vorhandene Implementierungen nicht übereinstimmen, wird entschieden, welche Variante verwendet wird (oder ob eine Mischung aus vorhandenen unterschiedlichen Implementierungen eingeführt wird) und ein POSIX-spezifischer Name eingeführt. Dies geschah z. B. bei den Thread-Schnittstellen, wo posix_xxx()Funktionen eingeführt wurden, die der vorherigen Referenzimplementierung von Roger Faulkner (Sun Microsystems) sehr ähnlich sind.

verwandte Informationen