Linux

Aus Zebradem WIKI
Zur Navigation springenZur Suche springen

Das Board mit Freiheiten






Die Entstehungsgeschichte von Linux

Die Geschichte von Linux ist mit der von Unix eng verflochten, aber dennoch nicht gleich. Anfangs, bis 1979 die Unix-Version 7 erschien, war Unix ein praktisch fast frei verfügbares System. Bis dahin wurde der Quellcode von Unix gegen Erstattung der Kopier- und Datenträgerkosten frei an Universitäten und andere Einrichtungen verteilt – Unix hatte damit als eines der ersten Betriebssysteme den Charakter eines freien, gut portablen Betriebssystems. Der Code wurde auch in Vorlesungen und Veröffentlichungen verwendet und konnte nach den eigenen Vorstellungen entsprechend geändert, ergänzt oder portiert werden. Die in den folgenden frühen 1980er Jahren immer mehr aufkommende kommerzielle Denkweise drängte auch AT&T dazu, das gesamte System, bestehend aus eigenem geistigem Eigentum sowie aus frei beigesteuerten Erweiterungen, als proprietäres AT&T Unix zu vermarkten. In Folge dessen durfte nun auch der AT&T-Quellcode nicht mehr öffentlich zugänglich gemacht werden. Dies sorgte, insbesondere im universitären Umfeld, für Unverständnis, woraufhin Richard Stallman 1983 das GNU-Projekt gründete. Als Ziel des Projekts galt es, ein Unix-ähnliches, POSIX-kompatibles Betriebssystem zu schaffen. Zwei Jahre später gründete er die Free Software Foundation (FSF) und schrieb die GPL (GNU General Public License), um freie Software innerhalb des amerikanischen Copyright-Systems zu ermöglichen. Mittlerweile gibt es weitere Lizenzen mit ähnlichen Ansätzen (z.B. OAL) sowie mehrere Abwandlungen und Erweiterungen der GPL (z.B. LGPL). Auf diesem Wege verbreitete sich die GNU-Software sehr schnell und wurde von vielen Menschen weiterentwickelt. Es entstand in kurzer Zeit eine Vielzahl von Programmen, so dass bereits Anfang 1990 genug GNU-Software bereitstand, um ein eigenes Betriebssystem daraus zu erstellen. Allerdings fehlte noch immer ein Kernel. Dieser sollte eigentlich im Projekt GNU Hurd entwickelt werden. Doch der als Mikrokernel ausgelegte Kern entwickelte sich nur sehr schleppend, weil das Finden und Beheben von Fehlern (Debuggen) aufgrund technischer Besonderheiten sehr schwierig und aufwendig war. Ein anderes Projekt rund um ein Betriebssystem aus freier Software war in den 1980er Jahren auch die Berkeley Software Distribution, kurz BSD. Diese hatte sich aus Eigenentwicklungen der Universität Berkeley aus den Unix-Versionen der 4er Edition und folgender von AT&T entwickelt. Da aber in den BSD-Versionen noch immer Code von AT&Ts Unix enthalten war, kam es Anfang der 1990er Jahre zu einem Rechtsstreit zwischen AT&T und der Universität Berkeley, der die Entwicklung von BSD stark einschränkte und einige Jahre stark verlangsamte. Anfang der 1990er gab es also kein vollständiges, freies Betriebssystem. Die Zukunft von BSD war wegen des Rechtsstreits ungewiss, die Weiterentwicklung gelähmt, das GNU-Projekt wurde zwar konstant weiterentwickelt und ausgebaut, verfügte aber über keinen UNIX-artigen Kernel, vielmehr war es eine Anzahl freier Softwareprojekte, die auf den verschiedensten (proprietären) UNIX-Varianten mittels des GNU-Compilers übersetzt werden konnten und lauffähig waren.

Entwicklung heute

Die Entwicklung des Linux-Kernels wird noch immer von Torvalds organisiert. Dieser ist dafür bei der gemeinnützigen Linux Foundation angestellt. Andere wichtige Entwickler werden oft von verschiedenen Unternehmen bezahlt. So arbeitet z. B.Andrew Morton im Auftrag von Google am Linux-Kernel und ist dabei im sogenannten Merge Window für das Sammeln aller Änderungen und das Weiterleiten an Torvalds zuständig.

Neben der Kernel-Entwicklung haben sich auch andere Projekte um das Betriebssystem gesammelt, die es für eine größere Nutzerzahl interessant machten. So ermöglichen grafische Benutzeroberflächen wie KDE oder GNOME einen hohen Benutzerkomfort beim Einsatz als Desktop-System. Verschiedene auf den Desktop ausgelegte Linux-Distributionen vereinfachten die Installation und Konfiguration von Linux so weit, dass sie auch von Anfängern problemlos gemeistert werden können.

Eine weltweite Entwickler- und Nutzergemeinde erstellt eine Vielzahl an weiterer Software und Dokumentation rund um Linux, die die Einsatzmöglichkeiten enorm ausgedehnt haben. Hinzu kommt, dass Hersteller proprietärer Software zunehmend einen Markt bei Linux-Anwendern erkennen und mit der Zeit vermehrt Programme für Linux anbieten. Dabei läuft die Entwicklung schwerpunktmäßig freier Software sowohl in selbstorganisierten Projekten, bestehend aus ehrenamtlichen und bezahlten Entwicklern, als auch in teilweise von Unternehmen unterstützten Stiftungen. Gemein ist allen Modellen, dass sie sich stark über das Internet vernetzt haben und dort ein Großteil der Organisation und Absprache stattfindet.

Technik

Die Bezeichnung Linux wurde von Linus Torvalds anfänglich nur für den Kernel genutzt, dieser stellt der Software eine Schnittstelle zur Verfügung, mit der sie auf die Hardware zugreifen kann, ohne sie genauer zu kennen. Der Linux-Kernel ist ein in der Programmiersprache C geschriebener monolithischer Betriebssystemkern. Wichtige Teilroutinen sowie zeitkritische Module sind jedoch in prozessorspezifischer Assemblersprache programmiert. Der Kernel ermöglicht es, nur die für die jeweilige Hardware nötigen Treiber zu laden. Weiterhin übernimmt der Kernel auch die Zuweisung von Prozessorzeit und Ressourcen zu den einzelnen Programmen, die auf ihm gestartet werden. Bei den einzelnen technischen Vorgängen orientiert sich das Design von Linux stark an seinem Vorbild Unix. Der Linux-Kernel wurde zwischenzeitlich auf eine sehr große Anzahl von Hardware-Architekturen portiert. Das Repertoire reicht von eher exotischen Betriebsumgebungen wie dem iPAQ-Handheld-Computer, Navigationsgeräten von TomTom oder gar Digitalkameras bis hin zu Großrechnern wie IBMs System z und neuerdings auch Mobiltelefonen wie dem Motorola A780. Trotz Modulkonzept blieb die monolithische Grundarchitektur erhalten. Die Orientierung der Urversion auf die verbreiteten x86-PCs führte früh dazu, verschiedenste Hardware effizient zu unterstützen und die Bereitstellung von Treibern auch unerfahrenen Programmierern zu ermöglichen. Die hervorgebrachten Grundstrukturen beflügelten die Verbreitung.

Kernel-Versionen

Auf kernel.org werden alle Kernel-Versionen archiviert. Die dort zu findende Version ist der jeweilige Referenzkernel. Auf diesem bauen die sogenannten Distributionskernel auf, die von den einzelnen Linux-Distributionen um weitere Funktionen ergänzt werden. Eine Besonderheit stellt dabei das aus vier Zahlen bestehende und durch Punkte getrennte Versionsnummernschema dar, z. B. 2.6.14.1. Es gibt Auskunft über die exakte Version und damit auch über die Fähigkeiten des entsprechenden Kernels. Von den vier Zahlen wird die letzte für Fehlerbehebungen und Bereinigungen geändert, nicht aber für neue Funktionen oder tiefgreifende Änderungen. Aus diesem Grund wird sie auch nur selten mit angegeben, wenn man beispielsweise Kernel-Versionen vergleicht. Die vorletzte, dritte Zahl wird geändert, wenn neue Fähigkeiten oder Funktionen hinzugefügt werden. Gleiches gilt für die ersten beiden Zahlen, bei diesen müssen die Änderungen und neuen Funktionen jedoch drastischer ausfallen. Seit Version 3.0 (August 2011) wird auf die zweite Stelle verzichtet.

Neuerungen im Kernel 2.6

Der aktuelle stabile Kernel wurde ab Dezember 2001 auf Basis des damaligen 2.4er-Kernels entwickelt und weist eine Reihe von Neuerungen auf. Die auffälligste Auswirkung dieser Änderungen ist, dass graphische und interaktive Anwendungen deutlich schneller ausgeführt werden. Eine der wichtigsten Änderungen war dabei die Verbesserung des sogenannten O(1)-Schedulers, den Ingo Molnar für den 2.6er-Kernel komplett neu konzipierte. Er hat die Fähigkeit, das Zuweisen von Prozessorzeit zu unterschiedlichen Prozessen unabhängig von der Anzahl der Prozesse in konstanter Zeit zu erledigen. Seit Kernel 2.6.23 kommt allerdings stattdessen der so genannte Completely Fair Scheduler zum Einsatz. Eine andere Neuerung stellt die Einführung von Access Control Lists dar, mit deren Hilfe ein sehr fein abgestimmtes Rechtemanagement möglich ist, was vor allen Dingen in Umgebungen mit vielen Benutzern sehr wichtig ist. Ebenso verfügt der neue Kernel über ein deutlich verbessertes System der Dateiüberwachung. In der neuen Version, Inotify genannt, gibt die Überwachung bei jeder Operation an einer Datei eine Nachricht ab, was z. B. für Desktop-Suchmaschinen wichtig ist, die daraufhin ihren Index in Bezug auf diese Datei aktualisieren können.

Entwicklungsprozess

Die Entwicklung von Linux liegt durch die GPL und durch ein sehr offenes Entwicklungsmodell nicht in der Hand von Einzelpersonen, Konzernen oder Ländern, sondern in der Hand einer weltweiten Gemeinschaft vieler Programmierer, die sich in erster Linie über das Internet austauschen. In vielen E-Mail-Listen, aber auch in Foren und im Usenet besteht für jedermann die Möglichkeit, die Diskussionen über den Kernel zu verfolgen, sich daran zu beteiligen und auch aktiv Beiträge zur Entwicklung zu leisten. Durch diese unkomplizierte Vorgehensweise ist eine schnelle und stetige Entwicklung gewährleistet, die auch die Möglichkeit mit sich bringt, dass jeder dem Kernel Fähigkeiten zukommen lassen kann, die er benötigt. Eingegrenzt wird dies nur durch die Kontrolle von Linus Torvalds und einigen speziell ausgesuchten Programmierern, die das letzte Wort bei der Aufnahme von Verbesserungen und Patches haben. Auf diese Weise entstehen täglich grob 4.300 Zeilen neuer Code, wobei auch täglich ungefähr 1.800 Zeilen gelöscht und 1.500 geändert werden. (Angaben nach Greg Kroah-Hartman als Durchschnitt für das Jahr 2007). An der Entwicklung sind derzeit ungefähr 100 Maintainer für 300 Subsysteme beteiligt.


Distributionen

Da der Linux-Kernel alleine nicht lauffähig bzw. bedienbar wäre, muss man ihn mit Hilfssoftware zusammen verteilen, beispielsweise den GNU coreutils und vielen anderen Anwendungsprogrammen. Solch eine Zusammenstellung nennt man Linux-Distribution und ist eine Zusammenstellung verschiedener Software, die je nach Bedingung unterschiedlich sein kann. Die so entstehenden Distributionen unterscheiden sich teilweise sehr deutlich. Der Herausgeber einer Linux-Distribution ist der Distributor. Geschichte der Linux-Distributionen [Bearbeiten] Die Notwendigkeit von Linux-Distributionen ergab sich durch das Entwicklungsmodell von Linux nahezu sofort. Die Werkzeuge des GNU-Projekts wurden zügig für Linux angepasst, um ein arbeitsfähiges System bereitstellen zu können. Die ersten Zusammenstellungen dieser Art waren 1992 MCC Interim Linux, Softlanding Linux System (SLS) und Yggdrasil Linux. Die älteste bis heute existierende Distribution, Slackware von Patrick Volkerding, folgte 1993 und stammt von Softlanding Linux System ab. Mit der Ausbreitung der Linux-Distributionen bekamen mehr Menschen die Möglichkeit, das System zu testen, des Weiteren wurden die Distributionen immer umfangreicher, so dass ein immer größerer Einsatzbereich erschlossen werden konnte, was Linux zunehmend zu einer attraktiven Alternative zu Betriebssystemen etablierter Hersteller werden ließ. Im Laufe der Zeit änderte sich auch der Hintergrund der Distributionen: Wurden die ersten Distributionen noch der Bequemlichkeit halber und von Einzelpersonen oder kleinen Gruppen geschrieben, gibt es heutzutage teilweise sehr große Gemeinschaftsprojekte Freiwilliger, Unternehmens-Distributionen oder eine Kombination aus beidem.

Heutige Distributionen

Hinter den meisten, vorrangig kleinen Distributionen stehen heutzutage über das Internet koordinierte Projekte Freiwilliger. Die großen Distributionen werden eher von Stiftungen und Unternehmen verwaltet. Auch die Einsatzmöglichkeiten der einzelnen Distributionen differenzierte sich mit der Zeit stark. Vom Desktop-PC über Server-Installationen und Live-CDs bis hin zu Distributionen zu technischen Forschungszwecken ist alles vertreten. Die Zusammensetzung einer üblichen Linux-Distribution für den Desktop-PC umfasst eine große Zahl von Softwarekomponenten, die das tägliche Arbeiten ermöglichen. Die meisten Distributionen werden in Form fertiger CD- oder DVD-Images im Internet bereitgestellt oder mit Support-Verträgen oder Handbüchern verkauft.

Für besondere Anwendungsgebiete existieren oft keine direkt installierbaren Distributionen. Hier werden Frameworks wie OpenEmbedded z. B. für Router oder Handys verwendet, um eine Distribution für den Einsatz auf dem Gerät vorzubereiten.


Vielfalt

Es wird eine große Anzahl an Distributionen angeboten, die dem Benutzer eine sehr feine Abstimmung der Auswahlkriterien auf die eigenen Bedürfnisse ermöglicht. Die Auswahl der geeignetsten Distribution ist für viele unerfahrene Benutzer daher nicht einfach. Die verwendete Software kann mehr Gewicht für Privatanwender haben als für Unternehmen, die wiederum mehr Wert auf die Verfügbarkeit offiziellen Supports legen. Auch kann die Politik des Projekts oder die des Unternehmens hinter der Distribution, z. B. in Bezug auf proprietäre Software, ebenso eine Rolle spielen wie die Eigenschaften der Community in diesem Projekt.

Kompatibilität zwischen den Distributionen

Die Vielfalt der Distributionen, die teilweise verschiedene binäre Formate, eigene Verzeichnisstrukturen und ähnliche Unterschiede aufweisen, führt zu einem gewissen Grad an Inkompatibilität zwischen den Distributionen, der bisher auch durch Richtlinien wie den Filesystem Hierarchy Standard nicht behoben werden konnte. So kann Software, die für die Distribution A bereitgestellt wird, nicht notwendigerweise auch auf der Distribution B installiert werden. Verschiedene Sichtweisen und Lösungsansätze zu dieser Problematik werden im Hauptartikel Linux-Distributionen näher beleuchtet.

Linux als Smartphone-System

Für Smartphones gibt es speziell optimierte Linux-Distributionen. Sie bieten neben den Telefonie- und Textnachrichten-Funktionen, diverse PIM-, Navigations- und Multimedia-Funktionen. Die Bedienung erfolgt typischerweise meist über Multi-Touch oder mit einem Stift. Smartphone-Linux-Systeme werden meist von einem Firmenkonsortium oder einer einzelnen Firma entwickelt und unterscheiden sich teilweise sehr stark von den sonst klassischen Desktop- und Server-Distributionen. Anders als im Embedded-Bereich sind die Smartphone-Distributionen aber nicht auf ein bestimmtes Gerät beschränkt, vielmehr dienen sie als Betriebssystem für Geräte ganz unterschiedlicher Modellreihen und werden oft herstellerübergreifend eingesetzt.

Die Architektur dieser Smartphone-Distributionen hat neben dem Linux-Kernel oft wenig mit den klassischen Distributionen zu tun, so wird teilweise nur ein sehr kleiner Teil der sonst üblichen GNU-Software-Umgebung genutzt. Die normalerweise mit Linux genutzten UNIX-artigen Dienste und Tools werden beispielsweise durch eine Java-Laufzeitumgebung ersetzt. Dadurch entstehen neue Programmierschnittstellen, die sich aber sehr leicht auf klassischen Linux-Systemen emulieren lassen. Verbreitete Vertreter sind Android, Bada, MeeGo, Mobilinux und WebOS.

Linux-basierte Systeme haben seit Ende 2010 die Marktführerschaft auf dem schnell wachsenden Smartphone-Markt übernommen. Sie wiesen im Juli 2011 einen Marktanteil von mindestens 45 % auf. Vorwiegend Android-Geräte haben Apple iOS, Windows Phone und Symbian OS sehr erfolgreich zurückgedrängt.

Weitere Einsatzbereiche

Da Linux beliebig angepasst werden kann, hat es sich auch in Rechenzentren ausgebreitet, in denen speziell angepasste Versionen auf Großrechnern, Computerclustern oder Supercomputern laufen. Im November 2009 laufen die 19 schnellsten Supercomputer der Welt laut der Liste der TOP500 unter Linux. Mit insgesamt 446 von 500 Systemen hält Linux hier einen Marktanteil von 89%.

IBM Roadrunner Ferner können auch NAS-Speichersysteme oder WLAN-Router Linux als Betriebssystem nutzen. Vorteil ist, dass eine sehr aktive Entwicklergemeinschaft besteht, auf deren Ressourcen (der Kern mit den Schnittstellen- Speicherverwaltungs- und Netzwerkfunktionen, aber z. B. auch umfangreiche Entwicklerprogramme, bereits bestehender Code wie die Benutzeroberflächen OPIE oder GPE Palmtop Environment, Erfahrung etc.) die Hersteller dabei zurückgreifen können


Hardwareunterstützung

Als einer der Hauptkritikpunkte an Linux wird oft genannt, dass nicht jede Hardware von Linux unterstützt werde oder Treiber für Linux nicht verfügbar seien. Zwar verfügt Linux über mehr mitgelieferte Treiber als Microsoft Windows und Mac OS X, allerdings stellen Hardwarehersteller selbst selten Linux-Treiber für ihre Hardware zur Verfügung. Während für Hardware mit offen dokumentierter, generischer Schnittstelle (z. B. Mäuse, Tastaturen, Festplatten und USB-Host-Controller) Treiber zur Verfügung stehen, ist dies für andere Hardwareklassen (z. B. Netzwerkschnittstellen, Soundkarten und Grafikkarten) nicht immer der Fall, da jeder Hardwarehersteller eigene, hardwarespezifische Schnittstellen benutzt. Die Spezifikationen dieser Schnittstellen werden zudem meist nicht veröffentlicht, sodass sie mittels Black-Box-Analyse bzw. Reverse Engineering erschlossen werden müssen. Beispiele sind Intels HD Audio-Schnittstelle und deren Linux-Implementierung „snd-hda-intel“ oder der freie 3D-Grafiktreiber „nouveau“ für bestimmte 3D-Grafikchips von Nvidia. Der Energieverwaltungsstandard ACPI ist sehr kompliziert und auf die Hauptplatine zugeschnitten, sodass eine vollständige Linux-Implementierung nicht einfach ist. Ein Grund für die Nichtbereitstellung von Linuxtreibern ist das Entwicklungsmodell des Linux-Kernels: Da er keine feste Treiber-API besitzt, müssen Treiber immer wieder an Veränderungen in den einzelnen Kernel-Versionen angepasst werden. Direkt in den Kernel integrierte Treiber werden zwar von den Kernel-Entwicklern meist mitgepflegt, müssen aber unter der GNU General Public License (GPL) veröffentlicht sein, was einige Hardware-Hersteller ablehnen. Extern zur Verfügung gestellte Treiber müssen aber ebenfalls ständig angepasst und in neuen Versionen veröffentlicht werden, was einen enormen Entwicklungsaufwand mit sich bringt. Außerdem ist die rechtliche Lage solcher externen Module, die nicht unter der GPL stehen, umstritten, weil sie in kompilierter Form technisch bedingt GPL-lizenzierte Bestandteile des Kernels enthalten müssen. Das Problem der Hardwareunterstützung durch sogenannte Binärtreiber (Gewähren von Binärdateien ohne Offenlegung des Quellcodes) wird im Linux-Umfeld kontrovers diskutiert: Während manche für ein komplettes Ausschließen von proprietären Kernel-Modulen plädieren, befürworten andere, dass einige Hersteller überhaupt – zur Not auch proprietäre – Treiber bereitstellen, mit dem Argument, dass die Linux-Nutzer ohne sie benachteiligt wären, weil sie sonst von bestimmter Hardware schlicht abgeschnitten wären

Übersicht

Workshops

Weblinks zum Thema Linux