Buz: 더 빠른 빌드와 깨끗한 코드를 위한 현대적인 Zig 기반 Bun 포크

Buz: 더 빠른 빌드와 깨끗한 코드를 위한 현대적인 Zig 기반 Bun 포크

Buz는 현대화된, "deslopped" 코드베이스를 가진 Bun의 드롭인 대체품을 목표로 한다

Buz는 Bun의 Rust 재작성 이전 최종 커밋을 기반으로 한 진행 중인 Bun 런타임 포크입니다. 이 프로젝트의 주요 목표는 현대적인 Zig과 적극적인 기술 부채 감소를 활용하여 Bun의 드롭인 대체품을 제공하면서 코드 품질과 개발자 경험을 크게 향상시키는 것입니다.

build.zig를 통한 서브세컨드 증분 빌드

Buz는 build.zig에 전체 빌드 그래프를 마이그레이션하여 서브-1초 증분 빌드를 달성하며, 여기에는 JavaScriptCore의 벤더드 소스도 포함됩니다. 이 전환은 원래 Bun 빌드 프로세스에 비해 개발 루프를 크게 가속화합니다.

기여자 kristoff_it에 따르면, 이는 Bun에 대해 빠른 빌드가 항상 가능했음을 보여주지만, 일부 플랫폼 제한이 여전히 존재합니다:

  • Zig 증분 컴파일은 현재 aarch64를 지원하지 않습니다.
  • 현재 Linux 링커만 바이너리 패칭을 지원합니다.

기술 부채 감소 및 "deslopping"

이 프로젝트는 원래 Bun 코드베이스에서 "slop"—낮은 품질 또는 중복된 코드—를 제거하는 데 중점을 둡니다. 주요 성과 및 전략은 다음과 같습니다:

  • 데드 코드 제거: 저자는 이미 완전히 죽은 코드 11,000줄 이상을 제거했습니다.
  • 현대화: 코드베이스의 일부가 Zig 표준 라이브러리에 더 많이 의존하도록 다시 작성되었습니다.
  • 테스트 통합: Bun의 Rust 버전에서 나온 모든 새로운 테스트가 Buz로 가져와져 기능 parity와 버그 수정을 보장하지만, 많은 테스트는 여전히 진행 중입니다.
  • AI 기반 리팩터링: 코드베이스의 규모(약 600,000줄)로 인해 저자는 LLMs를广泛하게 사용하여 서브시스템을 풀어내고 다시 작성하고 있습니다. 따라서 코드베이스가 관리 가능한 상태에 도달할 때까지 현재 인간 작성 기여를 받아들이지 않고 있습니다.

아키텍처 및 의존성

일부 비판자들은 Bun이 주로 C/C++ 프로젝트를 위한 "접착제"라고 주장하지만, Buz의 저자는 프로젝트의 상당한 부분이 네이티브 Zig 코드라고 설명합니다. 예를 들어, 패키지 관리자만 해도 40,000줄의 코드로 구성되며, 모든 Node와 Web API는 Zig로 구현됩니다.

Buz는 다음과 같은 여러 중요한 외부 의존성에 계속 의존합니다:

  • JavaScriptCore (JSC): 핵심 엔진.
  • uWebSockets, Brotli, lol-html, and tinycc: 핵심 성능에 중요한 라이브러리.

V8 호환성에 관해서, Buz는 인기 있는 패키지가 계속 작동하도록 부분적인 V8 API 셈을 사용하는 Bun의 기존 전략을 유지하며, 전체 범위를 구현하지 않습니다.

커뮤니티 관점 및 비판

  • AI 사용에 관하여: 일부 사용자는 LLMs가 allegedly LLMs에 의해 생성된 코드를 정리하는 데 사용되는 것에 대한 아이러니를 표현했으며, 한 사용자는 "2026년에 기술의 정점에 도달했다"고 언급했습니다.
  • 유용성에 관하여: 일부 개발자는 서브세컨드 빌드 시간의 실용적 가치를 의문시했으며, 빌드 속도가 런타임 개발에서 주요 병목이 거의 없다고 주장했습니다.
  • 지속 가능성에 관하여: 비판자들은 부가 프로젝트로 JavaScript 런타임을 유지하는 어려움을 지적했으며, 광범위한 생태계가 없을 경우 사용자는 공식 Bun 릴리스를 선호하거나 Node.js로 돌아갈 수 있다고 지적했습니다.
  • 코드 품질에 관하여: 다른 개발자들은 코드 관리에 대한 집중을 칭찬했으며, 일반적인 "tick-tock" 사이클을 언급했는데, 여기서 프로젝트는 기능 개발( "tick" )을 빠르게 진행한 후 안정화 및 "unslopifying"( "tock" )을 위한 기간이 필요합니다.

Sources