1 điểm bởi GN⁺ 2024-07-15 | 1 bình luận | Chia sẻ qua WhatsApp
  • Fusion OS là một hệ điều hành hobby dành cho x86-64, sử dụng Nim làm ngôn ngữ triển khai
  • Các tính năng hiện đã được triển khai được chia thành bootloader UEFI, quản lý bộ nhớ, quản lý tác vụ, system call, IPC và hỗ trợ phần cứng
  • Quản lý bộ nhớ và tác vụ bao gồm demand paging, đa nhiệm ưu tiên ngắt, lập lịch dựa trên mức ưu tiên và bộ nạp ELF
  • Môi trường chạy hiện tại là QEMU; để build cần Nim, clang·lld của LLVM và Just
  • Kế hoạch trong tương lai bao gồm bảo mật dựa trên capability, disk I/O, file system, shell, GUI và networking

Tổng quan về Fusion OS

  • Fusion là một hệ điều hành hobby cho x86-64, được triển khai bằng Nim
  • Quá trình phát triển được ghi chép tại 0xc0ffee.netlify.app
  • Mục ảnh chụp màn hình bao gồm bootloader UEFI, màn hình kernel khởi động và đang chạy
  • Ảnh chụp GUI là màn hình của nhánh graphics, và nhánh này vẫn đang trong quá trình phát triển

Các tính năng hiện có

  • Khởi động

    • Đã triển khai UEFI Bootloader
  • Quản lý bộ nhớ

    • Higher Half Kernel với cấu trúc Single Address Space
    • Physical Memory Manager
    • Virtual Memory Manager
    • Demand Paging
  • Quản lý tác vụ

    • Kernel Tasks
    • User Mode Tasks
    • Preemptive Multitasking
    • Priority-based Scheduling
    • ELF Loader hỗ trợ Demand Paged và Relocation
  • System call

    • System Call Interface
    • User Mode Library
  • IPC

    • Channel-based IPC
    • Message Passing
  • Phần cứng

    • PCI Device Enumeration
    • ACPI Configuration
    • Local APIC Timer
    • I/O APIC Interrupts
    • PS/2 Keyboard Driver
    • Bochs Graphics Adapter Driver

Các tính năng được lên kế hoạch

  • Capability-based Security
  • Event-based Task State Machines
  • Disk I/O
  • File System
  • Shell
  • GUI
  • Networking

Build và chạy

  • Để build cần Nim, clang·lld của LLVMJust
  • Các binary clanglld phải có trong PATH
    • Nếu không có trong PATH, có thể chỉ định đường dẫn các binary đó trong tệp .env
  • Lệnh build như sau
just build
  • Hiện tại Fusion chạy trên QEMU
  • Lệnh chạy như sau
just run

Giấy phép

  • Giấy phép là MIT

1 bình luận

 
GN⁺ 2024-07-15
Các ý kiến trên Hacker News
  • Tôi là tác giả. Nếu có câu hỏi, tôi sẽ trả lời

    • Bộ thu gom rác của Nim có từng gây khó khăn gì không?
      Nếu không, bạn có nghĩ đó là nhờ GC không stop-the-world đặc trưng của Nim không?
      https://nim-lang.org/1.4.0/gc.html
    • Phần đau đầu nhất trong dự án là gì? Và bạn có lời khuyên nào cho người muốn viết một hệ điều hành từ đầu không?
    • Ảnh chụp màn hình ở đâu?
    • Tôi không dùng Nim, nhưng thấy đây là một ngôn ngữ thú vị. Tôi từng thấy có người phàn nàn rằng mỗi lần biên dịch lại dự án cũ đều phải sửa, nên tôi tò mò các thay đổi phá vỡ tương thích xảy ra thường xuyên và nghiêm trọng đến mức nào
    • Vì sao chọn Nim thay vì Swift?
      Hiện giờ hai ngôn ngữ trông khá giống nhau, nhưng có vẻ Swift đã được kiểm chứng trong thực tế nhiều hơn
  • Blog và tài liệu rất tuyệt. Cân bằng rất tốt giữa việc cho xem và giải thích; cảm ơn vì đã chia sẻ như vậy

    • Quá trình viết bài đã nhiều lần giúp cải thiện thiết kế và triển khai. Việc viết khiến tôi nghi ngờ các giả định của mình, và tự hỏi liệu độc giả có hiểu vì sao tôi đưa ra các quyết định đó không
      Vì phải biện minh cho mọi việc mình làm, nó giúp loại bỏ độ phức tạp không cần thiết và tập trung vào những phần quan trọng hơn
  • Nhật ký phát triển của tác giả Fusion:
    https://0xc0ffee.netlify.app/osdev/01-intro.html

  • Thấy những thứ như thế này thật thích. Tôi đã thỉnh thoảng tham gia hệ sinh thái Nim trong vài năm qua, và rất vui khi thấy dự án nhỏ vui vẻ này vẫn tiếp tục chạy

  • Hay quá. Tôi đã mở mô-đun ELF xem thử và thấy nó dễ đọc, rất thú vị
    Một ngày nào đó tôi muốn thử viết hệ điều hành thời gian thực bằng Nim. Tôi thích viết chương trình nhúng bằng Nim, nên làm một RTOS chắc cũng sẽ thú vị

    • Nếu bạn quyết định làm RTOS, tôi rất muốn theo dõi
    • ELF là một định dạng tệp rất đơn giản. Nếu nó khó đọc thì tôi mới thấy ngạc nhiên
  • Nim là gì, và các mục tiêu thiết kế tổng thể của Fusion là gì?
    Hy vọng đây không phải câu hỏi quá cơ bản. Tôi hoàn toàn không có kiến thức nền, nên mong ai đó giải thích giúp

    • Như những người khác đã nói, Nim là một ngôn ngữ lập trình kiểu tĩnh và biên dịch sang C, C++, JavaScript. Nó có khả năng tương tác tốt với C nên giúp lập trình hệ thống dễ dàng hơn
      Về lý do vì sao là Nim, trang web tôi làm cùng dự án giải thích như sau:

      Vì sao là Nim? Nim là một trong số ít ngôn ngữ cho phép lập trình hệ thống cấp thấp với quản lý bộ nhớ xác định, destructor và move semantics. Bộ thu gom rác là tùy chọn. Vì có kiểu tĩnh nên độ an toàn kiểu cũng cao hơn. Nó cũng hỗ trợ inline assembly, thứ thiết yếu cho phát triển hệ điều hành. Các lựa chọn khác gồm C, C++, Rust, Zig. Tất cả đều là ngôn ngữ xuất sắc, nhưng tôi chọn Nim vì sự đơn giản, thanh lịch và hiệu năng.
      Các mục tiêu thiết kế tổng thể của Fusion khá tham vọng, và tôi đã liệt kê chúng trên cùng trang đó. Tôi không muốn tạo thêm một hệ điều hành họ Unix nữa, mà muốn thử nghiệm các vấn đề căn bản trong thiết kế hệ điều hành như không gian địa chỉ đơn nhấtbảo mật dựa trên capability để bảo vệ
      Một phần khác tôi muốn khám phá là cách mô hình hóa process và tác vụ. Tôi cho rằng chúng nên được mô hình hóa như các state machine giao tiếp với nhau qua các kênh được định kiểu tĩnh. Đây không phải ý tưởng mới, và từng được thử trong Singularity OS
      Kernel đã có hỗ trợ cơ bản cho kênh và việc dùng kênh từ user space, nhưng vẫn còn ở giai đoạn đầu
      [0] https://0xc0ffee.netlify.app/osdev/01-intro.html
      [1] https://en.wikipedia.org/wiki/Singularity_(operating_system)

    • Nim là một ngôn ngữ tuyệt vời, có cảm giác được lấy cảm hứng từ Ada và Python
    • Trong tài liệu dự án có ghi:
      https://0xc0ffee.netlify.app/osdev/01-intro.html
  • Tôi rất vui nếu thấy nhiều dự án Nim hơn. Tôi chủ yếu dùng Python và JavaScript, nhưng quan tâm đến lợi ích của việc biết thêm một ngôn ngữ kiểu tĩnh hiện đại và nhanh
    Trong số Go, Rust, Zig, Nim, tôi thích Nim nhất. Nó có cảm giác giống Python nhất theo nghĩa là ít nhiễu cú pháp khi đọc code
    Tôi rất thích dùng REPL khi làm prototype cho code mới, và INim làm tốt việc đó
    Vấn đề lớn nhất hiện nay của Nim là quy mô cộng đồng nhỏ. Vì vậy, thế giới các thư viện có thể dùng được và được bảo trì nhỏ hơn so với các cộng đồng ngôn ngữ khác. Đây là vấn đề con gà và quả trứng, nhưng nhiều lập trình viên hơn, trong đó có tôi, có thể giải quyết bằng cách “trở thành thay đổi mà mình muốn thấy trên đời”

    • Thành thật mà nói, tôi chưa từng cảm thấy quy mô cộng đồng là vấn đề. Diễn đàn Nim hoạt động sôi nổi, và khi vào hỏi trợ giúp thì thường nhận được câu trả lời nhanh và chính xác
      Ngôn ngữ cũng đang phát triển một cách thận trọng, và với Araq dẫn dắt, tôi nghĩ về dài hạn nó sẽ còn tốt hơn
      Hệ sinh thái không lớn như Python hay Rust, nhưng đáng ngạc nhiên là thư viện chuẩn đã có hầu hết những gì cần thiết. Tôi hiếm khi phải tìm gói bên thứ ba để làm việc gì đó
      Tất nhiên tôi thừa nhận Nim thuộc nhóm ngôn ngữ ít được biết đến hơn. Nhưng điều đó không làm mất đi ưu điểm rằng đây là một ngôn ngữ đầy triển vọng và làm rất tốt những việc cần làm
      Tôi nghĩ phần cộng đồng nên tập trung hơn là hỗ trợ IDE. Extension cho VSCode ổn, nhưng vẫn còn vài chỗ thô. Tôi thích IDE của JetBrains hơn, mà plugin Nim chính thức thì nói nhẹ cũng là còn thiếu sót nhiều
      Tôi cũng có một side project làm plugin JetBrains cho Nim, nhưng vẫn chưa tiến triển được nhiều
      [0] https://forum.nim-lang.org
      [1] https://github.com/khaledh/nimjet
  • Nim là một ngôn ngữ lập trình hệ thống tuyệt vời và nên trở nên phổ biến hơn

    • Có thể là do tôi đã có tuổi, nhưng việc bắt buộc thụt lề bằng hai dấu cách khiến code Nim khó đọc. Các khối code gần như không nổi bật rõ, và tôi không muốn phải phụ thuộc vào IDE để làm cho ngôn ngữ dễ đọc hơn