Lobsters

Announcing Lix 2.96 “Bingsu”

Lix 2.96 “빙수” 공개

Nix 구현체 Lix가 보안, 디버거, 데몬 프로토콜과 사용성을 개선한 2.96 버전을 공개했습니다. 평가 시간이 5~12% 줄었고, ssh:// 저장소 URI는 지원 중단 절차에 들어갔으며 다음 버전에서 제거될 예정입니다.

에디터 노트

디버거 역추적의 가독성 개선과 입력 중복 다운로드 방지는 반복적인 개발 작업과 CI 실행에 직접 닿는 변경입니다. 평가 시간 5~12% 단축은 프로젝트가 보고한 수치이며, 환경별 측정 조건은 본문에 제시하지 않았습니다. 댓글에서는 addErrorContext가 --show-trace 없이도 보이는 변경을 반기면서 전체 역추적에 모듈 시스템 내부 정보가 섞이는 문제를 설명합니다. 반면 BLAKE3 실험 기능의 Rust 이관은 사용자가 기존 기능을 계속 쓰려면 어떤 선택지가 있는지 묻는 질문으로 남습니다. ssh://에서 ssh-ng://로의 전환도 단순한 이름 변경이 아니라 서명되지 않은 출력 복사 제한을 포함하므로, 원격 저장소를 쓰는 환경에서는 마이그레이션 조건이 실제 차이를 만듭니다.

AI 요약

Lix가 일곱 번째 주요 버전인 2.96 “Bingsu”를 공개했습니다. 이번 릴리스는 데몬과 원격 빌드 프로토콜을 손보고 디버거와 REPL을 개선합니다. Rust 지원과 새로운 Cap’n Proto RPC 프로토콜 개발도 이어집니다. 업그레이드 절차는 설치 방식에 따라 다르며, 프로젝트는 nix upgrade-nix 대신 공식 설치 안내의 업그레이드 셸 스크립트를 사용하라고 권합니다. NixOS에서 nixpkgs로 Lix를 사용하는 경우에는 업데이트가 채널에 반영된 뒤 nixpkgs를 올리면 됩니다.

REPL과 디버거

디버거가 안정되고 탐색이 쉬워졌으며 출력 정보도 읽기 편해졌습니다. 스택 프레임 이동은 절대 번호 대신 오프셋을 지정할 수 있습니다. addErrorContext 프레임은 이제 --show-trace를 쓰지 않아도 역추적에 표시됩니다. REPL은 editline에서 Rust 기반 rustyline으로 바뀌어 UTF-8을 제대로 지원합니다.

RPC와 SSH 저장소

실험적 RPC 프로토콜을 rpc-sockets 기능 플래그로 사용할 수 있습니다. 아직 실험 단계이며 설정에서 기능을 켜는 것뿐 아니라 별도의 시스템 설정도 필요합니다. NixOS 모듈은 해당 설정을 아직 지원하지 않습니다. 프로젝트는 향후 RPC를 안정화하고 기존 프로토콜 지원을 제거할 계획입니다.

ssh:// 저장소 URI는 2.96에서 지원 중단 처리에 들어가며 2.97에서 제거될 예정입니다. ssh-ng://는 계속 지원하고, 이번 버전에서 안정 기능으로 전환했습니다. Lix 프로젝트는 ssh-ng가 ssh보다 엄격한 보안 검사를 적용해 서명되지 않은 출력을 신뢰하지 않는 사용자가 원격 저장소에 복사하지 못하도록 하는 점을 의도된 동작이라고 설명합니다.

동작 변경과 새 기능

flake.nix 검증 규칙이 바뀌었습니다. outputs 바깥에서는 함수 호출을 허용하지 않으며, inputs 안의 let 블록과 문자열 보간은 허용합니다. floor와 ceil은 부동소수점 수를 정수로 바꾸면서 정밀도가 손실될 경우 오류를 냅니다. 일부 nix3 명령은 인수 경로를 미리 빌드하지 않도록 바뀌었습니다. 예전에는 nix store delete에 저장소에 없는 경로를 넘기면 삭제 전에 해당 경로를 내려받는 일이 있었습니다. Nix 검색 경로에서 내부 파일을 덮어쓰는 동작도 명시적으로 설정하지 않으면 오류가 됩니다.

--arg와 --argstr에 중첩 인수를 지정할 수 있습니다. 예를 들어 --arg foo.bar.baz 1은 이제 foo.bar.baz 경로의 속성 집합을 설정합니다. 과거처럼 점을 포함한 단일 속성 이름을 쓰려면 이름을 따옴표로 감싸야 합니다. 같은 입력 집합을 여러 프로세스가 동시에 내려받을 때는 한 프로세스만 가져오고 나머지는 완료를 기다립니다. 평가에는 mimalloc을 적용했으며 프로젝트 측 측정에서 평가 시간이 5~12% 줄었습니다. nix doctor는 시스템 정보와 원격 빌더 설정을 보고하고, 설정된 원격 빌더에 연결해 상태를 확인합니다. 채널 참조는 zst 압축 tarball도 지원합니다.

수정 사항과 다음 일정

nix-copy-closure --include-outputs가 정상 동작하도록 수정했습니다. structuredAttrs를 사용하는 경우에도 해시 불일치 진단을 지원하며, 하위 데몬이 상위 데몬에서 덮어쓴 설정을 받도록 고쳤습니다. 프로젝트는 2.96.1에서 ssh-ng 저장소의 --keep-going 지원, Git fetcher의 SHA256 지원, macOS 가비지 컬렉션 오류 진단 개선 등을 계획하고 있습니다. Rust 연동에는 zngur를 사용하며 REPL, 원격 빌더 설정, 해시 변환 코드 일부를 이미 Rust로 옮겼습니다.

Lobsters 반응

  • @ThinkChaos — addErrorContext 프레임이 이제 --show-trace 없이도 역추적에 항상 표시되는 점이 정말 기대됩니다. 평가 오류가 마침내 실제로 쓸 만해집니다. 예전에는 --show-trace를 늘 사용했지만 모듈 시스템 구현 세부 사항 같은 관련 없는 내용이 많이 포함된 전체 역추적이 나왔습니다.
  • @toastal — 최근 다시 써보려 했는데, 사용하던 BLAKE3 해시 실험 기능이 Rust로 다시 작성될 무언가를 기다리고 있었습니다. 이를 제공하는 브랜치나 패치 버전이 있나요?

원문: Lix / 번역·요약: Trawling