7 điểm bởi GN⁺ 2025-06-24 | 1 bình luận | Chia sẻ qua WhatsApp
  • Hệ điều hành kiểu DOS 64-bit được phát triển bằng Rust, với một phần hợp ngữ x86 cũng được dùng để nạp kernel
  • Triển khai chế độ văn bản VGA (80x25), hệ thống tệp FAT12, ngăn xếp mạng IPv4 qua SLIP (ICMP/UDP/TCP/HTTP)
  • Chạy và được phát triển trong máy ảo dựa trên QEMU, đồng thời hỗ trợ một phần đĩa mềm vật lý thực tế
  • Bao gồm các tiện ích cơ bản như trình soạn thảo văn bản đơn giản, tự động hoàn thành file/thư mục bằng TAB, trò chơi Snake

Kiến trúc và bootloader

  • CPU mục tiêu là x86_64, và dự kiến sẽ hỗ trợ kiến trúc ARM (aarch) trong tương lai
  • Các phiên bản đầu dùng bootloader tự viết để nạp kernel vào bộ nhớ và thực thi
  • Ở kernel 64-bit, sử dụng bootloader GRUB2 để xử lý việc vào Long Mode và chuyển sang Protected Mode
  • Bootloader stage2 thực hiện thiết lập GDT, IDT, phân trang và cấp phát con trỏ Multiboot2
  • Kernel gồm bộ xử lý lệnh shell và nhiều thành phần tùy biến khác nhau

Mô phỏng và image trong QEMU

  • Việc phát triển và kiểm thử được thực hiện trong môi trường máy ảo thông qua QEMU
  • Tạo image ISO: dùng grub2-mkrescue và xorriso
  • Hỗ trợ tạo và mount image đĩa mềm FAT12, có thể dùng với thiết bị thực hoặc cờ QEMU (-fda fat.img)

Quy trình khởi tạo

  • Khi vào kernel, kiểm tra Long Mode, thẻ Multiboot2, hệ thống tệp FAT12, trạng thái VGA, v.v.
  • Sau khi in logo ASCII art, chuyển quyền điều khiển sang vòng lặp shell

Hệ thống tệp

  • Hỗ trợ hệ thống tệp FAT12: đọc/ghi/tìm kiếm/xóa tệp, tạo/xóa thư mục, v.v.
  • Hỗ trợ tạo và ghi đè tệp văn bản, cũng như thư mục con
  • Bao gồm chức năng kiểm tra tính nhất quán của hệ thống tệp bằng công cụ fsck
  • Dự kiến sẽ hỗ trợ FAT32 trong tương lai

Ngăn xếp mạng

  • Gửi và nhận gói IPv4 dựa trên giao thức SLIP
  • Hỗ trợ xử lý khung Ethernet (chưa kiểm thử hoàn chỉnh)
  • Hỗ trợ ICMP Echo (Request/Reply), UDP, TCP (máy trạng thái SYN/SYNACK), v.v.
  • Máy chủ HTTP đơn giản: phục vụ các trang HTML tĩnh

Trò chơi Snake

  • Tích hợp trò chơi Snake, và cũng có kế hoạch cho phiên bản nhiều người chơi (P2P TCP) trong tương lai
  • Dữ liệu trò chơi (màn chơi, điểm số) có thể được lưu và tải từ tệp văn bản
  • Thoát trò chơi bằng ESC, lưu High Score theo số điểm

Giá trị dự án và điểm ứng dụng

  • Là một ví dụ về hệ điều hành được viết bằng Rust, giúp cảm nhận hiệu quả nâng cao độ an toàn và năng suất trong phát triển phần mềm mức thấp
  • Nhờ kiểm thử SLIP/ICMP, triển khai đơn giản và hỗ trợ thiết bị thực, nó phù hợp để thử nghiệm OS và học cách hiện thực tùy biến
  • Có thể trực tiếp trải nghiệm cấu trúc của một hệ thống tương tự DOS kết hợp giữa Rust và hợp ngữ x86

1 bình luận

 
GN⁺ 2025-06-24
Ý kiến trên Hacker News
  • Dùng ngôn ngữ bảo đảm an toàn bộ nhớ, dựa trên x86_64, cũng có kế hoạch hỗ trợ Arm, có sẵn ngăn xếp mạng riêng, có thể khởi động bằng CD và multiboot, dự án hobby của tôi mang lại trải nghiệm vượt trội hơn DOS
    • Nếu muốn cạnh tranh với DOS thì bắt buộc phải hỗ trợ chạy Doom và BASIC, đây gần như là chuẩn cơ sở chính thức của phong cách DOS
    • Kết hợp Rust với hợp ngữ x86, nên nếu mục tiêu là theo đuổi an toàn bộ nhớ thì tôi tự hỏi giá trị thực tiễn có thật sự lớn không; ngày nay Rust cho cảm giác như đang bị marketing quá mức giống như in 3D từng bị thổi phồng, lợi ích thực tế trong quá trình phổ cập có vẻ hạn chế, và kiểu dự án này sẽ tốt hơn nếu có tương thích với phần mềm cũ, nếu không thì vẫn gần với dự án giáo dục hoặc dành cho người đam mê hơn, cảm giác còn khá xa mới đến mức dùng thực tế được
  • Tôi thật sự thích việc dùng SLIP và slattach(1) trong ngăn xếp mạng; khi tự làm một ngăn xếp TCP/IP đơn giản, tôi cũng từng nối SLIP qua pty trên Linux để tích hợp với kernel; trước đây macOS cũng từng có slattach(1) nhưng có vẻ giờ đã bị gỡ bỏ, không biết có ai từng dùng SLIP trên macOS để làm API mạng đa nền tảng chưa; phương án khác là tun/tap trên Linux và utun trên macOS, nhưng SLIP đơn giản hơn nhiều
  • Tôi tò mò vì sao lại chọn x86, là vì có nhiều tài nguyên hơn, vì định dạng lệnh độc đáo, vì độ phức tạp của chuỗi khởi động, hay vì chiến lược bám sát DOS, và dù có nói ARM cũng sẽ sớm được hỗ trợ, tôi vẫn thắc mắc cách hỗ trợ nhiều kiến trúc khi bản thân DOS vốn gắn rất chặt với cả phần cứng lẫn phần mềm
    • Tôi chưa trực tiếp xem dự án này, nhưng đoán là nền tảng x86 về mặt lịch sử đã tích hợp rất nhiều giao diện nhờ tương thích legacy, nên rất dễ triển khai một “OS kiểu DOS” cực mỏng và đơn giản; không cần xử lý những thứ như phân tích device tree, thiết lập MMU, hay các bus phức tạp như PCI(e), nên có thể bắt đầu rất đơn giản; còn ARM thì ngay từ bootstrap đã khó hơn, muốn giữ sự đơn giản thì phải chấp nhận nhiều ràng buộc hơn, khả năng làm việc khi không có MMU cũng bị giới hạn, lại không có giao diện BIOS nên không dễ đọc sector hay chờ nhập phím theo kiểu đơn giản như trên x86
    • Lý do chọn x86 là vì hệ thống này xuất phát từ phiên bản đầu tiên được làm bằng Turbo C, dựa trên BIOS interrupt và inline assembly; không phải chỉ muốn mô phỏng MS-DOS, nhưng có lấy rất nhiều cảm hứng từ đó; việc hỗ trợ nhiều kiến trúc có tiềm năng nhờ khả năng chỉ định kiến trúc đích của trình biên dịch Rust, chỉ cần chọn target trước khi build là quá trình build sẽ áp dụng ngay
  • Trong môi trường UEFI hiện nay, tôi nghĩ một giải pháp kiểu DOS 64-bit dựa trên FLOSS như thế này có lẽ còn hay hơn shell, sẽ rất hợp làm boot manager phong cách retro hoặc công cụ chẩn đoán hệ thống; tôi tò mò không biết nó có thể chạy từ EFI system partition hay không, tôi thấy có hỗ trợ fat12 nhưng không rõ gpt thế nào, và cũng muốn biết nó điều khiển phần cứng video trực tiếp hay chỉ xuất ra theo kiểu terminal
    • Việc khởi động từ EFI system partition vẫn chưa được thử nghiệm; hiện mới chỉ chính thức hỗ trợ hệ thống tệp FAT12 (có tính năng memory disk nhưng hiện chưa hoạt động), gpt hiện chưa được hỗ trợ, và hỗ trợ FAT32 đang được cân nhắc ưu tiên trước (vì đĩa flash thường dùng FAT32); còn câu hỏi cuối thì OS ghi trực tiếp vào bộ đệm bộ nhớ VGA, GRUB cung cấp độ phân giải 80x25
  • Tôi thấy dự án này rất ngầu, tiếc là đã bỏ lỡ câu kinh điển “chỉ là hobby thôi, sẽ không to lớn và chuyên nghiệp như Linux đâu”
  • Không biết có kế hoạch hỗ trợ dấu phụ trong tiếng Séc không
    • Ở phiên bản này chỉ dự định hỗ trợ tiếng Anh, còn phiên bản đầu tiên ban đầu được làm bằng tiếng Séc
  • Không biết có dùng trình điều khiển VGA được viết hoàn toàn mới bằng Rust không
  • Hỏi rằng nó mang phong cách DOS nhưng thực ra không tương thích với DOS, có đúng không
    • Nhận định đó là đúng; phiên bản đầu tiên là 16-bit và được thiết kế gần như tương thích với MS-DOS, và nếu chỉ cần xử lý I/O đĩa đơn giản thì theo nghĩa rộng tôi nghĩ vẫn có thể xếp vào nhóm hệ thống DOS
    • Tức là mức tương thích MS-DOS, hỗ trợ chạy Alley Cat, Dune 2, Doom
  • Có ý kiến rằng cần hàng đợi sự kiện để hỗ trợ async runtime
    • Mọi người nghĩ sao về việc triển khai một event loop hoàn chỉnh
  • Một câu hỏi đùa vui về khả năng chạy được Crysis