snaps、appimage、flatpak 和其他之间有什么区别?

snaps、appimage、flatpak 和其他之间有什么区别?

最近,学生们向我提出了这个问题,尽管我有很多信息可以提供,但我还没有找到一个可以向人们提供最新答案的来源(我发现了很多错误信息和过时的信息)。因此,对于 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)
采用该格式的品牌商业应用程序供应商 AdobeIBM柯达微软普鲁萨终极制造者,... 微软Spotify松弛JetBrainsSkype节点源,... 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 的前身)

项目代码库

特征 应用图像 折断 扁平包装
贡献者可以避免签署 CLA ✅ 是的 ❌ 没有 ✅ 是的
自开发以来 2004 年(当时称为点击 2010 年(前身为 Click Packages) 2013 年(前身为格利克 Glick2, 和xdg-应用程序

答案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

我发现这些包装系统的性能(CPU+内存)有有趣的比较。

甚高频液晶

甚高频液晶

自由办公室 在此处输入图片描述

瘸子

在此处输入图片描述

来源: https://verummeum.com/portable-package-formats/

答案4

如果您运行多个 flatpak,文件系统将无法正常工作。例如,如果我打开 Openscad 和 Flashprint,我可以从 Openscad 写入磁盘,但不能从 Flashprint 写入。在 Snap 中似乎没有问题。

相关内容