---
title: "Nix on Windows PoC: ValidationOS VM에 Nix 패키지 매니저 탑재"
published: 2026-03-12T23:58:52.000Z
canonical: https://jeff.news/article/488
---
# Nix on Windows PoC: ValidationOS VM에 Nix 패키지 매니저 탑재

Windows ValidationOS VM 이미지에 크로스 컴파일된 Nix를 사전 설치하는 PoC. 빌드 중 VM 기동 없이 guestfish로 파일을 주입하며, shell32.dll 부재 문제는 환경변수를 읽는 스텁 DLL로 해결함.

Windows ValidationOS VM 이미지에 크로스 컴파일된 Nix 패키지 매니저를 미리 설치해서 부팅하는 PoC임. Windows 라이선스 불필요 — ValidationOS는 Microsoft가 테스트용으로 제공하는 무료 최소 Windows 환경임.

빌드 과정이 결정적(deterministic)임. 빌드 중 VM을 기동하지 않고 guestfish로 디스크 이미지에 직접 파일을 주입함. guestfish와 chntpw로 방화벽 비활성화, SSH 키 설정, Winlogon 레지스트리 패치(`cmd.exe`가 `C:\nix\bin`에서 열리도록) 등을 오프라인으로 처리함.

ValidationOS는 약 1GB 크기에 수 초 만에 부팅되는 경량 Windows PE 환경이고 SSH가 미리 설정되어 있음. 데모 derivation은 `cmd.exe`로 `echo Hello`를 실행하고 출력을 Nix store에 기록하는 것임.

한 가지 재밌는 해결책이 있음. ValidationOS에 `shell32.dll`이 없는데 Nix가 `SHGetKnownFolderPath`(AppData, ProgramData 등 경로 조회)를 위해 이걸 필요로 함. Nix를 패치하는 대신 환경변수를 읽어 반환하는 최소한의 스텁 DLL을 크로스 컴파일해서 `nix.exe` 옆에 배치함. Windows DLL 로더가 이걸 먼저 잡아감.

## 핵심 포인트

- ValidationOS는 약 1GB의 무료 최소 Windows PE 환경으로 수 초 만에 부팅됨
- 빌드가 결정적(deterministic) — VM 기동 없이 guestfish로 디스크 이미지에 직접 파일 주입
- shell32.dll 부재를 환경변수 기반 스텁 DLL로 대체해 Nix의 SHGetKnownFolderPath 호출 해결
- 데모 derivation은 cmd.exe로 echo Hello 실행 후 Nix store에 출력 기록

## 인사이트

Windows에서 Nix를 돌리는 것 자체보다, 빌드 과정에서 VM을 전혀 기동하지 않는 결정적 빌드 접근이 주목할 만함.
