Un'applicazione di medie dimensioni può includere centinaia di componenti open source, molti dei quali arrivano come dipendenze indirette che nessuno ha scelto consapevolmente. Ognuno ha una licenza, e ogni licenza ha obblighi. Tenere tutto a mente non è possibile: serve un metodo. Negli ultimi anni si sono affermati alcuni strumenti standard che rendono la conformità un'attività ripetibile invece che un'emergenza prima del rilascio. Il più importante è SPDX.
Cos'è SPDX
SPDX (Software Package Data Exchange) è uno standard aperto, nato in seno alla Linux Foundation e riconosciuto come norma internazionale ISO/IEC 5962:2021. Ha due parti che conviene distinguere:
- Una lista di identificatori di licenza: nomi brevi e univoci come
MIT,Apache-2.0,GPL-2.0-only,GPL-3.0-or-later,BSD-3-Clause. - Un formato per descrivere il software: un documento che elenca pacchetti, file, licenze, copyright e relazioni tra componenti.
Le espressioni di licenza
Gli identificatori si combinano con operatori semplici:
MIT OR Apache-2.0 # doppia licenza, a scelta
GPL-2.0-or-later WITH Classpath-exception-2.0
LGPL-2.1-only AND MIT # parti con licenze diverse, tutte da rispettare
ORsignifica che chi riceve può scegliere;ANDsignifica che valgono entrambe;WITHaggiunge un'eccezione riconosciuta alla licenza.
Gli identificatori nei file
La pratica più utile e meno costosa è inserire un commento in testa a ogni file sorgente:
// SPDX-FileCopyrightText: 2026 Nome Autore
// SPDX-License-Identifier: Apache-2.0
Due righe al posto di un'intestazione lunga venti righe. Gli strumenti automatici le leggono in modo affidabile, e chi copia un singolo file in un altro progetto porta con sé l'informazione sulla licenza.
La specifica REUSE
La Free Software Foundation Europe ha pubblicato la specifica REUSE, che formalizza queste pratiche:
- ogni file ha licenza e copyright dichiarati, nel file stesso o in un file di accompagnamento;
- i testi integrali delle licenze stanno in una cartella
LICENSES/; - uno strumento a riga di comando verifica che il repository sia conforme.
Per file che non possono contenere commenti, come immagini o file binari, si usa un file di testo accanto o un file di configurazione centrale.
Cos'è una SBOM
La SBOM (Software Bill of Materials, distinta base del software) è l'elenco completo dei componenti che costituiscono un prodotto, con versioni, provenienza e licenze. È l'equivalente dell'elenco ingredienti di un prodotto alimentare.
I formati più diffusi sono due:
| Formato | Origine | Uso tipico |
|---|---|---|
| SPDX | Linux Foundation | licenze e conformità, anche sicurezza |
| CycloneDX | OWASP | sicurezza e vulnerabilità, anche licenze |
Una SBOM serve a due scopi principali. Per la conformità permette di sapere quali obblighi di licenza vanno rispettati nel prodotto distribuito. Per la sicurezza permette di capire in pochi minuti se un prodotto contiene una versione vulnerabile di una libreria, quando viene pubblicata una nuova vulnerabilità.
Un processo pratico in cinque passi
- Dichiarare la licenza propria con identificatori SPDX in ogni file del codice interno.
- Generare la SBOM automaticamente a ogni build, a partire dai file di lock del gestore di pacchetti e, per le immagini container, dall'analisi dell'immagine.
- Definire una politica delle licenze: quali sono ammesse senza revisione (ad esempio MIT, BSD, Apache 2.0), quali richiedono approvazione (ad esempio LGPL, MPL), quali sono escluse per quel prodotto.
- Bloccare la pipeline quando compare una licenza non ammessa o sconosciuta, invece di scoprirlo a rilascio fatto.
- Produrre gli avvisi per i destinatari: dalla SBOM si genera il file con i testi delle licenze e i copyright da distribuire insieme al prodotto.
Insidie frequenti
- Metadati errati: il campo licenza nei registri dei pacchetti a volte è vuoto, generico o sbagliato. I casi dubbi vanno verificati nei file del progetto.
- Codice copiato: frammenti incollati da altri progetti non compaiono in nessun file di lock. Gli strumenti di scansione del codice aiutano a trovarli.
- Licenze «personalizzate»: alcune librerie usano testi propri o modificati. Lo standard prevede identificatori con prefisso
LicenseRef-per indicarli senza confonderli con quelli ufficiali. - Componenti di sistema nelle immagini container: un'immagine include pacchetti del sistema operativo con licenze proprie, spesso dimenticati.
Nel mio lavoro la SBOM è anche uno strumento di indagine: quando bisogna ricostruire quale versione di un componente era in esecuzione in un certo momento, una distinta conservata per ogni rilascio fa risparmiare molte ore.
In sintesi
- SPDX fornisce identificatori univoci per le licenze e un formato standard per descrivere il software.
- Due righe di intestazione SPDX in ogni file sostituiscono lunghe note di licenza e sono leggibili dalle macchine.
- La specifica REUSE aiuta a rendere un repository completamente dichiarato e verificabile.
- La SBOM elenca tutti i componenti di un prodotto ed è utile sia per le licenze sia per la sicurezza.
- Automatizzare generazione, verifica e blocco nella pipeline trasforma la conformità in routine.