3 điểm bởi GN⁺ 2024-05-25 | 1 bình luận | Chia sẻ qua WhatsApp

Dự án lập trình mới: Bunnix

Bối cảnh dự án

  • Gần đây, để tạm rời xa "công việc thật", tác giả đã bắt đầu một dự án lập trình mới có mức rủi ro thấp và hoàn toàn dành cho thời gian rảnh.
  • Từ ngày 21 tháng 4, tác giả quyết định thử xem trong khoảng một tháng có thể làm được đến đâu với một hệ điều hành kiểu Unix cho mục tiêu x86_64.
  • Thành quả là một hệ điều hành mang tên Bunnix.
  • Tổng cộng tác giả đã dành thời gian cho dự án này trong 27 ngày.

Demo Bunnix

  • Có cung cấp file ISO Bunnix 0.0.0.
  • Có thể khởi động bằng QEMU:
    qemu-system-x86_64 -cdrom bunnix.iso -display sdl -serial stdio
    
  • Cũng có thể ghi ISO ra USB và khởi động trên phần cứng thật.
  • Nhiều khả năng sẽ chạy được trên hầu hết thiết bị AMD64.
  • Hạn chế: không có hỗ trợ USB, nên cần bàn phím PS/2.

Các thành phần của Bunnix

  • Kernel của Bunnix chủ yếu được viết bằng Hare, đồng thời bao gồm một số thành phần C (lwext4, libvterm).
  • Các driver được hỗ trợ:
    • PCI (legacy)
    • thiết bị khối AHCI
    • bảng phân vùng GPT và MBR
    • bàn phím PS/2
    • cổng serial của nền tảng
    • đồng hồ CMOS
    • framebuffer (được bootloader thiết lập)
    • hệ thống tệp ext4 và memfs
  • Các tính năng kernel được hỗ trợ:
    • hệ thống tệp ảo
    • nhiều thiết bị /dev
    • trình giả lập terminal và hỗ trợ termios
    • khoảng 40 system call (ví dụ: clock_gettime, poll, openat, fork, exec)
  • Bunnix là hệ thống một người dùng và hiện chưa áp dụng chế độ tệp Unix cũng như quyền sở hữu.

Bootloader

  • Bao gồm hai bootloader:
    • Boot legacy: viết bằng Hare.
    • Boot EFI: viết bằng C.
  • Nạp kernel dưới dạng file ELF và cũng nạp initramfs khi cần.

Phần mềm user space

  • Chủ yếu gồm phần mềm bên thứ ba:
    • Colossal Cave Adventure (advent)
    • dash (/bin/sh)
    • Doom
    • gzip
    • less (pager)
    • lok (/bin/awk)
    • lolcat
    • mandoc (man pages)
    • sbase (core utils)
    • tcc (trình biên dịch C)
    • Vim 5.7
  • libc được phát triển từ musl libc và được chỉnh sửa cho phù hợp với nhu cầu của Bunnix.

Quá trình phát triển Bunnix

  • Tác giả đã ghi chép lại quá trình phát triển trên Mastodon.
  • Một phần mã của Bunnix được lấy từ dự án trước đó là Helios.
  • Hỗ trợ ext4 và việc tích hợp virtual terminal là những phần khó nhất.
  • Việc triển khai scheduler và xử lý signal cũng đầy thách thức.
  • Việc port phần mềm bên thứ ba tương đối dễ dàng nhờ nền tảng musl libc.

Những điều rút ra được

  • Tác giả đã học được rất nhiều về hệ thống tệp.
  • Cách tiếp cận với driver đã trở nên đơn giản hơn.
  • Tác giả hiểu rõ hơn về độ phức tạp của xử lý signal.
  • Đã xác nhận rằng bitmap allocator rất hiệu quả trong quản lý bộ nhớ.
  • Tác giả nhận ra rằng kernel nguyên khối dễ triển khai hơn nhiều so với microkernel.

Kế hoạch sắp tới

  • Bunnix là một dự án làm trong thời gian rảnh và hiện tác giả không có kế hoạch tiếp tục đầu tư thời gian vào nó.
  • Trong tương lai, tác giả dự định quay lại dự án Helios và áp dụng nhiều bài học đã rút ra.
  • Các ưu tiên cải tiến cho Bunnix:
    • bộ đệm hệ thống tệp
    • sửa lỗi ext4
    • procfs và top
    • file mmap
    • thêm nhiều signal hơn (ví dụ: SIGSEGV)
    • hỗ trợ nhiều người dùng
    • thiết bị khối NVMe
    • thiết bị khối IDE
    • hỗ trợ ATAPI và ISO 9660
    • hỗ trợ Intel HD Audio
    • ngăn xếp mạng
    • toolchain Hare trong hệ thống cơ bản
    • self-hosting

Ý kiến của GN⁺

  • Giá trị của Bunnix: Bunnix là một ví dụ hay về kernel hacking bằng ngôn ngữ Hare, có thể hấp dẫn với các nhà phát triển muốn học ngôn ngữ và công nghệ mới.
  • Thiết kế hệ thống tệp: Thiết kế hệ thống tệp là một phần quan trọng trong phát triển hệ điều hành, và Bunnix có thể giúp học được nhiều điều về chủ đề này.
  • Kernel nguyên khối vs microkernel: Đây là một ví dụ tốt để so sánh ưu và nhược điểm giữa kernel nguyên khối và microkernel, đồng thời mang lại hiểu biết sâu hơn về thiết kế hệ điều hành.
  • Sự tham gia của cộng đồng: Bunnix là một dự án mã nguồn mở và có tiềm năng phát triển hơn nữa thông qua sự tham gia và đóng góp của cộng đồng.
  • Các điểm cần cải thiện trong tương lai: Những hạng mục cải tiến tiếp theo của Bunnix mang lại cơ hội học hỏi tốt cho những ai quan tâm đến phát triển hệ điều hành.

1 bình luận

 
GN⁺ 2024-05-25
Ý kiến trên Hacker News

Tóm tắt các bình luận trên Hacker News

  • This is really cool. Reminds me of the original Unix was invented in a couple weeks while Ritchie's family went on vacation to CA to visit his in-laws.

    • Đây là một dự án rất tuyệt, gợi nhớ đến việc Unix nguyên bản đã được tạo ra chỉ trong vài tuần khi gia đình của Ritchie đi nghỉ ở California để thăm nhà vợ.
  • I also finally learned how signals work from top to bottom, and boy is it ugly. I’ve always felt that this was one of the weakest points in the design of Unix and this project did nothing to disabuse me of that notion.

    • Cuối cùng tôi cũng hiểu được cách signal hoạt động từ đầu đến cuối, và đúng là nó khá xấu. Tôi luôn cảm thấy đây là một trong những điểm yếu nhất trong thiết kế của Unix, và dự án này cũng không làm tôi thay đổi suy nghĩ đó.
  • Impressive, super cool, and inspiring!

    • Rất ấn tượng, cực ngầu và đầy cảm hứng!
  • Example of “creating something impressive in X days” requires a lot of experience and talent that is built over years.

    • Những ví dụ kiểu “tạo ra thứ gì đó ấn tượng trong X ngày” đòi hỏi rất nhiều kinh nghiệm và tài năng được tích lũy qua nhiều năm.
  • It was really cool watching the ~daily updates on this on Mastodon - seeing how someone so skilled gradually pieces together a complex piece of software.

    • Theo dõi các bản cập nhật gần như hằng ngày về dự án này trên Mastodon thực sự rất thú vị — được nhìn thấy một người có tay nghề cao dần dần ghép nên một phần mềm phức tạp.
  • From "Linux System Call Table – Chromiumos"

    • Chia sẻ tài liệu về bảng system call của Linux.
  • Code is here: Git Repository

  • Hare looks like an interesting language. Though this limitation will limit its adoption in this multicore age I think:

    • Hare có vẻ là một ngôn ngữ thú vị. Tuy vậy, tôi nghĩ hạn chế này sẽ cản trở việc nó được chấp nhận trong thời đại đa lõi hiện nay.
  • Very cool. Most of these Unix clones are usually written in C. This one is written in a new programming language.

    • Rất hay. Phần lớn các Unix clone kiểu này thường được viết bằng C, còn dự án này được viết bằng một ngôn ngữ lập trình mới.
  • Quite cool, by making use of Hare instead.

    • Việc dùng Hare thay thế quả thực rất thú vị.
  • Waiting for an OS that treats GPU(s) as a first class citizen ...

    • Đang chờ một hệ điều hành coi GPU là công dân hạng nhất...