Linux-Prüfung

24.06.2020

Dr. Andreas Kotulla

Open Source

Dr. Andreas Kotulla

Die Identifizierung aller Urheberrechtsinhaber, Lizenzen und Lizenzverpflichtungen innerhalb einer Linux-Distribution ist eine der komplexesten und mühsamsten Prüfungsaufgaben. In früheren Linux-Versionen, vor Version 4.19, fehlen in vielen Quelldateien im Verzeichnisbaum Lizenzinformationen. Dies erschwert es Compliance-Tools, die richtige Lizenz zu ermitteln, und eine manuelle Prüfung ist sehr zeitaufwendig.

Standardmäßig sind alle Linux-Kernel-Dateien ohne explizite Lizenzinformationen unter GPL Version 2 mit Syscall-Ausnahme lizenziert (im Folgenden wird diese Lizenz der Kürze halber als GPLv2 w/SE bezeichnet). Wenn jedoch eine Lizenz in der Datei erwähnt wird, sollte diese Lizenz Vorrang haben.

Das Problem ist, dass in Wirklichkeit nicht alle Kernel-Dateien ohne ausdrückliche Lizenzerklärung tatsächlich unter der GPLv2-Lizenz mit SE-Lizenz verbreitet werden oder verbreitet werden sollen.

Um die Lizenzverpflichtungen für die Nutzer klarer zu gestalten, hat die Linux Foundation 2017 eine Aktion zur Bereinigung der Lizenzen gestartet. Ziel war es, die Einhaltung der Lizenzen für die Endnutzer einfacher und transparenter zu gestalten.

In einem teilweise automatisierten, teilweise manuellen Vorgehensweise wurden alle Dateien ohne Lizenzinformationen identifiziert und am Anfang der Datei wurde ein SPDX-Header hinzugefügt. Es wurden einige Anstrengungen unternommen, um die Ergebnisse der automatisch eingefügten Header manuell zu überprüfen. Leider waren auch nach einem solchen manuellen Eingriff einige Dateien falsch lizenziert. Einige dieser fälschlicherweise lizenzierten Dateien wurden zu einem späteren Zeitpunkt von der Community markiert, andere Dateien sind jedoch bis heute falsch lizenziert.

Die Komplexität der Situation besteht darin, dass die Genauigkeit der Lizenzinformationen von der spezifischen Version des von Ihnen verwendeten Linux-Kernels abhängt. Ältere Versionen neigen dazu, mehr Fehler zu enthalten, während neuere Versionen weniger Fehler enthalten.

Als konkretes Beispiel können wir die Datei cl0002.h heranziehen. In älteren Kernel-Versionen hat diese Datei keinen Lizenz-Header. Das Projekt, in dem sich diese Datei befindet (drm/nouvuau), ist fast vollständig unter der MIT-Lizenz lizenziert. Dennoch wurde diese Datei in Linux Kernel v4.19 automatisch mit dem GPL-2.0-Lizenz-Header versehen. Später, in Linux Kernel v5.3, hat die Linux-Community das Problem bemerkt und einen Fehlerbericht zu dieser und einigen anderen Dateien (die ebenfalls fälschlicherweise mit GPLv2 statt MIT-Lizenz versehen waren) eingereicht, woraufhin die Lizenz auf den korrekten (ursprünglichen) MIT-Header geändert wurde. Der Kommentar unter diesem Commit lautet: „Durch die Massen-SPDX-Ergänzung wurden alle diese Dateien zu GPL-2.0-lizenzierten Dateien. Der Rest dieses Projekts ist jedoch MIT-lizenziert, diesen Dateien fehlte lediglich die Standardformulierung und sie wurden in das globale Update einbezogen.“

Github-Screenshot von Linux mit geänderten Lizenzen

Abbildung 1: Beispiel für einen gefälschten GPL-Lizenz-Header

Das Dilemma ergibt sich aus der Tatsache, dass der Prüfer bei der Analyse von Linux 4.19 die Frage aufwirft, welche Lizenz er dieser Datei zuweisen sollte. Soll der Lizenz im Header vertraut werden, die GPL-2.0 ist? Oder ist eine genauere Untersuchung erforderlich, um den tatsächlichen Ursprung zu ermitteln, der MIT ist?

Laut Anwälten, die auf die Einhaltung von Lizenzen spezialisiert sind, war es nicht die Absicht der „Lizenzbereinigungsaktion“, die Lizenz der Datei zu ändern. Dies geschah, weil der Algorithmus, der zur automatischen Kennzeichnung aller Quellcode-Dateien im Linux-Kernel verwendet wurde, nicht perfekt war. Dies führt zu der Annahme, dass die Lizenz, die für diese Datei befolgt werden muss, MIT und nicht GPL-2.0 ist. Auch wenn der Header etwas anderes angibt.

Problematisch ist nun die Tatsache, dass je nach verwendeter Linux-Kernel-Version, die Sie möglicherweise aus Gründen der Lizenzkonformität überprüfen, mehrere Dateien möglicherweise fehlerhafte Lizenzinformationen enthalten. Wenn Lizenztypen von automatischen Scan-Tools analysiert werden, die auf dem SPDX-Header basieren, oder von Prüfern, die nicht über ausreichende Erfahrung verfügen, können diese falsche Informationen in die resultierende Stückliste einfließen.

Um Dateien mit falschen Lizenz-Headern zu identifizieren, müssten die Lizenzinformationen in der aktuellen Linux-Kernel-Version immer mit anderen Informationsquellen (z. B. anderen Dateien in Untermodulen) abgeglichen werden. Dies ist bei Tausenden von Dateien mit einem hohen Aufwand verbunden. Alternativ können Tools mit einer Codeanalyse durch Kopieren und Einfügen auf eine Diskrepanz zwischen dem Lizenz-Header und der Lizenz des Codes selbst hinweisen.

Ein alternativer Ansatz zur Identifizierung einiger Dateien, die einer automatischen Lizenzklassifizierung unterzogen wurden, wäre das Durchsuchen der Commit-Nachrichten nach Lizenzen mit Kommentaren zur Lizenzidentifizierung. So können beispielsweise alle Dateien, die nach dem „Aufräumprojekt“ korrigiert wurden, leicht anhand eines bestimmten Kommentars aufgefunden und alle diese Dateien manuell analysiert werden.

Alle oben genannten und viele weitere Verfahren werden bei Software-Kompositionsanalysen eingesetzt, die von Bitsea durchgeführt werden. Dabei versuchen wir unser Bestes, um sicherzustellen, dass wir möglichst gründliche und eindeutige Ergebnisse liefern.

Bei weiteren Fragen wenden Sie sich bitte an: info@bitsea.de