Open-Source-Lizenz-Compliance-Prüfung
Arbeitsweg
- Rolle, Ziel und gewünschtes Arbeitsprodukt klären: Wer handelt, welche Entscheidung steht an, welche Frist läuft und welcher Output wird gebraucht?
- Fristen und Eilrisiken zuerst markieren: nur die Fristen des konkreten Rechtsgebiets und der Akte verwenden; Widerspruch, Klage, Einspruch, Rechtsmittel, Verjährung, Verwirkung, Rüge-, Anzeige-, Anmelde- und Ausschlussfristen strikt trennen und nie aus einem anderen Fachgebiet übernehmen.
- Tragende Normen verifizieren: die im Plugin-Kontext einschlägigen Normen über gesetze-im-internet.de, dejure.org, eur-lex.europa.eu und die amtlichen Bundes-/Landesportale live prüfen — Fundstellen über gesetze-im-internet.de, dejure.org, openJur, BVerfG-/BGH-/EuGH-Datenbank live prüfen; keine Modellwissen-Zitate.
- Zuständige Stelle bestimmen und Adressaten richtig wählen: Mandant, Gegner, zuständige Behörde oder Gericht, Sachverständige, ggf. EU-/internationale Stelle (siehe Skill-Detail).
- Dokumente und Beweismittel sammeln und auf Lücken prüfen: Verwaltungsakte, Vertragsurkunden, Schriftsätze, Bescheide, Protokolle, Sachverständigengutachten und externe Beweismittel des Fachgebiets — fehlende Belege durch Akteneinsicht oder Rückfrage beim Mandanten beschaffen, Live-Check für tagesaktuelle Normänderungen und Verwaltungspraxis.
Eingaben
- Was wird geprüft?
- Abhängigkeitsliste (
package.json, requirements.txt, go.mod, Gemfile, Cargo.toml, pom.xml, SBOM nach SPDX / CycloneDX, Lockfile)
- Einzelne Bibliothek — ein konkretes Paket, das hinzugefügt werden soll
- Eigener Code — Vorbereitung zur Open-Source-Veröffentlichung
- Einsatzmodell (vor Klassifikation der Pflichten zwingend festlegen):
- SaaS / gehosteter Dienst — Nutzer greifen über Netz zu; kein Code wird ausgeliefert
- Distribuiertes Programm — kompilierter Code wird ausgeliefert (Desktop-App, Mobile-App, On-Prem-Server, CLI)
- Nur intern — ausschließlich im Unternehmen genutzt, keine Auslieferung nach außen
- Eingebettet / Firmware — ausgeliefert in Hardware oder als Closed-System-Firmware
Rechtlicher Rahmen
Kernvorschriften
- § 69a ff. UrhG — Urheberrechtsschutz für Computerprogramme; § 69b UrhG Arbeitnehmerprogramme
- § 31 Abs. 1 UrhG — Einfaches und ausschließliches Nutzungsrecht; Copyleft-Lizenzen räumen einfache Nutzungsrechte unter Bedingungen ein
- § 31 Abs. 5 UrhG — Zweckübertragungslehre: Im Zweifel nur für Vertragszweck erforderliche Rechte; Copyleft-Bedingungen müssen explizit akzeptiert werden
- § 97 UrhG — Unterlassungs- und Schadensersatzanspruch bei Lizenzverletzung; Grundlage für GPL-Enforcement-Klagen
- §§ 14, 15 UrhG — Bearbeitungsrecht, Verwertungsrechte; Copyleft wirkt über das Bearbeitungsrecht
Leitentscheidungen
- Rechtsprechung live prüfen: Keine Entscheidung aus Modellwissen zitieren; vor Ausgabe über amtliche oder frei zugängliche Quelle mit Gericht, Entscheidungsform, Datum, Aktenzeichen und tragender Aussage verifizieren.
Kommentare
- Spindler, in: Schricker/Löwenheim, UrhG, 6. Aufl. 2020, § 69a Rn. 1 (Softwareschutz allgemein)
- Quellenregel: Literatur nur mit Nutzerquelle oder lizenziertem Live-Zugriff; keine Kommentar-, Handbuch- oder Aufsatzfundstellen aus Modellwissen.
- Dreier, in: Dreier/Schulze, UrhG, 7. Aufl. 2022, § 31 Rn. 60 (Nutzungsrechtseinräumung, Copyleft-Mechanismus)
- Metzger/Jaeger, Open Source Software und deutsches Urheberrecht, GRUR Int. 1999, 839 (847) — Grundlagenaufsatz zur Wirksamkeit der GPL nach deutschem Recht
Ablauf
Schritt 1: Prüfungsumfang klären
Aus dem Übergabematerial ableiten oder fragen:
- Abhängigkeitsliste → alle Einträge klassifizieren, Pflichten aufrollen
- Einzelbibliothek → ein Paket klassifizieren, transitive Abhängigkeiten soweit verfügbar
- Ausgehender Code → Was ist eingebettet (direkt und transitiv)? Ist die gewählte Ausgangslizenz mit allen eingebetteten Lizenzen kompatibel? Sind LICENSE/NOTICE-Dateien korrekt?
Schritt 2: Einsatzmodell festlegen
Das Einsatzmodell bestimmt, welche Copyleft-Pflichten ausgelöst werden:
| Einsatzmodell |
Wesentliche Lizenzen |
| SaaS |
AGPL-3.0 (Netzwerktrigger), Attribution bei Permissive in der UI, SSPL/BUSL/Elastic bei konkurrierendem Dienst |
| Distribuiertes Programm |
GPL-2.0, GPL-3.0, LGPL, MPL, EPL (alle greifen bei Distribution); Permissive Attribution |
| Nur intern |
Kein Copyleft-Auslöser bei interner Nutzung ohne Distribution. AGPL greift dennoch, wenn externe Nutzer über Netz zugreifen. Permissive Attribution gute Praxis. |
| Embedded / Firmware |
GPL besonders schwer erfüllbar (Quellcodeoffenlegung + reproduzierbarer Build + Installationsinfo); vor Auslieferung planen |
Einsatzmodell im Ausgabevermerk kennzeichnen.
Schritt 3: Jede Abhängigkeit klassifizieren
Nicht nur Metadaten lesen — tatsächlichen Lizenztext prüfen. LICENSE-Dateien können falsch sein; Package-Metadaten können veraltet sein.
Klassifikation:
| Kategorie |
Beispiele |
Wesentliche Pflichten |
| Permissiv |
MIT, BSD-2-Clause, BSD-3-Clause, Apache-2.0, ISC |
Attribution, Lizenztextbeibehaltung; Apache-2.0 ergänzend Patentlizenz + NOTICE-Pflicht |
| Schwaches Copyleft |
LGPL-2.1, LGPL-3.0, MPL-2.0, EPL-1.0, EPL-2.0, CDDL |
Datei- oder bibliotheksweite Quellcodeoffenlegung; Verlinkungsregeln variieren |
| Starkes Copyleft |
GPL-2.0, GPL-3.0, AGPL-3.0, OSL, EUPL (je nach Version) |
Breite Quellcodeoffenlegung; AGPL erstreckt sich auf Netzwerknutzung |
| Public Domain / Widmung |
CC0, Unlicense, WTFPL |
Keine Pflichten; aber: Public-Domain-Widmung nicht in allen Rechtsordnungen anerkannt (in Deutschland fraglich, §§ 29, 64 UrhG) |
| Nicht-OSI Source-Available |
SSPL, BUSL, Commons Clause, Elastic License, Fair Source |
Kein Open Source — schränken kommerzielle oder konkurrierende Nutzung ein; Lizenztext lesen |
| Unbekannt / Proprietär |
Vendor-spezifisch, fehlendes Lizenz-File, Widerspruch File vs. Headers |
Stopp — nicht als Permissiv behandeln |
Besonders kennzeichnen:
- Dual-lizenzierte Pakete — welche Lizenz nutzen wir? Wahl kann Pflichten ändern.
- Veraltete Pakete — kein aktiver Maintainer; gibt es einen gepflegten Ersatz?
- Copyleft in transitiver Abhängigkeit — Toplevel-Lizenz ist permissiv, aber eine transitive Abhängigkeit ist Copyleft.
- Lizenswechsel bei bekannten Projekten — Redis, MongoDB, Elastic, HashiCorp haben relizenziert; angepinnte Version prüfen.
Schritt 4: Pflichten auf Einsatzmodell abbilden
Für jedes klassifizierte Paket:
### [Paket@Version] — [Lizenz]
**Klassifikation:** [Permissiv / Schwaches Copyleft / Starkes Copyleft / Public Domain / Nicht-OSI / Unbekannt]
**Pflichten für unser Einsatzmodell ([SaaS / Distribuiert / Intern / Embedded]):**
- [ ] [Konkrete Pflicht — z. B. "Attribution in NOTICES-Datei, die mit der App ausgeliefert wird"]
- [ ] [z. B. "Bei Modifikation und Distribution: Quellcode der Änderungen veröffentlichen"]
- [ ] [z. B. "AGPL-Netzwerktrigger — wenn Nutzer über Netz auf unsere modifizierte Version zugreifen, Quellcode anbieten"]
**Risiko:** 🔴 Kritisch | 🟠 Hoch | 🟡 Mittel | 🟢 Niedrig
**Empfehlung:** [Pflichten erfüllen | Ersetzen durch [Alternative] | Entfernen | Anwaltliche Prüfung vor Auslieferung | Kommerzielle Lizenz bei [Anbieter] beschaffen]
Verlinkungsbeziehung bestimmt den Schweregrad:
- Statische Verlinkung / gemeinsame Kompilierung: Werke zu einem Binary vereint. Starkes Signal für Copyleft-Auslösung.
- Dynamische Verlinkung / Shared Library: Werke zur Laufzeit trennbar. LGPL explizit erlaubt (§ 6 LGPL — "work that uses the Library"). GPL-Position umstritten.
- Header-Einbindung / Inline-Funktionen: Kann abhängig von Einbindungstiefe ein abgeleitetes Werk begründen.
- Subprozess / IPC: Getrennte Prozesse über wohldefinierte Schnittstellen. Im Regelfall kein abgeleitetes Werk.
- Netzwerk-API-Aufruf: Für die meisten Lizenzen kein Auslöser. Für AGPL-3.0: Bereitstellung der Software über Netz gilt als Verbreitung — auch AGPL-Komponente hinter einer API triggert in einer Microservice-Architektur.
- Dateiweises Copyleft (MPL): Nur modifizierte Dateien tragen das Copyleft, nicht das gesamte Werk.
Schweregrad-Kalibrierung:
| Stufe |
Bedeutung |
| 🔴 Kritisch |
Starkes Copyleft in einem Einsatzmodell, das es auslöst (GPL in distribuiertem Binary, AGPL in SaaS). Nicht-OSI-Lizenz, die dem Geschäftsmodell widerspricht (z. B. SSPL bei gebautem verwaltetem Dienst). Lizenz nicht bestimmbar bei tragender Abhängigkeit. |
| 🟠 Hoch |
Schwaches Copyleft mit Pflichten, die noch nicht eingerichtet sind (Dateilevel-Disclosure, NOTICE-Anforderungen). Dual-lizenziert mit unklarer Lizenzwahl. Lizenzdatei widerspricht File-Headern. |
| 🟡 Mittel |
Permissiv mit noch nicht umgesetzten Attributionspflichten (fehlende NOTICES-Datei). Transitive Copyleft-Abhängigkeit, die je nach Einbindung greifen kann oder nicht. |
| 🟢 Niedrig |
Permissiv mit bereits erfüllten Pflichten. Copyleft in einem Einsatzmodell, das es nicht auslöst (GPL-Bibliothek nur intern, keine Distribution). |
Schritt 5: Kritische Befunde am Anfang des Vermerks kennzeichnen
- Lizenz unbekannt — als "Prüfung erforderlich" klassifizieren, nicht als Permissiv. Unklassifizierte Abhängigkeit sollte eine Lieferentscheidung aufhalten.
- Lizenzdatei widerspricht File-Headern — beide lesen und Widerspruch melden.
- Inkompatible Kombinationen — GPL-2.0-only + Apache-2.0 historisch bekannte Inkompatibilität; MPL / EPL / GPL-Kombinationen sorgfältig prüfen.
- Nicht-OSI-Lizenzen als Open Source getarnt — SSPL, BUSL, Commons Clause, Elastic License. Lizenztexte lesen; nicht dem GitHub-"Open Source"-Badge vertrauen.
- Lizenswechsel — wenn Vorgängerversion permissiv und aktuelle Version Source-Available ist: angepinnte Version entscheidet.
Schritt 6: Ausgehende Prüfung (nur bei Code-Veröffentlichung als Open Source)
- Gewählte Ausgangslizenz mit jeder eingebetteten Abhängigkeitslizenz kompatibel? (Kein MIT-Release bei eingebettetem GPL-Code möglich — das kombinierte Werk muss GPL sein)
- LICENSE-Datei vorhanden und korrekt?
- NOTICE-Datei vorhanden mit erforderlichen Attributionen (Apache-2.0 u. a.)?
- Drittlizenz-Texte gebearbeitet wo erforderlich?
- Kein proprietärer oder vertraulicher Code, keine Kundendaten, keine eingebetteten Zugangsdaten in der Repository-History?
- Marken- und Markenrechtsrichtlinien für den Projektnamen geprüft (getrennt von der Urheberrechtslizenz)?
Schritt 7: Vermerk zusammenstellen
[ARBEITSERGEBNIS-KOPFZEILE]
### OSS-Lizenz-Prüfung: [Projekt / Abhängigkeitsliste / Paket]
**Geprüft:** [Datum]
**Umfang:** [Abhängigkeitsliste / Einzelbibliothek / Ausgehender Code]
**Einsatzmodell:** [SaaS / Distribuiert / Intern / Embedded]
---
## Ergebnis
[Zwei Sätze. Kann ausgeliefert werden? Was muss zuerst passieren?]
**Geprüfte Pakete:** [N]
**Nach Klassifikation:** [N permissiv, N schwaches Copyleft, N starkes Copyleft, N Public Domain, N Nicht-OSI, N unbekannt]
**Befunde:** [N]🔴 [N]🟠 [N]🟡 [N]🟢
**Genehmigung erforderlich von:** [Name, gemäß Mandatsprofil]
---
## Kritische Anfangshinweise
[Unbekannte Lizenzen, Lizenz-Konflikte, Nicht-OSI als OSS getarnt, inkompatible Kombinationen]
---
## Nach Paket
[Blöcke aus Schritt 4, nach Schweregrad gruppiert]
---
## Rechtsordnungshinweis
OSS-Lizenz-Durchsetzbarkeit variiert: Der AGPL-Netzwerkauslöser ist in Deutschland grundsätzlich durchsetzbar (vgl. LG München I); Public-Domain-Widmungen sind im deutschen Recht problematisch (§§ 29, 64 UrhG — kein vollständiger Rechteentzug möglich, nur schuldrechtliche Abreden). Anwendbares Recht für Downstream-Distribution (z. B. bei Kunden in anderen Jurisdiktionen) und Mandatsprofil-Flaggen beachten.
---
## Ausgehende Prüfung (soweit einschlägig)
[Aus Schritt 6]
---
## Weiterleitungshinweise
[Wer genehmigt; was löst automatische Eskalation aus]
Beispiel
Eingabe: requirements.txt eines Python-SaaS-Projekts enthält flask-login (MIT), celery (BSD-3-Clause), cryptography (Apache-2.0/BSD), mysqlclient (GPL-2.0).
Befund (Auszug):
Klassifikation: Starkes Copyleft
Pflichten für unser Einsatzmodell (SaaS):
Risiko: 🟡 Mittel (SaaS ohne Distribution) / 🔴 Kritisch (bei künftiger Binary-Distribution)
Empfehlung: Ersetzen durch PyMySQL (MIT) zur Risikominimierung; alternativ anwaltliche Prüfung ob SaaS-Einsatz tatsächlich GPL-frei bleibt.
Risiken und typische Fehler
- GPL-Durchsetzbarkeit in Deutschland unterschätzen: Deutsche Gerichte haben GPL-Bedingungen konsequent durchgesetzt (LG München I, BGH). Verstöße führen automatisch zum Verlust des Nutzungsrechts.
- AGPL-Netzwerkauslöser ignorieren: Bei SaaS-Anwendungen, die AGPL-Komponenten nutzen, muss der gesamte Quellcode den Nutzern angeboten werden — auch ohne physische Distribution.
- Public Domain im deutschen Recht: § 64 UrhG: Urheberrecht erlischt 70 Jahre nach Tod des Urhebers. Eine "Widmung" in die Gemeinfreiheit ist deutschrechtlich nicht vollständig möglich; CC0 ist die bestmögliche Annäherung.
- Dynamische vs. statische Verlinkung: Gleiche Lizenz, entgegengesetztes Ergebnis. LGPL + statisch gelinkt = 🔴; LGPL + dynamisch gelinkt = 🟢.
- Lizenswechsel nicht erkannt: Angepinnte Version bestimmt die Lizenz — nicht die aktuelle Upstream-Version.
Quellenpflicht
Alle Klassifikationen und Pflichtaussagen müssen belegbar sein:
- Gesetze: §§ 31, 69a, 97 UrhG
- Rechtsprechung: mindestens eine Entscheidung zur GPL-Durchsetzbarkeit (LG München I oder BGH Afterlife)
- Lizenztext: direkt aus dem Repository oder SPDX; als
[Lizenztext gelesen — [Quelle]] kennzeichnen
- Kommentar oder Aufsatz: Schricker/Löwenheim UrhG oder Metzger/Jaeger GRUR Int. 1999 mit Seitenangabe
- Modellannahmen als
[Modellwissen — verifizieren] kennzeichnen.
Triage-Fragen vor Open-Source-Prüfung
Bevor die Lizenz-Compliance-Analyse beginnt, klaere:
- Handelt es sich um statische oder dynamische Verlinkung (entscheidend für GPL vs. LGPL-Frage)?
- Wird die Software als SaaS-Dienst betrieben (AGPL: Netzwerk-Austauschklausel — Quellcode-Pflicht auch ohne Distribution)?
- Sind alle Abhaengigkeiten in der Dependency-Liste erfasst (transitive Dependencies often missed)?
- Ist ein SBOM (Software Bill of Materials) erstellt (Compliance-Dokumentation, EU Cyber Resilience Act)?
Aktuelle Rechtsprechung
Rechtsprechung live prüfen: Keine Entscheidung aus Modellwissen zitieren; vor Ausgabe über amtliche oder frei zugängliche Quelle mit Gericht, Entscheidungsform, Datum, Aktenzeichen und tragender Aussage verifizieren.
Quellenregel: Entscheidungen nur nach Prüfung einer amtlichen oder frei zugänglichen Quelle mit Gericht, Entscheidungsform, Datum, Aktenzeichen und tragender Aussage ausgeben.
1---2name: open-source-pruefung3description: Für Open-Source-Lizenz-Compliance-Prüfung: ordnet Norm, Beweislast und Gegenargument; Ergebnis: Tatbestands- oder Anspruchsmatrix.4---56# Open-Source-Lizenz-Compliance-Prüfung78## Arbeitsweg910- Rolle, Ziel und gewünschtes Arbeitsprodukt klären: Wer handelt, welche Entscheidung steht an, welche Frist läuft und welcher Output wird gebraucht?11- Fristen und Eilrisiken zuerst markieren: nur die Fristen des konkreten Rechtsgebiets und der Akte verwenden; Widerspruch, Klage, Einspruch, Rechtsmittel, Verjährung, Verwirkung, Rüge-, Anzeige-, Anmelde- und Ausschlussfristen strikt trennen und nie aus einem anderen Fachgebiet übernehmen.12- Tragende Normen verifizieren: die im Plugin-Kontext einschlägigen Normen über gesetze-im-internet.de, dejure.org, eur-lex.europa.eu und die amtlichen Bundes-/Landesportale live prüfen — Fundstellen über gesetze-im-internet.de, dejure.org, openJur, BVerfG-/BGH-/EuGH-Datenbank live prüfen; keine Modellwissen-Zitate.13- Zuständige Stelle bestimmen und Adressaten richtig wählen: Mandant, Gegner, zuständige Behörde oder Gericht, Sachverständige, ggf. EU-/internationale Stelle (siehe Skill-Detail).14- Dokumente und Beweismittel sammeln und auf Lücken prüfen: Verwaltungsakte, Vertragsurkunden, Schriftsätze, Bescheide, Protokolle, Sachverständigengutachten und externe Beweismittel des Fachgebiets — fehlende Belege durch Akteneinsicht oder Rückfrage beim Mandanten beschaffen, Live-Check für tagesaktuelle Normänderungen und Verwaltungspraxis.1516## Eingaben17181. **Was wird geprüft?**19 - Abhängigkeitsliste (`package.json`, `requirements.txt`, `go.mod`, `Gemfile`, `Cargo.toml`, `pom.xml`, SBOM nach SPDX / CycloneDX, Lockfile)20 - Einzelne Bibliothek — ein konkretes Paket, das hinzugefügt werden soll21 - Eigener Code — Vorbereitung zur Open-Source-Veröffentlichung22232. **Einsatzmodell** (vor Klassifikation der Pflichten zwingend festlegen):24 - SaaS / gehosteter Dienst — Nutzer greifen über Netz zu; kein Code wird ausgeliefert25 - Distribuiertes Programm — kompilierter Code wird ausgeliefert (Desktop-App, Mobile-App, On-Prem-Server, CLI)26 - Nur intern — ausschließlich im Unternehmen genutzt, keine Auslieferung nach außen27 - Eingebettet / Firmware — ausgeliefert in Hardware oder als Closed-System-Firmware2829## Rechtlicher Rahmen3031### Kernvorschriften3233- **§ 69a ff. UrhG** — Urheberrechtsschutz für Computerprogramme; § 69b UrhG Arbeitnehmerprogramme34- **§ 31 Abs. 1 UrhG** — Einfaches und ausschließliches Nutzungsrecht; Copyleft-Lizenzen räumen einfache Nutzungsrechte unter Bedingungen ein35- **§ 31 Abs. 5 UrhG** — Zweckübertragungslehre: Im Zweifel nur für Vertragszweck erforderliche Rechte; Copyleft-Bedingungen müssen explizit akzeptiert werden36- **§ 97 UrhG** — Unterlassungs- und Schadensersatzanspruch bei Lizenzverletzung; Grundlage für GPL-Enforcement-Klagen37- **§§ 14, 15 UrhG** — Bearbeitungsrecht, Verwertungsrechte; Copyleft wirkt über das Bearbeitungsrecht3839### Leitentscheidungen4041- Rechtsprechung live prüfen: Keine Entscheidung aus Modellwissen zitieren; vor Ausgabe über amtliche oder frei zugängliche Quelle mit Gericht, Entscheidungsform, Datum, Aktenzeichen und tragender Aussage verifizieren.4243### Kommentare4445- Spindler, in: Schricker/Löwenheim, UrhG, 6. Aufl. 2020, § 69a Rn. 1 (Softwareschutz allgemein)46- Quellenregel: Literatur nur mit Nutzerquelle oder lizenziertem Live-Zugriff; keine Kommentar-, Handbuch- oder Aufsatzfundstellen aus Modellwissen.47- Dreier, in: Dreier/Schulze, UrhG, 7. Aufl. 2022, § 31 Rn. 60 (Nutzungsrechtseinräumung, Copyleft-Mechanismus)48- Metzger/Jaeger, Open Source Software und deutsches Urheberrecht, GRUR Int. 1999, 839 (847) — Grundlagenaufsatz zur Wirksamkeit der GPL nach deutschem Recht4950## Ablauf5152### Schritt 1: Prüfungsumfang klären5354Aus dem Übergabematerial ableiten oder fragen:5556- Abhängigkeitsliste → alle Einträge klassifizieren, Pflichten aufrollen57- Einzelbibliothek → ein Paket klassifizieren, transitive Abhängigkeiten soweit verfügbar58- Ausgehender Code → Was ist eingebettet (direkt und transitiv)? Ist die gewählte Ausgangslizenz mit allen eingebetteten Lizenzen kompatibel? Sind LICENSE/NOTICE-Dateien korrekt?5960### Schritt 2: Einsatzmodell festlegen6162Das Einsatzmodell bestimmt, welche Copyleft-Pflichten ausgelöst werden:6364| Einsatzmodell | Wesentliche Lizenzen |65|---|---|66| SaaS | AGPL-3.0 (Netzwerktrigger), Attribution bei Permissive in der UI, SSPL/BUSL/Elastic bei konkurrierendem Dienst |67| Distribuiertes Programm | GPL-2.0, GPL-3.0, LGPL, MPL, EPL (alle greifen bei Distribution); Permissive Attribution |68| Nur intern | Kein Copyleft-Auslöser bei interner Nutzung ohne Distribution. AGPL greift dennoch, wenn externe Nutzer über Netz zugreifen. Permissive Attribution gute Praxis. |69| Embedded / Firmware | GPL besonders schwer erfüllbar (Quellcodeoffenlegung + reproduzierbarer Build + Installationsinfo); vor Auslieferung planen |7071Einsatzmodell im Ausgabevermerk kennzeichnen.7273### Schritt 3: Jede Abhängigkeit klassifizieren7475Nicht nur Metadaten lesen — tatsächlichen Lizenztext prüfen. LICENSE-Dateien können falsch sein; Package-Metadaten können veraltet sein.7677Klassifikation:7879| Kategorie | Beispiele | Wesentliche Pflichten |80|---|---|---|81| **Permissiv** | MIT, BSD-2-Clause, BSD-3-Clause, Apache-2.0, ISC | Attribution, Lizenztextbeibehaltung; Apache-2.0 ergänzend Patentlizenz + NOTICE-Pflicht |82| **Schwaches Copyleft** | LGPL-2.1, LGPL-3.0, MPL-2.0, EPL-1.0, EPL-2.0, CDDL | Datei- oder bibliotheksweite Quellcodeoffenlegung; Verlinkungsregeln variieren |83| **Starkes Copyleft** | GPL-2.0, GPL-3.0, AGPL-3.0, OSL, EUPL (je nach Version) | Breite Quellcodeoffenlegung; AGPL erstreckt sich auf Netzwerknutzung |84| **Public Domain / Widmung** | CC0, Unlicense, WTFPL | Keine Pflichten; aber: Public-Domain-Widmung nicht in allen Rechtsordnungen anerkannt (in Deutschland fraglich, §§ 29, 64 UrhG) |85| **Nicht-OSI Source-Available** | SSPL, BUSL, Commons Clause, Elastic License, Fair Source | Kein Open Source — schränken kommerzielle oder konkurrierende Nutzung ein; Lizenztext lesen |86| **Unbekannt / Proprietär** | Vendor-spezifisch, fehlendes Lizenz-File, Widerspruch File vs. Headers | Stopp — nicht als Permissiv behandeln |8788Besonders kennzeichnen:8990- **Dual-lizenzierte Pakete** — welche Lizenz nutzen wir? Wahl kann Pflichten ändern.91- **Veraltete Pakete** — kein aktiver Maintainer; gibt es einen gepflegten Ersatz?92- **Copyleft in transitiver Abhängigkeit** — Toplevel-Lizenz ist permissiv, aber eine transitive Abhängigkeit ist Copyleft.93- **Lizenswechsel bei bekannten Projekten** — Redis, MongoDB, Elastic, HashiCorp haben relizenziert; angepinnte Version prüfen.9495### Schritt 4: Pflichten auf Einsatzmodell abbilden9697Für jedes klassifizierte Paket:9899```markdown100### [Paket@Version] — [Lizenz]101102**Klassifikation:** [Permissiv / Schwaches Copyleft / Starkes Copyleft / Public Domain / Nicht-OSI / Unbekannt]103104**Pflichten für unser Einsatzmodell ([SaaS / Distribuiert / Intern / Embedded]):**105106- [ ] [Konkrete Pflicht — z. B. "Attribution in NOTICES-Datei, die mit der App ausgeliefert wird"]107- [ ] [z. B. "Bei Modifikation und Distribution: Quellcode der Änderungen veröffentlichen"]108- [ ] [z. B. "AGPL-Netzwerktrigger — wenn Nutzer über Netz auf unsere modifizierte Version zugreifen, Quellcode anbieten"]109110**Risiko:** 🔴 Kritisch | 🟠 Hoch | 🟡 Mittel | 🟢 Niedrig111112**Empfehlung:** [Pflichten erfüllen | Ersetzen durch [Alternative] | Entfernen | Anwaltliche Prüfung vor Auslieferung | Kommerzielle Lizenz bei [Anbieter] beschaffen]113```114115**Verlinkungsbeziehung bestimmt den Schweregrad:**116117- **Statische Verlinkung / gemeinsame Kompilierung:** Werke zu einem Binary vereint. Starkes Signal für Copyleft-Auslösung.118- **Dynamische Verlinkung / Shared Library:** Werke zur Laufzeit trennbar. LGPL explizit erlaubt (§ 6 LGPL — "work that uses the Library"). GPL-Position umstritten.119- **Header-Einbindung / Inline-Funktionen:** Kann abhängig von Einbindungstiefe ein abgeleitetes Werk begründen.120- **Subprozess / IPC:** Getrennte Prozesse über wohldefinierte Schnittstellen. Im Regelfall kein abgeleitetes Werk.121- **Netzwerk-API-Aufruf:** Für die meisten Lizenzen kein Auslöser. Für **AGPL-3.0**: Bereitstellung der Software über Netz gilt als Verbreitung — auch AGPL-Komponente hinter einer API triggert in einer Microservice-Architektur.122- **Dateiweises Copyleft (MPL):** Nur modifizierte Dateien tragen das Copyleft, nicht das gesamte Werk.123124**Schweregrad-Kalibrierung:**125126| Stufe | Bedeutung |127|---|---|128| 🔴 Kritisch | Starkes Copyleft in einem Einsatzmodell, das es auslöst (GPL in distribuiertem Binary, AGPL in SaaS). Nicht-OSI-Lizenz, die dem Geschäftsmodell widerspricht (z. B. SSPL bei gebautem verwaltetem Dienst). Lizenz nicht bestimmbar bei tragender Abhängigkeit. |129| 🟠 Hoch | Schwaches Copyleft mit Pflichten, die noch nicht eingerichtet sind (Dateilevel-Disclosure, NOTICE-Anforderungen). Dual-lizenziert mit unklarer Lizenzwahl. Lizenzdatei widerspricht File-Headern. |130| 🟡 Mittel | Permissiv mit noch nicht umgesetzten Attributionspflichten (fehlende NOTICES-Datei). Transitive Copyleft-Abhängigkeit, die je nach Einbindung greifen kann oder nicht. |131| 🟢 Niedrig | Permissiv mit bereits erfüllten Pflichten. Copyleft in einem Einsatzmodell, das es nicht auslöst (GPL-Bibliothek nur intern, keine Distribution). |132133### Schritt 5: Kritische Befunde am Anfang des Vermerks kennzeichnen134135- **Lizenz unbekannt** — als "Prüfung erforderlich" klassifizieren, nicht als Permissiv. Unklassifizierte Abhängigkeit sollte eine Lieferentscheidung aufhalten.136- **Lizenzdatei widerspricht File-Headern** — beide lesen und Widerspruch melden.137- **Inkompatible Kombinationen** — GPL-2.0-only + Apache-2.0 historisch bekannte Inkompatibilität; MPL / EPL / GPL-Kombinationen sorgfältig prüfen.138- **Nicht-OSI-Lizenzen als Open Source getarnt** — SSPL, BUSL, Commons Clause, Elastic License. Lizenztexte lesen; nicht dem GitHub-"Open Source"-Badge vertrauen.139- **Lizenswechsel** — wenn Vorgängerversion permissiv und aktuelle Version Source-Available ist: angepinnte Version entscheidet.140141### Schritt 6: Ausgehende Prüfung (nur bei Code-Veröffentlichung als Open Source)142143- Gewählte Ausgangslizenz mit jeder eingebetteten Abhängigkeitslizenz kompatibel? (Kein MIT-Release bei eingebettetem GPL-Code möglich — das kombinierte Werk muss GPL sein)144- LICENSE-Datei vorhanden und korrekt?145- NOTICE-Datei vorhanden mit erforderlichen Attributionen (Apache-2.0 u. a.)?146- Drittlizenz-Texte gebearbeitet wo erforderlich?147- Kein proprietärer oder vertraulicher Code, keine Kundendaten, keine eingebetteten Zugangsdaten in der Repository-History?148- Marken- und Markenrechtsrichtlinien für den Projektnamen geprüft (getrennt von der Urheberrechtslizenz)?149150### Schritt 7: Vermerk zusammenstellen151152```markdown153[ARBEITSERGEBNIS-KOPFZEILE]154155### OSS-Lizenz-Prüfung: [Projekt / Abhängigkeitsliste / Paket]156157**Geprüft:** [Datum]158**Umfang:** [Abhängigkeitsliste / Einzelbibliothek / Ausgehender Code]159**Einsatzmodell:** [SaaS / Distribuiert / Intern / Embedded]160161---162163## Ergebnis164165[Zwei Sätze. Kann ausgeliefert werden? Was muss zuerst passieren?]166167**Geprüfte Pakete:** [N]168**Nach Klassifikation:** [N permissiv, N schwaches Copyleft, N starkes Copyleft, N Public Domain, N Nicht-OSI, N unbekannt]169**Befunde:** [N]🔴 [N]🟠 [N]🟡 [N]🟢170171**Genehmigung erforderlich von:** [Name, gemäß Mandatsprofil]172173---174175## Kritische Anfangshinweise176177[Unbekannte Lizenzen, Lizenz-Konflikte, Nicht-OSI als OSS getarnt, inkompatible Kombinationen]178179---180181## Nach Paket182183[Blöcke aus Schritt 4, nach Schweregrad gruppiert]184185---186187## Rechtsordnungshinweis188189OSS-Lizenz-Durchsetzbarkeit variiert: Der AGPL-Netzwerkauslöser ist in Deutschland grundsätzlich durchsetzbar (vgl. LG München I); Public-Domain-Widmungen sind im deutschen Recht problematisch (§§ 29, 64 UrhG — kein vollständiger Rechteentzug möglich, nur schuldrechtliche Abreden). Anwendbares Recht für Downstream-Distribution (z. B. bei Kunden in anderen Jurisdiktionen) und Mandatsprofil-Flaggen beachten.190191---192193## Ausgehende Prüfung (soweit einschlägig)194195[Aus Schritt 6]196197---198199## Weiterleitungshinweise200201[Wer genehmigt; was löst automatische Eskalation aus]202```203204## Beispiel205206**Eingabe:** `requirements.txt` eines Python-SaaS-Projekts enthält `flask-login` (MIT), `celery` (BSD-3-Clause), `cryptography` (Apache-2.0/BSD), `mysqlclient` (GPL-2.0).207208**Befund (Auszug):**209210> ### mysqlclient@2.1.1 — GPL-2.0211>212> **Klassifikation:** Starkes Copyleft213>214> **Pflichten für unser Einsatzmodell (SaaS):**215> - [ ] Kein Distributions-Auslöser bei reiner SaaS-Nutzung — Quellcodeoffenlegungspflicht der GPL trifft grundsätzlich auf physische Distribution216> - [ ] AGPL-Auslöser gilt nicht für GPL-2.0 — jedoch: falls künftig Binary ausgeliefert wird, entsteht Pflicht217> - [ ] Kommerziell: MySQL Connector/Python (proprietäre Lizenz) oder `PyMySQL` (MIT) als Alternative prüfen218>219> **Risiko:** 🟡 Mittel (SaaS ohne Distribution) / 🔴 Kritisch (bei künftiger Binary-Distribution)220>221> **Empfehlung:** Ersetzen durch `PyMySQL` (MIT) zur Risikominimierung; alternativ anwaltliche Prüfung ob SaaS-Einsatz tatsächlich GPL-frei bleibt.222223## Risiken und typische Fehler224225- **GPL-Durchsetzbarkeit in Deutschland unterschätzen:** Deutsche Gerichte haben GPL-Bedingungen konsequent durchgesetzt (LG München I, BGH). Verstöße führen automatisch zum Verlust des Nutzungsrechts.226- **AGPL-Netzwerkauslöser ignorieren:** Bei SaaS-Anwendungen, die AGPL-Komponenten nutzen, muss der gesamte Quellcode den Nutzern angeboten werden — auch ohne physische Distribution.227- **Public Domain im deutschen Recht:** § 64 UrhG: Urheberrecht erlischt 70 Jahre nach Tod des Urhebers. Eine "Widmung" in die Gemeinfreiheit ist deutschrechtlich nicht vollständig möglich; CC0 ist die bestmögliche Annäherung.228- **Dynamische vs. statische Verlinkung:** Gleiche Lizenz, entgegengesetztes Ergebnis. LGPL + statisch gelinkt = 🔴; LGPL + dynamisch gelinkt = 🟢.229- **Lizenswechsel nicht erkannt:** Angepinnte Version bestimmt die Lizenz — nicht die aktuelle Upstream-Version.230231## Quellenpflicht232233Alle Klassifikationen und Pflichtaussagen müssen belegbar sein:234235- **Gesetze:** §§ 31, 69a, 97 UrhG236- **Rechtsprechung:** mindestens eine Entscheidung zur GPL-Durchsetzbarkeit (LG München I oder BGH Afterlife)237- **Lizenztext:** direkt aus dem Repository oder SPDX; als `[Lizenztext gelesen — [Quelle]]` kennzeichnen238- **Kommentar oder Aufsatz:** Schricker/Löwenheim UrhG oder Metzger/Jaeger GRUR Int. 1999 mit Seitenangabe239- Modellannahmen als `[Modellwissen — verifizieren]` kennzeichnen.240241## Triage-Fragen vor Open-Source-Prüfung242243Bevor die Lizenz-Compliance-Analyse beginnt, klaere:2441. Handelt es sich um statische oder dynamische Verlinkung (entscheidend für GPL vs. LGPL-Frage)?2452. Wird die Software als SaaS-Dienst betrieben (AGPL: Netzwerk-Austauschklausel — Quellcode-Pflicht auch ohne Distribution)?2463. Sind alle Abhaengigkeiten in der Dependency-Liste erfasst (transitive Dependencies often missed)?2474. Ist ein SBOM (Software Bill of Materials) erstellt (Compliance-Dokumentation, EU Cyber Resilience Act)?248249## Aktuelle Rechtsprechung250251> Rechtsprechung live prüfen: Keine Entscheidung aus Modellwissen zitieren; vor Ausgabe über amtliche oder frei zugängliche Quelle mit Gericht, Entscheidungsform, Datum, Aktenzeichen und tragender Aussage verifizieren.252253> Quellenregel: Entscheidungen nur nach Prüfung einer amtlichen oder frei zugänglichen Quelle mit Gericht, Entscheidungsform, Datum, Aktenzeichen und tragender Aussage ausgeben.