Open-Source-Projekte: Lizenzinformationen automatisiert zusammenstellen

Im Rahmen von Projekten, die freie und Open-Source-Software (auch: „FOSS“) enthalten, sind verschiedene Anforderungen zu erfüllen. Eine hiervon ist es, Lizenzinformationen und Urheberangaben zusammenzustellen und zusammen mit der Software zu vertreiben. Wie kann dies möglichst automatisiert erfolgen?

Eine wichtige Anforderung fast aller Lizenzbedingungen aus dem Open-Source-Bereich ist es, den Text der Lizenzbedingungen und die Angabe zu den Urhebern mitsamt der FOSS-Software zu verbreiten. Eine Pflicht zur Urheberbenennung ergibt sich im deutschen Rechtsraum zudem gesetzlich aus § 13 UrhG.

In der Theorie ist die Anforderung einfach umzusetzen: einfach die Lizenzbedingungen und die Urheberangabe kopieren. In der Praxis ist allerdings zu berücksichtigen, dass selbst bei einfachsten Vorhaben oftmals eine sehr große Anzahl an Open-Source-Software vorhanden ist. Zudem liegt mitunter nur der Objektcode der Open-Source-Software unmittelbar vor. Der Quellcode ist zwar frei zugänglich. Allerdings müsste dieser zunächst herausgesucht werden und zwar in der richtigen Version. Die schiere Anzahl der zu beachtenden Open-Source-Software-Pakete kann letztlich dazu führen, dass das Zusammenstellen der Informationen einen enormen Aufwand bereitet.

Selbst wenn die Zusammenstellung einmal erfolgt ist, werden Aktualisierungen erforderlich, da das eigene Projekt nicht statisch ist und z. B. alsbald leicht andere oder aktualisierte Open-Source-Bibliotheken einbezogen werden.

Beispiel: Selbst in einer Raspbian-Lite-Umgebung, die embedded auf einem Raspberry Pi eingesetzt werden soll, befinden sich rasch rund 500 Open-Source-Pakete. Jedes dieser Pakete muss an sich einzeln kontrolliert werden und es müssen – für die Zwecke der vorliegenden Betrachtung – die Lizenzinformation und die Urheberangaben zusammengestellt werden. Und dies jedes Mal erneut, wenn eine neue Version des Raspbian-Images verwendet wird (oder es müssten zumindest die Unterschiede ermittelt und eine Aktualisierung der eigenen Informationen erfolgen).

Erfolgt gar ein Vertrieb von Software über Docker-Images oder über eine sonstige Containerisierungslösung, kommt eine manuelle Zusammenstellung kaum mehr in Betracht.

Lösung über simple Skripts

Eine Lösung für dieses Problem mag darin bestehen, auf die Zusammenstellung der Package-Maintainer zu vertrauen, die in aller Regel Lizenz- und Autoreninformationen bereits in den Open-Source-Paketen ablegen.

Es ist zu betonen, dass seitens der Package-Maintainer Fehler unterlaufen können und daher die „offiziellen“ Angaben in dem Open-Source-Paket unzutreffend sein können. Dabei ist darauf hinzuweisen, dass sogar das Zusammenstellen der Informationen zu einem einzelnen Open-Source-Paketen schwierig sein kann, da zum Teil jede Quellcode-Datei auf Lizenz- und Urheberinformationen hin zu untersuchen ist. Auch wenn dies ordnungsgemäß erfolgt, ist es denkbar, dass die Urheber selbst Angaben vergessen haben können und daher eine Rückfrage bei diesen erforderlich sein kann. Denn wenn ein Urheber keine Lizenz benennt, ist im Zweifel keine Lizenz eingeräumt (oder nur konkludent und in einem damit unklaren Umfang).

Legt man jedoch einmal zugrunde, dass die Informationen in den Open-Source-Paketen zutreffend sind, kann in aller Regel rasch ein Skript verfasst werden, mit dem die notwendigen Lizenzinformationen zusammengestellt werden – einer Aufgabe, die händisch zahlreiche Manntage in Anspruch nehmen kann.

Für Umgebungen, wie Debian oder Raspbian, könnte ein äußerst einfaches Skript (das zur Veranschaulich bewusst überschaubar gehalten ist), z. B. wie folgt ausgestaltet sein:

#!/bin/bash

checkfile() {
	FILE="$1"
	test -e "$FILE" && cat "$FILE"
	test -e "$FILE.gz" && zcat "$FILE.gz"
}

checkdir() {
        DIR="$1"

        echo "################################################"
        echo "### PACKAGE: `basename $DIR`"
        echo "################################################"

        checkfile "$DIR/LICENSE"
        checkfile "$DIR/COPYRIGHT"
        checkfile "$DIR/copyright"
        checkfile "$DIR/AUTHORS"
        echo
}

for DIR in `find /usr/share/doc -maxdepth 1 -type d`; do
	checkdir "$DIR"
done

                                
Dieses Skript dient nur der Veranschaulichung und ist nicht als Ersatz für die eigene Ausgestaltung gedacht.

Durch ein Skript wie vorstehend wird für jedes vorhandene Paket die im Open-Source-Paket hinterlegte Information mit den Lizenzbedingungen und Urheberangaben zusammengestellt. Und dies vollständig automatisiert.

Im Falle einer Automatisierung durch ein derartiges Skript, das für den jeweiligen eigenen Anwendungsfall speziell entwickelt werden muss, sollten genaue, manuelle Kontrollen erfolgen. Im obigen Skript fehlen z. B. einfachste Kontrollmechanismen dazu, ob zu einem Paket gar keine Angaben aufgefunden werden konnten.

Darüber hinaus sollte überlegt werden, ob möglicherweise weitere Software vorhanden ist, die nicht über hinterlegte Paketinformationen abgedeckt ist. Dies könnte im Rahmen eines Embedded Systems z. B. auf den Linux-Kernel zutreffen, der oftmals nicht als Paket installiert sein dürfte und sich ggf. auf einer anderen Partition oder zumindest in einem anderen Dateisystem befindet. Dennoch sind auch zum Linux-Kernel die notwendigen Informationen zusammenzustellen.

Einhaltung weiterer Anforderungen hinsichtlich von Open-Source-Lizenzbedingungen

Ein Skript — wie vorstehend veranschaulicht — kann rasch helfen, mehrere Manntage an manueller Arbeit zu ersparen, die bei kleinsten Änderungen an der Softwarezusammenstellung wiederholt werden müsste.

Es sei jedoch betont, dass sich aus den üblichen Open-Source-Lizenzbedingungen verschiedene weitere Voraussetzungen ergeben, die für eine lizenzkonforme Nutzung zu beachten sind. Hierzu gehört etwa die Klärung, ob und ggf. wie genau der Quellcode zu jeder genutzten Open-Source-Komponente zur Verfügung gestellt werden muss bzw. kann.

Darüber hinaus soll bei kommerziellen Anwendungen in der Regel ein Eintritt des Copyleft-Effekt, der bei einigen Open-Source-Lizenzbedingungen besteht, vermieden werden. Andernfalls kann die gesamte eigene Software kostenlos zu veröffentlichen sein.

Ferner ist in der Regel zwischen Open-Source-Komponenten zu unterscheiden, die im Wesentlichen nur „nebensächlich“ mit enthalten sind und solchen Open-Source-Komponenten, die für die Ausführung der eigenen „Hauptsoftware“ direkt notwendig sind.

Für einen Überblick über weitere Anforderungen im Bereich der Open-Source-Lizenzbedingungen siehe hier.