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之隔离性

  1. 系统与应用的区分,沙箱
  2. 权限控制,特定的 dbus 接口、设备、网络、目录等等
  3. 多版本(分支)共存
  4. 通过 runtime 标准化运行时环境
  5. 通过 sdk 准备编译环境
    1. 构建步骤按需重构
    2. 跨平台打包
    3. 辅助 reproducible build
    4. 打包简单化,推给上游完成

 

Flapak之去中心化分发

  1. 多软件仓库,应用固定使用原软件仓库更新
  2. 随意差量更新
  3. 用户安装(应用仅能本用户使用)
  4. 自动化安装不可重分发的闭源软件
  5. 快速查询更新,并行安装操作
  6. 官方软件仓库 flathub

蓝图

发行版发布者专注系统

  • 专注内核和桌面环境打包
  • 维护 Flatpak 运行环境
  • 使用 ostree 等机制分发和更新系统

Flatpak 开发者

  • 提供更多的权限控制
  • 提供更多的安全通用接口
  • 支持更多桌面环境
  • 支持更多扩展
  • 支持更多软件开发框架
    • 支持 wine?
    • 目前 qt5 flatpak 应用无法使用 ibus,只支持 Fctix

最终用户

完全用 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