WLAN im Linux-Kernel: Auf dem Weg zur Konsolidierung

In den letzten Monaten hat die Entwicklung rund um die Linux-WLAN-Unterstützung gewaltig an Fahrt aufgenommen. Wenn die Entwickler bald an einem Strang ziehen, dürfte ich die Treiber-Situation in absehbarer Zeit nachhaltig verbessern.

In Pocket speichern vorlesen Druckansicht
Lesezeit: 9 Min.
Von
  • Thorsten Leemhuis
  • Dr. Oliver Diedrich
Inhaltsverzeichnis

Die Menge der im Linux-Kernel enthaltenen Treiber für die unterschiedlichsten Hardware-Komponenten ist gewaltig, die Zahl der WLAN-Treiber beschränkte sich jedoch lange auf eine sehr überschaubare Zahl. Zwar gibt es bereits seit langer Zeit eine ganze Reihe von Treibern für verschiedene WLAN-Chips, doch nur wenige fanden bisher die Aufnahme in den offiziellen Kernel – etwa hermes und orinoco für Intersils Primsm-II-Chips für 802.11b-WLAN sowie später prism54 für 802.11abg-Chips aus gleichem Hause.

Diverse viel genutzte Treiber wie Host AP für die Intersil-Chips Prism2/2.5/3 sowie ipw2100 und ipw2200 für die in vielen Centrino-Notebooks verbauten WLAN-Module von Intel hingegen wurden lange in unabhängigen Projekten gepflegt und erst vor kurzem in den Kernel integriert. Viele andere, darunter auch wlan-ng oder der madwifi-Treiber, sind nur in Form unabhängiger Kernelmodule erhältlich. Sofern der Hersteller der eigenen Linux-Distribution diese Treiber nicht in seinen Kernel integriert hat, gelingt ihre Einrichtung nur erfahrenen Anwendern.

Grund für die Weigerung der Kernel-Entwickler, die Treiber in den Vanilla-Kernel aufzunehmen, ist dabei weniger die mangelnde Qualität des Quellcodes. Vielmehr störten sie die vielen unterschiedlichen Ansätze der WLAN-Treiberentwickler: Da im Kernel ein einheitliches Framework, das die von allen WLAN-Treibern benötigten Funktionen einmal grundlegend implementiert, fehlte, erfanden viele Entwickler mit jedem neuen Treiber auch zahlreiche Räder immer wieder neu.

Im Juni 2004 rief der Verwalter der Netzwerk-Treiber im Linux-Kernel, Jeff Garzik, dazu auf, einen universellen Wireless-Stack zu entwickeln und in den Kernel aufzunehmen, auf den die verschiedenen WLAN-Treiber aufsetzen können. Als Basis für das IEEE80211-Subsystem wurden große Teile des Quellcodes des Host-AP-Treibers auserkoren.

Die Fertigstellung des maßgeblich vom Host-AP- und Intel-Entwicklern vorangetriebene WLAN-Subsystems zog sich jedoch in die Länge. Erst im Oktober 2005 hielt es – zusammen mit dem Host-AP-Code und den Treibern für die in älteren Centrino-Notebooks zu findenden WLAN-Module ipw2100 und ipw2200 – Einzug in den Kernel 2.6.14. Die Lösung ließ jedoch zu wünschen übrig: Die beiden Intel-Treiber beispielsweise waren nicht aktuell und bereiteten einigen Anwendern Schwierigkeiten, die zuvor schon neuere Treiberversionen genutzt hatten – ein Problem, das im Kernel 2.6.15 behoben wurde.

Unter den Entwicklern externer WLAN-Treiber schien das neue IEEE80211-Subsystem jedoch nicht viele Freunde zu finden. Anders als es sonst häufig bei der Einführung eines neuen Subsystem im Kernel geschieht, passten die meisten Entwickler weder ihre Treiber an das neue Framework an noch übermittelten sie ihren Code zur Aufnahme in den Kernel. Vielmehr setzten sie weiter auf externe Erweiterungen wie SoftMAC oder Dscape, die sich in der Zwischenzeit entwickelten hatten.

Bei SoftMAC handelt es sich um eine Erweiterung des IEEE80211-Subsystems des Kernel. Sie implementiert einige generische WLAN-Treiber-Funktionen in Software, die die Host-AP- und Intel-Treiber von der Hardware erledigen lassen, was viele der billigeren WLAN-Chips jedoch nicht beherrschen.

Der Dscape-Stack ist hingegen ein ganz neuer Ansatz, der mit dem in Kernel 2.6.14 aufgenommenen IEEE80211-Subsystem konkurriert. Das auf Hard- und Software rund um WLAN spezialisierte Unternehmen Devicescape hatte die Software im Rahmen der eigenen Produktentwicklung programmiert und vor einigen Monaten unter GPL gestellt. Sie implementiert neben den Funktionen des im Kernel enthaltenen WLAN-Subsystems und den SoftMAC-Erweiterung auch WPA und einige andere Funktionen, die mit den anderen WLAN-Frameworks nicht möglich sind.

Anfang 2006 fasste Jeff Garzik die seines Erachtens weiterhin schlechte Situation rund um WLAN im Linux-Kernel in der Mail "State of the Union: Wireless" zusammen. Dabei verglich er den zu der Zeit herrschenden Zustand mit den Tagen von Linux 0.99, wo der Betrieb von Hardware entweder Glück, Programmierkenntnisse oder beides erforderte. Nun benannten die Entwickler mit dem wie Garzik bei Red Hat beschäftigten John W. Linville erstmals einen Verwalter für das WLAN-Subsystem des Kernels. Schon nach kurzer Zeit startete er mit konkreten Ideen, um die Situation langfristig zu verbessern.

Seitdem hat das Entwicklungstempo rund um WLAN-Treiber und -Subsysteme deutlich zugenommen. Linville begann in einem eigenen Kernel-Tree, zusammen mit anderen Entwicklern die verschiedene Ansätze und die wichtigsten Treiber unter einen Hut zu bringen. In einem Treffen der wichtigsten Linux-WLAN-Entwickler Anfang April wurden dann einige Zukunftspläne festgeklopft.

Als ein Ergebnis des Treffens nahm man die SoftMAC-Erweiterung in die Entwicklerversion des kommenden Kernels 2.6.17 auf. Darauf folgte nur wenige Tage später der auf SoftMAC aufsetzende Treiber bcm43xx für die verbreiteten Braodcom-WLAN-Chips, die sich unter anderem in vielen Produkten von Apple und Dell finden.

Was so zunächst wie das Ende des konkurrierenden Dscape-Stacks aussah, entpuppte sich jedoch eher als Übergangslösung: In einer Mail an die Entwicklermailingliste erklärte Linville, dass er den von Devicescape beigesteuerten und maßgeblich von Jiri Benc weiterentwickelten Quellcode in den Hauptentwicklerbaum aufgenommen habe. Den Dscape-Stack bezeichnete er als "die Zukunft" für WLAN unter Linux, auf den sich ein Großteil der Entwickler geeinigt habe. In Linvilles Entwicklerkernel sind bereits eine angepasste Variante des bcm43xx-Treibers sowie Treiber für verschiedene Ralink-WLAN-Chips enthalten.

Devicescape zeigte sich von diesen Aussichten begeistert und veröffentlichte eine Mitteilung, die die Freigabe des eignen "Advanced Datapath Driver" unter der GPL bekannt gibt. Dabei verweist das Unternehmen auf den Kerneltree von Linville mit dem – freilich schon seit langem unter GPL freigegebenen – eigenen WLAN-Stack.

Aussagen zu den weiteren Planungen zum alten IEE80211-Subsystem und den SoftMAC-Erweiterungen macht Linville nicht; Patches, die die bestehenden Treiber auf den Devicescape-Stack portieren, will er aber gerne annehmen. Da die Kernel-Entwickler kaum dauerhaft zwei Subsysteme mit ähnlichen Aufgaben pflegen werden, ist es wahrscheinlich, dass die Entwickler den aktuellen IEEE80211-Code nach der Portierung der bestehenden Treiber aufden Dscape-Stack und einer Übergangsphase bald wieder aus dem Kernel entfernen.

Für die Entwickler von Treibern wie dem bei neueren Centrino-Notebooks benötigten ipw3945 dürfte die Anpassung an den neuen Stack allerdings noch einiges an Arbeit bedeuten – und die Aufnahme des Treibers in den Standard-Kernel möglicherweise verzögern. Der unter GPL stehende ipw3945-Treber ist aber auch generell nicht unumstritten, da er ein proprietäres Userland-Programm benötigt, das den WLAN-Adapter an die jeweiligen regionalen Richtlinien, Vorschriften und Gesetze zum WLAN-Betrieb anpasst. Einige Kernel-Entwickler kritisierten diese Vorgehensweise heftig und deuteten an, dass solch ein Treiberkonzept keine Chancen auf Integration in den Kernel hätte.

Im Rahmen der Diskussion wurde allerdings angemerkt, das Intel aufgrund staatlicher Richtlinien den Treiber gar nicht komplett als Open-Source realisieren könne, wenn das Unternehmen nicht in verschiedenen Ländern unterschiedliche, auf die jeweiligen regionalen Richtlinien abgestimmte Hardware verkaufen wolle. Ob dieser in der Vergangenheit bereits häufiger gehörte Einwand zutrifft, ist freilich umstritten.

Mit einem teilweise proprietären Treiber arbeiten auch andere WLAN-Lösungen für Linux: Der madwifi-Treiber für Atheos-Chipsätze beispielsweise setzt auf einen nur vorkompiliert vorliegenden Hardware Abstraction Layer (HAL), der direkt in den Treiber kompiliert wird und – anders als die Firmware mancher anderen Karten – nicht auf der WLAN-Hardware, sondern auf dem Host-System läuft. In den Kernel werden die Treiber daher wohl nie einziehen; ausschließlich auf Open Source setzende Distributionen wie Debian und Fedora integrieren sie ebenfalls nicht.

Schlecht stehen die Chancen auf Integration auch für Ndiswrapper, eine Software, mit der sich Windows-Treiber unter Linux nutzen lassen. Moderne Kernel setzen bei dessen Verwendung genauso wie bei proprietären Treibern das Flag tainted (beschmutzt, befleckt) -- Kernel-Entwickler und Distributionen verweigern dann häufig den Support bei im Kernel auftretenden Fehlern.

Die aktuellen Entwicklungen hin auf einen einheitlichen, von der Mehrzahl der Entwickler unterstützten WLAN-Stack im Kernel lassen auf einen deutlich besseren WLAN-Support für Linux hoffen. Bis dieses Ziel erreicht ist, steht einigen Entwicklern allerdings noch ein gutes Stück harte Arbeit bevor. Zudem existieren mit Intels in Teilen proprietärer Treiberlösung und der HAL-Problematik etwa bei dem madwifi-Treiber noch einige weitere Probleme, deren Lösung für eine weitere Verbesserung der Treiber-Situation wünschenswert wäre. (odi. (odi)