ทบทวน UEFI แบบสั้นๆ
- UEFI โหลดบูตโหลดเดอร์ของ OS ผ่านเฟิร์มแวร์ที่เก็บอยู่ใน ROM ของเมนบอร์ด
- มีการนำมาตรฐานใหม่ชื่อ UEFI มาใช้เพื่อก้าวข้ามข้อจำกัดของ BIOS
- UEFI รันบูตโหลดเดอร์ในสภาพแวดล้อมแบบ 64 บิต และมี API ที่หลากหลายให้ใช้งาน
การบูตผ่านเครือข่าย
- บูตโหลดเดอร์บางตัวสามารถโหลด OS ผ่านเครือข่ายแทนอุปกรณ์ภายในเครื่องได้
- เฟิร์มแวร์ UEFI มี network stack ในตัว ทำให้สามารถรันแอปพลิเคชันในสภาพแวดล้อมก่อนบูตได้
การทำเน็ตเวิร์กด้วย Rust ใน UEFI
- การทำ TCP protocol ของ UEFI ด้วย Rust เป็นส่วนที่ยากที่สุดของโปรเจ็กต์
- การใช้ TCP protocol ของ UEFI มีความซับซ้อน และเกี่ยวข้องกับ global state, callback และ scatter-gather buffer เป็นต้น
- มีการทดสอบโค้ด Rust อย่างระมัดระวังเพื่อป้องกัน memory leak หรือ UAF (Use-After-Free) ใน TCP receive buffer
การรองรับเคอร์เซอร์
- เมาส์ไม่ใช่สิ่งจำเป็นสำหรับไคลเอนต์ IRC แต่ช่วยให้ประสบการณ์ใช้งานดีขึ้น
- ใช้ Simple Pointer Protocol ของ UEFI เพื่ออ่านการเคลื่อนไหวของเมาส์และการกดปุ่ม
การโมเดลข้อความ IRC
- การโมเดลข้อความ IRC เป็นงานที่เรียบง่ายและสนุก
- IRC ใช้ฟอร์แมตบรรทัดแบบข้อความ และมีเพียงบางส่วนเท่านั้นที่ถูกทำให้เป็นมาตรฐาน
การใช้ libgui บน UEFI
- การรัน GUI toolkit บน UEFI ค่อนข้างราบรื่น เพราะก่อนหน้านี้มีการทำงานไว้มากแล้วเพื่อให้ Rust GUI toolkit ของ axle ใช้ได้ในบริบทอื่น
- หลังจากจัดเตรียม implementation ของ AwmWindow สำหรับ UEFI แล้ว ก็สามารถใช้ฟีเจอร์ส่วนใหญ่ของ libgui ได้ เช่น การจัดการอีเวนต์ การเรนเดอร์ฟอนต์ และการคอมโพสเลเยอร์
แถบเลื่อน
- เนื่องจากใน scroll view แสดงข้อความเป็นหลัก จึงมีการนำฟังก์ชันแถบเลื่อนกลับมาทำใหม่ใน Rust libgui
การเรนเดอร์ข้อความใน scroll view
- จำเป็นต้องปรับวิธีเรนเดอร์ข้อความใน scroll view อยู่บ้าง
- scroll view ใช้แคนวาสที่ขยายได้แบบอิง 'tile' เพื่อจัดการข้อมูลพิกเซล
การปรับปรุง libgui
- ทุกครั้งที่สร้างกราฟิกแอปพลิเคชันใหม่ ก็เป็นโอกาสในการปรับปรุงระบบและ API
- ระหว่างพัฒนา UEFIRC ได้เพิ่มทั้งการปรับแต่งและการแก้ไขบางอย่างให้กับ libgui
ไม่จำเป็นเลยแม้แต่น้อย
- ตัว UEFIRC เองไม่ได้มีประโยชน์มากนักสำหรับการใช้งานจริง และโปรเจ็กต์นี้ก็เป็นมุกที่ซับซ้อน
- หากคุณอยากบ่นเกี่ยวกับ TCP/IP stack ของ UEFI ก็สามารถใช้เครื่องมือนี้เป็นช่องทางระบายได้
ความเห็นของ GN⁺
- โปรเจ็กต์นี้เป็นความพยายามแปลกใหม่ในการพัฒนาไคลเอนต์ IRC แบบกราฟิกที่ทำงานในสภาพแวดล้อม UEFI ด้วย Rust ทำให้สามารถแชตและอ่านข้อความได้ก่อนที่ระบบจะบูต
- การทำเน็ตเวิร์กที่อาศัยทั้งความซับซ้อนของ UEFI และความปลอดภัยด้านหน่วยความจำของ Rust อาจเป็นสื่อการเรียนรู้ที่สำคัญในสาย system programming
- แม้จะยังถกเถียงกันได้ว่าเทคโนโลยีนี้มีประโยชน์จริงแค่ไหน แต่ก็เป็นกรณีศึกษาที่น่าสนใจในการสำรวจความเป็นไปได้ของการพัฒนาแอปพลิเคชันบนสภาพแวดล้อม UEFI
- โปรเจ็กต์นี้ซึ่งผสานความซับซ้อนของโมเดลการเขียนโปรแกรม UEFI เข้ากับความปลอดภัยของ Rust อาจช่วยเพิ่มความเข้าใจด้านการเขียนโปรแกรมระดับระบบได้
- โปรเจ็กต์นี้เปิดซอร์สไว้แล้ว จึงเป็นแหล่งอ้างอิงที่ดีสำหรับนักพัฒนาที่สนใจและต้องการศึกษาไปต่อ
1 ความคิดเห็น
ความเห็นจาก Hacker News
ประสบการณ์ของนักพัฒนาที่สร้างไคลเอนต์ IRC แบบกราฟิกที่ทำงานในสภาพแวดล้อม pre-boot ของ UEFI
การชี้ให้เห็นความเข้าใจผิดที่ว่าระบบปฏิบัติการเป็นระดับล่างสุดในซอฟต์แวร์สแต็ก
ปฏิกิริยาต่อคำถามเกี่ยวกับจุดประสงค์ของโปรเจ็กต์
ปฏิกิริยาของเพื่อนนักพัฒนาต่อโปรเจ็กต์นี้
ความทึ่งต่อการเข้าถึงได้ง่ายและการจัดทำเอกสารของ UEFI API
ความเห็นส่วนตัวเกี่ยวกับฟังก์ชัน mouse acceleration
การกล่าวถึงคำสัญญาในช่วงแรกของ UEFI
การเปรียบเทียบกับโปรเจ็กต์ bootloader อื่น
คำชมต่อการทำภาพประกอบในบทความ
ความเป็นไปได้ของแอปพลิเคชันด้านดนตรีในสภาพแวดล้อม bare metal