nixpkgs-multiverse: 지금까지 존재한 모든 패키지 버전

2 hours ago 2

nixpkgs-multiverse는 과거 Nixpkgs 커밋을 일일이 찾아 고정하지 않아도, 하나의 flake 입력에서 지금까지 존재한 모든 패키지 버전에 접근하게 해줌 일반 flake 입력은 사용 여부와 관계없이 즉시 가져오지만, 이 프로젝트는 builtins.fetchTree와 narHash로 실제 참조한 리비전만 지연 로딩함 2017~2026년 Hydra에서 빌드·캐시된 1,393개 리비전과 289,521개 (속성, 버전) 쌍을 5.18MB JSON 인덱스로 관리함 사용하지 않는 nixpkgs 입력 5개는 평가 전에 26초를 소비한 반면, 1,393개 리비전을 제공하는 nixpkgs-multiverse의 JSON 파싱은 0.20초가 걸림 약 200줄의 Nix와 5MB 규모 JSON만으로 버전·릴리스·날짜·커밋별 Nixpkgs를 한 셸이나 빌드 환경에서 조합하며, 패키지를 직접 빌드·미러링·호스팅하지 않음 패키지 버전 고정이 만드는 문제 NixOS 구성의 nixpkgs 릴리스를 올리면 의존하던 특정 패키지 버전이 사라지거나, 버전 상승으로 기존 도구가 깨질 수 있음 원하는 버전이 현재 nixpkgs에 없다면 해당 커밋을 찾아 별도 입력으로 고정해야 함 nixhub.io와 lazamar’s search는 해당 버전이 포함된 커밋 검색을 지원함 최신 패키지를 쉽게 가져오려고 unstable 패키지 집합을 주입하는 오버레이를 유지하기도 함 버전을 고정할 때마다 flake 파일에 완전한 nixpkgs 입력이 하나씩 추가됨 flake 입력은 사용 여부와 무관하게 즉시 가져와 구체화되므로, 출력이 첫 번째 입력만 참조해도 세 개의 nixpkgs 입력이 모두 처리됨 Nix는 특정 패키지 버전을 재현하는 클로저를 쉽게 만들지만, Nixpkgs에서 나머지 패키지를 갱신하면서 하나만 이전 버전으로 유지하기는 어려움 모든 Nixpkgs 버전을 하나의 입력으로 제공 nixpkgs-multiverse는 각각의 Nixpkgs 입력을 별도 세계로 보는 방식을 확장해, 하나의 flake 입력으로 과거의 모든 버전을 제공함 버전 속성을 지정하면 Python 같은 특정 패키지를 직접 실행할 수 있음 versions.python3."3.6.2"는 Python 3.6.2를 실행함 versions.python3."3.8.9"는 Python 3.8.9를 실행함 latest.python3는 인덱스상 최신 버전인 Python 3.14.6을 실행함 v...

Read Entire Article