Zum Inhalt

Der Lizenzweg — kann diese Plattform verkauft werden?

Diese Seite beantwortet eine einzige Frage: Darf man diese Plattform als geschlossenes Produkt weitergeben, ohne den eigenen Quelltext offenzulegen? Sie sagt, was dem heute im Weg steht, wie viel das genau ist, und was zu tun bleibt.

Die Aufstellung der Bausteine selbst steht auf der Seite Lizenzen und Herkunft — sie wird gemessen, nicht gepflegt. Hier steht, was daraus folgt.

Drei Sorten Erlaubnis, in Alltagssprache

Jeder fremde Baustein bringt seine eigenen Bedingungen mit. Es gibt davon drei Sorten:

Sorte Wie man es sich vorstellen kann Folge für ein verkauftes Produkt
Frei (MIT, BSD, Apache, ISC …) Eine Schraube aus dem Baumarkt Einbauen, verkaufen, fertig — nur den Hersteller im Kleingedruckten nennen
Austauschbar (LGPL) Ein Motor, den man einbauen darf — aber die Haube muss aufgehen, damit der Kunde ihn tauschen könnte Eigener Quelltext bleibt geschlossen; der Baustein muss austauschbar bleiben
Ansteckend (GPL, AGPL) Ein Motor, der das ganze Auto zum Gemeingut macht Wer ihn einbaut, muss sein komplettes Produkt offenlegen

Der Unterschied zwischen den letzten beiden ist der entscheidende — und er wird oft verwechselt, weil beide Namen auf GPL enden.

Der Bestand in einem Bild

Gemessen am 27.08.2026: 45 Pakete, davon 14 reine Entwicklungswerkzeuge, die nie beim Kunden ankommen. Von den 31 ausgelieferten Bausteinen sind zwei ansteckend.

flowchart TD
    P["Genie Platform<br/>eigener Quelltext"]

    subgraph AUS ["31 ausgelieferte Bausteine"]
        direction TB
        F["24 frei<br/>MIT · BSD · Apache · PSF · 0BSD · Unlicense"]
        L["2 austauschbar<br/>PySide6 · PySide6-QtAds"]
        A["ultralytics<br/>AGPL-3.0"]
        G["mutagen<br/>GPL-2.0"]
        M["2 Modelldateien<br/>yolov8n.pt · ui_elements_14cls.pt<br/>11,4 MB · AGPL"]
    end

    W["14 Werkzeuge<br/>pytest · mypy · ruff · PyInstaller<br/>gehen nie mit"]

    P --> F
    P --> L
    P --> A
    P --> G
    A -.- M
    P -.- W

    classDef frei fill:#c8e6c9,stroke:#2e7d32,color:#1a1a1a
    classDef gelb fill:#fff9c4,stroke:#f9a825,color:#1a1a1a
    classDef rot fill:#ffcdd2,stroke:#c62828,color:#1a1a1a
    classDef grau fill:#eceff1,stroke:#78909c,color:#1a1a1a
    class F frei
    class L gelb
    class A,G,M rot
    class W,P grau

Die beiden roten Bausteine sind der ganze Unterschied zwischen „verkaufbar" und „nicht verkaufbar". Alles andere ist bereits in Ordnung.

Wie viel Arbeit ist das genau?

Sehr wenig — und das ist kein Zufall, sondern das Ergebnis einer Bauregel dieser Plattform: jede fremde Quelle liegt hinter genau einer eigenen Fläche. Deshalb trifft der Austausch je einen Baustein, nicht den ganzen Baum.

Roter Baustein Wofür er da ist Wo er berührt wird Ersatz
ultralytics Objekte in Bildern erkennen eine Datei, 108 Zeilen (yolo_analyzer.py) — zwei Aufrufe RF-DETR, YOLOX oder D-FINE über ONNX (Apache-2.0/MIT)
die zwei Modelldateien die erkannten Klassen liegen im Verzeichnis data/models/ dieselben Modelle in frei lizenzierter Fassung
mutagen Titel und Interpret aus Musikdateien lesen eine Datei, 98 Zeilen (mutagen_surface.py), ein einziger Nutzer tinytag (MIT) — es wird nur gelesen, nie geschrieben

Andere Stellen nennen zwar „YOLO", hängen aber nicht an der Lizenz: der element_detector benutzt die eigene Fläche und kommt nie an ultralytics vorbei; der Doktor prüft nur, ob eine Datei vorhanden ist.

Der Entscheidungsweg

flowchart TD
    START([Soll das Produkt geschlossen<br/>verkauft werden?]) --> AGPL{Steckt ein ansteckender<br/>Baustein drin?}

    AGPL -->|"heute: ja — 2 Stück"| WEG["Austauschen<br/>2 Dateien + 2 Modelldateien"]
    AGPL -->|nein| LGPL{Bleibt der austauschbare<br/>Baustein austauschbar?}

    WEG --> LGPL
    AGPL -->|"Alternative"| KAUF["Firmenlizenz kaufen<br/>Preis auf Anfrage"]
    KAUF --> LGPL

    LGPL -->|"als Ordner ausliefern"| OK
    LGPL -->|"als eine einzige EXE"| QT["Qt-Lizenz kaufen<br/>oder Ordner-Auslieferung"]
    QT --> OK

    OK([Verkauf möglich<br/>eigener Quelltext bleibt geschlossen])

    classDef start fill:#e1f5fe,stroke:#0277bd,color:#1a1a1a
    classDef frage fill:#fff9c4,stroke:#f9a825,color:#1a1a1a
    classDef tun fill:#ffe0b2,stroke:#ef6c00,color:#1a1a1a
    classDef ziel fill:#c8e6c9,stroke:#2e7d32,color:#1a1a1a
    class START start
    class AGPL,LGPL frage
    class WEG,KAUF,QT tun
    class OK ziel

Was für den austauschbaren Baustein zu tun ist

Die Oberfläche steht auf Qt. Das ist erlaubt, auch in einem geschlossenen Produkt — unter vier Bedingungen, die alle erfüllbar sind:

  1. Die Qt-Bibliotheken liegen als eigene Dateien neben dem Programm, nicht fest eingebacken. Beim Erstellen des Pakets heißt das: als Ordner ausliefern, nicht als eine einzige Datei.
  2. Der Lizenztext liegt bei.
  3. Ein Hinweis, wo der Qt-Quelltext zu bekommen ist, liegt bei.
  4. An Qt selbst wird nichts geändert.

Wer diese vier nicht will, kauft eine Qt-Lizenz — dann entfallen sie.

Editionen: die Frage stellt sich anders, als sie klingt

Ein naheliegender Gedanke ist, drei Produktversionen zu bauen: eine teure mit allen Bausteinen, eine Standardversion, eine Demoversion, bei der der Kunde selbst installiert.

Gemessen hält diese Aufteilung nicht — weil keine Fähigkeit dieser Plattform an einer teuren Lizenz hängt:

Fähigkeit vermuteter teurer Träger tatsächlicher Träger
Diagramme QtCharts (kostenpflichtig) eigener Zeichencode — QtCharts wird nirgends benutzt
Video zusammensetzen ffmpeg bewusst keins — die Zusammenbauer sind reine Bordmittel
Wiedergabe VLC QtMultimedia, der reguläre Weg
Objekterkennung Ultralytics YOLO RF-DETR ist frei und genauer
Musik-Metadaten mutagen tinytag deckt den ganzen Bedarf

Eine teure Edition brächte also kein einziges Merkmal dazu. Was ein Editionsmodell trotzdem trägt, sind zwei andere Achsen:

flowchart LR
    subgraph EINE ["Eine technische Fassung"]
        B["alles frei lizenziert<br/>Qt austauschbar<br/>eigener Code geschlossen"]
    end

    B --> D["Demo<br/>Grundfunktionen"]
    B --> S["Standard<br/>voller Funktionsumfang"]
    B --> E["Enterprise<br/>+ Mehrplatz, Support,<br/>eigene Modelle"]

    B -.->|"getrennt davon"| X["Bring dein eigenes mit<br/>ffmpeg · VLC · Tesseract<br/>der Kunde installiert selbst"]

    classDef basis fill:#e1f5fe,stroke:#0277bd,color:#1a1a1a
    classDef edition fill:#c8e6c9,stroke:#2e7d32,color:#1a1a1a
    classDef extra fill:#eceff1,stroke:#78909c,color:#1a1a1a
    class B basis
    class D,S,E edition
    class X extra

Die Editionen unterscheiden sich also darin, was freigeschaltet ist — eine Preisentscheidung, keine Lizenzfrage. Und für Zusatzprogramme, die man aus rechtlichen Gründen nicht mitliefern möchte, gibt es den Weg „der Kunde installiert selbst": die Plattform erkennt sie und sagt ehrlich, wenn sie fehlen.

Was heute noch fehlt

Punkt Stand
Eigene Lizenzdatei fehlt — ohne sie gilt das gesetzliche Urheberrecht: alle Rechte vorbehalten, aber für Kunden unklar
Hinweisdatei mit allen fremden Lizenzen fehlt — auch freie Bausteine verlangen den Hinweis
Die zwei ansteckenden Bausteine im Baum
Ein Wächter, der neue ansteckende Bausteine meldet geplant — ohne ihn ist jede Aufräumung nur eine Momentaufnahme

Grenze dieser Seite

Sie liest die Angaben, die die Pakete selbst in ihren Metadaten machen, und leitet daraus ab, was zu tun ist. Sie prüft nicht, ob diese Angaben stimmen, und sie ist keine Rechtsberatung. Ob eine bestimmte Auslieferungsform im Einzelfall trägt, gehört vor dem ersten Verkauf einmal anwaltlich angesehen — das kann kein Werkzeug ersetzen.