La licenza Apache 2.0, pubblicata dalla Apache Software Foundation nel 2004, è una delle licenze permissive più usate nei progetti con forte presenza aziendale. Come la MIT o la BSD permette di usare, modificare e ridistribuire il codice anche in prodotti proprietari, ma è molto più lunga e precisa. Quella lunghezza non è burocrazia: serve a regolare aspetti che le licenze brevi lasciano nel vago, in particolare i brevetti e l'attribuzione.
Cosa permette
Chi riceve codice sotto Apache 2.0 può:
- usarlo per qualsiasi scopo, anche commerciale;
- modificarlo e creare opere derivate;
- ridistribuirlo in forma sorgente o compilata;
- includerlo in software con licenza diversa, anche chiusa.
Non c'è obbligo di pubblicare le proprie modifiche. In questo senso resta pienamente permissiva.
La concessione dei brevetti
Il punto che distingue di più la Apache 2.0 è la sezione 3. Ogni contributore concede a chi riceve il software una licenza sui propri brevetti, limitata alle rivendicazioni che il suo contributo viola necessariamente, da solo o in combinazione con l'opera a cui è stato aggiunto.
Perché è importante? Con una licenza come la MIT, il copyright è concesso esplicitamente, ma sui brevetti il testo tace. Un'azienda potrebbe, in teoria, contribuire codice a un progetto e poi far valere un brevetto contro chi lo usa. Con la Apache 2.0 questa possibilità è esclusa per quanto riguarda i brevetti coinvolti dal contributo.
La clausola di revoca
La stessa sezione contiene una difesa: se qualcuno avvia una causa sostenendo che il software, o un contributo, viola un suo brevetto, le licenze sui brevetti che ha ricevuto attraverso quel software cessano dalla data in cui la causa viene avviata. È un deterrente: chi attacca il progetto con i brevetti perde la protezione brevettuale che il progetto gli garantiva.
Gli obblighi quando si ridistribuisce
La sezione 4 elenca cosa fare quando si distribuisce il software o un'opera derivata:
- Fornire una copia della licenza ai destinatari.
- Segnalare le modifiche: i file modificati devono riportare un avviso evidente che sono stati cambiati.
- Conservare gli avvisi di copyright, brevetti, marchi e attribuzione presenti nel sorgente.
- Riportare il contenuto del file NOTICE, se il progetto originale ne ha uno.
Il file NOTICE
Il NOTICE è un file di testo con le attribuzioni che il progetto chiede di riportare. Chi distribuisce deve includerne il contenuto in almeno uno di questi posti: un file NOTICE nella distribuzione, la documentazione, oppure una schermata visualizzata dal software, se il prodotto ne prevede una per gli avvisi di terze parti. Si possono aggiungere proprie attribuzioni, ma non rimuovere quelle esistenti.
Un errore comune è copiare il file LICENSE e dimenticare il NOTICE. Un altro è riempire il NOTICE con il testo intero della licenza: non serve, il NOTICE contiene solo le note di attribuzione.
Marchi e garanzia
La Apache 2.0 chiarisce che non concede diritti sui marchi. Si può dire che il proprio prodotto include un certo componente, ma non usare il nome del progetto come se fosse il proprio marchio. Come tutte le licenze open source, esclude garanzie e responsabilità, pur permettendo a chi ridistribuisce di offrire garanzie aggiuntive a proprio nome e rischio.
Compatibilità con altre licenze
| Combinazione | Possibile? |
|---|---|
| Codice Apache 2.0 in progetto MIT | sì, ma l'insieme deve rispettare anche gli obblighi Apache |
| Codice Apache 2.0 in progetto GPLv3 | sì |
| Codice Apache 2.0 in progetto solo GPLv2 | no, per le clausole su brevetti e revoca |
| Codice MIT in progetto Apache 2.0 | sì, conservando l'avviso MIT |
L'incompatibilità con la GPLv2 è riconosciuta dalla Free Software Foundation ed è una delle ragioni per cui molti progetti hanno adottato la formula «GPLv2 o successive».
Contributi e intestazioni
Un dettaglio spesso ignorato è la sezione 5: salvo diversa indicazione, qualsiasi contributo inviato intenzionalmente al progetto si intende concesso alle condizioni della licenza stessa. Molti progetti la affiancano comunque a un accordo con i contributori o a una firma dei commit, per avere una traccia esplicita.
L'appendice della licenza suggerisce un'intestazione breve da inserire in ogni file. Oggi si può sostituire o affiancare con un identificatore standard:
// SPDX-License-Identifier: Apache-2.0
Esempio pratico
Una startup integra in un'app commerciale un client HTTP con licenza Apache 2.0 e ne modifica la gestione dei timeout. Nella distribuzione dell'app include: il testo della licenza, il contenuto del NOTICE del client, e nel file modificato aggiunge un commento del tipo «Modificato dalla nostra azienda: gestione timeout configurabile». Non deve pubblicare il proprio codice né quello della modifica. Se un giorno facesse causa per brevetti sostenendo che quel client viola un suo brevetto, perderebbe la licenza sui brevetti ricevuta attraverso il client.
In sintesi
- La Apache 2.0 è permissiva: consente uso commerciale e integrazione in software chiuso.
- Include una concessione esplicita dei brevetti da parte dei contributori, con revoca per chi avvia cause brevettuali.
- Chi ridistribuisce deve includere la licenza, segnalare le modifiche e riportare il file NOTICE.
- Non concede diritti sui marchi del progetto.
- È compatibile con la GPLv3 ma non con la GPLv2 da sola.