OpenNIT

Quelltext des aktuellen Standes

Fassung 1.1.1

OPEN_SOURCE_LICENSES.md

15 KB
# Open-Source-Komponenten & Lizenzübersicht

> OpenNIT – Vollständige Übersicht aller verwendeten Open-Source-Bibliotheken

---

## Kann das Projekt selbst als Open Source veröffentlicht werden?

**Kurzantwort: Ja – mit der richtigen Lizenswahl.**

Alle eingebundenen Abhängigkeiten sind unter permissiven oder LGPL-Lizenzen, die eine Open-Source-Veröffentlichung des Projekts erlauben. Folgende Punkte sind zu beachten:

| Prüfpunkt | Ergebnis |
|-----------|---------|
| MIT-Abhängigkeiten in Open Source verwendbar | ✅ Ja (keine Einschränkungen) |
| Apache-2.0-Abhängigkeiten in Open Source verwendbar | ✅ Ja (keine Einschränkungen) |
| BSD-3-Clause-Abhängigkeiten in Open Source verwendbar | ✅ Ja (keine Einschränkungen) |
| LGPL-Abhängigkeiten in Open Source verwendbar | ✅ Ja (LGPL erlaubt Einbindung in jedes Projekt) |
| GPL-Abhängigkeiten vorhanden | ❌ Nein (keine GPL-Bibliotheken gebündelt/gelinkt) |
| Proprietäre Abhängigkeiten vorhanden | ❌ Nein |

> Hinweis: Der optionale Virenscan kann **ClamAV** (GPL-2.0) nutzen. ClamAV ist **keine** gebündelte oder gelinkte Abhängigkeit, sondern ein separat betriebener Dienst, der nur über sein Socket-/Netzwerkprotokoll angesprochen wird – damit entsteht keine Copyleft-Pflicht für OpenNIT.

### Lizenzierung von OpenNIT

OpenNIT steht unter der **GNU Affero General Public License, Version 3 (AGPL-3.0-only)**.
Der vollständige Lizenztext liegt als `LICENSE` im Programmverzeichnis, `composer.json`
führt denselben Bezeichner. Für den Betrieb bedeutet das insbesondere: Wer die Anwendung
über ein Netzwerk bereitstellt, muss den zugehörigen Quelltext anbieten (Abschnitt 13) –
der Hinweis dazu steht auf allen Oberflächen, die ohne Anmeldung erreichbar sind.

**Ausnahme – WordPress-Plugin:** Das Verzeichnis `wordpress-plugin/opennit-connector/`
steht unter **GPL-2.0-or-later**. Das Plugin ist ein eigenständiges Werk: Es spricht
ausschließlich über HTTP (`wp_remote_request()`) mit einer OpenNIT-Installation, läuft in
einem fremden Prozess und bindet keinen Programmcode des Servers ein – die AGPL des Kerns
greift dadurch nicht auf das Plugin durch. Die abweichende Lizenz ist Voraussetzung für
eine Verteilung über WordPress.org, das „GPLv2 oder später" verlangt. Der Lizenztext liegt
als `LICENSE` im Plugin-Verzeichnis und damit in jeder ausgelieferten Kopie.

3. **Lizenztexte der LGPL-Abhängigkeiten** müssen im Repository oder in der Dokumentation sichtbar sein (bereits durch `composer install` vorhanden)

4. **LGPL-Pflicht beachten:** Nutzer müssen die Möglichkeit haben, LGPL-Bibliotheken (dompdf, php-svg-lib, php-font-lib) durch modifizierte Versionen zu ersetzen – bei einer Webanwendung ist dies durch den normalen Composer-Workflow bereits erfüllt.

---

## PHP-Abhängigkeiten (Composer)

### Direkte Abhängigkeiten

| Paket | Version | Lizenz | Zweck |
|-------|---------|--------|-------|
| `dompdf/dompdf` | ^3.1.6 (3.1.6) | **LGPL-2.1** | HTML → PDF-Konvertierung |
| `firebase/php-jwt` | ^7.0 (7.0.3) | BSD-3-Clause | JWT-Token für Authentifizierung |
| `lbuchs/webauthn` | ^2.2 (2.2.0) | MIT | WebAuthn/FIDO2-Server |
| `league/oauth2-client` | ^2.7 (2.9.0) | MIT | OAuth2-Client-Protokoll |
| `minishlink/web-push` | ^10.0 (10.0.3) | MIT | Web-Push-Benachrichtigungen (VAPID) |
| `thenetworg/oauth2-azure` | ^2.2.3 (2.2.5) | MIT | Azure AD / Entra ID Provider |
| `vlucas/phpdotenv` | ^5.5 (5.6.3) | BSD-3-Clause | `.env`-Datei-Loader |

### Transitive Abhängigkeiten (automatisch installiert)

| Paket | Version | Lizenz | Zweck |
|-------|---------|--------|-------|
| `brick/math` | 0.17.2 | MIT | Beliebig genaue Arithmetik (für Web-Push/VAPID) |
| `graham-campbell/result-type` | 1.1.4 | MIT | Result-Typ-Bibliothek (für phpdotenv) |
| `guzzlehttp/guzzle` | 7.15.2 | MIT | HTTP-Client-Bibliothek |
| `guzzlehttp/promises` | 2.5.1 | MIT | Promise/Async-Unterstützung |
| `guzzlehttp/psr7` | 2.13.0 | MIT | PSR-7 HTTP-Message-Implementierung |
| `masterminds/html5` | 2.10.1 | MIT | HTML5-Parser und Serializer |
| `dompdf/php-font-lib` | 1.0.2 | **LGPL-2.1-or-later** | Font-Datei-Verarbeitung (für dompdf) |
| `dompdf/php-svg-lib` | 1.0.2 | **LGPL-3.0-or-later** | SVG-Verarbeitung (für dompdf) |
| `phpoption/phpoption` | 1.9.5 | Apache-2.0 | Option-Typ für PHP |
| `psr/clock` | 1.0.0 | MIT | PSR-20 Clock-Interface |
| `psr/http-client` | 1.0.3 | MIT | PSR HTTP-Client-Interface |
| `psr/http-factory` | 1.1.0 | MIT | PSR HTTP-Factory-Interface |
| `psr/http-message` | 2.0 | MIT | PSR HTTP-Message-Interface |
| `ralouphie/getallheaders` | 3.0.3 | MIT | `getallheaders()` Polyfill |
| `sabberworm/php-css-parser` | 9.4.0 | MIT | CSS-Parser (für dompdf) |
| `spomky-labs/base64url` | 2.0.4 | MIT | Base64-URL-Encoding (für Web-Push/JWT) |
| `spomky-labs/pki-framework` | 1.4.2 | MIT | PKI-/Schlüsselverwaltung (für JWT/VAPID) |
| `thecodingmachine/safe` | 3.4.0 | MIT | Fehlerbehandelnde Wrapper für PHP-Standardfunktionen (für dompdf) |
| `symfony/deprecation-contracts` | 3.7.1 | MIT | Deprecation-Utilities |
| `symfony/polyfill-ctype` | 1.37.0 | MIT | `ctype_*()` Polyfill |
| `symfony/polyfill-mbstring` | 1.38.2 | MIT | Multibyte-String-Polyfill |
| `symfony/polyfill-php80` | 1.37.0 | MIT | PHP 8.0 Features Polyfill |
| `symfony/polyfill-php83` | 1.38.2 | MIT | PHP 8.3 Features Polyfill |
| `web-token/jwt-library` | 4.1.7 | MIT | JWT-Bibliothek (für Web-Push/VAPID) |

---

## Frontend-Bibliotheken (JavaScript / CSS / Schriften)

| Bibliothek | Version | Lizenz | Einbindung | Verwendung |
|-----------|---------|--------|-----------|-----------|
| **Font Awesome Free** | 5.15.4 | MIT (Code), SIL OFL 1.1 (Schriften), CC BY 4.0 (Icons) | Lokal gebündelt (`public/assets/fontawesome/`) | Icon-Set für die gesamte Oberfläche |
| **Feather Icons** (identische Pfaddaten auch im Fork **Lucide**) | kein Versionsmarker in den Inline-SVGs | MIT (Feather, © 2013-2023 Cole Bemis) bzw. ISC (Lucide) – die Attribution deckt beide Herkünfte ab | Inline in den Templates eingebettet | Strich-Icons in der Oberfläche (Aktions-Buttons, Status- und Listenansichten) |
| **vis-network** | 9.1.9 | Apache-2.0 **und** MIT (Dual-Lizenz; genutzt unter Apache-2.0) | Lokal gebündelt (`public/assets/js/vis-network.min.js`) | Netzwerk-Topologie-Visualisierung (UniFi) |
| **ZXing Browser** | keine Versionsangabe im Bundle | Apache-2.0 | Lokal gebündelt (`public/assets/js/zxing-browser.min.js`) | Barcode-/QR-Code-Scanner per Browser-Kamera |
| **node-qrcode** (Ryan Day; enthält qrcode-generator, dijkstrajs, encode-utf8) | keine Versionsangabe im Bundle | MIT | Lokal gebündelt (`public/assets/js/qrcode.min.js`) | Clientseitige QR-Code-Generierung (u. a. MFA-Einrichtung) |
| **Swagger UI** | 5.32.6 | Apache-2.0; das Bundle enthält u. a. **DOMPurify 3.4.0** (Apache-2.0 **und** MPL-2.0), React/react-dom/scheduler, js-yaml, classnames, buffer, safe-buffer, ieee754 (BSD-3-Clause), deep-extend, JSON-Patch, repeat-string | Lokal gebündelt (`resources/swagger-ui/`, auth-geschützt über `/admin/api/swagger-ui.js` und `.css` ausgeliefert) | Interaktive REST-API-Dokumentation (Admin → API, API-Auto) |
| **Source Sans Pro** | 5.2.5 (@fontsource) | SIL OFL 1.1 | Lokal gebündelt (`public/assets/fonts/source-sans-pro/`) | Standard-Schriftart der Oberfläche (DSGVO-konform) |
| **TinyMCE** | jeweils aktuelle npm-Version | GPL-2.0-or-later (ab v7); v5/v6 waren MIT | Selbst-gehostet, optional (via Admin-Backend), nicht im Repository | Rich-Text-Editor (E-Mail-, Seiten- und PDF-Templates) |
| **draw.io / diagrams.net** | – | Apache-2.0 | Self-hosted, optional (`public/drawio/`, nicht im Repository) | Netzwerk- und Infrastrukturdiagramme |

### Hinweis zu TinyMCE

TinyMCE ist **nicht im Repository enthalten**. Es kann optional über den Admin-Bereich (`Admin → Editor → TinyMCE`) nachgeladen werden; dabei wird das offizielle npm-Paket serverseitig heruntergeladen und lokal unter `public/assets/tinymce/` installiert.

Ist TinyMCE nicht installiert, verwendet OpenNIT automatisch den integrierten `wysiwyg.js`-Editor als Fallback. Beim Selbst-Hosting werden keinerlei Telemetrie-Daten oder Nutzungsstatistiken an Tiny Technologies übertragen.

**Lizenzwechsel beachten:** TinyMCE 5 und 6 standen unter **MIT**. Mit Version 7 hat Tiny
Technologies auf die **GNU General Public License Version 2 oder später** umgestellt (siehe
`LICENSE.md` im TinyMCE-Repository). Der Installer in OpenNIT lädt die jeweils aktuelle
npm-Version (`registry.npmjs.org/tinymce/latest`) – installiert wird daher heute eine
GPL-Fassung. Welche Lizenz konkret gilt, richtet sich nach der installierten Version; der
zugehörige Lizenztext liegt der heruntergeladenen Installation unter
`public/assets/tinymce/` bei.

Die Kombination mit der AGPL-3.0 dieses Projekts ist zulässig: Die Angabe „oder später"
erlaubt die Nutzung unter GPL-3.0, die mit der AGPL-3.0 vereinbar ist. OpenNIT liefert
TinyMCE nicht selbst aus – die Dateien werden bei der Installation direkt von npm bezogen.

---

## Externe Dienste (keine Bibliotheken, externe API-Aufrufe)

Diese Dienste sind **optional** und nur aktiv, wenn sie konfiguriert wurden. Es wird keine
zugehörige Software gebündelt oder gelinkt – es handelt sich ausschließlich um HTTPS-API-Aufrufe.

| Dienst | Zweck | Datenschutz-/Lizenzrelevanz |
|--------|-------|---------------------|
| **KI-Anbieter** (Anthropic/Claude, OpenAI, DeepSeek oder OpenAI-kompatibel) | KI-Chat-Assistent; das API-Auto-Modul nutzt Anthropic (Mapping-Ableitung, optionale Web-Suche) | Anfrageinhalte werden an den gewählten Anbieter übermittelt; nur bei konfiguriertem API-Schlüssel (optional mit Datenschutz-/Anonymisierungs-Modus) |
| **Microsoft Graph API** | Microsoft 365 / Entra ID (SSO, Mail, Lizenzsync), Intune-Geräteimport | Verbindung über App-Registrierung; nur bei Konfiguration |
| **ClamAV** (`clamd`) | Optionaler Virenscan beim Upload im Datei-Explorer | **GPL-2.0** – läuft als eigenständiger Dienst und wird nur über das Socket-/Netzwerkprotokoll angesprochen (kein Bündeln/Linken). Nur aktiv, wenn unter `/admin/files` eingeschaltet |

### Externe Datenquellen (Inhalte werden gespeichert und erneut angezeigt)

Anders als bei den obigen Diensten werden bei den folgenden Quellen **Inhalte lokal gespeichert
und in der Oberfläche erneut angezeigt** – es handelt sich also nicht um bloße Verlinkung,
sondern um eine Weitergabe der Inhalte. Beide Quellen sind öffentlich zugänglich und werden
entsprechend als Quelle genannt.

| Datenquelle | Endpunkt(e) | Verwendung in OpenNIT |
|---|---|---|
| **National Vulnerability Database (NVD)** – NIST, U.S. Department of Commerce | `https://services.nvd.nist.gov/rest/json/cves/2.0` | CVE-Modul: Schwachstellendaten werden zwischengespeichert und angezeigt (`src/Content/CveManager.php`, Aktualisierung via `src/Cron/Handlers/CveRefreshHandler.php`) |
| **CERT-Bund Warn- und Informationsdienst (WID)** – BSI | `https://wid.cert-bund.de/content/public/securityAdvisory/rss`, `https://wid.cert-bund.de/.well-known/csaf/provider-metadata.json` | Sicherheitsmeldungen werden abgerufen, in der Tabelle `bsi_advisories` gespeichert und angezeigt (`src/Content/BsiAdvisoryManager.php`) |

**Quellennennung und Klarstellung:** Als Quelle der CVE-Daten wird die NVD des NIST genannt, als
Quelle der Sicherheitsmeldungen das BSI bzw. CERT-Bund. **Weder NIST noch das BSI empfehlen,
billigen oder zertifizieren OpenNIT**; eine geschäftliche Verbindung oder Zusammenarbeit besteht
nicht. Maßgeblich für Richtigkeit und Aktualität ist stets die jeweilige Originalquelle
(https://nvd.nist.gov bzw. https://wid.cert-bund.de).

### DSGVO-Hinweis für externe Dienste

Bei einem Betrieb in der EU / unter DSGVO-Anforderungen sind nur noch die oben genannten,
bewusst zu konfigurierenden Dienste relevant. Frühere Abhängigkeiten von Drittanbieter-Diensten
sind inzwischen durch lokale Umsetzungen ersetzt:

| Früherer externer Dienst | Heutige Umsetzung in OpenNIT |
|----------------|------------------------------|
| Google Fonts | Source Sans Pro wird lokal aus `public/assets/fonts/source-sans-pro/` ausgeliefert |
| QR-Code-API (api.qrserver.com) | QR-Codes werden clientseitig lokal erzeugt (`public/assets/js/qrcode.min.js`) |
| Google Favicon Service | Favicons werden lokal über den `VaultFaviconManager` verarbeitet |

---

## Systemseitige PHP-Extensions (keine Drittbibliotheken)

Diese Extensions sind Teil von PHP und werden direkt genutzt:

| Extension | Lizenz | Verwendung |
|-----------|--------|-----------|
| `ext-openssl` | OpenSSL-Lizenz (OpenSSL + SSLeay) | AES-256-GCM-Verschlüsselung, PBKDF2 |
| `ext-pdo` + `ext-pdo_mysql` | PHP-Lizenz | Datenbankzugriff |
| `ext-json` | PHP-Lizenz | JSON-Serialisierung |
| `ext-mbstring` | PHP-Lizenz | Unicode-Zeichenverarbeitung |
| `ext-zip` | PHP-Lizenz (zlib) | ZIP-Export |
| `ext-gd` | PHP-Lizenz | Bildverarbeitung |

> Die PHP-Lizenz ist BSD-ähnlich und mit allen Open-Source-Lizenzen kompatibel.

---

## Lizenz-Kompatibilitätsmatrix

Für die Wahl der Projektlizenz:

| Projektlizenz | MIT-Deps | Apache-2.0-Deps | BSD-Deps | LGPL-Deps | Empfehlung |
|--------------|----------|-----------------|----------|-----------|------------|
| **MIT** | ✅ | ✅ | ✅ | ✅ | Sehr permissiv |
| **Apache-2.0** | ✅ | ✅ | ✅ | ✅ | Permissiv + Patentschutz |
| **GPL-3.0** | ✅ | ✅ | ✅ | ✅ | Copyleft |
| **AGPL-3.0** | ✅ | ✅ | ✅ | ✅ | Copyleft + Netzwerk-Use |
| **Proprietär** | ✅ | ✅ | ✅ | ✅ (ohne Modifikation) | Für OpenNIT nicht gewählt |

**Lizenz von OpenNIT: AGPL-3.0-only** → Verhindert Closed-Source-Forks, auch bei SaaS-Betrieb

---

## Zusammenfassung

- **30 PHP-Pakete** (7 direkt + 23 transitiv)
- **9 Frontend-Bibliotheken/Schriften** (überwiegend lokal gebündelt: Font Awesome, vis-network, ZXing, node-qrcode, Swagger UI, Source Sans Pro; inline in den Templates eingebettet: Feather Icons; optional/self-hosted: TinyMCE, draw.io)
- **Externe Dienste** (optional, nur bei Konfiguration): KI-Anbieter (Anthropic/OpenAI/DeepSeek/OpenAI-kompatibel), Microsoft Graph, ClamAV
- **Externe Datenquellen** (Inhalte werden gespeichert und erneut angezeigt): NVD/NIST (CVE-Daten), BSI CERT-Bund WID (Sicherheitsmeldungen) – jeweils mit Quellennennung; keine Empfehlung oder Billigung durch NIST oder BSI
- **Kritischste gebündelte Lizenz:** LGPL-2.1 (dompdf) – **unkritisch für Open-Source-Veröffentlichung**
- **Keine GPL-Abhängigkeit im ausgelieferten Paket** – GPL-lizenzierte Fremdsoftware wird
  nicht mitgeliefert: ClamAV (GPL-2.0) ist ein separat betriebener, optionaler Dienst, und
  TinyMCE (GPL-2.0-or-later ab v7) wird bei Bedarf direkt von npm installiert. Beides ist
  mit der AGPL-3.0 vereinbar. Die einzige mitgelieferte GPL-Komponente ist eigener Code:
  das WordPress-Plugin unter `GPL-2.0-or-later` (siehe oben).
- **Fazit: Alle Abhängigkeiten sind mit der AGPL-3.0 von OpenNIT vereinbar**