UNIX

EIN INSIDER-SYSTEM AUF DEM WEG ZUM STANDARD

15.02.1985

An dem Phänomen Unix kommt die DV-Welt heute auf kaum einem Gebiet des Rechnereinsatzes vorbei. Das Betriebssystem ist inzwischen für fast alle Mikro- und Minicomputer verfügbar und dringt auch in den Bereich der Großrechner vor. Es gibt mittlerweile keinen namhaften Rechnerhersteller mehr, der Unix nicht in seinem Produktspektrum anbietet. Während der Einsatzbereich in der Vergangenheit im wesentlichen in der Software-Entwicklung und im technisch-wissenschaftlichen Bereich lag, werden heute auf der Basis von Unix zunehmend Systeme für den Bürobereich und für die kommerzielle Datenverarbeitung entwickelt. Wenn auch die technischen Qualitäten unbestritten sind, gibt es doch Eigenschaften, die seinen Einsatz in bestimmten Bereichen einschränken. Diese Schwächen sollte man ebenfalls kennen, um mögliche Probleme beim Einsatz zu vermeiden. Für den Erfolg von Unix spielen aber nicht nur seine technischen Eigenschaften, sondern maßgeblich auch andere Faktoren, zum Beispiel wirtschaftlicher Art, eine Rolle.

Ein Betriebssystem ist die Schnittstelle zwischen dem Benutzer und dem Rechner. Es lohnt sich, diese Schicht sehr gründlich zu betrachten, denn sie kann die Durchführung von Aufgaben, sowie den Wechsel auf andere Rechner erleichtern oder erschweren. Die Wahl des richtigen Betriebssystems ist für den Anwender wichtiger als die des Prozessors, denn sie entscheidet darüber, wie er mit der Hardware arbeiten kann und vor allem, welche Anwendersoftware ihm zur Verfügung steht. Es kann damit die Basis für ein gutes oder schlechtes Anwendersystem sein.

Als Timesharing- und Multiuser-System ermöglicht Unix einer größeren Anzahl von Benutzer quasi gleichzeitig mit dem System zu arbeiten. Jeder Anwender kann simultan mehrere Prozesse zur Verarbeitung in Auftrag geben, die sich gegenseitig verständigen können. Typisch sind eine Verarbeitung im Vordergrund (Dialog) und bei Bedarf weitere Prozesse im Hintergrund. Batch-Betrieb ist vom Konzept her nicht vorgesehen, aber als Spezialfall programmierbar.

Unix bietet eine Reihe von Funktionen, die damals neu waren und noch heute in dieser Kombination selbst in größeren Systemen selten zu finden sind:

- ein hierarchisches Filesystem

- einheitliche Schnittstelle zu Dateien, Geräten und zu Nachbarprozessen

- die Fähigkeit, Prozesse synchron oder asynchron zu verarbeiten

- eine mächtige Kommandosprache

- über 200 leistungsfähige Routinen und Dienstprogramme, aus denen sich maßgeschneidert Anwendungen zusammenstellen lassen.

Unix ist fast ausschließlich in der höheren Systemimplementierungs-Sprache "C" geschrieben. Dies ist ein Grund, warum es leicht auf andere Rechner übertragen werden kann. Auch ist Unix keine einmalige Entwicklung, sondern ein sich ständig weiterentwickelndes Software-System. Die Konkurrenz zwischen den Versionen unterschiedlicher Hersteller trägt dazu bei, daß das System laufend erweitert wird.

Aus der Sicht der Anwender ist Unix ein sehr bekanntes Betriebssystem, das es geschafft hat, die unterschiedlichsten Interessengemeinschaften um sich zu scharen:

- aktive Benutzergruppen, die regelmäßig Konferenzen abhalten.

- Anbieter, die Kompatibilität versprechen,

- Benutzer, die glauben oder hoffen, daß Unix die Lösung aller Software-Probleme bringt.

Diese Definition enthält einen ausgesprochen wichtigen Gesichtspunkt und zwei etwas provozierende Aussagen, die man aber trotzdem nicht außer acht lassen sollte.

Unix hat weltweit einen Anwenderkreis gefunden wie kaum ein anderes Betriebssystem. Dieser Kreis hat sich zu Benutzergruppen vereinigt, deren Mitglieder über ein weltweites Unix-Netz in Kontakt stehen, regelmäßig auf Tagungen Informationen austauschen und sich um Standardisierung bemühen.

Diese Tatsache ist für den Anwender nicht weniger wichtig als die technische Qualität des Systems, denn sie ermöglicht ihm den Zugriff auf einen enormen Erfahrungsschatz und ein großes Potential von Software. Ein neues Betriebssystem, selbst wenn es Unix technisch überlegen wäre, hätte große Mühe, diesen Vorsprung aufzuholen.

Obwohl Unix gute Vorausetzungen für die Portabilität der Software bietet, kann nicht bestritten werden, daß es bei der Vielzahl der angebotenen Unix-Versionen gelegentlich zu Kompatibilitäts-Problemen kommt. Die weltweiten Standardisierungs-Aktivitäten lassen jedoch erwarten, daß dieses Problem künftig in der Hintergrund tritt. Andererseits bietet gerade die Vielfalt des Angebotes die Gewähr, von einem speziellen Hersteller weitgehend unabhängig zu sein.

Weder Unix noch ein anderes Betriebssystem kann für alle Anwendungsgebiete gleichermaßen geeignet sein und damit "die Lösung aller Software-Probleme" bringen. Seine große Verbreitung bringt es mit sich, daß Unix auch in Gebiete eindringt, bei denen Schwächen des Konzeptes zutage treten. An der Beseitigung dieser Problembereiche wird von den Herstellern gearbeitet.

Das Konzept von Unix wurde entscheidend durch die Erfahrung im vorangegangenen Großprojekt "Multics" geprägt. Seine Entwickler hatten die Schwächen dieses komplexen Universal-Betriebssystem kennengelernt, und wesentliche Konzepte von Unix stellen eine deutliche Abkehr von den dabei verwendeten Prinzipien dar. Die Funktionen sind bewußt einfach und überschaubar gehalten. Sie sind überschneidungsfrei und so angelegt, daß sie vom Benutzer selbst zu größeren Systemen für die Lösung komplexer Aufgaben zusammengestellt werden können. Man charakterisiert dabei Unix gelegentlich mit dem Begriff einer "neuen Einfachheit", womit die Beschränkung auf klar definierte, wichtige Grundfunktionen gemeint ist, aus denen sich flexible Anwendungslösungen aufbauen lassen.

Dieses klare Konzept findet sich durchgehend in Unix, angefangen von der System-Schnittstelle bis zur einheitlichen Gestaltung der Schnittstellen zu den Dateien und der Ein-/ Ausgabe auf Peripheriegeräte bis zu den Utilities, die über die shell aufrufbar sind.

Die Grundphilosophie von Unix besteht also darin, daß statt riesenhafter Anwendungspakete oder komplizierter Dienstprogramme einfache Werkzeuge angeboten werden, von denen jedes nur eine Aufgabe durchzuführen hat. Diese Werkzeuge können bausteinartig zu komplexen Programmen zusammengefügt werden.

Es ist daher im allgemeinen möglich, spezielle, auf eine bestimmte Aufgabe ausgerichtete Funktionen schnell bereitzustellen, indem man vorhandene Komponenten kombiniert und eventuell fehlende Funktionen selbst- implementiert. Der Aufwand ist im Vergleich zu einer Neuimplementierung gering und es ist möglich, sehr rasch Prototypen zu erstellen.

Diese Vorgehensweise wird unter anderem dadurch möglich, daß der Output vieler Unix-Programme wieder als Input anderer Programme verwendet werden kann. Wesentlich sind dabei auch zwei weitere Eigenschaften: die einheitliche Schnittstelle zu Dateien und Peripheriegeräten, die von Programmen keine Unterscheidung für die Art des Ein- und Ausgabemediums verlangt und der Verzicht auf Routinemeldungen, die weitere Bearbeitung durch Programme behindern würden (das Prinzip des "Silent Programming").

Das Unix-Konzept begünstigt die Wiederverwendung von Programmen. Anstatt komplizierte Programme für einen bestimmten Einsatzfall zu schreiben, durchsuchen die Programmierer das Programmverzeichnis nach kleinen Routinen, die Teile der Aufgabe lösen. Durch Zusammenfügen dieser Programme und das Dazufügen eigener Routinen werden Programmentwicklungszeit und Speicherbedarf erheblich reduziert.

Grundelemente für diesen Programmierstil sind die filter und pipes. (Abb. 3). Die meisten Unix-Programme besitzen drei Standard-Ein- und Ausgänge, die normalerweise mit dem Terminal des Benutzers verbunden sind: standard input, standard output und standard error. Als filter wird jedes Programm bezeichnet, das von standard input liest, die Eingabe verarbeitet und das Ergebnis in standard output ausgibt.

Eine pipe ist ein Mechnismus, der den Ausgang eines Programms mit dem Eingang der nachfolgenden verbindet. Unter pipeline versteht man die Verknüpfung mehrerer filter zu einer Programmkette. Der Benutzer kann auf diese Weise beliebig viele filter zusammenfügen. Durch diesen Mechanismus können leistungsfähige Routinen für die Lösung kleinerer bis mittlerer Aufgaben sehr kurz formuliert werden.

Informationen werden in Unix in files (Dateien) gespeichert. Es besitzt ein hierarchisch gegliedertes, geräteunabhängiges Dateisystem, das durch seine einheitliche Schnittstelle leicht zu bedienen ist. Für den Benutzer besteht kein Unterschied, ob Dateien oder Peripheriegeräte angesprochen werden. Der Vorteil besteht darin, daß man die gleiche Art von Informationen auf dem Bildschirm zeigen, auf den Plattenspeicher schreiben oder auf dem Drucker ausgeben kann. Die Struktur der Ausgabeinformation ist geräteunabhängig.

Vom Benutzer aus gesehen ist eine Datei eine Folge von Bytes in linearer Anordnung. Unix kennt drei Arten von Dateien:

- einfache files: für jede Art von Informationen, die der Benutzer speichern möchte (Texte, Programmquellen, übersetzte, ausführbare Programme). Für die Interpretation des Inhaltes sind die Programme zuständig.

- directories (Inhaltsverzeichnisse): Sie stellen die Verbindung zwischen Filenamen und den files selbst dar. Abb. 4 zeigt die baumartige Struktur der files und directories. An oberster Stelle der Hierarchie steht das root directory. Darunter folgen weitere directories beziehungsweise andere files.

-special files: Mit diesen files werden Peripheriegeräte wie Drucker oder Terminals angesprochen.

Eine weitere Stärke von Unix ist die Möglichkeit, Aufgaben auf quasi parallel ablaufende Prozesse zu verteilen. Ein Prozeß ist vereinfacht gesagt ein aktives Programm, das mit anderen Prozessen um die Nutzung der Betriebsmittel konkurriert (Genauer gesagt ist es die Durchführung eines im Arbeitsspeicher befindlichen Programms einschließlich aller Informationen über seine Arbeitsumgebung.) Prozesse können vom Benutzer über die shell beziehungsweise von Programmen aus gestartet, synchronisiert und beendet werden. Zu den Vorteilen des Prozeß-Mechanismus zählen, daß Aufgaben in autonome Teilkomplexe zerlegt werden, die jeweils nur einen Teil der Resourcen benötigen, und daß zeitraubende Vorgänge als asynchrone Prozesse in den Hintergrund (zum Beispiel auch als Stapelverarbeitung) verlagert werden können. Der Benutzer kann im Vordergrund währenddessen neue Aktivitäten durchführen.

Beim Anschalten an das System (login-Kommando) wird der erste Prozeß für den Benutzer gestartet, der für die ganze Dauer der Sitzung aktiv ist. Dieser shell-Prozeß initialisiert für jedes Kommando weitere Prozesse, auf deren Beendigung die shell wartet (synchrone Prozesse) oder die parallel im Hintergrund ablaufen (asynchrone Prozesse).

Ein sinnvolles Arbeiten mit Prozessen erfordert die Möglichkeit, sie zu synchronisieren und Informationen zwischen ihnen auszutauschen. Diese Prozeß-Synchronisation und Interprozeß-Kommunikation sind für viele Anwendungen ein so zentraler Punkt, daß die Hersteller besonderes

Augenmerk darauf gerichtet haben, die ursprünglichen Mechanismen von Unix wie etwa

- pipes (Übermittlung von Informationen nur zwischen Nachbarprozessen, die explizit über einen Puffer

übergeben und kopiert werden müssen) oder

- signals (sie zeigen bestimmte, festgelegte Ereignisse an)

zu erweitern und zu verbessern. Neue Mechanismen sind:

- shared memory (allgemeiner ein setzbar und schneller als pipes, da der Kopiervorgang entfällt)

- messages (Austausch von Nachrichten, die nach Typen klassifizierbar sind)

- semaphore (für eine flexiblere Prozeßsynchronisation).

Unix besteht aus zwei Hauptteilen, dem kernel und der shell mit den Dienstprogrammen. Von den vielen in Unix enthaltenen Komponenten sollen in den folgenden Abschnitten nur einige der wichtigsten behandelt werden.

Der kernel, der Kern von Unix besteht aus etwa 10 000 Programmzeilen in der Sprache "C" und rund 1000 Zeilen in Maschinencode der jeweiligen Maschine (Version 7). Er stellt

insgesamt etwa 10 Prozent der gesamten Unix-Software dar. Der kernel realisiert vor allem die Schnittstellen zur Peripherie, das Dateisystem, sowie die Verwaltung der Prozesse, der Uhr und der Unterbrechungen. Der Benutzer kann die Funktionen von Unix sowohl über die shell als auch durch Systemaufrufe (system calls) innerhalb von Programmen aufrufen (Abb. 5).

Die shell, der Kommandointerpreter von Unix, liegt wie eine Schale um das Betriebssystem herum, führt den Dialog mit dem Benutzer und erschließt ihm die Leistungen von Unix in Form einer mächtigen Anweisungssprache.

Die shell hat sowohl die Eigenschaften einer höheren Programmiersprache (Variable, Subroutines, Kontrollstrukturen), als auch eines Kommandointerpreters, bei dem die eingegebenen Anweisungen des Benutzers unmittelbar interpretiert und verarbeitet werden. Eine wichtige Funktion der shell ist zum Beispiel die Unterstützung des pipe-Mechanismus.

Mit Unix werden im wesentlichen zwei shells angeboten:

- die Bourne-Shell. Sie ist die am weitesten verbreitete shell.

- die C-Shell. Sie wurde in Berkeley entwickelt und bietet zusätzlich zur Bourne-Shell Funktionen, die den Dialog komfortabler gestalten:

- die Syntax wurde noch stärker an "C" angelehnt.

- alias-Mechanismus für Festlegungen eigener Namen für Kommandos und Kommandofolgen während einer Sitzung.

- command history list, in der alle Kommandos einer Sitzung protokolliert werden, mit der Möglichkeit, Teile davon (auch modifiziert) erneut aufzurufen.

- erweiterte Kontrollmöglichkeiten für Vorder- und Hintergrundprozesse.

Obwohl eine der Hauptabsichten der shell ist, Programmierarbeiten zu reduzieren, verleiten ihre Eigenschaften dazu, komplizierte Programme als shell-Prozeduren zu schreiben anstatt in der Sprache "C". shell-Programmierung ist jedoch eher geeignet für kurze Programme zur Lösung von Tagesproblemen. Komplexere Programme werden leicht unübersichtlich und uneffektiv und sollten besser in "C" geschrieben werden.

Die shell ist ein sehr leistungsfähiges Instrument des Rapid-Prototyping. Durch die Mächtigkeit und Vielseitigkeit ihrer Befehle (while- und for-Schleifen, if-then-else, case) sowie durch die Möglichkeit, mit pipes und filters bausteinartig komplizierte Abläufe zu realisieren, ermöglicht sie es sehr rasch, Prototypen zu erstellen und deren Systemverhalten zu untersuchen.

Die shell ist ein normales Anwenderprogramm von Unix und kann daher leicht modifiziert beziehungsweise durch eine eigene Benutzeroberfläche ersetzt werden. Solche Veränderungen haben allerdings Einfluß auf die Portabilität von Anwendungen.

Obwohl unter Unix alle gängigen Programmiersprachen wie Assembler, Cobol, Fortran und Pascal verfügbar sind, ist "C" innerhalb der Unix-Welt die meist verwendete Programmiersprache. Nachdem rund 90 Prozent eines Unix-Systems in "C" geschrieben sind, ist die Sprache sozusagen integraler Bestandteil. Mit jeder Unix-Portierung wird ein C-Compiler ausgeliefert, der bereits bei der Portierung seine Qualität beweisen mußte.

Die Sprache "C kann als höhere, universelle Programmiersprache bezeichnet werden mit vielen wesentlichen Funktionen, die von Algol oder Pascal her bekannt sind. Darüber hinaus bietet sie Zugriffsmöglichkeiten auf die Hardware-Ebene. Sie setzt daher beim Programmierer Erfahrung und Disziplin voraus, denn sie erlaubt ihm Konstruktionen, die in modernen Programmiersprachen wie Pascal, Chill oder Ada verboten sind.

Es existiert auch keine vollständige Beschreibung von "C" und die Implementierung nicht definierter Sprachelemente durch die Compiler kann unterschiedlich sein. Die meisten Compiler leiten sich allerdings von der gleichen Ur-Version ab, so daß in der Praxis aus dieser Tatsache kaum Portierungsprobleme entstehen.

Als Quasi-Standard kann die Sprachbeschreibung der englischen Ausgabe von Kernighan/Ritchie (Kern 83) angesehen werden. An einem internationalen C-Standard wird derzeit gearbeitet.

Insgesamt gesehen bildet "C" jedoch zusammen mit den Basisfunktionen der Unix-Bibliotheken eine äußerst leistungsfähige Einheit. "C" ist daher auf dem Wege, die meistverwendete System-Implementierungssprache zu werden.

Da die Sprache eine sehr kompakte Programmierung erlaubt, ist guter Programmierstil unbedingt erforderlich, um die Lesbarkeit und auch die Portierbarkeit der Programme zu gewährleisten. Insbesondere Projektleiter müssen Vorkehrungen treffen, damit die Software-Qualität, die inzwischen durch moderne Programmiersprachen erreicht wurde, durch falschen Gebrauch von "C" nicht wieder unterlaufen wird.

Um die Entwickler bei der Erstellung portabler Programme zu unterstützen, wird mit Unix das Werkzeug "lint" angeboten, das C-Quell-Programme auf maschinenabhängigen Code, die konsistente Verwendung von Variablen und Funktionen, sowie verdächtige Stellen, die vermutlich Fehler enthalten, untersucht. Das Tool ist ein wirksames Mittel, um einen vernünftigen Programmierstil zu gewährleisten und kann zur Qualitätsüberwachung von Programmen eingesetzt werden.

Zur Unterstützung großer Software-Projekte gibt es in Unix zwei mächtige Werkzeuge: Das Source Code Control System (SCCS) unterstützt die Versionsverwaltung von Source-Programmen aber auch von beliebigen Texten. Ausgehend von einer Grundversion werden bei jeder folgenden Version nur die Differenzen (Delta-Technik) abgespeichert. Das bringt bei der Verwaltung großer Programmsysteme, bei der naturgemäß viele Versionen anfallen, erhebliche Speichervorteile und eine vereinfachte Organisation. Aus den Differenzdaten können jederzeit frühere Versionen rekonstruiert werden.

Bei der Entwicklung von Programmsystemen sind bei der Änderung von Teilkomponenten jeweils ganz bestimmte Schritte in einer bestimmten Reihenfolge erforderlich, um wieder ein funktionierendes Gesamtsystem zu erhalten. In größeren Projekten, an denen viele Entwickler beteiligt sind, ist es für den Einzelnen kaum noch möglich, hier den Überblick zu behalten und den Vorgang korrekt durchzuführen. Das Kommando make führt solche Generierungen automatisch durch, wobei es die in einer Datei (makefile) hinterlegten Verknüpfungen und Abhängigkeiten des Programmsystems benutz. Der Befehl kann neben der Software-Entwicklung auch für administrative Aufgaben eingesetzt werden.

Für die Formatierung von Dokumenten (Texte, Tabellen und Formeln) bietet Unix die Pakete "nroff" (für Matrixdrucker) und "troff" (für Fotosatzgeräte) an. Im Gegensatz zu modernen Textsystemen muß man die Formatieranweisung in Form von Steuerzeichen in den Text einbringen. Da die Wirkung nicht unmittelbar auf dem Bildschirm angezeigt wird, setzen sie ein großes Abstraktionsvermögen des Benutzers voraus. Sie bieten zwar durch die Makrosprache alle Möglichkeiten, um zum Beispiel die bei der Software-Entwicklung anfallenden komplexen Dokumentationsaufgaben zu bewältigen. Sie verlangen aber - verglichen mit modernen Textsystemen - eine relativ lange Einarbeitungszeit und sind in einem durchschnittlichen Büro kaum einzusetzen.

Unix unterstützt durch eine Reihe von Programmen die Kommunikation zwischen den Benutzer von Unix-Systemen:

- write (lokal) ermöglicht die direkte Kommunikation zwischen zwei Terminals

- mail (lokal und remote) ist ein elektronischer Postdienst zur Übermittlung von Nachrichten an Benutzer im gleichen oder einem anderen Unix-System. Da die Informationen einer Datei hinterlegt werden, müssen die Empfänger während der Übermittlung nicht an das Netz angeschlossen sein.

- uucp (unix-to-unix copy program, lokal und remote) ist ein Netzwerk-Vermittlungsprogramm, das gestattet, Daten zwischen Unix-Rechnern über Telefonleitungen beziehungsweise Terminalleitungen auszutauschen. Es ist unter anderem die Basis für mail und das internationale Unix-Netz "Usenet" (wird fortgesetzt)

Literatur:

[Bana84] Banahan, M.; Rutter, A: UNIX: lernen verstehen, anwenden, Hanser, München, Wien, 1984

[Eckh84] Eckhoff, K. Karrenberg, D. EUNET, Aufbau und Dienste GWG Nachrichten 1, 12/84. S. 7-22

[Gulb85] Gulbins, J.: UNIX - Eine Einführung Springer, München/Berlin, 1984

[Heal84] Healey, M.: UNIX: Key development and issues in: UNIX Standard operating System of the Future IF-Seminar, London 1984

[Kern83] Kernighan, B.W.; Richie, D.M.: Programmieren in C. Hander, 1983

[Kral83] Krall, D.: Weng-Beckmann, U.. Einführung in UNIX. unix/mail, 1/83, S. 27-34

[Ludw83] Ludwigs, H.: Poppensieker, J., Surowiecki, Z.: UNIX für Einsteiger und Umsteiger 14. Müller, Köln, 1983

[Norm81] Norman, D. A.: The Trouble with UNIX. Datamation, 27 (1981)12, S. 139-150

[Ritc74] Ritchie, D.M.: Thompson, K.: The UNIX Time-Sharing System. CACM, Vol. 17, No. July 1974, S. 365-357

[Weng83] Weng-Beckmann, U.: Stammbaum der Familie UNIX unix/mail, 4/83, S. 21-25

* Peter Domann Studium der Nachrichtentechnik in München; Dipl.-lng., Dipl-Wirtsch.-Ing.; seit 1970 bei der Siemens AG; Leiter der Abteilung Werkzeuge und Engineering im Fachgebiet Softwaretechnik des Zentralbereiches Forschung und Technik verantwortlich für die Unix-Clearingstelle (Koordination der Unix-Strategie im Hause, Beratung und Unterstützung der Unix-Anwender) und für eine Reihe von Software-Projekten für Arbeitsplatzcomputer unter Unix.

Die drei Säulen des Betriebssystems

In der Vielzahl der angebotenen Unix-Systeme lassen sich drei Hauptlinien erkennen (Abb. 2), die Basis für die meisten der modernen Unix-Versionen sind:

- AT8tT-Linie

Version 7 und System m sind die Basis für die meisten der heute angebotenen Unix-Systeme. Mit dem 1983 eingeführten System/V geht die AT&T erstmals auf den kommerziellen Markt ein und bietet Anwendungsunterstützung in Form von Wartung und Schulung an. Flankierend mit der Einführung wurden Kooperationen mit den führenden Mikrocomputer-Herstellern geschlossen mit dem Ziel, System V auf Standard-Mikroprozessoren zu portieren. Außerdem gründete die AT&T zusammen mit Olivetti die Unix Europe Ltd. in London, um System V am europäischen Markt zu vertreiben.

- Microsoft-Linie

Die Software-Firma Microsoft hat auf Basis der Unix Version 7 das System Xenix entwickelt, das durch eine Reihe von Funktionen speziell auf den kommerziellen Einsatz abgestimmt ist (file/record-locking, semaphore, Robustheit und Effizienz des Kernel). Es ist heute das am stärksten verbreitete System auf dem Gebiet der Mikrorechner (vor allem Intel 8086 und 80286). Xenix 3.0 ist mit dem System III kompatibel. Eine Reihe großer Hersteller, darunter IBM, Intel und Siemens haben sich entschlossen, Produkte auf der Basis von Xenix anzubieten. Zudem hat Microsoft angekündigt, Xenix 5.0 Sourcecode-kompatibel mit Unix System V zu machen.

- Berkeley-Linie

Die University of California at Berkeley hatte sich seit langem mit der Portierung von Unix auf verschiedene 32-Bit-Rechner der Serie PDP-11 beschäftigt. Als sie einen Auftrag des DARPA (Defense Advanced Research Projects Agency) erhielt, das den speziellen Anforderungen im technisch-wissenschaftlichen Bereich genügen sollte, wurde Unix als Basis gewählt. Es entstanden die Versionen 4.1 bsd (Berkeley System Distribution) und 4.2 bsd, deren Hauptmerkmale die virtuelle Adressierung (demand paging), verbesserte Interprozeß-Kommunikation und ein schnelles File-System sind. Sie sind dadurch besonders für Anwendungen mit großem Bedarf an Speicher- und Rechenkapazität geeignet (CAD und Artificial Intelligence). Die aktuelle Version 4.2 bsd wird auch von DEC (Ultrix-32) und SUN Microsystems weiterentwickelt und vertrieben.

Unix-Systeme auf dem Markt

Heute werden rund 150 Versionen und Portierungen von Unix angeboten. Bild 1 (siehe Seite 38) zeigt die Hauptlinien im Stammbaum der Unix-Familie. Bei den angebotenen Systemen sind drei Kategorien zu unterscheiden:

- Unix-Versionen sind Original-Implementierungen der AT&T. Heute Im Einsatz sind Version 7, System HI und System V. Für die Benutzung Ist eine Lizenz der AT&T erforderlich. Nur diese Originalversionen der AT&T dürfen den Namen Unix tragen.

- Unix-Portierungen sind Anpassungen des Systems an eine neue Hardware unter Beibehaltung von Systemschnittstellen und Funktionsumfang. Eine Portierung ist mit Änderungen im C-Codegenerator und am Kernel (Speicherverwaltung und Gerätetreiber) verbunden. Der Anbieter muß eine Source-(Quell-)Lizenz der AT&T besitzen sowie ein Customer Provision Agreement (das Recht, Unix-Software weiterzugehen), der Erwerber eine Binär- beziehungsweise Source-Lizenz.

- Unix-Look-alikes sind Neuimplementierungen, die Unix-Funktionen und -Systemschnittstelle bieten, aber nicht an eine AT&T-Lizenz gebunden sind und deshalb gegebenenfalls billiger angeboten werden können. Da hier die Entwicklung von der Unix-Linie entkoppelt Ist, muß der Erwerber genau prüfen, ob der Anbieter aus eigener Kraft die Weiterentwicklung parallel zu Unix gewährleisten kann. Die Kompatibilität zu Original-Systemen Ist meist nicht feststellbar, ohne die Implementierung sehr genau zu untersuchen.

Weder eine Unix-Portierung (mit Ausnahme der von AT&T validierten System-V-Portierungen, zum Beispiel Unix System V/68) noch ein Look-alike dürfen den Namen Unix tragen. Daher läßt sich anhand der Namen nicht unterscheiden, mit welchem der beiden man es zu tun hat.

Die Entstehungsgeschichte von Unix

Unix wurde 1969 in den Bell Laboratorien der AT&T von Software-Entwicklern für den eigenen Gebrauch konzipiert. Darin liegen zwei wesentliche Ursachen für den heutigen Erfolg des Betriebssystems. Einerseits wurde es von Leuten entwickelt, die wußten, was sie für die eigene Anwendung benötigen, andererseits wurde es von ihnen selbst in der Praxis ausgetestet und weiterentwickelt. Ken Thompson 1), der geistige Vater von Unix, war an der Entwicklung des Timesharing-Betriebssystems "Multics" beteiligt, einem Gemeinschaftsprojekt zwischen Bell Labs, MIT und GE, das zwischen 1960 und 1969 lief.

Die Bell Labs zogen sich dann aus -dem Projekt zurück, und Thompson nutzte die Möglichkeit, die positiven und negativen Erfahrungen mit Multics In das Konzept von Unix einzubringen. Dennis Ritchie 1), der kurze Zeit später dazustieß und mit Thompson zusammen die Entwicklung durchführte, entwarf die Programmiersprache "C", in der 1973 das System neu implementiert wurde. Heute sind 90 Prozent des Codes in "C" geschrieben, was eine wesentliche Voraussetzung für die Maschinenunabhängigkeit und leichte Portierbarkeit des Betriebssystems und der Unix-Anwendersoftware ist.

In den Jahren zwischen 1969 und 1976 wurde Unix nur intern in den Bell Laboratorien verwendet und weiterentwickelt. Erst 1976 wurde die damalige Version 6 für externe Anwender freigegeben. Der breite Einsatz begann mit dem Vertrieb der Version 7, aus dem sich eine Vielzahl von Versionen anderer Hersteller ableitet.

Als sehr erfolgreich hat sich die Strategie erwiesen, den Sourcecode von Unix frühzeitig und zu günstigen Konditionen den Hochschulen zu überlassen. Auf diese Weise bildete sich rasch ein großer Benutzerkreis, in dem viel von der Software entstand, die mit zum heutigen Erfolg von Unix beiträgt.

1) Thompson und Ritchie wurden für Ihre Verdienste bei der Unix-Entwicklung mit dem Turing Award 1983 ausgezeichnet, einem Preis. der von der acm für besondere Leistungen auf dem Gebiet der Computer Science vergeben wird.