NixOS 찬양글 - 이게 바로 OS가 나아가야 할 방향 아님?
요약
기사 전체 정리
- Nix 패키지 매니저의 결정론적(deterministic)·재현 가능(reproducible) 모델이 핵심, NixOS는 그 완성형
- OS 전체를 선언적(declarative) DSL 코드 한 곳에서 관리 → 새 컴퓨터 사도 똑같이 재건 가능
- 패키지 실험이 베이스 시스템을 오염시키지 않음 → `nix shell`로 격리 환경에서 뚝딱
- LLM 코딩 에이전트랑 찰떡 궁합 - 에이전트가 알아서 Nix로 격리 환경 구성하고 빌드함
- Docker보다 더 진짜 결정론적인 배포 아티팩트 생성 가능 (`dockerTools.buildLayeredImage`)
왜 NixOS인가? - 상세 내용
핵심 철학: OS가 아니라 패키지 매니저가 진짜임
저자가 NixOS를 사랑하는 이유는 리눅스 배포판 자체가 아니라 Nix 패키지 매니저(Nix package manager)의 철학 때문임. NixOS는 "결정론적이고 재현 가능한 함수형 패키지 매니저"라는 아이디어가 OS 형태로 완성된 것. Nix DSL을 넣으면 항상 동일한 OS가 나오고, 조금씩 바꾸거나 롤백도 가능.
기존 OS는 결국 '상태(state) 더미'가 됨
보통 OS는 시간이 지나면서 패키지 깔고, 설정 건드리고, 랜덤 툴 써보다가 결국 "작동은 하는데 왜 작동하는지 모르는" 상태가 됨. NixOS는 다름 - 상태 더미를 신뢰할 필요 없이, 시스템을 정의하고 빌드할 수 있음.
선언적 설정: 한 곳에서 다 관리
패키지, 설정, 키보드 동작 등을 하나의 선언적 설정으로 관리 가능. 예시:
- GNOME 익스텐션 설치 + GSettings 오버라이드를 코드 몇 줄로
- `keyd` 서비스로 USB 키보드 / 랩탑 키보드 별도 키 매핑
새 컴퓨터 사도 긴 수동 셋업 절차나 여기저기 흩어진 스크립트 없이 단일 소스에서 재건 가능.
안정성과 업그레이드 편안함
NixOS는 역사가 길고 6개월 주기 릴리즈로 예측 가능함. 자동 업데이트 설정해놓으면 OS 업그레이드할 때 보통 느끼는 공포감이 없음. 실험하고 싶으면 unstable 채널도 있음.
실험이 공짜이고 안전함
- `nix shell` / `nix develop`으로 베이스 시스템 건드리지 않고 패키지 테스트
- flake.nix로 의존성·빌드 스텝·결과물을 선언적으로 명시
- 원-오프 스크립트부터 풀 프로젝트까지 완전 격리 환경 구성 가능
macOS / Linux 크로스 플랫폼
macOS와 Linux 모두 같은 패키지 매니저 사용 가능 (FreeBSD 커뮤니티 지원도 있음). 개발 툴링과 의존성 관리가 플랫폼 넘어서도 균일하게 유지됨.
LLM 코딩 에이전트 시대에 특히 갓갓
툴이 엄청나게 빠르게 바뀌는 요즘, 코딩 에이전트들이 특정 버전의 유틸리티·컴파일러·런타임을 필요로 함. Nix 쓴다고 알려주면 에이전트가 알아서 `nix shell`이나 `nix develop`으로 격리 환경 구성함.
구체적 사례: Rust 툴체인 없는 상태에서 음성-텍스트 에이전트 빌드. 에이전트한테 Nix 쓴다고만 했더니:
- Nix 통해 전체 Rust 툴체인 끌어오고
- 격리 셸 안에서 컴파일
- 작동하는 바이너리 생성
- 베이스 시스템 무손상 (`.cargo`, `.rustup`, 오염된 PATH 없음)
Nix 없었으면 `curl | sh`로 rustup 설치하고 시스템을 살짝 영구적으로 오염시켰을 것. 에이전트의 실험을 `nix flake check`로 재현 가능한 아티팩트로 만들 수 있다는 것도 큰 장점.
Docker보다 나은 배포 스토리
Docker가 중요한 문제들을 해결한 건 맞지만, 진짜 결정론적 모델에 비하면 아쉬움이 있음. Nix는:
- `dockerTools.buildLayeredImage`로 더 작고 결정론적인 Docker 이미지 빌드
- 같은 설정이면 다른 컴퓨터에서도 동일한 아티팩트 생성 (아키텍처 지원하면)
- 랩탑, 셸, 프로젝트 의존성, CI 파이프라인, 배포 아티팩트 - 하나의 사고 모델로 통일
결론
저자가 NixOS를 사랑한다고 할 때 진짜 의미는 선언적이고, 재현 가능하고, 되돌릴 수 있고, 안정적인 시스템을 사랑한다는 것. 두려움 없이 실험하고, 드라마 없이 업그레이드하고, LLM 코딩 에이전트 같은 빠르게 움직이는 툴들을 시스템 망칠 걱정 없이 써볼 수 있는 환경.
댓글
댓글
댓글을 불러오는 중...