Linux 커널 VFS 서브시스템에 $ORIGIN 지원을 추가하는 제안이 논의됨
eBPF와 binfmt_misc를 활용하여 동적으로 인터프리터를 선택하는 방식으로 해결책 제시
NixOS 모듈을 통해 부팅 시 $ORIGIN 지원을 등록하는 방안이 계획됨
기존 바이너리 호환성을 유지하며 선택적으로 적용하는 방식이 제안됨
초기 제안은 Linux 커널의 VFS(Virtual File System) 서브시스템에 직접 $ORIGIN 지원을 추가하는 것이었다. 그러나 커뮤니티 논의를 통해 eBPF(extended Berkeley Packet Filter)를 활용하는 방식이 더 유연하고 강력한 해결책으로 떠올랐다. 이는 기존의 고정된 인터프리터 경로를 동적으로 변경할 수 있는 가능성을 열어주었다는 점에서 주목할 만하다.
핵심 아이디어는 eBPF 프로그램을 작성하여 binfmt_misc 서브시스템을 통해 동적으로 인터프리터를 선택하는 것이다. 제안된 eBPF 코드는 ELF 바이너리를 감지하고, 바이너리의 경로를 기반으로 인터프리터 경로를 설정한다. 이는 데이터 격리 아키텍처(Data Isolation Architecture)를 통해 각 바이너리가 독립적인 런타임 환경을 가질 수 있도록 지원하며, 기존의 QEMU 등록 스크립트를 대체할 수 있는 잠재력을 가진다.
기존 binfmt_misc 방식은 인터프리터가 실제 실행된 바이너리의 프로세스 식별자(PID)와 `/proc//cmdline`, `/proc/self/exe` 정보를 차지하는 문제가 있었다. Christian Brauner가 제안한 새로운 디스패치 모드(Dispatch Mode), 특히 'L' 플래그는 커널이 네이티브 바이너리를 메인 이미지로 실행하고 인터프리터만 교체하는 방식을 제공한다. 이는 런타임 투명성(Runtime Transparency)을 높여 Nix와 같은 시스템에 유리하다.
향후 Nix 커널 릴리스에 해당 패치가 포함되면, NixOS는 새로운 PT_INTERP_NIX 세그먼트를 사용하는 바이너리에 대해서만 BPF 핸들러를 활성화하는 모듈을 제공할 계획이다. 이는 기존 바이너리와의 호환성(Backward Compatibility)을 보장하면서도, 새로운 세그먼트를 포함하는 바이너리는 재배치 가능한 바이너리(Relocatable Binary)로서의 이점을 누릴 수 있게 한다. 이는 Nix 패키징 시스템의 유연성을 크게 향상시킬 것으로 기대된다.