基本概念#

可以通过很少的关键概念来理解Flatpak,在学习如何使用Flatpak的命令行或者用它构建应用之前熟悉他们是很有用的。

_images/diagram.svg

运行时(runtime)#

运行时提供应用程序使用的基本依赖项。每个应用程序都必须针对运行时构建,并且这个运行时必须安装在主机系统上,以便应用程序运行(Flatpak可以自动安装应用程序所需的运行时)。可以同时安装多个不同的运行时以及同一运行时的不同版本。

运行时是发行版无关的,而且不依赖发行版的特定版本。这意味着他们为应用程序提供了一个稳定、跨发行版的基础,这使得应用程序可以不管操作系统的升级

捆绑库#

如果一个应用程序要求的依赖不在他的运行时里,这些依赖可以作为应用程序的一部分。这给了应用程序开发人员关于他们使用的依赖关系的灵活性,包括使用:

  • libraries that aren’t available in a runtime

  • different versions of libraries from the ones that are in a runtime

  • 某个库的补丁版本

沙箱#

使用Flatpak,每个应用程序都构建和运行在被称为“沙箱”的独立环境。每个沙箱包含一个应用和它的运行时。默认的,这个应用只能访问沙箱里面的内容。要访问用户文件、网络、图形套接字、总线上的子系统和设备必须被显式地授权。访问其它的东西,比如其它进程,是故意被设计成不可能的

一些沙箱的内部资源需要对外暴露,被宿主操作系统使用。这些被称为“导出”,因为它们是从沙箱中导出的文件,包括应用程序的“.desktop”文件和图标

门户#

门户是一种机制,通过它,应用程序可以在沙箱中与宿主环境进行交互。它们提供了与数据、文件和服务交互的能力,这不需要添加沙箱权限

可以通过门户访问的功能示例包括通过文件选择器对话框打开文件或打印。接口工具包可以实现对门户的直接支持,从而实现对沙箱外资源的安全、便捷的访问。

更多关于门户的学习资源可以在 沙箱权限 找到

仓库#

Flatpak应用和运行时通常使用仓库存储和发布,这个仓库和git仓库类似。一个Flatpak仓库可以包含单个或者多个对象,而且每个对象都是版本化的,可以升级和降级。

每个使用Flatpak的系统都可以配置多个远程仓库。一旦一个系统被配置成可以访问某个远程仓库,这个远程仓库的内容就可以被检测和搜索,它也可以被用作应用和运行时的源

执行更新时,应用和runtime会从相关的远程下载。和git一样,只有不同的部分会下载,使得升级过程十分高效。