Wie funktioniert die GPL in Bezug auf Sprachen wie Dart, die in andere Sprachen kompiliert werden?

11

Die Dart-Sprache von Google wird von keinem anderen Webbrowser als einem speziellen Chromium-Build namens Dartium unterstützt. Um Dart für Produktionscode zu verwenden, müssen Sie ihn über einen Dart-> JavaScript-Compiler / Übersetzer ausführen und dann das ausgegebene JavaScript in Ihrer Webanwendung verwenden.

Da JavaScript eine interpretierte Sprache ist, hat jeder, der die "Binärdatei" (Aka, die .js-Datei) empfängt, auch den Quellcode erhalten.

In der GNU General Public License v3.0 heißt es nun:

"Der" Quellcode "für eine Arbeit bedeutet die bevorzugte Form der Arbeit, um Änderungen daran vorzunehmen."

Dies würde bedeuten, dass der ursprüngliche Dart-Code zusätzlich zum JavaScript-Code auch dem Endbenutzer zur Verfügung gestellt werden muss. Bedeutet dies, dass in Dart geschriebene Webanwendungen auch allen Besuchern ihrer Website den Original-Dart-Code zur Verfügung stellen müssen, obwohl eine Kopie des Quellcodes bereits in einer für Menschen lesbaren / beschreibbaren / veränderbaren Form bereitgestellt wurde?

Peter-W
quelle
3
Ich würde die .js-Datei nicht wirklich als "Quellcode" bezeichnen, genauso wenig wie verschleierte js "Quellcode". Sicher, es wird immer noch interpretiert, aber in keiner Weise ist es der Quellcode. Es ist eher die HTML-Ausgabe eines PHP-Skripts. Ich bin mir jedoch nicht sicher, wie es in Bezug auf die Lizenzierung funktioniert.
Ben Brocka
Wenn Sie "Produktionscode" sagen, meinen Sie "Produziert"? Für den internen Gebrauch ist keine Freigabe des Quellcodes erforderlich. Basiert der von Ihnen verwendete Dart-Code auf dem GPL-lizenzierten (oder einem anderen) lizenzierten Code einer anderen Person? Oder handelt es sich um den gesamten von Ihnen entwickelten Originalcode? Die Antwort hängt wirklich von diesen Details ab
Paul
1
Sie müssen den Quellcode nicht für Besucher bereitstellen, wenn Sie eine GPL-Anwendung ausführen. Sie müssen den Quellcode nur angeben, wenn Sie die Anwendung verteilen . (Wenn es AGPL war, mussten Sie Quelle angeben : gnu.org/licenses/why-affero-gpl.html )
JCasso
1
Angenommen, die Anwendung wird auf einem öffentlich zugänglichen Web-Server ausgeführt, wird der Code dann nicht an alle Besucher "verteilt"? Auch wenn es nur vom Browser an einen temporären Speicherort heruntergeladen wird, bevor es ausgeführt wird.
Peter-W
@ Peter-W Ich würde sagen, das Argument ist technisch und nicht eindeutig. Dass der Browser Javascript herunterlädt, ist eine Art Implementierungsdetail. Die meisten Benutzer wissen nicht, dass sie irgendetwas "verteilt" haben, während die meisten Benutzer verstehen würden, dass das Erhalten einer CD oder das Herunterladen von Inhalten als "Verteilung" gilt. In diesem Fall handelt es sich bei dem Implementierungsmechanismus um eine Verteilung (an den Browser und vorübergehend), die mir das gesamte Problem unklar macht. EDIT : Auch in gewisser Weise ist js Code aus Sicht eines Dart-Codierers "Bytecode", nicht wahr?
Andres F.

Antworten:

9

Ja, wenn sich der Code unter der GPL befindet und Sie das ausgegebene JavaScript bereitstellen, müssen Sie auch den ursprünglichen Dart-Code angeben. Dies geschieht normalerweise mit einem Link zum Herunterladen des Quellcodes von Ihrer Site. Sie können ihn jedoch auch in einen Kommentar oder ähnliches einbetten.

Ich denke, der einfachste Weg, die GPL in diesem Fall einzuhalten, besteht darin, Option d für die Verteilung der Quelle zu verwenden

d) Übermitteln Sie den Objektcode, indem Sie den Zugang von einem bestimmten Ort aus (kostenlos oder gegen Gebühr) anbieten, und bieten Sie den gleichen Zugang zur entsprechenden Quelle auf dieselbe Weise über denselben Ort ohne weitere Gebühr an. Sie müssen nicht von Empfängern verlangen, dass sie die entsprechende Quelle zusammen mit dem Objektcode kopieren. Wenn der Ort zum Kopieren des Objektcodes ein Netzwerkserver ist, befindet sich die entsprechende Quelle möglicherweise auf einem anderen Server (von Ihnen oder einem Dritten betrieben), der gleichwertige Kopierfunktionen unterstützt, vorausgesetzt, Sie halten klare Anweisungen neben dem Objektcode ein und geben an, wohin Finde die entsprechende Quelle. Unabhängig davon, auf welchem ​​Server die entsprechende Quelle gehostet wird, müssen Sie sicherstellen, dass diese so lange verfügbar ist, wie dies zur Erfüllung dieser Anforderungen erforderlich ist.

Im Wesentlichen tun Sie dies, wenn Sie die JS-Datei in Ihre Seite aufnehmen

<script src="file.js" /><!-- source at http://example.com/path/to/modified/source/file.dart -->
Dirk Holsopple
quelle
2
Bitte lesen Sie meine Antwort. Beachten Sie die Anmerkungen zur GPL, für die keine Originalquelle freigegeben werden muss, die nur in diesem Fall generiert wird. In diesem Fall würde GPL nicht verlangen, dass er verteilt, daher spielt der Verteilungsmechanismus keine Rolle. Wie gesagt, andere Lizenzen haben andere Regeln.
Paul
1
Ich denke, GCC ist ein Beispiel. Da es sich bei GCC um eine GPL handelt und ich sie zum Kompilieren eines "Closed Source" -Programms verwende, muss ich dafür die Originalquelle freigeben? Ich glaube, dasselbe gilt für jeden GPL- "Compiler"
Paul
3
Diese Antwort ist falsch. Selbst wenn der Dart-Code unter der GPL lizenziert ist, müssen Sie den Dart-Quellcode nur bereitstellen, wenn Sie die Anwendung verteilen . Für die Ausführung einer GPL-Anwendung auf einem Server muss kein Quellcode für diese Anwendung angegeben werden. Aus diesem Grund gibt es eine weitere Lizenz namens AGPL . Für diesen speziellen Zweck.
JCasso
2
@JCasso das wäre wahr, wenn der Code auf dem Server ausgeführt würde, aber im Fall von Dart ist der resultierende Objektcode JavaScript, das in den allermeisten Fällen an den Client verteilt wird. Wenn Sie etwas wirklich Seltsames wie das Ausführen von JavaScript auf dem Server ausführen, zählt dies natürlich nicht als Verteilung.
Dirk Holsopple
3
@JCasso, das nur für serverseitigen Code gilt. Von derselben Seite: Drupals JavaScript, einschließlich der in Drupal enthaltenen Kopie von jQuery, befindet sich ebenfalls unter der GPL. Daher muss jedes Javascript, das mit Drupals JavaScript im Browser interagiert, auch unter der GPL oder einer GPL-kompatiblen Lizenz stehen.
Dirk Holsopple
2

Zunächst geht es um GPL, nicht um AGPL.

Wenn Sie die Anwendung nicht mit einer GPL verteilen und auf einem Server ausführen, müssen Sie den Quellcode nicht angeben . Dafür gibt es AGPL. In der GPL dreht sich alles um die Verteilung.

Von Drupal FAQ:

Muss ich den Code für meine Website jedem geben, der sie besucht?

Nein. Die GPL betrachtet das Anzeigen einer Website nicht als "Verteilen", sodass Sie den auf Ihrem Server ausgeführten Code nicht freigeben müssen. Http://drupal.org/licensing/faq/#q6

Bitte beachten Sie, dass Drupal unter der GPL lizenziert ist und js-Dateien enthält (viel).

Von der GNU:

Der Zweck der GNU Affero GPL besteht darin, ein Problem zu vermeiden, das Entwickler von kostenlosen Programmen betrifft, die häufig auf Servern verwendet werden.

Angenommen, Sie entwickeln und veröffentlichen ein kostenloses Programm unter der normalen GNU-GPL. Wenn Entwickler D das Programm ändert und veröffentlicht, muss er seine Version auch unter der GPL verteilen. Wenn Sie also eine Kopie seiner Version erhalten, können Sie einige oder alle seiner Änderungen in Ihre eigene Version integrieren.

Angenommen, das Programm ist hauptsächlich auf Servern nützlich. Wenn D das Programm ändert, führt er es höchstwahrscheinlich auf seinem eigenen Server aus und gibt niemals Kopien frei. Dann würden Sie niemals eine Kopie des Quellcodes seiner Version erhalten, sodass Sie niemals die Möglichkeit hätten, seine Änderungen in Ihre Version aufzunehmen. Sie können dieses Ergebnis nicht mögen.

Die Verwendung der GNU Affero GPL vermeidet dieses Ergebnis. Wenn D seine Version auf einem Server ausführt, den jeder verwenden kann, können Sie sie auch verwenden. Angenommen, er hat die Lizenzanforderungen erfüllt, damit die Benutzer des Servers den Quellcode seiner Version herunterladen können, können Sie dies tun und dann seine Änderungen in Ihre Version integrieren. (Wenn er es nicht befolgt hat, muss sich Ihr Anwalt bei ihm beschweren.) Quelle: http://www.gnu.org/licenses/why-affero-gpl.html

JCasso
quelle
2
Aber da dies Dart ist, der nach Javascript kompiliert und dann wie auf dem Cilent ausgeführt wird, gilt dies?
Winston Ewert
1
GPL ist darüber klar. Wenn ich Ihnen eine Ubuntu-CD gebe, muss ich Ihnen eine Möglichkeit bieten, den Quellcode zu erhalten. Wenn ich ubuntu.iso auf einen Dateiserver stelle, muss ich auch einen Download-Link (oder so ähnlich) bereitstellen. Dies nennt man Verteilung. Wenn Sie es verteilen, müssen Sie den Quellcode angeben. Eine Online-App (auf einem Server) wird jedoch niemals als "Verteilung" gezählt.
JCasso
3
Der Punkt ist, dass der Code im Browser ausgeführt wird, nicht auf dem Server. Ihre Antwort ist nur dann sinnvoll, wenn wir uns mit Code befassen, der auf dem Server ausgeführt wird. Aber wir sind nicht. Wir betrachten Code, der auf Client-Computern ausgeführt wird. Wenn der Code auf dem Server ausgeführt wurde, haben Sie Recht, es ist keine Verteilung. Da der Code jedoch vom Browser heruntergeladen und ausgeführt wird, handelt es sich um eine Verteilung, und Ihre Antwort ist respektlos.
Winston Ewert
2
Eigentlich denke ich, dass es sehr wichtig ist, welche CPU es verarbeitet. Wenn ich Ihren Code auf meiner CPU ausführe, haben Sie Ihren Code notwendigerweise an mich verteilt. In jeder Hinsicht ist es genau das gleiche, als hätte ich ein Programm heruntergeladen und ausgeführt. Die Frage wurde bereits zuvor erörtert: stackoverflow.com/questions/1239470/… , programmers.stackexchange.com/questions/62869/… .
Winston Ewert
2
Siehe auch die AGPL-Seite, auf die Sie verlinkt haben. Es wird explizit der auf Servern ausgeführte Code und nicht der auf Clients ausgeführte Code erörtert. Wenn der Autor der Meinung wäre, dass die GPL nicht für Ihren von Javascript ausgeführten Code gilt, hätte er dies in seiner Diskussion erwähnt.
Winston Ewert
1

Im Allgemeinen hängt es wirklich von der Lizenz ab. In Ihrem Fall ist Dart ein schlechtes Beispiel, da es sich um BSD handelt, und es scheint, dass GNU 3.0 den Fall abdeckt, über den Sie sprechen. Als Nicht-Anwalt würde ich dieses Zitat als "Der generierte Code wird nicht speziell behandelt" interpretieren.

Dart Home Page Bezieht sich auf Folgendes: BSD-Lizenz

Ihre Frage zu GPL ist also umstritten

Außerdem: GNU 3.0-Lizenz

Gibt es eine Möglichkeit, die Ausgabe, die Benutzer durch die Verwendung meines Programms erhalten, zu GPLen? Kann ich beispielsweise verlangen, dass diese Designs kostenlos sind, wenn mein Programm zum Entwickeln von Hardware-Designs verwendet wird? (#GPLOutput)

Im Allgemeinen ist dies rechtlich unmöglich; Das Urheberrecht gibt Ihnen kein Mitspracherecht bei der Verwendung der Ausgabe, die Personen mit Ihrem Programm aus ihren Daten machen. Wenn der Benutzer Ihr Programm verwendet, um seine eigenen Daten einzugeben oder zu konvertieren, liegt das Urheberrecht an der Ausgabe bei ihm, nicht bei Ihnen. Wenn ein Programm seine Eingabe in eine andere Form übersetzt,> erbt der Copyright-Status der Ausgabe im Allgemeinen den der Eingabe, aus der es generiert wurde.

Sie können also nur dann mitbestimmen, wenn wesentliche Teile der Ausgabe (mehr oder weniger) aus dem Text Ihres Programms kopiert werden. Zum Beispiel würde ein Teil der Ausgabe von Bison (siehe oben) von der GNU-GPL abgedeckt, wenn wir in diesem speziellen Fall keine Ausnahme gemacht hätten.

Sie können ein Programm künstlich dazu bringen, bestimmten Text in seine Ausgabe zu kopieren, auch wenn es keinen technischen Grund dafür gibt. Wenn dieser kopierte Text jedoch keinen praktischen Zweck erfüllt, kann der Benutzer diesen Text einfach aus der Ausgabe löschen und nur den Rest verwenden. Dann müsste er die Bedingungen für die Weiterverteilung des kopierten Textes nicht einhalten.

Paul
quelle
3
Die Frage bezieht sich nicht auf einen Dart-Compiler, der GPL ist (was übrigens für die Programmausgabe (Compiler) irrelevant wäre), sondern auf ein Dart-Programm, das GPL-fähig ist.
2
@delnan Ich habe die Frage nicht so gelesen wie du. 1) Siehe meinen ersten Link, Dart ist BSD. 2) Wenn das Dara-Programm GPL wäre, würde er die Frage nicht stellen. Ich las die Frage, als er wissen wollte, ob er auch seinen Dart-Quellcode veröffentlichen musste. Hast du meine Antwort tatsächlich gelesen?
Paul
2
Nun, Sie scheinen der einzige zu sein, der es so liest. Obwohl OP nicht ausdrücklich erwähnt, dass es sich bei dem fraglichen Dart-Programm um eine GPL handelt, deutet nichts darauf hin, dass der Dart-Compiler auch eine GPL ist. Daher bin ich nicht bereit anzunehmen, dass er so wenig Nachforschungen angestellt hat.
Tut mir leid, also strecken Sie das aus ... Wenn also weder das Dart-Programm GPL noch das Dart BSD ist (wirklich, oder zumindest die Site sagt es), was ist dann die Frage? Wenn es nur um "Muss ich A (GPL) verteilen, wenn ich B (nicht GPL) veröffentlichen möchte" geht, dann ist es eine doppelte Frage
Paul
2
@Paul Meine Annahme und die aller anderen ist, dass das Dart-Programm tatsächlich GPL-fähig ist.
0

Die Grundfrage lautet:

Gilt das Einfügen von Javascript in eine Webseite (z. B. Verweisen über ein Skript-Tag) als "Übermitteln" der GPLed-Arbeit?

In diesem Fall müssen Sie die Quelle in der bevorzugten Form zum Ändern des Codes zur Verfügung stellen, andernfalls nicht. In diesem Fall ist die bevorzugte Form der ursprüngliche Dart-Quellcode, der zum Generieren des Javascript verwendet wird.

Ich kann auf der FSF-Website keine explizite Antwort auf diese Frage finden, aber Stallmans Aufsatz "The Javascript Trap" scheint darauf hinzudeuten, dass er dies als Conveying betrachtet, und als solches müssten Sie den ursprünglichen Dart-Quellcode zur Verfügung stellen. Siehe seinen Hinweis zum Zulassen von minimierten Versionen, die nicht den Text der Lizenz enthalten, aber dennoch von der Lizenz abgedeckt sind.

In dieser FAQ zu Javascript und Vorlagen finden Sie eine Ausnahme, mit der Vorlagen GPLed-Javascript verwenden können, ohne GPLed zu sein.

Der absolut beste Weg, um festzustellen, ob das, was Sie tun möchten, mit der Lizenz konform ist, besteht darin, den Inhaber des Urheberrechts des Codes zu fragen, da nur dieser das Recht hat, die Lizenz durchzusetzen. Sie haben die Lizenz möglicherweise anders interpretiert und sind bereit, eine Ausnahme hinzuzufügen, um ihre Interpretation explizit zu machen.

Craig
quelle
Das ist eigentlich nicht die Frage. Wenn Sie die Frage sorgfältig lesen, geht das OP davon aus, dass Sie das Javascript verteilen müssen. Es sind nur andere in dieser Frage, die diese Interpretation in Frage gestellt haben. Die Frage ist, ob er auch den Dart-Code verteilen muss.
Winston Ewert
@WinstonEwert Wenn ich "Quellcode" sage, meine ich die ursprünglichen Dart-Quelldateien, die zum Generieren des Javascript verwendet wurden. Ich werde meine Antwort aktualisieren, um dies klar zu machen.
Craig