Search

260729_2210_Bun이 Zig 약 53.5만 줄64개 AI 에이전트로 Rust에 옮겨

출처

API 정가 약 2.4억 원, Bun의 Claude Code 하네스를 해부했습니다.
Bun의 53만 줄짜리 Zig 코드가 약 11일 만에 Rust로 옮겨졌습니다. Bun 창시자 재러드 섬너는 Claude Code의 Dynamic Workflow 네 개에서 최대 64개의 에이전트를 병렬로 운영했습니다. 하지만 핵심은 에이전트 숫자가 아니었습니다. 시작 2분 만에 서로의 작업을 덮기 시작한 에이전트들을 어떻게 통제하고, 실패를 다음 실행의 입력으로 바꿨는지가 더 중요합니다. 이번 영상에서는 Bun의 공식 회고와 실제 Rust 이관 PR을 바탕으로 다음 내용을 살펴봅니다. • 64개 에이전트가 같은 저장소에서 충돌한 이유 • 4개 워크트리와 Dynamic Workflow를 사용한 병렬 구조 • PORTING.md와 LIFETIMES.tsv의 역할 • 구현자 에이전트와 평가자 에이전트의 컨텍스트 분리 • 약 1만6천 개 컴파일 오류를 작업 큐로 바꾼 방법 • 테스트, 보안 리뷰, 퍼징으로 만든 검증 레이어 • 개인과 소규모 팀이 가져갈 수 있는 5단계 하네스 ⏱️ 타임라인 00:00 Bun 53만 줄을 Rust로 옮긴 사건 00:58 왜 Zig에서 Rust로 옮겼을까 02:10 시작 2분 만에 저장소가 꼬였다 03:54 4개 워크트리 × 16개 에이전트 04:21 하네스와 루프의 차이 04:54 PORTING.md와 LIFETIMES.tsv 06:25 전체 작업 전에 세 파일로 시험 08:54 구현자와 평가자를 분리한 이유 11:08 컴파일 오류를 작업 큐로 바꾸기 12:10 이 마이그레이션은 성공했을까 14:08 테스트 100% 뒤의 검증 레이어 16:10 커뮤니티 반응과 비용 17:54 개인과 소규모 팀이 가져갈 5단계 20:58 하네스 엔지니어링 오프라인 과정 🎓 패스트캠퍼스 하네스 엔지니어링 오프라인 과정 사전 알림 https://fastcampus.info/4f7cEdq #Bun #ClaudeCode #하네스엔지니어링
Bun이 Zig 약 53.5만 줄64개 AI 에이전트로 Rust에 옮겨,
사람이라면 1~2년 걸릴 재작성을 11일에 끝낸 사례를
Pragmatic Engineer가 "무엇을 배울 수 있는가"로 풀어쓴 글입니다.
동기: Zig 쪽 메모리 누수·충돌·OOB 등 안정성 피로
방법: PORTING.md(약 600줄) → 파일 병렬 이식 → 적대적 리뷰 2회 → 컴파일 수정 → 테스트/CI
규모: ~6,500 커밋 / API 기준 약 $165,000 / 막대한 토큰 사용
요지: "AI가 재작성을 싸게 만든다"보다, 재작성이 현실 옵션이 됐다

원인 파악을 해봅시다 :)

재작성이 역사적으로 최악인 이유:
1. 예상 9개월 2. 그동안 원본에 기능이 계속 추가됨 3. 따라잡기 게임 → 18개월~2년+ 4. 그동안 사용자 체감 개선 = 0
Plain Text
복사
Bun 규모(주석 제외 Zig 535,496 LOC)면
숙련 엔지니어 소수에게 약 1년이 자연스러운 추정입니다.
그건 "제품 개선을 1년 멈추는 선택"이라 사실상 불가능에 가깝습니다.
그래서 나온 질문:
일주일 안에 Fable로 Rust 이식이 가능한지부터 검증하면?

여기서 우리가 꼭 알아가야할 핵심 개념!!: 보상 함수가 뚜렷한 마이그레이션

Mitchell Hashimoto 쪽 평가와도 맞물리는 포인트:
LLM은 어렵고 집중된 작업 + 명확한 성공 신호(컴파일·테스트)에서 특히 강하다.
Bun 플로우를 단계로 보면:
단계
내용
설계
Claude와 ~3시간 패턴 매핑 → PORTING.md
파일럿
1,448개 중 3파일 이식 + 별도 세션에서 적대적 리뷰 2회
병렬
64 에이전트, 파일 단위. git stash/reset 금지로 충돌 차단
컴파일
crate별 cargo check → 오류 묶음 수정 (순환 의존 풀며 ~16k 오류도 등장)
검증
로컬 테스트 실행 가능하게 → CI 그린 → 머지 (총 11일)
PORTING.md의 제약 예시 (구조 보존이 목표):
no tokio / rayon / hyper / async-trait / futures no std::fs·net·process (Bun이 이벤트 루프·syscall 소유) no async fn → 콜백 + 상태머신 (Zig와 동일) borrowck 회피용 raw pointer 금지, 필요 시 reshape + PORT NOTE
Plain Text
복사
한 줄: 에이전트에게 "알아서 Rust답게"가 아니라, 옮기는 규칙과 금지 목록을 먼저 준 것이 핵심이다.

왜 Rust인가 (Zig 비난이 아님)

Jarred의 프레임:
Zig 사용자 전부가 같은 버그를 겪는 것은 아님
Bun의 특수성: GC 값 수명 + 수동 메모리를 같이 다루는 일
use-after-free / double-free / 에러 경로 forgot-to-free → safe Rust에선 컴파일·Drop으로 상당수 차단
자체 스마트 포인터는 Rust보다 DX가 나쁘고 보장도 약함
즉 "Zig 실패담"이 아니라 문제 영역이 메모리 안전 컴파일 타임 피드백과 맞았다는 이야기입니다.
(참고: Roc은 반대로 Rust→Zig 재작성 보고서를 낸 바 있음. 방향이 달라도 "프로젝트 단위 언어 선택"은 같습니다.)

비용과 반복 가능성

API 가격 기준 대략:
항목
규모
비용
~$165k
uncached input
59억 토큰
output
6.9억 토큰
cached input reads
720억 토큰
수작업 대안: 코드베이스를 아는 엔지니어 3명 × ~1년
→ 그동안 Node 호환·보안·기능 개발 정지 → 안 했을 것
다른 팀이 따라 하려면 최소 세 조건:
1. 코드베이스를 깊게 아는 동기 부여된 엔지니어 2. 통과하면 "된다"고 믿을 수 있는 테스트 스위트 3. 성공이 불확실해도 토큰 비용을 감수할 의지
Plain Text
복사
모든 프로젝트에 $165k가 필요한 것은 아닙니다.
계획(비싼 모델) / 코딩·리뷰(저렴한 모델) 분리로 줄일 여지도 있습니다.

자주 하는 오해들입니다!

오해 1. "프롬프트 한 줄로 끝냈다"

실제로는 규칙 문서, 파일럿, 워크플로 수정(에이전트끼리 git으로 打架),
심야 자율 컴파일 픽스, 수일간의 테스트/CI 픽스가 이어집니다.
오케스트레이션이 제품입니다.

오해 2. "우리 레포도 다음 주 언어 바꾸자"

테스트가 약하거나, 도메인 문맥을 가진 사람이 없으면
빠른 이식은 빠른 잘못된 이식이 됩니다.

오해 3. "Roc 487일 vs Bun 11일 = 언어/AI 우열"

한쪽은 구조·기능까지 바꾸는 컴파일러 재작성,
한쪽은 실행 구조를 보존하는 대규모 포팅에 가깝습니다. 직접 비교하면 안 됩니다.

정리해봅시다!

1.
Bun 사례의 진짜 뉴스: 대규모 재작성이 일정·비용 면에서 선택지가 됐다.
2.
성공 공식은 모델 이름보다 규칙 문서 + 병렬 워크플로 + 적대적 리뷰 + 테스트.
3.
동기는 취향이 아니라 GC×수동 메모리가 만든 안정성 비용이었다.
4.
$165k는 비싸 보이지만, "1년 제품 정지"와 비교하면 다른 방정식이다.
5.
따라 하려면 엔지니어·테스트·토큰 감수 — 셋 중 하나라도 없으면 블루프린트가 성립하지 않는다.

이상!