리눅스 커널, $ORIGIN 지원 예정—eBPF로 Nix의 꿈을 이루다
Linux kernel will support $ORIGIN, sort of
Nix 개발자 Farid Zakaria가 리눅스 커널에 $ORIGIN 지원을 추가하기 위한 여정을 공유합니다. 처음에는 VFS에 직접 구현하려 했지만, VFS 메인테이너 Christian Brauner의 제안으로 eBPF와 binfmt_misc를 활용한 프로그래머블 인터프리터 선택 방식으로 방향을 전환했습니다. 이 방식은 ELF 바이너리의 PT_INTERP를 동적으로 결정할 수 있어, Nix의 재배치 가능한 바이너리 문제를 해결할 뿐만 아니라 QEMU 같은 에뮬레이터 등록 스크립트를 대체할 수도 있습니다. 또한, 커널이 바이너리를 네이티브로 실행하면서 인터프리터만 교체하는 새로운 'L' 모드가 추가되어 argv[0]와 /proc/self/exe 같은 기존 문제를 해결합니다. 이 패치 시리즈는 곧 -next 브랜치에 포함될 예정이며, 저자는 NixOS 모듈을 통해 부팅 시 $ORIGIN 지원을 등록할 계획입니다.
커널이 바이너리를 네이티브로 실행하면서 등록된 인터프리터를 바이너리의 PT_INTERP에 지정된 로더 대신 사용하는 '로더 대체(L)' 모드는 Nix에게 가장 흥미로운 기능입니다.