Snap、Flatpak和AppImage等新的打包格式提供了可在大多数Linux发行版上运行的独立于发行版的软件包。这解决了希望将其应用程序分发到多个Linux发行版上的应用程序开发人员所面临的打包问题。现在,他们可以专注于适用于任何地方的构造,而不是通过不同的包装标准。
本文将从最终用户的角度列出这三种包装格式之间的主要区别。从开发者的角度出发,这里不再讨论包装架构的差异和包装的难易程度。
下表总结了Snap、Flatpak和AppImage文件格式之间的主要区别。其中大部分是不言而喻的,其他点在对照表下面已经说明。
本文将从最终用户的角度列出这三种包装格式之间的主要区别。从开发者的角度出发,这里不再讨论包装架构的差异和包装的难易程度。
下表总结了Snap、Flatpak和AppImage文件格式之间的主要区别。其中大部分是不言而喻的,其他点在对照表下面已经说明。
|
Snap
|
Flatpak
|
AppImage
|
类似 Android 的权限控制切换(GUI 和 CLI)
|
是的
|
是的
|
不
|
沙盒支持
|
是的
|
是的
|
是的
|
沙盒强制
|
是的
|
是的
|
不
|
原生主题支持
|
是(有警告)
|
是(有警告)
|
是(有警告)
|
支持捆绑库
|
是的
|
是的
|
是的
|
应用程序可移植性
|
是(有警告)
|
是(有警告)
|
是的
|
完全包含的单一可执行文件支持(类似于 Windows 中的 .exe 文件)
|
不
|
不
|
是的
|
在线应用商店
|
是的
|
是的
|
是的
|
桌面应用商店软件的插件
|
是的
|
是的
|
不
|
多版本并行应用程序支持
|
是的
|
是的
|
是的
|
自动更新
|
是的
|
是的
|
是(有警告)
|
Chrome 操作系统支持(通过 Crostini 容器)
|
是的
|
是的
|
是的
|
应用程序大小
|
高于 AppImage
|
高于 AppImage
|
最低
|
App Store 中可用的应用程序数量
|
最高
|
最低
|
一般
|
用户权限控制
Snap 为用户控制权限提供图形和命令行界面。您可以使用预装的“Ubuntu Software”应用来管理快照应用的权限。


要使用命令行界面查看快照应用程序的权限,请运行以下命令:
$ snap connections chromium
将“chromium”替换为你查询的snap应用程序的名称。

要查看所有已安装snap应用的列表,请运行以下命令:
$ snap list
要向chromium snap授予相机权限,请使用以下命令:
$ snap connect chromium:camera
要撤消相机权限,请运行以下命令:
$ snap disconnect chromium:camera
在“Plug”列中可以找到相应的权限管理命令(如上面的屏幕截图所示)。
Flatpak还提供了授予和撤销权限的接口。您可以使用GNOME软件应用程序(需要GNOME 3.32.x)使用图形化方法管理权限。要查看flatpak应用程序的权限,请运行以下命令:
flatpak info --show-permissions org.kde.Platform
将“org.kde.Platform”替换为你要查询的Flatpak应用程序的名称。
要查看系统上安装的所有flatpak应用程序的列表,请运行以下命令:
$ flatpak list
要更改flatpak应用程序的权限,必须更改上面屏幕截图中显示的变量值。例如,下面的命令将使整个文件系统可用于flatpak应用程序:
$ sudo flatpak override org.kde.Platform --filesystem=host
AppImage目前不支持细粒度权限控制,但开发人员暗示,未来可能会实施Android风格的权限控制。
沙盒
Snap、Flatpak 和 AppImage 支持开箱即用的沙盒应用环境。沙盒是一个完全独立于主机系统的环境(或容器/文件系统/存档)。与主机系统的任何交互都是使用有限的 API 和权限控制来完成的。其中一些权限明确要求用户选择加入,或者可以由最终用户完全禁用。沙盒应用程序比任何其他可以完全访问主机系统的应用程序都安全。所有 Android 应用程序都在沙盒中运行,这三种打包格式的工作原理相似。
原生主题支持
所有三种打包格式都支持 GTK 和 Qt 应用程序的原生外观,尽管有一些限制。例如,Snap 和 Flatpak 要求系统主题以各自的格式打包。如果您使用第三方主题和图标包,您可能无法获得正确的主题、光标和应用程序图标。集成已经改进了超时,但与从发行版的官方包管理器安装的应用程序相比,它们略有不足。
应用程序可移植性
AppImage 应用程序是单个可执行文件(类似于 Windows 的 .exe 文件)。您可以轻松地在系统之间共享它或上传到云端。Snap 和 Flatpak 应用程序可以通过包含应用程序本身以及应用程序所依赖的子存储库来实现便携。但是,该过程并不像 AppImage 那样简单,需要使用多个命令才能获得相同的结果。
自动更新
Snap 和 Flatpak 应用程序是从集中式应用程序存储库安装的,并且应用程序可以自动更新而无需用户干预。AppImage 缺乏强大的自动更新机制。用户必须手动下载新的 AppImage 二进制文件并替换现有的二进制文件才能安装更新。AppImage 应用程序维护者有时会包含他们自己的更新机制,该机制会定期检查其服务器上的更新可用性或需要用户干预。最近,AppImage 开发人员提供了一个工具,通过提供增量更新来更新现有的二进制文件。但是,它仍然需要下载更新工具并手动将其与现有的 AppImage 二进制文件一起使用。AppImage 尚无可用的免提更新机制。
应用程序大小
AppImage 具有最小的应用程序大小,很可能是因为它以压缩格式提供二进制文件。Snap 和 Flatpak 应用程序的大小因应用程序而异,很难确定哪个提供的安装大小更小。仅供参考,在撰写本文时,Inkscape AppImage 约为 98 MB,Snap 约为 183 MB,Flatpak 约为 109 MB。
结论
通用应用程序包对于开发人员和最终用户来说都是双赢的局面。这些打包格式允许更快地交付安全应用程序。它们还为由于不同发行版中使用的不同打包标准而一直回避 Linux 的开发人员打开了大门。这三种包装形式有一些问题需要解决。但是,它们都在积极开发中,这些问题将加班修复。通用交叉分发包是未来,它们的采用将会增加。除了操作系统运行所需的核心库和基本软件包之外,未来的发行版可能会缓慢而稳定地转向 Snap、Flatpak 或 AppImage 构建。