⑂ Open source

LGPL e MPL: come funziona il copyleft debole nelle librerie

LGPL e MPL 2.0 permettono di usare librerie libere in software proprietario a certe condizioni: linking, singoli file, obblighi e casi pratici.

Tra le licenze permissive, che lasciano fare quasi tutto, e la GPL, che estende il copyleft all'intero programma derivato, esiste una via di mezzo: il copyleft debole. L'idea è semplice. La libreria resta libera, e chi la migliora deve condividere i miglioramenti; ma il programma che la usa può avere una licenza diversa, anche proprietaria. Le due licenze più usate di questo tipo sono la GNU Lesser General Public License (LGPL) e la Mozilla Public License 2.0 (MPL). Raggiungono lo stesso obiettivo con meccanismi molto diversi.

LGPL: il confine è la libreria

La LGPL ragiona in termini di libreria e di applicazione che la usa. Le modifiche alla libreria devono restare sotto LGPL. L'applicazione che si collega alla libreria, invece, può avere qualsiasi licenza, a patto di rispettare alcune condizioni.

Collegamento dinamico e statico

La distinzione pratica più importante riguarda il modo in cui la libreria viene unita al programma.

  • Collegamento dinamico: la libreria è un file separato (una .so su Linux, una .dll su Windows) caricato all'avvio. È lo scenario più semplice: l'utente può sostituire la libreria con una versione modificata senza toccare l'applicazione.
  • Collegamento statico: la libreria viene incorporata nell'eseguibile. È ammesso, ma chi distribuisce deve permettere all'utente di ricollegare l'applicazione con una versione modificata della libreria, ad esempio fornendo i file oggetto dell'applicazione.

Il principio di fondo è che l'utente deve poter sostituire la parte LGPL con una propria versione. Per lo stesso motivo la LGPLv3 richiede di non vietare, nei termini d'uso, il reverse engineering necessario a fare il debug di tali modifiche.

Cosa va consegnato

Chi distribuisce un'applicazione che usa una libreria LGPL deve, in sintesi:

  1. segnalare che la libreria è usata e che è coperta dalla LGPL;
  2. fornire il testo della licenza;
  3. rendere disponibile il sorgente della libreria, comprese eventuali modifiche;
  4. consentire la sostituzione della libreria come descritto sopra.

MPL 2.0: il confine è il file

La MPL 2.0, pubblicata nel 2012, adotta un criterio diverso e molto concreto: il copyleft si applica file per file. Se modifichi un file rilasciato sotto MPL, quel file modificato resta sotto MPL e il suo sorgente va reso disponibile quando distribuisci. I file nuovi che scrivi tu, anche se compilati insieme agli altri nello stesso eseguibile, possono avere la licenza che preferisci.

Questo rende la MPL facile da applicare: per sapere cosa va pubblicato basta guardare quali file con intestazione MPL sono stati toccati. Non serve stabilire se un componente sia «collegato» o «derivato».

Compatibilità con la GPL

La MPL 2.0 contiene una clausola sulle «licenze secondarie»: salvo che l'autore abbia marcato il codice come «Incompatible With Secondary Licenses», il codice MPL può essere combinato in un'opera più ampia distribuita sotto GPL, LGPL o AGPL. È stato uno dei cambiamenti più importanti rispetto alla versione precedente.

Confronto rapido

Aspetto LGPL MPL 2.0
Unità del copyleft la libreria il singolo file
Software proprietario che la usa ammesso ammesso
Collegamento statico ammesso, con possibilità di ricollegare nessun requisito specifico
Modifiche alla parte libera sotto LGPL, sorgente disponibile sotto MPL, sorgente dei file disponibile
Compatibilità con GPL sì sì, salvo marcatura contraria
Concessione brevetti nella v3, tramite GPLv3 sì, esplicita

Quando usarle

La LGPL è adatta a librerie che si vogliono rendere utilizzabili da qualsiasi programma, mantenendo però libera la libreria stessa. È stata scelta da molte librerie di sistema e multimediali proprio per permettere il loro uso diffuso.

La MPL è adatta a progetti in cui l'azienda vuole permettere estensioni proprietarie, ma desidera che le correzioni al nucleo tornino pubbliche. È anche comoda nei progetti che mescolano molti linguaggi o sistemi di build, dove il concetto di «collegamento» è sfumato.

Esempio pratico

Un'azienda sviluppa un programma di fotoritocco proprietario e usa una libreria di decodifica immagini.

  • Se la libreria è LGPL e viene distribuita come file dinamico separato, l'azienda include licenza e sorgente della libreria, e il programma resta chiuso. Se corregge un bug nella libreria, pubblica la correzione.
  • Se la libreria è MPL e l'azienda modifica due file del decoder, pubblica quei due file modificati. Il resto del programma, compresi i nuovi file che chiamano il decoder, resta proprietario.

Nel mio lavoro, quando analizzo le dipendenze di un prodotto, le licenze di copyleft debole sono quelle che generano più domande: non sono difficili, ma richiedono di sapere esattamente come il componente viene compilato e distribuito.

In sintesi

  • Il copyleft debole mantiene libera la componente, ma permette di usarla in software con altre licenze.
  • La LGPL traccia il confine sulla libreria e richiede che l'utente possa sostituirla.
  • La MPL 2.0 traccia il confine sul singolo file: si pubblicano solo i file MPL modificati.
  • Entrambe sono compatibili con la GPL; per la MPL vale salvo marcatura contraria.
  • Per applicarle bene bisogna conoscere il modo di collegamento e distribuzione del componente.
MM
Marco Marzaduri

Marco Marzaduri si occupa di cybersecurity, informatica forense e sviluppo web. Laureato in informatica, unisce il rigore dell'analisi tecnica all'attenzione per le persone che usano la tecnologia.

Leggi anche