Bun Chuyển Sang Rust: Tại Sao Runtime JavaScript Nổi Tiếng Nhất Lại Bỏ Zig?
Chuyện Gì Vừa Xảy Ra?
Ngày 14/5/2026, Jarred Sumner — creator của Bun — merge PR #30412 với tiêu đề không thể gây shock hơn: "Rewrite Bun in Rust".
Đây không phải PR nhỏ. Đây là thay đổi kiến trúc lớn nhất của Bun kể từ khi ra đời. Bun — runtime JavaScript/TypeScript được viết bằng Zig từ năm 2022 — giờ chuyển phần core sang Rust.
Và reaction của cộng đồng? 467 upvotes, 547 comments trên Hacker News trong chưa đầy 24h. Mọi người đang chia thành 2 phe: "Rust is the future" vs "Why abandon Zig?"
Bun Là Gì? Tóm Tắt Nhanh
Nếu bạn chưa biết, Bun là:
- JavaScript/TypeScript runtime cạnh tranh trực tiếp với Node.js
- Bundler, test runner, package manager — tất cả trong 1
- Nhanh hơn Node.js đáng kể trong nhiều benchmark
- Ban đầu được viết bằng Zig — ngôn ngữ lập trình hệ thống focused vào performance
Bun chọn Zig vì Zig cho phép control memory thủ công, compile nhanh, và không có garbage collector. Lý tưởng cho runtime cần tốc độ.
Vậy tại sao lại chuyển?
Tại Sao Bỏ Zig Sang Rust?
Theo PR description của Jarred Sumner, lý do chính không phải "Rust nhanh hơn Zig" — mà là công cụ phát hiện lỗi.
1. Memory Safety — Vấn Đế Lớn Nhất Của Bun
Bun gặp rất nhiều memory bugs trong suốt quá trình phát triển:
- Buffer overflow
- Use-after-free
- Memory leak
- Dangling pointer
Zig có safety checks nhưng chúng optional và không comprehensive. Rust thì khác — compiler bắt bạn xử lý memory safety ngay tại compile time. Không có cách nào "lách" trừ khi dùng unsafe.
Đây là lý do lớn nhất: Bun team đã dành quá nhiều thời gian debug memory bugs. Rust loại bỏ phần lớn vấn đề này ngay từ đầu.
2. Binary Size Nhỏ Hơn
PR cho biết binary size giảm 3-8MB. Với runtime cần distribute qua npm/bun install, mỗi MB đều quan trọng. Binary nhỏ hơn = download nhanh hơn, CI/CD nhanh hơn.
3. Benchmark Trung Lập Đến Nhanh Hơn
Không có regression performance. Benchmark chạy từ "trung lập" (neutral) đến "nhanh hơn". Nghĩa là bạn không mất gì khi chuyển — chỉ được thêm.
4. Kiến Trúc Giữ Nguyên
Điều thú vị: Bun không rewrite kiến trúc. Same architecture, same data structures, few 3rd-party libraries, và đặc biệt — không dùng async Rust.
Đây là điểm quan trọng. Họ không xây lại từ đầu. Họ port code từ Zig sang Rust, giữ nguyên logic, chỉ thay đổi cách memory được quản lý.
Cộng Đồng Nói Gì?
Phe ủng hộ
Quan điểm chung: "Zig hay nhưng ecosystem quá nhỏ. Rust có tooling, có crates, có community lớn. Bun team sẽ ship nhanh hơn với Rust."
Một developer trên HN nhận xét: "Bun đã dành 2 năm fighting memory bugs. Nếu Rust giải quyết được vấn đề đó, tại sao không?"
Phe phản đối
Zig community không hài lòng. Họ cho rằng:
- Zig đang phát triển nhanh, sẽ có better tooling soon
- Rust quá phức tạp cho project cần iterate nhanh
- Bun đang bỏ language mà nó giúp popularize
Một comment đáng chú ý: "Bun từng là flagship project của Zig. Bây giờ bỏ Zig, signal nào gửi đến cộng đồng Zig?"
Đánh giá
Đây là quyết định đúng. Lý do:
-
Practical > Pure: Bun là sản phẩm thương mại (backed by oven.sh). Họ cần ship features nhanh, fix bugs nhanh. Rust compiler bắt lỗi tại compile time = ít debug hơn = ship nhanh hơn.
-
Ecosystem matters: Rust có 150,000+ crates trên crates.io. Zig có khoảng 3,000. Khi cần tích hợp library, Rust có lợi thế vượt trội.
-
Memory safety là xu hướng: Android, Linux kernel, Windows — tất cả đang adopt Rust cho memory-critical code. Bun đi theo xu hướng này là hợp lý.
-
Không phải rewrite từ đầu: Họ giữ nguyên kiến trúc. Đây không phải "let's start over" mà là "let's port to a safer language." Rất khác biệt.
Điều Này Có Nghĩa Gì Với Developer?
Nếu bạn dùng Bun
- Không ảnh hưởng nhiều — Bun API không đổi, vẫn compatible với Node.js
- Binary size nhỏ hơn = install nhanh hơn
- Ít memory bugs hơn = ổn định hơn trong production
- Có thể thử ngay:
bun upgrade --canary
Nếu bạn đang học Zig
Đây là signal cần suy nghĩ. Zig vẫn hay, nhưng ecosystem đang nhỏ dần so với Rust. Nếu mục tiêu là career trong systems programming, Rust an toàn hơn (ý cả nghĩa đen và bóng).
Nếu bạn dùng Node.js/Deno
Competition giữa các JS runtime đang nóng hơn. Bun với Rust core sẽ:
- Có thể iterate nhanh hơn nhờ tooling tốt hơn
- Thu hút thêm contributors biết Rust (rộng hơn Zig)
- Ép Node.js và Deno phải cải thiện performance
So Sánh Nhanh: Zig vs Rust Cho Runtime
| Zig | Rust | |
|---|---|---|
| Memory safety | Optional checks | Compile-time guarantee |
| Ecosystem | ~3K packages | ~150K crates |
| Compile speed | Rất nhanh | Chậm hơn (nhưng đang cải thiện) |
| Learning curve | Trung bình | Cao |
| Community | Nhỏ, đang lớn | Lớn, mature |
| Tooling | Đang phát triển | Rất tốt (clippy, rust-analyzer) |
Kết Luận
Bun chuyển sang Rust không phải vì Zig kém — mà vì Rust giải quyết đúng vấn đề mà Bun đang gặp. Memory safety, ecosystem, tooling — tất cả đều ủng hộ Rust cho project ở scale của Bun.
Đây cũng là bài học cho mọi developer: chọn ngôn ngữ dựa trên bài toán cụ thể, không phải hype. Bun dùng Zig khi nó phù hợp, chuyển Rust khi cần. Không có "ngôn ngữ tốt nhất" — chỉ có "ngôn ngữ phù hợp nhất" cho từng giai đoạn.
Bun bỏ Zig — đúng hay sai?
Tham khảo: