HN ra mắt: Hệ điều hành sở thích tự viết cuối cùng cũng chạy được trên IBM ThinkPad cổ điển
(github.com/joexbayer)- 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
.isora 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
- MacOS:
- 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
.imglên copy.sh v86 dưới dạng image ổ cứng - Chạy
make qemuhoặcqemu-system-i386 <image name>trong QEMU - Trên phần cứng thật, ghi file
.isora USB hoặc CD và dùng GRUB ISO
- Upload file
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ụ
bootchứa bootloader tùy biến vàmultiboot.ldkernelchứa mã nguồn kernel chính, mã theo từng kiến trúc và mã kernel threadappschứa ứng dụng user space cùnglibcore.a,libgraphic.a,libnet.anetchứa mã networking, cònfschứa mã liên quan đến filesystemtoolsgồ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/kfreecủa kernel,malloc/freecủ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
- RetrOS-32 được phát hành theo MIT License
- Liên kết dự án là https://github.com/joexbayer/RetrOS-32
1 bình luận
Ý 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
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 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
“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
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
https://github.com/joexbayer/RetrOS-32/blob/development/grap...
https://github.com/joexbayer/RetrOS-32/blob/development/grap...
Ướ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
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
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
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
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