Bun의 Rust 재작성에 대한 제 생각
5 days ago
11
- Zig 창시자 Andrew Kelley는 Bun의 Rust 재작성을 언어 기능의 승패보다 Zig 소프트트웨어 재단(ZSF)과 Bun/Oven 사이의 관계 붕괴가 드러난 사건으로 해석함
- 초기 Bun은 Zig를 성능 성과의 기반으로 인정하고 ZSF에 연 $60,000 규모로 기부했지만, VC-backed 스타트업이 된 뒤 조직 운영과 코드 품질을 둘러싼 불만이 커짐
- ZSF는 Bun 코드베이스에서 해킹성 구현, assertion 남용, 빠른 기능 추가에 비해 부족한 버그·기술 부채 정리를 우려했고, Bun이 Zig의 대표 사례처럼 보이는 상황도 부담으로 여김
- Kelley는 Bun의 Rust 전환 글이 버그 감소를 스타일 가이드 vs 언어 기능 구도로 만든다고 비판하며, 실제 핵심은 버그 제거에 투입한 엔지니어링 시간과 코드 품질 관리라고 봄
- ZSF는 Bun의 기부에 감사하지만 Anthropic 인수 뒤 기부와 관계가 끝났고, Rust 재작성으로 Zig와 Bun의 사업적 이해관계가 분리된 점을 긍정적으로 받아들임
Bun과 Zig의 초기 관계
- Jarred는 약 5년 전 Zig 커뮤니티에 합류했고, Kelley는 그를 빠르게 시도하고 많이 배우는 “beginner energy”가 강한 사람으로 봄
- Bun이 JavaScript 도구체인으로 주목받으면서 Zig에도 더 많은 관심이 모이기 시작함
- Kelley는 Jarred가 크라우드펀딩만으로도 샌프란시스코 기준 안정적인 수입을 만들 수 있었을 것이라고 보지만, Thiel Fellowship식 사고방식과 Silicon Valley식 접근을 받아들여 벤처캐피털을 택했다고 봄
- 초기 Bun은 Zig 프로젝트에 우호적이었음
- Bun 웹사이트에서 성능 성과에 Zig를 인정함
- Zig Software Foundation에 연 $60,000 규모의 월간 기부를 설정함
- Bun의 Rust 재작성 글에서도 Zig 프로젝트에 대한 감사가 진심처럼 보인다고 평가함
VC-backed 스타트업이 된 뒤의 균열
- Bun이 VC-backed 스타트업이 된 뒤 Jarred는 커뮤니티와 함께 오픈소스를 키우는 개발자에서 사업 운영자에 가까워짐
- Oven의 채용 메시지는 초기 약 9개월 동안 강도 높은 업무를 예고했고, work-life balance가 “일하지 않는 시간이 많다는 뜻”이라면 맞지 않을 수 있다고 밝힘
- Kelley는 Oven 면접자와 직원들과 대화하며 Jarred의 관리자 역할에 대한 부정적 메시지를 반복해서 들었다고 함
- 문제로 거론된 항목은 의사소통 부족, 비현실적 기대, 낮은 공감, 경험 부족임
- 그 결과 Zig로 일하고 싶어 하던 커뮤니티 구성원들이 Oven과 Bun을 피하게 됨
- Jarred가 생산성과 스타트업 exit 전략에 집중할수록 Kelley의 Zig 장기 비전과는 멀어짐
- 예로 Jarred는 Language Server Protocol 구현과 VSCode 통합을 우선해 달라고 요구했지만, Kelley에게는 더 큰 계획이 있었음
ZSF가 본 Bun 코드 품질 문제
- Kelley가 꼽은 핵심 문제는 코드 품질임
- Zig 팀은 사용자 프로젝트의 소스 코드를 읽고, 언어 변화가 사용자에게 어떤 영향을 주는지 확인하며, 변경으로 인한 파손과 성능 회귀를 테스트함
- Bun 코드베이스에서는 ZSF가 우려한 프로그래밍 관행이 늘어남
- 해킹성 구현이 계속 쌓임
- assertion 남용이 있었음
- 기능을 빠르게 추가하는 데 비해 성찰, 버그 제거, 기술 부채 해소 시간이 적었음
- Kelley는 Bun의 이런 방식이 Zig에 대한 메모리 안전성 비판과 결합될 수 있다고 우려했고, Zig 프로젝트와 사회적 거리를 두고 싶어 함
- ZSF는 Bun을 더 나은 프로그래밍 관행으로 이끌려 했지만 효과를 내지 못함
Anthropic 인수와 Rust 재작성
- ZSF 내부에서는 Bun이 순손실(net liability) 에 가깝다는 판단이 생김
- Bun이 Zig의 대표 사례처럼 보이지만, 실제로는 “Zig 코드를 이렇게 쓰면 안 된다”는 예시에 가깝다는 점이 부담이었음
- Kelley는 Bun의 “cloud 무언가를 판다”는 사업 계획을 처음부터 허술하게 봤고, 언젠가 매각되면 Zig도 간접적으로 부정적 홍보를 받을 수 있다고 봄
- Anthropic 인수 뒤 ZSF는 안도함
- 기부가 조용히 중단됐고, ZSF는 이를 예상하고 있었음
- Bun 측은 월간 미팅을 취소하지도, 참석하지도 않았고 관계는 끝난 것으로 받아들여짐
- ZSF는 며칠 안에 Rust 재작성이 올 것이라고 의심했고, 이를 응원함
- Anthropic 인수 뒤 Claude가 Bun으로, Bun이 Zig로 작성됐다는 간접 연결만으로도 Zig 커뮤니티에 부담이 생김
- Jarred가 Rust 재작성을 발표하자 Kelley는 이를 매우 반겼고, 이제 “내 문제가 아니다”라는 감각을 표현함
Bun의 Rust 재작성 글에 대한 반박
- Kelley는 Bun의 Rust 재작성 글이 잘 쓰였다고 보면서도, 몇 가지 핵심 문제를 지적함
-
버그 감소의 핵심
- Bun 글은 버그를 피하려면 스타일 가이드와 프로그래밍 언어 기능 중 하나를 골라야 하는 것처럼 구도를 만듦
- Kelley에게 버그 제거의 주된 방법은 엔지니어링 자원을 투입해 버그를 찾고 없애는 일임
- TigerBeetle은 시간을 들여 버그를 찾고 제거했으며 ZSF와 건강한 관계를 유지했지만, Bun은 둘 다 하지 않았다고 봄
-
테스트 스위트에 대한 모순
- Bun 글은 100만 줄의 검토되지 않은 코드를 배포할 수 있는 이유로 테스트 스위트가 충분하다는 점을 든다고 봄
- Kelley는 그렇다면 Zig 코드에는 왜 성가신 버그가 많았는지, 테스트 스위트가 Zig 코드의 버그는 못 잡지만 100만 줄의 미검토 코드 버그는 잡을 수 있는지 되묻고 있음
-
성능과 LTO
- Bun 글은 성능 향상을 LTO에 돌리지만, Zig는 Bun의 전체 기간 동안 LTO를 지원했다고 함
- Zig는 과거 LTO를 기본 활성화했으나 LLVM 버그가 너무 많아 기본값에서 제외했고, 그 버그들은 Rust에도 영향을 준다고 함
- Kelley는 ZSF가 LTO 활성화를 권했을 가능성이 높고 Bun이 듣지 않았을 것이라고 봄
-
fuzzing
- Bun 글은 Zig 코드에 대해 성실히 fuzzing을 한 것처럼 암시하지만, Kelley는 통화에서 Bun 팀이 아무것도 fuzzing하지 않는다고 말했다고 함
-
바이너리 크기와 comptime
- Bun 글은 바이너리 크기를 줄이기 위한 여러 엔지니어링 작업을 Rust 재작성의 근거처럼 제시하지만, Kelley는 그 작업들이 재작성 자체와 무관하다고 봄
- 해당 작업들은 처음부터 Zig 코드베이스에서 했어야 할 엔지니어링 작업에 가까움
- ZSF는 몇 년 동안 Bun의 comptime 남용을 경고했고, comptime/inline 사용량과 컴파일 시간을 감사할 수 있도록 time report 기능도 만듦
-
컴파일 속도
- Kelley는 Bun 글이 컴파일 속도를 언급하지 않았다고 지적함
- Zig 컴파일러 프로젝트는 약 600,000줄로 재작성 전 Bun과 비슷한 규모임
- Kelley의 측정에서는 깨끗한 캐시에서 처음부터 빌드하는 데 16초, 증분 컴파일 활성화 후 각 후속 편집에는 90ms가 걸림
- Rust 재작성 후 Bun의 대응 측정값이 무엇인지 묻고 있음
Kelley의 결론
- Kelley에게 핵심 문제는 프로그래밍 언어 기능이 아니라 관계 붕괴임
- ZSF는 Bun으로부터 받은 기부에 진심으로 감사하며, 그 돈을 Zig 기여자 보상에 사용함
- Kelley는 Jarred 개인을 악의적으로 비판하려는 것은 아니라고 선을 그음
- Jarred는 자신과 취향과 삶의 목표가 다르지만, 자신이 원하는 삶을 성공적으로 만들었다고 봄
- Jarred가 행복하고 성공했다고 받아들이며, 악의를 갖고 있지 않다고 함
- 다만 Kelley는 ZSF와 Bun의 사업적 이해관계가 더 이상 얽히지 않게 된 점을 기쁘게 여김
- Rust 재작성의 좋고 나쁨을 언어 선택 기준으로 다투는 공개 논쟁이 끝나면, 양측의 상호작용도 끝난다고 봄
-
Homepage
-
Tech blog
- Bun의 Rust 재작성에 대한 제 생각