Die Woche: Brisanter Konsens

@ctmagazin | Kommentar

Im Streit um die GPL-Konformität des Windows-Treiber-Laders Ndiswrapper sind die Linux-Entwickler zu einem Konsens gekommen, der weitreichende Folgen haben dürfte.

Wie wertvoll den Entwicklern ihre Freiheit unter Linux ist, kann man vielleicht an der Heftigkeit der seit vielen Jahren immer wieder aufflackernden Diskussion um proprietäre Kernel-Treiber festmachen. Beliebt waren die Closed-Source-Module diverser Hersteller bei den Entwicklern noch nie, erfährt man doch nicht, was in ihnen vor geht, während der Rest des Linux-Betriebssystems ja für jedermann frei einsehbar ist. Ein weiteres Argument ist, dass ein Kernel-Modul in jedem Fall die Header-Dateien des Modul-API einbinden muss und somit einen Teil GPL-Code enthält und damit selbst offengelegt werden muss. Auch bei Abstürzen oder Fehlfunktionen stehen die Linux-Entwickler bei Closed-Source-Modulen vor verschlossenen Türen und müssen hoffen, dass sich der Hersteller um die Fehlerbeseitigung kümmert.

Um GPL-Verletzungen aus dem Weg zu gehen, boten viele Hersteller wie zum Beispiel Nvidia oder auch AVM ihre Treiber in zwei Teilen an: Ein Binärteil, der weiterhin nicht offengelegt wurde und alle wichtigen Funktionen enthielt, sowie ein offengelegter Binärlader, der nur als Bindeglied zwischen Binärteil und Kernel fungierte. Damit musste der Binärteil keine Teile des Kernel-API mehr einbinden und war somit auch frei vom GPL-Zwang.

Im Dezember 2003 kam auf der Linux-Kernel-Mailing-Liste (LKML) erstmals die Diskussion auf, nur noch reine Open-Source-Treiber zuzulassen. Vor allem der Maintainer des PCI- und USB-Subsystems, Greg Kroah-Hartmann, machte sich dafür stark, wichtige Funktionen der Modul-Schnittstelle des Kernels künftig nur noch Kernel-Modulen zugänglich zu machen, die sich explizit als GPL-Treiber ausweisen. Closed-Source-Treiber könnten sich dann nicht mehr als Kernel-Modul einklinken und müssten als Dienstprogramme im Userspace laufen, was gerade bei komplexer Hardware-Programmierung zu drastischen Leistungseinbußen führen würde.

Linus Torvalds hingegen wandte ein, dass es durchaus Treiber geben könne, die nicht als vom Kernel abgeleitetes Werk im Sinne der GPL betrachtet werden könnten, weil sie ursprünglich gar nicht für Linux entwickelt worden seien. Als ein Beispiel dafür nannte Torvalds ausdrücklich den Nvidia-Grafiktreiber. Bei anderen Projekten sei dies aber nicht so klar wie im Falle des Grafikkartenherstellers.

Inzwischen haben sich die Kernel-Entwickler geeinigt, ab Version 2.6.25 keine proprietären Treiber mehr im USB-Subsystem zuzulassen, sondern nur noch solche, die unter GPL veröffentlicht sind und dies auch dem Kernel gegenüber ausdrücklich erklären. Für Kernel 2.6.26 sind sogar weitere Änderungen geplant, die zukünftig den Nvidia-Treiber lahmlegen würden. Alles sah danach aus, als hätte Greg Kroah-Hartmann sein Ziel erreicht und für eine Verbannung der Binärtreiber aus dem Kernel gesorgt.

Doch die Geister schieden sich an dem Ndiswrapper. Mit Hilfe dieses Kernel-Moduls ist es möglich, Windows-Treiber zum Beispiel für WLAN-Karten unter Linux zu verwenden. Der Ndiswrapper selbst arbeitet dabei nur als "Wrapper", sorgt also für eine Umsetzung der Windows-Funktionsaufrufe in entsprechende Linux-Funktionsaufrufe. Der Ndiswrapper selbst ist unter GPL veröffentlicht, lädt jedoch mit den Windows-Treibern Closed-Source-Software nach. Daher markiert das Kernel-Modul ndiswrapper den Kernel wie ein Closed-Source-Treiber als verschmutzt (tainted), wenn es unter Linux geladen wird.

Nach einer heftigen Diskussion zwischen den Entwicklern, in denen Torvalds zunächst sogar den Ndiswrapper als nicht GPL-konform bezeichnete, kam es dann zu einer überraschenden Übereinkunft.

Torvalds erklärte, er habe schon immer argumentiert, dass die GPL Version 2 lediglich abgeleitete Werke betrifft, und dass ein Windows-Treiber ganz klar nicht vom Kernel abgeleitet ist. Daher sei der Ndiswrapper vielleicht ein unschöne Lösung, verstoße aber nicht gegen die GPL. Dieser Auffassung schloss sich Greg Kroah-Hartmann als sicher verbissenster Kämpfer um offene Treiber an – auch er könne keine Verletzung der GPL erkennen.

Die Folgen dieses Konsenses dürften sehr weitreichend für den Linux-Kernel sein: Der Ndiswrapper ist ein unter GPL veröffentlichtes Interface, das einen Closed-Source-Treiber lädt und Systemaufrufe des Treibers in die entsprechenden Linux-Systemaufrufe umsetzt. Genau diese Funktion hat jedoch auch Nvidias Wrapper-Modul im Grafikkarten-Treiber. Auch andere Hersteller wie zum Beispiel AVM könnten auf die Idee kommen, entweder den Ndiswrapper direkt zum Nachladen der Fritz-ISDN-Treiber von Windows einzusetzen oder aber einen eigenen Lader zu entwickeln, der einen (angepassten) Teil des Windows-Treibers nachlädt. So ließe sich der geplante GPL-Zwang für Kernel-Module höchst wirkungsvoll aushebeln und Hersteller könnten weiterhin größtenteils proprietäre Linux-Treiber anbieten – eine Lösung, die den meisten Linux-Anwendern durchaus gefallen dürfte, sind sie doch vor allem an funktionierenden Hardware-Treibern interessiert und weniger an Lizenzfragen.

Problematisch bleiben jedoch alle Closed-Source-Treiber, die für Linux entwickelt wurden – also auch die derzeitigen Linux-ISDN-Treiber von AVM. Denn sie stellen, da sie explizit für Linux entworfen wurden und nicht etwa nur leicht veränderte Windows-Treiber sind, nach Ansicht der Entwickler ein vom Kernel abgeleitetes Werk im Sinne der GPL dar und müssten ebenfalls unter GPL veröffentlicht werden. (mid)

Anzeige