본문으로 이동

Nix (패키지 관리자)

위키백과, 우리 모두의 백과사전.
Nix
원저자엘코 돌스트라(Eelco Dolstra)
발표일2003년 6월 15일(22년 전)(2003-06-15)
안정화 버전
2.26.3[1] 위키데이터에서 편집하기 / 2025년 3월 6일(4개월 전)(2025년 3월 6일)
저장소
프로그래밍 언어C++,[2] 펄,[2] 셸 스크립트,[2] Autoconf,[2] 러스트,[2] C,[2] XML,[2] make[2] 위키데이터에서 편집하기
플랫폼리눅스, 다윈, FreeBSD,[3] OpenBSD[4] 위키데이터에서 편집하기
종류자유-오픈 소스 소프트웨어, 프로그래밍 언어 구현, 참조 구현, 인터프리터 위키데이터에서 편집하기
웹사이트nixos.org

Nix(닉스)는 크로스 플랫폼 패키지 관리자로, 유닉스 계열 시스템을 인스턴스화하고 관리하는 도구이다. 2003년[5]에 엘코 돌스트라(Eelco Dolstra)가 개발했다.

접근 방식

[편집]

Nix 패키지 관리자는 소프트웨어 패키지가 각각 변경 불가능한 내용을 가진 고유한 디렉토리에 설치되는 모델을 사용한다. 이 디렉토리 이름은 Nix가 관리하는 다른 패키지를 포함하여 패키지의 모든 종속성을 고려하는 암호화 해시에 해당한다. 결과적으로 Nix 패키지 이름은 내용 식별성을 가지는데, 이는 동일한 이름을 가진 패키지는 동일한 입력과 동일한 빌드 플랫폼을 가지며 따라서 동일한 빌드 결과를 가지기 때문이다.[6]

구현

[편집]

Nix의 패키지 레시피는 목적에 맞게 제작된 "Nix 언어"로 작성된다. 이 언어는 선언적이고, 순수 함수형이며, 느긋하게 평가되고, 동적 타이핑되는 프로그래밍 언어이다.[7] Nix 언어의 특징으로는 "컨텍스트"가 있는 문자열, 문자열 보간, 일급 파일 시스템 경로, 그리고 "들여쓰기된 문자열"이 있으며, 이들을 결합하여 새 파일의 내용을 지정할 때 파일 시스템 데이터 간의 종속성을 간결하게 표현할 수 있다.

Nix 언어에 선언된 파일 간의 종속성은 자동으로 추적되어 "Nix 저장소"에 영구적으로 저장된다.[8] Nix 저장소의 새 파일은 "파생"을 통해 생성된다. 파생은 실행 파일, 호출을 위한 인수 및 환경 변수(execve 참조), 그리고 Nix 저장소에서 읽을 다른 파일을 지정하는 영구적인 데이터 구조이다. 이 실행 파일은 명시적으로 지정된 입력 파일 외에는 접근을 금지하고 지정된 출력 경로에만 쓰기를 허용하는 샌드박스에서 실행된다. Nix는 패키지 디렉토리 이름에 사용되는 고유한 해시를 스캔하여 출력 파일의 종속성 정보를 보존한다.[6]

자동 참조 추적은 패키지의 무결성을 보장하며, 심지어 머신 간에 전송될 때도 마찬가지다. 또한 다른 패키지가 의존하지 않는 사용되지 않는 패키지의 가비지 컬렉션을 가능하게 한다. 더 큰 저장 공간이 필요하지만, Nix의 모든 업그레이드는 원자적이며 효율적인 롤백이 가능하다. 고유한 디렉토리 이름을 통해 공유 라이브러리의 다른 버전을 가진 많은 패키지를 설치할 수 있으며, 소위 의존성 지옥을 제거한다고 주장된다.[9] 이는 또한 여러 사용자가 관리자 권한 없이도 동일한 시스템에 안전하게 소프트웨어를 설치할 수 있도록 한다. 결과적으로 Nix 패키지 관리 및 배포 모델은 더 신뢰할 수 있고, 재현 가능하며, 이식 가능한 패키지를 표방한다.[6][10]

Nix는 리눅스, macOS, WSL을 완벽하게 지원하며, 다른 패키지 관리자와 나란히 안전하게 설치할 수 있다.

Nixpkgs

[편집]

Nixpkgs는 Nix 패키지 관리자를 기반으로 구축된 패키지 저장소이다. Repology에 따르면, 2025년 January월 기준 122,000개 이상의 패키지를 포함하고 있으며[11] 다른 어떤 패키지 저장소보다 최신 패키지 수가 많다.[12] Nixpkgs가 지원하는 운영 체제는 주로 리눅스와 다윈이며, 윈도우 및 BSD 변형에 대한 일부 지원도 있다. 지원되는 CPU 아키텍처에는 64비트 x86ARM이 포함된다. 이러한 아키텍처용 패키지는 Hydra라는 지속적 통합 서비스를 사용하여 정기적으로 빌드되며,[13] 빌드 결과는 공개 바이너리 캐시에 업로드된다.[14] Nix가 패키지를 설치할 때, 이 캐시를 확인하고 바이너리 패키지를 다운로드하여 로컬 빌드를 피한다.

Nixpkgs는 Git 저장소 하나에서 깃허브를 통해 개발된다.[15] 패키지 외에도 NixOS의 소스 코드도 포함한다.

Nix를 사용하는 프로젝트

[편집]

NixOS[16]리눅스 커널을 포함한 전체 시스템 구성을 관리하기 위해 Nix를 사용하는 리눅스 배포판이다.[17]

Nix는 CERNLHCb 실험에서 소프트웨어 패키징 및 배포에 사용된다.[18] Nix는 분산 소프트웨어 개발 플랫폼인 Replit[19]Firebase Studio의 기반이다.[20]

포크 및 대체 구현

[편집]

2021년에는 Tvix라는 이름의 재구현이 발표되었는데,[21] 모듈화, Nixpkgs와의 완전한 호환성, 향상된 평가기 성능을 목표로 한다. 2024년 현재 Tvix는 평가기[22]와 저장소 구현을 가지고 있지만,[23] 저자들은 프로젝트가 아직 안정적이거나 프로덕션 사용에 적합하다고 생각하지 않는다.[24] Tvix는 주로 Rust로 작성되었다.[25]

2024년에는 자원봉사자 팀이 Lix의 첫 번째 버전을 출시했는데,[26] 이는 정확성과 호환성에 중점을 둔 Nix의 포크이며 Meson 빌드 자동화 시스템을 사용한다. 이 프로젝트는 코드를 점진적으로 Rust로 재작성할 계획이다.[26]

같이 보기

[편집]
  • GNU Guix: 또 다른 선언형 패키지 관리자이자 Nix의 초기 클론으로, 구성 및 사용자 정의에 GNU 가일을 사용한다.
  • Maak: make와 유사한 빌드 자동화 유틸리티이자 Nix의 초기 전신
  • 런북 자동화

각주

[편집]
  1. “Release 2.26.3”. 2025년 3월 6일. 2025년 3월 14일에 확인함. 
  2. “The Nix Open Source Project on Open Hub: Languages Page”. 《Ohloh. 2024년 5월 18일에 확인함. 
  3. “NixBSD”. 2025년 3월 15일에 확인함. 
  4. “OpenBSD Ports Readme: port sysutils/nix”. 2025년 3월 15일에 확인함. 
  5. Dolstra, Eelco (2003). 〈Integrating Software Construction and Software Deployment〉 (PDF). 《Software Configuration Management》. Lecture Notes in Computer Science 2649. 102–117쪽. doi:10.1007/3-540-39195-9_8. ISBN 978-3-540-14036-8. 2019년 4월 21일에 원본 문서 (PDF)에서 보존된 문서. 
  6. Dolstra, Eelco; de Jonge, Merijn; Visser, Eelco (November 2004). 〈Nix: A Safe and Policy-Free System for Software Deployment〉 (PDF). 《LISA '04: Proceedings of the 18th USENIX Conference on System Administration》. 79–92쪽. 2023년 7월 11일에 확인함. 
  7. “Nix Reference Manual: Nix Language”. 2024년 3월 4일에 확인함. 
  8. “Nix Reference Manual: Nix Store”. 2024년 3월 4일. 
  9. Prins, Pjotr; Suresh, Jeeva; Dolstra, Eelco (2008년 12월 22일). “Nix fixes dependency hell on all Linux distributions”. 《Linux.com》. 2023년 7월 11일에 확인함. 
  10. Dolstra, Eelco (2006). 《The Purely Functional Software Deployment Model》 (PDF) (Ph.D.). Utrecht University. 2023년 7월 11일에 확인함. 
  11. “Nixpkgs unstable repository information - Repology”. 2025년 1월 15일에 원본 문서에서 보존된 문서. 
  12. “Repository statistics - Repology”. 
  13. “RFC 0046 - Platform Support Tiers”. 《GitHub》. 
  14. “NixOS official binary cache”. 
  15. “Nixpkgs github repository”. 《GitHub》. 
  16. “Nix & NixOS | Reproducible builds and deployments”. 《nixos.org》. 
  17. Dolstra, Eelco; Löh, Andres; Pierron, Nicolas (September 2008). 《NixOS: A Purely Functional Linux Distribution》 (PDF). ICFP 2008: 13th ACM SIGPLAN International Conference on Functional Programming. 367–378쪽. 
  18. Burr, Chris; Clemencic, Marco; Couturier, Ben (2018). “Software packaging and distribution for LHCb using Nix” (PDF). 
  19. Replit (2023년 5월 25일). “Replit — Super Colliding Nix Stores: Nix Flakes for Millions of Developers”. 《Replit Blog》. 2024년 3월 5일에 확인함. 
  20. “Customize your IDX workspace | Project IDX”. 《Google for Developers》 (영어). 2024년 3월 5일에 확인함. 
  21. “TVL's blog: Tvix: We are rewriting Nix”. 《tvl.fyi》. 2024년 5월 19일에 확인함. 
  22. “TVL's blog: Tvix Status - September '22”. 《tvl.fyi》. 2024년 5월 19일에 확인함. 
  23. “TVL's blog: Tvix Status - February '24”. 《tvl.fyi》. 2024년 5월 19일에 확인함. 
  24. 《tvlfyi/tvix》, The Virus Lounge, 2024년 5월 18일, 2024년 5월 19일에 확인함 
  25. “tvix - depot - Sourcegraph”. 《cs.tvl.fyi》. 2024년 5월 19일에 확인함. 
  26. “Lix | About Lix”. 《lix.systems》. 2024년 5월 19일에 확인함. 

외부 링크

[편집]