Come si applica la regola di collegamento dinamico statico a quella GPL alle lingue interpretate?

17

A mio avviso, la GPL proibisce il collegamento statico da codice non GPL a codice GPL, ma consente il collegamento dinamico da codice non GPL a codice GPL. Quindi, che è quando il codice in questione non è affatto collegato perché il codice è scritto in un linguaggio interpretato (ad esempio Perl)?

Sembrerebbe troppo facile sfruttare la regola se fosse considerato un collegamento dinamico, ma d'altra parte, sembrerebbe anche impossibile legare legalmente il codice GPL dal codice non GPL se fosse considerato statico! Le lingue compilate hanno almeno una distinzione tra collegamento statico e dinamico, ma quando tutti i "linking" sono solo script in esecuzione, è impossibile dire quale sia l'intenzione senza una licenza esplicita!

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

    
posta ekolis 06.10.2012 - 19:27
fonte

3 risposte

15

Per quanto riguarda la domanda specifica riguardante le lingue interpretate, Domande frequenti sulla GPL è molto chiaro :

The interpreted program, to the interpreter, is just data; a free software license like the GPL, based on copyright law, cannot limit what data you use the interpreter on. You can run it on any data (interpreted program), any way you like, and there are no requirements about licensing that data to anyone.

Come per la domanda generica sul collegamento dinamico vs statico. Prima di tutto, la visione di FSF e Stallman è che non importa se il collegamento è statico o dinamico, GPL infetta in entrambi i modi. Domande frequenti sulla GPL della FSF:

If the program dynamically links plug-ins, and they make function calls to each other and share data structures, we believe they form a single program, which must be treated as an extension of both the main program and the plug-ins. This means that combination of the GPL-covered plug-in with the non-free main program would violate the GPL.

e

Linking [name of your program] statically or dynamically with other modules is making a combined work based on [name of your program]. Thus, the terms and conditions of the GNU General Public License cover the whole combination

Tuttavia, questo è discutibile dal punto di vista legale. Nel solo caso in cui è stato presentato un ricorso in merito al collegamento dinamico - Galoob v. Nintendo - la Corte d'Appello ha stabilito che il derivato lavoro "deve incorporare una parte dell'opera protetta da copyright in qualche forma" . Quale non è il caso con il collegamento dinamico.

Ad ogni modo, indipendentemente dal fatto che il collegamento dinamico sia effettivamente infetto o meno, c'è un problema. Viene utilizzato ad esempio da Nvidia per fornire driver binari per Linux. Si crea un wrapper GPL (L), ma come autore è possibile aggiungere un'eccezione speciale per il collegamento con specifiche closed-source. Vide Domande frequenti sulla GPL della FSF .

    
risposta data 06.10.2012 - 20:03
fonte
2

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 chiederlo in un forum legale, dove ci sono persone che in realtà sanno qualcosa sull'argomento.

La GPL non dice nulla sul collegamento statico o dinamico. Non dice nulla sul collegamento di a tutti . Ogni avvocato o giudice con cui ho parlato afferma che il problema del collegamento statico e dinamico è completamente irrilevante.

Il copyright riguarda la creatività. Il collegamento statico e dinamico è un dettaglio di implementazione tecnica. Indipendentemente dal fatto che un collegamento statico o dinamico non sia un atto creativo, non è possibile modificare lo stato del copyright di un lavoro.

Nella tua domanda parli di "lingue interpretate". Ma questo termine non ha senso: non esiste una lingua interpretata. Una lingua è un insieme astratto di regole e restrizioni matematiche. Una lingua non è interpretata o compilata. Una lingua è . Il termine "linguaggio interpretato" non è solo sbagliato , è 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 entrambi. La maggior parte delle implementazioni linguistiche moderne combinano entrambe in un unico motore di esecuzione.

L'implementazione Rubinius Ruby, ad esempio, contiene un compilatore statico in anticipo 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 byte Rubinius codice a LLVM IR, che a sua volta l'infrastruttura LLVM compila al codice macchina nativo. L'implementazione MacRuby Ruby non contiene affatto un interprete, compila il codice Ruby direttamente su LLVM IR, quindi sul codice macchina nativo.

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

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

Semplicemente non ha senso che qualcuno possa violare o meno il copyright di qualcun altro a seconda che qualcuno scelga o meno di eseguire il programma con un interprete o di compilarlo per primo.

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

    
risposta data 06.10.2012 - 19:53
fonte
0

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

Quindi, se fai riferimento alle librerie dal tuo codice senza includerle nella tua distribuzione, considererei questo equivalente al "collegamento dinamico", mentre se impacchetti le librerie con il tuo prodotto, o copia-incolla le parti della libreria nel tuo proprio codice, si applicherebbe lo scenario "collegamento statico". Questo, almeno, è nello spirito della GPL: puoi usare (eseguire, ispezionare, referenziare) liberamente il software GPL senza restrizioni, ma non appena ottieni em> da esso (collegando o copiando parti di esso nel tuo prodotto distribuibile), diventa virale e il tuo software deve essere anche GPL.

    
risposta data 06.10.2012 - 19:37
fonte

Leggi altre domande sui tag