Die GPL ist eine Open Software Lizenz die es Firmen erlaubt, Open Software in ihren Produkten einzusetzen. Die GPL fordert im Gegenzug dazu, dass Änderungen am Source „zurückgegeben“ werden. Viele Firmen versemmeln das und kriegen dann von Harald Welte und seinem GPL-Violations-Projekt eines auf die Mütze. Â Andere Firmen denken sie sind schlauer und legen den veränderten Source für ihr Produkt irgendwo auf ihre Webserver und rücken die URL nur auf Anfrage raus oder drucken sie in 4pt-Schrift in die Anleitung. Damit ist zwar theoretisch den Anforderungen der GPL Genüge getan, aber warum das trotzem nicht gut ist will ich an einen Praxisbeispiel erläutern.
In der Arbeit darf ich auch ein wenig mit Embedded Linux auf ARM arbeiten. Als Plattform dient ein sogenanntes SoC (System on a Chip) und die von uns gewählte Plattform läuft natürlich auch mit Linux. Der Hersteller hat hierzu ein PSP (Product Support Package) bereitgestellt welches auf dem Kernel 2.6.37 basiert. Anders ausgedrückt: Der Hersteller hat den Kernel 2.6.37 „geforked“ und in diesen Fork dann seine Treiberanpassungen für diesen SoC integriert. So weit, so gut. Jeder Kunde kann diesen Kernel herunterladen und damit arbeiten. Die GPL-Bestimmungen sind also erfüllt.
Trotzdem fällt uns jetzt schmerzlich auf, dass der Hersteller es eben versäumt hat, seine Änderungen an Treibern wieder in Richtung kernel.org zurückzugeben. Hätte er das getan, dann wären diese Änderungen mittlerweile wohl Bestandteil des Vanilla-Kernels und man könnte problemlos auch auf neuere Kernel umsteigen. Da dies aber nicht passierte ist man erst mal auf den 2.6.37-Kernel fixiert und kommt auch nicht so einfach davon weg.
Aktuell evaluieren wir nun WLAN-Adapter für diese Plattform. Und ja, da gäbe es ein paar billige WLAN-Chips, aber für die gab es unter 2.6.37 keine Treiber. Der verfügbare Treiber ist für Kernel 3.2 und der compiliert natürlich unter keinen Umständen unter 2.6.37.
Ein Backporting ist möglich, aber meine Erfahrung sagt, dass der Aufwand dafür ungefähr nach dieser Formel zu berechnen ist:
„A“ steht für den Aufwand, „y“ für die Version des Kernels von der zurückportiert werden soll, „x“ für die Zielversion, in diesem Fall also 2.6.37. Wäre der neuere Kernel ein 2.6.38, dann wäre das Ergebnis . Ein Backport über 2 Versionen macht den doppelten Aufwand, ein Backport über 3 Versionen bereits den 4-fachen usw.
Ein Backport von 3.2 nach 2.6.37 ist somit eigentlich total unsinnig weil der Aufwand viel zu hoch ist. Tja, hätte der Hersteller mal Patches in Richtung Kernel geschickt, dann hätten wir jetzt mal kleine Probleme, auf einen anderen Kernel umzusteigen.
[ratings]
Mittlerweile hat sich dieses Problem ein wenig entschärft, da wir nun verschiedene Intel-WLAN-Karten zur Auswahl haben und hier die compat-wireless-Treiber nutzen können. Damit kann man, wenn man es richtig macht, auch WLAN-Treiber für aktuelle Karten und alte Kernel bauen. Aktuell zickt allerdings der iwlwifi-Treiber für die billigste Karte noch ein wenig rum, er hat Probleme beim Alloc von DMA-Speicherbereichen. Das kann allerdings auch an der verwendeten ARM-Plattform liegen, das muss ich noch genauer untersuchen.