⑂ Open source

CLA e DCO: cosa firmi quando contribuisci a un progetto

Contributor License Agreement, cessione dei diritti e Developer Certificate of Origin: differenze, implicazioni per chi contribuisce e per chi gestisce.

Quando proponi una modifica a un progetto open source, prima o poi ti viene chiesto di accettare qualcosa: firmare un modulo elettronico, aggiungere una riga ai commit, confermare una dichiarazione. Non è burocrazia fine a se stessa. Ogni contributo è un'opera protetta dal diritto d'autore, e il progetto ha bisogno di sapere con certezza che può distribuirla sotto la sua licenza. Gli strumenti più usati sono due, il CLA e il DCO, e hanno conseguenze molto diverse.

Il problema che risolvono

Se il progetto accetta il tuo codice senza alcuna dichiarazione, la sua posizione si basa su un'assunzione implicita: che tu abbia inviato il contributo sotto la stessa licenza del progetto (il principio spesso riassunto come «inbound = outbound») e che tu avessi il diritto di farlo. Nella maggior parte dei casi funziona. Ma i dubbi emergono in situazioni concrete:

  • il contributore era dipendente e il codice appartiene in realtà al suo datore di lavoro;
  • il codice è stato copiato da un altro progetto con licenza incompatibile;
  • il progetto vuole in futuro cambiare licenza o offrirne una commerciale.

CLA e DCO affrontano questi rischi in modi diversi.

Il Developer Certificate of Origin

Il DCO è una breve dichiarazione, nata nell'ambito del kernel Linux, con cui chi contribuisce certifica, tra l'altro, di aver scritto il codice o di avere il diritto di inviarlo sotto la licenza indicata, e di essere consapevole che il contributo e la firma resteranno pubblici.

In pratica si esprime con una riga in fondo al messaggio di commit:

Correggi il calcolo dei giorni lavorativi a cavallo d'anno

Signed-off-by: Mario Rossi <mario.rossi@example.org>

Git la aggiunge automaticamente con l'opzione -s:

git commit -s -m "Correggi il calcolo dei giorni lavorativi"

Caratteristiche del DCO:

  • nessun trasferimento di diritti: il copyright resta a te, il contributo entra con la licenza del progetto;
  • nessun modulo da firmare: basta la riga nel commit, verificabile automaticamente;
  • simmetria: progetto e contributori sono sullo stesso piano, nessuno può ricollocare il codice sotto altre licenze senza il consenso di tutti gli autori.

Il Contributor License Agreement

Il CLA è un contratto vero e proprio tra contributore e un soggetto, di solito l'azienda o la fondazione che gestisce il progetto. Esistono due varianti principali:

  • licenza ampia: tu mantieni il copyright ma concedi al soggetto una licenza molto estesa, spesso comprensiva di brevetti, irrevocabile e con facoltà di sublicenziare;
  • cessione del copyright: trasferisci la titolarità del codice al soggetto, che ne diventa proprietario.

Spesso esistono due moduli: uno individuale e uno aziendale, da firmare quando contribuisci come dipendente per conto dell'azienda.

Cosa permette al gestore:

  • difendere il codice in giudizio con una titolarità chiara;
  • cambiare licenza in futuro senza dover rintracciare ogni contributore;
  • offrire lo stesso codice con licenze commerciali, il cosiddetto dual licensing.

È proprio quest'ultimo punto a generare diffidenza: un CLA che consente di sublicenziare senza limiti dà al gestore la possibilità di rendere proprietario il lavoro di tutti.

Confronto diretto

Aspetto DCO CLA con licenza CLA con cessione
Chi resta titolare Il contributore Il contributore Il gestore
Modulo da firmare No Sì Sì
Il gestore può cambiare licenza da solo No Spesso sì Sì
Attrito per chi contribuisce Basso Medio Alto
Revisione legale per le aziende Raramente Spesso Quasi sempre

Cosa controllare prima di firmare un CLA

Leggere un CLA richiede pochi minuti e conviene farlo. Le domande utili:

  1. Concedi una licenza o cedi i diritti? La differenza è sostanziale.
  2. Il gestore si impegna a distribuire sempre il codice con una licenza open source? Alcuni CLA lo prevedono esplicitamente e limitano così il rischio.
  3. Sono inclusi i brevetti? Se lavori per un'azienda, potresti concedere diritti che non sono tuoi.
  4. Puoi firmare? Molti contratti di lavoro attribuiscono al datore il codice scritto anche fuori orario. In quel caso serve il CLA aziendale o un'autorizzazione.

Quale scegliere se gestisci un progetto

Se il progetto è comunitario e non prevedi modelli di licenza commerciale, il DCO è quasi sempre sufficiente: protegge dai contributi di provenienza dubbia senza scoraggiare nessuno. Un controllo automatico nella pipeline può rifiutare le pull request senza Signed-off-by.

Un CLA ha senso quando c'è un motivo concreto: una strategia di doppia licenza, la necessità di una titolarità unica per tutelare il progetto, o requisiti di una fondazione. In quel caso conviene scegliere un testo noto e pubblicamente discusso invece di scriverne uno da zero, e dichiarare con chiarezza nel CONTRIBUTING.md perché viene richiesto.

In sintesi

  • Ogni contributo è un'opera protetta: il progetto deve sapere che può distribuirla.
  • Il DCO è una dichiarazione nel commit, senza trasferimento di diritti.
  • Il CLA è un contratto che concede licenze ampie o cede il copyright al gestore.
  • Un CLA può permettere al gestore di cambiare licenza: leggilo prima di firmare.
  • Per la maggior parte dei progetti comunitari il DCO è la scelta più semplice ed equa.
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