AI VIDEO BRIEFING

AI가 Bun 런타임을 Zig에서 Rust로 포팅: 100만 줄 코드 재작성 사례를 분석하다

자바스크립트 런타임 Bun이 AI의 손으로 Zig에서 Rust로 다시 쓰였다. 100만 줄이 넘는 코드, 약 300개 규칙을 담은 porting.md, 기존 테스트 통과와 성능 개선까지—앤트로픽이 인수한 Bun의 대규모 포팅이 무엇을 의미하는지 짚어본다.

AI가 100만 줄을 다시 썼다: Bun의 Zig→Rust 포팅이 보여준 것 영상 대표 이미지

핵심 메시지

  • Bun 제작자 재러드 섬너가 AI로 Zig 코드베이스를 Rust로 포팅하는 실험을 했고, 100만 줄이 넘는 Rust 코드가 메인 브랜치에 병합됐다.
  • AI 에이전트는 약 300개 규칙이 담긴 porting.md 청사진을 따라 한 파일씩 '충실한 1:1 포팅'을 수행했다.
  • 결과물은 기존 테스트를 전 플랫폼에서 통과했고, 메모리 누수·불안정 테스트를 고쳤으며, 바이너리 크기를 3~8MB 줄이고 벤치마크는 동등하거나 더 빨랐다.
  • 약 1만 3천 개에 이르는 unsafe 블록이 논란이 됐지만, 상당수는 C/C++ 바인딩과 Zig의 메모리 비안전 코드를 그대로 옮긴 결과로 설명됐다.
  • Bun은 올해 앤트로픽에 인수됐고, 클로드 코드가 Bun 실행 파일로 배포된다는 점이 이 재작성의 주요 동기 중 하나로 지목된다.

쉽게 이해하기

가장 큰 Zig 코드베이스 중 하나로 꼽히던 자바스크립트 런타임 Bun이 Rust로 다시 쓰였다. 그것도 사람이 아니라 AI가 했다. Bun 제작자 재러드 섬너가 'AI로 Zig를 Rust로 옮길 수 있을까'를 실험한 결과, 메인 브랜치에 100만 줄이 넘는 Rust 코드가 병합됐다. 약 1300개의 Zig 파일 중 1200여 개가 같은 디렉터리에 같은 이름의 .rs 파일로 옮겨졌다.

작업의 핵심은 porting.md라는 청사진이다. 타입 매핑, 관용구 변환, 명명 규칙, 금지 의존성 등 약 300개 규칙을 담은 이 문서를 AI 에이전트가 읽고 따른다. 방식은 두 단계로, 먼저 컴파일되지 않아도 좋으니 로직을 충실히 옮긴 초안을 만들고(Phase A), 이후 크레이트 단위로 컴파일되게 만든다(Phase B). 즉 이상적인 관용적 Rust가 아니라 원본과 최대한 같은 모양의 포팅이 목표다.

공식 병합 메시지에 따르면 이 포팅은 기존 테스트 스위트를 전 플랫폼에서 통과했고, 여러 메모리 누수와 불안정 테스트를 고쳤다. 바이너리 크기는 3~8MB 줄었고 벤치마크는 동등하거나 더 빨랐다. 한편 약 1만 3천 개의 unsafe 블록이 화제가 됐는데, 약 2400개는 자바스크립트코어·C 라이브러리 바인딩(FFI)에서, 나머지는 Zig의 메모리 비안전 코드를 충실히 옮긴 데서 비롯된 것으로 설명됐다.

제작자가 직접 코드를 살펴보니 오히려 Zig보다 나은 부분도 있었다. 예컨대 Zig는 VM 포인터를 얻을 때마다 C++ 보조 함수로 건너갔다 돌아오지만, Rust 버전은 스레드 로컬을 단일 어셈블리 명령으로 직접 읽어 C++ 우회를 제거했다. 에이전트는 언어 간 LTO가 그 C++ 함수를 인라인하지 못한다는 사실까지 주석으로 남겼다. 전체적으로 관용적 Rust는 아니어도 테스트를 통과하는 '유능한 포팅'이며 AI 슬롭은 아니라는 평가다.

그렇다면 왜 이런 일을 했을까. 모회사 앤트로픽의 마케팅 효과도 있겠지만, 제작자는 실질적 이유로 클로드 코드를 지목한다. 클로드 코드는 Bun 실행 파일로 배포되는데, 메인 프로세스 메모리가 수 분 만에 1.7GB에서 14GB로 치솟거나 14시간 뒤 23GB까지 올라 시스템을 멈추게 한 사례가 보고됐다. 모든 누수가 이번 포팅으로 해결되는 것은 아니지만(첫 사례는 자바스크립트코어의 C++ 힙 할당자 탓으로 지목됐다), 상당 부분 개선에 도움이 됐다는 것이다.

주요 인사이트

  • 잘 갖춰진 기존 테스트 스위트가 있을 때 언어 간 자동 포팅의 정확도가 크게 올라간다.
  • '충실한 포팅'은 이상적인 관용적 코드가 아니라 원본 로직을 그대로 옮기는 방식이며, 그래서 코드량과 unsafe 블록이 늘 수 있다.
  • AI가 단순 변환을 넘어 LTO 한계 같은 저수준 문제를 인식하고 C++ 우회를 제거하는 등 비자명한 최적화를 남기기도 했다.
  • Zig가 'unsafe'를 명시하지 않을 뿐, 2500개가 넘는 원시 포인터 조작 등 메모리 비안전 코드는 원본에도 이미 존재했다.
  • 대규모 자동 포팅의 실효성은 마케팅 효과와 별개로 테스트 통과·성능·이슈 해소라는 실질적 결과로 뒷받침됐다.

자주 묻는 질문

누가, 어떻게 포팅을 진행했나?

Bun 제작자 재러드 섬너가 AI로 실험을 시작했고, AI 에이전트가 porting.md의 약 300개 규칙을 따라 각 Zig 파일을 같은 디렉터리에 동일한 이름의 .rs 파일로 옮겼다.

Zig 코드는 모두 사라졌나?

아니다. Rust가 기본이 됐지만 Zig 코드가 아직 남아 공존하고 있으며, 이후 PR에서 점차 제거될 예정이다.

unsafe 블록이 너무 많다는 비판은 타당한가?

약 1만 개 수준으로 많지만, 약 2400개는 C 라이브러리·자바스크립트코어 바인딩(FFI)에서, 나머지는 Zig의 메모리 비안전 코드를 충실히 옮긴 데서 비롯된 것으로 설명됐고 점차 줄여갈 계획이다.

원문과 출처

이 글은 원본 영상의 자막을 바탕으로 한국어 독자를 위해 요약했습니다. 전체 맥락과 최신 정보는 원문에서 확인하세요.

YouTube 원본 영상 보기 ↗

관련 AI 소식