1 คะแนน โดย GN⁺ 2024-07-15 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • 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 ความคิดเห็น

 
GN⁺ 2024-07-15
ความคิดเห็นจาก Hacker News
  • ผมเป็นผู้เขียนเอง ถ้ามีคำถามก็ยินดีตอบ

    • ตัวเก็บขยะของ Nim เคยสร้างความลำบากไหม?
      ถ้าไม่ คุณคิดว่าเป็นเพราะ GC แบบไม่ stop-the-world ที่เป็นเอกลักษณ์ของ Nim ใช่ไหม?
      https://nim-lang.org/1.4.0/gc.html
    • ส่วนที่ปวดหัวที่สุดของโปรเจ็กต์คืออะไร? แล้วมีคำแนะนำสำหรับคนที่อยาก เขียนระบบปฏิบัติการตั้งแต่ศูนย์ ไหม?
    • ภาพหน้าจออยู่ที่ไหน?
    • ผมไม่ได้ใช้ Nim แต่คิดว่าเป็นภาษาที่น่าสนใจ เคยเห็นคนบ่นว่าทุกครั้งที่กลับไปคอมไพล์โปรเจ็กต์เก่าต้องแก้โค้ด เลยสงสัยว่าการเปลี่ยนแปลงแบบ ทำลายความเข้ากันได้เดิม เกิดขึ้นบ่อยแค่ไหน และหนักขนาดไหน
    • ทำไมถึงเลือก Nim แทน Swift?
      ตอนนี้สองภาษานี้ดูคล้ายกันพอสมควร แต่ Swift น่าจะผ่านงานจริงมามากกว่า
  • บล็อกและเอกสารยอดเยี่ยมมาก สมดุลระหว่างการโชว์สิ่งที่ทำได้กับการอธิบายทำได้ดีมาก ขอบคุณที่แบ่งปัน

    • หลายครั้งกระบวนการเขียนช่วยให้การออกแบบและการพัฒนาดีขึ้น การเขียนทำให้ผมตั้งคำถามกับสมมติฐานของตัวเอง และถามตัวเองว่าผู้อ่านจะเข้าใจไหมว่าทำไมถึงตัดสินใจแบบนี้
      เพราะต้องอธิบายเหตุผลของทุกอย่าง มันจึงช่วยตัดความซับซ้อนที่ไม่จำเป็นออกไป และทำให้โฟกัสกับส่วนที่สำคัญกว่าได้
  • บันทึกการพัฒนา ของผู้เขียน Fusion:
    https://0xc0ffee.netlify.app/osdev/01-intro.html

  • เห็นอะไรแบบนี้แล้วดีใจ ผมมีส่วนเกี่ยวข้องกับ ecosystem ของ Nim แบบเป็นพัก ๆ มาหลายปีแล้ว ดีใจที่โปรเจ็กต์เล็ก ๆ สนุก ๆ นี้ยังเดินหน้าต่อไป

  • เจ๋งมาก ผมลองเปิดดู โมดูล ELF แล้ว อ่านง่ายดี สนุกมาก
    สักวันหนึ่งผมอยากลองเขียน ระบบปฏิบัติการเรียลไทม์ ด้วย Nim ดูบ้าง ผมชอบเขียนโปรแกรม embedded ด้วย Nim เลยคิดว่าการทำ RTOS ก็น่าจะสนุก

    • ถ้าคุณตัดสินใจทำ RTOS ผมอยากตามดูแน่นอน
    • ELF เป็นฟอร์แมตไฟล์ที่เรียบง่ายมาก ถ้ามันอ่านยากคงน่าแปลกใจมากกว่า
  • Nim คืออะไร และเป้าหมายการออกแบบโดยรวมของ Fusion คืออะไร?
    หวังว่าจะไม่ใช่คำถามพื้นฐานเกินไปนะ ผมไม่มีพื้นฐานด้านนี้เลย เลยอยากให้ใครสักคนช่วยอธิบาย

    • อย่างที่คนอื่นบอก Nim เป็น ภาษาโปรแกรมแบบ static type และคอมไพล์ไปเป็น C, C++, JavaScript ได้ ทำงานร่วมกับ C ได้ดีจึงเหมาะกับ system programming
      เรื่องทำไมถึงเป็น Nim ในเว็บไซต์ที่ทำร่วมกันอธิบายไว้แบบนี้:

      ทำไมต้อง Nim? Nim เป็นหนึ่งในไม่กี่ภาษาที่ทำให้การเขียนโปรแกรมระบบระดับล่างเป็นไปได้ พร้อมการจัดการหน่วยความจำแบบกำหนดได้แน่นอน, destructor และ move semantics ตัวเก็บขยะเป็นทางเลือก ไม่ได้บังคับ และเพราะเป็น static type จึงมี type safety สูงกว่า นอกจากนี้ยังรองรับ inline assembly ซึ่งจำเป็นต่อการพัฒนาระบบปฏิบัติการ ตัวเลือกอื่นก็มี C, C++, Rust, Zig ซึ่งล้วนเป็นภาษาที่ยอดเยี่ยม แต่เราเลือก Nim เพราะความเรียบง่าย ความงาม และประสิทธิภาพ
      เป้าหมายการออกแบบโดยรวมของ Fusion ค่อนข้างทะเยอทะยาน และได้ลิสต์ไว้ในหน้าเดียวกันแล้ว เราไม่ได้อยากสร้าง Unix อีกรุ่นหนึ่ง แต่ต้องการทดลองกับปัญหาเชิงพื้นฐานของการออกแบบระบบปฏิบัติการ เช่น single address space และ ความปลอดภัยแบบ capability-based เพื่อการปกป้อง
      อีกเรื่องที่อยากสำรวจคือจะโมเดล process และ task อย่างไร ผมคิดว่าสิ่งเหล่านี้ควรถูกโมเดลเป็น state machine ที่สื่อสารกันผ่าน channel ที่กำหนดชนิดแบบ static นี่ไม่ใช่แนวคิดใหม่ เพราะ Singularity OS เคยลองมาแล้ว
      ในเคอร์เนลมีการรองรับ channel และการใช้ channel จาก user space ในระดับพื้นฐานแล้ว แต่ยังอยู่ช่วงเริ่มต้นมาก
      [0] https://0xc0ffee.netlify.app/osdev/01-intro.html
      [1] https://en.wikipedia.org/wiki/Singularity_(operating_system)

    • Nim เป็นภาษาที่เจ๋งมาก ให้ความรู้สึกเหมือนได้แรงบันดาลใจจาก Ada และ Python
    • มีอยู่ในเอกสารของโปรเจ็กต์:
      https://0xc0ffee.netlify.app/osdev/01-intro.html
  • ผมดีใจถ้าได้เห็นโปรเจ็กต์ Nim มากขึ้น ปกติใช้ Python กับ JavaScript เป็นหลัก แต่สนใจข้อดีของการรู้ภาษา static type สมัยใหม่ที่เร็วเพิ่มอีกสักภาษา
    ในบรรดา Go, Rust, Zig, Nim นั้น Nim คือภาษาที่ผมชอบที่สุด ในแง่ที่ว่าเวลาอ่านโค้ดแล้วรู้สึก เหมือน Python มากที่สุด เพราะมี syntax noise น้อย
    ผมชอบใช้ REPL มากเวลาเขียนต้นแบบโค้ดใหม่ ๆ และ INim ก็ช่วยเรื่องนั้นได้ดีมาก
    ตอนนี้ปัญหาใหญ่ที่สุดของ Nim คือ ขนาดของชุมชน ที่ยังเล็ก ทำให้โลกของไลบรารีที่ใช้งานได้และยังมีคนดูแลเล็กกว่าภาษาอื่น ๆ เป็นปัญหาแบบไก่กับไข่ แต่ผมคิดว่านักพัฒนาให้มากขึ้น รวมถึงตัวผมเอง สามารถช่วยแก้ได้ด้วยการ “เป็นความเปลี่ยนแปลงที่อยากเห็นในโลก”

    • พูดตามตรง ผมไม่เคยรู้สึกว่าขนาดชุมชนเป็นปัญหาเลย ฟอรัม 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 ที่ยอดเยี่ยม และควรได้รับความนิยมมากกว่านี้

    • อาจเป็นเพราะผมอายุมากแล้วก็ได้ แต่การบังคับให้ย่อหน้า เว้นวรรคสองช่อง ทำให้อ่านโค้ด Nim ยาก บล็อกโค้ดแทบไม่เด่นขึ้นมาให้เห็น และผมไม่อยากต้องพึ่ง IDE เพื่อทำให้ภาษาอ่านง่าย