Vercel Labs mã nguồn mở Zero-Native: Framework ứng dụng đa nền tảng viết bằng ngôn ngữ Zig
Vercel Labs mới đây đã công bố mã nguồn mở Zero-Native, một khung ứng dụng đa nền tảng được xây dựng trên ngôn ngữ Zig. Công cụ này sử dụng WebView của hệ điều hành thay thế Electron, mang lại hiệu suất cao hơn và kích thước ứng dụng nhỏ gọn đáng kể.

Vercel Labs gần đây đã mở mã nguồn cho Zero-Native, một khung công cụ (framework) dành cho các ứng dụng máy tính đa nền tảng. Điểm nổi bật của công cụ này là nó bỏ qua thời gian chạy (runtime) của Electron để sử dụng trực tiếp các WebView có sẵn trên hệ điều hành. Theo Vercel Labs, cách tiếp cận này giúp tạo ra các ứng dụng nhỏ gọn hơn, hiệu quả hơn với chi phí quá tải tối thiểu.
Zero-Native được viết hoàn toàn bằng ngôn ngữ lập trình Zig, cho phép tương tác trực tiếp với các thư viện C và sở hữu tốc độ biên dịch gia tăng rất nhanh. Hiện tại, framework này đang nhắm đến môi trường máy tính để bàn (desktop), nhưng đã có kế hoạch hỗ trợ các nền tảng di động trong tương lai.
Hiệu quả và tích hợp Web
Zero-Native cho phép các nhà phát triển kết hợp các giao diện web (front-end) phổ biến như Next.js, React, Vue hay Svelte với phần phụ trợ (back-end) được viết bằng Zig.
Mục tiêu chính của dự án là cung cấp các tệp thực thi (binaries) nhẹ nhàng và dấu chân bộ nhớ (memory footprint) nhỏ. Thông thường, các framework đa nền tảng như Electron phải đóng gói cả một thời gian chạy trình duyệt khổng lồ cùng ứng dụng, gây ra sự lãng phí tài nguyên đáng kể. Bằng cách sử dụng WebView gốc của hệ điều hành, Zero-Native giải quyết vấn đề này.
Tuy nhiên, như một phương án dự phòng (escape hatch), các nhà phát triển vẫn có thể cấu hình tệp kê khai app.zon để đóng gói Chromium thông qua Chromium Embedded Framework (CEF) nếu cần thiết.
Tại sao chọn ngôn ngữ Zig?
Một trong những lợi thế lớn nhất của Zero-Native là việc sử dụng ngôn ngữ Zig, nổi tiếng với tốc độ biên dịch nhanh hơn so với Rust.
Richard Feldman, người tạo ra ngôn ngữ lập trình Roc, năm ngoái đã thông báo viết lại hoàn toàn trình biên dịch của dự án từ Rust sang Zig. Ông nhận định rằng thời gian biên dịch chậm của Rust là một điểm đau lớn, làm giảm năng suất và sự hứng thú khi làm việc. Việc phải đợi vài giây để biên dịch một bài kiểm thử đơn lẻ là một trải nghiệm không thú vị. Trong quá trình phát triển ứng dụng — một quy trình lặp đi lặp đi rất nhiều — tốc độ biên dịch tăng (incremental compilation) đóng vai trò then chốt, mang lại cảm giác gần giống với môi trường phát triển web có tính năng tải lại tức thì (hot-reloading).
Ngoài ra, Zig tương tác trực tiếp với Giao diện Nhị phân Ứng dụng C (C ABI). Điều này có nghĩa là các nhà phát triển không cần giao diện hàm ngoại lai (foreign function interface) để tái sử dụng các thư viện C gốc. Thay vào đó, họ chỉ cần bao gồm các tệp tiêu đề hệ thống và gọi trực tiếp các SDK nền tảng hoặc codec âm thanh. Điều này góp phần giữ cho thời gian biên dịch luôn ở mức thấp.
Bảo mật và quyền hạn
Về khía cạnh bảo mật, Zero-Native sử dụng hệ thống dựa trên quyền hạn (capability-based), tương tự như Deno và Tauri. Cơ chế này hạn chế giao diện người dùng front-end truy cập tùy ý vào các tệp cục bộ hoặc kích hoạt các API nền tảng gốc.
Thay vào đó, mã Zig phải đăng ký rõ ràng các lệnh gốc mà nó muốn sử dụng, và tệp kê khai app.zon phải cấp quyền truy cập cụ thể liên quan. Điều này giúp tăng cường bảo mật và kiểm soát tốt hơn các tài nguyên hệ thống.
Hệ sinh thái các thay thế Electron
Zero-Natural gia nhập một hệ sinh thái đang rất sôi động với nhiều giải pháp thay thế Electron nhằm giảm sự cồng kềnh (bloat) của ứng dụng đa nền tảng, chẳng hạn như WebUI, LynxJS hay Tauri.
- WebUI: Sử dụng trình duyệt và webview có sẵn của hệ điều hành để làm giao diện cho các ngôn ngữ back-end như C/C++ hoặc Nim mà không cần đóng gói Chromium.
- Tauri: Tương tự sử dụng webview gốc của hệ điều hành nhưng kết hợp với back-end Rust và cầu nối truyền thông liên trình trình (IPC) giữa front-end và back-end.
- Lynx: Một framework dựa trên Rust biên dịch front-end (Web markup, CSS, JavaScript) thành các nguyên tố giao diện người dùng gốc thực thụ.
Tuy nhiên, việc dựa vào webview gốc để kết xuất (render) cũng có những rủi ro riêng. Người dùng có thể gặp phải các vấn đề không tương thích hoặc sự khác biệt hiển thị giữa các hệ điều hành. Quan trọng hơn, ứng dụng có thể bị lỗi hoặc không khởi động được nếu webview gốc không tồn tại hoặc phiên bản không được hỗ trợ.
Một nhà phát triển trên Reddit đã bình luận về việc thiếu thông tin chi tiết so với các khung công cụ hiện có, bày tỏ sự tò mò về cách Zero-Native so sánh với Tauri hay Electron nếu không có các bài kiểm nghiệm thực tế.
Tình trạng phát triển
Zero-Native hiện vẫn là một công cụ thử nghiệm đang được phát triển tích cực. Dự án hiện đang hỗ trợ nền tảng macOS và Linux, trong khi hỗ trợ cho Windows và các nền tảng di động đang được xây dựng và được mô tả là "đang thực hiện" (work in progress).
