Cinq outils.
Qui se vérifient.

distroproof éprouve Omniscient et xpac sur de vrais noyaux. xpac installe ce à quoi Omniscient se compare.
Omniscient mesure VMAnyware, et atfq est confronté à procfs.

LE PRINCIPE

Aucun outil ne dépend d’un autre.
Ils se rencontrent par des fichiers.

Aucun des cinq n’inclut le code d’un autre. Ils se croisent là où la sortie d’un outil devient l’entrée d’un autre : un rapport JSON, une matrice TOML, un code de sortie, une réponse MCP. Chaque croisement est un test qui peut échouer.

Un outil en teste un autre.
distroproof démarre les distributions ; Omniscient et xpac sont ce qu’il y fait tourner. Chaque campagne a trouvé des défauts que la machine de développement n’avait jamais montrés, et a renvoyé des corrections à distroproof.
Seulement des machines jetables.
Chaque croisement tourne dans une machine virtuelle QEMU jetable, avec un utilisateur ordinaire. Rien n’installe de paquets sur la machine hôte, et la chaîne ne touche pas à Proxmox.
Des preuves, pas des promesses.
Chaque croisement compare la réponse d’un outil à une lecture indépendante : envprobe face aux refus d’Omniscient, /proc/meminfo face à atfq, un second serveur face au verrou de VMAnyware.

LES CROISEMENTS / DÉJÀ EN SERVICE

Ce qui se croise déjà,
et ce que ça a trouvé.

Huit croisements sont déjà en service. Chacun nomme les outils qu’il relie et ce qui en est sorti.

01 / DISTROPROOF → OMNISCIENT

Un outil du noyau éprouvé sur 33 cibles.

Les versions installées d’Omniscient ont tourné sur 17 images de distributions avec leurs propres noyaux, 5 variantes, 3 images arm64 et 8 conteneurs sans root. distroproof a trouvé 27 défauts : 13 dans l’outil, 14 dans ses tests. Lors de la première exécution, le noyau a refusé au démarrage 158 exécutions de sources qu’Omniscient disait utilisables ; après les corrections, plus aucune. La dernière exécution a réussi sur les 25 cibles (33 cellules), et chaque raison de refus concordait avec la lecture d’envprobe sur la même machine.

$ distroproof up --no-tui --jobs 4 --json target/matrix/distroproof.json
$ cargo test --test portability  # the judges, over every cell
02 / OMNISCIENT → DISTROPROOF

L’outil testé a amélioré le testeur.

La campagne a profité aux deux. distroproof a gagné 3 images (Gentoo, Debian sid, Fedora 43), 2 corrections de démarrage et 3 options [run], dont file_caps et collect. envprobe a gagné 2 faits, les limites memlock et la configuration du traceur de fonctions, parce que deux échecs d’Omniscient en avaient besoin pour être expliqués.

[run]
file_caps = { "/opt/omn/bin/omn" = ["bpf", "perfmon", "net_raw"] }
collect = ["cross-tools.json", "witnesses.json"]
03 / DISTROPROOF → XPAC

Un gestionnaire de paquets testé sur 16 images.

xpac suit la matrice des versions installées d’Omniscient. Ses versions GNU et musl sont installées sur 16 images de distributions, plus des variantes root et lockdown. Chaque machine renvoie un cell.json que la machine hôte vérifie. Les vraies installations et suppressions ne tournent que dans de nouvelles copies jetables.

$ distroproof up --no-tui --jobs 4 --json dist/matrix/inspection.json
$ python3 scripts/distroproof/check.py dist/matrix/inspection.json
04 / XPAC → OMNISCIENT

xpac installe les outils de référence.

Omniscient compare ses chiffres à ceux de perf, bpftrace, bcc, strace, sysstat et valgrind. Dans chaque machine de la chaîne, xpac installe ces outils de référence avec le propre gestionnaire de paquets de la distribution : APT, DNF, Pacman, apk ou Portage. Chaque installation est consignée dans xpac-history.json.

05 / OMNISCIENT → VMANYWARE

Un vrai serveur, mesuré en direct.

La chaîne démarre le serveur de VMAnyware, enregistre une définition, reçoit un refus 403 pour une écriture venue d’un navigateur, et vérifie qu’un second serveur refuse la base de données verrouillée. Omniscient s’attache au serveur en marche et relève mem.rss toutes les 100 ms, sans droits supplémentaires.

$ omn mem.rss --pid $SERVER -m poll@100ms -e timeline,summary -d 1s --format json
06 / ATFQ ↔ PROCFS · MCP

Une explication confrontée à la machine.

Dans chaque machine, atfq probe mem.summary doit correspondre à /proc/meminfo à l’octet près. La chaîne lance aussi atfq mcp et vérifie que ses cinq outils sont là et déclarent toujours readOnlyHint.

$ atfq probe mem.summary --json
$ atfq mcp  # lookup, search, toc, run_probe, list_probes
07 / OMNISCIENT → ATFQ, XPAC, ENVPROBE

Les promesses de lecture seule, confrontées au noyau.

Omniscient lance chaque outil et suit, depuis le noyau, chaque processus qu’il démarre. Les neuf thèmes d’atfq, l’inventaire et le plan de xpac face à Pacman, et envprobe --json n’ont chacun créé, renommé, supprimé ni synchronisé aucun fichier. Aucun n’a ouvert de connexion TCP, et aucun n’a lancé d’autre programme que les siens. atfq n’a ouvert aucune socket IPv4 ou IPv6 : seulement netlink, pour lire les interfaces. Les onze vérifications sont passées le 21 octobre 2026.

$ python3 scripts/devutils/promises.py
atfq      PASS  no file changed        1464 opens, 8084 reads
atfq      PASS  no IPv4/IPv6 socket    netlink only
xpac      PASS  only its own programs  xpac, pacman, pacman-conf
envprobe  PASS  no TCP connection      19 ms of cpu
08 / OMNISCIENT → CE SITE

Le site, mesuré avant et après.

La même visite de 28 secondes de la page Design, trois fois sur la version d’avant le travail sur le site et trois fois sur celle d’après, pendant qu’Omniscient comptait le temps processeur du navigateur et l’énergie de la carte graphique. Il a refusé de tracer le temps processeur sur cette machine en disant pourquoi (tracefs demande CAP_SYS_ADMIN) ; l’exécution le compte donc à la place. Les résultats sont juste en dessous.

$ omn -f bench/site.yml --format json --program-stderr visit.err > visit.json

CE SITE, MESURÉ / 20 OCTOBRE 2026

Sans accélération graphique,
de 10 à 60 images par seconde.

La version d’avant le travail sur le site (2e965bc) face à celle d’après (3e96fca), sur la même machine. Sans accélération graphique, l’ancienne 3D tournait en logiciel et ralentissait toute la page. Sur une carte graphique rapide, on ne peut pas distinguer les deux versions. La version d’après fait toujours glisser le logo d’une section à l’autre pendant le défilement ; le passage à TypeScript (628cf1f) l’avait laissé sur l’accueil, et il glisse de nouveau depuis le 21 octobre 2026.

MesureAvantAprèsMesuré par
sans GPU · images9 à 10 par seconde, une image toutes les 100 ms60 par seconde, une image toutes les 16,7 msl’horloge d’images de la page elle-même, 3 visites chacune
sans GPU · temps processeur262 à 268 s pour une visite de 28 s64 à 164 somn cpu.oncpu_time, en mode comptage : le navigateur et tous ses processus
RTX 2080 Ti · images60 par seconde60 par secondel’horloge d’images de la page elle-même
RTX 2080 Ti · énergie33–34 W en 1080p, 40–42 W en 2560×1440 ×233–34 W, 43–44 Womn gpu.power : dans le bruit, des exécutions isolées ont atteint 60 W dans les deux cas
chargement · Lighthouseperformance 66–70, 1,6 à 6,2 s bloqué98–100, 0 à 40 ms bloquéLighthouse, profil mobile
chargement · décalage de mise en page0,096 sur les pages des outils0Lighthouse

Chromium piloté par Playwright, sans fenêtre, en 1920×1080 sauf indication contraire ; les visites alternaient entre les deux versions. L’énergie est celle de toute la carte, et la carte change de fréquence d’une exécution à l’autre : l’énergie ne permet donc pas de distinguer les deux versions ici. La fluidité ressentie dans Firefox n’a pas été mesurée ici. Pour reproduire : bench/browse.ts et bench/site.yml dans le dépôt du site.

LA CHAÎNE / UNE MACHINE, QUATRE OUTILS

Un seul fichier de matrice.
Chaque outil installé comme le ferait un utilisateur.

La chaîne est une seule matrice distroproof, distroproof-devutils.toml, rangée dans le dépôt d’Omniscient. Chaque machine reçoit des versions figées des outils et les lance avec un utilisateur ordinaire.

DERNIÈRES EXÉCUTIONS / 21 OCTOBRE 2026

Neuf cibles.
Toutes les vérifications tiennent.

La dernière exécution sur chaque cible : les vérifications de la chaîne, les paquets que xpac a installés pour les outils de référence, et les paires de référence d’Omniscient. La chaîne compte désormais onze vérifications, la dernière exécutée pour la première fois le 21 octobre : atfq et envprobe doivent décrire la machine de la même façon. Toutes les cibles ont passé les onze vérifications, avec 132 paires.

CibleExécutionNoyauInstallés par xpacPaires de référence
chain-debian-1221 oct. · 11 vérifications6.120 paquets, APT70 tenues · 61 ignorées · 1 écart
chain-debian-1321 oct. · 11 vérifications6.1220 paquets, APT74 tenues · 57 ignorées · 1 écart
chain-ubuntu-24.0421 oct. · 11 vérifications6.821 paquets, APT79 tenues · 52 ignorées · 1 écart
chain-ubuntu-18.0421 oct. · 11 vérifications4.1518 paquets, APT36 tenues · 95 ignorées · 1 écart
chain-fedora-latest21 oct. · 11 vérifications6.1919 paquets, DNF95 tenues · 36 ignorées · 1 écart
chain-rocky-921 oct. · 11 vérifications5.1416 paquets, DNF81 tenues · 50 ignorées · 1 écart
chain-arch21 oct. · 11 vérifications7.218 paquets, Pacman95 tenues · 36 ignorées · 1 écart
chain-alpine21 oct. · 11 vérifications6.1820 paquets, apk83 tenues · 48 ignorées · 1 écart
chain-gentoo21 oct. · 11 vérifications6.1813 paquets, Portage46 tenues · 85 ignorées · 1 écart

Une paire tient quand Omniscient et l’outil de référence concordent dans la tolérance annoncée. Une paire est ignorée quand la machine ne peut pas la servir, et l’ignorer en donne la raison : les noyaux et les outils empaquetés diffèrent d’une distribution à l’autre. L’écart, le même sur chaque cible, est une différence connue et non un échec : memleak compte la mémoire allouée avec mmap, et la mesure du tas d’Omniscient non. La chaîne a trouvé un défaut de xpac sur Gentoo, corrigé depuis : deux exécutions d’emerge --pretend listent le même plan dans un ordre différent, et xpac refusait bpftrace comme un plan périmé. Deux problèmes restent en dehors des outils. Le dépôt binaire de Gentoo a compilé bcc et bpftrace avec un autre LLVM, si bien qu’aucun des deux ne se charge ; sur Debian 13, bcc ne compile pas ses programmes. Les paires d’Omniscient comptaient un tel outil comme un désaccord ; elles l’ignorent désormais avec sa raison, ce qui explique que Gentoo ignore 85 paires, dont toutes celles de bpftrace. Sur Debian 13, une médiane de biolatency sortie d’un cran de sa marge lors de l’exécution précédente a tenu à la relance.

LE CONTRAT COMMUN

Ce qui les rend
combinables.

Les croisements fonctionnent parce que les outils suivent les mêmes règles : la sortie de l’un peut être vérifiée par un autre.

{ }01 / JSON

Une sortie structurée

Chaque outil a une sortie --json. envprobe et le rapport de la chaîne portent un schema_version.

envprobe --json
⊘02 / REFUS

Un refus donne sa raison

Une source d’Omniscient indisponible, une sonde atfq absente, une valeur envprobe denied : chacune dit pourquoi, pour qu’un autre outil puisse vérifier cette raison.

✓03 / RELECTURE

Les changements sont explicites

xpac montre un plan avant d’agir. VMAnyware montre un aperçu avant de créer quoi que ce soit. atfq et envprobe ne font que lire.

◇04 / MCP

Les agents aussi

atfq mcp et omn-mcp d’Omniscient fournissent des outils en lecture seule sur stdio. Un agent peut demander à atfq ce que veut dire un chiffre, et à Omniscient ce qu’il a mesuré.

▥05 / APPARENCE

Une même famille d’interfaces

L’interface terminal de xpac reprend les deux panneaux d’atfq et les indices de confiance d’Omniscient. Le script de démo d’atfq suit le format de celui d’Omniscient.

⧉06 / JETABLE

Testé là où ça peut casser

Les transactions de paquets, les capacités et les sondes du noyau tournent dans des machines virtuelles jetables, sur le propre noyau de la distribution, jamais sur la machine du développeur.

LANCER LA CHAÎNE

Quatre outils,
une commande.

La chaîne se trouve dans le dépôt d’Omniscient, privé pour l’instant. Voici les commandes qu’elle lance.

DEPUIS UNE COPIE D’OMNISCIENT, AVEC XPAC, ATFQ ET VMANYWARE À CÔTÉ
sh scripts/distroproof/reference-build.sh
sh scripts/distroproof/devutils-build.sh
distroproof up -f distroproof-devutils.toml --no-tui --pin-cache --jobs 4 \
  --json target/matrix/devutils.json
Neuf cibles, toutes les vérifications tiennent · Omniscient est privé pour l’instant · MIT / Apache-2.0