Comment fonctionne la GPL en ce qui concerne les langues comme Dart qui se compilent dans d'autres langues?

11

Le langage Dart de Google n'est pris en charge par aucun navigateur Web autre qu'une version spéciale de Chromium connue sous le nom de Dartium. Pour utiliser Dart pour le code de production, vous devez l'exécuter via un compilateur / traducteur Dart-> JavaScript, puis utiliser le JavaScript généré dans votre application Web.

Parce que JavaScript est un langage interprété, tous ceux qui reçoivent le "binaire" (Aka, le fichier .js) ont également reçu le code source.

Maintenant, la licence publique générale GNU v3.0 stipule que:

"Le" code source "d'une œuvre signifie la forme préférée de l'œuvre pour y apporter des modifications."

Ce qui impliquerait que le code Dart d'origine en plus du code JavaScript doit également être fourni à l'utilisateur final. Cela signifie-t-il que toute application Web écrite en Dart doit également fournir le code Dart original à tous les visiteurs de leur site Web, même si une copie du code source a déjà été fournie sous une forme lisible / inscriptible / modifiable?

Peter-W
la source
3
Je n'appellerais pas vraiment le fichier .js le "code source" pas plus que js obscurci n'est "code source". Bien sûr, il est toujours interprété, mais ce n'est en aucun cas le code source. Cela ressemble plus à la sortie HTML d'un script PHP. Je ne sais pas cependant comment cela fonctionne en termes de licence.
Ben Brocka
Lorsque vous dites "Code de production", voulez-vous dire "Produit"? L'utilisation interne ne nécessite aucune libération de code source. Le code Dart que vous utilisez est-il basé sur le code sous licence GPL (ou autre) de quelqu'un d'autre?, Ou est-ce tout le code original développé par vous? La réponse dépend vraiment de ces détails
Paul
1
Vous n'avez pas à fournir le code source aux visiteurs si vous exécutez une application GPL. Vous ne devez fournir le code source que si vous distribuez l'application. (Si c'était AGPL, alors vous deviez fournir la source: gnu.org/licenses/why-affero-gpl.html )
JCasso
1
En supposant que l'application s'exécute sur un serveur Web public, le code n'est-il pas «distribué» à chaque visiteur? Même s'il n'est téléchargé par le navigateur qu'à un emplacement temporaire avant d'être exécuté.
Peter-W
@ Peter-W Je dirais que l'argument est technique et pas clair. Que le navigateur télécharge javascript est en quelque sorte un détail d'implémentation; la plupart des utilisateurs ne savent pas qu'ils ont été "distribués" quoi que ce soit, alors que la plupart des utilisateurs comprendraient que l'obtention d'un CD ou le téléchargement de choses comptent comme une "distribution". Dans ce cas, le mécanisme de mise en œuvre est une distribution (vers le navigateur et temporaire), ce qui me rend tout le problème flou. EDIT : aussi, en quelque sorte le code js est "bytecode" du point de vue d'un codeur Dart, n'est-ce pas?
Andres F.

Réponses:

9

Oui, si le code est sous GPL et que vous fournissez le JavaScript généré, vous devez également fournir le code Dart d'origine. Cela se ferait généralement avec un lien pour télécharger le code source de votre site, mais vous pouvez également l'intégrer dans un commentaire ou quelque chose comme ça.

Je pense que le moyen le plus simple de se conformer à la GPL dans ce cas est d'utiliser l'option d pour distribuer la source

d) Transmettre le code objet en offrant l'accès à partir d'un endroit désigné (à titre gratuit ou payant), et offrir un accès équivalent à la source correspondante de la même manière à travers le même endroit sans frais supplémentaires. Vous n'avez pas besoin que les destinataires copient la source correspondante avec le code objet. Si l'emplacement de copie du code objet est un serveur réseau, la source correspondante peut se trouver sur un serveur différent (géré par vous ou un tiers) qui prend en charge des installations de copie équivalentes, à condition de conserver des instructions claires à côté du code objet indiquant où trouver la source correspondante. Quel que soit le serveur hébergeant la source correspondante, vous restez obligé de vous assurer qu'elle est disponible aussi longtemps que nécessaire pour répondre à ces exigences.

Essentiellement, vous faites cela lorsque vous incluez le fichier JS dans votre page

<script src="file.js" /><!-- source at http://example.com/path/to/modified/source/file.dart -->
Dirk Holsopple
la source
2
Veuillez lire ma réponse. Notez les remarques à propos de la GPL n'exigeant pas que la source d'origine soit publiée, uniquement générée dans ce cas. Dans ce cas, GPL ne l'obligerait pas à distribuer, donc le mécanisme de distribution n'a pas d'importance. Comme je l'ai dit, d'autres licences ont des règles différentes.
Paul
1
Je pense que GCC est un exemple. Puisque GCC est GPL et que je l'utilise pour compiler un programme "source fermée", cela nécessite-t-il que je libère la source d'origine? Je crois que la même chose serait vraie pour tout "compilateur" GPL
Paul
3
Cette réponse est fausse. Même si le code Dart est sous licence GPL, vous n'avez pas à fournir le code source Dart à moins que vous ne distribuiez l'application. L'exécution d'une application GPL sur un serveur ne nécessite pas de fournir le code source de cette application. C'est pourquoi il existe une autre licence nommée AGPL . Dans ce but précis.
JCasso
2
@JCasso ce serait vrai si le code s'exécutait sur le serveur, mais dans le cas de Dart, le code objet résultant est JavaScript qui est distribué au client dans la grande majorité des cas. Évidemment, si vous faites quelque chose de vraiment bizarre comme exécuter JavaScript côté serveur, cela ne compte pas comme distribution.
Dirk Holsopple
3
@JCasso qui ne s'applique qu'au code côté serveur. À partir de la même page: le JavaScript de Drupal, y compris la copie de jQuery incluse avec Drupal, est lui-même sous la GPL, donc tout Javascript qui interagit avec le JavaScript de Drupal dans le navigateur doit également être sous la GPL ou une licence compatible GPL.
Dirk Holsopple
2

Tout d'abord, nous parlons de GPL, pas d'AGPL.

Si vous ne distribuez pas d' application GPL, si vous l'exécutez sur un serveur, vous n'avez pas à fournir le code source . Il y a AGPL pour ça. La GPL est une question de distribution.

De la FAQ Drupal:

Dois-je donner le code de mon site Web à toute personne qui le visite?

Non. La GPL ne considère pas la visualisation d'un site Web comme une "distribution", vous n'êtes donc pas obligé de partager le code en cours d'exécution sur votre serveur. Http://drupal.org/licensing/faq/#q6

Veuillez noter que Drupal est sous licence GPL et contient des fichiers js (beaucoup).

Depuis GNU:

Le but de la GNU Affero GPL est d'éviter un problème qui affecte les développeurs de programmes gratuits qui sont souvent utilisés sur les serveurs.

Supposons que vous développiez et publiez un programme gratuit sous la GNU GPL ordinaire. Si le développeur D modifie le programme et le publie, la GPL l'oblige également à distribuer sa version sous la GPL. Ainsi, si vous obtenez une copie de sa version, vous êtes libre d'incorporer tout ou partie de ses modifications dans votre propre version.

Mais supposons que le programme soit principalement utile sur les serveurs. Lorsque D modifie le programme, il peut très probablement l'exécuter sur son propre serveur et ne jamais en publier de copies. Ensuite, vous n'obtiendrez jamais une copie du code source de sa version, vous n'aurez donc jamais la possibilité d'inclure ses modifications dans votre version. Vous n'aimerez peut-être pas ce résultat.

L'utilisation de la GNU Affero GPL évite ce résultat. Si D exécute sa version sur un serveur que tout le monde peut utiliser, vous pouvez aussi l'utiliser. En supposant qu'il ait respecté la licence requise pour permettre aux utilisateurs du serveur de télécharger le code source de sa version, vous pouvez le faire, puis vous pouvez incorporer ses modifications dans votre version. (S'il ne l'a pas suivi, votre avocat se plaint à lui.) Source: http://www.gnu.org/licenses/why-affero-gpl.html

JCasso
la source
2
Mais vu qu'il s'agit de Dart, qui est compilé en Javascript, puis exécuté comme sur le cilent, cela s'applique-t-il?
Winston Ewert
1
GPL est clair à ce sujet. Si je vous donne un cd ubuntu, je dois vous fournir un moyen d'obtenir le code source. Si je mets ubuntu.iso sur un serveur de fichiers, je dois également fournir un lien de téléchargement (ou quelque chose comme ça). C'est ce qu'on appelle la distribution. Si vous le distribuez, vous devez fournir le code source. Mais avoir une application en ligne (sur un serveur) n'est jamais compté comme «distribution».
JCasso
3
le fait est que le code s'exécute sur le navigateur, pas sur le serveur. Votre réponse n'a de sens que si nous examinons le code qui s'exécute sur le serveur. Mais nous ne le sommes pas. Nous examinons le code qui s'exécute sur les ordinateurs clients. Si le code a été exécuté sur le serveur, vous auriez raison, ce n'est pas de la distribution. Mais parce que le code est téléchargé par le navigateur et exécuté, il est distribué et votre réponse est irrévérencieuse.
Winston Ewert
2
En fait, je pense que le processeur le traite vraiment. Si j'exécute votre code sur mon CPU, alors par nécessité, vous m'avez distribué votre code. À toutes fins utiles, c'est exactement la même chose que si je téléchargeais un programme et l'exécutais. La question a déjà été discutée: stackoverflow.com/questions/1239470/… , programmers.stackexchange.com/questions/62869/… .
Winston Ewert
2
Consultez également la page AGPL à laquelle vous êtes lié. Il traite explicitement du code exécuté sur les serveurs, et non du code exécuté sur les clients. Si l'auteur pensait que la GPL ne s'appliquait pas à votre code exécuté par javascript, il l'aurait mentionné dans sa discussion.
Winston Ewert
1

En général, cela dépend vraiment de la licence. Dans votre cas, Dart est un mauvais exemple car c'est BSD, et il semble que GNU 3.0 couvre le cas dont vous parlez. En tant que non-avocat, j'interpréterais cette citation comme "Le code généré n'est pas spécifiquement couvert"

La page d'accueil de Dart fait référence à ceci: licence BSD

Donc, vous vous interrogez sur la GPL est sans objet

Aussi: Licence GNU 3.0

Existe-t-il un moyen de GPL les résultats que les gens obtiennent de l'utilisation de mon programme? Par exemple, si mon programme est utilisé pour développer des conceptions matérielles, puis-je exiger que ces conceptions soient gratuites? (#GPLOutput)

En général, cela est juridiquement impossible; la loi sur le droit d'auteur ne vous donne aucun droit de regard sur l'utilisation des résultats que les gens font à partir de leurs données en utilisant votre programme. Si l'utilisateur utilise votre programme pour saisir ou convertir ses propres données, le droit d'auteur sur la sortie lui appartient, pas vous. Plus généralement, lorsqu'un programme traduit son entrée sous une autre forme,> le statut de copyright de la sortie hérite de celui à partir duquel elle a été générée.

Ainsi, la seule façon d'avoir votre mot à dire sur l'utilisation de la sortie est de copier (plus ou moins) des parties substantielles de la sortie à partir du texte de votre programme. Par exemple, une partie de la production de Bison (voir ci-dessus) serait couverte par la GNU GPL, si nous n'avions pas fait d'exception dans ce cas spécifique.

Vous pouvez artificiellement faire en sorte qu'un programme copie certains textes dans sa sortie même s'il n'y a aucune raison technique de le faire. Mais si ce texte copié ne sert à rien, l'utilisateur peut simplement supprimer ce texte de la sortie et utiliser uniquement le reste. Il n'aurait alors pas à respecter les conditions de redistribution du texte copié.

Paul
la source
3
La question ne concerne pas un compilateur Dart qui est GPL (qui serait BTW non pertinent pour programmer la sortie (compilateur)), mais un programme Dart qui est GPL.
2
@delnan Je n'ai pas lu la question comme vous. 1) Voir mon 1er lien, Dart est BSD. 2) Si le programme Dara était sous GPL, il ne poserait pas la question. J'ai lu la question comme s'il voulait savoir s'il devait également publier son code source Dart. Avez-vous réellement lu ma réponse?
Paul
2
Eh bien, vous semblez être le seul à le lire comme ça. Bien que OP ne mentionne pas explicitement que le programme Dart en question est sous GPL, rien ne le laisse supposer que le compilateur Dart est GPL non plus, donc je ne suis pas prêt à supposer qu'il a fait si peu de recherches.
Désolé alors étirez ceci ... Donc, si ni le programme Dart n'est GPL ni le Dart BSD (vraiment, c'est le cas, ou du moins le site le dit), alors quelle est la question? S'il s'agit simplement de "Dois-je distribuer A (GPL'd) quand je veux libérer B (pas GPL)", alors c'est une question en double
Paul
2
@Paul Mon hypothèse, et celle de tout le monde, est que le programme Dart est en fait sous GPL.
0

La question fondamentale est:

Est-ce que l'inclusion de javascript sur une page Web (par exemple, un référencement via une balise de script) compte comme «transmettre» le travail sous GPL?

Si c'est le cas, vous devez rendre la source disponible dans le formulaire préféré pour modifier le code, sinon vous ne le faites pas. Dans ce cas, la forme préférée est le code source Dart d'origine utilisé pour générer le javascript.

Je ne trouve pas de réponse explicite à cette question sur le site de la FSF, mais l'essai de Stallman "The Javascript Trap" semble indiquer qu'il le considère comme porteur et en tant que tel, vous devrez rendre le code source Dart original disponible. Voir sa note sur l'autorisation des versions minifiées qui n'incluent pas le texte de la licence mais qui sont toujours couvertes par la licence.

Voir également cette FAQ sur javascript et les modèles pour une exception qui permettrait aux modèles d'utiliser le javascript GPL sans être GPL.

La meilleure façon absolue de savoir si ce que vous voulez faire est conforme à la licence est de demander au détenteur des droits d'auteur du code, car seuls ils ont le droit de faire appliquer la licence. Ils peuvent avoir interprété la licence différemment et être disposés à ajouter une exception pour rendre leur interprétation explicite.

Craig
la source
En fait, ce n'est pas la question. Si vous lisez attentivement la question, l'OP suppose que vous devrez distribuer le javascript. Ses seuls autres sur cette question qui ont remis en question cette interprétation. La question est de savoir s'il doit également distribuer le code Dart.
Winston Ewert
@WinstonEwert Quand je dis «code source», je veux dire les fichiers source Dart originaux utilisés pour générer le javascript. Je mettrai à jour ma réponse pour que ce soit clair.
Craig