1 คะแนน โดย GN⁺ 2024-04-07 | 1 ความคิดเห็น | แชร์ทาง WhatsApp

ทบทวน 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 ความคิดเห็น

 
GN⁺ 2024-04-07
ความเห็นจาก Hacker News
  • ประสบการณ์ของนักพัฒนาที่สร้างไคลเอนต์ IRC แบบกราฟิกที่ทำงานในสภาพแวดล้อม pre-boot ของ UEFI

    นักพัฒนาเริ่มโปรเจ็กต์นี้เป็นงานเบา ๆ และสนุก ๆ หลังจากเหนื่อยกับโปรเจ็กต์ตัวรับสัญญาณ GPS ใช้เวลานานกว่าที่คาดไว้ และใช้เวลาไปมากกับการออกแบบโมเดล scroll view และการเรนเดอร์ไปยัง viewport แบบคงที่ เป้าหมายคือสร้างไคลเอนต์ IRC ที่ให้ความรู้สึกคล้ายโซเชียลมีเดียบน UEFI และเลือก IRC เพราะมีไคลเอนต์ Twitter ที่ใช้ HTTP protocol ของ UEFI อยู่แล้ว

  • การชี้ให้เห็นความเข้าใจผิดที่ว่าระบบปฏิบัติการเป็นระดับล่างสุดในซอฟต์แวร์สแต็ก

    ในความเป็นจริงยังมีโค้ดเฟิร์มแวร์ที่ควบคุมระบบอยู่ และบางครั้งมันก็ทำงานโดยที่แม้แต่ OS ก็ไม่รับรู้ การที่สามารถรันไคลเอนต์ IRC บน UEFI ได้บ่งชี้ว่าอาจเกิดสิ่งที่ร้ายแรงกว่านั้นได้เช่นกัน

  • ปฏิกิริยาต่อคำถามเกี่ยวกับจุดประสงค์ของโปรเจ็กต์

    นักพัฒนาเริ่มโปรเจ็กต์นี้เพื่อความสนุก และนี่คือจิตวิญญาณที่ชุมชน Hacker News ให้คุณค่า โดยให้ความสำคัญกับความคิดสร้างสรรค์และความสนุกมากกว่าความเป็นประโยชน์ใช้สอยของโปรเจ็กต์

  • ปฏิกิริยาของเพื่อนนักพัฒนาต่อโปรเจ็กต์นี้

    นักพัฒนาอธิบายโปรเจ็กต์นี้เหมือนเป็นมุกตลก แต่เพื่อนกลับบอกว่าไม่รู้ว่าควรหัวเราะตอนไหน นักพัฒนาแนะนำว่าอย่าประเมินคุณค่าที่เป็นไปได้ของโปรเจ็กต์นี้ต่ำเกินไป

  • ความทึ่งต่อการเข้าถึงได้ง่ายและการจัดทำเอกสารของ UEFI API

    นักพัฒนาแสดงความประหลาดใจที่ UEFI API มีเอกสารที่ดีและเข้าถึงได้ง่าย พร้อมทั้งสงสัยว่าในระหว่างพัฒนาได้ใช้ virtual machine หรือไม่ และเวลาจะรันไคลเอนต์ต้องบูตเครื่องใหม่ทุกครั้งหรือเปล่า

  • ความเห็นส่วนตัวเกี่ยวกับฟังก์ชัน mouse acceleration

    mouse acceleration เป็นอุปสรรคต่อการที่ผู้ใช้จะเรียนรู้ระยะทางบนหน้าจอ ในหมู่เกมเมอร์ การปิดฟังก์ชันนี้เป็นเรื่องปกติ และในระยะยาวมีประสิทธิภาพมากกว่า

  • การกล่าวถึงคำสัญญาในช่วงแรกของ UEFI

    ตอนที่ UEFI ถูกเปิดตัวครั้งแรก มันเคยสัญญาถึงความเป็นไปได้ของแอปพลิเคชันระดับล่าง และมีความฝันว่ามันอาจมาแทนที่ mini OS สำหรับใช้อินเทอร์เน็ตโดยเฉพาะที่อิงกับ Linux ของผู้จำหน่ายบางรายได้

  • การเปรียบเทียบกับโปรเจ็กต์ bootloader อื่น

    มีการกล่าวถึงโปรเจ็กต์ April Fools ของ bootloader barebox โดยชี้ว่าโปรเจ็กต์นั้นเน้นการเพิ่มการรองรับ TCP ขณะที่โปรเจ็กต์ของนักพัฒนารายนี้มีองค์ประกอบ GUI รวมอยู่ด้วย

  • คำชมต่อการทำภาพประกอบในบทความ

    มีการกล่าวว่าภาพประกอบที่อยู่ในบทความน่าประทับใจ

  • ความเป็นไปได้ของแอปพลิเคชันด้านดนตรีในสภาพแวดล้อม bare metal

    มีการอธิบายข้อดีของแอปพลิเคชันด้านดนตรี เช่น synthesizer หรือ guitar effects processor ในสภาพแวดล้อม bare metal ที่บูตได้รวดเร็วและไม่มีส่วนประกอบที่ไม่จำเป็น ซึ่งสำหรับสิ่งนี้ก็ยังต้องมีการรองรับการ์ดเสียงด้วย