- Flatpak กำลังได้รับ ความนิยมจากนักพัฒนาและผู้ใช้ แต่ตัวโครงการเองกำลังเผชิญปัญหา การพัฒนาชะงักงัน
- จากการถอนตัวของนักพัฒนาหลักและ คอขวด ต่างๆ ทำให้การเพิ่มฟีเจอร์ใหม่และการรีวิวโค้ดเกิด ความล่าช้า
- มีการเสนอ ฟีเจอร์เสริม หลายอย่าง เช่น รองรับอิมเมจ OCI, การแยกสิทธิ์ให้ละเอียดขึ้น, การควบคุมการเข้าถึงระบบเสียง แต่การนำมาใช้จริงยังเป็นไปอย่างล่าช้า
- เพื่อการพัฒนาโครงการในระยะยาว มีการพูดคุยถึงแนวทาง นำมาตรฐานเทคโนโลยีคอนเทนเนอร์ (OCI) มาใช้ และ การเขียนใหม่บน Rust
- การแก้โจทย์สำคัญอย่าง การปรับปรุงพอร์ทัล, การรองรับไดรเวอร์, และ network sandboxing จะเป็นกุญแจต่อการเติบโตของ Flatpak
ภาพรวมและสถานะของโครงการ Flatpak
- Flatpak เริ่มต้นจากโครงการลักษณะใกล้เคียงกันมาตั้งแต่ปี 2007 เปิดตัวครั้งแรกในชื่อ XDG-App ปี 2015 และเปลี่ยนชื่อเป็น Flatpak ในปี 2016
- มี เครื่องมือบรรทัดคำสั่ง, เครื่องมือสำหรับบิลด์, และองค์ประกอบรันไทม์ โดยใช้ cgroups, namespaces, bind mount, seccomp, Bubblewrap เป็นต้น เพื่อแยกแอปพลิเคชันออกจากระบบ (sandboxing)
- เดิมใช้ OSTree เป็นวิธีส่งมอบหลัก และช่วงหลังได้เพิ่ม การรองรับอิมเมจ OCI ซึ่งถูกใช้งานใน Fedora เป็นต้น
- แม้จะประสบความสำเร็จจากการเติบโตของ Flathub app store และการยอมรับจากดิสโทรต่างๆ แต่ภายในโครงการกลับเผชิญภาวะ การพัฒนาเชิงรุกชะลอตัว
ภาวะชะงักงันของการพัฒนาและสาเหตุหลัก
- แม้ยังมีงานด้านการดูแลรักษาและแพตช์ความปลอดภัยอยู่ แต่การพัฒนา ฟีเจอร์ใหม่ขนาดใหญ่ และการรีวิวโค้ดเกิดภาวะ หยุดนิ่งเป็นเวลานาน
- การถอนตัวของนักพัฒนาหลัก (เช่น Larsson) ทำให้ผู้รีวิวมีไม่พอ ส่งผลให้สภาพแวดล้อมไม่เอื้อต่อการดึงผู้มีส่วนร่วมรายใหม่หรือการเปลี่ยนแปลงขนาดใหญ่
- แม้แต่ฟีเจอร์อย่าง Flatpak preinstall ที่มีผู้สนับสนุนจาก Red Hat ก็ยังประสบปัญหาการรีวิวล่าช้าและผู้รับผิดชอบถอนตัว ทำให้ต้องใช้เวลาหลายเดือนกว่าจะรวมเข้าระบบได้ และเหตุการณ์ลักษณะนี้เกิดซ้ำหลายครั้ง
OSTree และการรองรับอิมเมจ OCI
- OSTree ถูกนำมาใช้กับ Flatpak ได้อย่างประสบความสำเร็จ แต่เนื่องจากปัญหาเรื่อง ความไม่เป็นมาตรฐาน/เครื่องมือที่จำกัด จึงแทบไม่มีการพัฒนาเชิงรุกนอกจากการบำรุงรักษา
- ฝั่ง OCI มี ecosystem ของเครื่องมือที่กว้างขวาง สำหรับอิมเมจคอนเทนเนอร์ ดังนั้นสำหรับทีมพัฒนา Flatpak การนำมาใช้อาจช่วยลดภาระการดูแลรักษาและลดงานที่ซ้ำซ้อน
- ข้อเสนอใหม่อย่างการรองรับฟอร์แมตบีบอัดที่มีประสิทธิภาพ เช่น zstd:chunked ถูกเสนอผ่าน PR แล้ว แต่ยังคงอยู่ในสถานะ ล่าช้าหรือยังไม่ถูกรวม
การจัดการสิทธิ์และการแยก sandbox ให้ละเอียดขึ้น
- Flatpak มุ่งเน้นการจำกัดการเข้าถึงระบบผ่าน sandboxing และใน Flatpak รุ่นใหม่มีการรองรับ การแยกสิทธิ์อย่างละเอียด แล้ว (เช่น
--device=input)
- เนื่องจากแต่ละดิสโทรลินุกซ์ใช้ Flatpak คนละเวอร์ชัน จึงเกิดปัญหาที่ ฟีเจอร์สิทธิ์แบบใหม่ยังไม่ถูกใช้อย่างแพร่หลาย รวมถึงปัญหา ความเข้ากันได้ของเวอร์ชัน
- ในกรณีของสิทธิ์ด้านเสียง เนื่องจากข้อจำกัดในการรองรับ PulseAudio จึงแยกสิทธิ์เล่นเสียงและบันทึกเสียงได้ยาก ทำให้มีการเสนอว่าควรปรับปรุงผ่าน PipeWire เป็นต้น
- การรองรับ nested sandboxing ยังไม่เพียงพอ ทำให้แอปอย่างเว็บเบราว์เซอร์ไม่สามารถใช้ sandbox ภายในเพิ่มเติมได้
D-Bus และ network sandboxing
- Flatpak ไม่เข้าถึง D-Bus โดยตรง แต่ใช้การสื่อสารแบบกรองผ่าน xdg-dbus-proxy
- Wick แสดงเจตนาที่จะย้าย นโยบายการกรอง ไปไว้ใน D-Bus broker เพื่อให้สามารถใช้นโยบายแบบไดนามิกและควบคุมการเข้าถึงบนพื้นฐานของ cgroup ได้
- จากการที่การทำ network namespace ยังไม่สมบูรณ์ เมื่อมีการเปิดเผยพอร์ตบน localhost จึงอาจเกิด การสื่อสารที่ไม่ตั้งใจระหว่างแอป Flatpak ได้ (กรณีจริง: AusweisApp)
- ไดรเวอร์ NVIDIA ถูกจัดเตรียมแยกตามแต่ละรันไทม์ ทำให้เกิด ทราฟฟิกเครือข่ายมากเกินไปและอัปเดตได้ยาก จึงมีการมองหาแนวทางอย่าง การแชร์จากโฮสต์ หรือ การคอมไพล์แบบสแตติก โดยอ้างอิงโมเดลของ Valve
การใช้งานพอร์ทัล (Portal) และความจำเป็นในการปรับปรุง
- พอร์ทัล คือ API สำหรับเข้าถึงทรัพยากรภายนอกบนพื้นฐาน D-Bus โดยรองรับบทบาทหลากหลาย เช่น ไฟล์ การพิมพ์ และ URL
- พอร์ทัลอย่าง Documents มีประสิทธิภาพในระดับไฟล์รายชิ้น แต่สำหรับแอปที่เน้นการใช้งานจริงสูงอย่าง GIMP หรือ Blender โมเดลสิทธิ์ที่ ละเอียดเกินไป กลับกลายเป็นข้อจำกัด
- มีการพูดคุยถึงข้อเสนอ API ใหม่ เช่น การกรอกรหัสผ่านอัตโนมัติ, FIDO key, การสังเคราะห์เสียง พร้อมทั้งแนวคิดเรื่องการลดความยากในการพัฒนาและ การเขียนใหม่ด้วย Rust
อนาคตของ Flatpak (Flatpak-next)
- มีการพูดคุยในมุมมองระยะยาวโดยสมมติว่า Flatpak อาจไม่ถูกพัฒนาต่อในอนาคต ซึ่งนำไปสู่แนวคิด เปลี่ยนผ่านครั้งใหญ่ไปสู่ ecosystem ของ OCI (ครอบคลุมอิมเมจ รีจิสทรี เครื่องมือ นโยบาย ฯลฯ)
- การเขียนใหม่ด้วย Rust และแนวทาง ทำให้เป็นส่วนหนึ่งของ ecosystem คอนเทนเนอร์แบบรวมศูนย์ อาจมีข้อดีด้านภาระการจัดการ การบำรุงรักษา และความสามารถในการขยายระบบ
สรุปคำถาม-คำตอบ
- ต่อคำถามเรื่อง การจัดการแอป Flatpak เดิมเมื่อย้ายไป OCI มีคำตอบว่าไม่น่ามีปัญหาใหญ่ เพราะ Flathub มีระบบอัตโนมัติด้านบิลด์อยู่แล้ว
- ส่วนปัญหา การขาด metadata ใน OCI registry แม้กำลังมีการจัดทำมาตรฐานสำหรับข้อมูลที่ไม่ใช่อิมเมจ แต่การใช้งานจริงยังต้องอาศัยการพัฒนาและการบูรณาการเพิ่มเติม
- สำหรับแผน รองรับ PipeWire โดยตรง มีการระบุว่าการหารือเชิงเทคนิคกำลังดำเนินอยู่ และทิศทางคือการผสานรวมบนฐานของนโยบาย PipeWire
บทสรุป
- Flatpak ได้กลายเป็น แพลตฟอร์มมาตรฐานด้านการแจกจ่ายและ sandboxing ไปแล้ว แต่ยังมีโจทย์ให้ปรับปรุงอีกหลายด้าน เช่น การรีวิวและการพัฒนาฟีเจอร์ใหม่ที่ชะงักงัน, ปัญหาเรื่องสิทธิ์/เครือข่าย/ไดรเวอร์, และการเปลี่ยนผ่านไปสู่มาตรฐานในอนาคต
- เทคโนโลยีคอนเทนเนอร์บนฐาน OCI และการใช้ Rust อาจกลายเป็นแรงขับใหม่ของการพัฒนา Flatpak
- ประเด็นสำคัญสามารถสรุปได้เป็น การเพิ่มจำนวนผู้รีวิว, การทำมาตรฐาน, การขยาย ecosystem, และการปรับปรุงประสบการณ์ผู้ใช้
2 ความคิดเห็น
ผมคิดว่าวิธีที่ดีกว่าคือไม่ใช่การบล็อกสิทธิ์การเข้าถึงไปเลย แต่เป็นการแสดงให้ชัดเจนว่าเข้าถึงไดเรกทอรีไหนอยู่
Android ก็โอเคในแง่นั้น แต่ฝั่งนี้กลับมัดสิทธิ์เป็นก้อนใหญ่เกินไป จนต้องอนุญาตสิทธิ์ในระดับที่ไม่จำเป็นไปด้วย...
ความคิดเห็นบน Hacker News
--device=inputและความจริงที่ว่าไม่สามารถตั้งสิทธิ์แบบละเอียด เช่น เปิดเฉพาะลำโพงแต่ปิดไมโครโฟนได้git config, โฟลเดอร์ฟอนต์ ฯลฯ ควรมีตัวเลือกแบบไฮบริดที่ให้อินสแตนซ์ทั้งหมดเข้าถึงเหมือนกันเพื่อให้ใช้งานได้จริงflatpak-spawn,polkit-execให้ใช้ใน Flatpak แต่ก็แทบเท่ากับยอมทิ้งการป้องกันจาก sandbox ไปเกือบหมด