⑂ Open source

Come scegliere la licenza per il tuo progetto open source

Una procedura in cinque domande per scegliere la licenza di un nuovo progetto: obiettivi, dipendenze, brevetti, servizi in rete e comunità attesa.

Pubblicare codice senza licenza è uno degli errori più comuni di chi apre il primo repository. In assenza di licenza il codice resta protetto dal diritto d'autore in modo pieno: chiunque può leggerlo, ma nessuno può legittimamente copiarlo, modificarlo o ridistribuirlo. Il risultato è un progetto che sembra aperto ma non lo è. Scegliere una licenza non richiede uno studio giuridico: basta rispondere con onestà ad alcune domande. Questa è la procedura che seguo quando aiuto qualcuno ad avviare un progetto.

Domanda 1: cosa voglio che succeda alle versioni modificate?

È la domanda decisiva, perché separa le licenze permissive da quelle copyleft.

  • Mi va bene che qualcuno lo includa in un prodotto chiuso. Allora una licenza permissiva è la scelta naturale: MIT, BSD o Apache 2.0.
  • Voglio che chi distribuisce versioni modificate le condivida. Allora serve un copyleft: GPL per i programmi, LGPL o MPL per le librerie.

Non c'è una risposta giusta in assoluto. Molte librerie di base sono permissive perché il loro valore sta nella diffusione; molte applicazioni complete sono GPL perché gli autori vogliono che restino libere.

Domanda 2: il software girerà soprattutto su server?

Se il progetto è un'applicazione web, un'API o un servizio, la GPL non ha quasi effetto: il software non viene distribuito agli utenti, quindi gli obblighi non scattano. Se si vuole un copyleft anche in questo scenario, la scelta coerente è l'AGPLv3. Va considerato che alcune aziende evitano l'AGPL per politica interna, e questo può ridurre l'adozione.

Domanda 3: ci sono brevetti in gioco?

Se al progetto contribuiranno aziende, o se il dominio tecnico è ricco di brevetti (codifica multimediale, crittografia, reti), conviene una licenza con una concessione esplicita dei brevetti:

  • tra le permissive, Apache 2.0;
  • tra le copyleft, GPLv3, LGPLv3, AGPLv3 o MPL 2.0.

La MIT e la BSD non parlano di brevetti in modo esplicito. Per un piccolo strumento personale non è un problema; per un progetto con contributori aziendali può esserlo.

Domanda 4: con cosa deve convivere il codice?

Le dipendenze vincolano la scelta. Se il progetto usa una libreria GPL in modo stretto, l'insieme distribuito sarà GPL comunque. Se il progetto vuole essere incluso in un ecosistema che usa una licenza specifica, adottare la stessa licenza riduce gli attriti. Qualche esempio:

  • un plugin per un'applicazione GPL tende naturalmente alla GPL;
  • una libreria per un ecosistema in cui prevale la doppia licenza MIT e Apache 2.0 trae vantaggio dall'adottarla;
  • un modulo per il kernel Linux deve essere compatibile con la GPLv2.

Domanda 5: che comunità mi aspetto?

La licenza manda un segnale. Una licenza permissiva attira contributi aziendali e uso commerciale. Una licenza copyleft rassicura chi teme che il proprio lavoro venga chiuso da altri. Pensare a chi si vuole coinvolgere aiuta a scegliere.

Una tabella riassuntiva

Situazione Licenza consigliata
Piccola utility, massima libertà MIT
Libreria con contributi aziendali Apache 2.0
Libreria che deve restare libera ma usabile ovunque LGPLv3 o MPL 2.0
Applicazione desktop che deve restare libera GPLv3
Applicazione web che deve restare libera AGPLv3
Documentazione CC BY 4.0 o CC BY-SA 4.0

Errori da evitare

  1. Scrivere una licenza propria. Una licenza inventata, anche se ben intenzionata, crea incertezza e scoraggia l'adozione. Le licenze consolidate sono state lette da molti giuristi e sono riconosciute dagli strumenti automatici.
  2. Modificare il testo di una licenza esistente. Aggiungere clausole come «non per uso militare» trasforma la licenza in qualcosa che non è più open source e la rende incompatibile con molte altre.
  3. Scegliere una licenza «non commerciale». Non è open source ed esclude molti utilizzi legittimi.
  4. Dimenticare i contributori. Se più persone hanno scritto codice, cambiare licenza in seguito richiede il loro consenso o un meccanismo previsto in anticipo.

Come applicarla concretamente

Una volta scelta la licenza:

  1. crea un file LICENSE nella radice del repository con il testo integrale e non modificato;
  2. compila correttamente anno e titolare del copyright dove richiesto;
  3. aggiungi in testa a ogni file sorgente un identificatore standard, ad esempio:
# SPDX-License-Identifier: MIT
  1. indica la licenza nel README e nei metadati del pacchetto (ad esempio package.json, pyproject.toml, Cargo.toml);
  2. se usi la Apache 2.0, valuta se creare un file NOTICE.

Cambiare idea in futuro

Passare da una licenza permissiva a una copyleft, o viceversa, è possibile ma non banale: servono i diritti su tutto il codice o il consenso dei contributori. Le versioni già pubblicate restano disponibili con la licenza originale. Per questo vale la pena dedicare mezz'ora alla scelta fin dal primo commit.

In sintesi

  • Senza licenza il codice non è riutilizzabile, anche se è pubblico.
  • La prima domanda è se le versioni modificate devono restare libere: permissivo o copyleft.
  • Per il software in rete serve l'AGPL; per i brevetti conviene Apache 2.0 o le licenze GPL versione 3.
  • Le dipendenze e l'ecosistema possono imporre la scelta.
  • Usa una licenza esistente senza modifiche e dichiarala con identificatori standard in ogni file.
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