Come funziona la GPL per quanto riguarda le lingue come Dart che si compilano in altre lingue?


11

Il linguaggio Dart di Google non è supportato da alcun browser Web diverso da una versione speciale di Chromium nota come Dartium. Per utilizzare Dart per il codice di produzione è necessario eseguirlo attraverso un compilatore / traduttore Dart-> JavaScript e quindi utilizzare il JavaScript emesso nell'applicazione Web.

Poiché JavaScript è un linguaggio interpretato, anche chiunque riceva il "binario" (Aka, il file .js) ha ricevuto il codice sorgente.

Ora, la GNU General Public License v3.0 afferma che:

"Il" codice sorgente "per un'opera indica la forma preferita dell'opera per modificarla."

Ciò implicherebbe che il codice Dart originale oltre al codice JavaScript deve essere fornito anche all'utente finale. Ciò significa che qualsiasi applicazione web scritta in Dart deve fornire anche il codice Dart originale a tutti i visitatori del loro sito Web anche se una copia del codice sorgente è già stata fornita in una forma leggibile / scrivibile / modificabile?


3
Non chiamerei davvero il file .js "codice sorgente" più di quanto offuscato js sia "codice sorgente". Certo, è ancora interpretato, ma non è in alcun modo il codice sorgente. È più simile all'output HTML di uno script PHP. Non sono sicuro di come funzioni per quanto riguarda le licenze.
Ben Brocka,

Quando dici "Codice di produzione", intendi "Prodotto"? L'uso interno non richiede il rilascio del codice sorgente. Il codice Dart che stai utilizzando si basa sul codice GPL di qualcun altro (o altro)? O è tutto questo codice originale sviluppato da te? La risposta dipende davvero da questi dettagli
Paul,

1
Non è necessario fornire il codice sorgente ai visitatori se si esegue un'applicazione GPL. Devi solo fornire il codice sorgente se distribuisci l'applicazione. (Se fosse AGPL, allora dovevi fornire la fonte: gnu.org/licenses/why-affero-gpl.html )
JCasso,

1
Supponendo che l'applicazione sia in esecuzione su un server Web pubblico, il codice non viene "distribuito" a tutti i visitatori? Anche se viene scaricato dal browser solo in una posizione temporanea prima di essere eseguito.
Peter-W,

@ Peter-W Direi che l'argomento è tecnico e non ben definito. Il fatto che il browser scarichi javascript è una sorta di dettaglio di implementazione; la maggior parte degli utenti non è a conoscenza del fatto che siano stati "distribuiti" nulla, mentre la maggior parte degli utenti capirebbe che ottenere un CD o scaricare contenuti conta come "distribuzione". In questo caso, il meccanismo di implementazione è una distribuzione (al browser e temporanea), che mi rende poco chiaro l'intero problema. EDIT : inoltre, in un certo senso il codice js è "bytecode" dal punto di vista di un codificatore Dart, non è vero?
Andres F.

Risposte:


9

Sì, se il codice si trova sotto la GPL e tu fornisci il JavaScript emesso, devi anche fornire il codice Dart originale. Questo in genere verrebbe fatto con un link per scaricare il codice sorgente dal tuo sito ma potresti anche incorporarlo in un commento o qualcosa del genere.

Penso che il modo più semplice per conformarsi alla GPL in questo caso sia usare l'opzione d per distribuire la fonte

d) Trasmettere il codice oggetto offrendo l'accesso da un luogo designato (gratuitamente oa pagamento) e offrire un accesso equivalente alla Fonte corrispondente nello stesso modo attraverso lo stesso luogo senza ulteriori addebiti. Non è necessario richiedere ai destinatari di copiare l'origine corrispondente insieme al codice oggetto. Se il luogo in cui copiare il codice oggetto è un server di rete, l'origine corrispondente potrebbe trovarsi su un altro server (gestito da te o da una terza parte) che supporti funzionalità di copia equivalenti, a condizione che tu mantenga chiare indicazioni accanto al codice oggetto che dice dove trova la fonte corrispondente. Indipendentemente dal server che ospita la fonte corrispondente, l'utente è tenuto a garantire che sia disponibile per tutto il tempo necessario a soddisfare tali requisiti.

Fondamentalmente lo fai quando includi il file JS nella tua pagina

<script src="file.js" /><!-- source at http://example.com/path/to/modified/source/file.dart -->

2
Per favore leggi la mia risposta. Nota le osservazioni su GPL che non richiedono il rilascio della fonte originale, generata solo in questo caso. In questo caso, GPL non gli richiederebbe la distribuzione, quindi il meccanismo di distribuzione non ha importanza. Come ho detto, altre licenze hanno regole diverse.
Paul,

1
Penso che GCC sia un esempio. Dato che GCC è GPL e lo uso per compilare un programma "closed source", è necessario che io rilasci il sorgente originale? Credo che lo stesso sarebbe vero per qualsiasi "compilatore" GPL
Paul,

3
Questa risposta è sbagliata Anche se il codice Dart è concesso in licenza in base a GPL, non è necessario fornire il codice sorgente Dart a meno che non si distribuisca l'applicazione. L'esecuzione di un'applicazione GPL su un server non richiede la fornitura del codice sorgente per tale applicazione. Ecco perché esiste un'altra licenza denominata AGPL . Per quello scopo specifico.
JCasso,

2
@JCasso sarebbe vero se il codice fosse in esecuzione sul server, ma nel caso di Dart il codice oggetto risultante è JavaScript che viene distribuito al client nella stragrande maggioranza dei casi. Ovviamente, se stai facendo qualcosa di veramente strano come eseguire JavaScript sul lato server, non conta come distribuzione.
Dirk Holsopple,

3
@JCasso che si applica solo al codice lato server. Dalla stessa pagina: JavaScript di Drupal, inclusa la copia di jQuery inclusa in Drupal, è anch'esso sotto GPL, quindi qualsiasi JavaScript che interagisce con JavaScript di Drupal nel browser deve essere anche sotto licenza GPL o compatibile GPL.
Dirk Holsopple,

2

Innanzitutto stiamo parlando di GPL, non di AGPL.

Se non si distribuisce un'applicazione GPL, se la si esegue su un server, non è necessario fornire il codice sorgente . C'è AGPL per questo. GPL riguarda la distribuzione.

Dalle domande frequenti su Drupal:

Devo fornire il codice per il mio sito Web a chiunque lo visiti?

No. La GPL non considera la visualizzazione di un sito Web come "distribuzione", quindi non è necessario condividere il codice in esecuzione sul proprio server. Http: //drupal.org/licensing/faq/#q6

Si noti che Drupal è concesso in licenza in GPL e contiene file js (molto).

Da GNU:

Lo scopo di GNU Affero GPL è prevenire un problema che riguarda gli sviluppatori di programmi gratuiti che vengono spesso utilizzati sui server.

Supponiamo di sviluppare e rilasciare un programma gratuito sotto la normale GNU GPL. Se lo sviluppatore D modifica il programma e lo rilascia, la GPL richiede che distribuisca anche la sua versione sotto la GPL. Pertanto, se ottieni una copia della sua versione, sei libero di incorporare alcune o tutte le sue modifiche nella tua versione.

Ma supponiamo che il programma sia utile principalmente sui server. Quando D modifica il programma, molto probabilmente potrebbe eseguirlo sul proprio server e non rilasciare mai copie. Quindi non otterrai mai una copia del codice sorgente della sua versione, quindi non avrai mai la possibilità di includere le sue modifiche nella tua versione. Questo risultato potrebbe non piacerti.

L'uso di GNU Affero GPL evita questo risultato. Se D esegue la sua versione su un server che tutti possono usare, anche tu puoi usarla. Supponendo che abbia seguito il requisito della licenza per consentire agli utenti del server di scaricare il codice sorgente della sua versione, è possibile farlo, quindi è possibile incorporare le sue modifiche nella propria versione. (Se non lo ha seguito, il tuo avvocato si lamenta con lui.) Fonte: http://www.gnu.org/licenses/why-affero-gpl.html


2
Ma visto che questo è Dart, che viene compilato in Javascript, e quindi eseguito come sul cilent, questo vale?
Winston Ewert,

1
GPL ne è chiaro. Se ti do un cd di Ubuntu, devo fornirti un modo per ottenere il codice sorgente. Se metto ubuntu.iso su un fileserver, devo anche fornire un link per il download (o qualcosa del genere). Questo si chiama distribuzione. Se lo distribuisci devi fornire il codice sorgente. Ma avere un'app online (su un server) non viene mai considerata "distribuzione".
JCasso,

3
il punto è che il codice viene eseguito sul browser, non sul server. La tua risposta è significativa solo se stiamo osservando il codice che viene eseguito sul server. Ma non lo siamo. Stiamo esaminando il codice che viene eseguito sui computer client. Se il codice fosse eseguito sul server, avresti ragione, non è distribuzione. Ma poiché il codice viene scaricato dal browser ed eseguito, è distribuzione e la tua risposta è irriverente.
Winston Ewert,

2
In realtà, penso che importi davvero quale CPU lo elabora. Se eseguo il tuo codice sulla mia CPU, per necessità, mi hai distribuito il codice. A tutti gli effetti è esattamente come se avessi scaricato un programma ed eseguirlo. La domanda è stata discussa in precedenza: stackoverflow.com/questions/1239470/… , programmers.stackexchange.com/questions/62869/… .
Winston Ewert,

2
Inoltre, consulta la pagina AGPL a cui sei collegato. Discute esplicitamente il codice eseguito sui server, non il codice eseguito sui client. Se l'autore avesse pensato che GPL non si applicava al tuo codice javascript eseguito, lo avrebbe menzionato nella sua discussione.
Winston Ewert,

1

In generale, dipende davvero dalla licenza. Nel tuo caso, Dart è un cattivo esempio dal momento che è BSD, e sembra che GNU 3.0 copra il caso di cui stai parlando. Come non avvocato interpreterei quella citazione come "Il codice generato non è specificamente coperto"

Home page Dart Si riferisce a questo: Licenza BSD

Quindi la tua domanda su GPL è discutibile

Inoltre: Licenza GNU 3.0

C'è un modo in cui posso GPL l'output che le persone ottengono dall'uso del mio programma? Ad esempio, se il mio programma viene utilizzato per sviluppare progetti hardware, posso richiedere che questi progetti siano gratuiti? (#GPLOutput)

In generale ciò è giuridicamente impossibile; la legge sul copyright non ti dice nulla sull'uso dell'output che le persone fanno dai loro dati usando il tuo programma. Se l'utente utilizza il programma per inserire o convertire i propri dati, il copyright sull'output appartiene a lui, non a te. Più in generale, quando un programma traduce il suo input in un'altra forma, lo stato del copyright dell'output eredita quello dell'input da cui è stato generato.

Quindi l'unico modo per dire qualcosa nell'uso dell'output è se parti sostanziali dell'output vengono copiate (più o meno) dal testo nel tuo programma. Ad esempio, parte dell'output di Bison (vedi sopra) sarebbe coperto dalla GNU GPL, se non avessimo fatto un'eccezione in questo caso specifico.

È possibile fare in modo che un programma copi artificialmente un determinato testo nel suo output anche se non vi è alcun motivo tecnico per farlo. Ma se quel testo copiato non ha uno scopo pratico, l'utente può semplicemente eliminare quel testo dall'output e usare solo il resto. Quindi non avrebbe dovuto obbedire alle condizioni di ridistribuzione del testo copiato.


3
La domanda non riguarda un compilatore Dart che è GPL (che sarebbe BTW irrilevante per l'output del programma (compilatore)), ma un programma Dart che è GPL'd.

2
@delnan Non ho letto la domanda come te. 1) Vedi il mio primo link, Dart is BSD. 2) Se il programma Dara fosse GPL, non farebbe la domanda. Ho letto la domanda mentre voleva sapere se gli era richiesto di rilasciare anche il suo codice sorgente Dart. Hai davvero letto la mia risposta?
Paul,

2
Bene, sembra che tu sia l'unico a leggerlo in quel modo. Mentre OP non menziona esplicitamente che il programma Dart in questione è GPL, nulla gli fa pensare che il compilatore Dart sia GPL, quindi non sono disposto ad assumere che abbia fatto così poche ricerche.

Mi dispiace così allungalo ... Quindi se né il programma Dart è GPL e Dart è BSD (davvero, lo è, o almeno il sito dice che lo è), allora qual è la domanda? Se si tratta solo di "Devo distribuire A (GPL'd) quando voglio rilasciare B (non GPL)", allora è una domanda duplicata
Paul

2
@Paul Il mio presupposto, e tutti gli altri, è che il programma Dart è in effetti GPL.

0

La domanda di base è:

Includere javascript nella pagina Web (ad es. Riferimento tramite un tag di script) conta come "trasporto" il GPL funziona?

In tal caso, è necessario rendere disponibile l'origine nel formato preferito per modificare il codice, in caso contrario. In questo caso il modulo preferito è il codice sorgente Dart originale utilizzato per generare il javascript.

Non riesco a trovare una risposta esplicita a questa domanda sul sito di FSF, ma il saggio di Stallman "La trappola Javascript" sembra indicare che lo considera come Conveying e come tale dovresti rendere disponibile il codice sorgente originale di Dart. Vedi la sua nota su come consentire le versioni minimizzate che non includono il testo della licenza ma sono ancora coperte dalla licenza.

Vedi anche questa FAQ su javascript e template per un'eccezione che consentirebbe ai template di usare javascript GPL senza essere GPL.

Il modo migliore in assoluto per sapere se ciò che si desidera fare è conforme alla licenza è chiedere al titolare del copyright il codice, perché solo loro hanno il diritto di far valere la licenza. Potrebbero aver interpretato la licenza in modo diverso ed essere disposti ad aggiungere un'eccezione per rendere esplicita la loro interpretazione.


In realtà, non è questa la domanda. Se leggi attentamente la domanda, l'OP presume che ti verrà richiesto di distribuire il javascript. Sono solo gli altri su questa domanda che hanno messo in dubbio tale interpretazione. La domanda è se deve anche distribuire il codice Dart.
Winston Ewert,

@WinstonEwert Quando dico "codice sorgente" intendo i file sorgente Dart originali utilizzati per generare il javascript. Aggiornerò la mia risposta per chiarirlo.
Craig,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.