Licences open source & SBOM¶
Repod est open source et s'appuie sur des composants open source. Cette page documente la structure des licences, le Software Bill of Materials (SBOM), et comment vérifier l'inventaire des composants de votre déploiement.
Licence de Repod¶
Le code source de Repod — backend (FastAPI/Python) et frontend (React) — est publié sous licence GNU Affero General Public License v3.0 (AGPL-3.0-only).
Voir le texte complet dans le fichier LICENSE du dépôt.
Une licence commerciale sans les obligations de copyleft réseau de l'AGPL
(Article 13) est disponible — voir
LICENSE-COMMERCIAL.md.
Les contributeurs acceptent un Contributor License Agreement
qui permet ce modèle de double licence.
Pourquoi une double licence AGPL-3.0 + commerciale ?¶
- Copyleft réseau (§13) : garantit que toute personne proposant Repod (ou une version modifiée) en tant que service réseau partage ses modifications avec ses utilisateurs — protège le projet open source des forks SaaS non attribués.
- Concession de brevet explicite (§11) : protège les utilisateurs contre les revendications de brevet des contributeurs.
- Alternative commerciale : les organisations qui doivent embarquer Repod dans un
produit propriétaire ou éviter les obligations de divulgation de code source de l'AGPL
peuvent acheter une licence commerciale (voir
LICENSE-COMMERCIAL.md). - Compatible avec les dépendances sous Apache 2.0 : Grype et Syft (tous deux sous Apache 2.0) s'intègrent sans conflit de licence — Apache 2.0 est compatible à sens unique avec AGPL-3.0/GPL-3.0.
Composants tiers¶
Les images Docker de Repod incluent des outils tiers. Chaque composant conserve sa licence d'origine ; la licence d'aucun composant ne se propage au code propre de Repod (voir ci-dessous).
Composants sous GPL v2¶
| Composant | Version | Licence | Usage | Source |
|---|---|---|---|---|
| reprepro (APT uniquement) | 5.4.6 | GPL v2 | Gestion du dépôt APT — invoqué via subprocess.exec() |
salsa.debian.org |
| createrepo_c (RPM uniquement) | 1.2.0 | GPL v2 | Indexation du dépôt RPM — invoqué via subprocess.exec() |
github.com/rpm-software-management/createrepo_c |
| rpm (RPM uniquement) | 4.20.1 | GPL v2 / LGPL v2 | Interrogation des paquets RPM — invoqué via subprocess.exec() |
github.com/rpm-software-management/rpm |
| ClamAV | 1.4.3 | GPL v2 | Scan antivirus — accédé via socket Unix clamd |
github.com/Cisco-Talos/clamav |
Composants sous Apache 2.0¶
| Composant | Licence | Rôle |
|---|---|---|
| Grype v0.112.0 | Apache 2.0 | Scan des vulnérabilités CVE |
| Syft v1.44.0 | Apache 2.0 | Génération de SBOM |
| Requests | Apache 2.0 | Bibliothèque client HTTP |
| Prometheus Client | Apache 2.0 | Export de métriques |
Composants sous MIT¶
| Composant | Licence | Rôle |
|---|---|---|
| FastAPI 0.136.1 | MIT | Framework web backend |
| React | MIT | Bibliothèque d'interface frontend |
| Tailwind CSS | MIT | Framework CSS |
| axios | MIT | Client HTTP frontend |
| APScheduler | MIT | Tâches planifiées (contrôles SLA, synchronisation sécurité) |
| react-hot-toast | MIT | Interface de notification |
| react-router-dom | MIT | Routage côté client |
Les détails complets d'attribution figurent dans le fichier NOTICES du dépôt.
Isolation GPL v2¶
Simple agrégation des composants GPL v2
La GPL v2 s'applique aux œuvres dérivées — du code lié de façon statique ou dynamique
à une bibliothèque GPL. Repod ne se lie pas à libreprepro, libclamav, ni librpm.
Tous les outils sous GPL v2 sont appelés comme des processus indépendants
via subprocess.exec() ou une communication par socket Unix, et sont distribués
aux côtés des images Docker de Repod en tant que simple agrégation plutôt qu'en
tant qu'œuvre combinée/dérivée.
Le code propre de Repod étant sous licence AGPL-3.0 (elle-même une licence copyleft
forte), la compatibilité avec GPL v2 n'est pas un enjeu bloquant pour la licence de
Repod lui-même — l'isolation ci-dessus concerne surtout les utilisateurs finaux qui
obtiennent une licence commerciale sous LICENSE-COMMERCIAL.md et doivent confirmer
qu'aucune obligation GPL v2 n'est introduite dans leur déploiement propriétaire.
Si vous modifiez Repod pour le lier statiquement à une bibliothèque GPL v2, vous créeriez une œuvre dérivée et les obligations de la GPL v2 s'appliqueraient à cette modification.
Software Bill of Materials (SBOM)¶
Repod publie des SBOM lisibles par machine pour chaque version, au format CycloneDX JSON.
Téléchargement¶
| Image | Format | Fichier |
|---|---|---|
Backend (backend-api, toutes valeurs de REPO_FORMAT) |
CycloneDX JSON | repod-backend.sbom.cdx.json |
Frontend (frontend-ui) |
CycloneDX JSON | repod-frontend.sbom.cdx.json |
Vérifier le SBOM par rapport à votre déploiement¶
# Installer Syft
curl -sSfL https://raw.githubusercontent.com/anchore/syft/main/install.sh \
| sh -s -- -b /usr/local/bin
# Générer un SBOM à jour de votre image en cours d'exécution
syft scan docker:repodata-backend:latest \
-o cyclonedx-json=my-repod-backend.sbom.cdx.json
# Scanner le SBOM à la recherche de vulnérabilités
grype sbom:my-repod-backend.sbom.cdx.json
Scanner la conformité des licences¶
# Lister toutes les licences présentes dans l'image
syft scan docker:repodata-backend:latest \
-o table \
| awk '{print $NF}' | sort -u
Repod génère des SBOM pour vos paquets¶
En plus de publier son propre SBOM, Repod génère des SBOM pour les paquets
qu'il gère. Chaque paquet uploadé obtient un manifeste CycloneDX 1.5 et SPDX 2.3
stocké dans /repos/manifests/.
# Télécharger le SBOM d'un paquet spécifique (CycloneDX)
curl -H "Authorization: Bearer $TOKEN" \
"http://localhost:8000/api/v1/sbom/mypackage/1.0.0?format=cyclonedx&arch=amd64" \
-o mypackage-sbom.cdx.json
# Ou celui de l'ensemble du dépôt
curl -H "Authorization: Bearer $TOKEN" \
"http://localhost:8000/api/v1/sbom/export?format=cyclonedx" \
-o repod-full-sbom.cdx.json
C'est la fonctionnalité qui rend Repod directement utile pour les audits de chaîne d'approvisionnement de l'article 21 de NIS2 — chaque paquet de votre infrastructure dispose d'un enregistrement de provenance lisible par machine.