Aller au contenu

Rapport d'Analyse des Paquets Scoop et Adéquation dans l'Architecture Érable

Navigation : Documentation > Analyse des Buckets Scoop
Spécifications associées : 04. Modèle des Buckets & Distribution | 01. Règles Bucket Core/Main | 02. Règles Bucket GUI | 03. Règles Bucket Community | 04. Règles Bucket Commercial


Sommaire

  1. Contexte et Méthodologie d'Analyse
  2. Cartographie Détaillée des Buckets Scoop Officiels
  3. 2.1 Le Bucket main (CLI Purs & Sans Dépendances)
  4. 2.2 Le Bucket extras (GUI & Applications Mixtes)
  5. 2.3 Le Bucket sysinternals (Utilitaires Système Windows)
  6. 2.4 Le Bucket java (Runtimes & SDKs OpenJDK/Oracle)
  7. 2.5 Le Bucket php (Environnements PHP & Extensions)
  8. 2.6 Le Bucket nerd-fonts (Polices Typographiques de Terminaux)
  9. 2.7 Le Bucket games (Jeux Open-Source & Émulateurs)
  10. 2.8 Le Bucket nonportable (Paquets Modifiant le Système Global)
  11. Matrice Synthétique d'Adéquation et d'Attribution
  12. Analyse Approfondie des Cas Limites
  13. 4.1 Cas n°1 : Les Polices d'Écriture (Fonts)
  14. 4.2 Cas n°2 : Les Installeurs Non-Portables et Nécessitant l'UAC
  15. 4.3 Cas n°3 : Les Runtimes à Versions Multiples Parallèles
  16. 4.4 Cas n°4 : Les Outils Propriétaires sous EULA
  17. Architecture de Collecte Différentielle Multi-Sources et Enrichissement Multi-OS
  18. 5.1 Veille Différentielle Multi-Écosystèmes
  19. 5.2 Mode Dual : Création vs Enrichissement Multiplateforme
  20. 5.3 Support User-Space des Archives macOS (.dmg)

1. Contexte et Méthodologie d'Analyse

Dans le cadre de l'ingénierie du gestionnaire de paquets Érable, l'écosystème Scoop représente la référence historique sous Windows pour l'installation d'outils portables en espace utilisateur (user-space). Scoop s'appuie sur une constellation de dépôts Git appelés buckets, totalisant plus de 4 000 manifestes JSON.

L'objectif de cette étude est d'analyser systématiquement chaque famille de paquets Scoop pour :

  1. Identifier leur place exacte dans l'architecture modulaire d'Érable (bucket/main, bucket/gui, bucket/community, bucket/commercial).
  2. Déterminer l'éligibilité technique : tous les paquets Scoop ont-ils vocation à être importés dans Érable ?
  3. Détecter les cas d'incompatibilité structurelle (polices, pilotes, installeurs nécessitant les droits administrateur UAC) et formuler les solutions architecturales adéquates.

2. Cartographie Détaillée des Buckets Scoop Officiels

2.1 Le Bucket main (CLI Purs & Sans Dépendances)

  • Périmètre Scoop : Environ 1 300 paquets. Outils en ligne de commande stricts (CLI / TUI) destinés aux développeurs (git, ripgrep, fd, jq, curl, kubectl, neovim, ffmpeg...).
  • Adéquation avec Érable :
  • Destination principale : bucket/main (outils CLI essentiels).
  • Filtre de gouvernance : Tout paquet issu de main Scoop doit satisfaire au seuil de légitimité d'Érable :
    • Licence 100% FOSS reconnue par l'OSI.
    • Au moins 500 étoiles GitHub/GitLab et commit actif < 12 mois.
    • Disponibilité multiplateforme (au moins 2 OS majeurs).
  • Aiguillage alternatif : Les outils CLI émergents ou de niche (< 500 étoiles) sont basculés automatiquement vers bucket/community.

2.2 Le Bucket extras (GUI & Applications Mixtes)

  • Périmètre Scoop : Environ 2 000 paquets. Regroupe des applications fenêtrées, des utilitaires bureautiques, des clients de bases de données et des IDE (vscode, notepadplusplus, postman, gimp, vlc, dbeaver, wireshark...).
  • Adéquation avec Érable :
  • Applications Open Source (FOSS) : Intégrées dans bucket/gui avec génération obligatoire du fichier parts/shortcuts.toml pour le Menu Démarrer Windows (.lnk) et les lanceurs de bureau Linux (.desktop).
  • Applications Propriétaires / Commerciales : Les logiciels distribués sous CLUF restrictif ou intégrant de la télémétrie propriétaire (ex: Visual Studio Code officiel Microsoft, Sublime Text, Postman, Slack) relèvent obligatoirement du bucket/commercial avec bloc [license], requires_acceptance = true et téléchargement direct chez l'éditeur (Direct Vendor Fetch).

2.3 Le Bucket sysinternals (Utilitaires Système Windows)

  • Périmètre Scoop : Environ 70 paquets. Suite d'outils d'administration et de diagnostic système Microsoft Windows éditée par Mark Russinovich (Process Explorer, Process Monitor, Autoruns, Tcpview, PsExec...).
  • Adéquation avec Érable :
  • Outils en ligne de commande (handle, procdump, pslist, sigcheck, strings) : Intégrés dans bucket/main avec la directive de plateforme stricte platforms = ["x86_64-windows"].
  • Outils graphiques (procexp, procmon, autoruns, tcpview) : Intégrés dans bucket/gui avec création des raccourcis Menu Démarrer (validé opérationnellement avec sysinternals-procexp v17.06).
  • Propriété intellectuelle : Bien que gratuits, ces outils sont propriétaires Microsoft. Leurs manifestes doivent mentionner explicitement le CLUF Microsoft Sysinternals.

2.4 Le Bucket java (Runtimes & SDKs OpenJDK/Oracle)

  • Périmètre Scoop : Environ 150 paquets. Différentes versions de Java (JDK 8 à 23) issues de multiples distributions (Eclipse Temurin, Amazon Corretto, Azul Zulu, GraalVM, Microsoft Build of OpenJDK, Oracle JDK).
  • Adéquation avec Érable :
  • Distributions OpenJDK libres : Totalement éligibles dans bucket/main.
  • Oracle JDK commercial : Basculé dans bucket/commercial.
  • Bénéfice structurel Érable : Dans Scoop, installer plusieurs JDKs nécessite des hacks de script complexes (env_set JAVA_HOME). Avec Érable, le modèle Trampoline Rust + pointeur .target permet d'exécuter java, javac et jar de manière atomique, ou de définir des profils d'outillage complets via des bundles séquentiels erable apply.

2.5 Le Bucket php (Environnements PHP & Extensions)

  • Périmètre Scoop : Environ 50 paquets. Runtimes PHP (versions 7.4 à 8.3) et gestionnaires de dépendances associés (composer, extensions Xdebug).
  • Adéquation avec Érable :
  • composer et la version PHP stable courante : bucket/main.
  • Les versions historiques de PHP pour la maintenance legacy : bucket/community.

2.6 Le Bucket nerd-fonts (Polices Typographiques de Terminaux)

  • Périmètre Scoop : Environ 100 paquets. Polices de caractères patchées avec glyphes et icônes pour le terminal (FiraCode-NF, JetBrainsMono-NF, CascadiaCode-NF, Hack-NF...).
  • Adéquation avec Érable : Cas limite nécessitant une architecture dédiée.
  • Une police n'est pas un fichier exécutable. Elle ne possède pas de binaire à router dans ~/.erable/bin.
  • L'installation d'une police nécessite l'écriture dans le registre Windows (HKCU\Software\Microsoft\Windows NT\CurrentVersion\Fonts) ou l'actualisation du cache de polices (fc-cache sous Linux).
  • Décision : Les polices ne doivent pas polluer main ni gui. Elles requièrent un bucket dédié bucket/fonts avec un gestionnaire de cycle de vie adapté.

2.7 Le Bucket games (Jeux Open-Source & Émulateurs)

  • Périmètre Scoop : Environ 300 paquets. Jeux rétro, roguelikes, émulateurs (RetroArch, Dolphin) et moteurs open-source (Godot).
  • Adéquation avec Érable :
  • Les moteurs de développement (ex: Godot Engine) : Éligibles dans bucket/gui (outil de création).
  • Les jeux purs et émulateurs : Éligibles dans bucket/community pour les développeurs souhaitant se détendre, mais strictement exclus des bundles professionnels en entreprise (docs/entreprise.md).

2.8 Le Bucket nonportable (Paquets Modifiant le Système Global)

  • Périmètre Scoop : Environ 100 paquets. Outils qui installent des services Windows, écrivent dans C:\Program Files, manipulent des pilotes de périphériques ou déclenchent des installeurs MSI avec élévation UAC (docker-desktop, virtualbox, openvpn, wireshark avec WinPcap/Npcap).
  • Adéquation avec Érable : Incompatibilité structurelle majeure.
  • Érable applique le principe fondamental du Zero-Admin / Stateless User-Space. Aucun paquet ne doit forcer l'élévation administrative (UAC ou root).
  • Décision : Rejet systématique de la forme non-portable. Seules les déclinaisons pouvant être extraites sans élévation (ex: extraction silencieuse WiX/MSI d'exécutables autonomes) sont admises.

3. Matrice Synthétique d'Adéquation et d'Attribution

Famille Scoop Exemple de Paquets Bucket Cible Érable Critères d'Éligibilité Spécifiques Statut d'Intégration
CLI Essentiels git, ripgrep, jq, kubectl main FOSS OSI, Stars >= 500, Commit < 12 mois, Multiplateforme 100% Éligible
CLI Émergents / Niche my-rust-cli, outils spécialisés community Code source public, Audit Zero Egress (.nu), SHA-256 100% Éligible
GUI Open-Source notepad-plus-plus, dbeaver, vlc gui FOSS, shortcuts.toml obligatoire, Sous-système WINDOWS 100% Éligible
GUI / CLI Propriétaires sublime-text, postman, slack commercial Bloc [license] avec CLUF, requires_acceptance, Direct Vendor Fetch 100% Éligible
Outils Sysinternals CLI handle, procdump, strings main Restriction platforms = ["x86_64-windows"] 100% Éligible
Outils Sysinternals GUI procexp, procmon, tcpview gui shortcuts.toml avec raccourci Windows 100% Éligible
Runtimes OpenJDK temurin-jdk, corretto-jdk main Licence FOSS, Cibles x86_64 et aarch64 100% Éligible
Polices Développeurs JetBrainsMono-NF, FiraCode Hors scope actuel Nécessite un bucket dédié fonts et un hook de registre À isoler (bucket fonts)
Jeux & Émulateurs angband, retroarch community Open-source, binaire portable sans UAC Toléré en community
Outils Non-Portables virtualbox, pilotes, services Exclus Exige élévation UAC / pilotes noyau Incompatible / Rejeté

4. Analyse Approfondie des Cas Limites

4.1 Cas n°1 : Les Polices d'Écriture (Fonts)

Dans Scoop, le bucket nerd-fonts utilise des scripts PowerShell complexes exécutés en post_install pour copier les fichiers .ttf ou .otf dans %LOCALAPPDATA%\Microsoft\Windows\Fonts et écrire dans le Registre Windows.

  • Problème pour Érable : Érable repose sur des trampolines Rust pointant vers des fichiers exécutables déclarés dans parts/targets.toml. Une police ne possède aucun exécutable. De plus, notre politique de sécurité Zero Egress interdit aux scripts de hook d'écrire de manière incontrôlée dans le Registre Windows ou dans des répertoires système globaux.
  • Solution Recommandée :
  • Ne pas mélanger les polices dans main ou gui.
  • Si le besoin se présente, créer un bucket dédié bucket/fonts.
  • Définir un module de métadonnées parts/font.toml dans le moteur Érable qui prend en charge nativement l'enregistrement de polices sans recourir à des scripts arbitraires.

4.2 Cas n°2 : Les Installeurs Non-Portables et Nécessitant l'UAC

Scoop a créé le bucket nonportable pour les logiciels impossibles à isoler en mode utilisateur (pilotes matériels, virtualiseurs, Wireshark avec capture pcap).

  • Problème pour Érable : Accepter des paquets nécessitant l'élévation UAC détruirait le modèle de sécurité d'Érable (absence de root, immunité contre la compromission système globale, déploiement automatisé sans pop-up UAC en entreprise).
  • Solution Recommandée :
  • Refus formel d'intégration pour tout outil nécessitant un pilote noyau ou un service Windows permanent.
  • Pour les installeurs MSI ou InnoSetup simples : utilisation en CI de l'outil d'extraction lessmsi ou innoextract pour extraire les fichiers portables purs et les distribuer sous forme d'archive zip portable.

4.3 Cas n°3 : Les Runtimes à Versions Multiples Parallèles

Les développeurs ont fréquemment besoin de plusieurs versions majeures simultanées (ex: Java 17 et Java 21, ou Node.js 18 et Node.js 20).

  • Avantage d'Érable :
  • Dans Scoop, basculer d'une version à l'autre nécessite des scripts personnalisés qui modifient les variables d'environnement globales.
  • Dans Érable, les versions coexistent physiquement dans ~/.erable/packages/<nom>/<version> avec déduplication NTFS CoW. Le basculement vers une version s'effectue instantanément par mise à jour du lien current et du fichier .target. De plus, la commande erable apply <bundle.toml> permet à une équipe projet de basculer l'ensemble de ses outils vers les versions exactes du bundle en une seule commande.

4.4 Cas n°4 : Les Outils Propriétaires sous EULA

Scoop intègre indifféremment des logiciels libres et propriétaires dans son bucket extras sans avertissement légal.

  • Conformité Érable :
  • Ségrégation stricte : bucket/main et bucket/gui sont 100% réservés aux logiciels open source reconnus par l'OSI.
  • Tous les logiciels fermés, freewares ou soumis à un contrat de licence payant/commercial sont regroupés dans bucket/commercial. L'utilisateur doit explicitement valider la licence via --accept-license ou lors d'un prompt interactif documenté dans docs/entreprise.md.

5. Architecture de Collecte Différentielle Multi-Sources et Enrichissement Multi-OS

5.1 Veille Différentielle Multi-Écosystèmes

Au-delà de l'amorçage historique via les 9 buckets Scoop sous Windows, Érable fédère désormais quatre écosystèmes user-space complémentaires grâce à un mécanisme de suivi incrémental par curseurs persistants (last_audit_date, empreinte de commit Git ou ETag HTTP) :

  • Scoop (Windows) : Analyse différentielle des ajouts de manifestes portables sur les dépôts communautaires et spécialisés (main, extras, versions, games, java, nerd-fonts, nirsoft, sysinternals, php).

  • Aqua Registry (Multi-OS CLI) : Index déclaratif d'outils en ligne de commande pour x86_64-linux, aarch64-linux, x86_64-macos, aarch64-macos et x86_64-windows avec empreintes vérifiées.

  • WinGet Portable (Windows) : Sélection stricte des manifestes portables (portable, .zip) sans élévation de privilèges ni base de registre système.

  • Homebrew Cask (macOS) : Collecte conditionnelle par ETag HTTP des applications et binaires portables .app / .dmg / .zip, en excluant systématiquement tout installateur .pkg ou script requérant sudo.

5.2 Mode Dual : Création vs Enrichissement Multiplateforme

Lors de chaque cycle de découverte, chaque candidat conforme à la politique sans privilèges administrateur (Zero-Admin) est confronté au catalogue consolidé des cinq buckets Érable (main, gui, community, commercial, fonts) :

  1. Création de nouveau paquet : Si le logiciel est absent du catalogue, une demande d'intégration structurée (package-request) est ouverte sur le dépôt du bucket cible selon sa nature (CLI populaire open source, CLI émergent, application graphique, logiciel sous licence propriétaire ou police).

  2. Enrichissement multi-OS d'un paquet existant : Lorsqu'un paquet déjà distribué sur Windows dispose de nouvelles cibles Linux ou macOS vérifiées en amont, l'architecture génère une demande d'enrichissement conservant intégralement les cibles existantes et ajoutant uniquement les plateformes manquantes.

5.3 Support User-Space des Archives macOS (.dmg)

Pour garantir une expérience cohérente sur macOS Apple Silicon et Intel sans jamais demander de droits administrateur, le moteur d'extraction prend en charge les images disque .dmg directement en espace utilisateur :

  • Montage en lecture seule dans un point de montage temporaire privé, copie ciblée des bundles applicatifs ou binaires portables vers le store immuable Érable, puis démontage garanti dans un bloc de nettoyage systématique.

  • Chaque nouvelle proposition suit de bout en bout le circuit unifié de contrôle cryptographique (SHA-256), de validation structurelle, d'audit Zero Egress et de signature Ed25519 avant publication dans le bucket concerné.