Nix (패키지 관리자)

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

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

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

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

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

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

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

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

 Nix를 사용하는 프로젝트 
NixOS는 리눅스 커널을 포함한 전체 시스템 구성을 관리하기 위해 Nix를 사용하는 리눅스 배포판이다.

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

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

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

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

 각주 

 외부 링크 

 개발자 간의 토론 데비안 메일링 리스트 (2008)

분류:함수형 프로그래밍
분류:유닉스 소프트웨어
분류:자유 프로그래밍 도구
분류:자유 패키지 관리 시스템
분류:C++로 작성된 자유 소프트웨어
분류:리눅스 패키지 관리 관련 소프트웨어
분류:데이터 관리 소프트웨어
분류:2012년 소프트웨어
분류:LGPL 라이선스 소프트웨어