Le Réseau des Pairs
Collaboration P2P, delegates, passerelles GitHub et écosystème Radicle
Tu quittes la tour de guet au petit matin. Le Guetteur t'a donné la carte, et tu y vois maintenant des dizaines de points lumineux - d'autres tours, d'autres voyageurs, d'autres archivistes libres qui partagent leurs chroniques sans l'aide des grandes guildes.
Mais avoir des outils et une tour ne suffit pas. Un archiviste isolé reste isolé. La véritable puissance du réseau pair-à-pair ne se révèle que lorsqu'on apprend à travailler ensemble.
Le Maître Archiviste te rejoint sur le chemin. Il semble différent aujourd'hui - pas un professeur, mais un compagnon de route.
« Tu sais publier tes chroniques. Tu sais monter une tour. Mais sais-tu tisser des liens ? Sais-tu collaborer avec des pairs que tu n'as jamais rencontrés, qui vivent à l'autre bout du royaume, sans qu'aucune guilde ne vous mette en relation ? C'est le dernier art que je puisse t'enseigner. Et c'est aussi le plus humain. »
Workflow d'équipe sur Radicle
Sur GitHub, la collaboration passe par un serveur central : tu forks, tu push, tu ouvres une PR. Sur Radicle, il n'y a pas de serveur central. Le workflow est fondamentalement différent.
Le workflow pair-à-pair
# Workflow classique GitHub :
# 1. Fork le dépôt (sur le serveur)
# 2. Clone ton fork
# 3. Push ta branche
# 4. Ouvre une Pull Request (sur le serveur)
# 5. Le mainteneur merge (sur le serveur)
# Workflow Radicle :
# 1. Clone le projet : rad clone rad:z...
# 2. Crée ta branche et code
# 3. Propose un patch : rad patch create
# 4. Le mainteneur revoit et merge : rad patch merge
# 5. Tout le monde synchronise : rad sync La différence fondamentale : sur Radicle, chaque pair possède sa copie complète du projet, incluant les patches, issues et métadonnées. Il n'y a pas de "source de vérité" unique sur un serveur. La source de vérité est le consensus entre les delegates du projet.
Un scénario concret
Imagine trois développeurs - Alice, Bob et Carol - qui travaillent ensemble sur un projet Radicle :
# Alice crée le projet
# (sur la machine d'Alice)
rad init
rad push
# Bob clone le projet
# (sur la machine de Bob)
rad clone rad:z2e7R...
# Bob propose une amélioration
git switch -c ajout-tests
# ... code ...
git commit -m "Ajouter les tests unitaires"
rad patch create
# Alice revoit le patch de Bob
# (sur la machine d'Alice)
rad sync # Récupère le patch de Bob
rad patch list # Voit le patch
rad patch show <id> # Examine les changements
rad patch comment <id> --message "Approuvé !"
rad patch merge <id> # Fusionne
# Carol synchronise pour avoir la dernière version
# (sur la machine de Carol)
rad sync
git pull Gestion de projet - delegates et permissions
Sur un projet Radicle, la gouvernance repose sur le concept de delegates (délégués). Ce sont les personnes de confiance qui ont le pouvoir de fusionner des patches et de prendre des décisions sur le projet.
Les delegates
Quand tu crées un projet avec rad init, tu deviens automatiquement le seul delegate. Tu peux ensuite en ajouter d'autres :
# Voir les delegates actuels du projet
rad inspect
# Modifier les delegates du projet
rad id edit Attention : La syntaxe exacte pour ajouter ou retirer des delegates peut varier selon la version de Radicle. Les commandes rad id update --delegate et rad id update --revoke existaient dans des versions précédentes. Depuis Heartwood, utilise rad id edit pour modifier l'identité du projet (delegates et threshold). Consulte rad id --help pour la syntaxe de ta version.
Le threshold (seuil)
Le threshold définit combien de delegates doivent approuver un changement pour qu'il soit considéré comme valide. Par défaut, le threshold est de 1 (un seul delegate suffit).
# Avec 3 delegates et threshold=2 :
# Il faut l'accord de 2 delegates sur 3 pour merger un patch
# C'est un système de vote à la majorité
# Modifier le threshold (via rad id edit)
rad id edit Ce mécanisme est puissant : il permet de créer une gouvernance démocratique sans aucune autorité centrale. C'est similaire aux systèmes de multi-signature en cryptographie.
Visibilité du projet
Un projet Radicle peut avoir différents niveaux de visibilité :
- Public : tout pair qui connaît le RID peut cloner et contribuer. C'est le comportement par défaut
- Privé : seuls les pairs explicitement autorisés peuvent accéder au projet. Utile pour les projets d'entreprise ou les travaux en cours
Revue de patches en équipe
La revue de code est aussi importante sur Radicle que sur GitHub. Les outils sont différents, mais le principe reste le même : relire, commenter, améliorer.
Examiner un patch
# Lister les patches en attente
rad patch list --state open
# Voir le détail d'un patch (titre, auteur, commits)
rad patch show <patch-id>
# Voir le diff du patch
rad patch diff <patch-id> Commenter et discuter
# Ajouter un commentaire général
rad patch comment <patch-id> --message "Le code est propre, mais il manque la gestion d'erreurs."
# Les commentaires sont signés et propagés à tous les pairs
# Chaque contributeur peut voir la discussion complète Réviser formellement
# Approuver un patch (revue positive)
rad patch review <patch-id> --accept
# Demander des modifications
rad patch review <patch-id> --reject --message "Il faut corriger les tests avant de merger." Le cycle de vie d'un patch
# 1. Création : rad patch create (état: open)
# 2. Discussion : rad patch comment (état: open)
# 3. Revue : rad patch review (état: open)
# 4a. Acceptation : rad patch merge (état: merged)
# 4b. Rejet : rad patch close (état: closed)
# 5. Mise à jour : rad patch update (l'auteur pousse de nouveaux commits) Bonne pratique : Comme sur GitHub, fais des patches petits et ciblés. Un patch qui touche 5 fichiers et 50 lignes sera revu en 10 minutes. Un patch de 500 lignes sera ignoré pendant des semaines.
Passerelles avec GitHub
Le monde ne va pas migrer vers Radicle du jour au lendemain. La plupart de tes collègues et des projets open source utilisent GitHub. Heureusement, Radicle et GitHub peuvent coexister.
Pourquoi des passerelles ?
- Transition progressive : tu peux commencer à utiliser Radicle sans abandonner GitHub
- Redondance : ton code existe à la fois sur GitHub et sur le réseau Radicle
- Accessibilité : les contributeurs qui ne connaissent pas Radicle peuvent toujours passer par GitHub
Mirroring bidirectionnel
Le mirroring consiste à synchroniser un dépôt entre GitHub et Radicle dans les deux sens :
# Ton dépôt a deux remotes :
git remote -v
# origin git@github.com:ton-user/ton-projet.git (GitHub)
# rad rad://z2e7R... (Radicle)
# Push vers les deux en même temps
git push origin main
rad push
# Ou configure un alias pour pousser partout
git config alias.push-all '!git push origin main && rad push'
git push-all radicle-ci-broker
Le radicle-ci-broker est un outil qui connecte les patches Radicle à des systèmes de CI existants. Quand un patch est créé sur Radicle, le broker peut déclencher un pipeline GitHub Actions ou GitLab CI :
# Principe du CI broker :
# 1. Un patch arrive sur Radicle
# 2. Le broker détecte le nouveau patch
# 3. Il pousse le code vers GitHub (branche temporaire)
# 4. GitHub Actions exécute les tests
# 5. Le résultat est reporté sur le patch Radicle C'est un pont entre le monde décentralisé et les outils de CI existants. À terme, Radicle développe ses propres solutions de CI, mais en attendant, le broker permet de ne rien perdre.
Stratégie pragmatique : Utilise GitHub comme "vitrine" publique et CI/CD, et Radicle comme infrastructure de collaboration et de redondance. Le meilleur des deux mondes.
L'interface web Radicle
Radicle est avant tout un outil en ligne de commande, mais il existe des interfaces web pour ceux qui préfèrent le navigateur.
app.radicle.xyz
app.radicle.xyz est l'interface web officielle de Radicle. Elle permet de :
- Parcourir les projets publics du réseau
- Voir le code source, les commits, les branches
- Consulter les patches et les issues
- Découvrir de nouveaux projets
radicle-explorer (auto-hébergé)
Tu peux aussi héberger ta propre interface web avec radicle-explorer. C'est une application web qui se connecte à ton nœud local :
# Installer radicle-explorer (nécessite Node.js)
# Le code source est disponible sur GitHub :
git clone https://github.com/radicle-dev/radicle-explorer.git
cd radicle-explorer
npm install
npm run build
# Lancer en mode développement
npm run dev
# Ouvre http://localhost:3000 Note : L'interface web publique officielle est accessible sur app.radicle.xyz. Tu n'as besoin d'auto-héberger l'explorer que si tu veux une interface web pour ton propre nœud.
L'explorer se connecte à l'API HTTP de ton nœud Radicle et affiche les projets, patches et issues dans une interface web élégante.
Matrice de décision - quel outil choisir ?
Radicle n'est pas la réponse à tout. Voici une matrice pour t'aider à choisir l'outil adapté à chaque situation :
| Critère | GitHub | Forgejo (auto-hébergé) | Radicle |
|---|---|---|---|
| Facilité de démarrage | Très facile | Moyenne (serveur requis) | Moyenne (CLI, concepts P2P) |
| Interface web | Excellente | Très bonne | Basique (en amélioration) |
| CI/CD intégré | GitHub Actions (puissant) | Forgejo Actions | Via CI broker (limité) |
| Souveraineté des données | Faible (Microsoft) | Totale (ton serveur) | Totale (ta clé) |
| Résistance à la censure | Faible | Moyenne | Forte |
| Disponibilité | Excellente (99.9%+) | Dépend de ton serveur | Dépend des seeds et pairs |
| Écosystème / communauté | Énorme | Croissant | Petit mais passionné |
| Coût | Gratuit (limites) / payant | Coût du serveur | Gratuit |
| Idéal pour | Open source grand public, entreprises | Équipes voulant le contrôle | Projets souverains, résilients |
L'écosystème Radicle
Heartwood - le protocole
Heartwood est le nom du protocole qui fait tourner Radicle. C'est le "cœur de bois" - la fondation technique sur laquelle tout repose. Heartwood définit :
- Comment les pairs se découvrent et se connectent
- Comment les données sont répliquées entre les nœuds
- Le format des patches, issues et autres objets collaboratifs
- Le système d'identité basé sur les DIDs
Heartwood est écrit en Rust, un langage reconnu pour sa performance et sa sécurité mémoire. Le protocole est ouvert et documenté - n'importe qui peut implémenter un client compatible.
Les composants de l'écosystème
| Composant | Rôle |
|---|---|
| radicle-cli (rad) | L'outil en ligne de commande pour les utilisateurs |
| radicle-node | Le nœud qui participe au réseau P2P |
| radicle-httpd | API HTTP pour les interfaces web |
| radicle-explorer | Interface web pour naviguer les projets |
| radicle-ci-broker | Pont entre les patches Radicle et les CI existants |
La roadmap
Radicle est en développement actif. Voici les axes d'évolution :
- Amélioration de l'UX : interface web plus riche, meilleure intégration IDE
- CI/CD natif : exécution de pipelines directement sur le réseau Radicle
- Notifications : être alerté des nouveaux patches et commentaires
- Performance : réplication plus rapide, meilleure gestion des gros dépôts
- Interopérabilité : passerelles améliorées avec GitHub, GitLab et Forgejo
« Radicle est jeune. Comme un arbre qui vient d'être planté, ses racines ne sont pas encore profondes. Mais chaque jour qui passe, le protocole mûrit, la communauté grandit, et les outils s'améliorent. Ceux qui plantent les premiers arbres sont rarement ceux qui profitent de leur ombre - mais sans eux, la forêt n'existerait jamais. »
Exercice pratique - Simuler une collaboration P2P
Dans cet exercice, tu vas simuler une collaboration entre deux identités Radicle sur ta propre machine. C'est comme jouer aux échecs contre toi-même - mais ça te permettra de comprendre le flux complet.
Étape 1 - Préparer deux environnements
On va créer deux "profils" Radicle distincts pour simuler deux utilisateurs :
Astuce multi-profils : pour simuler deux identités sur la même machine, utilise la variable d'environnement RAD_HOME pour séparer les répertoires Radicle :
export RAD_HOME=~/.radicle-alice # Premier profil
rad auth
export RAD_HOME=~/.radicle-bob # Second profil
rad auth # Crée deux dossiers de travail
mkdir -p ~/radicle-exercice/alice
mkdir -p ~/radicle-exercice/bob Étape 2 - Alice crée le projet
# En tant qu'Alice
cd ~/radicle-exercice/alice
# Crée un dépôt Git
git init -b main projet-commun
cd projet-commun
# Crée du contenu
cat > README.md <<EOF
# Projet Commun
Un projet collaboratif sur le réseau Radicle.
## Contributeurs
- Alice (créatrice)
EOF
git add README.md
git commit -m "Initialisation du projet commun"
# Initialise Radicle
rad init
# Note le RID qui s'affiche : rad:z... Étape 3 - Bob clone et contribue
# En tant que Bob
cd ~/radicle-exercice/bob
# Clone le projet d'Alice
rad clone rad:z<le-rid-du-projet>
cd projet-commun
# Bob crée une branche et ajoute sa contribution
git switch -c ajout-contribution-bob
cat >> README.md <<EOF
## Fonctionnalités prévues
- Synchronisation pair-à-pair
- Revue de code décentralisée
- Issues sans serveur central
EOF
git add README.md
git commit -m "Ajouter les fonctionnalités prévues"
# Bob propose un patch
rad patch create Étape 4 - Alice revoit et merge
# De retour en tant qu'Alice
cd ~/radicle-exercice/alice/projet-commun
# Synchronise pour recevoir le patch de Bob
rad sync
# Voir les patches
rad patch list
# Examiner le patch
rad patch show <patch-id>
# Commenter
rad patch comment <patch-id> --message "Excellente contribution, Bob !"
# Merger le patch
rad patch merge <patch-id> Étape 5 - Vérifier le résultat
# Côté Alice - voir le résultat
cd ~/radicle-exercice/alice/projet-commun
git log --oneline
cat README.md
# Côté Bob - synchroniser
cd ~/radicle-exercice/bob/projet-commun
rad sync
git pull
git log --oneline Étape 6 - Créer une issue et la résoudre
# Bob crée une issue
cd ~/radicle-exercice/bob/projet-commun
rad issue create --title "Ajouter un fichier LICENCE" \
--description "Le projet n'a pas encore de licence open source."
# Alice voit l'issue
cd ~/radicle-exercice/alice/projet-commun
rad sync
rad issue list
# Alice résout l'issue
echo "MIT License - Copyright $(date +%Y)" > LICENSE
git add LICENSE
git commit -m "Ajouter la licence MIT"
rad push
# Alice ferme l'issue
rad issue close <issue-id> Note : Sur une seule machine, la synchronisation entre les deux profils passe par le nœud local. Dans un vrai scénario, Alice et Bob seraient sur des machines différentes, connectés via le réseau Radicle. Le workflow reste exactement le même.
Récapitulatif
| Concept | Description |
|---|---|
| Delegates | Les mainteneurs autorisés à merger des patches |
| Threshold | Nombre de delegates requis pour valider un changement |
| rad patch review | Approuver ou rejeter formellement un patch |
| rad id edit | Modifier les delegates ou le threshold du projet |
| Mirroring | Synchroniser un dépôt entre GitHub et Radicle |
| radicle-ci-broker | Pont entre patches Radicle et CI GitHub/GitLab |
| radicle-explorer | Interface web pour naviguer les projets Radicle |
| app.radicle.xyz | Interface web publique officielle |
| Heartwood | Le protocole de base de Radicle (écrit en Rust) |
| radicle-httpd | API HTTP pour connecter des interfaces au nœud |
Le soleil descend sur l'horizon. Depuis la crête où tu te trouves, tu vois le royaume tout entier : les tours des grandes guildes qui brillent au loin, les chemins pavés qui les relient, et partout entre eux, les sentiers discrets des voyageurs libres.
Le Maître Archiviste pose une main sur ton épaule.
« Tu as commencé ce voyage comme un apprenti qui ne savait pas ce qu'était un commit. Tu as traversé les fondations, maîtrisé les branches et les fusions, appris les arts anciens du stash et du bisect. Tu as forgé des pipelines automatiques dans les grandes guildes. Et maintenant, tu as marché au-delà des murs. »
« Tu connais les outils des voyageurs libres. Tu sais construire une tour de guet. Tu sais tisser des liens avec d'autres pairs sans qu'aucune autorité ne vous mette en relation. Tu possèdes la compétence la plus rare de toutes : la capacité de choisir librement tes outils, en pleine connaissance de leurs forces et de leurs limites. »
Il défait le vieux compas Radicle de sa ceinture et te le tend.
« Garde-le. Son aiguille ne pointe vers aucun nord fixe, car le nord n'existe pas dans un monde pair-à-pair. Il n'y a que des pairs - des égaux qui choisissent de collaborer. »
Tu ranges le compas dans ton sac de voyage, à côté de tous les outils que tu as accumulés au fil des quêtes. Le Maître Archiviste te sourit une dernière fois.
« Va, Voyageur Libre. Le réseau t'attend. Et souviens-toi : dans un monde pair-à-pair, chaque nœud compte. Y compris le tien. »
Il redescend vers la Citadelle. Tu restes un moment sur la crête, la carte des pairs dans une main, le compas dans l'autre. Devant toi, les chemins libres s'étendent à l'infini - et pour la première fois, tu sais exactement lequel prendre.