TITLE: Cruller: 생산 중심의 Bun 런타임, Zig 0.16로 포팅
Cruller: 생산 중심의 Bun 런타임, Zig 0.16로 포팅
Cruller는 Bun의 개발 도구를 제거하여 최소한의 프로덕션 준비가 된 JavaScript 런타임을 제공합니다
Cruller는 Bun의 마지막 Zig 기반 릴리스의 특수 포크입니다. 완전한 Bun 런타임은 패키지 관리자, 번들러, 테스트 러너를 포함하는 반면, Cruller는 사전 빌드된 프로덕션 JavaScript 서버를 실행하는 데 필요한 필수 구성 요소로 축소되었습니다. vanilla Zig 0.16로 포팅되어 빌드 프로세스가 더욱 간소화되고 바이너리 크기가 작아졌습니다.
핵심 기능 및 유지된 구성 요소
Cruller는 개발 지향 하위 시스템을 제거하면서 Bun 런타임의 고성능 코어를 유지합니다. 다음 구성 요소는 유지됩니다:
- JavaScriptCore: JavaScript 실행을 위한 기본 엔진
- Web APIs:
Bun.serve,fetch, 스트림,Blob,Request,Response지원 - Networking: HTTP/1, HTTP/2, HTTP/3 지원, WebSockets 포함
- Infrastructure: 사전 빌드된 JavaScript를 위한 정적 제공 및 모듈 리졸버
최소한의 footprint을 달성하기 위해 Cruller는 패키지 관리자, bundler/transpiler, 셸, 테스트 러너, N-API, SQL 클라이언트, 아카이브 지원을 제거합니다.
기술적 구현 및 Zig 0.16 포팅
Zig 0.16로의 포팅은 Bun의 원래 패치된 Zig 빌드 통합에서 런타임을 분리하는 것을 포함했습니다. 주요 기술적 개선 사항은 다음과 같습니다:
- Vanilla Zig Build Graph: 프로젝트는 이제 표준 Zig 0.16 빌드 시스템을 사용합니다.
- Compatibility Shims: 유지관리자는 Zig 0.15와 0.16 사이에서 변경된 API에 대한 shims를 구현했습니다.
- Portable Release Builds: 릴리스 빌드가 런타임 시 빌드 디렉터리에서 생성된 JavaScript를 로드할 필요가 없도록 생성된 코드 임베딩 모듈이 추가되었습니다.
성능 및 바이너리 크기
Linux x64에서의 측정 결과, Cruller는 공식 Bun 1.3.14 바이너리보다 현저히 작습니다:
| 측정항목 | Cruller (ReleaseFast stripped) | Official Bun | 축소율 | | :--- | :--- | :--- | | 바이너리 크기 | 73.0 MiB | 88.5 MiB | ~18% |
성능 측면에서 V8 Crypto pure-JS 벤치마크는 공식 Bun 런타임과 성능 동등성을 보였으며, Cruller의 중앙값이 약 2% 더 높았는데, 저자는これを 정상적인 실행 간 변동으로 돌립니다.
미래 로드맵
유지관리자는 Cruller를 프로덕션 런타임으로 사용하고 전체 Bun 런타임을 개발에 사용하려는 의도를 가지고 있습니다. 계획된 향상 사항은 다음과 같습니다:
- Enhanced Networking: HTTP/2 및 HTTP/3 지원 강화
- Native Extensions: 네이티브 ZMQ 플러그인 추가
- Memory Management: 복잡한 메모리 정책을 위한 별도의 QuickJS 기반 제어 평면을 통한 동적 메모리 컨트롤러 구현
- Embeddability: 깨끗한
.zig인터페이스를 가진 동적 라이브러리로 엔진을 패키징하여 다른 Zig 애플리케이션에 임베드할 수 있도록 함
커뮤니티 토론 및 비판
"저는 개발 런타임을 프로덕션 런타임에서 크게 벗어나지 않을 것 같습니다. 프로덕션에서만 나타나는 동작의 가능성이 제 취향에는 너무 높습니다.
다른 비판자들은 일부가 'bad Zig practices'라고 주장하는 코드베이스를 포크하는 가치에 의문을 제기했으며, 일부 사용자는 포크에서 원래 git 기록의 정리 때문에 원래 커밋 작성자의 atribbution이 제거된 것에 대해 우려를 표했습니다.