FAQ: Linux-Kernel
- Thorsten Leemhuis
Mehrdeutigkeit
Steht der Begriff Linux eigentlich für ein komplettes Betriebssystem oder nur dessen Kernel? Und was bedeutet „GNU/Linux“?
Korrekterweise bezeichnet „Linux“ lediglich den von Linus Torvalds entwickelten Betriebssystem-Kern („Kernel“). Ähnlich wie der Motor eines Autos ist er für sich allein gesehen aber zu nichts nutze. Ein Betriebssystem entsteht erst durch Kombination mit anderer Software – etwa einer grafischen Oberfläche sowie verschiedenen Systemwerkzeugen und Bibliotheken.
Solch eine Zusammenstellung gepaart mit Anwendungsprogrammen ist eine „Linux-Distribution“. Der allgemeine Sprachgebrauch hat das wieder zu „Linux“ verkürzt, was zu einer Mehrdeutigkeit des Begriffs geführt hat – häufig lässt sich aber aus dem Kontext erkennen, was gemeint ist.
Da viele wichtige Bausteine einer Linux-Distributionen im Rahmen des GNU-Projekts entwickelt werden, drängt unter anderem dessen Gründer zur Verwendung des Begriffs „GNU/Linux“, wenn es um eine Linux-Distribution geht. Die Argumentation ist keineswegs von der Hand zu weisen, andererseits aber auch ein wenig unfair, denn der X-Server und zahlreiche weitere, nicht im GNU-Projekt entwickelte Software ist für eine Linux-Distribution von ähnlich großer Bedeutung.
Kernel
Wozu brauche ich ĂĽberhaupt einen Kernel?
Der Linux-Kernel vermittelt auf vielfältige Weise zwischen Hardware und Programmen. Zu den wichtigsten Aufgaben zählt die Koordination beim Zugriff auf die Hardware – der Prozess-Scheduler des Kernels etwa regelt, wann und wie lange eine Anwendung Berechnungen auf dem Prozessor ausführen darf.
Der Kernel abstrahiert ferner die Hardware, indem er zum Zugriff auf die verschiedenen Klassen von Geräten (Datenträger, Netzwerkschnittstellen, TV-Hardware, …) High-Level-Funktionsaufrufe bereitstellt. Mit deren Hilfe können Anwendungen die Hardware ohne gerätespezifische Treiber nutzen.
Der Kernel beherrscht zudem einige von Anwendungen häufiger genutzte Grundfunktionen, da das die Koordination zwischen parallel laufenden Programmen vereinfacht und der Kernel viele Dinge schneller und flexibler erledigen kann. Dateisysteme fallen in diese Kategorie, weil es Chaos geben würden, wenn Anwendungen über die zuvor erwähnten Funktionsaufrufe direkt Daten auf einem Datenträger ablegen würden.
Zweige
Was sind Hauptentwicklungszweig, Vanilla-Kernel und Stable-Series?
Als Hauptentwicklungszweig oder -Linie wird der von Linus Torvalds weiterentwickelte Kernel angesehen, denn alle in Linux-Distributionen oder Linux verwendenden Geräten eingesetzte Kernel basieren direkt oder indirekt auf dem von Torvalds. Sie werden häufig „Vanilla-Kernel“ genannt, wenn klargestellt werden soll, dass der Kernel im Originalzustand ist und keinerlei Modifikationen (Treiber, Fehlerkorrekturen oder zusätzliche Funktionen) enthält, die Linux-Distributoren und Hardware-Hersteller typischerweise nachrüsten.
Die Kernel des Hauptentwicklungszweigs tragen drei Nummern in der Versionsbezeichnung – etwa 2.6.33. Direkt nach der Freigabe einer solchen Version beginnt im Hauptentwicklungszweig die Arbeit am Nachfolger. Einige Kernel-Entwickler versorgen parallel die jeweils aktuelle und ausgewählte ältere Versionen mit Korrekturen und kleinen Erweiterungen – das sind die Kernel der Stable-Series, die eine vierte Nummer in der Versionsbezeichnung bekommen (2.6.33.1).
Treiber
Warum sind die meisten Treiber Bestandteil des Kernels? Wäre es nicht schlauer, wenn Kernel und Treiber separat ausgeliefert würden?
Der Linux-Kernel ist als „monolithischer Kernel“ konzipiert, bei dem neben Funktionen zur Prozess- und Speicherverwaltung auch Treiber ein direkter Bestandteil des Kernel sind. Der Linux-Kernel beherrscht allerdings schon lange das Auslagern von Treibern in Module, die sich zur Laufzeit nachladen lassen. Dadurch wäre es prinzipiell möglich, die meisten Treiber vom Rest des Kernels abzuspalten, damit Anwender sie ähnlich flexibel austauschen können wie unter Windows.
Bei monolithischen Kerneln können schon kleine Treiberfehler Störungen bis hin zum Systemabsturz verursachen – dank der Qualitätskontrolle durch die Kernel-Entwickler passiert das mit den zum Kernel gehörenden Treibern deutlich seltener als mit den wenigen Linux-Treibern, die unabhängig vom Kernel gewartet werden. Durch die Bündelung von Infrastruktur und Treibern können die Entwickler zudem problemlos Verbesserungen in einem Rutsch vornehmen, ohne sich ständig um Abstimmungsprobleme zwischen alten Treibern und neuer Infrastruktur oder der umgekehrten Kombination sorgen zu müssen.
Das sind nur zwei Aspekte einer erheblich komplexeren Thematik. Ohnehin ist und bleibt die Diskussion ĂĽber Vor- und Nachteile eher akademisch, solange nicht jemand versucht, solch eine Aufteilung umzusetzen. Das dĂĽrfte aber nicht so bald passieren, denn die Kernel-Entwickler und nicht wenige Anwender sind mit dem derzeitigen System durchaus zufrieden.
Eigenen Kernel kompilieren
Soll ich mir einen genau auf mein System abgestimmten Kernel selbst kompilieren?
Unbedingt, wenn Sie mehr über die Funktionsweise Ihrer Linux-Distribution und des Kernels selbst lernen wollen und den nicht gerade kleinen Einarbeitungsaufwand nicht scheuen. Manchmal kommt man auch gar nicht umhin – etwa wenn ein von der eigenen Hardware benötigter Treiber nur in einer neuen Kernel-Version enthalten ist, die der Distributor nicht bereitstellt.
Für die allermeisten Anwender ist das Kompilieren eines eigenen Kernels den Aufwand aber nicht wert, auch wenn ein genau auf den Prozessor des Systems abgestimmter Kernel manchmal ein klein wenig schneller arbeitet. Der Vorteil ist normalerweise so gering, dass er die zum Konfigurieren, Übersetzen und Installieren eines eigenen Kernels benötigte Zeit bei Weitem nicht wieder einspielt. Noch schlechter wird die Bilanz, wenn man die Pflege einrechnet, denn wer keinen Kernel mit bekannten Sicherheitslücken einsetzen will, muss ein- oder zweimal pro Monat – manchmal auch häufiger – ein Update einspielen.
(thl)