- รีโพซิทอรี 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
โครงสร้างโค้ดแยกตามบทความ
- โค้ดของแต่ละบทความอยู่ใน 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
-
Interrupts
-
Memory Management
-
Multitasking
ฉบับแรก
- บล็อกปัจจุบันคือ ฉบับที่สอง
- ฉบับแรกเก่าแล้วและไม่ได้รับการบำรุงรักษาอีกต่อไป แต่ยังอาจมีประโยชน์อยู่
- ฉบับแรกมีบทความในหมวด 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 ความคิดเห็น
ความคิดเห็นบน 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
MOROS ก็ดูเหมือนจะเข้าเงื่อนไขเหล่านี้ เลย bookmark ไว้แล้ว
แต่ด้วยเหตุผลบางอย่างมันเริ่มใน QEMU ไม่ได้ เลยยังไม่ได้ลองใช้ และผมคิดว่าน่าจะเป็นปัญหาฝั่งผมมากกว่าตัวระบบปฏิบัติการเอง
หลังจากขุดลึกเรื่อง Rust กับ การพัฒนาระบบปฏิบัติการ แล้ววันนี้เพิ่งเจอแหล่งข้อมูลนี้ และทึ่งกับคุณภาพของเนื้อหา
ได้เรียนรู้ประวัติและการออกแบบของระบบปฏิบัติการมากมาย พร้อมกับซึมซับส่วนต่าง ๆ ของ Rust ไปอย่างเป็นธรรมชาติ Phil ทำออกมาได้ยอดเยี่ยมจริง ๆ
เพิ่งกลับมาจาก Rustconf และดูเหมือนฝั่ง Rust จะมีระบบปฏิบัติการ release หลัก ๆ อยู่ราวห้าตัว โดยหลายตัวเน้นไปที่ real-time เป็นพิเศษ
แต่ไม่ใช่ทั้งหมดที่เป็นโอเพนซอร์ส
นอกจากนี้ยังมีตัวที่เฉพาะทางกว่านั้นหรือยังไม่เปิดเผยอีก
ในฝั่งระบบปฏิบัติการแบบดั้งเดิม หรือก็คือไม่ใช่ real-time ตัวแทนสำคัญคือ Redox และยังมีระบบปฏิบัติการเพื่อการวิจัย ทดลอง และการศึกษาอีกมาก รวมถึง Blog OS ใน guide/post นี้ด้วย
ขอแนะนำ ฉบับแรก ของบทความชุดนี้เป็นพิเศษ
เวอร์ชันปัจจุบันใช้ crate เฉพาะมาจัดการ 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 ดูเป็นโปรเจกต์และหน้าเว็บที่เจ๋งมาก