Moxnox 1.0: Hệ điều hành hobby tự dựng lấy chính mình, chạy trên btrfs

Công nghệ27 tháng 10, 2026·6 phút đọc

Moxnox vừa phát hành phiên bản 1.0 với khoảng 130.000 dòng C++, mô phỏng kiến trúc NT của Windows nhưng tương thích POSIX và chạy trực tiếp trên hệ thống tập tin btrfs. Dự án do một nhà phát triển cá nhân viết tay được đánh giá đã đủ chín muồi để tự biên dịch chính nó trên amd64 và aarch64.

Moxnox 1.0: Hệ điều hành hobby tự dựng lấy chính mình, chạy trên btrfs

Moxnox v1.0 vừa chính thức ra mắt. Đây là một hệ điều hành "hobby" được thiết kế theo phong cách Windows NT nhưng lại tương thích POSIX và chạy trực tiếp trên hệ thống tập tin btrfs. Điều đáng chú ý nhất là nó đã đạt mức self-hosting: bạn có thể biên dịch chính Moxnox ngay trên Moxnox.

Ảnh chụp màn hình MoxnoxẢnh chụp màn hình Moxnox

Ba trụ cột của một dự án cá nhân

Theo mô tả từ tác giả, Moxnox đứng trên ba yếu tố chính:

  • Thiết kế kiểu NT: các lệnh gọi hệ thống (syscall) được mô phỏng theo Windows NT, không giống cách tiếp cận của ReactOS là tái tạo chính xác toàn bộ Windows.
  • Tương thích POSIX: vẫn có thể chạy phần mềm viết cho các hệ Unix, miễn là được biên dịch lại, kèm theo một bộ công cụ GNU đầy đủ.
  • Chạy trên btrfs: hệ thống tập tin "quốc dân" của cộng đồng Linux, dù mã btrfs hiện chỉ đáp ứng nhu cầu cơ bản và chưa được thử lửa.

Phiên bản 1.0 gồm khoảng 130.000 dòng C++, chạy trên hai kiến trúc amd64 và aarch64.

Cách trải nghiệm thử

Muốn thử nghiệm nhanh, người dùng có thể chạy Moxnox trong QEMU. Sau khi tải và giải nén file ảnh, chỉ cần một dòng lệnh qemu-system-x86_64 với các thiết bị virtio là đã khởi động được hệ điều hành. Với ARM, cấu hình tương tự dùng qemu-system-aarch64 cùng firmware EDK2.

Về phần cứng, bản amd64 được biên dịch cho x86-64-v3, tức là gần như mọi máy sản xuất từ khoảng năm 2015 trở lại đây. Hệ thống tự động bật AVX512 nếu phát hiện. Bản ARM yêu cầu ARMv8.1 với LSE atomics, nghĩa là Raspberry Pi 5 trở lên, và chỉ hỗ trợ ACPI thay vì Device Tree.

Nếu muốn cài đặt thật lên ổ cứng, người dùng cần chuẩn bị một phân vùng khoảng 32 GB, định dạng bằng btrfs, giải nén ảnh hệ thống vào đó rồi thêm mục khởi động bằng efibootmgr. File kernel ".efi" thực chất là một file polyglot, vừa tuân theo giao thức EFI vừa tuân theo giao thức khởi động Linux.

Mức độ tương thích NT

Triết lý của dự án rất rõ ràng: các syscall và giao diện cấp thấp khớp với NT, nhưng không sao chép các daemon hay cấu trúc nội bộ của kernel. Điều này thể hiện qua nhiều chi tiết:

  • Các file nhị phân dùng định dạng PE thay vì ELF, đuôi .exe hoặc .dll.
  • Ngoại lệ C++ được xử lý qua SEH (Structured Exception Handling).
  • Tín hiệu POSIX được triển khai bằng Asynchronous Procedure Calls.
  • Quy ước gọi hàm rcx, rdx, r8, r9 giống hệt Windows.
  • Các đặc điểm "kỳ quặc" của C trên Windows cũng được giữ nguyên, chẳng hạn sizeof(long) == sizeof(int32_t).

Tuy nhiên, tác giả cố tình bỏ qua nhiều thứ phức tạp của NT như token, Registry hay I/O completion ports. Đường dẫn file cũng theo kiểu POSIX với dấu gạch chéo, khác với hệ thống đường dẫn ảo ẩn của Windows.

Mức độ tương thích POSIX

Trong khoảng 1.200 hàm của chuẩn POSIX 2024, Moxnox đã triển khai được 642 hàm — phần lớn những gì thực tế được dùng, với gnulib vá tạm một số chỗ. Điểm đáng chú ý là fork có tồn tại, điều mà Windows không có.

Dự án cũng "học hỏi" nhiều ý tưởng tốt từ Linux như dentry cache, large folios, ánh xạ toàn bộ bộ nhớ vật lý và evdev.

Dù vậy vẫn còn những thiếu sót đáng kể: AF_UNIX mới hoàn thiện một nửa, mkfifo tạo được inode nhưng I/O không được chuyển hướng như mong đợi, và nghiêm trọng hơn — tín hiệu chỉ được giao khi một luồng trả về từ syscall. Nghĩa là một chương trình chạy vòng lặp while (true) { } hiện không thể bị kill.

Những gì còn thiếu

Phiên bản 1.0, dù đã self-hosting, vẫn còn nhiều khoảng trống:

  • Chưa có giao diện đồ họa (GUI).
  • Không hỗ trợ múi giờ hay bố cục bàn phím khác nhau.
  • Không có locale và bộ ký tự ngoài UTF-8.
  • Gần như chưa có gì về bảo mật.
  • Chưa hỗ trợ nhiều người dùng và nhóm.

Về hiệu năng, tác giả thừa nhận bộ cấp phát bộ nhớ trong userspace còn chậm, TCP không thương lượng MSS nên chỉ giữ cửa sổ 64KB, và dentry cache không bao giờ được dọn nên inode cứ mở mãi cho đến khi bị xóa.

Có chạy được phần mềm Windows không?

Câu trả lời là không, ít nhất là chưa. Moxnox cố tình không triển khai các DLL Win32, ngoại trừ vài hàm trong kernelbase mà runtime mingw cần. Hướng cải tiến trong tương lai là loại bỏ hoàn toàn những hàm này rồi chuyển sang dùng các DLL Win32 của Wine, bỏ qua các phần không cần thiết như wineserver hay ntdll.

Về việc dùng AI

Tác giả khẳng định không có dòng mã cốt lõi nào do AI viết. AI chỉ được dùng cho các phần mang tính cơ học của việc port, như chuyển autotools sang CMake, thay ioctl bằng tcgetwinsize, dịch cấu trúc C sang Rust, cùng một số bài kiểm thử smoke test. Điểm mà tác giả đánh giá AI thực sự hữu ích là review commit: đưa vào một hash, Claude sẽ chỉ ra lỗi rò rỉ bộ nhớ hay deadlock trước khi bạn tự làm mình xấu hổ.

Động lực đằng sau dự án

"Để cho vui. Cộng thêm việc cách duy nhất để thực sự hiểu một thứ vận hành ra sao là tự tay viết nó ra."

Tác giả cũng cho rằng kernel NT bị đánh giá thấp một cách tội nghiệp và gần như xa lạ với cộng đồng hobby. Theo ông, NT đã có những tính năng mà Linux phải mất nhiều năm mới nghĩ ra thiết kế riêng, chẳng hạn eventfd và pidfd. Ông cũng lấy làm tiếc khi Windows cứ né tránh tương thích POSIX đầy đủ — từ bản nửa vời thời kỳ đầu, đến WSL1 rồi bị bỏ rơi, cho tới Nano Server cũng chung số phận.

Vì vậy, Moxnox chính là "phiên bản Windows mà tôi ước nó đã trở thành".

Với những ai quan tâm đến hệ điều hành và lập trình hệ thống, đây là một dự án đáng để theo dõi và thử nghiệm — dù lời khuyên từ chính tác giả là đừng gắn bất kỳ ổ đĩa nào chứa dữ liệu quan trọng vào btrfs của Moxnox.

Chia sẻ:FacebookX
Nội dung tổng hợp bằng AI, mang tính tham khảo. Xem bài gốc ↗