Cosa significa in pratica "GPL con eccezione del percorso di classe"?


70

Oracle sembra concedere in licenza tutto il loro codice open source relativo a Java sotto GPL con un'eccezione classpath . Da quanto ho capito, questo sembra consentire di combinare queste librerie con il proprio codice in prodotti che non devono essere coperti dalla GPL.

  1. Come funziona?
  2. Quali sono esempi di come posso e non posso usare queste classi?
  3. Perché questa nuova licenza è stata utilizzata in contrapposizione alla LGPL, che sembra consentire praticamente le stesse cose, ma è meglio stabilita e compresa?
  4. Quali sono le differenze con la LGPL?

1
Ho trovato questo su Wikipedia: en.wikipedia.org/wiki/… che chiarisce un po 'le cose, ma ancora non capisco perché qualcuno dovrebbe usarlo su LGPL. Buona domanda!

1
Che le pagine di Wikipedia non menzionino cose come "l'utente deve essere in grado di sostituire la libreria con la propria versione" che sono disposizioni della LGPL. Quindi forse l'eccezione GPL + non lo richiede?
Thilo,

1
Continuando a leggere, questo sembra essere il caso: "LGPL formula ulteriori requisiti per l'eccezione di collegamento: è necessario consentire la modifica delle parti della libreria utilizzate e il reverse engineering (del programma e della libreria) per il debug di tali modifiche"
Thilo,

In questo caso, cosa non posso fare con questa licenza? Posso copiare il codice concesso in licenza (scegli + scegli le classi) nel mio codebase (ovviamente non modificato)? Posso usare strumenti di compilazione automatizzati per modificare il file binario risultante? Obfuscator, minimizer, stripper dead-code?
Thilo,

Puoi copiare il codice da questo e usarlo nel tuo codice SOLO se il tuo codice viene rilasciato anche sotto la licenza "GPL con eccezione percorso di classe" . Se il tuo codice è proprietario o in base alla maggior parte delle altre licenze open source come MIT, non ti è consentito utilizzarlo.
Abhi Beckert,

Risposte:


69

Prima di tutto, non sono un avvocato. Ma ho studiato molte licenze e ho compreso i problemi che le riguardano.

In secondo luogo, so che questa è una vecchia domanda, ma penso che sia ancora un punto di confusione e preoccupazione. Se NON è un punto di preoccupazione, dovrebbe esserlo. La scelta di una licenza è un grosso problema che non è possibile cambiare banalmente lungo la strada, soprattutto se sono coinvolti più collaboratori.

(L) GPL è stato scritto pensando a C / C ++, sfortunatamente. Parla di "Codice sorgente", "Codice oggetto", "Collegamento dinamico", "Collegamento statico", "Compilatori" e "Interprete codice oggetto". Quindi tradurre questo per altri linguaggi che non seguono le stesse tecniche di compilazione (come il bytecode di Java, la compilazione just in time di Python o la natura interpretata di Javascript) richiede alcune ipotesi e ipotesi. Quando parli della legge - cioè pensando a eventuali casi giudiziari in cui due parti stanno discutendo - non avere una chiara distinzione è una COSA MALE.

Un codice standard con licenza GPL è piuttosto semplice nelle intenzioni. Chiunque utilizzi quel codice dovrebbe rilasciare il proprio codice a tutti gli utenti quando lo distribuiscono o lo vendono. Questo è il virus GPL che Richard Stallman voleva creare e ha fatto in modo chiaro e pulito.

La LGPL era originariamente un tentativo di consentire una "biblioteca" che non sarebbe virale. Volevano comunque che l'utente finale fosse in grado di sostituire la libreria da solo, da qui la distinzione tra collegamenti "statici" e "dinamici": l'utente poteva passare a una diversa libreria collegata dinamicamente, quindi non avrebbe bisogno di essere concesso in licenza come GPL. E un collegamento statico richiedeva che l'utente fosse GPL. La licenza in realtà parla di "file header", che sono chiari in C / C ++ ma ovviamente non chiari quando ci si trova nei mondi Java, Python, Javascript, ecc. Quindi la L ("libreria") di roba LGPL è fangosa, nella migliore delle ipotesi.

Questo arriva al nocciolo della questione. Tutto ciò che non è chiaro è CATTIVO nel mondo delle leggi. Se sto cercando di costruire qualcosa usando il componente GPL o LGPL, voglio essere sicuro di quale sia la mia posizione legale in futuro se atterrerò in tribunale. Ma ad oggi, non sono sicuro perché in realtà non ci sono stati buoni casi giudiziari che stabiliscono un precedente legale, solo argomenti intellettuali su forum come questo.

Qui è dove l'eccezione del percorso di classe è preziosa. Indica chiaramente che il codice sotto la licenza è (L) GPL, ma qualsiasi cosa utilizzi quel codice può seguire qualunque licenza desideri. Nessun se, e, o ma. Se si modifica il codice principale (ad es. Correzione di bug), è comunque necessario rilasciare tali modifiche come parte della GPL. Ma l'utilizzo NON ti infetta.

Dal punto di vista aziendale, capisco perché alcuni non vogliono toccare il codice GPL con un polo da 10 '. La posizione legale non è chiara e il business potrebbe essere bloccato per un decennio lungo la strada quando verrà finalmente stabilito il precedente legale. Oppure potrebbero rimanere bloccati in tribunale per anni a lottare per stabilire il precedente legale. Indipendentemente da ciò, non vogliono rischiare il costo di quella battaglia. L'aggiunta della clausola di eccezione del percorso di classe elimina le questioni legali ed evita qualsiasi (grave) potenziale causa giudiziaria.

Quindi, per me, l'eccezione Classpath è molto diversa da LGPL. È un modo legalmente pulito per tracciare una linea luminosa che consente l'uso non GPL del codice sorgente o delle librerie GPL o LGPL.


21
IANAL, ma sono uno dei creatori dell'eccezione Classpath e questa è la risposta giusta. L'eccezione è stata creata per supportare i casi d'uso compilati AOT compilati in cui gli sviluppatori collegherebbero staticamente binari (con gcj nel nostro caso). Avevamo bisogno di qualcosa come la licenza libgcc, quindi ho scritto la prima versione dell'eccezione Classpath basata su quella. Da allora è maturato, ma lo spirito è lo stesso.
Anthony Green,

6

GPL con eccezione classpath si comporta come LGPL per la maggior parte degli usi.

Significa che devi essere in grado di spedire la fonte per la biblioteca su richiesta. Ciò non significa che devi essere in grado di spedire la tua fonte. Succede che non è necessario fornire un modo per sostituire la libreria se ci si collega staticamente contro di essa, ma non è possibile utilizzare una chiave pubblica per impedire la sostituzione.


-3

Sembra che le licenze di stile "GPL con eccezione del classpath" potrebbero essere più vecchie di LGPL.

Forse l'unica ragione per cui qualcuno lo utilizza ancora, è perché il codice GPL non può essere migrato al codice LGPL senza il permesso scritto di chiunque abbia mai contribuito al codice.


7
La prima versione di LGPL è stata rilasciata nel 1991, quindi precedente a Java. en.wikipedia.org/wiki/LGPL
Thilo,

Precede java, ma precede tutto il codice all'interno di Java? Forse la prima versione di Java conteneva il codice di un vecchio progetto "GPL con classpath".
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.