Esiste una licenza LGPL modificata che consente il collegamento statico?


21

LGPL lo richiede se un programma utilizza una libreria LGPL, gli utenti devono essere in grado di ricollegare il programma con una versione diversa della libreria:

...

d) Effettuare una delle seguenti operazioni:

0) Trasmettere la fonte corrispondente minima ai sensi della presente Licenza e il codice dell'applicazione corrispondente in una forma adatta e in base a termini che consentono all'utente di ricombinare o ricollegare l'applicazione con una versione modificata della versione collegata per produrre un lavoro combinato modificato, nel modo specificato dalla sezione 6 della GNU GPL per il trasporto della fonte corrispondente.

1) Utilizzare un meccanismo di libreria condivisa adatto per il collegamento con la libreria. Un meccanismo adatto è quello che (a) utilizza in fase di esecuzione una copia della Libreria già presente sul sistema informatico dell'utente e (b) funzionerà correttamente con una versione modificata della Libreria compatibile con l'interfaccia con la Versione collegata.

...

Tuttavia, in alcuni casi, ciò può comportare notevoli difficoltà. In particolare, i programmi Haskell sono quasi sempre compilati staticamente. Inoltre, il compilatore esegue ottimizzazioni tra i moduli, quindi non è possibile estrarre una parte del codice e sostituirla con un'altra. Quindi è molto difficile soddisfare questa condizione. (Vedi questo link su Haskell Wiki.)

Il collegamento dinamico sarebbe una soluzione, ma in molti casi questo non è possibile. Per esempio:

  • Alcune piattaforme potrebbero non avere alcun collegamento dinamico.
  • Alcune lingue non hanno la possibilità di collegamento dinamico. In alternativa, non è possibile creare moduli multipiattaforma.
  • In alcuni casi il collegamento dinamico impedirebbe importanti ottimizzazioni. Mentre direi che questo raramente è un problema serio, in lingue come Haskell la perdita di prestazioni potrebbe essere considerevole.

Pertanto, sto cercando una licenza standard simile a LGPL che non richiederebbe la possibilità di ricollegamento (e capisco che ciò rimuove un po 'di libertà data agli utenti). Alcuni progetti utilizzano la propria modifica di LGPL, ad esempio wxWidgets . Ma preferirei usare una licenza standard che è in qualche modo più ufficiale, forse controllata da alcuni esperti di legge e (L) compatibile con GPL. C'è qualcuno del genere?

(Inoltre sarei interessato a sapere se ci sono alcune conseguenze impreviste di una tale modifica di LGPL.)


Non è possibile collegare dinamicamente le librerie esterne in Haskell? Deve essere dannatamente scomodo.
Robert Harvey,

2
Se l'intero progetto è FOSS, potrebbe trattarsi di un problema. Li puntare alle fonti e far loro risolvere il problema! :-)
Peter Rowell,

2
Cosa distinguerebbe quella licenza dalle licenze non copyleft?

2
@delnan Ci sono molte altre cose in LGPL che sono spesso desiderabili. Ad esempio, richiede che qualsiasi modifica sia (L) GPL o proibisce la tivoizzazione .
Petr Pudlák,

La licenza di wxWindows è quasi ufficiale, dato che è stata approvata dall'OSI .
Joachim Sauer,

Risposte:



12

wxwidgets è concesso in licenza in sostanza = LGPL + collegamento statico

... essenzialmente L-GPL (Library General Public License), con un'eccezione che afferma che le opere derivate in forma binaria possono essere distribuite alle condizioni dell'utente. Questa è una soluzione che soddisfa coloro che desiderano produrre software GPL utilizzando wxWidgets e anche quelli che producono software proprietario.

wxWidgets è Partecipante al software certificato Open Source nella discussione che ha portato a questa decisione, tra cui il popolo di Abisource , Robert Roebling, Julian Smart, Markus Fleck, Karsten Ballueder e alcuni consigli di Richard Stallman. Richard ha confermato che la nuova licenza è compatibile con le applicazioni GPL. Tuttavia, non esistono restrizioni significative per le applicazioni proprietarie.

La licenza di wxWindows è stata approvata dall'Iniziativa Open Source e puoi trovare la licenza sul loro sito qui ...


0mq è anche concesso in licenza sotto LGPL con un'eccezione esplicita al collegamento statico.
Trevor Powell,

4

IANAL, ma sono stato indotto a credere che una soluzione sia quella di fornire file oggetto per parti non LGPL. In questo modo l'utente può ricollegare il programma ed è quindi libero di modificare la parte LGPL, soddisfacendo i requisiti di LGPL.

In altre parole, è necessario disporre del pacchetto sorgente, con origini LGPL e file oggetto compilati con codice non LGPL. Ovviamente è quindi necessario fornire i file oggetto per ogni diversa architettura per cui si rilasciano i file binari, ma non credo che questo sia un grosso problema.

Dal punto di vista dello sviluppo, potrebbe essere più semplice far sì che il sistema di compilazione crei anche il pacchetto sorgente allo stesso tempo, quando si crea il binario per la distribuzione.


hai qualche scenario reale in cui questo è stato fatto?
Knocte,

3

Ne ho trovato uno con Google: licenza OpenScales

OpenScales è rilasciato sotto la versione 3 della GNU Lesser Public License (LGPL, disponibile qui ), con un'eccezione relativa all'eccezione di collegamento statico (vedi sotto) ...

Oltre al testo della licenza LGPL, l'eccezione alle condizioni LGPL si applica a OpenScales:

Come un'eccezione speciale alla GNU Lesser General Public License versione 3, è possibile trasmettere a terzi un file eseguibile da un'opera combinata che collega, staticamente o dinamicamente, parti di questa libreria nel file eseguibile, trasportando la fonte corrispondente minima ma senza la necessità di trasmettere il codice di applicazione corrispondente nella sezione 4d0 della GNU Lesser General Public License, a condizione che si stia utilizzando una versione non modificata della libreria distribuita pubblicamente. Questa eccezione non invalida nessun altro motivo per cui il file eseguibile potrebbe essere coperto dalla GNU Lesser General Public License o dalla GNU General Public License.

Non è standard però, e non so se ne esiste uno.


1

Come continueresti a garantire la libertà dell'utente? Credo che la risposta "corretta" sia quella di collegare staticamente uno spessore che carica dinamicamente la libreria.


Sì, questa è la soluzione migliore. Ma in alcuni casi, il collegamento dinamico non è possibile. Alcune lingue non hanno questa possibilità. O alcune piattaforme non hanno questa possibilità.
Petr Pudlák,

In realtà i linker fanno esattamente questo, quando si collega dinamicamente alla libreria.
Calmarius,
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.