Snowdrop OS ระบบปฏิบัติการโฮมบรูที่พัฒนาขึ้นใหม่ทั้งหมดด้วยแอสเซมบลี
(sebastianmihai.com)- Snowdrop OS เป็นระบบปฏิบัติการ 16 บิตแบบ real mode สำหรับสถาปัตยกรรม IBM PC ซึ่งสร้างขึ้นเองทั้งหมดตั้งแต่การบูตไปจนถึงการรันแอปด้วย x86 assembly ล้วน ๆ
- ดิสทริบิวชันมีทั้ง อิมเมจฟลอปปีดิสก์ 1.44MB และอิมเมจ CD-ROM โดยบรรจุ boot loader, kernel, shell, utility, แอปทดสอบ และ aSMtris เกมโคลน Tetris มาด้วย
- boot loader ขนาด 512 ไบต์จะค้นหา kernel แล้วโหลดเข้าหน่วยความจำ จากนั้น kernel จะตั้งค่า interrupt vector สำหรับแอปก่อนโหลดแอปเริ่มต้น
- มีทั้งตัวจัดการไฟล์, โปรแกรมแก้ไขข้อความ, แอปกราฟิก, BASIC interpreter, รวมถึง x86 assembler และ debugger ทำให้สามารถพัฒนาและทดลองภายใน OS ได้
- ซอร์สโค้ดถูกเผยแพร่แบบเปิดให้ใช้งานและแก้ไขได้โดยไม่มีข้อจำกัด จึงเป็นแหล่งอ้างอิงสำหรับโปรแกรมเมอร์ที่อยากศึกษาการทำงานระดับล่างของระบบปฏิบัติการด้วยตัวเอง
โครงสร้างที่สร้างเองทั้งหมดตั้งแต่การบูตจนถึงแอป
- Snowdrop OS เป็นโครงการที่เริ่มจากความสงสัยว่าเมื่อเปิดเครื่อง PC แล้วเกิดอะไรขึ้น และดิสก์ที่บูตได้กับภายในของระบบปฏิบัติการทำงานอย่างไร
- เป้าหมายคือระบบปฏิบัติการ 16 บิตแบบ real mode สำหรับ สถาปัตยกรรม IBM PC และเขียนขึ้นใหม่ทั้งหมดตั้งแต่ต้นด้วย x86 assembly
- อิมเมจที่แจกจ่ายมีให้ 2 รูปแบบ
- อิมเมจฟลอปปีดิสก์ 1.44MB
- อิมเมจ CD-ROM
- ภายในอิมเมจมีองค์ประกอบหลักที่เขียนขึ้นเองรวมอยู่ด้วย
- boot loader ที่โหลด kernel เข้าไปยังหน่วยความจำ
- kernel ที่ตั้งค่า interrupt vector สำหรับแอปผู้ใช้ แล้วจึงโหลดแอปเริ่มต้น
- แอปผู้ใช้ เช่น shell, utility, แอปทดสอบ และ aSMtris ซึ่งเป็นเกมโคลน Tetris
- หากตรวจพบฮาร์ดดิสก์ระหว่างการบูต ระบบจะถามว่าต้องการติดตั้งหรือไม่ และสามารถติดตั้ง Snowdrop OS ลงบนฮาร์ดดิสก์ได้
- แอปและเครื่องมือที่มีมาให้ครอบคลุมตั้งแต่ตัวจัดการไฟล์, โปรแกรมแก้ไขข้อความ, แอปกราฟิก, BASIC interpreter, x86 assembler ไปจนถึง x86 debugger
- ซอร์สโค้ด ของ Snowdrop OS และแอปต่าง ๆ เปิดเผยให้ใช้งานและแก้ไขได้โดยไม่มีข้อจำกัด
ส่วนของซอร์สโค้ดที่น่าอ่าน
- Boot loader: อยู่ภายใน 512 ไบต์และทำหน้าที่ค้นหาแล้วโหลด kernel
- kernel: ให้บริการพื้นฐานและ abstraction แก่แอปพลิเคชัน
- Graphics and GUI framework: เป็นพื้นฐานสำหรับสร้างแอปกราฟิกและแอปที่ใช้เมาส์
- x86 assembler: ช่วยให้สร้างแอประดับล่างได้โดยตรงภายใน Snowdrop OS
- BASIC interpreter: เครื่องมือสำหรับสร้างแอประดับสูงได้อย่างรวดเร็ว
- x86 debugger: ใช้งานร่วมกับ assembler ได้
- Dynamic data structure libraries: รองรับการทำงานกับโครงสร้างข้อมูลแบบไดนามิก เช่น linked list, tree และ BST
- All applications: รวมเกม, โปรแกรมแก้ไขข้อความ, ตัวจัดการไฟล์, เครื่องมือ และแอปทดสอบ
ความสามารถที่เพิ่มขึ้นในแต่ละเวอร์ชัน
- ประวัติเวอร์ชันเริ่มจาก v1 ที่มีงานเดี่ยว, shell และ aSMtris ก่อนจะค่อย ๆ เพิ่มความสามารถมาอย่างต่อเนื่อง
- v2: ไดรเวอร์เมาส์ PS/2 และแอปทดสอบเมาส์
- v3: รองรับ multitasking ขั้นพื้นฐานและ virtual display
- v4: ไดรเวอร์เขียนและลบ FAT12, ตัวจัดการไฟล์, โปรแกรมแก้ไขข้อความ
- v6: เกม Snake แบบผู้เล่นหลายคนผ่าน serial port
- v16: GUI framework
- v18: BASIC interpreter และ linker
- v19: ติดตั้งลงฮาร์ดดิสก์ได้
- v22: x86 assembler, รองรับหลายดิสก์, utility สำหรับดูไฟล์
- v23: x86 debugger
- v25: หน่วยความจำแบบไดนามิกและโครงสร้างข้อมูล
- v28: GUI ความละเอียดสูง, แอปวาดภาพ, แอปเดสก์ท็อป
- v31: runtime library และ BASIC interpreter RTL
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
ช่วงกลางทศวรรษ 90 ผมเคยทำ GUI OS แบบ 32 บิตสำหรับงานอดิเรก คล้าย ๆ กัน และหนังสือเล่มนี้เป็นหนังสือที่ต้องอ่านจริง ๆ
https://www.amazon.com/Developing-32-Bit-Operating-System-Cd...
https://web.archive.org/web/20140704223135/https://www.ipdat...
หลังจาก Sensory Publishing ได้สิทธิ์ไป ก็เปลี่ยนชื่อและพิมพ์เพิ่มอีก 1,000 เล่ม แต่ตอนนี้เหลืออยู่ราว 200 เล่มเท่านั้นและไม่ได้ขายแล้ว ว่ากันว่าตอนนี้หนังสือเล่มนี้เป็น public domain และหนังสือที่เหลือจะถูกเก็บไว้สำหรับ Great Alexandria Library
ถ้าสนใจโปรเจกต์แบบนี้ MenuetOS และ KolibriOS ก็น่าดูเช่นกัน KolibriOS เป็นฟอร์กที่แยกออกมาจาก MenuetOS นานแล้ว
MenuetOS ยังมีเวอร์ชัน x64 ที่รองรับ SMP ด้วย แต่ฝั่งนี้เป็นซอร์สปิด
นอกจาก OS งานอดิเรกแล้ว จะมีใครใช้มันจริง ๆ บนเครื่อง x64 หลายคอร์กันนะ
อยากรู้ว่าทุกวันนี้มีไอเดียเจ๋ง ๆ ล่าสุดอะไรบ้างในด้าน การออกแบบ OS ทั้งจากมุมผู้ใช้และมุมแฮกเกอร์ OS
https://github.com/oro-os/kernel
เป็นดีไซน์ไมโครเคอร์เนลที่ไม่มีผู้ใช้และไม่มี capability โดยบังคับใช้การควบคุมการเข้าถึงผ่านลำดับชั้นของเอนทิตีในเคอร์เนล พอร์ตหน่วยความจำร่วมที่มีหลายระดับความปลอดภัยเป็นวิธี IPC หลัก และมีการกำหนดชนิดในระดับเคอร์เนล
ตอนนี้อยู่ช่วงท้ายของการพิสูจน์ประโยชน์ของเคอร์เนล ถ้าพิสูจน์ดีไซน์ได้ ก็จะเขียนบทความอย่างเป็นทางการมากขึ้น โปรเจกต์นี้อยู่ในหัวมาราว 8 ปี และอยู่ในเอดิเตอร์มาประมาณ 4 ปี
https://doc.cat-v.org/plan_9/3rd_edition/rio/rio_slides.pdf
https://rtic.rs/ เป็นไอเดียที่ค่อนข้างน่าสนใจในพื้นที่คล้าย ๆ embedded RTOS
พูดตรง ๆ คือ ยังมีฟีเจอร์ของ Plan 9 ที่ล้ำหน้า Linux อยู่มาก เช่น https://9p.io/sys/doc/lexnames.html
[1] https://genode.org
https://redox-os.org/
ในบริบทใกล้เคียงกัน อยากรู้ว่ามีความคืบหน้าอะไรบ้างสำหรับ RTOS ประสิทธิภาพสูง สำหรับหุ่นยนต์ สาขานี้ดูเหมือนได้รับความสนใจค่อนข้างน้อย
ROS/ROS2 ไม่ใช่ระบบปฏิบัติการ และส่วนใหญ่ก็ไม่ใช่สิ่งที่ควรเรียกว่าซอฟต์แวร์ประสิทธิภาพสูงด้วย
ฝั่ง embedded มี OS เยอะ เช่น FreeRTOS, Zephyr, ThreadX และยังมีโซลูชัน proprietary หลายตัวอย่าง Nvidia DriveOS
อย่างไรก็ตาม embedded OS ค่อนข้างจำกัดเมื่อเทียบกับ OS ทั่วไปอย่าง Linux มีตัวจัดตารางงาน แต่หลายครั้งไม่มีหรือเป็นตัวเลือกเสริมสำหรับ process, filesystem, การโหลดไฟล์แบบไดนามิก, เครื่องมือไบนารี และอื่น ๆ
https://rtic.rs
บทความที่เกี่ยวข้องมีพวกนี้ ยังมีอย่างอื่นอีกไหม?
Homebrew an OS from Scratch? Snowdrop Shows How It's Done - https://news.ycombinator.com/item?id=39005640 - Jan 2024 (1 comment)
Snowdrop OS – a homebrew operating system from scratch, in assembly language - https://news.ycombinator.com/item?id=28090574 - Aug 2021 (3 comments)
พูดให้ถูกคือเป็น แอสเซมบลี x86
ชุดเครื่องมือและแอปที่ทำขึ้นมาน่าประทับใจ แต่ถึงอย่างนั้นก็ดูเหมือนยังไม่ตกหลุมเสน่ห์ของการ self-hosting
ถ้าจะทำให้แอสเซมเบลอร์เทียบระดับ nasm ได้ คงต้องทำงานเพิ่มอีก หรือไม่ก็ต้องปรับซอร์สโค้ดทั้งหมดให้ใกล้กับ Snowdrop ASM มากขึ้น
ถ้ามี V32 กับคอมไพเลอร์ BASIC ด้วยก็ดี
น่าจะขอเป็นฟีเจอร์ได้
อยากเห็นการพอร์ตของแบบนี้ไปบน esp32 เช่น เอาไปรันบนบอร์ดอย่าง ttgo vga32
ถ้ามี GUI พื้นฐานและ OS แบบเชลล์ที่มี SD card, VGA, เสียง, คีย์บอร์ด/เมาส์, WiFi, Bluetooth ก็คงดี ให้ความรู้สึกเหมือน Commodore 64 ยุคใหม่ โดยการพิมพ์ผ่าน WiFi จะเป็นแค่ข้อความก็ได้ และมีเบราว์เซอร์สไตล์ lynx, อีเมล, IRC, gopher อะไรแบบนั้นด้วย
ข้อกำหนดสำหรับการ build Snowdrop OS น่าประทับใจ
Works on: Windows XP 32bit, Windows 98, Windows 95