The build graph can carry the debugger
Farid Zakaria built Rewind VM to replay Linux work under different thread schedules. His latest field note makes a useful architectural point. A debugger needs the exact program, its inputs, debug symbols, source files, and a way to move that set to another machine. A Nix derivation already describes much of that set.[1]
In the article's bank example, two threads can overwrite each other's deposits. Zakaria reports that the native program lost money in 396 of 1,000 runs on his 16-core laptop. Rewind's perturbed schedules narrowed the deciding change to step 3,237 in 11 seconds. Those are author measurements for one fixture, not general debugger benchmarks.
The useful artifact is not the screenshot of the failure. It is the failure plus everything needed to ask it another question.
Symbols need an address, not a wish
Source views work only when a debugger can connect machine code to the right debug information and source. The elfutils debuginfod service uses build IDs to distribute ELF files, DWARF data, and source over HTTP. GDB has supported it since version 10.1.[3]
Rewind's design document describes a local debuginfod service for Nix separateDebugInfo outputs. Its release files also wire a debug server and kernel symbols into the package. We inspected those implementation paths at revision 2bc7aaeb29ff9fce661656963cf42075c4cd54f8.[2]
Determinism creates a place to stand
Rewind records a run, replays it, and can fork from a chosen step under another schedule. That makes comparisons sharper because the passing and failing runs can share a prefix. The project still has a boundary. It targets x86-64 Linux with readable KVM, and AMD hosts need a documented branch-counter setup.[2]
Do not translate that into "Nix makes every build deterministic" or "a replay proves the root cause." A build recipe can preserve declared inputs while hidden host state, hardware behavior, network access, missing symbols, or a weak test still leave gaps. Record what was captured and what stayed outside the run.
A handoff should survive the original machine
Rewind bookmarks travel with its exported run. That is the right shape for a debugging handoff. Save the run identity, deciding step, observed divergence, source and symbol route, fixture, environment, and the exact command that opens the evidence. Keep interpretation separate from observation.
The forklift below writes that structure. It does not install Rewind, execute a VM, inspect a binary, or prove that a failure replays. Its completed state means four evidence sections were selected for a real handoff.