Fusion ระบบปฏิบัติการงานอดิเรกที่พัฒนาด้วย Nim
(github.com/khaledh)- Fusion OS เป็นระบบปฏิบัติการงานอดิเรกสำหรับ x86-64 โดยใช้ Nim เป็นภาษาที่ใช้พัฒนา
- ฟีเจอร์ที่มีอยู่ในปัจจุบันแบ่งเป็น UEFI bootloader, การจัดการหน่วยความจำ, การจัดการงาน, system calls, IPC และการรองรับฮาร์ดแวร์
- การจัดการหน่วยความจำและงานมี demand paging, preemptive multitasking, การจัดตารางแบบอิงลำดับความสำคัญ และ ELF loader รวมอยู่ด้วย
- สภาพแวดล้อมการรันในปัจจุบันคือ QEMU และการ build ต้องใช้ Nim,
clang·lldของ LLVM และ Just - แผนในอนาคตรวมถึงการรักษาความปลอดภัยแบบ capability-based, disk I/O, file system, shell, GUI และ networking
ภาพรวมของ Fusion OS
- Fusion เป็นระบบปฏิบัติการงานอดิเรกสำหรับ x86-64 และพัฒนาด้วย Nim
- กระบวนการพัฒนาถูกบันทึกไว้ที่ 0xc0ffee.netlify.app
- ส่วนภาพหน้าจอมี UEFI bootloader, หน้าจอการบูตและการรันของ kernel รวมอยู่ด้วย
- ภาพหน้าจอ GUI เป็นภาพจาก branch
graphicsและ branch ดังกล่าวยังอยู่ระหว่างพัฒนา
ฟีเจอร์ที่มีอยู่ในปัจจุบัน
-
การบูต
- พัฒนา UEFI Bootloader แล้ว
-
การจัดการหน่วยความจำ
- Higher Half Kernel ในโครงสร้าง Single Address Space
- Physical Memory Manager
- Virtual Memory Manager
- Demand Paging
-
การจัดการงาน
- Kernel Tasks
- User Mode Tasks
- Preemptive Multitasking
- Priority-based Scheduling
- ELF Loader ที่รองรับ Demand Paged และ Relocation
-
System calls
- System Call Interface
- User Mode Library
-
IPC
- IPC แบบ Channel-based
- Message Passing
-
ฮาร์ดแวร์
- PCI Device Enumeration
- ACPI Configuration
- Local APIC Timer
- I/O APIC Interrupts
- PS/2 Keyboard Driver
- Bochs Graphics Adapter Driver
ฟีเจอร์ที่วางแผนไว้
- Capability-based Security
- Event-based Task State Machines
- Disk I/O
- File System
- Shell
- GUI
- Networking
การ build และการรัน
- การ build ต้องใช้ Nim,
clang·lldของ LLVM และ Just - ไบนารี
clangและlldต้องอยู่ในPATH- หากไม่อยู่ใน
PATHสามารถระบุ path ของไบนารีดังกล่าวได้ในไฟล์.env
- หากไม่อยู่ใน
- คำสั่ง build มีดังนี้
just build
- ปัจจุบัน Fusion รันบน QEMU
- คำสั่งรันมีดังนี้
just run
ใบอนุญาต
- ใบอนุญาตเป็น MIT
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
ผมเป็นผู้เขียนเอง ถ้ามีคำถามก็ยินดีตอบ
ถ้าไม่ คุณคิดว่าเป็นเพราะ GC แบบไม่ stop-the-world ที่เป็นเอกลักษณ์ของ Nim ใช่ไหม?
https://nim-lang.org/1.4.0/gc.html
ตอนนี้สองภาษานี้ดูคล้ายกันพอสมควร แต่ Swift น่าจะผ่านงานจริงมามากกว่า
บล็อกและเอกสารยอดเยี่ยมมาก สมดุลระหว่างการโชว์สิ่งที่ทำได้กับการอธิบายทำได้ดีมาก ขอบคุณที่แบ่งปัน
เพราะต้องอธิบายเหตุผลของทุกอย่าง มันจึงช่วยตัดความซับซ้อนที่ไม่จำเป็นออกไป และทำให้โฟกัสกับส่วนที่สำคัญกว่าได้
บันทึกการพัฒนา ของผู้เขียน Fusion:
https://0xc0ffee.netlify.app/osdev/01-intro.html
เห็นอะไรแบบนี้แล้วดีใจ ผมมีส่วนเกี่ยวข้องกับ ecosystem ของ Nim แบบเป็นพัก ๆ มาหลายปีแล้ว ดีใจที่โปรเจ็กต์เล็ก ๆ สนุก ๆ นี้ยังเดินหน้าต่อไป
เจ๋งมาก ผมลองเปิดดู โมดูล ELF แล้ว อ่านง่ายดี สนุกมาก
สักวันหนึ่งผมอยากลองเขียน ระบบปฏิบัติการเรียลไทม์ ด้วย Nim ดูบ้าง ผมชอบเขียนโปรแกรม embedded ด้วย Nim เลยคิดว่าการทำ RTOS ก็น่าจะสนุก
Nim คืออะไร และเป้าหมายการออกแบบโดยรวมของ Fusion คืออะไร?
หวังว่าจะไม่ใช่คำถามพื้นฐานเกินไปนะ ผมไม่มีพื้นฐานด้านนี้เลย เลยอยากให้ใครสักคนช่วยอธิบาย
เรื่องทำไมถึงเป็น Nim ในเว็บไซต์ที่ทำร่วมกันอธิบายไว้แบบนี้:
https://0xc0ffee.netlify.app/osdev/01-intro.html
ผมดีใจถ้าได้เห็นโปรเจ็กต์ Nim มากขึ้น ปกติใช้ Python กับ JavaScript เป็นหลัก แต่สนใจข้อดีของการรู้ภาษา static type สมัยใหม่ที่เร็วเพิ่มอีกสักภาษา
ในบรรดา Go, Rust, Zig, Nim นั้น Nim คือภาษาที่ผมชอบที่สุด ในแง่ที่ว่าเวลาอ่านโค้ดแล้วรู้สึก เหมือน Python มากที่สุด เพราะมี syntax noise น้อย
ผมชอบใช้ REPL มากเวลาเขียนต้นแบบโค้ดใหม่ ๆ และ INim ก็ช่วยเรื่องนั้นได้ดีมาก
ตอนนี้ปัญหาใหญ่ที่สุดของ Nim คือ ขนาดของชุมชน ที่ยังเล็ก ทำให้โลกของไลบรารีที่ใช้งานได้และยังมีคนดูแลเล็กกว่าภาษาอื่น ๆ เป็นปัญหาแบบไก่กับไข่ แต่ผมคิดว่านักพัฒนาให้มากขึ้น รวมถึงตัวผมเอง สามารถช่วยแก้ได้ด้วยการ “เป็นความเปลี่ยนแปลงที่อยากเห็นในโลก”
ตัวภาษาก็พัฒนาอย่างระมัดระวัง และตราบใดที่ Araq ยังเป็นผู้นำ ก็ดูน่าจะดีขึ้นในระยะยาว
ecosystem อาจไม่ใหญ่เท่า Python หรือ Rust แต่ก็น่าทึ่งที่ standard library มีของที่จำเป็นเกือบทั้งหมดอยู่แล้ว ไม่ค่อยต้องไปหาแพ็กเกจ third-party เพื่อจะทำอะไรสักอย่าง
แน่นอนว่า Nim ยังเป็นภาษาที่ไม่ค่อยมีคนรู้จักนัก ตรงนี้ผมยอมรับ แต่ก็ไม่ได้ลบข้อดีที่ว่ามันเป็นภาษามีอนาคตที่ทำงานที่ต้องทำได้ดีมาก
จุดที่ชุมชนน่าจะต้องโฟกัสมากกว่านี้คือ การรองรับ IDE ส่วนขยาย VSCode ใช้ได้โอเค แต่ยังมีจุดขรุขระอยู่ ผมเองชอบ JetBrains IDE มากกว่า แต่ปลั๊กอิน Nim อย่างเป็นทางการนั้น ถ้าจะพูดให้สุภาพก็คือยังขาดอีกมาก
มีโปรเจ็กต์ข้างเคียงสำหรับทำปลั๊กอิน JetBrains ของ Nim อยู่เหมือนกัน แต่ยังไปได้ไม่ไกลมาก
[0] https://forum.nim-lang.org
[1] https://github.com/khaledh/nimjet
Nim เป็น ภาษา system programming ที่ยอดเยี่ยม และควรได้รับความนิยมมากกว่านี้