7 คะแนน โดย GN⁺ 2024-09-15 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • รีโพซิทอรี Blog OS เก็บซอร์สโค้ดที่ใช้ในซีรีส์ Writing an OS in Rust บน os.phil-opp.com
  • โค้ดของแต่ละบทความอยู่ใน git branch แยกกัน ทำให้สามารถตรวจสอบสถานะระหว่างทางหลังทำตามบทความได้
  • ปัจจุบันบทความของฉบับที่สองประกอบด้วยหมวด Bare Bones, Interrupts, Memory Management, และ Multitasking โดยโค้ดของบทความล่าสุดอยู่ที่แบรนช์ post-12
  • ชื่อแบรนช์ใช้รูปแบบ post-XX ตัวอย่างเช่น post-03 คือโค้ดของบทความ VGA Text Mode และ post-07 คือโค้ดของบทความ Hardware Interrupts
  • ฉบับแรกไม่ได้รับการบำรุงรักษาอีกต่อไป แต่ยังใช้อ้างอิงได้ และโค้ดโปรเจกต์ยกเว้นโฟลเดอร์ blog/content ใช้ไลเซนส์แบบเลือกได้ Apache-2.0 หรือ MIT

จุดประสงค์ของรีโพซิทอรี Blog OS

  • รีโพซิทอรีนี้ให้ ซอร์สโค้ด ของซีรีส์ Writing an OS in Rust
  • สามารถถามคำถามได้โดยเปิด GitHub issue หรือผ่านแชต Gitter

โครงสร้างโค้ดแยกตามบทความ

  • โค้ดของแต่ละบทความอยู่ใน git branch แยกกัน
    • สามารถตรวจสอบสถานะระหว่างทางหลังทำตามบทความได้
    • โค้ดของบทความล่าสุดอยู่ที่ post-12
  • แบรนช์ของแต่ละบทความหาได้จากลิงก์ (source code) ในรายการบทความด้านล่าง
  • ชื่อแบรนช์ใช้รูปแบบ post-XX
    • post-03: VGA Text Mode
    • post-07: Hardware Interrupts
  • วิธีบิลด์ต้องดูใน README ของแต่ละแบรนช์
  • สามารถใช้ git worktree เพื่อ checkout แบรนช์ที่ต้องการลงในไดเรกทอรีย่อยได้
git worktree add code post-10
  • คำสั่งข้างต้นจะสร้างไดเรกทอรีย่อย code ที่มีโค้ดของบทความลำดับที่ 10 คือ Heap Allocation

รายการบทความของฉบับปัจจุบัน

ฉบับแรก

  • บล็อกปัจจุบันคือ ฉบับที่สอง
  • ฉบับแรกเก่าแล้วและไม่ได้รับการบำรุงรักษาอีกต่อไป แต่ยังอาจมีประโยชน์อยู่
  • ฉบับแรกมีบทความในหมวด Bare Bones, Memory Management, Exceptions และ Additional Resources

ไลเซนส์และการมีส่วนร่วม

  • โปรเจกต์นี้ยกเว้นโฟลเดอร์ blog/content ผู้ใช้สามารถเลือกใช้ภายใต้ Apache License 2.0 หรือ MIT license ได้
  • ไลเซนส์ของโฟลเดอร์ blog/content ต้องดูที่ blog/content/README.md
  • เว้นแต่จะระบุไว้เป็นอย่างอื่น contribution ที่ส่งมาโดยตั้งใจเพื่อรวมเข้ามาจะถูกใช้ภายใต้ dual license ข้างต้นโดยไม่มีเงื่อนไขเพิ่มเติม ตามนิยามของ Apache-2.0

1 ความคิดเห็น

 
GN⁺ 2024-09-15
ความคิดเห็นบน Hacker News
  • เมื่อหลายปีก่อนผมอ่าน ฉบับที่ 2 จนจบ และมันเปิดโลกมากจริง ๆ
    คำอธิบายเรื่องการพัฒนาระบบปฏิบัติการก็ดี แต่หลังจากอ่านหนังสือ Rust แล้ว มันยังมีประโยชน์มากในฐานะแหล่งเรียน Rust เพิ่มเติมด้วย
    ผู้เขียนเข้าใจสำนวนการเขียน Rust เป็นอย่างดี จึงได้เรียนรู้อะไรเยอะจากการดูวิธีถ่ายทอดออกมาเป็นโค้ดเทียบกับวิธีที่ผมคงจะเขียนเอง โดยเฉพาะ async-await in Rust ที่อธิบายวิธีที่ future ถูกนำไปใช้ใน Rust ซึ่งเป็นคำอธิบายที่ดีที่สุดที่ผมเคยเห็นในหัวข้อนี้
    หวังว่า Phil จะกลับมามีแรงและทำงานต่อใน ฉบับที่ 3 ที่อิง EFI ต่อไป ถ้าดูคอมมิตใน Git branch แล้วเหมือนจะหยุดไป และผมเคยเป็น GitHub sponsor อยู่ราว ๆ 1 ปี แต่ทุกครั้งที่เห็นว่าเขาหายไปจากบทความ “This Month In Rust OSDev” ก็รู้สึกเสียดาย
    ถึงอย่างนั้น ฉบับที่ 2 ก็ยังเป็นแหล่งเรียนที่ยอดเยี่ยมสำหรับใช้เวลาพัฒนาช่วงสุดสัปดาห์ และรู้สึกได้ชัดว่าทุ่มเทแรงไปมาก

  • หลังจากทำตาม tutorial นี้จนจบเมื่อ 5 ปีก่อน ผมก็เริ่มทำ MOROS และขอแนะนำอย่างยิ่งสำหรับคนที่สนใจ Rust กับการพัฒนาระบบปฏิบัติการ
    Phil ใส่ความพยายามลงไปเยอะมากจริง ๆ และเห็นได้ชัด โปรเจกต์ครอบคลุมเนื้อหาหลายอย่าง และหลังจากนั้นก็สามารถไปต่อกับ osdev wiki ได้
    MOROS: http://moros.cc, https://github.com/vinc/moros

    • ดูเท่มากทีเดียว ที่ผ่านมาผมชอบโปรเจกต์ xv6 ที่สุด เพราะ codebase เล็กพอเหมาะจนทำความเข้าใจได้ภายในไม่กี่สัปดาห์, build ได้ด้วย GCC มาตรฐานที่ package manager มีให้ จึงไม่ต้อง build GCC แบบ custom จากซอร์สเอง และยังมี user space ด้วย
      MOROS ก็ดูเหมือนจะเข้าเงื่อนไขเหล่านี้ เลย bookmark ไว้แล้ว
    • http://moros.cc ไม่มี TLS เหรอ? :(
    • ผม subscribe RSS feed มาตั้งแต่ก่อนแล้ว และ MOROS ดูเป็นโปรเจกต์ที่เจ๋งมากจริง ๆ
      แต่ด้วยเหตุผลบางอย่างมันเริ่มใน QEMU ไม่ได้ เลยยังไม่ได้ลองใช้ และผมคิดว่าน่าจะเป็นปัญหาฝั่งผมมากกว่าตัวระบบปฏิบัติการเอง
  • หลังจากขุดลึกเรื่อง Rust กับ การพัฒนาระบบปฏิบัติการ แล้ววันนี้เพิ่งเจอแหล่งข้อมูลนี้ และทึ่งกับคุณภาพของเนื้อหา
    ได้เรียนรู้ประวัติและการออกแบบของระบบปฏิบัติการมากมาย พร้อมกับซึมซับส่วนต่าง ๆ ของ Rust ไปอย่างเป็นธรรมชาติ Phil ทำออกมาได้ยอดเยี่ยมจริง ๆ

  • เพิ่งกลับมาจาก Rustconf และดูเหมือนฝั่ง Rust จะมีระบบปฏิบัติการ release หลัก ๆ อยู่ราวห้าตัว โดยหลายตัวเน้นไปที่ real-time เป็นพิเศษ
    แต่ไม่ใช่ทั้งหมดที่เป็นโอเพนซอร์ส

    • ระบบปฏิบัติการแบบ real-time (RTOS) หลัก ๆ ได้แก่ Tock-OS, Oxid-OS (เป็นเวอร์ชันด้านความปลอดภัยของ Tock-OS ในตำแหน่งคล้าย freertos/safertos), และ Hubris ของ Oxide Computers ส่วน Embassy กับ RTIC เป็น framework ที่ใช้กันบ่อยสำหรับ scheduling และการจัดการ resource ในระบบ bare-metal แต่ไม่ใช่ RTOS แบบดั้งเดิม
      นอกจากนี้ยังมีตัวที่เฉพาะทางกว่านั้นหรือยังไม่เปิดเผยอีก
      ในฝั่งระบบปฏิบัติการแบบดั้งเดิม หรือก็คือไม่ใช่ real-time ตัวแทนสำคัญคือ Redox และยังมีระบบปฏิบัติการเพื่อการวิจัย ทดลอง และการศึกษาอีกมาก รวมถึง Blog OS ใน guide/post นี้ด้วย
  • ขอแนะนำ ฉบับแรก ของบทความชุดนี้เป็นพิเศษ
    เวอร์ชันปัจจุบันใช้ crate เฉพาะมาจัดการ bootloading ทั้งหมด เลยรู้สึกว่าช่วยมากเกินไปหน่อย

    • ผมชอบที่มีวิธีให้ข้ามส่วน bootloading ได้
      เห็นคอมเมนต์นี้แล้วทำให้อยากลองจริง ๆ สักครั้ง อยากทำระบบปฏิบัติการเล็ก ๆ เพื่อความสนุก แต่ไม่ชอบส่วนที่ต้องผ่านขั้นตอนเหมือนคาถาเวทมนตร์เพื่อให้ไปถึงสถานะของเครื่องที่พอจะทำอะไรได้
      แน่นอนว่าไม่ได้หมายความว่าส่วนนั้นไม่ดี แค่แต่ละคนชอบคนละส่วนเท่านั้นเอง
  • แหล่งข้อมูลนี้ทำให้ผมเริ่มใช้ Rust ในปี 2021 และรู้สึกขอบคุณจริง ๆ ที่มีแหล่งข้อมูลแบบนี้

  • บทความ การพัฒนาระบบปฏิบัติการ ของ Phil อ่านสนุกเสมอ

  • เห็นว่าจะไปพูดใน งานประชุม GOSIM เดือนหน้า
    https://china2024.gosim.org/speakers#philipp-oppermann
    หวังว่าจะได้เจอตัวและคุยกันโดยตรง

  • https://harvey-os.org/ เลิกพัฒนาแล้ว และตอนนี้ทีมกำลังทำโปรเจกต์นี้อยู่: https://github.com/r9os/r9

  • ผมไม่ใช่นักพัฒนามืออาชีพ แต่พอเห็นสำนวน “เขียน X บน Y” แล้วจะนึกถึงมีม “But why?” ของ Ryan Reynolds: https://screenrant.com/ryan-reynolds-but-why-gif-harold-kuma...
    ถ้าเพื่อการเรียนรู้ก็คิดว่าทำได้เต็มที่ ยิ่งเขียนโค้ดมากเท่าไรก็ยิ่งเก่งขึ้น
    อีกอย่าง MOROS ดูเป็นโปรเจกต์และหน้าเว็บที่เจ๋งมาก