Was macht ein Betriebssystem „Unix-like“?


20

Ich stoße auf vielen Websites häufig auf den Begriff "Unix-like".

Es gibt keinen Standard; es ist nur so, wie es sich verhält.

Aber wenn ich einen Kernel von Grund auf neu entwickeln würde, was würde ihn dann als "unixartig" bezeichnen?

Was sind im Grunde die Dinge, die geschriebenen Code wie Unix machen?


Antworten:


15

Es gibt keinen Standard; es ist nur so, wie es sich verhält.

Ich glaube, dass die meisten "Unix-ähnlichen" Betriebssysteme sehr ernsthafte Anstrengungen unternehmen, um den POSIX-Standard einzuhalten , der von der Open Group überwacht wird, die auch die Single UNIX-Spezifikation kontrolliert, die ein "echtes UNIX" definiert. Ersteres ist der Kern des Späten.

Es gibt also tatsächlich einen Standard, der die Praktikabilität von Unix-ähnlichen Betriebssystemen definiert. Schauen Sie sich die Liste der "vollständig" und "meist" kompatiblen Betriebssysteme am Ende des Wikipedia-Artikels über POSIX an.

Es gibt einige offensichtliche Gründe, warum Linux von der Single Unix Specification (SUS) möglicherweise nicht als vollständig kompatibel oder zertifizierbar eingestuft wird. Der Wikipedia-Artikel fasst die Spezifikation folgendermaßen zusammen:

SUSv3 umfasst insgesamt 3700 Seiten, die thematisch in vier Hauptteile unterteilt sind:

Basisdefinitionen (XBD) - Eine Liste der in den Spezifikationen verwendeten Definitionen und Konventionen sowie eine Liste der C-Header-Dateien, die von kompatiblen Systemen bereitgestellt werden müssen. Insgesamt werden 84 Header-Dateien bereitgestellt.

Shell und Dienstprogramme (XCU) - eine Liste von Dienstprogrammen und eine Beschreibung der Shell, sh. Insgesamt sind 160 Versorgungsunternehmen angegeben.

System Interfaces (XSH) - Enthält die Spezifikation verschiedener Funktionen, die als Systemaufrufe oder Bibliotheksfunktionen implementiert sind. Insgesamt sind 1123 Systemschnittstellen spezifiziert.

Begründung (XRAT) - die Erklärung hinter dem Standard.

Die Standardbenutzerbefehlszeile und -skriptoberfläche ist die POSIX-Shell, eine Erweiterung der Bourne-Shell, die auf einer früheren Version der Korn-Shell basiert.

Andere Programme, Dienste und Dienstprogramme auf Benutzerebene umfassen awk, echo, ed, vi und Hunderte anderer. Erforderliche Dienste auf Programmebene umfassen grundlegende E / A-Dienste (Datei-, Terminal- und Netzwerkdienste).

Eine Testsuite begleitet den Standard. Es heißt PCTS oder POSIX Certification Test Suite.

Darüber hinaus enthält SUS die Spezifikation CURSES (XCURSES), in der 372 Funktionen und 3 Header-Dateien angegeben sind. Insgesamt spezifiziert SUSv3 1742 Schnittstellen.

Dies bezieht sich offensichtlich speziell auf viele Userland-Komponenten (wie die Shell), die einfach nicht Teil des Linux-Kernels sind. Linux.org et. al. kann den Kernel allein zertifizieren lassen - in diesem Sinne handelt es sich überhaupt nicht um ein Betriebssystem. Sie könnten natürlich versuchen, ein bestimmtes System mithilfe des Kernels zu zertifizieren, aber dies wäre angesichts des allgemeinen Verteilungsschemas bedeutungslos: Der Kernel und die Personen, die ihn verwalten, sind unabhängig von den Personen, die den Userland Core (GNU) verwalten. Sie sind unabhängig von den Leuten, die die aktuell installierten Betriebssystemdistributionen (Debian, Fedora usw.) verwalten.

Ich nehme an, Debian oder Fedora könnten sich selbst am Zertifizierungsprozess beteiligen (z. B. könnte RedHat Enterprise zu einem "zertifizierten Unix" werden), aber dies wirft die Frage auf, ob dies tatsächlich wünschenswert ist. Ich gehe davon aus, dass der Hauptgrund für SUS-Systeme darin besteht, für solche Systeme geschriebene Software (im kommerziellen Maßstab, nicht für Endverbraucher) zu verwenden, was einfach nicht die Linux-Nische ist - Leute, die dies tun, zahlen Tausende von Dollar pro Lizenz für das Betriebssystem, einschließlich der Lose Unterstützung usw., weil sie auch Zehntausende oder Hunderttausende Dollar pro Lizenz für jede zusätzliche Software zahlen, die sie auf dem System ausführen möchten. Linux und die anderen Ausreißer haben andererseits Designziele verfolgt, die über die reine Compliance für kommerzielle Zwecke hinausgehen, und dafür gibt es verschiedene Beispiele, zhttp://en.wikipedia.org/wiki/STREAMS ):

STREAMS war für die Konformität mit den Single UNIX Specification-Versionen 1 (UNIX 95) und 2 (UNIX 98) erforderlich. Aufgrund der Weigerung der BSD- und Linux-Entwickler, STREAMS bereitzustellen, wurde [Zitieren erforderlich] für POSIX als optional markiert Compliance durch die Austin Group in Version 3 (UNIX 03).

Eine interessante Unterkunft, die den Punkt hervorhebt, dass SUS und The Open Group! = Linux,! = BSD usw.


2
Beachten Sie, dass sich die Zertifizierung von der Einhaltung unterscheidet. Zum Beispiel ist es für die Linux Foundation aufgrund der Kosten und der Entwicklungsrate unpraktisch, jede Kernelversion zertifizieren zu lassen. Das heißt aber nicht, dass es (der Kernel) nicht vollständig oder größtenteils konform ist.
Strugee

2
@strugee Der POSIX-Standard gilt nicht für den Kernel oder kümmert sich nicht um ihn. Standardisiert sind Befehle (shell, ls, cat, ...) und APIs (was die libc bereitstellt, Threads). Was eine Linux-basierte Distribution zu Unix macht, sind hauptsächlich GNU-Komponenten (Befehle und glibc). Der Kernel liegt außerhalb des Geltungsbereichs der Zertifizierung / Konformität.
Juli

1
Nicht zu widerlegen, sondern klar zu stellen (ich wiederhole dies aus meinem Kommentar zur Antwort von illuminÉ): Die Standards sind "was", der Kernel ist "wie". Ich habe nur Teile der Standards gelesen, aber ich glaube nicht, dass sie sich auf einen "Kernel" beziehen (es ist nur das "System"). Also WRT-Zertifizierung und Konformität: Es ist "was" ein Kernel / Betriebssystem tut, nicht "wie" es tut.
Goldlöckchen

3
@strugee Die Single Unix Specification gilt für Userland Interfaces. Der Kernel ist natürlich irgendwann involviert, aber mein Kommentar bezog sich auf Ihre Aussage, dass die Linux Foundation den Kernel zertifizieren lassen soll. Ein Kernel kann nicht zertifiziert werden, es fehlen alle Komponenten, mit denen der Zertifizierungsprozess interagiert. Was zertifiziert werden kann (oder zumindest versucht wird, so konform wie möglich zu sein), ist ein Betriebssystem, dh, was in der Linux-Community allgemein als Distribution bezeichnet wird.
Juli

2
@strugee Das wäre ein möglicher Grund, ist aber nicht so sehr der schnelle Rollover, sondern die Tatsache, dass keine Verpflichtung besteht, sicherzustellen, dass keine inkompatiblen Änderungen hinzugefügt werden. Zum Beispiel ist Solaris 10 kompatibel. Garantieren Sie diese Kompatibilität. Seit der Unix03-Zertifizierung gab es ein Dutzend Updates. Darüber hinaus versuchen die Gnu / Linux-Kombinationen so konform zu sein, wie sie können / wollen, aber nicht mehr. (Fast) nie zertifiziert werden versucht , weil es sowohl ein teures Verfahren , und es wäre ohnehin nicht erfüllen , da einige Anforderungen fehlen (absichtlich) und einige Erweiterungen sind nicht kompatibel
jlliagre

12

Um die erste Antwort zu POSIX zu erweitern und zu verstehen, was "Unix-like" bedeutet, sollte man zunächst versuchen zu verstehen, was genau UNIX ist. In der Dokumentation der Open Group , der das Unix-Warenzeichen gehört, finden Sie Details zur Entwicklung der Single-UNIX-Spezifikation - hier UNIX03 :

Der UNIX 03-Produktstandard ist das Zeichen für Systeme, die der Version 3 der Single UNIX Specification entsprechen. Es handelt sich um eine erheblich verbesserte Version des UNIX 98-Produktstandards. Die obligatorischen Verbesserungen umfassen die Anpassung an die Programmiersprache ISO / IEC 9989: 1999 C, IEEE Std 1003.1-2001 und ISO / IEC 9945: 2002. Diese Produktnorm enthält die folgenden verbindlichen Produktnormen: Internationalisierte Systemaufrufe und Bibliotheken Extended V3, Befehle und Dienstprogramme V4, C Language V2 und Internationalisierte Terminalschnittstellen.

UNIX98 :

Der UNIX 98-Produktstandard ist eine erheblich erweiterte Version des UNIX 95-Produktstandards. Die obligatorischen Verbesserungen umfassen (1) Threads-Schnittstellen, (2) Multibyte Support Extension (MSE), (3) Large File Support, (4) Dynamic Linking, (5) Änderungen, um Abhängigkeiten oder Einschränkungen der Hardwaredatenlänge zu entfernen, und (6 ) Änderungen im Jahr 2000. Darüber hinaus sind die folgenden optionalen Erweiterungen enthalten: Softwareverwaltungsfunktionen und eine Reihe von APIs für die Echtzeitunterstützung. Diese Produktnorm enthält die folgenden verbindlichen Produktnormen: Internationalisierte Systemaufrufe und Bibliotheken Extended V2, Befehle und Dienstprogramme V3, Sprache C, Transport Service (XTI) V2, Sockets V2 und Internationalisierte Terminalschnittstellen. Darüber hinaus entspricht es möglicherweise auch dem Produktstandard für die Softwareverwaltung.

UNIX95 (mein Schwerpunkt):

Diese Produktnorm definiert eine konsolidierte Plattform für die Unterstützung einer Vielzahl von Anwendungen, die ursprünglich für eines der Betriebssystemklassen entwickelt wurden, die sich zusätzlich zu den bereitgestellten Funktionen aus dem UNIX-Betriebssystemcode und / oder den ursprünglich von AT & T entwickelten Schnittstellen ableiten nach dem Basisproduktstandard. Es hat einen größeren Anwendungsbereich als Base. Diese Produktnorm enthält die folgenden Produktnormen: Erweiterte internationalisierte Systemaufrufe und Bibliotheken, Befehle und Dienstprogramme V2, Sprache C, Transportdienst (XTI), Sockets und internationalisierte Terminalschnittstellen.

Server - Versionen des Standard Add Internet Servers und IPv6 in einigen Fällen.

Daher sehen wir natürlich den Verweis auf AT & T Bell Laboratories und die C-Sprache ist das Kernstück von UNIX: die C-Sprache, die modularen Basistools und die Shell sowie die Art und Weise, wie der Kernel, das Dateisystem und andere wichtige Betriebssystemkomponenten entworfen und implementiert wurden .

Bildbeschreibung hier eingeben

Bildbeschreibung hier eingeben

Hier wird das Buch Das Design des UNIX-Betriebssystems von Maurice J. Bach zu einer unschätzbaren Lektüre, da es sich an dieser Stelle um historische Themen handelt. Natürlich hängt dies auch mit anderen Erfindungen wie der C-Sprache zusammen. C wurde von AT & T Bell entwickelt, um Unix mit einer Sprache zu implementieren, die so schnell wie Assembler sein kann, aber auf verschiedene Hardware portierbar ist. Viele POSIX-Anwendungen sind eine Erweiterung von Standard C.

In Bezug auf den Kernel selbst finden Sie häufig ein konzeptionelles Diagramm wie dieses, um zu veranschaulichen, worum es bei einem UNIX-Kernel traditionell ging:

Bildbeschreibung hier eingeben

Hier einige Auszüge aus Herrn Bachs klassischem Buch (1986), in dem die Grundlagen des UNIX-System-V-Kernels erörtert werden:

Sie [Anwendungssubsysteme und -programme] verwenden jedoch alle Dienste auf niedrigerer Ebene, die letztendlich vom Kernel bereitgestellt werden, und sie greifen über die Reihe von Systemaufrufen auf diese Dienste zu. Es gibt ungefähr 64 Systemaufrufe in System V, von denen weniger als 32 häufig verwendet werden. Sie verfügen über einfache Optionen, die ihre Verwendung vereinfachen, dem Benutzer jedoch viel Leistung bieten. Die Menge der Systemaufrufe und die internen Algorithmen, die sie implementieren, bilden den Kernel-Body [...]

Die beiden Hauptkomponenten sind das Datei-Subsystem und das Prozess-Subsystem.

Dateien werden in Dateisystemen organisiert, die als logische Einheiten behandelt werden. Ein physisches Gerät wie eine Festplatte kann mehrere logische Geräte (Dateisysteme) enthalten. Jedes Dateisystem verfügt über einen Superblock, der die Struktur und den Inhalt des Dateisystems beschreibt, und jede Datei in einem Dateisystem wird durch einen Inode beschrieben, der die Attribute der Datei angibt. Systemaufrufe, die Dateien manipulieren, tun dies über Inodes. [und der Pufferpool]

[...] Es gibt zwei Versionen des Inodes: die Datenträgerkopie, die die Inode-Informationen speichert, wenn die Datei nicht verwendet wird, und die Incore-Kopie, die Informationen zu aktiven Dateien aufzeichnet.

Die Ausführung von Benutzerprozessen auf UNIX-Systemen ist in zwei Ebenen unterteilt: Benutzer und Kernel. Wenn ein Prozess einen Systemaufruf ausführt, wechselt der Ausführungsmodus des Prozesses vom Benutzermodus in den Kernelmodus : Das Betriebssystem wird ausgeführt und versucht, die Benutzeranforderung zu bearbeiten. [...]

Die Philosophie des UNIX-Systems besteht darin, Betriebssystemprimitive bereitzustellen, mit denen Benutzer kleine, modulare Programme schreiben können, die als Bausteine ​​für die Erstellung komplexerer Programme verwendet werden können. Ein solches für Shell-Benutzer sichtbares Grundelement ist die Fähigkeit, E / A umzuleiten .

[...] Zusätzlich zur Bearbeitung von Systemaufrufen führt der Kernel die allgemeine Buchhaltung für die Benutzergemeinschaft durch, steuert die Prozessplanung, verwaltet die Speicherung und den Schutz von Prozessen im Hauptspeicher, fängt Interrupts auf, verwaltet Dateien und Geräte und kümmert sich um Systemfehler Bedingungen.

Wenn Sie sich für die verschiedenen Implementierungen von Kerneln in Unix-ähnlichen Betriebssystemen interessieren, können Sie sich auch die FreeBSD- Implementierung (4.4BSD) oder den Mach-Kernel ansehen oder sich diesen Vergleich ihrer Funktionen ansehen .

Je mehr Sie über das Design von UNIX wissen, desto besser verstehen Sie, was in der folgenden Abbildung über die Herkunft von UNIX und seine Geschichte geschehen ist . Herr Bach spricht in seinem Buch hauptsächlich über System V, aber auch über BSD:

Bildbeschreibung hier eingeben

Es gibt mehr, als die Augen wirklich sehen. Zum Beispiel ist Mac OSX UNIX03- zertifiziert, aber sehen Sie, dass es mit einem der reinen UNIXe verbunden ist (meistens in Rot)?

Bildbeschreibung hier eingeben

Oben sehen Sie, wie BSD, GNU, Microsoft und verschiedene Personen zu diesem Universum beigetragen haben. Obwohl GNU und letztendlich Linux keine direkte Linie zu UNIX haben, sehen Sie, dass GNU eine Bemühung ist, die Tools und Software von kommerziellem UNIX, die geschlossen wurden, in der Open-Source-Welt neu zu konstruieren. Ein Blick auf die von GNU gepflegte Software gibt beispielsweise einen Eindruck von den ersten Prototypen von Apps und Bibliotheken.

Licensing Kriege spielten eine Rolle in der Entwicklung (und Stagnation manchmal) von UNIX. Sie können sofort sehen, dass UNIXe nach Lizenztypen sortiert sind - Closed vs. BSD ( BSD ermöglicht es , den Code zu Closed Source zu machen ... siehe OSX) und GPL , wodurch Linux und GNU sich in der Copyleft-Welt ergänzen können. Hier ist die klassische Karte des Linux-Kernels, die ursprünglich von Linus Torvalds entwickelt wurde. Sie zeigt auch, was ein Kernel in einem Unix-ähnlichen Betriebssystem "kann":

Bildbeschreibung hier eingeben

Dies deutet auf die Idee hin, dass ein " Kernel " -Designtyp nicht das ist, was den UNIX-Standard ausmacht oder was ein Unix-ähnliches Betriebssystem definiert. Dies wird durch die Tatsache belegt, dass viele Unix-ähnliche Betriebssysteme entweder einen monolithischen Kernel oder einen Mikrokernel haben können - monolithisch war der klassische Designtyp für UNIX. Selbst in reinen UNIX-Umgebungen verfügt HPUX über einen monolithischen Kernel, während AIX einen Mikrokernel verwendet. Bei dieser Debatte über Design geht es um Leistung und nicht um Unix-Abstammung oder Identität. Andererseits gibt es einen traditionellen konzeptionellen Ansatz für die Bereitstellung von Diensten für Software, den Umgang mit Dateisystemen usw. unter UNIX / Unix-ähnlichen Betriebssystemen.

Ich glaube, dass solche Überlegungen dem OS-Teil Ihrer Frage einen Kontext hinzufügen werden.


3
+1 Einige gute Punkte hier: 1) Über die Beziehung zwischen C und Unix (um hinzuzufügen: C wurde von AT & T Bell entwickelt, um Unix mit einer Sprache zu implementieren, die so schnell wie Assembler sein kann, aber auf verschiedene Hardware und viel POSIX portierbar ist ist eine Erweiterung zu Standard C). 2) Das Kernel-Design ist unabhängig von Standards. Standards sind "was", Kernel sind "wie".
Goldlöckchen

1
@goldilocks Vielen Dank, ich habe Ihren Kommentar zu C verbatim hinzugefügt. Ich habe versucht zu verdeutlichen, dass Kernel-Überlegungen nichts mit dem Standard zu tun haben. Die Frage geht davon aus, dass der unix-artige Kernel etwas Bestimmtes hat, aber nicht. Andererseits könnten historisch gesehen die ersten Unix-Kernel so und so gewesen sein. Mein Verständnis ist begrenzt, aber ich würde annehmen, dass sich die Kernel stark verändert haben, weil sich die Hardware seit den 70ern stark verändert hat. Klar ist, dass der Kernel kein Unix / Unix-like definiert, obwohl der Linux-Kernel GNU / Linux oder Linux klar definiert.
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.