Linux 98

Linux-Kernel-Entwicklungen im Überblick

Test & Kaufberatung | Marktübersicht

Die Weiterentwicklung von Linux verläuft nicht mehr so spektakulär wie noch vor einigen Jahren, als täglich neue Patches erschienen. Ein Blick in die Glaskugel verrät jedoch schnell, daß die Entwicklung nicht stehengeblieben ist.

Selbst unter eingeschworenen Microsoft-Jüngern gilt es neuerdings als schick, noch ein Linux mit auf der Platte zu haben. Was 1991 als Hobby eines finnischen Studenten begann, hat sich längst zu einem vollwertigen Betriebssystem gemausert, das auch große Internet-Datenbankanbieter wie etwa Dejanews für ihre Dienstleistungen einsetzen ([1, 2]).

Diese Dynamik ist ungebrochen, auch wenn sich heutzutage die meisten Veränderungen 'unter der Haube' abspielen und dem Anwender verborgen bleiben. Die Entwicklung des Linux-Kernels läuft in zwei getrennten Versionen. Die Kernel mit einer geraden Versionsnummer hinter dem ersten Punkt (derzeit aktuell 2.0.33) gelten als 'stabile' Versionen für den produktiven Einsatz. Die ungeraden Versionen (derzeit 2.1.xx) sind Entwicklerversionen, in denen hier und da auch mal etwas nicht läuft. Sie sind Normalanwendern allenfalls in der Endphase ihrer Entwicklung zu empfehlen.

Naturgemäß bewegt sich im 'stabilen' Kernel relativ wenig, verglichen mit den Entwicklerversionen. Von der ursprünglichen Richtlinie, an einem stabilen Kernel ausschließlich kleinere Bugfixes vorzunehmen, wich Linus Torvalds, der immer noch alle Patches zentral veröffentlicht, in der Vergangenheit bereits einige Male ab. Ein besonders dicker Brocken war das Update von 2.0.30 auf 2.0.31 vor einigen Monaten: Der Source-Patch brachte es ungepackt auf fast drei Megabyte und brachte zahlreiche Neuerungen mit sich.

Große Verbreitung haben immer noch die Kernel-Versionen 2.0.27 und 2.0.29, die vielen Distributionen des vergangenen Jahres als Basiskernel dienten. Einige wurden vom Ersteller der Distribution bereits mit Ergänzungen versehen, was unter Umständen beim eigenständigen 'Hochpatchen' des Kernels zu Problemen führen kann. Im Zweifelsfall ist der sichere Weg die Installation eines unveränderten Kernel-Source-Archivs von [3].

Die Version 2.0.30 brachte im Frühjahr 97 die bereits vorher sehr beliebten ISS-Patches (Internet Server Supplement) in den Standard-Kernel. Dank des Feintunings von David S. Miller ist der TCP/IP-Stack seit dieser Version deutlich schneller geworden. Das hartnäckige Gerücht, daß TCP/IP-Networking unter Linux langsam sei, kann man damit endgültig ad acta legen.

Leider führten andere Änderungen im Kernel zu Instabilitäten dieser Version. Gerade die Betreiber von Internet-Servern, die von diesem Kernel am meisten profitieren, blieben daher häufig bei 2.0.29 und erweiterten diesen von Hand um die ISS-Patches.

Erst im Herbst erschien die ursprünglich als 'allerletzter Bugfix' geplante Version 2.0.31, die jedoch letztlich wiederum ein umfangreiches Upgrade zahlloser Abschnitte des Kernels enthielt. Die im allgemeinen Betrieb am deutlichsten spürbare war der nochmals modifizierte Buffercache, der Zugriffe auf Block-Devices wie etwa Festplatten puffert. Auch im Bereich SCSI gab es umfangreiche Updates (zum Beispiel in den Treibern für Symbios/NCR 53c8xx sowie Adaptec 7xxx). IDE-Anwender bekamen Unterstützung von ATAPI-Wechselmedien (Floppys, ZIP-Drives) sowie die automatische Erkennung auch des dritten und vierten Interface. Die SCSI-Emulation setzt SCSI-Befehle für ATAPI um und erlaubt somit den Betrieb von ATAPI-Geräten mit der Software für ihre SCSI-Pendants, bis spezielle ATAPI-Anpassungen verfügbar sind.

Am meisten dürften sich aber die ISDN-Benutzer über 2.0.31 gefreut haben, war doch der alternative ISDN-Treiber HiSax endlich Bestandteil des Kernels geworden. Schon lange war HiSax der ISDN-Treiber der Wahl für diejenigen, die eine Nicht-Teles-Karte betreiben wollten. Doch auch für Teles-Karten erwies sich HiSax im täglichen Einsatz als die stabilere Lösung. Nun, da HiSax 'amtlich' ist, hat sich die Liste der unterstützten ISDN-Karten in kurzer Zeit beträchtlich erweitert. Es läuft fast alles, was einen Siemens-Chipsatz auf der Karte hat, darunter neben Teles- und Creatix- inzwischen auch die Telekom-Karten Teledat 100 (baugleich Sedlbaur WinSpeed) und 150 (ältere baugleich AVM Fritz!, neuere Teles 16.3), USR Sportster TA, ITK ix1-micro sowie Eicon Diva und die passiven Elsa-Karten.

Aktuell wird der Treiber gerade auf die Zertifizierung durch das Bundesamt für Zulassungen in der Telefonkommunikation (BZT) vorbereitet, die die Firma Elsa sponsert. Zwar tragen alle unterstützten Karten bereits von Haus aus einen BZT-Aufkleber, eine Kartenzulassung erfolgt jedoch nur im Verbund mit der mitgelieferten Software, so daß sie beim Betrieb mit anderer Software erlischt. Die entsprechenden Modifikationen sind bis dato nur im HiSax für 2.1er-Kernel vorzufinden, werden jedoch zu gegebener Zeit auch in ein Release für den 'Anwender-Kernel' übernommen werden.

Wer nicht auf die bisher schleppende Aufnahme neuer HiSax-Versionen in den offiziellen Kernel warten möchte, hat gleich zwei Möglichkeiten: Zum einen stellt SuSE aktuelle Snapshots der Entwicklung per FTP zur Verfügung, zum anderen besteht auch die Möglichkeit, sich die aktuellen Versionen direkt aus der Versionsverwaltung der Entwickler auszuchecken. Eine ausführliche Beschreibung findet sich in der I4L-FAQ (http://www.lrz-muenchen.de/~ui161ab/www/i4l-faq/de-i4l-faq.html.gz). Vorsicht ist jedoch geboten: Die Routinen für die Kompatibilität zu Linux 2.0 sind in der Version 2.1 seit einiger Zeit nicht mehr enthalten - man braucht die zum Kernel passende HiSax-Version, damit alles funktioniert. Da die Versionsverwaltung CVS beide bereithält und per Default die aktuellere 2.1 liefert, sollten 2.0-Anwender das Paket 'isdn' aus 'isdn4kernel_2_0' auschecken.

Der Pentium-F00F-Bug war der Hauptverantwortliche für Version 2.0.32, die neben einem ersten Patch dafür auch einen gegen die 'Teardrop'-Attacke mitbrachte, mit der Linux-Rechner im lokalen Netz zum Stillstand gebracht werden konnten. Darüber hinaus wurde der Kernel-Support für das Network Time Protocol NTP erweitert und um die Möglichkeit eines externen Referenz-Zeitsignals ergänzt. Und die HiSax-Nutzer können ihren Treiber nun auch wieder als Modul kompilieren - in 2.0.31 wurde dafür versehentlich ein Symbol zu wenig exportiert.

Die momentan aktuelle Version 2.0.33 verdankt ihr Erscheinen wiederum dem F00F-Bug: Der erste Workaround war unter Performanceaspekten noch nicht ganz optimal, die neue Version löst das Problem eleganter. Daneben wurde ein Speicherleck beim Routing gefixt und die Speicherverwaltung modifiziert: Auch auf Pentium-Clones von AMD und Cyrix darf nun mit 'Pentium'-optimierten Kerneln gearbeitet werden.

Wer die weitere Kernel-Entwicklung mitverfolgen möchte, findet beim Linux-HQ einen wertvollen Einstiegspunkt. Zum Zeitpunkt der Fertigstellung dieses Artikels war der Site nach einem Wechsel des Verwalters und dem Umzug zu einem anderen Provider allerdings noch nicht vollständig wiederhergestellt. Die aktuellsten Patches und Treiberversionen, die noch nicht in die offiziellen Kernelsourcen aufgenommen wurden, finden sich beim Linux Maintenance Project und bei Linux Mama.

Eigentlich paßt isapnp nicht ganz in den Rahmen dieses Artikels. Da der Linux-Kernel auch in 2.0.33 noch keine Autokonfiguration von ISA-Plug&Play-Karten bietet, ist isapnp zumindest für die Zwischenzeit unverzichtbar. Entsprechender Support für den Kernel ist aber ebenfalls schon in Vorbereitung, siehe [9].

Insbesondere Soundkarten, aber auch ISDN- und Ethernet-Karten sind in letzter Zeit immer häufiger als PNP-Version anzutreffen. Diesen Karten muß man vor dem Initialisieren des Treibers die benötigten Ressourcen wie Interrupts und IO-Ports zuweisen. Dazu muß der Treiber als separates Modul vorliegen, das erst nach der Vergabe der Ressourcen geladen wird. Die eigentliche Konfiguration ist einfach: Das Tool pnpdump liest die Möglichkeiten der Karte aus und schreibt sie in eine Datei. Mit einem Editor löscht man anschließend bei den gewünschten Optionen und dem Aktualisierungsbefehl '(ACT Y)' jeweils das Kommentarzeichen '#' und schickt sie via 'isapnp' an die Karte.

Eine wesentliche Neuerung im Softwarebereich stellt die aktuelle GNU-Version der C-Bibliothek libc 2.0 dar. Das Zusammenwachsen von GNU- und Linux-libc, das schon in den 5.x-Versionen begann, ist damit abgeschlossen. Erste Distributionen (wie RedHat 5 oder auch die demnächst erwartete Debian 2.0) setzen bereits auf die GNU-libc auf.

Mitunter wird die GNU-libc auch als 'libc6' bezeichnet. Diese Versionsnummer bezieht sich auf die Schnittstellendefinition, die bei inkompatiblen Änderungen erhöht wird, damit 'alte' Programme weiterhin mit einer 'alten' Bibliothek arbeiten können. Die wesentlichen Neuerungen und Vorteile sind im Kasten zusammengestellt.

Zum Teil recht experimentell geht es in den Development-Kerneln zu. Das spiegelt sich auch in ausgefallenen Namen entsprechender Websites wie zum Beispiel 'Cutting Edge Linux' wieder. Sie dienen den Entwicklern als Spielwiese und interessierten Nutzern als 'public Betas' des nächsten stabilen Kernels.

Großes Interesse löste vor einiger Zeit die Ankündigung eines neuen Dateisystems aus. Das nach seinem Entwickler Hans Reiser benannte 'Reiser-FS' spiegelt neue Aspekte der Forschung über Dateisystemoptimierung wider. Die derzeitige Version wurde bislang zwar nur in einen älteren 2.1er-Kernel eingepaßt, vor dem Übergang zu einer stabilen Version soll es aber zum festen Bestandteil der unterstützten Dateisysteme werden.

Das Reiser-FS arbeitet - anders als das übliche ext2fs - nicht mit einer festen Aufteilung in Inode- und Datenblöcke fester Blockgröße. Damit empfiehlt es sich insbesondere dort, wo mit vielen kleinen Dateien gearbeitet wird, beispielsweise auf der News-Partition eines größeren News-Servers. Hier bietet es die größten Vorteile, sowohl durch Reduktion des Platzverbrauchs als auch durch Geschwindigkeitsvorteile im Umgang mit großen Verzeichnissen und im Zugriff auf die Dateien selbst. Den Benchmarks auf dem Website ist aber zu entnehmen, daß es auch im 'normalen' Betrieb nicht ungünstiger als das ext2fs ist.

Andere Neuentwicklungen sind bereits im offiziellen Kernel enthalten. So kann Linux bei den Netzwerk-Optionen nun als 'advanced router' konfiguriert werden. Ist die Option aktiviert, kennt Linux sowohl Routing in Abhängigkeit nicht nur von der Ziel-, sondern auch von der Absenderadresse (policy based routing), wie auch gleichberechtigtes Routen über mehr als eine Leitung (multipath routing) und unterschiedliche Routen je nach Inhalt des Type-of-service-Felds (TOS-abhängiges Routing). Auch die Unterstützung für IP Version 6, dem designierten Nachfolger der heutigen Version 4, wird in den 2.1ern kontinuierlich weiterentwickelt.

Relativ neu ist auch die Unterstützung von Videoeingabegeräten. Neben den Besitzern einer s/w-Quickcam und Bt848-basierenden Karten (wie der Hauppauge WinTV/pci oder der Miro PCTV) können auch die Eigentümer einer Mediavision Pro Movie Studio bei der Arbeit jetzt fernsehen. Für TV-Abstinenzler finden sich auch einige Radiokarten auf der Liste der unterstützten Hardware.

Die parallele Schnittstelle - bisher einem einzelnen Gerät wie dem Drucker vorbehalten - können sich jetzt mehrere Geräte teilen. Das 'parport'-Projekt von Tim Waugh et al. ermöglicht die gemeinsame Nutzung beispielsweise eines ZIP-Laufwerks und eines Druckers an einem Port. Eine ältere Version ist auch als Patch für 2.0 erhältlich. 'paride' stellt Treiber für die unterschiedlichsten IDE-Geräte am Parallelport bereit, darunter IDE- und ATAPI-Festplatten sowie ATAPI-CD-ROMs. Treiber für ATAPI-Bandlaufwerke sind in Vorbereitung, CD-R und CD-RW sind derzeit noch nicht geplant. Näheres zur Unterstützung paralleler Devices enthält [13].

Der md-Treiber, der RAID-Funktionen als Software bereitstellt, verspricht neben höherer Performance nun auch höhere Ausfallsicherheit. Neben dem bereits im Standard-Kernel enthaltenen RAID-Level 0 (Striping) sind mittlerweile auch die Level 1 (Mirroring), sowie 4 und 5 (Parity-Generierung, bei 4 auf einer Platte, bei 5 über das Set verteilt) implementiert. Anders als bei Level 0, das Geschwindigkeit auf Kosten des Ausfallrisikos gewinnt, wird also ein wenig Kapazität geopfert, um das Ausfallrisiko des Filesystems zu senken.

Es sind jedoch nicht nur Funktionen hinzugekommen, ein paar alte Zöpfe wurden auch abgeschnitten: Dazu zählt das ursprüngliche extfs, das bereits seit Jahren vom ext2fs abgelöst wurde und nun endgültig aus dem Kernel verschwindet. Auch muß der Kernel selbst nun zwingend als ELF kompiliert werden - alte Programme im a.out-Format können allerdings weiterhin verwendet werden.

Wer einen 2.1er-Kernel einfach nur mal so zum Ausprobieren kompilieren will, sollte vorher seine Systemausstattung überprüfen: Voraussetzung sind unter anderm modutils 2.1.55, binutils 2.8.1.0.1, ld.so 1.9.5 und procps 1.2 (Details finden sich in der Datei Documentation/ Changes). Bei einer aktuellen Distribution sind diese Versionen im allgemeinen dabei, bei einer älteren könnte das Abenteuer 2.1 zunächst in eine Update-Orgie ausarten.

Kein Betriebssystem kann allen Wünschen seiner Benutzer gerecht werden - auch Linux macht da keine Ausnahme. Für Programmierer, die wissen wollen, ob an ihrer Idee schon jemand arbeitet, oder gar noch nach einer Idee suchen (vielleicht für eine Semester- oder Diplomarbeit?), existieren Zusammenstellungen der Ideen und Wünsche der Benutzer [14, 15]. Die langen Aufstellungen, die auf der Linux-Kernel-Mailingliste sowie der Newsgruppe comp. os.linux.development.system basieren, dürften noch etliche Mannjahre Arbeit bereithalten. Zu den wünschenswertesten Neuerungen, die neuere Kernel bereithalten könnten, zählen dabei direkte Unterstützung für PCMCIA- und PnP-Karten (Anfänge davon sind bereits in 2.1 enthalten), sowie Vereinheitlichung bestehender Treiber-Interfaces, etwa der für CD-ROMs.

Bei vielen steht auch Generic Graphics Interface auf der Wunschliste. Das GGI will durch ein hardwareunabhängiges API für Ein- und Ausgabegeräte diverse Probleme der aktuellen Implementierung beseitigen, konnte den Kern der Entwicklermannschaft jedoch anscheinend noch nicht vollständig von den Vorteilen dieser Herangehensweise überzeugen. (ju)

[1] http://www.m-tech.ab.ca/linux-biz/

[2] http://sunsite.unc.edu/mdw/powered.html

[3] ftp://ftp.gwdg.de/pub/linux/kernel.org/kernel/v2.0/

[4] ftp://ftp.suse.com/pub/isdn4linux/v2.0/isdn/

[5] http://www.lrz-muenchen.de/~ui161ab/www/i4l-faq/de-i4l-faq.html.gz

[6] http://www.linuxhq.com/

[7] http://linux.dialnet.net/LMP/

[8] http://www.huwig.de/linux/mama/

[9] http://www.lpsg.demon.co.uk/pnp-linux.html

[10] http://squid.newwave.net/~linux/edge/

[11] http://idiom.com/~beverly/reiserfs.html

[12] http://www.cyberelk.demon.co.uk/parport.html

[13] http://www.torque.net/linux-pp.html

[14] http://www.cs.uml.edu/~acahalan/linux/wishlist.html

[15] http://www.uni-karlsruhe.de/~ig25/kernel-wishlist.html

[16] http://www.freiburg.linux.de/~ggi/

[17] http://www.gnu.org/software/libc/libc.html

[#anfang Seitenanfang]


Die GNU-libc ist mehr als nur eine 'libc6'. Zum einen ist die C-Bibliothek nicht Linux-spezifisch, sondern auch auf andere Systeme portierbar. Linux-Versionen sind bereits für x86, Alpha und m68k verfügbar und für Sparc, PPC und MIPS in Vorbereitung. Für 80x86-Systeme sind dabei schon etliche Handoptimierungen enthalten, wie etwa x87-Inline-Code in der Mathematikbibliothek 'libm' und optimierter 486/Pentium-Assemblercode bei den String-Funktionen. Neben Linux ist die GNU-libc auch für GNU Hurd verfügbar, Portierungen auf Solaris, Irix und HP-UX sind in Arbeit.

Des weiteren bietet die Bibliothek substantielle Verbesserungen, die den Schritt zu einer neuen Version rechtfertigen. Der Koordinator Ulrich Drepper sieht diese in erster Linie beim Multi-Threading - unter Linux bisher eher ein Fremdwort. Die GNU-Bibliothek ist Thread-safe, die nicht 'reentranten' Funktionen haben nun jeweils ein 'reentrantes' Gegenstück. Auch stdio ist nun vollständig Thread-safe, was in libc5 trotz zahlloser Hacks nur unzureichend bewerkstelligt werden konnte.

Ein weiterer Vorteil liegt in der Schaffung einer vom Kernel abstrahierenden Schnittstelle und der so ermöglichten Trennung der GNU-libc-Include-Dateien von denen des Kernels. Die Library-Entwicklung ist dadurch unabhängig von der des Kernels und muß dortigen Änderungen nicht mehr ständig hinterherlaufen. Erweitert wurde auch die Mathematik-Bibliothek, die nun nicht nur genauere, sondern oft auch schnellere Ergebnisse liefert. Eine vollständige Liste der Neuerungen sowie der Systeme, für die bereits Ports verfügbar bzw. in Entwicklung sind, bietet [17].

Ein Nachteil sei jedoch nicht verschwiegen: Nicht jeder alte Sourcecode läßt sich auf Anhieb mit der GNU-libc übersetzen, und dynamisch gelinkte Binaries bestehen sowieso auf 'ihrer' libc. Wohl dem, dessen Distribution ein 'Compatibility'-Paket mit einer alten libc beinhaltet. RedHat zum Beispiel verwendet die als sehr stabil geltende 5.3.12.

Wer sich die glibc selbst kompilieren will, ist wie auch beim Kernel 2.1 auf eine relativ aktuelle Systemausstattung angewiesen. Aktuelle Versionen von make, binutils, gcc und autoconf sowie GNU gettext sind Voraussetzung. Nur mit der neuen Bibliothek gelinkte Applikationen verwenden diese dann auch. Wer also nicht alle Programme selbst neu übersetzen will, sollte sich eine entsprechende Distribution besorgen.

[#anfang Seitenanfang]


Aktuelle Kernel-Patches und Vollversionen sind auf ftp.kernel.org zu finden. Das Einspielen eines Patches beschränkt sich auf ein 'zcat patch.gz | patch -sp0' im Verzeichnis mit dem Linux-Sourcetree (üblicherweise /usr/src), gefolgt vom Neuübersetzen des Kernels. Die Vorgehensweise ist in der Datei /usr/src/linux/README detailliert beschrieben. In der Regel genügt nach einem 'make xconfig' beziehungsweise 'make menuconfig' auf der Console die Kommandofolge

# make dep; make clean  # make zImage  # make modules; make modules_install

Auf keinen Fall darf man nach dem Kopieren des neuen Kernels aus arch/i386/boot/zImage ins Root-Verzeichnis den Aufruf des Bootloaders 'lilo' vergessen. Vorsichtshalber sollte die Konfigurationsdatei /etc/lilo.conf immer auch einen Eintrag für den funktionierenden, alten Kernel enthalten.

Anzeige