Aller au contenu

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).

SPDX-License-Identifier: AGPL-3.0-only
Copyright 2024-present repod contributors

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.