zurück zum Artikel

Die wichtigsten Neuerungen von Linux 2.6.20

Test & Kaufberatung | Test

Die Entwickler änderten beim neuen Kernel wenig an der Infrastruktur; mit verbesserter Hardware-Unterstützung, Techniken zur Virtualisierung und anderen erstmals enthaltenen Fähigkeiten bietet das neue Linux wieder zahlreiche Neuerungen.

Nach mehreren Vorabversionen und einer Entwicklungszeit, die länger dauerte als ursprünglich geplant, hat Linus Torvalds den Linux-Kernel 2.6.20 freigegeben [1]. Mit den Virtualisierungstechniken KVM [2] (Kernel-based Virtual Machine for Linux) und paravirt_ops kamen zwei größere neue Funktionen hinzu; auch zahlreiche Treiber sind erstmals enthalten oder wurden überarbeitet. Größere Änderungen an der bestehen Infrastruktur gab es anderes als bei den vorherigen Versionen diesmal kaum. Linus Torvalds hatte das Entwicklungstempo vorübergehend bewusst gedrosselt, und hoffte so bei 2.6.20 auf eine ruhigere und nicht so lange Entwicklungsphase – das brachte er unter Anderem in den Mails zur Freigabe der ersten [3] und siebten [4] Vorabversion zum Ausdruck. Hintergrund für diese im Vergleich zu den Vorversionen vorsichtigere Herangehensweise dürften diverse während der 2.6.19-Entwicklung geführte Diskussionen sein. In ihnen hatten einige Teilnehmer unter anderem gefordert, bei der Linux-Entwicklung ab und an für eine Version auf neue Features zu verzichten und sich ausschließlich auf Fehlerkorrekturen zu konzentrieren.

Ganz so vorsichtig war der Ansatz bei 2.6.20 dann aber doch nicht. So belegt der Patch extrahiert mit knapp 19 MByte zwar nur etwas mehr als halb so viel Platz wie der Ende November vorgestellten Version 2.6.19 [5], enthält aber trotzdem reichlich Neuerungen.

Während Xen schon lange vergeblich auf die Integration in den offiziellen Kernel hofft, schafften das mit 2.6.20 nun zwei andere Virtualisierungstechniken. Eine davon ist eine paravirt_ops [6] genannte generische Schnittstelle. Sie ermöglicht dem Kernel als Gast die Zusammenarbeit mit den Hypervisoren verschiedener Virtualisierungslösungen. Ein mit dieser Erweiterung kompilierter Kernel soll sowohl auf einem Standard-PC als auch unter verschiedenen Virtualisierungslösungen wie Xen oder dem Virtual Machine Interface (VMI) von VMware jeweils mit hoher Geschwindigkeit arbeiten. Anfangs nutzte nur der experimentelle, im Rahmen der paravirt_ops-Entwicklung programmierte Minimal-Hypervisor lguest [7] (vormals: lhype) die neue Schnittstelle. Die Xen-Entwickler präsentierten im Januar [8] ebenfalls Anpassungen an paravirt_ops – das dürfte die Chancen erhöhen, Teile von Xen in den Kernel zu integrieren. Für den Betrieb mit VMI sind derzeit noch weitere Kernel-Patches erforderlich und auch die x64-Architektur unterstützt die neue Schnittstelle noch nicht.

Bei KVM arbeitet der Kernel nach Laden eines Moduls selbst als Hypervisor für virtuelle Linux- oder Windows-Maschinen. Das gelingt jedoch nur in Zusammenarbeit mit den Virtualisierungsfunktionen aktueller x64-Prozessoren von Intel (VT: Vanderpool) oder AMD (AMD-V: Pacifica/Presidio, Secure Virtual Machine/SVM). KVM war erst im Oktober 2006 der Öffentlichkeit präsentiert worden und läuft auch unter älteren Kerneln. Wie bei Xen nutzt auch KVM zur unterstützenden Emulation typischer PC-Komponenten ein modifiziertes Qemu, um etwa eine Netzwerkkarte in den virtuellen Maschinen bereitzustellen. Nach der Aufnahme [9] von KVM zu Beginn der Entwicklung von 2.6.20 wurde die Umgebung noch laufend verbessert; einige Erweiterungen stehen bereits für 2.6.21 in Wartestellung, darunter ein überarbeitetes Interface zwischen Kernel und Userland. Zudem existiert bereits ein experimenteller Ansatz [10], mit dem ein in Teilen para-virtualisierter Linux-Gast unter KVM besserere Performance bieten soll.

Trotz der vorsichtigeren Herangehensweise bei 2.6.20 gab es doch einige Änderungen und Erweiterungen an der Infrastruktur von Linux. Größere Anpassungen [11] in zahlreichen Bereichen des Kernel-Quellcodes erfolgten etwa im Rahmen einer Überarbeitung [12] des Workqueue-Mechanismus und dessen APIs. Er regelt die Ausführungszeitpunkt bestimmte Kernel-Aufgaben und soll das nun mit weniger Overhead als zuvor erledigen.

Kernel 2.6.20 lässt sich mit einer internen Timerfrequenz von 300 Hertz [13] konfigurieren – bisher waren 100, 250 und 1000 Hertz möglich. Linux soll so sowohl bei der Video-Wiedergabe von PAL (25 fps) als auch von NTSC (knapp 30 fps) ein besseres Reaktionsverhalten zeigen, da sich 300 sowohl durch 30 als auch 25 teilen lässt.

Das Kernel-Image ist auf der x86-Architektur nun relocatable [14], muss also nicht mehr wie zuvor an einerm bestimmten Speicherbereich vorliegen. Der kompilierte Kernel wird durch die Erweiterung zirka 10 Prozent größer, zur Laufzeit soll es jedoch keinen Unterschied im Speicherverbrauch geben. Durch diese Erweiterung müssen die Distributoren nun nicht mehr separate Kernel-Images für kexec oder kdump ausliefern. Diese beiden Techniken arbeiten seit 2.6.20 [15] nun auch auf IA64.

An dem in 2.6.19 aufgenommenen Cluster-Dateisystem GFS2 [16] gab es zahlreiche Korrekturen und Erweiterungen. Relative atime [17] verändert das Verhalten beim Aktualisieren des Access-Zeitstempels in Dateisystemen; das gelingt bisher nur mit OCFS2 und ist etwa für Mail-Clients wie mutt interessant. Mittels IO-Accounting [18] lassen sich zukünftig die Menge der Ein- und Ausgaben von Prozessen genauer analysieren. Über das Fault Injection Framework [19] können Entwickler Fehler etwa bei der Speicheranforderung gezielt oder zufällig simulieren, um so die Fehlerbehandlung des Kernel zu testen.

Software-Suspend gelingt [20] nun auch mit Swap-Files [21] und arbeitet auf der x86-Architektur jetzt mit Kerneln, die PAE nutzen [22]. 2.6.20 lässt sich speziell auf die Core-Mikroarchitektur optimieren [23] – vollends zum Tragen kommt dies jedoch nur mit Entwicklerversionen der GCC, die das Binary speziell auf Intels aktuelle Prozessor-Architektur optimieren kann. Die Unterstützung für alte Udev-Versionen in Sysfs lässt sich in Zukunft über die Kernel-Konfiguration festlegen [24]

Den in seltenen Fällen seit Kernel 2.6.19 auftretenden Fehler [25] beim Schreiben von Daten korrigierten die Entwickler ebenfalls – bereits zuvor hatte die in der zweiten Januarwoche veröffentlichte Version 2.6.19.2 [26] das Problem behoben, an dessen Beseitigung die Entwickler vier Wochen forschten [27].

Weiter: Treiber, Ausblick auf 2.6.21, Lesestoff [28]

Darüber hinaus drehten sich die Änderungen bei 2.6.20 weitgehend um Hardware-Unterstützung; so erweiterten die Entwickler etwa den Code [29] für PPC/Cell-Architektur um Unterstützung [30] für die Playstation 3. Zahlreiche PS3-spezifische Treiber etwa für die Audio- oder Netzwerk-Hardware fehlen allerdings noch und dürften erst in späteren Kernel-Versionen Einzug finden. Kurz vor der Fertigstellung von 2.6.20 nahmen die Entwickler noch einen Patch [31] auf, der klarstellt, dass die Unterstützung der PS3 noch unvollständig ist.

2.6.20 unterstützt bereits den SMBus-, SATA- und Audio-Controller der erst in einigen Monaten erwarteten Intel-Southbridge-Serie ICH9. Die auf einigen neuen Mainboards verwendeten Marvell-Parallel-ATA-Controller 6101 und 6145 spricht der neue Treiber pata_marvell [32] an. Für die PATA-Controller in Embedded-Geräten steht nun der generische Libata-Treiber pata_platform [33] bereit. Das Modul sata_nv beherrscht [34] erstmals NCQ (Native Command Queuing) mit Nvidias nForce4 und der AHCI-Treiber versucht seit 2.6.20 jegliche [35] AHCI-Controller anzusprechen. An den mit 2.6.19 aufgenommenen PATA-Treibern des libata-frameworks gab es zahlreiche Verbesserung, darunter Unterstützung [36] von Suspend und Resume.

Erstmals dabei ist das Modul netxen_nic [37] für den NetXen Multi port (1/10) Gigabit Ethernet NIC; der Chelsio-Treiber [38] kann nun mit mehr 10-Gigabit-Ethernet-Chips umgehen. Die in 2.6.20 enthaltenen Netzwerktreiber unterstützen jetzt die Marvell-Chips 88e1145, 88e111s und 88ec033, die Broadcom-Chips 5709 und 5787F sowie Nvidias MCP67. Der e1000-Treiber für Intel-NICs kennt nun ebenfalls einige ihm vorher unbekannte Chips und soll zudem zügiger arbeiten. Die Ipw2200-WLAN-Treiber aktualisierten die Entwickler auf Version 1.2.0. Für das H.323-Protokoll enthält 2.6.20 ein Modul [39] zum Connection Tracking auf Firewalls mit NAT (Network Address Translation). Das Modul zum NAT-Connection-Tracking bei SIP (Session Initiation Protocol) soll zudem zuverlässiger [40] funktionieren.

Der Quellcode für Human Interface Devices (HID) ist jetzt eigenständig [41] und nicht mehr eng mit dem USB-Subsystem verknüpft. Letzteres kann nun bis zu 31 Hubs [42] hinter dem Root-Hub ansprechen. Im Video-for-Linux-Bereich kamen Treiber [43] für die Kameras in den Notebooks der Initiative OLPC (One Laptop Per Child) hinzu. Neu ist auch der Usbvision-Treiber [44] für 56 verschiedene USB-Video- und Audio-Geräte. Die aufgenommenen Module dib7000p [45] und dib7000m [46] unterstützen etwa die DVB-T-Tuner DiBcom DiB7000PC.

Überarbeitungen an ACPI sollen die Takt- und Spannungsanpassung im Cpufreq-Modul acpi verbessern [47] und den Treiber speedstep-centrino überflüssig [48] machen. Zudem koordiniert der ACPI-Treiber die Änderungen auf den verschiedenen Kernen von Dual-Core-CPUs nun besser. Das Modul p4-clockmod bremst nun auch Pentium M oder den Core Duo mittels Throttling, warnt [49] beim Laden aber explizit, das Takt- und Spannungsanpassung effizienter als Trottling ist.

Hardware-Monitoring-Treiber für den W83793 [50] von Winbond und den PC87427 [51] von National Semiconducors sind erstmals enthalten; das neue Modul f71805f [52] unterstützt Finteks F71872F/FG und kann dessen Lüftersteuerung beeinflussen. Der Treiber Ams [53] spricht den Apple Motion Sensor verschiedener PowerBooks und iBooks an.

Die SCSI-Treiber können dank "Asynchronous scsi scanning" in 2.6.20 mit einem separaten Threads pro Hostcontroller parallel [54] nach SCSI-Geräten suchen und so den Systemstart beschleunigen. Ähnliche Ansätze gibt es auch bei USB und PCI. So kam zu Beginn der 2.6.20 Entwicklung ein Patch hinzu, der die Erkennung und Initialisierung auf dem USB-Bus mit einem eigenen Thread [55] pro Gerät ermöglichte. Das sollte nicht nur schneller, sondern auch zuverlässiger arbeiten – kurz vor der Fertigstellung des neuen Linux deaktivierten [56] die Entwickler die Funktion jedoch. Die mit 2.6.19 hinzugekommene, aber vor der Freigabe des Kernels deaktivierte Funktion zum parallelen Suchen nach PCI-Hardware wurde während der Entwicklung von 2.6.20 kurzzeitig wieder aktiviert, dann jedoch erneut deaktiviert und soll möglicherweise komplett verworfen werden.

Einige der veralteten [57] OSS-Audio-Treiber, für die Linux mindestens einen gleichwertiger Alsa-Treiber mitbringt, lassen sich bei der Kernel-Konfiguration von 2.6.20 nicht mehr aktivieren – darunter etwa der Treiber emu10k1 für zahlreiche Varianten der Creative Sound Blaster Live. Komplett entfernten [58] die Entwickler wie zuvor angekündigt den Frame Diverter für Netzwerkpakete und den Treiber ftape [59] (Floppy Tape). Die Sound-Treiber enthalten einige Korrekturen aus der Alsa-Version 1.0.14-rc1. Größere Änderungen fehlen jedoch, da die Alsa-Entwickler ihre Patches zu spät zur Aufnahme anboten – sie müssen sich nun mit bis zum Start der 2.6.21-Entwicklung in Geduld üben.

In den nächsten zwei Wochen dürften die Entwickler die größten Neuerungen für 2.6.21 aufnehmen, bevor die normalerweise rund sechswöchige Stabilisierungsphase beginnt. An technischen Neuerungen steht für 2.6.21 schon wieder einiges an: So möchten die Programmierer der High Resolution Timers [60] nach der Aufnahme der Basis-Infrastruktur in 2.6.16 nun auch gerne die erweiterte Variante integriert sehen und arbeiten schon seit 2.6.19 darauf aktiv hin. Zusammen mit den High Resolution Timers dürften auch die im selben Patchset enthaltenen "Dynamic Ticks" einziehen, die bei einem unbelasteten System den Stromverbrauch durch vorübergehendes Ausschalten des Timer-Interrupts senken sollen.

Im von Andrew Morton gepflegten mm-Entwicklerkernel [61] finden sich zudem zahlreiche weitere Neuerungen, die möglicherweise bald in den offiziellen Kernel Einzug halten. Dazu zählt etwa auch unionfs [62], das bei zahlreichen Linux-Live-CDs zum Einsatz kommt. Die Arbeiten [63] am neuen WLAN-Stack ziehen sich aber wohl noch etwas hin. Vorgeschlagen wurde zudem das Framework Automatic Kernel Tunables (AKT [64]), das verschiedene Performance-relevante Kernel-Parameter je nach Systemlast automatisch anpasst und so optimale Performance in verschiedensten Lastsituationen ermöglichen soll; Morton beäugte den Ansatz jedoch erstmal kritisch [65].

Nicht integrieren [66] wollten die Kernel-Entwickler hingegen den in zahlreichen Distributionen enthaltenen Patch, der das Nachladen von ACPI-DSDT-Tabellen aus der Initial-Ramdisk ermöglicht. Dies sei jedoch laut einigen prominenten Kernel-Entwicklern des falsche Ansatz; statt dessen sollten die Entwickler den Linux-ACPI-Interpreter verbessern, sodass er nicht so leicht über Fehler in den ACPI-Tabellen stolpert. Laut Alan Cox verletzt [67] das Auslesen und Einspielen der Tabellen gar das Copyright der Hersteller. Eine fehlerhaftes Modifizieren der ACPI-Tabellen kann in seltenen Fällen auch Hardware-Schäden nach sich ziehen.

Während der Entwicklung von 2.6.20 schlugen zahlreiche bekannte Kernel-Entwickler auf der Kernel-Mailingliste vor, in ab 2008 freigegebenen Kerneln das Laden von proprietären Treibern zu unterbinden [68]. Die heutigen Grafikkartentreiber von ATI und Nvidia und viele andere Closed-Source-Treiber würden dann nicht mehr funktionieren. Linus Torvalds stellte sich den Bestrebungen in der hitzigen Diskussion jedoch entgegen und überzeugte einige der Entwickler, von dem Vorhaben abzusehen. Eine Lösung für die umstrittenen, in einem "rechtlich grauen Bereich" arbeitenden proprietären Treiber, die nach Ansicht einiger Linux-Programmierer das Linux-Copyright verletzen, ist weiter nicht in Sicht.

Wer sich mit dem Kernel näher auseinander setzen möchte, dürfte an dem neu erschienenen englischen Buch Linux Kernel in a Nutshell [69] gefallen finden. Es beschäftigt sich detailliert mit der Konfiguration und dem Kompilieren von Linux-Kerneln sowie zahlreichen anderen für fortgeschrittene Anwender interessante Linux-Interna. Geschrieben wurde es von Greg Kroah-Hartman, Mitglied des Stable-Kernel-Teams, Verwalter diverser Subsysteme und auch durch seine Diskussionen rund um Probleme und Gefahren von proprietären Linux-Treibern [70] bekannt. Das Buch erscheint bei O'Reilly, ist alternativ aber auch über kernel.org als kostenloser Download erhältlich – etwa als 3 MByte großes tar.bz2-Archiv [71] mit PDF-Dateien.

Die Server hinter kernel.org haben in den vergangenen Wochen indes mit Überlastung zu kämpfen – daher finden sich neu freigegebene Kernel teilweise erst nach einigen Stunden auf den Servern. Auch die Verteilung an die Mirror arbeitet langsamer als gewohnt. Die verstärkte Nutzung von git soll für die hohe Last wohl die Hauptursache [72] sein. Ein Wechsel von ext3 auf ein anderes Dateisystem wie XFS könne das Problem möglicherweise mindern, die Kernel-Entwickler evaluieren derzeit jedoch auch, ob Verbesserungen an ext3 helfen, die Last zu reduzieren. Zudem wollen die Administratoren in Kürze einen weiterer Server speziell für git [73] aufsetzen. (thl [74])


Durch die hohe Server-Last ist der Zugriff auf kernel.org [75] derzeit etwas mühsam; auf der Kernel-Site steht Linux 2.6.20 aber bereit – etwa bzip2 komprimiert als Patch [76] gegen die Vorgänger oder als komplettes [77] Archiv. Bald dürften dann auch die deutschen Spiegelserver [78] nachziehen und den Patch [79] oder das komplette Archiv [80] bereithalten.

Sämtliche Änderungen listet das ausführliche Changelog [81] – die wichtigen fasst zudem das Kernelnewbies-Wiki [82] ausführlich zusammen. Es bietet auch einige weiterführende Links zu den jeweils relevanten Änderungen in Quellcode-Verwaltungssystem des Kernels sowie teilweise auch zu detaillierten Beschreibungen der betroffenen Techniken.


URL dieses Artikels:
http://www.heise.de/-222041

Links in diesem Artikel:
[1] http://www.uwsg.indiana.edu/hypermail/linux/kernel/0702.0/1046.html
[2] http://kvm.sf.net
[3] http://www.uwsg.indiana.edu/hypermail/linux/kernel/0612.1/1860.html
[4] http://www.uwsg.indiana.edu/hypermail/linux/kernel/0701.3/2334.html
[5] https://www.heise.de/ct/artikel/Die-wichtigsten-Neuerungen-von-Linux-2-6-19-222007.html
[6] http://git2.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=d3561b7fa0fb0fc583bab0eeda32bec9e4c4056d
[7] http://lhype.ozlabs.org/
[8] http://thread.gmane.org/gmane.linux.kernel/483368/focus=483368
[9] http://git2.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=6aa8b732ca01c3d7a54e93f4d701b8aabbe60fb7
[10] http://thread.gmane.org/gmane.linux.kernel/481084/focus=481084
[11] http://git2.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=c4028958b6ecad064b1a6303a6a5906d4fe48d73
[12] http://git2.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=52bad64d95bd89e08c49ec5a071fa6dcbe5a1a9c
[13] http://git2.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=40fcfc87222e2e8af6379ec366f0cb2a411570cd
[14] http://git2.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=968de4f02621db35b8ae5239c8cfc6664fb872d8
[15] http://git2.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=a79561134f38de12dce14ed72138f38e55ef53fc
[16] https://www.heise.de/meldung/Cluster-Dateisystem-GFS2-fuer-Linux-2-6-19-aufgenommen-168402.html
[17] http://git2.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=47ae32d6a54955a041cdc30b06d0bb16e75f68d5
[18] http://git2.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=7c3ab7381e79dfc7db14a67c6f4f3285664e1ec2
[19] http://git2.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=de1ba09b214056365d9082982905b255caafb7a2
[20] http://git2.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=915bae9ebe41e52d71ad8b06d50e4ab26189f964
[21] http://git2.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=ecbd0da1eced957e0cbb611b4a4cb5b0cf63ba31
[22] http://git2.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=2d4a34c9365c6e3f94a5b26ce296e1fce9b66c8b
[23] http://git2.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=713819989aa4dd141a37074dbc369e7c620bc619
[24] http://git2.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=88a22c985e3545c55c9779971007f0f29f912519
[25] http://lwn.net/Articles/215235/
[26] https://www.heise.de/meldung/Linux-2-6-19-2-behebt-kritischen-Datenfehler-sowie-Sicherheitsluecken-133183.html
[27] http://marc.theaimsgroup.com/?t=116550778700006&r=1&w=2
[28] http://www.heise.de/open/artikel/83933/1
[29] http://git2.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=f58a9d171a346afb1b09190427e6c28c6118703e
[30] https://www.heise.de/meldung/Kernel-2-6-20-spielt-mit-Playstation-3-125005.html
[31] http://git2.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commitdiff;h=05916eec9f4d4370ef9a6cbb699f637302f6e157
[32] http://git2.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=75742cb41e4b5c7913f385b9688aad69c9fa7ada
[33] http://git2.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=a20c9e820864e18b59d2a4f2f04e8b6053986c95
[34] http://git2.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=fbbb262d9ea9bdbd79d7058271560e9990bc62d3
[35] http://git2.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=415ae2b5c03b6ed1a041a473885e502d297e1d37
[36] http://git2.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=30ced0f0d211999f316930eff7287aa5a9995bef
[37] http://git2.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=3d396eb17e9f8c5f59314078b45b88647591378d
[38] http://git2.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=f1d3d38af75789f1b82969b83b69cab540609789
[39] http://git2.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=f587de0e2feb9eb9b94f98d0a7b7437e4d6617b4
[40] http://git2.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=1b683b551209ca46ae59b29572018001db5af078
[41] http://git2.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=dde5845a529ff753364a6d1aea61180946270bfa
[42] http://git2.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=437052516779fea608261a50682b124315f48f01
[43] http://git2.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=d905b382d797a213e15868cbf3204f50ed52e30b
[44] http://git2.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=781aa1d1ab7ba13314af0af6c5d70c0eb0e96bf4
[45] http://git2.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=a75763ffff4175bd8c115c217a39fbf445612aae
[46] http://git2.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=69ea31e7debdefcf1412e8d590ae9bd90cf9253f
[47] http://git2.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=519ce3ec76bf5c068e575800a9977659f7cccec4
[48] http://git2.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=83d0515bbb10c7a3e52eee697d1032e447291eda
[49] http://git2.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=4e74663c5d7eefc1f953b9b0bdacab09917b4eac
[50] http://git2.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=6800c3d027b4458a6fb5ab78064c2e3b7da2f94f
[51] http://git2.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=ba224e2c4f0a706714ccb483b0c21d32f5994f67
[52] http://git2.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=51c997d80e1f625aea3426a8a9087f5830ac6db3
[53] http://git2.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=dcb69dd010c182507a8db8940618f6413f65e0af
[54] http://git2.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=3e082a910d217b2e7b186077ebf5a1126a68c62f
[55] http://git2.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=c066475e1fe3b3afbd613ddf5f1eca9be4fb6de0
[56] http://git2.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=b1bf4f412b4818869106ffcb5304d69551697b9c
[57] http://git2.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=c67220480e0dc6442851691c81c2ff7aa48f9d8f
[58] http://git2.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=90833aa4f496d69ca374af6acef7d1614c8693ff
[59] http://git2.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=d916faace3efc0bf19fe9a615a1ab8fa1a24cd93
[60] http://www.uwsg.indiana.edu/hypermail/linux/kernel/0610.0/0222.html
[61] http://www.kernel.org/pub/linux/kernel/people/akpm/patches/2.6/2.6.2/2.6.2-mm1/
[62] http://www.am-utils.org/project-unionfs.html
[63] http://thread.gmane.org/gmane.linux.network/49031/focus=49031
[64] http://www.uwsg.indiana.edu/hypermail/linux/kernel/0701.3/1904.html
[65] http://www.uwsg.indiana.edu/hypermail/linux/kernel/0701.2/1422.html
[66] http://thread.gmane.org/gmane.linux.kernel/471795/focus=471795
[67] http://thread.gmane.org/gmane.linux.kernel/471795/focus=471868
[68] https://www.heise.de/meldung/Erneut-Debatte-um-Verbot-proprietaerer-Linux-Treiber-126716.html
[69] http://www.kroah.com/lkn/
[70] https://www.heise.de/meldung/Erneut-Debatte-um-Verbot-proprietaerer-Linux-Treiber-126716.html
[71] ftp://ftp.de.kernel.org/pub/linux/kernel/people/gregkh/lkn/lkn_pdf.tar.bz2
[72] http://thread.gmane.org/gmane.comp.version-control.git/36126
[73] http://www.uwsg.indiana.edu/hypermail/linux/kernel/0701.3/1028.html
[74] mailto:thl@heiseopen.de
[75] http://www.kernel.org
[76] http://www.kernel.org/pub/linux/kernel/v2.6/patch-2.6.20.bz2
[77] http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.20.tar.bz2
[78] ftp://ftp.de.kernel.org/pub/linux/kernel/v2.6/
[79] ftp://ftp.de.kernel.org/pub/linux/kernel/v2.6/patch-2.6.20.bz2
[80] ftp://ftp.de.kernel.org/pub/linux/kernel/v2.6/linux-2.6.20.tar.bz2
[81] http://www.kernel.org/pub/linux/kernel/v2.6/ChangeLog-2.6.20
[82] http://kernelnewbies.org/Linux_2_6_20