Identité et machine
Distribution, famille, architecture, virtualisation, conteneur ; le matériel (processeur, cœurs, mémoire, cartes graphiques, disques) et les outils de compilation (gcc, clang, rustc, go, python…).
Testez votre programme sur les vrais noyaux des distributions.
Voyez pourquoi il échoue ailleurs.
POURQUOI ÇA CASSE AILLEURS
Un programme qui marche sur votre machine peut casser ailleurs : musl au lieu de glibc, un noyau RHEL 4.18, pas de BTF, perf_event_paranoid à 3, le lockdown activé…
bpf() — et jamais déduites d’un numéro de version, car les noyaux RHEL reçoivent beaucoup de rétroportages.--json, --junit pour la CI et --markdown pour un commentaire de pull request.ENVPROBE / LA SONDE EN DESSOUS
envprobe recense ce qui peut changer le comportement d’un programme, côté utilisateur comme côté noyau. Il fonctionne seul, en lecture seule, et signale les valeurs absentes ou refusées avec leur raison.
Distribution, famille, architecture, virtualisation, conteneur ; le matériel (processeur, cœurs, mémoire, cartes graphiques, disques) et les outils de compilation (gcc, clang, rustc, go, python…).
Version, ligne de commande, configuration (CONFIG_BPF*, KPROBES, DEBUG_INFO_BTF, FUNCTION_TRACER et ftrace dynamique…), modules.
sysctls, LSM, SELinux, AppArmor, lockdown, Secure Boot, capacités, seccomp, espaces de noms utilisateur et RLIMIT_MEMLOCK souple et stricte.
Types de programmes, types de tables et helpers testés avec de vrais appels bpf() ; perf_event_open logiciel et matériel, PMU ; tracefs, kallsyms, BTF.
La libc et sa version, les bibliothèques courantes, l’arborescence FHS (merged-usr, multiarch), /bin/sh, coreutils, init, gestionnaire de paquets, cgroups, XDG.
ok avec la valeur, unavailable avec la raison, denied quand l’accès a été refusé — et privileged signale ce qui change selon les droits du processus.
Du JSON avec un schema_version, et son schéma publié avec le code.
envprobe schema
Comparez l’espace utilisateur d’une autre distribution à partir de son système de fichiers extrait, dans des espaces de noms utilisateur, montage et pid, sans root. Le noyau reste celui de la machine hôte.
scripts/probe-rootfs.sh <rootfs> <envprobe> --json
Compilé avec musl : envprobe tourne tel quel dans n’importe quelle machine virtuelle ou conteneur x86_64.
D’UN FICHIER TOML À UN VERDICT
Décrivez les cibles une fois ; distroproof up les démarre en parallèle et vous dit ce qui diffère là où ça échoue.
DANS LE TERMINAL
Pas « ça a cassé sur Ubuntu 18.04 » — mais quelle différence, parmi toutes, en est la cause probable.
distroproof upLINUX[ubuntu-18.04] failed (exit code 1) compared with ubuntu-22.04: 65 significant differences likely cause: btf.vmlinux: present, 5286152 bytes → unavailable (/sys/kernel/btf/vmlinux missing) also: kernel.CONFIG_DEBUG_INFO_BTF: y → missing from config
Une cible en échec comparée à la plus proche qui réussit. Sortie du programme, en anglais.
Exemples tirés de la référence de distroproof. file_caps donne des capacités au binaire installé après la préparation ; collect rapporte des fichiers de résultats pour chaque cible. La préparation et la commande reçoivent DP_TARGET et DP_IMAGE. L’interface du terminal ajoute les journaux en direct, les différences entre rapports et une console.
CIBLES / LES NOYAUX QU’IL DÉMARRE
Les images cloud officielles, sur leurs propres noyaux. Les versions ci-dessous ont été observées lors de l’étude de cas d’octobre 2026 ; les images en continu et quotidiennes changent.
| Image | Noyau observé | Remarque |
|---|---|---|
debian-10 · 11 · 12 · 13 | 4.19 · 5.10 · 6.1 · 6.12 | 4.19 sans BTF ; 13 démarre en UEFI |
ubuntu-18.04 · 20.04 · 22.04 · 24.04 | 4.15 · 5.4 · 5.15 · 6.8 | 4.15 sans BTF |
rocky-8 · 9 | 4.18 · 5.14 | noyaux RHEL avec rétroportages ; 9 démarre en UEFI |
debian-sid | 7.2.11 | image quotidienne ; UEFI |
fedora-previous · fedora-latest | 6.17 · 6.19 (Fedora 43 · 44) | versions résolues en ligne |
arch | 7.2.9 lors de l’étude de cas | en continu |
gentoo | 6.18 dist-kernel | OpenRC ; UEFI |
alpine | 6.18 virt | musl, busybox |
nixos | 6.12 (NixOS 25.05) | l’image Proxmox de Hydra ; pas de chemins FHS |
aarch64 : debian-13 · ubuntu-24.04 · fedora-latest | leurs propres noyaux arm64 | émulés sur une machine x86_64 |
La machine hôte a besoin de qemu-system-x86_64, qemu-img, curl, de KVM (sinon TCG, sans /dev/kvm) et d’OVMF pour les images uniquement UEFI.
EN PRATIQUE / LES PREUVES
Choisissez une cible pour lire ce qui s’est passé : le problème, la découverte et le résultat. Chaque histoire cite ses preuves et l’étendue de sa validation.
OPEN SOURCE / CONÇU POUR LINUX
Téléchargez les binaires statiques, puis lancez votre première cible.
v=v0.1.0 t=x86_64-unknown-linux-musl curl -fLO https://github.com/devutils-org/distroproof/releases/download/$v/distroproof-$v-$t.tar.gz gh attestation verify distroproof-$v-$t.tar.gz --repo devutils-org/distroproof tar xzf distroproof-$v-$t.tar.gz && export PATH="$PWD/distroproof-$v-$t:$PATH" # then distroproof run --target rocky-8 -- envprobe --json > rocky8.json distroproof up # the matrix in distroproof.toml