피드로 돌아가기
Bun Has Been Converted to Rust. Now What?
Hacker NewsHacker News
Infrastructure

100만 라인 Rust 포팅 완료, 그러나 1만 개 unsafe 블록으로 남은 Safety 과제

Bun Has Been Converted to Rust. Now What?

2026년 6월 3일8advanced

Context

Zig 기반의 Bun 런타임이 겪어온 Use-after-free 및 Double-free 등 수동 메모리 관리의 고질적 버그 해결 필요성 증대. 컴파일 타임 메모리 안전성 확보를 위해 Rust로의 전면 재작성 결정.

Technical Solution

  • Claude Code 에이전트를 활용한 Zig 코드의 Rust 언어적 단순 치환(Faithful Porting) 전략 채택
  • 기존 아키텍처와 데이터 구조를 그대로 유지하여 런타임 인터페이스의 동작 일관성 확보
  • Borrow Checker의 제약을 피하기 위해 Zig의 수동 메모리 관리 로직을 Rust의 unsafe 블록으로 그대로 이식
  • 파일 단위의 개별 번역 방식을 통해 기존 테스트 슈트의 호환성을 극대화한 구조 설계
  • 동작 동일성(Behavioral Equivalence) 검증을 최우선 순위로 둔 마이그레이션 경로 설정

Impact

  • 기존 테스트 슈트의 99.8% 통과로 기능적 동일성 입증
  • Linux x64 기준 바이너리 크기 약 93MB에서 수 MB 감소
  • 9일간 6,755회의 커밋을 통해 약 100만 라인의 코드 생성

Key Takeaway

단순한 언어 치환(Faithful Translation)은 기능적 동작은 복제하지만, 언어 본연의 설계 철학인 Safety Property까지 자동으로 전이시키지 못함. 특히 Rust의 unsafe 블록 남용은 타입 시스템의 보장 범위를 무효화하여, 동작 검증(Test Pass)과 메모리 건전성(Soundness)을 동일시하는 오류를 경계해야 함.


- LLM 기반 포팅 시 '동작 일치'와 '설계 최적화'를 분리하여 검증 단계 설정 - Rust 도입 목적이 Safety라면 unsafe 블록 사용 금지 규칙(Pre-commit hook 등) 강제 검토 - 테스트 통과율이 메모리 안전성이나 보안 취약점 해결을 보장하지 않음을 인지하고 정적 분석 도구 병행 - 레거시 구조를 그대로 옮기는 포팅보다 Idiomatic한 재설계가 장기적 유지보수 비용을 낮춤을 고려

원문 읽기