Die von uns vergebenen Open-Source-Lizenzen sollen anderen Nutzer verdeutlichen, wie sie unsere Software nutzen können. Dabei hilft es, wenn sich eine Lizenz automatisiert auslesen lässt.
Basis dieses Beitrags ist Teil 1 dieser Artikelserie, in dem wir uns mit dem Erkennen und dem Auswählen eines Softwarepakets auf Grundlage der vergebenen Lizenzen auseinandersetzten [1]. Nun nehmen wir die umgekehrte Perspektive ein. Wir sehen uns an, wie wir Lizenzen auswählen und so in unser Softwarepaket einbinden, dass andere dessen Verwendungsmöglichkeiten schnell und einfach erfassen können. Wir beleuchten, welche Vorgehensweisen und Werkzeuge sich im Alltag dafür bewährt haben und wie wir diese in den Entwicklungsprozess eigener Software integrieren.
Warum lizenzieren?
Ohne die Angabe einer Lizenz wissen Dritte nicht, unter welchen Bedingungen sie Ihr Werk oder Ihre Software überhaupt verwenden können. Zudem bleibt unklar, was sie beachten müssen, wenn sie das Werk auf die Bedürfnisse ihres konkreten Anwendungsfalls zuschneiden, es also anpassen und beispielsweise Änderungen am Quellcode vornehmen.
Die Lizenz bringt dabei Ihren Willen als Entwickler zum Ausdruck, regelt eindeutig den Umgang mit dem Werk für alle Seiten und beugt Missverständnissen und Streitigkeiten vor. Voraussetzung ist, dass alle Beteiligten die gewählte(n) Lizenz(en) und die damit verknüpften Regeln kennen und respektieren.
Welche Lizenzen?
Es gibt keine ideale Lizenz, die Sie für jeden Fall verwenden können. Die Auswahl hängt vielmehr von verschiedenen Faktoren ab:
- Welche Lizenzen verwenden abhängige Werke oder (Software-)Pakete?
- Welche Lizenzen bevorzugen andere Teammitglieder?
- Wie einfach und freizügig (permissiv) soll Ihr Werk sein?
- Wie wichtig ist es Ihnen, dass Erweiterungen und Änderungen ebenfalls wieder geteilt werden?
Für die interaktive Auswahl bietet sich der Joinup Licensing Assistant (Abbildung 1) der Europäischen Kommission [2] an, den Sie per Webbrowser bedienen. Durch Auswahl der jeweiligen Eigenschaften filtern Sie sukzessive diejenigen Softwarelizenzen heraus, die all Ihren Bedürfnissen entsprechen. Die passenden Lizenzen erscheinen am Ende unterhalb der Tabelle. Die Sortierung erfolgt absteigend anhand des Grads der Übereinstimmung mit den zuvor gesetzten Kriterien. Je genauer Sie die Vorgaben wählen, umso präziser fällt die Ergebnisliste aus.

Abbildung 1: Der Joinup Licensing Assistant der Europäischen Kommission hilft beim Aussuchen einer passenden Lizenz.
Lizenzangaben
Nun gilt es die Frage zu beantworten, wie und insbesondere wo die Lizenzangaben konkret zu hinterlegen sind. Viele Open-Source-Lizenzen verlangen, dass das Lizenzdokument dem Werk beiliegt. Üblicherweise erfolgt dies in einer separaten Datei namens »LICENSE«. Dienste wie Github und Gitlab erwarten eine solche Lizenzdatei auf oberster Ebene (Abbildung 2).
In der Datei stehen der Name der Lizenz sowie alle Lizenzbedingungen. Damit aus der »LICENSE«-Datei die Lizenz automatisch ausgelesen werden kann, muss sie die passenden Formulierungen oder Schlüsselworte enthalten. Github verwendet dafür eine eigene Bibliothek [3], auf die Sie mittels einer Rest-API zugreifen. Weitere Quellen sind beispielsweise Spdx.org [4], Choose A License [5] und Gnu.org [6].
Erzeugen Sie via Github ein neues Repository zur Versionskontrolle für das Projekt, geben Sie die Lizenz gleich mit an (Abbildung 3) – wohlgemerkt nur eine einzige Lizenz, da Github Mehrfachlizenzierung (bislang) nicht unterstützt.
Zusatzinfos
Komplexer wird es bei einer Mehrfachlizenzierung für unterschiedliche Nutzungszwecke oder auch, wenn die einzelnen Bestandteile des Gesamtprojekts unter verschiedenen Lizenzen stehen. Nicht alle Werkzeuge zur Paketverwaltung und Auswertung kommen damit zurecht, wenn Sie mehrere »LICENSE«-Dateien beilegen oder mehrere Lizenzen in einer einzigen Lizenzdatei ausliefern. Diesbezüglich hat sich zwar mittlerweile einiges getan, insgesamt herrscht jedoch immer noch ziemlicher Wirrwarr.
Sowohl das DEB- als auch das RPM-Format unterstützen mehrere Lizenzen pro Softwarepaket. Für DEB-Pakete, die sogar mehrere Lizenzangaben pro im Paket enthaltener Datei erlauben, beschreibt das Debian Packaging Manual [7] die Vorgehensweise. In Listing 1 sind über Wildcards alle Dateien mit Pfadangabe und jeweiliger Lizenz aufgeführt. Listing 2 zeigt, wie sich mehrere Lizenzen für eine Datei angeben lassen. Im Beispiel stehen die Javascript-Dateien sowohl unter der Mozilla-Lizenz (MPL) als auch unter der GPLv2 bereit. Im Abschnitt »License:« hinterlegen Sie dann den vollständigen Lizenztext.
Listing 1
Lizenzangabe pro Datei
Files: * Copyright: 1975-2010 Ulla Upstream License: GPL-2+ Files: debian/* Copyright: 2010 Daniela Debianizer License: GPL-2+ Files: debian/patches/fancy-feature Copyright: 2010 Daniela Debianizer License: GPL-3+ Files: */*.1 Copyright: 2010 Manuela Manpager License: GPL-2+
Listing 2
Mehrere Lizenzen pro Datei
Files: src/js/editline/*
Copyright: 1993, John Doe
1993, Joe Average
License: MPL-1.1 or GPL-2
License: MPL-1.1
<I>Vollständiger Lizenztext<I>
License: GPL-2
<I>Vollständiger Lizenztext<I>
Für RPM-Pakete beschreiben der RPM Packaging Guide [8] sowie die Fedora Licensing Guidelines [9], wie Sie die Lizenz angeben müssen. Hier kommt das SPDX-Format zum Einsatz. Eine fein abgestufte Lizenzangabe pro Datei im Paket wie in Listing 1 klappt damit allerdings nicht. So bleibt Ihnen als Paket-Maintainer nur der Ausweg, die Software in mehrere, einzelne Pakete zu zerlegen, um die Lizenz genau angeben zu können.
Etwas einfacher wird es, wenn der gesamte Quellcode eines Pakets dual lizenziert ist. In der SPEC-Datei legen Sie fest, aus welchen Komponenten sich das RPM-Paket zusammensetzt. Listing 3 enthält einen Vorschlag zur Angabe der Lizenz in der SPEC-Datei des RPM-Pakets. Laut RPM-Spezifikation müssen sich die beiden Lizenztexte in separaten Dateien befinden statt direkt in der SPEC-Datei.
Listing 3
Lizenzangabe (SPEC-Datei)
License: MPL-1.1 OR GPL-2.0-or-later
Häufig gibt es in Paketen auch noch sprachspezifische Dateien mit Metainformationen. Für moderne Python-Pakete verwendet man eine Datei namens »pyproject.toml« [10]. Als Lizenzangabe dient hier entweder der Name der Lizenz, der Verweis auf eine Lizenzdatei oder eine Angabe mit dem Trove Classifier »License :: …«. Abbildung 4 zeigt als Beispiel die Angaben für die Bibliothek Matplotlib [11].
Während die »LICENSE«-Datei alle Lizenzen nennt, lässt der Trove Classifier [12] nur eine einzige Lizenz daraus zu. Das ist insofern unglücklich, als der Classifier auch an anderen Stellen ausgewertet wird, beispielsweise im Python Package Index. Dort erscheint dann ebenfalls nur diese eine Lizenz. Die anderen Lizenzen, die in der »LICENSE«-Datei angegeben sind, fallen unter den Tisch.
Ärgerlich sind zudem die unterschiedlichen Bezeichnungen für die Lizenzen. Sie machen eine Recherche und einen Vergleich der gewählten Lizenzierungen komplizierter als eigentlich notwendig [13]. Eine Vereinheitlichung tut hier dringend Not.
Richtig implementieren
Um Klarheit zur Lizenz zu bekommen, hilft das Konzept rund um SPDX [14]. Wie im ersten Teil dieser Serie schon angerissen, bietet es eine standardisierte Lösung für die beschriebenen Probleme.
Jede Quellcodedatei enthält am Anfang einen passenden Eintrag als Kommentar. Er beginnt mit dem Text »SPDX-License-Identifier:«, darauf folgt die gewählte Lizenz für den Programmcode. Listing 4 zeigt das für die Nutzung der GNU Public License v3 oder später. Diese Schreibweise erlaubt dank der standardisierten Formulierung ein maschinelles, automatisiertes Auslesen. Das schließt eine Fehlinterpretation der Lizenz aus.
Listing 4
SPDX-Lizenzangabe
# SPDX-License-Identifier: GNU General Public License v3.0 or later
Externe Unterstützung
Unterstützung bei der Lizenzauswahl ist stets hilfreich, da die große Vielfalt an Lizenzmodellen das Verständnis erschwert. Hier helfen sowohl das GNU-Projekt als auch Wikipedia [15] und Choose A License mit Hinweisen und Übersichten weiter.
Die Free Software Foundation Europe (FSFE) lässt sich diesbezüglich ebenfalls nicht lumpen und bietet sich als kompetenter Anlaufpunkt an. Dazu haben wir Lina Ceballos von FSFE befragt, wie die Hilfe im Rahmen des REUSE-Projekts [16] konkret aussieht (siehe Kasten “Interview mit Lina Ceballos”).
Nicht zu vergessen sind auch auf Lizenzrecht spezialisierte Beratungsfirmen und Rechtsanwälte, die weitere Klarheit bringen können.
Fazit
Bislang lag unser Blick primär auf Software und ihre korrekte Lizenzierung. Was noch fehlt, aber nicht übersehen werden darf, sind Daten und Datenströme, Bilder, Dokumentation, Mediadaten und Hardware. Diesem Thema widmen wir uns im nächsten Teil dieser Serie. (jlu)
Interview mit Lina Ceballos
Linux-Magazin: Wie würdest du deine Rolle innerhalb der FSFE und des REUSE-Projekts beschreiben?
Lina Ceballos: Ich bin Politik-Projektmanager bei der FSFE, einer gemeinnützigen Organisation, die Nutzern die Möglichkeit gibt, Technologien zu kontrollieren [17]. Ich habe Erfahrung in rechtlichen Fragen und der Einhaltung von Lizenzen sowie in der Überwachung von Gesetzgebungsprozessen auf europäischer Ebene, wo ich mit verschiedenen Interessenvertretern und Entscheidungsträgern zusammenarbeite. Im Rahmen des REUSE-Projekts konzentriere ich mich hauptsächlich darauf, die Bedeutung des Projekts in unserer Gemeinschaft hervorzuheben und es anderen zu zeigen, die davon stark profitieren können, aber vielleicht noch nichts davon gehört haben.
LM: REUSE hat die Rechtssicherheit erhöht. Bietet dies deiner Erfahrung nach eine klare Antwort auf alle Lizenzierungsfragen für Urheber? Oder ergeben sich daraus neue Lizenzierungsfragen?
LC: Lass uns zunächst darüber sprechen, worum es sich bei REUSE handelt. REUSE umfasst eine Reihe von Best Practices, die darauf abzielen, die Kommunikation von Lizenz- und Copyright-Informationen von FOSS-Projekten für jeden einfacher zu machen. Das ultimative Ziel ist, dass für jede einzelne Datei in einem Projekt diese rechtlichen Informationen in einer eindeutigen und gleichermaßen für Mensch und Maschine lesbaren Weise vorliegen. Die REUSE-Spezifikation [18] und ein passendes Hilfsprogramm [19] machen den Prozess zum Kinderspiel. Wir stellen zudem ein Tutorial und eine FAQ [20] bereit, die den Einstieg erleichtern und Antworten auf einige Fragen geben, die bei der Einführung von REUSE auftreten können.
In dieser Hinsicht macht es REUSE also für jeden einfacher, die rechtlichen Informationen anzuzeigen und zu finden. Allerdings lassen sich nicht alle Lizenzierungsfragen standardmäßig lösen. Deswegen offeriert die FSFE neben der REUSE-FAQ eine weitere Zusammenstellung [21] häufig gestellter Fragen zu freier Software, Urheberrecht und Lizenzierung. Für diejenigen, die vielleicht mehr Hilfe benötigen, als die FAQ bieten können, gibt es eine Mailing-Liste für Lizenzierungsfragen [22]. Dort beantworten unsere freiwilligen Experten für rechtliche Fragen zu Freier Software komplexere Fragen.
Im Rahmen von REUSE bieten wir daneben individuelle Einschätzungen und direkte Unterstützung an, was dazu beitragen kann, viele der Zweifel auszuräumen, die Entwickler und Betreuer freier Software haben können. Genau wie freie Software basiert auch das REUSE-Projekt auf seiner Gemeinschaft und den Menschen, die es unterstützen und annehmen. Daher betreiben wir eine weitere Mailing-Liste [23], um andere Nutzer kennenzulernen und die Weiterentwicklung von REUSE zu fördern.
Zurzeit gibt es Tausende Projekte, die REUSE implementierten. Dazu zählen Projekte wie KDE, GNU Health, Curl und teilweise der Linux Kernel. Die Mehrzahl der Projekte des Next Generation Internet [24] hat ebenfalls REUSE übernommen. Ich möchte daher alle Entwicklerinnen und Entwickler ermutigen, REUSE in ihren FOSS-Projekten zu nutzen. Damit helfen sie uns dabei, REUSE zum Standard zu machen, um rechtliche Informationen auf einfachere Weise darzustellen.
LM: Wie kann man die FSFE und das REUSE-Projekt im Einzelnen unterstützen?
LC: Die FSFE ist eine gemeinnützige Organisation. Wir verdanken also einen Großteil unserer Arbeit der Unterstützung all unserer Freiwilligen und Mitwirkenden. Sie unterstützen uns in unseren Arbeitsbereichen, organisieren Veranstaltungen zur Förderung freier Software und helfen uns bei Übersetzungen. Auch REUSE hat ein wunderbares und kompetentes Team von Freiwilligen, die das Projekt vorantreiben und sich über Beiträge [25] anderer freuen. Die Mitwirkungsmöglichkeiten reichen von der Verbesserung unserer Dokumentation über Hilfe bei der Überprüfung von Problemen bis hin zu Code-Checks in offenen Pull Requests.
Außerdem kann man unsere Arbeit an REUSE mit Spenden [26] oder als Unternehmen via Sponsoring [27] unterstützen. Wenn deine Firma also daran interessiert ist, auf diesem Weg zu REUSE beizutragen, sprich uns bitte an. Möchtest du dich uns als Freiwillige(r) anschließen, abonniere unsere REUSE-Mailing-Liste. Auf unserer Website findest du weitere Informationen über unsere Initiative und Möglichkeiten, mit uns in Kontakt zu treten.
LM: Ganz herzlichen Dank für diesen Einblick in die Arbeit von REUSE!
Danksagung
Die Autoren bedanken sich bei Axel Beckert für seine Kritik und Anregungen bei der Vorbereitung des Artikels.
Autoreninfo
Frank Hofmann arbeitet zumeist von unterwegs aus als Entwickler, Trainer und Autor. Bevorzugte Arbeitsorte sind Berlin, Genf und Kapstadt. Er gehört zu den Verfassern des Debian-Paketmanagement-Buchs [28]. Veit Schiele, Gründer und Geschäftsführer der Softwareberatung Cusy GmbH, ist Autor des Jupyter- [29] und des PyViz-Tutorials [30].
Infos
- Software-Lizenzen (Teil 1): Frank Hofmann, “Das Kleingedruckte”, LM 04/2025, S. 60: https://www.lm-online.de/49787
- Joinup Licensing Assistant: https://joinup.ec.europa.eu/collection/eupl/solution/joinup-licensing-assistant/jla-find-and-compare-software-licenses
- Lizenzauswertung bei Github: https://docs.github.com/de/rest/licenses/licenses?apiVersion=2022-11-28
- SPDX License List: https://spdx.org/licenses/
- Lizenzvergleich: https://choosealicense.com/appendix/
- “How to Choose a License for Your Own Work”: https://www.gnu.org/licenses/license-recommendations.html
- DEB-License-Datei: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/#id-1.6.5.6
- “What is a SPEC File?”: https://rpm-packaging-guide.github.io/#what-is-a-spec-file
- Fedora Licensing Guidelines: https://docs.fedoraproject.org/de/legal/
- “Writing your pyproject.toml”: https://packaging.python.org/en/latest/guides/writing-pyproject-toml/#license.sprach
- Matplotlib: https://pypi.org/project/matplotlib/
- Trove Classifiers: https://github.com/pypa/trove-classifiers/issues/17
- Python Enhancement Proposal 639: https://peps.python.org/pep-0639/
- SPDX: https://spdx.dev
- “Comparison of free and open-source software licenses”: https://en.wikipedia.org/wiki/Comparison_of_free_and_open-source_software_licenses
- REUSE: https://reuse.software
- FSFE: https://fsfe.org
- REUSE-Softwarespezifikation: https://reuse.software/spec/
- REUSE-Hilfsprogramm: https://reuse.readthedocs.io/en/v2.1.0/readme.html
- REUSE-FAQ: https://reuse.software/faq/
- FSFE-FAQ: https://fsfe.org/freesoftware/legal/faq.html
- FSFE-Mailing-Liste: mailto:licence-questions@fsfe.org
- REUSE-Mailing-Liste: https://lists.fsfe.org/mailman/listinfo/reuse
- Next Generation Internet: https://www.ngi.eu/
- Mitwirkung bei REUSE: https://reuse.readthedocs.io/en/stable/authors.html#contributors
- FSFE-Spendeninformationen: https://my.fsfe.org/donate
- Unterstützer von REUSE: https://reuse.software/supporters/
- Debian-Paketmanagement-Buch: https://dpmb.org
- Jupyter-Tutorial: https://jupyter-tutorial.readthedocs.io/de/latest/
- PyViz-Tutorial: https://pyviz-tutorial.readthedocs.io/de/latest/index.html









