AI로 11일 만에 끝낸 Bun의 Zig→Rust 재작성에서 배울 점

6 days ago 11

메모리 안전성이 없는 Zig에서 누수와 충돌이 계속되자, Bun은 535,496줄의 코드를 64개 AI 에이전트로 Rust에 옮겨 1~2년 걸릴 작업을 11일로 단축함 성공의 출발점은 600줄짜리 PORTING.md였으며, 파일별 병렬 변환과 두 차례 적대적 검토, 컴파일 오류 수정, 로컬 테스트, CI 통과를 순서대로 진행함 6,500개 커밋을 만드는 데 API 가격 기준 16만 5,000달러와 비캐시 입력 59억·출력 6억 9,000만·캐시 입력 읽기 720억 토큰이 사용됨 수작업이었다면 코드베이스를 잘 아는 엔지니어 3명이 약 1년간 제품 개선, 버그·보안 수정, 신규 기능 개발을 멈춰야 해 재작성 자체가 어려웠을 것으로 판단함 같은 방식을 반복하려면 코드베이스를 깊이 이해하는 엔지니어, 결과를 신뢰할 수 있는 강력한 테스트 스위트, 성공이 불확실해도 토큰 비용을 감수할 의지가 필요함 Bun이 Rust 재작성을 선택한 이유 Bun은 JavaScript 런타임을 넘어 여러 기능을 제공하는 복잡한 프로덕션 프로젝트임 JavaScript·TypeScript·CSS 변환, 번들링, 축소 테스트 러너와 npm 호환 패키지 관리자 모듈 해석, WebSocket 클라이언트, Node.js 구현과 여러 모듈 월간 다운로드는 2,200만 건이며 Claude Code와 OpenCode가 의존하고, Vercel·Railway·DigitalOcean이 직접 지원함 Zig는 메모리 안전 언어가 아니어서 최신 Bun에서도 메모리 누수, 메모리 문제로 인한 충돌, 힙 범위 밖 쓰기 등이 계속 발생함 Bun 팀은 Zig 컴파일러를 패치하고 종단 간 메모리 누수 테스트를 도입했지만 문제를 제거하지 못함 가비지 컬렉션 값과 수동 관리 값의 수명을 함께 처리하는 과정에서 작은 누수와 간헐적 충돌이 생김 모든 메모리 할당마다 해제 위치와 중복 해제 여부, JavaScript 예외 처리, 보수적 스택 스캐너의 포인터 가시성 등을 검토해야 했음 안전한 Rust에서는 use-after-free와 double-free가 컴파일 오류가 되며, 오류 경로에서 해제를 빠뜨리는 문제는 Drop 기반 자동 정리로 처리할 수 있음 Rust식 스마트 포인터를 Bun 코드에 자체 도입하는 방법도 검토했지만, Rust보다 사용성이 나쁘면서 같은 보장을 제공하지 못했음 기존 재작성 프로젝트가 오래 걸리는 이유 재작성 중에도 원래 코드베이스에 기능이 계속 추가되므로 ...

Read Entire Article