Nix가 디버거 절반을 만들어줬다

원제: Nix wrote half of my debugger

왜 중요한가

Nix의 재현 가능성 인프라가 디버깅·테스팅 도구 개발 비용을 구조적으로 낮출 수 있음을 실증한 사례다.

개발자 Farid Zakaria가 2026년 10월 7일, Nix 빌드 시스템을 활용해 결정론적 VM 기반 디버거 'Rewind VM'을 구축했다고 밝혔다. 16코어 노트북에서 1,000회 실행 중 396회 경쟁 조건(race condition)을 재현하고, 11초 만에 문제 발생 시점을 단일 스텝(step 3237)으로 좁혔다.

Zakaria는 Nix 빌드의 모든 실행이 입력값과 스레드 스케줄의 순수 함수(pure function)가 되는 결정론적 VM 'Rewind VM'을 개발하면서, 디버거에 필요한 핵심 기능들이 이미 Nix 안에 구현되어 있다는 사실을 반복적으로 발견했다.

디버거가 갖춰야 할 요소—프로그램의 정확한 입력값, 디버그 심볼, 소스 코드, 의존 라이브러리 소스, 그리고 타인이 동일 환경을 재현할 수 있는 방법—는 Nix의 derivation 개념이 이미 해결한 문제였다. Nix는 소스, 컴파일러, 라이브러리, 커널, VM 설정까지 derivation 입력으로 추적하며, Rewind는 이 클로저(closure)를 읽기 전용 erofs 이미지로 패키징해 VM을 부팅한다.

실제 예시로 두 스레드가 하나의 계좌에 동시에 입금하는 고전적인 race condition을 소개했다. 단일 코어 환경에서는 1,000회 모두 통과했지만, Rewind가 스케줄을 교란(perturb)하자 step 3237에서 재스케줄이 발생했을 때만 실패함을 `rewind check` 명령으로 11초 안에 특정했다. 실행 ID는 입력값 해시로 결정되며, `rewind show`로 동일 실행을 재현하는 명령을 출력할 수 있다. 빌드 성공 시에는 게스트가 각 출력의 NAR 해시를 보고하고, `.narinfo`만 조회해 바이너리 캐시와 대조 검증한다.

출처

fzakaria.com — 원문 읽기 →