Dieter: Leidiges Thema: MySQL und Closed Source

Hallo,
leider muss ich wieder ein leidiges Thema ansprechen, und zwar das Lizenzmodell von MySQL.
Wenn das eigenen Programm unter GPL steht, ist ja alles soweit klar, aber wenn nicht, wird es schwierig...

Also es geht um folgendes:
Ich möchte/muss ein kleines SQL Dumper Programm erstellen, welches von einer (MySQL) Datenbank regelmäßig Backups zieht, bischen Monitoring etc.
Angedacht ist, in diesem Programm Connector/J (Java) für den Datenbankzugriff zu verwenden, evt. kommt aber auch Connector/Net (.Net) zum Einsatz.

Dieses Programm soll als Freeware vertrieben werden, aber nicht Open Source sein (bitte keine Diskussion darüber, ich habe die Entscheidung nicht getroffen und dran zu rüttel geht leider nicht).
Da wäre es natürlich unpraktisch, zig hundert Euro für eine MySQL Lizenz hinzublättern für ein Produkt, an dem man nichts verdient (dennoch closed Source sein muss).

Nun ist mir auf der MySQL Lizenzpolitik Seite folgendes aufgefallen:

Wenn Sie Open-Source-Anwendungen unter einer OSI-zugelassenen Lizenz entwickeln und vertreiben, jedoch nicht unter GPL, stellt MySQL die GPL-Lizenz mit einer FLOSS-Ausnahmeregelung bereit.

Also konkret heißt dies doch, dass wenn ich ein Programm unter einer GPL fremden Lizenz aber von der OSI anerkannten Lizenz vertreibe, auch alles soweit okay ist.
Also wäre es mir möglich, z.B. um den Connector/J einen Wrapper zu schreiben und diesen unter LGPL oder BSD zu stellen.

In meinem Programm, dem SQL Dumper könnte ich dann ja problemlos meinen LGPL/BSD Wrapper dynamisch linken und alles wäre in Ordnung, oder? Oder übersehe ich da etwas?

Wäre nett wenn mich jemand weiterhelfen könnte.

Verwendet man Google zu dem Thema, dann findet man leider oft relativ alte Beiträge bzw. Diskussionen aus dem Jahr 2004 oder nur Diskussionen die ums kommerziellen Produkte in PHP sich drehen.

Grüße
Dieter

  1. echo $begrüßung;

    Ich möchte/muss ein kleines SQL Dumper Programm erstellen, welches von einer (MySQL) Datenbank regelmäßig Backups zieht, bischen Monitoring etc.
    Angedacht ist, in diesem Programm Connector/J (Java) für den Datenbankzugriff zu verwenden, evt. kommt aber auch Connector/Net (.Net) zum Einsatz.

    Geh doch dabei den "PHP-Weg". Für PHP Version 5 wird die MySQL-API in Form einer libmysql.dll nicht mit ausgeliefert. Als Anwender kann man sich diese Datei selbst downloaden und in das passende Verzeichnis legen, wobei natürlich auch der Anwender selbst die rechtlichen Belange beachten muss. Aber einfach nur anwenden ist ja kein Problem.

    echo "$verabschiedung $name";

    1. Hallo,

      Geh doch dabei den "PHP-Weg". Für PHP Version 5 wird die MySQL-API in Form einer libmysql.dll nicht mit ausgeliefert. Als Anwender kann man sich diese Datei selbst downloaden und in das passende Verzeichnis legen, wobei natürlich auch der Anwender selbst die rechtlichen Belange beachten muss. Aber einfach nur anwenden ist ja kein Problem.

      ja davon habe ich auch schon gelesen:
      http://www.lug-kr.de/wiki/MySQL und dann unten unter Lizenz, letzter Punkt

      Naja schöner wäre es ja, wenn der User ein vollständiges Programm erhält. Es ist als eine Art Give-Away gedacht, einfach herunterladen (oder per CD bekommen etc.) und ausprobieren, ohne viel Aufwand.

      Aber habe ich diese Floss Exception denn richtig interpretiert (der englische Text ist schon etwas verwirrend wenn man nicht so Tief in der ganzen Open Source Thematik steckt) oder gibts da noch Aspekte die man beachten muss?

      Grüße
      Dieter

  2. Hallo Dieter,

    Wenn das Programm nicht nur mit MySQL funktioniert, sondern z.B. einfach auf JDBC aufbaut, solltest Du nicht an die GPL gebunden sein, jedenfalls nicht, wenn Du das nicht gleich als ein Gesammtprodukt auslieferst.
    Es ist ja erst der Anwender, der dann irgendwie in Deinem Programm konfiguriert, dass der Mysql-Treiber geladen werden soll.
    Der Anwender hat auch kein Problem, so lang er die Software nur so benutzt und nicht als Kombination verbreitet.
    Es ist auch kein Problem, ein Freeware- und ein GPL-Programm auf einem Medium zu verbreiten. Ergo kannst Du den Treiber vermutlich auch direkt mit ausliefern.
    Das ist, was auch dedlfix vorschlägt. Allerdings ist es wichtig, zu beachten, dass es nicht genügt, einfach den Treiber nicht mit auszuliefern. Entscheidend ist, dass die Software nicht auf diesem aufbaut. (Was im Beispiel PHP ja auch nicht der Fall ist).

    Also konkret heißt dies doch, dass wenn ich ein Programm unter einer GPL fremden Lizenz aber von der OSI anerkannten Lizenz vertreibe, auch alles soweit okay ist.

    Nein, das heißt es nicht. Hast Du auch die FLOSS-Exception gelesen?

    "You obey the GPL in all respects for the Program and the Derivative Work, except for identifiable sections of the Derivative Work which are not derived from the Program, and which can reasonably be considered independent and separate works in themselves"
    Sprich: Auch wenn das auf dem Mysql-Treiber aufbauende Programm nicht unter GPL steht, so muss für die Teile, die auf dem MySQL-Treiber aufbauen, dennoch die GPL eingehalten werden.

    Also wäre es mir möglich, z.B. um den Connector/J einen Wrapper zu schreiben und diesen unter LGPL oder BSD zu stellen.

    Ein Wrapper baut praktisch vollständig auf der dahinter leigenden Software auf. Folglich würde auf für alle Teile davon die GPL gelten.

    So einfach kann man sich also nicht drumherum tricksen. Wenn man GPL-Software benutzen und davon ökonomisch profitieren will, muss man sich eben auch daran halten. Das ist kein Vorwurf an Dich persönlich, aber bei Deinem Arbeitgeber scheint da eine gewisse "Kostenlos"-Mentalität zu herrschen, derer er sich selbst vielleicht nichtmal ganz bewusst ist.

    Aus meiner sicht hast Du zwei Optionen:

    • Die Software unabhänge von MySQL entwickeln.
    • Die Software unter GPL stellen bzw. unter eine anere OSI-Lizenz und zusätzlich die FLOSS-Bedingungen erfüllen.

    Grüße

    Daniel

    1. Hallo,
      ah okay, vielen Dank für deine Antwort.

      Wie würdest du es bewerten, wenn es einen Plugin Ordner gibt, der von der Software gescannt wird und die enthalten JDBC Treiber eingebunden werden und in diesem Ordner bei der Auslieferung bereits der MySQL JDBC Treiber enthalten ist. Dies sollte doch eigentlich kein Problem darstellen, oder muss der User wirklich händisch den MySQL Treiber in den Plugin Ordner kopieren?

      Dann hab ich da noch ne Frage, und zwar zum 2. Punkt der Floss-Exp.:
      "2. all identifiable sections of the Derivative Work which are not derived from the Program, and which can reasonably be considered independent and separate works in themselves,
         1. are distributed subject to one of the FLOSS licenses listed below, and"

      Heißt dies, dass das Programm dann dennoch unter eine Open Source Lizenz gestellt werden müsste, selbst wenn es mit allgemeinen JDBC Treiber funktioniert? Oder interpretiere ich diese Zeile falsch? Oder verlangt die normale GPL Lizenz soetwas nicht?
      Da würde sich ja evt. die BSD Lizenz anbieten, da diese ja nicht die Offenlegung des Quellcodes erfordert, oder nicht?.

      Wenn man GPL-Software benutzen und davon ökonomisch profitieren will, muss man sich eben auch daran halten. Das ist kein Vorwurf an Dich persönlich, aber bei Deinem Arbeitgeber scheint da eine gewisse "Kostenlos"-Mentalität zu herrschen, derer er sich selbst vielleicht nichtmal ganz bewusst ist.

      Naja auch im privaten bin ich der (reinen) GPL eher etwas kritisch gegenüber gestellt, da diese doch extrem restriktiv ist. Hat man ja bei dem Aufschrei mit PHP gesehen, dass MySQL nicht mehr in PHP hätte genutzt werden dürfen (oder wäre das selbst mit der normalen GPL weiterhin möglich?). Und zur Verbreitung der Software hilft es auch nicht besonders weiter. Hätte sich PHP irgendwie durchgesetzt, wenn jedes Script unter der GPL stehen müsste (oder trifft es dort nicht zu, bin etwas verwirrt).

      Ansonsten wird das Tool ja kostenlos angeboten, hilft somit bei der Verbreitung von MySQL. Nur werden dort dann auch 'exkulusive' Teile enthalten sein, die nicht als Open Source verfügbar sein sollen/drüfen/können. In der Formel 1 würde auch keiner Ferrari zwingen wollen, deren Geheimnis (d.h. Konstruktionspläne etc.) für ihre Autos zu veröffentlichen, so dass es andere (Konkurrenten) nutzen können.

      Sollte es also nicht möglich sein, es als closed Source zu vertreiben, blieben noch drei Möglichkeiten:

      • Das Programm kostenpflichtig zu machen, was aber nicht Sinn der Sache zum Marketing gedacht ist. Scheidet also aus.
      • Das Programm nicht schreiben, dann hat eben keiner etwas davon.
      • Die 'exklusiven' Programmteile neu schreiben. Da aber Zeit und Geld knapp sind, müssten diese eben Quick & Dirty geschrieben werden -> Ergibt ein schlechteres Programm

      Gruß
      Dieter

      1. Hallo Dieter,

        Wie würdest du es bewerten, wenn es einen Plugin Ordner gibt, der von der Software gescannt wird und die enthalten JDBC Treiber eingebunden werden und in diesem Ordner bei der Auslieferung bereits der MySQL JDBC Treiber enthalten ist.

        Ich würde vermuten, dass das zulässig ist. Es widerspricht meines erachtens auch nicht der Intention der GPL. Generell würde ich sowas aber von einem Anwalt abklären lassen, für eine Firma sollte das ja drin sein.

        "2. all identifiable sections of the Derivative Work which are not derived from the Program, and which can reasonably be considered independent and separate works in themselves,
           1. are distributed subject to one of the FLOSS licenses listed below, and"
        Heißt dies, dass das Programm dann dennoch unter eine Open Source Lizenz gestellt werden müsste, selbst wenn es mit allgemeinen JDBC Treiber funktioniert?

        Nein, wenn Du nicht vom konkreten Treiber/der konkreten DB abhängst, sondern generisches SQL und JDBC verwendest, betrifft dich einfach die GPL schon gar nicht.
        Bloß weil irgendwer JDBC implementiert und die GPL nutzt, bist Du ja nicht gezwungen, auch die GPL zu verwenden. Es geht einfach darum, was ein abgeleitetes (derived) Programm ist. Dazu muss es ja explizit auf Eigenschaften des GPL-Treibers aufsetzen.
        Die FLOSS-Exception wird überhaupt erst relevant, wenn das abgeleitete Programm das tut.

        Da würde sich ja evt. die BSD Lizenz anbieten, da diese ja nicht die Offenlegung des Quellcodes erfordert, oder nicht?

        Sie erfordert natürlich die Offenlegung des Quelltextes des Originalprogramms. Sie erfordert nur nicht, das für ein verändertes Programm zu tun.

        Naja auch im privaten bin ich der (reinen) GPL eher etwas kritisch gegenüber gestellt, da diese doch extrem restriktiv ist.

        Nuja, GPL hat eben das Ziel eine freie Softwarebasis zu schaffen und freien Informationsaustausch und Zusammenarbeit zu fördern. Es geht nicht darum, etwas einfach zu verschenken.

        Hat man ja bei dem Aufschrei mit PHP gesehen, dass MySQL nicht mehr in PHP hätte genutzt werden dürfen (oder wäre das selbst mit der normalen GPL weiterhin möglich?).

        Ich weiß jetzt nicht, was Du genau meinst. PHP-Scripte, die MySQL erfordern, müssen eben unter GPL stehen, wenn sie veröffentlicht werden.

        Hätte sich PHP irgendwie durchgesetzt, wenn jedes Script unter der GPL stehen müsste (oder trifft es dort nicht zu, bin etwas verwirrt).

        Naja, für Laufzeitbibliotheken für Programmiersprachen ist die GPL in der Tat meist ungeeignet. Daher gibt es da auch immer eine Ausnahme, wie sie z.B. bei Java oder vermutlich auch dem GCC verwendet wird.
        Aber weite Teile eines Interpreters oder Compilers kann man durchaus unter GPL stellen.

        Ansonsten wird das Tool ja kostenlos angeboten, hilft somit bei der Verbreitung von MySQL. Nur werden dort dann auch 'exkulusive' Teile enthalten sein, die nicht als Open Source verfügbar sein sollen/drüfen/können. In der Formel 1 würde auch keiner Ferrari zwingen wollen, deren Geheimnis (d.h. Konstruktionspläne etc.) für ihre Autos zu veröffentlichen, so dass es andere (Konkurrenten) nutzen können.

        Sind diese Teile wirklich so exklusiv und hochwertig? Sowas scheint mir auch oft überschätzt zu werden.
        Prinzipiell ist es aber möglich, GPL-Programme zu schreiben, die proprietäre Bibliotheken verwenden, indem man eine Erweiterung zur GPL hinzufügt.
        http://www.gnu.org/licenses/gpl-faq.html#FSWithNFLibs
        Außerdem könntest Du dank FLOSS-Exception eine andere Lizenz verwenden, die Dir direkt erlaubt, proprietäre Bibliotheken zu verwenden.

        Also angenommen ihr habt eine tolle Visualisierungsbibliothek.
        Dann dürfte es durchaus möglich sein, ein Programm zu schreiben, dass unter GPL oder einer anderen freien Lizenz steht, und den Mysql-Treiber und diese Bibliothek zu verwenden.

        • Die 'exklusiven' Programmteile neu schreiben. Da aber Zeit und Geld knapp sind, müssten diese eben Quick & Dirty geschrieben werden -> Ergibt ein schlechteres Programm

        Evtl. kann man auch alternativen zu diesen Teilen finden, die bereits unter GPL stehen?

        Grüße

        Daniel

      2. echo $begrüßung;

        Naja auch im privaten bin ich der (reinen) GPL eher etwas kritisch gegenüber gestellt, da diese doch extrem restriktiv ist. Hat man ja bei dem Aufschrei mit PHP gesehen, dass MySQL nicht mehr in PHP hätte genutzt werden dürfen (oder wäre das selbst mit der normalen GPL weiterhin möglich?). Und zur Verbreitung der Software hilft es auch nicht besonders weiter. Hätte sich PHP irgendwie durchgesetzt, wenn jedes Script unter der GPL stehen müsste (oder trifft es dort nicht zu, bin etwas verwirrt).

        Nach meinem Verständnis sind der PHP-Interpreter und die Programme in PHP-Code zwei verschiedene Seiten der Medaille. Es ist wie ein Bildbearbeitungsprogramm und das damit erstellte Bild oder vielleicht eher eine Videosoftware inklusive Player und ein Film der damit erstellt wurde und sich auch möglicherweise nur darauf abspielen lässt. Die erstellten Werke sind nicht gleichzeitig auch an die GPL gebunden, wenn die Erstellungs- oder Laufzeit-Tools das sind. Von den Erstellungs- und Laufzeit-Tools abgeleitete Programme jedoch, beispielsweise verbesserte Versionen davon, unterstehen geerbtermaßen der GPL.

        Für dein Projekt sehe ich persönlich kein Problem. Das von dir Geschriebene verwendet den Connector lediglich in Aufrufen, genauso wie es andere Betriebssystem- oder Laufzeitbibliotheksfunktionen aufruft. Du musst auch nicht dein Programm unter deren Lizenzbedingungen stellen, wenn die so vererbbar wären wie bei der GPL. Auch erweiterst oder veränderst du den Connector nicht, musst also auch nicht deshalb die GPL miterben.

        Deinen Wunsch nach kompletter Auslieferung könnte man, wenn man es genau nimmt, weitertreiben bis zum Betriebssystem selbst. Du vertreibst vermutlich auch nicht die Java-VM oder das .NET Framework oder gar Windows zusammen mit deinem Programm (wobei du das könntest, weil es davon "redistributable" Versionen gibt (außer Windows)) sondern führst es in den Installationsvorraussetzungen auf. Da schreibst du eben noch den Connector dazu. Jedoch darfst du nach dem Text in der Wikipedia ein unter GPL stehendes Programm auch weitergeben, solange du den Quelltext mitgibst.

        Zu guter Letzt hab ich mir mal den GPL-V2-Text (deutsche Übersetzung; die V2 war auf der Connector-Downloadseite verlinkt) herangezogen und fand, dass die GPL deinem Wunsch nicht entgegensteht.
        §0: "Andere Handlungen als Vervielfältigung, Verbreitung und Bearbeitung werden von dieser Lizenz nicht berührt; sie fallen nicht in ihren Anwendungsbereich. Der Vorgang der Ausführung des Programms wird nicht eingeschränkt, ..."
        §2 geht auf Veränderungen ein. Eine solche nimmst du nicht vor, damit entsteht kein "... auf dem Programm basierendes Werk". Mit "Programm" ist immer ein unter der GPL stehendes gemeint, also der Connector in deinem Fall. "Ferner bringt auch das einfache Zusammenlegen eines anderen Werkes, das nicht auf dem Programm basiert, mit dem Programm oder einem auf dem Programm basierenden Werk auf ein- und demselben Speicher- oder Vertriebsmedium dieses andere Werk nicht in den Anwendungsbereich dieser Lizenz." "anderes Werk" ist das von dir geschaffene. "basierend" bedeutet, dass etwas durch Änderung des Codes eines unter GPL stehenden Programms erzeugt wurde. Die Begriffserklärungen sind in §0 enthalten.
        §3 sagt aus, dass du das "Programm" (also den Connector) als "Objectcode oder als ausführbare Version" verbreiten darfst, wenn der Code dabei liegt oder von dir angeboten wird, ihn zur Verfügung zu stellen. Die genaue Bedingungen erspar ich mir hier.
        Damit dürfte eigentlich alles klar sein. Auch noch interessant ist: §5 verpflichtet dich nicht, die Lizenz anzunehmen. Jedoch musst du das tun, wenn du ein "Programm" verbreiten willst. Dazu solltest du dir den Text mal durchlesen. So schwer ist der insgesamt gar nicht, find ich. §6 sagt aus, dass der Empfänger die Lizenz des "Programms" durchgereicht bekommt, du sie nicht einschränken darfst, aber auch nicht zur Durchsetzung der Einhaltung verantwortlich bist.

        echo "$verabschiedung $name";