Chạy mọi gói Nix ngay trong trình duyệt — kỳ quan công nghệ mới
Dự án trynix.dev cho phép người dùng duyệt toàn bộ lịch sử nixpkgs với hơn 310.000 phiên bản gói và chạy bất kỳ gói nào trong một máy ảo Linux khởi động ngay trong tab trình duyệt, không cần cài đặt gì trên máy chủ. Công nghệ này kết hợp nhân Linux chạy trên WebAssembly, lưu trữ Nix trong bộ nhớ và khai thác các cache công khai để mang lại trải nghiệm tức thì.

Chạy mọi gói Nix ngay trong trình duyệt — kỳ quan công nghệ mới
Một công cụ mang tên trynix.dev vừa ra mắt, cho phép người dùng duyệt qua hơn 310.083 phiên bản gói trong toàn bộ lịch sử nixpkgs và chạy bất kỳ gói nào trong một máy ảo Linux khởi động ngay trong tab trình duyệt. Điều đặc biệt là không cần cài đặt bất cứ thứ gì trên máy chủ — mọi thứ diễn ra hoàn toàn trong trình duyệt.
Dự án này là "tác phẩm để đời" của tác giả Farid Zakaria, kết hợp nhiều ý tưởng ông đã ấp ủ trong nhiều năm: nixpkgs-multiverse (lập chỉ mục mọi phiên bản của mọi gói Nix từng được phát hành), grail (dạy nó về phạm vi phiên bản) và omniflake (cho phép thêm hơn 16.000 flakes từ một đầu vào duy nhất). Kết quả là một hệ thống cho phép người dùng chỉ cần tìm kiếm một gói, chọn phiên bản, và khởi động nó trong một môi trường shell thực sự — tất cả chỉ trong vài giây.
Bí mật đằng sau "phép thuật"
Điểm mấu chốt của dự án nằm ở khả năng truy cập các store-path trực tiếp từ các cache công khai phục vụ header access-control-allow-origin: *. Điều này khiến trình duyệt trở thành một Nix client hợp lệ — có thể tải xuống các closure cần thiết mà không cần thực hiện quá trình đánh giá (evaluation) hay biên dịch phức tạp.
Phần còn lại được giải quyết bằng cách chạy một nhân Linux x86_64 thực sự trên WebAssembly thông qua dự án QEMU, kết hợp với một hệ thống tập tin chứa Nix store trong bộ nhớ. Toàn bộ kiến trúc không có bất kỳ máy chủ nào — trang web chỉ là các tệp tĩnh, còn mọi thứ khác đều là cache công khai. Đây chính là hiện thân tối thượng của triết lý "Erase your darlings".
Minh họa giao diện trynix
Trải nghiệm "tức thì" nhờ những thủ thuật thông minh
Khởi động một nhân máy ảo dưới chế độ giả lập thường rất chậm, nhưng trynix đã áp dụng nhiều kỹ thuật để tạo cảm giác nhanh như chớp:
- Pre-fetch động cơ và snapshot: Trang web tải trước QEMU và snapshot máy ảo ở chế độ nền, vì vậy khi người dùng nhấp vào một liên kết, mọi thứ đã sẵn sàng.
- Không bao giờ khởi động từ đầu: Máy ảo được khởi động một lần trên một bản build gốc, sau đó tạm dừng trước thời điểm mount store và lưu thành snapshot. Các lần truy cập sau chỉ cần tải closure của store-path mong muốn.
- Tận dụng bộ nhớ đệm trình duyệt: Lần truy cập thứ hai trở đi nhanh hơn đáng kể so với lần đầu tiên.
Tác giả cũng dành lời khen cho các mô hình ngôn ngữ lớn (LLM) đã giúp ông tìm ra nhiều cơ hội tối ưu hiệu suất và điểm nghẽn trong quá trình phát triển.
Không chỉ là một màn trình diễn
Mặc dù demo rất ấn tượng và thú vị, tác giả tin rằng công nghệ này có nhiều ứng dụng thực tế sâu sắc hơn:
- Đánh giá pull request bằng phần mềm thực: Nếu CI của bạn đã đẩy artifact lên cache như Cachix, một bot có thể để lại liên kết khởi động chính xác artifact đó. Người đánh giá không cần clone, không cần build, chỉ cần nhấp chuột và thử nghiệm ngay — câu hỏi "bản vá này có sửa được lỗi không?" không còn là một thí nghiệm tư duy.
- Agent artifacts: Các tác nhân AI có thể tạo ra các store-path như artifact, sau đó chia sẻ với con người hoặc các agent khác. Một bot có thể tạo store-path và bot khác có thể khởi động nó trong tab trình duyệt để chạy thử nghiệm.
- Báo cáo lỗi kèm môi trường: Câu nói "chạy được trên máy của tôi" giờ đây có thể trở thành một URL để tái hiện lỗi.
- Tài liệu có thể chạy được: Một hướng dẫn nêu tên phiên bản công cụ có thể liên kết đến một shell với phiên bản chính xác đó trên PATH, được cố định vĩnh viễn, không có bước cài đặt nào cản trở người đọc.
- Khai quật khảo cổ học phần mềm: Bạn có thể chạy Python từ năm 2017 hoặc hello từ năm 2005 để khám phá hành vi lịch sử của chúng — điều này vốn đã khả thi với Nix, nhưng giờ đây có thể thực hiện ngay trong trình duyệt.
Những hạn chế hiện tại
Dù ấn tượng, trynix vẫn còn những giới hạn nhất định:
- Tốc độ thực thi: Binaries vẫn chạy dưới chế độ giả lập, vì vậy việc dịch từ x86_64 sang WebAssembly diễn ra ở lần chạy đầu tiên. Các lần chạy sau nhanh hơn nhờ bộ nhớ đệm dịch trong RAM.
- Giới hạn bộ nhớ: Toàn bộ closure phải vừa trong bộ nhớ tab, hiện bị giới hạn cứng ở khoảng 1,5GiB. WebAssembly cũng có giới hạn 4GiB do không gian địa chỉ 32-bit.
- Không có giao diện đồ họa: Đây là console nối tiếp, vì vậy chỉ chạy được các chương trình dòng lệnh.
Mã nguồn của dự án có tại github.com/fzakaria/trynix. Nix cache đã âm thầm phục vụ header CORS mở trong nhiều năm — và giờ đây, nó cuối cùng cũng được "khai thác" đúng cách để mang lại một trải nghiệm đột phá cho cộng đồng Nix nói riêng và những người yêu công nghệ nói chung.

