![snaps、appimage、flatpak 和其他之间有什么区别?](https://linux22.com/image/1144082/snaps%E3%80%81appimage%E3%80%81flatpak%20%E5%92%8C%E5%85%B6%E4%BB%96%E4%B9%8B%E9%97%B4%E6%9C%89%E4%BB%80%E4%B9%88%E5%8C%BA%E5%88%AB%EF%BC%9F.png)
最近,学生们向我提出了这个问题,尽管我有很多信息可以提供,但我还没有找到一个可以向人们提供最新答案的来源(我发现了很多错误信息和过时的信息)。因此,对于 snap、appimage、flatpak 等通用打包系统演变过程中的打包格式,我有一些疑问:
- 谁创建了包装格式?
- 它提供什么功能?
- 它有哪些独特的功能?(其他人还没有的)
- 谁支持它?
- 哪些发行版使用它?
- 这个软件包的重点是什么?(针对桌面、云、移动设备等)
- 哪些发展更为活跃?
答案1
以下是 AppImage、Snap 和 Flatpak 功能的长表格比较。它来自GitHub 上的 AppImage Wiki:
请注意,尽管此比较试图公平地代表每个项目,但它主要从 AppImage 的角度进行。
一般的
特征 | 应用图像 | 折断 | 扁平包装 |
---|---|---|---|
打包桌面 GUI 应用程序 | ✅ 是的 | ✅ 是的 | ✅ 是的 |
封装终端 CLI 工具 | ✅ 是的 | ✅ 是的 | ✅ 是(如果你编辑 PATH,则带有 App ID 别名)[1] |
包服务器进程 | ✅ 是的 | ✅ 是的 | ⚠️ 可能但不是主要目标 [1] |
包系统服务 | ❌ 没有 | ✅是的[1] | ❌ 没有 |
打包内核 | ❌ 没有 | ✅是的[1] | ❌ 没有 |
正确的应用程序主题 | ✅ 是的(如果操作正确) | ✅ 是的(如果当前系统主题已被捕捉)[1] | ✅ 是的(如果当前系统主题已经是 Flatpak 版)[1][2][3] |
使用库和依赖项 | 来自基础系统或与 appimage 捆绑 | 从基础系统开始,基本快照、平台快照(桌面环境,GNOME,葡萄酒, ..) 或与 Snap 捆绑 | 来自 Freedesktop、GNOME、KDE 主要运行时或与 Flatpak 捆绑 |
企业支持 | ❌ 否(社区项目) | ✅ 是的(规范) | ✅ 是(Endless,红帽) |
采用
特征 | 应用图像 | 折断 | 扁平包装 |
---|---|---|---|
主商店中的应用程序数量 | 1126 (2020-08-14 [1]历史) | +6400 (2020-08-06 [1]) | ~1100 (2020-08-14) |
采用该格式的品牌商业应用程序供应商 | Adobe,IBM,柯达,微软,普鲁萨,终极制造者,... | 微软,Spotify,松弛,JetBrains,Skype,节点源,... | Xamarin、Codethink、Igalia、...... |
内置于第三方应用程序开发工具 | electron-builder | electron-builder,GNOME Builder | GNOME 构建器 |
可用性
应用图像
从网站下载,然后将文件管理器中的单个文件拖放到所需的安装位置。
折断
通过分发应用商店安装(Ubuntu、Zorin OS、KDE Neon 等开箱即用)或通过 CLI 安装:
$ snap install gimp
扁平包装
通过分发应用商店安装(Fedora、EndlessOS 等开箱即用)或通过 CLI 安装:
$ flatpak install --user flathub org.gimp.GIMP
沙盒/限制
特征 | 应用图像 | 折断 | 扁平包装 |
---|---|---|---|
无需沙盒即可运行 | ✅ 是的(不是必需的。包装商可选择是否这么做。) | ✅ 是的(如果 snap 被建造并且被批准使用‘经典’限制)[1][2] | ❌否(通过设计限制应用程序访问) |
可与不同的沙箱一起使用 | ✅ 是的(例如火狱[1], AppArmor [2],泡沫包装) | ❌ 否(与应用装甲) | ❌ 否(与泡沫包装) |
应用程序安装/执行
特征 | 应用图像 | 折断 | 扁平包装 |
---|---|---|---|
无需安装即可运行 | ✅ 是(设置可执行位后) | ❌ 否(需要通过 snapd 安装) | ❌ 否(需要通过 Flatpak 客户端工具安装) |
无需root权限即可运行 | ✅ 是的 | ⚠️ 仅在安装后 | ⚠️ 仅在安装后 |
从压缩源运行,无需解压 | ✅ 是的 | ✅ 是的 | ❌ 没有 |
应用程序作者可以将可下载文件放在 .exe (Windows) 和 .dmg (macOS) 旁边,用户可以在离线系统上安装这些文件 | ✅ 是的(.appimage - 包含在离线系统上运行应用程序所需的一切) | ❌ 否(.snap - 需要安装 snapd,并且如果需要额外的 snap,系统必须在线) | ❌ 否(.flatpakref 文件需要互联网,.flatpak 包需要安装运行时) |
允许应用程序作者自行托管应用程序且不会造成任何功能损失 | ✅ 是的 | ❌ 没有 | ✅是的[1] |
适合/优化了隔离(离线)机器(如 Ed Snowden 使用的机器) | ✅ 是的 | ✅ 是的(您可以离线侧载应用程序和更新) | ✅ 是的(P2P 支持允许离线安装和更新) |
可以从非标准位置(例如网络共享、CD-ROM 等)存储和运行应用程序。 | ✅ 是的 | 待定 | ✅是(需要配置)[1] |
应用程序分发
特征 | 应用图像 | 折断 | 扁平包装 |
---|---|---|---|
中央回购/目录 | 应用图像中心 | Snap 商店 | 扁平中心 |
完全去中心化,无需中央把关 | ✅ 是的 | ❌ 没有 (只有一家占主导地位的应用商店) [1] | ✅ 是的 |
个人应用程序存储库 | ❌ 否(未存储在存储库中) | ❌ 否(每个设备只能有一个 repo) | ✅ 是的 |
可以并行有多个版本(包括历史版本) | ✅ 是的(任意版本数量不限) | ✅ 是 (每个频道一个) | ✅ 是的(OSTree 中任何可用版本都可以并行安装) |
应用程序安装后,仍然可以轻松复制到另一台机器(例如,在本地与朋友共享) | ✅ 是的(一个应用程序=一个文件;没有“安装”,因此应用程序始终保持相同的形式) | ✅ 是的(但也需要复制快照,具体取决于) | ✅ 是的(您可以用来flatpak create-usb 复制到 USB 驱动器) |
应用程序更新
特征 | 应用图像 | 折断 | 扁平包装 |
---|---|---|---|
更新机制 | 应用程序图像更新 | 来自 Repo | 来自 Repo |
二进制增量更新 | ✅ 是的(使用 zsync 无需提前生成增量) | ✅ 是的(仅当使用需要生成增量的私有服务器端服务时) | ✅ 是的(使用 OSTree 提供原子更新) |
应用程序可以自我更新 | ✅是的(使用嵌入信息) | ✅ 是的 | ✅ 是的 |
Linux 发行版支持
特征 | 应用图像 | 折断 | 扁平包装 |
---|---|---|---|
最早支持的 Ubuntu | Ubuntu 10.04 | Ubuntu 14.04 | Ubuntu 16.04 |
最早支持的 OpenSUSE | OpenSUSE 11.3 | 飞跃 42.2 | 飞跃 42.1 |
最早支持的 Fedora | Fedora 12 | Fedora 24 | Fedora 23 |
最早支持的 Debian | Debian 6 | Debian 9 | Debian 9 |
最早支持的 CentOS | CentOS 6 | CentOS 7.6 | CentOS 7 |
开箱即可在 Ubuntu 上运行 | ✅ 是的 | ✅ 是的 | ❌ 没有 |
开箱即可在 OpenSUSE 上运行 | ✅ 是的 | ❌ 没有 | 待定 |
开箱即用 | ✅ 是的 | ❌ 没有 | ✅ 是的 |
开箱即可在 Debian 上运行 | ✅ 是的 | ❌ 没有 | 待定 |
开箱即可在 CentOS 上运行 | ✅ 是的 | ❌ 没有 | ✅ 是的 |
实时系统(例如实时 ISO、实时 USB、实时 CD、实时网络启动) | ✅ 完整 | ⚠️ 部分(从 18.04 开始,但受到内核限制,并且根据 Canonical 开发人员的说法,“使用起来很麻烦,我们几乎不花时间处理它”) | ⚠️部分的(必须重新启动会话才能恢复导出) |
可以在 Chrome OS(Crostini)上运行 | ✅ 是(Chrome OS 73) | ✅ 是(Chrome OS 73) | ✅ 是的 |
目标和治理
特征 | 应用图像 | 折断 | 扁平包装 |
---|---|---|---|
独立于任何特定分销商 | ✅ 是的(社区项目) | ❌ 否(Canonical 的倡议) | ✅是的(社区项目) |
不受任何公司商业案例的支配 | ✅ 是的 | ❌ 否(这是 Canonical 业务的核心) | ❌ 没有 |
旨在减少发行版作为中央守门人对桌面 Linux 生态系统的影响 | ✅ 是的 | ❌ 没有 | ✅是的(每个人都可以托管自己的 repo) |
旨在增强应用程序开发人员和最终用户的能力 | ✅ 是的 | ✅是的[1] | ✅是的[1] |
致力于统一桌面 Linux 平台,而不是继续将用户群分裂到不同的发行生态系统中 | ✅ 是的(通过指出核心问题需要共同解决的问题) | ❌ 否(实际上是将另一个发行版的基本快照放置在底层发行版之上) | ❌ 否(实际上将 Yocto 发行版置于任何底层发行版之上) |
应用程序大小
特征 | 应用图像 | 折断 | 扁平包装 | |
---|---|---|---|---|
磁盘上的应用程序存储始终保持压缩状态 | ✅ 是的 | ✅ 是的 | ❌ 否(服务器端已压缩,客户端未压缩)[1] | |
应用程序比“传统安装”的应用程序占用更少的磁盘空间 | ✅ 是的 | ✅ 是的 | 待定 | |
例子:LibreOffice 下载大小(来源) | ~248MB | 463 MB [2020 年 7 月更新] | 543兆字节 | |
下载之前,准确了解要下载并存储在磁盘上的大小 | ✅ 是的(一个应用程序 = 一个文件) | ❌ 否 [不考虑平台快照]1]] | ❌由于重复数据删除,只能估计最坏情况 |
执行速度
特征 | 应用图像 | 折断 | 扁平包装 |
---|---|---|---|
LibreOffice 启动时间(来源) | 3 秒 | 13 秒 | 7 秒 |
封装格式
特征 | 应用图像 | 折断 | 扁平包装 |
---|---|---|---|
文件格式通过官方标准机构标准化 | ❌ 没有(但是一旦格式稳定下来,我会对此感兴趣) | ✅ 是(由 Snap 格式 TOB 创建[1]) | ❌ 否(尽管存在实验性的 OCI 支持) |
概念灵感来自 | macOS .app里面.dmg(追溯到 NeXT);Rox AppDir | 点击(Ubuntu Touch 软件包) | 点击(AppImage 的前身) |
项目代码库
答案2
Snap由 Canonical 为 Ubuntu 创建。Snap 的主要优点包括:
- 独立于依赖项 - 所有库和依赖项都包含在包中。这也允许拥有同一程序的多个版本。
- 沙盒 - snap 使用修改后的 AppArmor 对应用程序进行沙盒处理
- 增量更新 - snap 包也应该允许增量更新
snap 的主要缺点是软件只能使用软件包中包含的库。这是一个潜在的安全风险,因为软件包的作者需要对所有库进行修补和更新。
Snap 目前可以在 Ubuntu、Arch Linux、Fedora、Linux Mint、CentOS 和 Gentoo 中运行。它们也用于 Ubuntu Touch。它们专为台式机、服务器、手机、物联网和路由器而设计。
扁平包装具有与 snap 相同的优势。但是,它使用命名空间而不是 AppArmour 进行沙盒处理。主要区别在于 Flatpak 既可以使用软件包中包含的库,也可以使用来自另一个 Flatpak 的共享库。
Flatpak 的开发者是 Red Hat 员工 Alexander Larsson。Flatpak 软件目前可用于 Arch Linux、Debian、Fedora、Mageia、Solus 和 Ubuntu。它仅专注于桌面。
应用图片由 Simon Peter 开发。与 snaps 或 Flatpak 一样,该软件包包含运行程序所需的所有库。AppImage 程序没有沙盒,并且不需要 root 权限即可运行。根据该项目的网站,AppImages 应该可以在 Arch Linux、Centos、Debian、Fedora、OpenSUSE、Red Hat Linux 和 Ubuntu 上运行。
答案3
答案4
如果您运行多个 flatpak,文件系统将无法正常工作。例如,如果我打开 Openscad 和 Flashprint,我可以从 Openscad 写入磁盘,但不能从 Flashprint 写入。在 Snap 中似乎没有问题。