Contesto

Il 29 giugno 2007 la Free Software Foundation ha pubblicato la GNU General Public License versione 3, sedici anni dopo la versione 2 del 1991. Il testo arriva al termine di circa diciotto mesi di consultazione pubblica e quattro bozze di discussione, con i commenti raccolti attraverso la piattaforma gplv3.fsf.org. Lo stesso giorno è uscita la GNU Lesser General Public License versione 3, riscritta come insieme di permessi aggiuntivi sopra la GPLv3 e non più come licenza a sé.

La GPLv2 ha retto bene finché il software libero circolava soprattutto come sorgente e binario su macchine generiche. Dopo il 1991 sono emerse tre pratiche che quel testo non riusciva più a fermare, e che minavano le libertà che voleva proteggere: i brevetti software usati come leva contrattuale, gli accordi di licenza brevettuale che discriminano tra destinatari, e l’hardware che accetta firmware libero ma rifiuta di eseguirne le versioni modificate. La versione 3 interviene su tutti e tre i fronti.

Anti-tivoization

La GPLv2 garantisce l’accesso al sorgente corrispondente di un binario distribuito. Su cosa il dispositivo faccia di un binario ricompilato, invece, tace. Alcuni produttori hanno sfruttato questo silenzio: distribuiscono il sorgente del firmware, come richiesto, ma il dispositivo controlla una firma crittografica all’avvio e si rifiuta di eseguire qualsiasi binario non firmato dal produttore. L’utente ha il sorgente, lo modifica, lo ricompila, e non riesce a far girare il risultato sul proprio apparecchio. Il termine tivoization viene dai videoregistratori digitali TiVo, che funzionavano esattamente così.

La GPLv3 affronta la pratica alla sezione 6, con il concetto di Installation Information. Per uno «User Product» — definizione presa dalla legge USA sulle garanzie al consumo, cioè un bene di consumo o un oggetto che si usa di norma per scopi personali o domestici — chi distribuisce un binario deve consegnare anche tutto ciò che serve a installare ed eseguire versioni modificate sullo stesso dispositivo, chiavi di firma comprese. Il requisito non vieta la firma del codice né il secure boot: vieta di usarli per togliere all’utente la possibilità di eseguire la propria versione. Restano fuori il software scritto in modo permanente in ROM e i casi in cui la modifica non è prevista per nessuno, produttore incluso.

Brevetti

La sezione 11 della GPLv3 mette nero su bianco ciò che nella v2 era affidato a discussioni sulla licenza implicita. Ogni contributore concede a chi riceve il software una licenza brevettuale non esclusiva, mondiale e gratuita su tutte le rivendicazioni di brevetto che controlla e che la sua versione del codice violerebbe. La concessione vale per uso, modifica e ridistribuzione. Così si chiude la strada a chi contribuisce codice e in seguito rivela la copertura brevettuale per chiedere royalty agli utenti.

La stessa sezione affronta un caso preciso emerso nel novembre 2006, l’accordo tra Microsoft e Novell, in cui un distributore otteneva da un terzo la promessa di non far valere i brevetti, ma solo verso i propri clienti. La GPLv3 stabilisce che chi distribuisce software libero appoggiandosi a un accordo simile, dal quale alcuni destinatari ricevono protezione brevettuale e altri no, estende quella stessa protezione a tutti i destinatari, in automatico. La clausola toglie ogni convenienza economica all’accordo discriminatorio per chi distribuisce sotto GPLv3.

Compatibilità con Apache 2.0

Sotto la GPLv2 non si poteva combinare in un’unica opera codice GPL e codice rilasciato sotto Apache License 2.0. La Apache 2.0 contiene clausole su brevetti e indennizzo che la GPLv2 leggeva come restrizioni aggiuntive, e la GPLv2 non tollera restrizioni oltre il proprio testo. L’incompatibilità andava in una sola direzione, ma era concreta e tagliava fuori una mole di codice sempre maggiore.

La GPLv3 scioglie il nodo ammettendo in modo esplicito alcune categorie di termini aggiuntivi, tra cui clausole di brevetto e indennizzo del tipo che porta con sé la Apache. Il codice Apache 2.0 si può quindi incorporare in un progetto GPLv3, mentre il percorso inverso resta chiuso dalla struttura della licenza permissiva. La compatibilità va in un senso solo, e tanto basta per quasi tutti gli usi pratici, dove il progetto che ne esce è già copyleft.

Il kernel Linux resta sulla v2

Linus Torvalds ha confermato che il kernel Linux rimane sotto GPLv2. Si era già schierato contro la migrazione a inizio 2006; il 12 giugno 2007, sulla Linux Kernel Mailing List, ha ripetuto di non voler passare alla v3 e ha indicato il requisito anti-tivoization come motivo principale del rifiuto. Per Torvalds la GPLv2 mette in piedi uno scambio simmetrico — ricevi il sorgente, restituisci le tue modifiche — mentre un vincolo sui dispositivi hardware va oltre quello scambio.

C’è anche un ostacolo strutturale. Il kernel è distribuito sotto GPLv2 senza la clausola «o qualsiasi versione successiva», quindi non eredita la v3 da sé. Cambiare licenza richiederebbe il consenso di migliaia di detentori del copyright sui singoli contributi, molti dei quali ormai irrintracciabili. Anche volendo, la migrazione sarebbe impraticabile.

Implicazioni e limiti

L’ecosistema si ritrova con due versioni del copyleft di riferimento in uso nello stesso momento. I progetti GNU adottano la v3; il kernel e le sue dipendenze strette restano sulla v2. La convivenza si gestisce a livello di sistema operativo, perché kernel e userspace sono opere distinte che dialogano tramite chiamate di sistema, non un’unica opera derivata. Il problema si fa sentire quando si vuole linkare in un solo binario codice solo-v2 e codice solo-v3: le due non sono compatibili tra loro, e l’unico ponte è la clausola «o successiva», quando un progetto la include.

Restano questioni aperte che il testo non chiude da solo. La definizione di «User Product» e la portata delle Installation Information le chiarirà la pratica e, prima o poi, qualche controversia. La compatibilità con Apache 2.0 vale per la combinazione di codice, ma la frammentazione delle licenze nei progetti reali — dipendenze sotto licenze diverse, file con intestazioni miste — chiede comunque un’analisi caso per caso che nessuna clausola elimina.


Immagine di copertina: Logo ufficiale della GNU GPL versione 3: la scritta “GPLv3” in rosso su sfondo bianco — logo di Free Software Foundation, pubblico dominio — https://commons.wikimedia.org/wiki/File:GPLv3_Logo.svg