Nix automatise la moitié d'un débogueur de VM
Original : Nix wrote half of my debugger
Pourquoi c'est important
Montre comment Nix peut servir de socle à des outils de débogage déterministes avancés.
Farid Zakaria construit Rewind VM, une VM déterministe pour déboguer les race conditions dans les builds Nix. Il découvre que Nix fournit déjà la moitié des fonctionnalités nécessaires à un débogueur.
Rewind VM est une machine virtuelle déterministe où chaque build Nix est une fonction pure de ses entrées — thread schedule compris. Zakaria l'utilise pour reproduire et résoudre des race conditions, et en développant l'outil (panneau source, stack frames, support gdb, thread lanes), il constate à chaque fois la même chose : la partie difficile est déjà résolue par Nix.
Un débogueur a besoin des entrées exactes du programme, de ses symboles de debug, de ses sources, et d'un moyen pour les partager. C'est précisément ce que fournit une dérivation Nix. La commande `rewind check` rejoue le build sous des schedules perturbés pour identifier le step exact déclenchant le bug — sur un exemple classique de compte bancaire partagé entre deux threads, elle isole la défaillance en 11 secondes au step 3237.
L'identifiant d'un run est un hash de ses entrées, à l'image d'un store path Nix. Rewind vérifie également les hash NAR des sorties contre les binary caches. Résultat : la reproductibilité, la traçabilité des entrées et la distribution des artefacts sont offertes gratuitement par l'infrastructure Nix existante.