Aller au contenu

behavior.lock : verrouiller le comportement d'une dépendance, pas seulement son contenu

behavior.lock : verrouiller le comportement d’une dépendance, pas seulement son contenu

Section intitulée « behavior.lock : verrouiller le comportement d’une dépendance, pas seulement son contenu »

Un fichier de verrouillage de dépendances répond à une seule question : ai-je reçu les octets attendus ? Qui met à jour quatre cents paquets un mardi matin en pose une autre : cette version fait-elle quelque chose de nouveau ?

Le format behavior.lock prétend y répondre. Il observe la dépendance pendant la suite de tests, enregistre le profil de ses opérations (fichiers lus et écrits, sockets, processus) et le fige dans un fichier versionné. À la mise à jour, s’il s’est élargi, la mise à jour est refusée jusqu’à revue humaine.

{
"behaviorlock": 1,
"package": "fmt-dates",
"version": "4.2.1",
"captured": { "coverage_pct": 82 },
"profile": {
"fs_read": ["node_modules/fmt-dates/**"],
"fs_write": [], "net_connect": [], "proc_spawn": [],
"env_read": ["TZ", "LANG"], "dyn_load": []
},
"profile_digest": "blake3:4c7a1e9d2b8f0a53"
}
ClasseGravité d’un élargissement
proc_spawn, net_connect, dyn_loadcritique
fs_writeélevée
env_readmoyenne
fs_readfaible

La hiérarchie n’est pas discutable : une bibliothèque de dates qui lit une variable d’environnement est une curiosité ; la même qui ouvre une socket est un incident.

La capture passe par seccomp en mode notification et attribue chaque opération au paquet en remontant la pile d’appels. Sous behaviorlock verify, la suite de tests passe de 41 s à 2 min 10 s : la vérification se fait donc en intégration continue, et une montée de version produit 3 à 40 lignes de différence à relire. Un profil capturé sous 60 % de couverture est déclaré incomparable.

Le taux de faux positifs mesuré sur les dépôts de référence est de 0,4 % des mises à jour. Le gestionnaire de paquets parle lui-même au réseau : il est exclu du périmètre, faute de quoi net_connect apparaîtrait partout.

Le format reconnaît quatre angles morts : code non exécuté en test, code déclenché par condition, détournement d’une opération autorisée, chaîne de construction.