- Flatpak hiện đang được các nhà phát triển và người dùng ưa chuộng, nhưng vấn đề đình trệ phát triển của chính dự án đang nổi lên
- Do sự rời đi của các nhà phát triển chủ chốt và nút thắt cổ chai, việc đưa tính năng mới vào và review mã đang bị trì hoãn
- Nhiều tính năng tăng cường như hỗ trợ image OCI, phân quyền chi tiết và kiểm soát truy cập âm thanh đã được đề xuất, nhưng tiến độ đưa vào thực tế diễn ra chậm
- Để dự án phát triển lâu dài, các phương án áp dụng tiêu chuẩn công nghệ container (OCI) và tái hiện thực bằng Rust đang được thảo luận
- Việc giải quyết các bài toán lớn như cải thiện portal, hỗ trợ driver, sandbox mạng là chìa khóa cho sự tăng trưởng của Flatpak
Tổng quan và tình hình hiện tại của dự án Flatpak
- Flatpak bắt đầu từ các dự án tương tự từ năm 2007, ra mắt lần đầu với tên XDG-App vào năm 2015, rồi đổi tên thành Flatpak vào năm 2016
- Dự án cung cấp công cụ dòng lệnh, công cụ build, các thành phần runtime, và có đặc điểm xây dựng cô lập ứng dụng (sandboxing) bằng cgroups, namespaces, bind mount, seccomp, Bubblewrap
- OSTree là phương thức phân phối mặc định, và gần đây hỗ trợ image OCI cũng đã được bổ sung để sử dụng trong Fedora và các nơi khác
- Dù thành công với sự tăng trưởng của kho ứng dụng Flathub và việc được các bản phân phối chấp nhận, nội bộ dự án lại đang trải qua hiện tượng chững lại trong phát triển tích cực
Tình trạng giậm chân tại chỗ trong phát triển và các nguyên nhân chính
- Vẫn có các hoạt động ở mức bảo trì và vá bảo mật, nhưng việc phát triển tính năng mới quy mô lớn và review mã đã đình trệ trong thời gian dài
- Sự rời đi của các nhà phát triển chủ chốt (như Larsson) khiến thiếu người review, tạo ra môi trường khó thu hút người đóng góp mới hoặc thực hiện các thay đổi lớn
- Ngay cả tính năng cài sẵn Flatpak (Preinstall) do Red Hat và các bên khác đóng góp cũng nhiều lần mất hàng tháng để tích hợp xong vì review chậm và người phụ trách rời đi
OSTree và hỗ trợ image OCI
- OSTree đã được áp dụng thành công cho Flatpak, nhưng do vấn đề công cụ không chuẩn/hạn chế, ngoài bảo trì ra thì không còn nhiều phát triển chủ động
- OCI có hệ sinh thái công cụ rất rộng cho container image, nên từ góc nhìn của nhóm phát triển Flatpak, việc áp dụng OCI có thể giúp giảm gánh nặng bảo trì và tránh lặp lại công sức
- Việc hỗ trợ các định dạng nén hiệu quả như zstd:chunked cũng đã được đề xuất qua PR mới, nhưng vẫn ở trạng thái trì hoãn/chưa được hợp nhất
Quản lý quyền hạn và phân tách sandbox chi tiết hơn
- Flatpak tập trung vào việc hạn chế truy cập hệ thống thông qua sandboxing, và ở các phiên bản Flatpak mới hơn đã hỗ trợ phân quyền chi tiết (ví dụ:
--device=input)
- Do phiên bản Flatpak khác nhau giữa các bản phân phối Linux, đã phát sinh vấn đề các tính năng quyền hạn mới không thể được áp dụng rộng rãi cùng với vấn đề tương thích phiên bản
- Với quyền âm thanh, do giới hạn trong hỗ trợ PulseAudio, rất khó tách riêng phát và ghi âm; vì vậy nhu cầu cải thiện bằng PipeWire và các công nghệ tương tự đã được nêu ra
- Việc hỗ trợ sandbox lồng nhau còn thiếu, nên các ứng dụng như trình duyệt web không thể sử dụng thêm sandbox nội bộ bên trong
D-Bus và sandbox mạng
- Flatpak không truy cập trực tiếp vào D-Bus mà dùng xdg-dbus-proxy để giao tiếp đã được lọc
- Wick bày tỏ ý định chuyển chính sách lọc sang D-Bus broker để áp dụng chính sách động và thực hiện kiểm soát truy cập dựa trên cgroup
- Do việc triển khai network namespace còn thiếu sót, khi localhost port bị lộ có thể tồn tại khả năng giao tiếp ngoài ý muốn giữa các ứng dụng Flatpak (trường hợp thực tế: AusweisApp)
- Driver NVIDIA được cung cấp riêng cho từng runtime, gây ra lưu lượng mạng quá mức và khó cập nhật. Các phương án như chia sẻ từ host, biên dịch tĩnh đang được xem xét với tham chiếu tới mô hình của Valve
Việc sử dụng Portal và nhu cầu cải thiện
- Portal là API truy cập tài nguyên bên ngoài dựa trên D-Bus, đảm nhiệm nhiều vai trò như file, in ấn, URL
- Documents portal và các portal tương tự hiệu quả ở mức từng file, nhưng với các ứng dụng có tính sử dụng cao như GIMP hay Blender, mô hình quyền quá chi tiết lại trở thành giới hạn
- Cùng với các đề xuất về API mới cho tự động điền mật khẩu, khóa FIDO, tổng hợp giọng nói, các ý tưởng giảm độ khó phát triển và tái hiện thực bằng Rust cũng đang được bàn luận
Tương lai của Flatpak (Flatpak-next)
- Với giả định trong tương lai Flatpak có thể không còn được phát triển nữa, một sự chuyển đổi lớn sang hệ sinh thái OCI (image, registry, công cụ, chính sách và hơn thế nữa) đang được thảo luận ở góc nhìn dài hạn
- Các hướng như tái hiện thực bằng Rust và hợp nhất vào hệ sinh thái container được kỳ vọng có ưu điểm về gánh nặng quản lý, bảo trì và khả năng mở rộng
Tóm tắt phần hỏi đáp
- Trước câu hỏi về cách xử lý các ứng dụng Flatpak hiện có khi chuyển sang OCI, câu trả lời là sẽ không có vấn đề lớn nhờ tự động hóa build của Flathub và các cơ chế tương tự
- Về vấn đề thiếu metadata trong OCI registry, hiện đã có các tiêu chuẩn cho dữ liệu không phải image, nhưng để phản ánh thực tế vẫn cần phát triển và tích hợp thêm
- Về kế hoạch hỗ trợ trực tiếp PipeWire, các thảo luận kỹ thuật đang diễn ra và hướng đi là tích hợp dựa trên chính sách của PipeWire
Kết luận
- Flatpak đã định vị được mình là nền tảng tiêu chuẩn cho phân phối và sandboxing, nhưng vẫn còn nhiều bài toán cần cải thiện như đình trệ review và phát triển mới, vấn đề quyền hạn/mạng/driver, cũng như chuyển đổi sang tiêu chuẩn tương lai
- Công nghệ container dựa trên OCI và việc sử dụng Rust có khả năng trở thành động lực mới cho sự phát triển của Flatpak
- Các điểm chính có thể tóm gọn là bổ sung reviewer, chuẩn hóa, mở rộng hệ sinh thái, cải thiện trải nghiệm người dùng
2 bình luận
Có lẽ cách tốt hơn là thay vì chặn hẳn quyền truy cập thì hiển thị rõ đang truy cập vào thư mục nào.
Android khá ổn ở điểm đó, nhưng bên này lại gộp quyền quá lớn nên cả những mức quyền không cần thiết cũng phải cho phép cùng luôn...
Ý kiến trên Hacker News
--device=input, cũng như thực tế không thể thiết lập quyền chi tiết kiểu chỉ mở loa mà chặn micro/tmp, khiến việc lưu file đính kèm hoặc mở bằng ứng dụng khác trở nên cực kỳ bất tiện trong môi trường sandbox; cho rằng chủ nhân của máy tính phải là người dùng chứ không phải nhà phát triển; kiểu bảo mật quá mức này chỉ làm giảm năng suất, và ví nó với Useless Machinegit config, thư mục font v.v. thì một phương án lai, cho phép tùy chọn để mọi instance có cùng quyền truy cập, sẽ thực tế hơnflatpak-spawn,polkit-execv.v., nhưng như vậy gần như phải từ bỏ luôn lớp bảo vệ sandbox