Come si applica la regola di collegamento statico e dinamico GPL ai linguaggi interpretati?


19

A mio avviso, la GPL proibisce il collegamento statico dal codice non GPL al codice GPL, ma consente il collegamento dinamico dal codice non GPL al codice GPL. Quindi cos'è quando il codice in questione non è affatto collegato perché il codice è scritto in un linguaggio interpretato (ad es. Perl)?

Sembrerebbe troppo facile sfruttare la regola se fosse considerata un collegamento dinamico, ma d'altra parte, sembrerebbe anche impossibile fare riferimento legalmente al codice GPL da un codice non GPL se fosse considerato statico! I linguaggi compilati hanno almeno una distinzione tra collegamenti statici e dinamici, ma quando tutti i "collegamenti" sono solo in esecuzione di script, è impossibile dire quale sia l'intento senza una licenza esplicita!

O la mia comprensione di questo problema è errata, rendendo discutibile la domanda? Ho anche sentito parlare di una "eccezione del classpath" che comporta un collegamento dinamico; non fa parte della GPL ma è qualcosa che può essere aggiunto ad essa, quindi il collegamento dinamico è consentito solo quando la licenza include questa eccezione?



2
@delnan lgpl! = gpl
Johann,

Risposte:


16

Per quanto riguarda la domanda specifica relativa alle lingue interpretate, le domande frequenti su GPL sono molto chiare :

Il programma interpretato, per l'interprete, sono solo dati; una licenza di software libero come la GPL, basata sulla legge sul copyright, non può limitare i dati su cui si utilizza l'interprete. Puoi eseguirlo su qualsiasi dato (programma interpretato), come preferisci, e non ci sono requisiti per la licenza di tali dati a chiunque.

Per quanto riguarda la domanda generica sul collegamento dinamico vs statico. Prima di tutto, l'opinione di FSF e Stallman è che non importa se il collegamento è statico o dinamico, GPL infetta in entrambi i modi. Dalle domande frequenti su GPL di FSF:

Se il programma collega dinamicamente i plug-in e si scambiano chiamate funzionali e condividono strutture di dati, riteniamo che formino un singolo programma, che deve essere trattato come un'estensione sia del programma principale che dei plug-in. Ciò significa che la combinazione del plug-in coperto da GPL con il programma principale non libero violerebbe la GPL.

e

Il collegamento [nome del programma] staticamente o dinamicamente con altri moduli sta facendo un lavoro combinato basato sul [nome del programma]. Pertanto, i termini e le condizioni della GNU General Public License coprono l'intera combinazione

Tuttavia, questo è discutibile dal punto di vista legale. Nell'unico caso che in realtà è andato in tribunale per quanto riguarda il collegamento dinamico - Galoob v. Nintendo - la Corte d'appello ha stabilito che l'opera derivata "deve incorporare una parte dell'opera protetta da copyright in una forma" . Questo non è il caso del collegamento dinamico.

Ad ogni modo, indipendentemente dal fatto che il collegamento dinamico effettivamente infetti o meno, c'è un modo per aggirare. È usato ad esempio da Nvidia per fornire driver binari per Linux. Si crea il wrapper (L) GPL, ma come autore è consentito aggiungere un'eccezione speciale per il collegamento con specifici sorgenti chiuse. Domande frequenti su Vide FSF GPL .


Una delle caratteristiche di un'opera derivata è che non è possibile separare in modo chiaro l'opera del detentore del copyright originale. Se Bob Foo()è staticamente collegato per chiamare Joe Bar(), a quale detentore del copyright dovrebbero CALLessere attribuite le istruzioni tra di loro? Tale interazione sarebbe sufficiente per costituire un "lavoro derivato". Se, tuttavia, il lavoro di Joe rimane interamente all'interno di un file e quello di Bob rimane completamente all'interno di un altro, la semplice comparsa di quei file in diverse directory sullo stesso disco costituisce aggregazione, non derivazione.
supercat,

2
@thepaul: esiste già una precedenza legale che afferma che almeno una parte dell'opera protetta da copyright deve essere inclusa in un'opera per costituire un'opera derivata. Le credenze di Stallman spesso hanno pochissime basi nella vera legge reale.
vartec,

1
@thepaul: da un lato hai una pratica legale utilizzata da una compagnia da 9 miliardi di dollari, dall'altro rivendicazioni da parte di un ragazzo a cui piace indossare il cappello di stagnola. Sostieni che il secondo è più affidabile e hai pienamente diritto a crederlo.
Vartec,

1
Citi che la parte sbagliata delle FAQ di GPL è molto chiara . La parte che citi riguarda Se un interprete del linguaggio di programmazione è rilasciato sotto GPL, significa che i programmi scritti per essere interpretati da esso devono essere coperti da licenze compatibili GPL? ! Da qui l' interprete [con licenza GPL] . La parte rilevante sono gli ultimi 2 paragrafi: [...] Un altro caso simile e molto comune è quello di fornire alle biblioteche l'interprete che sono esse stesse interpretate. Ad esempio, Perl viene fornito con molti moduli Perl [...]
Chris Wesseling

1
«Il programma interpretato, per l'interprete, sono solo dati; una licenza di software libero come la GPL, basata sulla legge sul copyright, non può limitare i dati su cui si utilizza l'interprete. Puoi eseguirlo su qualsiasi dato (programma interpretato), come preferisci, e non ci sono requisiti per concedere in licenza quei dati a chiunque. »Si tratta di eseguire programmi in qualsiasi licenza anche di un interprete GPL, giusto? Che non copre l'argomento dell'uso di un plugin non libre in un programma GPL in un linguaggio interpretato.
tuxayo,

4

Nota: questa è una domanda legale. Programmers.SE non è un forum legale, è un forum di programmazione. Mentre le persone qui sanno un bel po 'di programmazione, non sanno nulla della legge. Se vuoi fare una domanda legale, dovresti farlo in un forum legale, dove ci sono persone che sanno effettivamente qualcosa sull'argomento.


La GPL non dice nulla sul collegamento statico o dinamico. Non ha nemmeno dire nulla sul collegamento a tutti . Ogni avvocato o giudice con cui ho parlato afferma che la questione del collegamento statico e dinamico è completamente irrilevante.

Il copyright riguarda la creatività. Il collegamento statico vs. dinamico è un dettaglio di implementazione tecnica. Se qualcosa è staticamente o dinamicamente collegato non è un atto creativo, non può assolutamente cambiare lo stato del copyright di un'opera.

Nella tua domanda, parli di "lingue interpretate". Ma quel termine non ha senso: non esiste un linguaggio interpretato. Una lingua è un insieme astratto di regole e restrizioni matematiche. Una lingua non è interpretata o compilata. Una lingua è solo . Il termine "linguaggio interpretato" non è solo sbagliato , ma non è sensato . Se l'inglese fosse una lingua tipizzata, sarebbe un errore di tipo.

L'interpretazione e la compilazione sono tratti dell'interprete o del compilatore (duh!), Non della lingua. Ogni lingua può essere implementata con un interprete e ogni lingua può essere implementata con un compilatore. La maggior parte delle lingue ha entrambe. L'implementazione del linguaggio più moderno combina persino entrambi in un singolo motore di esecuzione.

L'implementazione di Rubinius Ruby, ad esempio, contiene un compilatore statico anticipato che compila il codice Ruby in codice byte Rubinius, un interprete che interpreta il codice byte Rubinius e un compilatore dinamico just-in-time che compila il codice byte Rubinius in LLVM IR, che l'infrastruttura LLVM a sua volta compila in codice macchina nativo. L'implementazione Ruby di MacRuby non contiene affatto un interprete, compila il codice Ruby direttamente in IR LLVM, quindi successivamente nel codice macchina nativo.

D'altra parte, ci sono interpreti per C o C ++.

Tutto questo è solo dettagli tecnici. È completamente irrilevante per il copyright.

Non ha senso che la violazione o meno del copyright di qualcun altro dipende dal fatto che una terza persona scelga di eseguire il programma con un interprete o compilarlo per primo.

La domanda è se un'opera sia derivata o meno da un'altra opera. Può essere collegato dinamicamente e comunque essere derivato, e può essere staticamente collegato e non derivato affatto.


Che dire delle lingue "codice intermedio" interpretate? Uno dei principi alla base della GPL è che chiunque dovrebbe essere in grado di adattare il programma a qualsiasi macchina ragionevole che abbia gli stessi strumenti linguistici disponibili come l'originale. Se qualcuno rilascia il codice sorgente per un interprete di codice intermedio, insieme a un gruppo di codice di forma intermedia che può essere eseguito, quali sarebbero le regole per il rilascio di informazioni relative a quel BLOB di codice intermedio? A differenza dei file eseguibili compilati, che sono specifici della macchina, il BLOB di codice intermedio sarebbe completamente portabile.
supercat,

Scusa; Stavo per chiedere su stackoverflow.com, e mi ha suggerito di chiedere qui invece quando ho usato il tag "gpl"! Questo tipo di discussione è vietato anche qui? exec ("killall -9 avvocato"); : D
ekolis,

E sì, sono d'accordo sul fatto che non ha senso che un dettaglio di implementazione non abbia alcun effetto sullo stato giuridico del riutilizzo; Pensavo solo che ci fosse una tale distinzione e chiedevo chiarimenti!
ekolis,

2
@ekolis: non è vietato, di per sé. E 'solo che non è una buona idea di porre domande legali di persone che non sanno nulla di questioni legali (come i programmatori, per esempio), quando ci sono persone che non conoscono le questioni legali (aka avvocati) che si può chiedere, invece. Non ho nulla contro gli avvocati, al contrario. Ma non chiederei una consulenza sugli algoritmi, né chiederei a un programmatore una consulenza legale.
Jörg W Mittag,

IANAL: può essere un dettaglio tecnico, ma fa ancora una grande differenza, perché cambia ciò che viene distribuito in modo giuridicamente significativo. Con il collegamento statico, stai creando un'opera combinata che, secondo le regole della GPL, non può essere distribuita all'esterno della GPL. Con il collegamento dinamico, potresti farlo anche tu, ad esempio se impacchi le librerie con il tuo software in un file ZIP. Ma con il collegamento dinamico, puoi distribuirlo senza le librerie ed è al 100% il tuo lavoro, anche se non funziona da solo. E puoi ancora, ovviamente, offrire le biblioteche sotto GPL.
flarn2006,

0

Non ho idea di quanta verità ci sia in questo, e IANAL, ecc .; ma nella mia interpretazione, ciò che è importante è se la libreria a cui ci si collega è in qualche modo inclusa nel "binario" (dove "binario", nel caso dei linguaggi di programmazione dinamici, è solo il codice sorgente come distribuito; questo è quello che faccio della definizione di "binario" di FSF in questo contesto).

Pertanto, se fai riferimento alle librerie del tuo codice senza includerle nella tua distribuzione, considererei questo l'equivalente del "collegamento dinamico", mentre se raggruppi le librerie con il tuo prodotto o copi le parti della libreria nel tuo codice, si applicherebbe lo scenario "collegamento statico". Questo, almeno, è nello spirito della GPL: puoi usare liberamente (eseguire, ispezionare, consultare) il software GPL senza restrizioni, ma non appena ne deriva (collegando o copiando parti di esso nel tuo proprio prodotto distribuibile), diventa virale e anche il tuo software deve essere GPL.

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.