Le paquet existe, mais pas pour vous
Un outil est dans l'AUR, ou seulement en .deb, ou seulement en release GitHub. Votre distro l'a empaqueté il y a deux ans, ou jamais. Vous finissez par compiler à la main ou par vous en passer.
Open source — licence MIT
Zero Layer est un gestionnaire de paquets universel pour Linux. Il installe des logiciels issus de 13 écosystèmes sur n'importe quelle distribution en traduisant les binaires à l'installation — et non à l'exécution.
curl -Lo zl https://github.com/polpo21/zero_layer/releases/latest/download/zl-x86_64-unknown-linux-gnu
Un seul binaire. Sans runtime, sans démon, sans dépendances.
Le problème
Chaque distribution a son format, ses dépôts et sa propre idée de l'endroit où doivent aller les fichiers. Le logiciel que vous cherchez est souvent déjà empaqueté — mais pas pour votre système.
Un outil est dans l'AUR, ou seulement en .deb, ou seulement en release GitHub. Votre distro l'a empaqueté il y a deux ans, ou jamais. Vous finissez par compiler à la main ou par vous en passer.
Conteneurs, machines virtuelles et couches de compatibilité résolvent le problème en ajoutant une couche. Vous la payez indéfiniment : latence au démarrage, mémoire, disque, et un runtime qui doit rester actif.
Déposer une archive dans /opt fonctionne jusqu'à ce qu'une bibliothèque bouge. Rien ne suit les fichiers, rien ne connaît les dépendances, et rien ne permet de revenir en arrière proprement.
L'idée
Un binaire Linux n'est pas lié à une distribution : il est lié à quelques faits concrets, à savoir quel éditeur de liens dynamique le charge et où se trouvent ses bibliothèques partagées. Les deux sont inscrits dans le fichier ELF, et les deux peuvent être réécrits.
Zero Layer lit ces champs avec goblin, puis les réécrit avec elb pour qu'ils pointent vers l'éditeur de liens et les chemins réels de votre système. Une seule fois, pendant l'installation.
Ensuite, le binaire est simplement un binaire natif sur votre machine. Pas de shim, pas de script d'enrobage, pas de bac à sable et pas de processus superviseur. D'où le nom : la couche est nulle.
compilé pour Arch
adapté à cette machine
Le même code machine. Il sait simplement où il vit désormais.
Philosophie
Zero Layer assume ses partis pris. Voici les règles auxquelles le code est tenu.
Tout le travail de traduction a lieu une seule fois, pendant l'installation. Ensuite, plus rien ne s'interpose entre votre programme et le noyau.
Architecture, éditeur de liens dynamique, libc, répertoires de bibliothèques et organisation du système de fichiers sont sondés depuis le système en cours, jamais codés en dur.
Chaque installation s'exécute dans une transaction qui enregistre ce qu'elle a touché. Une erreur, où qu'elle survienne, annule toute l'opération.
redb plutôt que SQLite, elb plutôt que patchelf, rustls plutôt qu'OpenSSL. Écrit en Rust ; les rares parties natives (compression, cryptographie) sont intégrées au binaire, il n'y a donc rien d'autre à installer.
Quand un paquet existe dans plusieurs écosystèmes, Zero Layer les affiche tous et vous laisse choisir. Il ne décide jamais en silence à votre place.
Historique, retour arrière, détection des orphelins et simulation sont des fonctions centrales, pas des ajouts tardifs. Vous pouvez toujours voir ce qui s'est passé et l'annuler.
Fonctionnement
Huit étapes séparent votre commande d'un binaire fonctionnel. Chacune est observable avec -v, et la moindre erreur ramène tout en arrière.
Trouve le paquet et parcourt récursivement son arbre de dépendances en détectant les cycles. Si une dépendance manque dans la source principale, toutes les autres sources actives sont interrogées et vous choisissez.
résolution inter-sourcesCinq catégories sont contrôlées avant toute écriture : propriété des fichiers, noms de binaires, sonames de bibliothèques, conflits déclarés et contraintes de version.
5 types de conflitsLes paquets sont récupérés directement depuis leurs dépôts natifs sur quatre threads parallèles, avec barres de progression et nouvelles tentatives automatiques.
4 threads · repriseLes sommes SHA256 sont imposées et les signatures GPG contrôlées lorsque la source les fournit. Une signature invérifiable est signalée différemment d'une signature erronée.
SHA256 + GPGLe format d'archive est détecté et décompressé — deb, rpm, tar, zst, xz, nar, squashfs, zip ou AppImage — puis normalisé vers une arborescence FHS standard.
9 formats d'archiveChaque binaire ELF est analysé, puis son interpréteur et son RUNPATH sont réécrits pour votre système. Les paquets multi-binaires sont traités en parallèle ; les binaires statiques sont laissés intacts, à raison.
goblin + elbLes fichiers sont placés de façon atomique dans une transaction qui consigne chaque fichier, répertoire, lien et ligne de base de données créés. La moindre erreur annule l'ensemble.
atomique · retour arrièreFichiers, dépendances, propriété et l'opération elle-même sont écrits dans une base embarquée : c'est ce qui rend possibles ensuite why, size, doctor et rollback.
redb + grapheFonctionnalités
Tout ce que vous attendez des outils de votre distribution, plus ce qu'ils n'ont jamais eu.
Les binaires ELF sont analysés avec goblin et modifiés avec elb à l'installation. L'éditeur de liens dynamique et le RUNPATH sont réécrits pour votre système : les paquets tournent ensuite à pleine vitesse native.
Toutes les sources actives sont interrogées simultanément, les résultats classés par pertinence, et les variantes binaires de l'AUR détectées automatiquement.
Une installation aboutit ou ne laisse aucune trace. Jamais d'état écrit à moitié.
doctor, audit, why, size, diff et history répondent aux questions que les gestionnaires de paquets laissent d'ordinaire sans réponse.
Installez plusieurs versions côte à côte et basculez entre elles, ou créez un environnement éphémère qui disparaît à la sortie du shell.
Sommes de contrôle et signatures à l'entrée, recherche de CVE via OSV.dev à la sortie, et épinglage pour figer ce que vous ne voulez pas voir bouger.
Sources
Chaque source est un greffon implémentant le même trait. Activez celles que vous voulez par machine, ou filtrez par commande avec --from.
pacmanArch LinuxaurArch User RepositoryaptDebian · UbuntudnfFedora · RHELzypperopenSUSE · SLESapkAlpine LinuxxbpsVoid LinuxportageGentoo binhostnixnixpkgsflatpakFlathubsnapSnapcraft StoreappimageAppImageHubgithubGitHub ReleasesLa disponibilité d'une source dépend de l'accessibilité de l'amont. Le dépôt suit l'état réel de chaque greffon.
Commandes
Un binaire, vingt-cinq commandes, complétions pour bash, zsh et fish.
$ zl install firefox # pick from every source $ zl install firefox --from pacman # force one source $ zl install sharkdp/bat --from github $ zl install python --version 3.12 # side by side $ zl remove firefox --cascade # drop orphaned deps $ zl --dry-run install firefox # preview only $ zl run neofetch # run without installing
$ zl search vim # all sources, in parallel $ zl search vim --exact # exact names only $ zl search vim --from pacman,apt # limit the sweep $ zl info ripgrep # full metadata $ zl list --explicit # what you asked for $ zl sources list # enabled / disabled $ zl sources only pacman aur github
$ zl doctor # full system health check $ zl why libpcre2 # which package pulled it in $ zl size --sort # disk usage, largest first $ zl diff firefox # what an update would change $ zl audit # known CVEs via OSV.dev $ zl cache dedup # hardlink duplicate libs
$ zl history list # every operation, timestamped $ zl history rollback # undo the last one $ zl history rollback 3 # undo the last three $ zl pin firefox # freeze this version $ zl export # write zl-lock.json $ zl import zl-lock.json # reproduce elsewhere
$ zl env shell # throwaway env, dies on exit $ zl env shell myproject # named, persists $ zl env list $ zl env delete myproject $ zl switch python 3.12 # activate another version $ zl completions zsh # bash · zsh · fish
Sous le capot
Une organisation prévisible sur disque, une base de code Rust avec le strict minimum de code natif et une suite de tests exécutée à chaque push.
Tout vit sous un seul répertoire qui vous appartient. Ajoutez bin au PATH et rien d'autre sur le système n'est touché.
~/.local/share/zl/ ├── bin/ symlinks — add to PATH ├── lib/ shared libraries ├── share/ data files ├── etc/ configuration ├── packages/ one dir per name-version ├── cache/ downloads ├── envs/ ephemeral environments └── zl.redb package database
Comparaison
Conteneurs et formats universels résolvent le même problème en isolant le logiciel. Zero Layer le résout en l'adaptant.
| Tool | Approche | Coût à l'exécution | Coût disque | Démon requis |
|---|---|---|---|---|
| Zero Layer | Patch des binaires à l'installation | Aucun | Bibliothèques partagées, dédupliquées | Non |
| Docker / Podman | Image système complète par application | Surcoût de processus et d'espaces de noms | Couches d'image par application | Oui |
| Flatpak | Runtimes embarqués | Bac à sable et indirection des portails | Un runtime par famille d'applications | Oui |
| Snap | Squashfs et confinement | Couche de montage et de confinement | Image compressée par application | Oui |
| Archive manuelle | Décompresser et espérer | Aucun | Ce que vous avez copié | Non |
L'installation manuelle égale Zero Layer sur le surcoût — et perd sur tout le reste : rien n'est suivi, rien ne résout les dépendances, et rien ne peut l'annuler.
Démarrer
Un téléchargement, une ligne dans votre profil shell. Pas besoin d'un gestionnaire de paquets pour installer le gestionnaire de paquets.
La v0.3.1 est publiée, avec des binaires précompilés pour x86_64 et aarch64, glibc et musl. Tout ce qui est décrit sur cette page y figure — aucun compilateur nécessaire. Notes de version →
Récupérez la dernière version pour votre architecture. Utilisez la seconde forme si vous préférez éviter sudo.
$ curl -Lo zl https://github.com/polpo21/zero_layer/releases/latest/download/zl-x86_64-unknown-linux-gnu $ chmod +x zl && sudo mv zl /usr/local/bin/ # or, without sudo: $ mkdir -p ~/.local/bin && mv zl ~/.local/bin/ # other builds: zl-x86_64-unknown-linux-musl, # zl-aarch64-unknown-linux-gnu, zl-aarch64-unknown-linux-musl
Zero Layer place des liens vers les exécutables qu'il installe dans son propre répertoire bin.
# bash (~/.bashrc) or zsh (~/.zshrc) export PATH="$HOME/.local/share/zl/bin:$PATH" # fish fish_add_path ~/.local/share/zl/bin
Omettez --from et Zero Layer cherchera dans toutes les sources actives en vous laissant choisir.
$ zl install ripgrep $ zl install sharkdp/bat --from github $ zl doctor # confirm everything is healthy
Vous préférez le compiler ? Rust 1.90 ou plus récent est requis. cargo build --release →
FAQ
~/.local/share/zl. Root n'intervient que si vous choisissez de placer le binaire zl dans /usr/local/bin, et c'est facultatif.--dry-run.Gratuit et open source sous licence MIT. Sans compte, sans télémétrie, sans démon.