Linux 桌面之痛
与
Flatpak 之解
李瑞彬 Robin Lee
谁之痛?
Linux 桌面生态几类参与者
最终用户
- 没有给自己的发行版打包
- 打包与上游发布时间差
- 版本(分支)选择
- 遇到问题问人,但是在别人的环境没问题
开源开发者
- 要在不同发行版上调试
- 编写在不同发行版上的编译/安装方法
- 报告者环境差异(报告者自己也不知道有哪些差异要说)
- 需不需要自己打包,自己给哪些发行版哪些版本打包
闭源开发者
- 与开源开发者一样的问题
- 自己的闭源打包如何让用户信任
- 旧发布的二进制包在新发行版上无法使用
- 禁止重分发条件下,如何让用户更容易安装
打包者
- 跟随上游发布节奏
- 跟随发行版发布节奏
- 跟随发行版打包规范变更
发行版发布者
- 大版本更新时,如何保证用户应用继续可以使用
如何使用
用户可见要素
- Remote = 软件仓库
- App = 应用
- 依赖一个 runtime(运行时)
- 依赖一个 sdk(构建时)
- 可选若干个 extension
- Runtime = 运行时,应用基础运行环境
- 基础 runtime: org.freedesktop.Platform
- GNOME KDE Deepin 有对应的增强 runtime
- sdk = 构建环境,每个 runtime 都有对应的 sdk
- runtime/sdk extension
技术基础
- Linux 容器化技术(namespace, cgroup)
- Project Atomic, bubblewrap,容器运行管理
- OSTree,类似 git 模式管理二进制目录数
- 基础库的 ABI 成熟
- DBus,应用与外部系统通信
Flapak之隔离性
- 系统与应用的区分,沙箱
- 权限控制,特定的 dbus 接口、设备、网络、目录等等
- 多版本(分支)共存
- 通过 runtime 标准化运行时环境
- 通过 sdk 准备编译环境
- 构建步骤按需重构
- 跨平台打包
- 辅助 reproducible build
- 打包简单化,推给上游完成
Flapak之去中心化分发
- 多软件仓库,应用固定使用原软件仓库更新
- 随意差量更新
- 用户安装(应用仅能本用户使用)
- 自动化安装不可重分发的闭源软件
- 快速查询更新,并行安装操作
- 官方软件仓库 flathub
蓝图
发行版发布者专注系统
- 专注内核和桌面环境打包
- 维护 Flatpak 运行环境
- 使用 ostree 等机制分发和更新系统
Flatpak 开发者
- 提供更多的权限控制
- 提供更多的安全通用接口
- 支持更多桌面环境
- 支持更多扩展
- 支持更多软件开发框架
- 支持 wine?
- 目前 qt5 flatpak 应用无法使用 ibus,只支持 Fctix
- 支持 wine?
最终用户
完全用 Flatpak 管理应用
开发者和打包者
- Linux 桌面开发调试环境更统一便利
- 更乐于开发 Linux 桌面软件
- 使应用适配 Flatpak 方式运行
- 分享打包工作,推送到 Flathub
试探性实作
- Fedora Atomic Workstation (GNOME)
- http://www.projectatomic.io/blog/2018/02/fedora-atomic-workstation/
- "atomic" 意指系统的一体性
- 使用 rpm-ostree 管理和更新系统
走向主流
以自由软件力量
构建主流操作系统生态,达到 Windows, Android, iOS 程度
flatpak-fixing-linux-desktop
By cheeselee
flatpak-fixing-linux-desktop
- 603