Bun의 Rust 포팅 감사: 13,000개의 unsafe 블록 탐색하기
고성능 런타임을 한 시스템 언어에서 다른 언어로 전환하는 것은 결코 사소한 작업이 아닙니다. 원래 Zig로 작성된 Bun은 Rust로의 포팅을 진행 중이며, 최근 포괄적이지만 논란이 되고 있는 코드베이스 감사 결과가 발표되면서 이 움직임이 정밀 조사의 대상이 되었습니다.
Rust 포팅 버전이 정식 빌드로 출시되기 전에, Bun 팀은 unsafe 블록의 사용을 수량화하고 분류하기 위해 프리릴리스 패스를 수행했습니다. 결과는 놀랍습니다. 현재 포팅 버전에는 13,365개의 unsafe 블록이 포함되어 있습니다. 숫자가 높기는 하지만, 이번 감사는 코드가 실제 프로덕션 사용자에게 도달하기 전에 이러한 기술 부채를 줄이기 위한 로드맵을 제공하는 것을 목표로 합니다.
13,365개의 unsafe 블록 분석
Rust 코드베이스에서 unsafe 블록의 엄청난 양은 개발자들에게 경고 신호를 보냅니다. unsafe는 컴파일러의 안전성 보장이 중단되는 지점이기 때문입니다. 하지만 Bun 감사는 이러한 블록의 대부분이 본질적인 결함이 아니라 포팅 과정에서 발생하는 부산물이라고 주장합니다.
근본 원인
감사에 따르면, unsafe 지점의 3분의 2는 세 가지 주요 원인에서 비롯됩니다:
- The Zig Port: 원래 Zig 구현에서 직접 가져온 많은 소유권 관용구와 패턴.
- The FFI Boundary: C/C++ 라이브러리 및 외부 엔진과 인터페이스하기 위해 필요한
unsafe블록. - Performance:
unsafe블록의 아주 적은 부분(약 3%)은 최대 성능을 끌어내기 위해 의도적으로 사용됩니다.
안전성을 향한 경로
Bun의 목표는 모든 unsafe 코드를 제거하는 것이 아니라—저수준 시스템 API와 상호작용하는 런타임의 경우 사실상 불가능합니다—이를 최소화하는 것입니다. 감사는 블록을 두 가지 주요 결과로 분류합니다:
- Replaceable (~9,300 sites): 이들은 안전한 Rust 코드로 변환될 수 있는 블록들입니다. 감사는
raw *mut Self상태 머신과&self에서&mut로의 캐스팅과 같은 패턴을 주요 제거 대상으로 식별했습니다. - Permanent (~4,000 sites): 이 블록들은
unsafe상태로 유지되겠지만, 안전한 Rust에서 정의되지 않은 동작(UB)이 발생하지 않도록 안전한 추상화로 감싸는 계획을 가지고 있습니다.
Soundness vs. Count
감사에서 발견된 가장 중요한 결과 중 하나는 근본적으로 unsound한 다섯 개의 함수를 발견한 것이었습니다. 이는 안전한 Rust에서 정의되지 않은 동작에 도달할 수 있는 경우로, 13,365개의 unsafe 블록과는 별개로 존재하는 실제 버그들입니다. 감사의 최우선 순위는 전체 unsafe 블록의 개수를 다루기 전에 이러한 soundness hole을 수정하는 것입니다.
커뮤니티 반응: "AI Slop"와 기술적 회의론
상세한 분석에도 불구하고, 이번 발표는 Hacker News의 개발자 커뮤니티에서 상당한 반발을 불러일으켰습니다. 비판의 상당 부분은 감사 페이지 자체가 "AI 생성"으로 표시되어 있다는 점에 집중되어 있으며, 이는 포팅 작업 자체가 수동 엔지니어링이 아닌 AI 기반 번역의 결과물일 수 있다는 의혹을 낳고 있습니다.
비판론자들은 이 정도의 엄청난 규모의 정리 작업이 필요한 포팅 버전에 대해 어느 정도의 신뢰를 둘 수 있는지에 대해 회의적인 태도를 보았습니다. 한 댓글 작성자는 다음과 같이 언급했습니다:
"The port is AI slop, littered with 13k unsafe blocks. and this blog post is more AI slop, claiming to be a 'plan' to reduce that number."
다른 개발자들은 복잡한 시스템을 통째로 포팅하는 것의 현명함에 의 의문을 제기하며, 개인별 구성 요소를 프로덕션에 마송하고 개별적으로 테스트하는 점진적인 접근 방식이 더 안정적인 전략이었을 것이라고 제안했습니다.
결론
Bun Rust 포팅은 언어 마이그레이션의 거대한 실험입니다. Bun은 unsafe 블록의 숫자를 투명하게 공개하고 공개 감사를 실시함으로써 Rust의 안전성 보장에 대한 의지를지를 보여주려 하고 있습니다. 하지만 높은 unsafe count와 "안전한" 구현 사이의 간격은 여전히 넓으며, 커뮤니티의 반응은 포팅 과정에서 발생한 기술 부채가 극만해야 할 큰 장애물임을 시사합니다.