4 điểm bởi GN⁺ 2025-04-27 | 1 bình luận | Chia sẻ qua WhatsApp
  • RetrOS-32 là một hệ điều hành sở thích 32-bit hoàn toàn tùy biến, được xây dựng xoay quanh kiến trúc i386, bao gồm đồ họa, đa nhiệm và networking
  • Kernel, tiện ích và hệ thống build được viết bằng C và Assembly; các ứng dụng user space được viết bằng C++, sử dụng Make và Docker để build
  • Phần cứng thực tế đã được kiểm thử gồm Lenovo x240, dòng Asus Eee PC, Dell Optiplex 780, Samsung N150 Plus, Samsung NP-NC10 và IBM Thinkpad a21p
  • Hỗ trợ chạy bằng QEMU, v86 của copy.sh và boot trên phần cứng thật; trên máy thật, dùng GRUB ISO để ghi file .iso ra USB hoặc CD rồi chạy
  • Roadmap liệt kê các hạng mục đã hoàn tất như bootloader, lập lịch đa luồng ưu tiên ngắt, filesystem, trình quản lý cửa sổ đồ họa, network stack, thread user space và terminal ảo từ xa qua TCP

Tổng quan RetrOS-32

  • RetrOS-32 là dự án hệ điều hành sở thích 32-bit tập trung vào kiến trúc i386
  • Mô tả dự án cho biết đây là hệ điều hành sở thích 32-bit có đồ họa, đa nhiệm và networking
  • Ngày bắt đầu được ghi là 12 tháng 5 năm 2022
  • Trang dự án liên kết tới Project OSHub page

Đăng nhập và người dùng

  • Có 3 người dùng mặc định: system, admin, guest
  • Mật khẩu của admin là admin, còn guest không có mật khẩu
  • Hiện tại không có khác biệt giữa admin và guest
  • Có thể tạo người dùng bằng lệnh admin create <username> <password>

Ngôn ngữ triển khai và cấu hình build

  • Kernel, tiện ích và hệ thống build được viết bằng C và Assembly
  • Ứng dụng user space được viết bằng C++
  • Quá trình biên dịch sử dụng Make
  • Biên dịch đa nền tảng sử dụng Docker

Phần cứng đã kiểm thử

  • Danh sách phần cứng thực tế đã được kiểm thử như sau
    • Lenovo x240
    • Dòng Asus Eee PC
    • Dell Optiplex 780
    • Samsung N150 Plus
    • Samsung NP-NC10
    • IBM Thinkpad a21p

Cách build và chạy

  • Trong môi trường đa nền tảng, cần Docker để biên dịch file image và QEMU để giả lập
  • Phụ thuộc biên dịch native khác nhau theo từng nền tảng
    • MacOS: i386-elf-gcc, i386-elf-ld, i386-elf-g++
    • Linux / WSL Ubuntu: build-essential, gcc-multilib
    • Nếu dùng GRUB làm bootloader thì cũng cần grub2, xorriso, xxd
  • Trên Linux, build và chạy theo thứ tự: clone repository, ./debian.sh, khởi tạo Git submodule, make compile, make img, make qemu
  • MacOS hiện không thể biên dịch native vì các công cụ build phụ thuộc vào mã x86 32-bit; Docker là cách đơn giản nhất
  • Windows dùng Docker hoặc WSL
  • Có ba cách chạy
    • Upload file .img lên copy.sh v86 dưới dạng image ổ cứng
    • Chạy make qemu hoặc qemu-system-i386 <image name> trong QEMU
    • Trên phần cứng thật, ghi file .iso ra USB hoặc CD và dùng GRUB ISO

Cấu trúc dự án

  • Cấu trúc repository được chia thành các thư mục kernel, driver, đồ họa, mạng, filesystem, thư viện, ứng dụng user space, test và công cụ
  • boot chứa bootloader tùy biến và multiboot.ld
  • kernel chứa mã nguồn kernel chính, mã theo từng kiến trúc và mã kernel thread
  • apps chứa ứng dụng user space cùng libcore.a, libgraphic.a, libnet.a
  • net chứa mã networking, còn fs chứa mã liên quan đến filesystem
  • tools gồm các công cụ build và script

Các hạng mục đã hoàn tất và việc còn lại

  • Các hạng mục liên quan đến boot đã hoàn tất gồm bootloader tùy biến, tương thích GRUB và bootloader Stage 2
  • Chức năng kernel và hệ thống bao gồm
    • Lập lịch ưu tiên ngắt đa luồng
    • Tách biệt kernel/user space dựa trên GDT và TSS
    • Xử lý interrupt
    • IPC
    • System call
    • Thread user space
  • Các chức năng liên quan đến driver và phần cứng gồm bàn phím/chuột PS/2, PIT, VESA 640x480x8, RTC, Serial, E1000, PCI
  • Về filesystem và thiết bị lưu trữ, đã hoàn tất driver ATA IDE, filesystem tương tự Ext2, FAT16, đọc/ghi
    • FAT16 hỗ trợ tối đa file 32MB
    • Atapi vẫn chưa hoàn tất
  • Chức năng bộ nhớ gồm bộ nhớ ảo 32-bit, kalloc/kfree của kernel, malloc/free của user space
  • Chức năng đồ họa gồm trình quản lý cửa sổ, GFXLib, render double framebuffer, sự kiện chuột, resize động, toàn màn hình và thư viện widget
    • Custom HTML to Widgets chưa hoàn tất
  • Network stack đã hoàn tất Ethernet, IP, ARP, UDP, Socket API, interface Loopback, DHCP, DNS, TCP và lệnh kiểu netcat
    • Webserver, FTP, IRC, SSH, Telnet, HTTP, HTML chưa hoàn tất
  • Ứng dụng và công cụ gồm terminal, window server, thông tin tiến trình, Finder, trình biên dịch C/trình thông dịch bytecode, VM tùy biến để chạy bytecode, trình soạn thảo có tô sáng cú pháp, máy tính, game 3D, game Snake ở chế độ văn bản, terminal ảo từ xa qua TCP và thư viện nén LZ
  • Danh sách đầy đủ các tính năng đề xuất và vấn đề đã biết nằm trong open issues

Giấy phép và liên kết dự án

1 bình luận

 
GN⁺ 2025-04-27
Ý kiến trên Hacker News
  • Những dự án như thế này dễ nhìn hơn AI nhạt nhẽo rất nhiều. Có lẽ không phải thứ bán được, nhưng là hình ảnh một kỹ sư sáng tạo thể hiện kỹ năng của mình
    Hồi cuối tuổi teen tôi đã học khá nhiều về phát triển OS như một sở thích, thật sự rất tuyệt, và đến giờ thỉnh thoảng tôi vẫn thử viết các kernel nhỏ. Cái gần nhất tôi làm là một kernel RISC-V nhỏ in ra thông điệp cho bạn đời của tôi

    • Không phải lo chuyện bán hàng hay marketing đúng là rất giải phóng. Cứ phát minh lại bánh xe cho đến khi có ý tưởng mới xuất hiện
    • Gọi chung AI là “nhạt nhẽo” thì hơi kỳ. Trước khi được đóng gói thành trải nghiệm người dùng thông minh, nó gần như là một cuộc khám phá học thuật chẳng kiếm được mấy tiền, tức gần với công việc thủ công của người thợ hơn
    • Nghe như đang nói một thiết bị hobby nhỏ thú vị hơn nhiều so với công nghệ vô lý nhất trong lịch sử nhân loại
  • Tôi mong phông chữ hệ thống mặc định là một biến thể hẹp hơn. Như vậy hệ thống sẽ trông tinh tế hơn nhiều, và cũng có khá nhiều chỗ có vẻ cần thêm không gian ngang cho chữ
    Nên giảm chiều rộng từng ký tự và thu hẹp khoảng cách giữa các ký tự hết mức có thể. Với cỡ chữ và độ phân giải đang dùng, khoảng cách 1 pixel có vẻ là đủ
    Tôi không rành hệ thống phông chữ lắm nhưng giả định đây là phông bitmap monospace. Nếu quá khó thay đổi trong codebase thì cũng không cần bận tâm
    Tôi cũng đã tự xây một trang web OS từ đầu được một thời gian, và gần đây viết lại toàn bộ lớp phông chữ nên phần này đặc biệt đập vào mắt

    • Tôi đồng ý rằng phông hiện tại chưa tối ưu lắm. Về cơ bản tôi vẫn đang dùng gần như nguyên phông ban đầu mà tôi làm cho chạy được lúc khởi đầu
      Tôi cũng đã xem xét render phông đúng nghĩa và nó nằm trong danh sách việc cần làm, nhưng cứ bị trì hoãn mãi
    • Không khí căng ghê
      “Tôi đã làm một hệ điều hành!”
      “Ừm, phông chữ không ổn lắm”
      Cảm giác đây là đỉnh cao của HN
  • Tuyệt. Tôi tò mò nếu hôm nay bắt đầu lại thì bạn sẽ làm gì khác đi
    Tôi cũng tò mò bạn nghĩ ngôn ngữ nào phù hợp cho phần cấp thấp. Kiểu như vẫn bám vào C, dùng một tập con C++ đơn giản, hay cân nhắc ngôn ngữ mới hơn
    Tài liệu thì quá nhiều, tôi cũng muốn biết bạn đã giữ dự án luôn thú vị như thế nào thay vì chỉ sao chép code của người khác

    • Điều lớn nhất tôi sẽ làm khác là lập kế hoạch. Ban đầu tôi chỉ có mục tiêu tạo một OS hello world cơ bản, nhưng rồi cứ thêm tính năng mới và làm nhiều thứ cùng lúc, tạo ra nợ kỹ thuật mà đến giờ vẫn còn đang trả
      Có lẽ tôi cũng sẽ cố giảm phụ thuộc vào UNIX
      Về ngôn ngữ, tôi thích C vì cú pháp cơ bản và phong cách đi thẳng vào trọng tâm. Với ứng dụng user space thì có thể cân nhắc ngôn ngữ khác
      Tôi muốn tự viết mọi thứ từ đầu, và không port phần mềm là cốt lõi của dự án. Nhìn chung tôi giữ quy tắc “chép ý tưởng, không chép code”
  • Từ góc nhìn của một người từng dùng Commodore PET 2001 năm 1977 thì cũng thật sự tuyệt. Tôi đang nghịch KolibriOS và MenuetOSx64, và giờ thấy muốn tự làm OS. Làm được như vậy thật đáng nể

  • Dự án thật sự ấn tượng, xin chúc mừng. Tôi đã thích phát triển OS từ hồi teen, nên thấy một thành quả như thế này được triển khai thật sự khiến tôi vui
    Tôi cũng hơi tò mò hệ thống con đồ họa được khởi tạo như thế nào. Chúc mọi điều tốt đẹp

  • Ước gì tôi cũng có thể dành thời gian cho một dự án đam mê như thế này
    Quên tính thực dụng đi, quên chiến lược thâm nhập thị trường đi, quên sự phù hợp với thị trường mục tiêu đi, chỉ đơn giản là làm và học

    • Việc không cần nghĩ liệu nó có thực sự “được dùng” hay thị trường ra sao đúng là rất sảng khoái. Đây thuần túy là công việc vì niềm vui và học hỏi
    • Tôi tò mò vì sao bạn không thể dành thời gian. Từ nhỏ đến giờ nếu không có dự án cá nhân thì có lẽ tôi đã khá mất phương hướng
      Một trong số đó là một OS đồ chơi, nhưng khi phát triển OS cấp thấp trở thành công việc thật sự của tôi thì dự án đó dừng lại
  • Tôi đã ở lĩnh vực này hàng chục năm và đang cố học phát triển OS. Tôi biết FASM, NASM, FASM-G ở mức nhất định
    Nhưng tôi muốn nghiên cứu đầu ra của các chương trình assembler để hiểu OS thực sự hoạt động ở cấp nhị phân như thế nào
    Tôi tò mò bạn có học mã lệnh của một kiến trúc cụ thể không, đã xử lý chương trình driver thiết bị thế nào, và liệu có thể tóm tắt các bước để tự phát triển OS không

    • Tôi nghĩ nơi tốt nhất để học là diễn đàn osdevwiki osdev. Có rất nhiều tài liệu hữu ích để bắt đầu
      Cũng có vài tutorial, nhưng chúng thường có lỗi và dễ biến thành việc gần như tạo lại OS của họ
      Tôi không đào quá sâu vào mã lệnh; chỉ tra khi viết C compiler, nên tôi chỉ biết các lệnh cơ bản phổ biến nhất
      https://forum.osdev.org/
      https://wiki.osdev.org/Expanded_Main_Page
  • Thật sự tuyệt. Tôi mong tinh thần điện toán thời kỳ đầu trở lại nhiều hơn, khi người ta mày mò chính cái máy tính nhiều hơn là tầng ứng dụng
    Tôi đã nghĩ đến việc làm một máy tính cá nhân như dự án hobby dài hạn. Một chiếc máy tính mà tôi tự làm toàn bộ software stack và biết nguồn gốc của từng bit trong hệ thống
    Phần cứng thì khó kiểm soát ở cùng mức đó, trừ khi có thể dùng FPGA đạt đủ hiệu năng để chạy toàn bộ, nhưng ít nhất phần mềm có vẻ khả thi
    Trước giờ điều đó trông không thực tế, nhưng dự án này cho thấy là có thể. Có vẻ cũng đang triển khai một C compiler hobby: https://github.com/joexbayer/C-Compiler

    • Biết rằng mình tự viết mọi thứ từ tầng user space trên cùng xuống đến driver thật sự là một cảm giác rất tuyệt. Đồng thời cũng là địa ngục debug
      C compiler được làm cho OS này và chạy bên trong OS. Dự án trở nên quá lớn nên tôi muốn tách khỏi repo OS, nhất là vì nó cũng chạy trên Linux
  • Tôi muốn bạn giải thích thêm compiler này tương tác với hệ điều hành như thế nào. Đặc biệt là cách xử lý các tính năng như struct, cũng như các giới hạn hiện tại và cải tiến dự kiến trong mảng này

    • Không có tương tác ma thuật nào giữa compiler và OS. Nó chỉ compile ra cùng mã máy (i386) và dùng interrupt cho system call
      Struct được xử lý như một vùng bộ nhớ có kích thước xác định theo các member, còn truy cập member được xử lý bằng offset bên trong vùng đó
      Hiện tại còn nhiều hạn chế, như chỉ có int và char, cũng không có câu lệnh switch. Khác biệt lớn nhất so với C chuẩn là cho phép hàm bên trong struct, và nếu là hàm của struct thì struct được truyền ngầm vào hàm. Có thể xem chi tiết hơn tại đây:
      https://github.com/joexbayer/C-Compiler
  • Đây là một trong những dự án đam mê ấn tượng nhất tôi thấy ở đây sau khá lâu. Tôi tò mò vì sao bạn quyết định dùng C compiler tự viết

    • Tôi có quy tắc muốn tự viết mọi thứ, và việc làm compiler cũng luôn là một trong những “mục tiêu” của tôi. Vì vậy nó khớp với nhau một cách tự nhiên