Flatpak原理

本页面简单介绍了Flatpak内部工作原理。虽然仅仅是使用Flatpak没必要熟悉这些,但是有些人可会会觉得这很有趣。从用户和应用开发者的角度来看,了解Flatpak的体系结构还有助于更好地理解它的工作方式和原因。

应用级Git

Flatpak建立在一种名为`OSTree <https://ostree.readthedocs.io/en/latest/manual/introduction/>`的技术之上,该技术受Git版本控制系统的影响,非常类似Git。与Git一样,OSTree允许跟踪版本化数据并在不同的仓库间分发。不同的是,Git为跟踪源文件设计,OSTree为跟踪二进制文件和其他大数据设计。

在内部,Flatpak的工作方式与Git类似,许多Flatpak概念与Git概念类似。 与Git一样,Flatpak使用仓库来存储数据,并跟踪版本之间的差异。

使用Flatpak,每个应用程序,运行时和扩展都是仓库中的一个分支。 标识符三元组,例如 `` com.company.App/i386/stable `` 是对该分支的引用。 Flatpak构建过程的输出是一个文件目录,它提交给其中一个分支。

使用Flatpak安装应用时,会将其从远程仓库中拉入到本地仓库中的新分支。 然后生成从文件系统指向仓库的链接(这些链接是快速解析和高效利用的磁盘空间`硬链接 <https://en.wikipedia.org/wiki/Hard_link>`)。 换句话说,安装的每个应用程序都存储在本地版本控制仓库中,然后映射到本地文件系统。

因此,版本跟踪是Flatpak架构的核心部分,这使得更新软件非常高效。 版本控制也使回滚成为可能,因此如果需要,可以很容易地回滚到以前的版本。

将应用程序存储在本地OSTree存储库中具有其他优点。 例如,它允许对存储在磁盘上的文件去重,所以属于多个应用程序(或运行时)的同一文件仅存储一次。

基础技术

Flatpak使用了许多已经存在的技术。如: