snaps、appimage、flatpak 等有什么区别?

Lui*_*ado 169 snap appimage flatpak

我最近从学生那里收到了这个问题,虽然我有很多信息要提供,但我还没有找到可以将人们指向哪里可以阅读更新答案的来源(我发现了很多错误信息和过时的信息)。因此,在通用包装系统的这种演变中,我对诸如 snap、appimage、flatpak 等包装格式的一些问题是:

  • 谁创建了包格式?
  • 它提供哪些功能?
  • 它有哪些独特之处?(其他人还没有)
  • 谁支持它?
  • 哪些发行版使用它?
  • 包有什么重点?(适用于桌面、云、移动等。)
  • 哪些发展更积极?

Kur*_*fle 123

这是 AppImage 与 Snap 与 Flatpak 功能的长表格比较。它来自GitHub 上AppImage Wiki

注意,这个比较主要是从 AppImage 的角度来看的,虽然它试图公平地代表每个项目。

一般的

特征 应用图片 折断 平板包装
打包桌面 GUI 应用程序 ? 是的 ? 是的 ? 是的
打包终端 CLI 工具 ? 是的 ? 是的 ? 是(如果您编辑路径,则带有 App ID 别名)[ 1 ]
包服务器进程 ? 是的 ? 是的 ?? 可能但不是主要目标 [ 1 ]
套餐系统服务 :x: 没有 ? 是 [ 1 ] :x: 没有
包内核 :x: 没有 ? 是 [ 1 ] :x: 没有
正确的应用程序主题 ? 是(如果操作正确) ? 是(如果当前系统主题已被捕捉)[ 1 ] ? 是(如果当前系统主题已被 Flatpak'ed) [ 1 ] [ 2 ] [ 3 ]
使用库和依赖项 从基本系统或与 appimage 捆绑 从基本系统、基本快照、平台快照(KDEGNOMEWine等)或与 Snap 捆绑 来自 Freedesktop、GNOME、KDE ​​主要运行时或与 Flatpak 捆绑
企业支持 :x: 否(社区项目) ? 是(规范) ? 是(无尽,红帽)

采用

特征 应用图片 折断 平板包装
主店申请数量 1126 (2020-08-14 [ 1 ]历史) +6400 (2020-08-06 [ 1 ]) ~1100 (2020-08-14)
使用该格式的品牌商业应用程序供应商 的AdobeIBMKDAB微软PrusaUltimaker,... 微软SpotifySlackJetBrainsSkypenodesource …… Xamarin、Codethink、Igalia、...
内置于第三方应用程序开发工具中 电子生成器 电子生成器,GNOME 生成器 GNOME 生成器

可用性

AppImage 从站点下载,然后将文件管理器中的单个文件拖放到所需的安装位置。 拖放 通过分发应用商店(在 Ubuntu、Zorin OS、KDE ​​Neon 等上开箱即用)或通过 CLI 进行Snap安装:

$ snap install gimp
Run Code Online (Sandbox Code Playgroud)

Flatpak 通过分发应用商店安装(在 Fedora、EndlessOS 等上开箱即用)或通过 CLI:

$ flatpak install --user flathub org.gimp.GIMP
Run Code Online (Sandbox Code Playgroud)

沙盒/禁闭

特征 应用图片 折断 平板包装
无需沙箱即可运行 ? 是(不是必需的。打包者可选。) ? 是(如果 snap 已构建并批准使用“经典”限制)[ 1 ][ 2 ] :x: 否(按设计限制应用程序访问)
可以与不同的沙箱一起使用 ? 是(例如Firejail [ 1 ]、AppArmor [ 2 ]、Bubblewrap :x: 否(与AppArmor紧密耦合) :x: 否(与Bubblewrap紧密耦合)

应用程序安装/执行

特征 应用图片 折断 平板包装
无需安装即可运行 ? 是(设置可执行位后) :x: 否(需要通过 snapd 安装) :x: 否(需要通过 Flatpak 客户端工具安装)
无需root权限即可运行 ? 是的 ?? 仅在安装后 ?? 仅在安装后
从压缩源运行而不是解压 ? 是的 ? 是的 :x: 没有
应用程序作者可以将可下载文件放在 .exe (Windows) 和 .dmg (macOS) 旁边,用户可以在离线系统上安装这些文件 ? 是(.appimage - 包含在离线系统上运行应用程序所需的所有内容) :x: 否(.snap - 需要安装 snapd,如果需要额外的 snap,系统必须在线) :x: 否(.flatpakref 文件需要 Internet,.flatpak 包需要安装运行时)
允许应用程序作者在不丢失功能的情况下自托管应用程序 ? 是的 :x: 没有 ? 是 [ 1 ]
适用于/优化气隙(离线)机器(埃德斯诺登使用的那种) ? 是的 ? 是(您可以离线加载应用程序和更新) ? 是(P2P 支持允许离线安装和更新)
可以从网络共享、CD-ROM 等非标准位置存储和运行应用程序。 ? 是的 待定 ? 是(需要配置)[ 1 ]

应用分发

特征 应用图片 折断 平板包装
中央回购/目录 应用图像中心 快照商店 平面枢纽
完全去中心化,没有中央看门人 ? 是的 :x: 没有(一个占主导地位的应用商店)[ 1 ] ? 是的
个人应用程序存储库 :x: 否(不存储在存储库中) :x: 否(每个设备只能有一个 repo) ? 是的
可以有多个版本并行(包括历史版本) ? 是(无限数量的任意版本) ? 是(每个通道一个) ? 是(OSTree 中可用的任何版本都可以并行安装)
应用程序安装后,仍可以轻松复制到另一台机器(例如,与本地朋友分享) ? 是(一个应用程序=一个文件;没有“安装”,因此应用程序始终处于相同的形式) ? 是(但也需要复制它所依赖的快照) ? 是(您可以flatpak create-usb用来复制到 U 盘)

应用程序更新

特征 应用图片 折断 平板包装
更新机制 应用图像更新 从回购 从回购
二进制增量更新 ? 是(使用 zsync 无需提前生成增量) ? 是(仅当使用需要生成增量的私有服务器端服务时) ? 是(使用 OSTree 提供原子更新)
应用程序可以自我更新 ? 是(使用嵌入信息 ? 是的 ? 是的

Linux 发行版支持

特征 应用图片 折断 平板包装
最早支持的 Ubuntu Ubuntu 10.04 Ubuntu 14.04 Ubuntu 16.04
最早支持的 OpenSUSE OpenSUSE 11.3 飞跃 42.2 飞跃 42.1
最早支持的 Fedora 软呢帽 12 软呢帽 24 软呢帽 23
最早支持的 Debian Debian 6 Debian 9 Debian 9
最早支持的 CentOS CentOS 6 CentOS 7.6 CentOS 7
在 Ubuntu 上开箱即用 ? 是的 ? 是的 :x: 没有
开箱即用地在 OpenSUSE 上运行 ? 是的 :x: 没有 待定
在 Fedora 上开箱即用 ? 是的 :x: 没有 ? 是的
在 Debian 上开箱即用 ? 是的 :x: 没有 待定
在 CentOS 上开箱即用 ? 是的 :x: 没有 ? 是的
Live 系统(例如 Live ISO、Live USB、Live CD、Live 网络启动) ? 满的 ?? 部分(从 18.04 开始,但它受到内核限制和“使用起来很痛苦,我们几乎花在它上面的时间几乎为零”,根据 Canonical 开发人员的说法) ?? 部分(必须重新启动会话才能提取导出)
可以在 Chrome OS (Crostini) 上运行 ? 是(Chrome 操作系统 73) ? 是(Chrome 操作系统 73) ? 是的

目标和治理

特征 应用图片 折断 平板包装
独立于任何特定的分销商 ? 是(社区项目) :x: 否(规范倡议) ? 是(一个社区项目
与任何主导公司的商业案例无关 ? 是的 :x: 否(Canonical 业务的核心) :x: 没有
作为中央守门人,旨在减少发行版对桌面 Linux 生态系统的影响 ? 是的 :x: 没有 ? 是(每个人都可以托管他/她自己的仓库
旨在增强应用程序开发人员和最终用户的能力 ? 是的 ? 是 [ 1 ] ? 是 [ 1 ]
努力统一桌面 Linux 平台,而不是继续将用户群划分为不同的分发生态系统 ? 是(通过指出需要一起解决的核心问题 :x: 否(有效地将另一个发行版的基本快照放在基础发行版上) :x: 否(有效地将 Yocto 分布置于任何基础分布之上)

应用规模

特征 应用图片 折断 平板包装
磁盘上的应用程序存储始终保持压缩状态 ? 是的 ? 是的 :x: 否(服务器端被压缩,客户端不是)[ 1 ]
应用程序使用的磁盘空间比“传统安装”的要少得多 ? 是的 ? 是的 待定
示例: LibreOffice 下载大小(来源 ~248 兆字节 463 MB [2020 年 7 月更新] 543 兆字节
在下载之前,确切知道要下载并存储在磁盘上的大小 ? 是(一个应用程序 = 一个文件) :x: 否 [不考虑平台快照 [ 1 ]] :x:由于重复数据删除,只能估计最坏的情况

执行速度

特征 应用图片 折断 平板包装
LibreOffice 开始时间(来源 3 秒 13 秒 7 秒

封装格式

特征 应用图片 折断 平板包装
文件格式通过官方标准机构标准化 :x: 不(但一旦格式稳定就对它感兴趣) ? 是(由 Snap 格式 TOB[ 1 ] 创建) :x: 否(尽管存在实验性 OCI 支持)
概念上的灵感来自 MACOS。应用程序的.dmg(追溯NEXT); Rox 应用程序目录 单击(Ubuntu Touch 软件包) klik(AppImage 的原名)

项目代码库

特征 应用图片 折断 平板包装
贡献者不需要签署 CLA ? 是的 :x: 没有 ? 是的
发展至今 2004(当时称为klik 2010(前身称为 Click Packages) 2013(前身称为Glick Glick2xdg-app

  • 我认为值得指出的是,这张图表是从 AppImage 的角度构建的。意思是,默认的功能集是 AppImage 的功能集,其他的都是与它的功能进行比较的。这给 AppImage 带来了偏见。它也有些过时了。例如,Snap 在今年秋天增加了主题支持。 (71认同)
  • 我不确定你怎么能说@Kurt。以“目标”部分为例。它只显示了 AppImage 的目标,就好像其他项目都没有任何目标一样。好像只有 AppImage 的目标才重要。 (16认同)
  • 我明白你的意思 - 我可以编辑维基。但是,您的答案是一个巨大的图像,即使维基发生变化,它也可能永远保持原样。我认为在您对未来 Ask Ubuntu 读者的回答中,这种偏见值得一提。 (10认同)
  • 这里缺少的是 Flatpaks 和 Snaps 存在的根本原因,尽管 AppImage 早就存在了。使用 AppImages,开发人员可以确保应用程序在所有条件下都能正常工作。使用 Flatpaks(我相信还有 Snaps),有一些底层运行时可以反映开发人员机器的状态,确保应用程序在具有不同设置的发行版上运行。 (6认同)
  • @Dan:我在 7 月 4 日编辑了答案,以插入网站截图的更新版本(正是为了包括发生在 wiki 上的一些修改)。您在编辑原始 Wiki,创建新屏幕截图,然后使用新屏幕截图建议修改此答案时的问题在哪里? (3认同)

小智 77

Snaps是由 Canonical 为 Ubuntu 创建的。快照的主要优点是:

  • 依赖项的独立性 - 所有库和依赖项都包含在包中。这也允许具有相同程序的更多版本。
  • 沙盒 - snaps 使用修改后的 AppArmor 来沙盒应用程序
  • 增量更新 - 快照也应该允许增量更新

snap 的主要缺点是软件只能使用其包中包含的库。这是一个潜在的安全风险,因为包的作者需要对所有库进行修补和更新。

Snaps 目前可以在 Ubuntu、Arch Linux、Fedora、Linux Mint、CentOS 和 Gentoo 中运行。它们也用于 Ubuntu Touch。它们专为台式机、服务器、电话、物联网和路由器而设计。

Flatpak具有与 snap 相同的优点。但是,它使用命名空间而不是 AppArmour 进行沙盒处理。主要区别在于 Flatpak 既可以使用包中包含的库,也可以使用来自另一个 Flatpak 的共享库。

Flatpak 的开发者是 Red Hat 员工 Alexander Larsson。Flatpak 软件目前可用于 Arch Linux、Debian、Fedora、Mageia、Solus 和 Ubuntu。它仅专注于台式机。

AppImages由 Simon Peter 开发。与 snaps 或 Flatpak 一样,该包包含运行程序所需的所有库。AppImage 程序不是沙盒程序,它们不需要 root 权限即可运行。根据该项目的网站,AppImages 应该可以在 Arch Linux、Centos、Debian、Fedora、OpenSUSE、Red Hat Linux 和 Ubuntu 上运行。

  • 他们都应该建立在 appimage 之上。而不是重新发明相同的意识形态并引入碎片化和混乱。另请注意,由于这些可移植包包含所有库,因此与使用通过 apt 或 .deb 安装的共享库的应用程序相比,它们的大小会大得多。如果您必须知道哪个更受欢迎,flatpak 目前正在击败 snaps。 (13认同)
  • @answerSeeker:您对便携式软件包的评论*“与使用通过 apt 或 .deb 安装的共享库的应用程序相比,体积要大得多”* 不一定得到现实生活事实的支持。AppImages 和 Snaps 被压缩成 SquashFS 图像(对于 Flatpak 不是这样)。它们永远不会提取到磁盘上,甚至在运行时也不提取。AppImages,在运行时,自我安装到一个临时创建的挂载点 *`/tmp/.mount_<random-chars>`* 并从那里运行——仍然是压缩的!请参阅下面我的答案截图中 LibreOffice 示例的数字... (4认同)
  • Solus 已于 2017 年 1 月宣布 [支持 flatpak](https://itsfoss.com/solus-flatpak-package/) (3认同)
  • @PabloBianchi:较新的 AppImages(较新的 *'type 2'* 品种)可以具有内置更新机制。这将从原始 AppImage 位置下载二进制增量差异,节省下载大小和时间,一旦有新版本可用并且在用户表示他/她想要它之后。工具 [*`appimageupdatetool`* (CLI) 和 *`AppImageUpdate-Qt`* (GUI)](https://github.com/AppImage/AppImageUpdate/releases) 对此有所帮助。 (3认同)
  • flatpack 实际上是在 snap 之前几个月推出的,对于那些想知道是谁发明了什么的人来说。看起来它们是出于不同的原因同时发明的。Flatpack 不是一项新技术,我的团队在 00 年代使用相同的技术(命名空间)实现了类似的东西,但我无法让管理层将其开源,因此公司死了。命名空间无处不在,snap 依赖于 AppArmor 很难转移到其他发行版。 (2认同)

pkt*_*iuk 15

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

VLC

VLC

自由办公室 在此处输入图片说明

金普

在此处输入图片说明

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

  • 如果刻度是统一的,这将更容易阅读。 (5认同)
  • 加上一个结论也很好。 (4认同)

小智 12

不要忘记主要的事情,它是开源的吗?

应用图片

开源客户端?是
开源服务器?是的

折断

开源客户端?是
开源服务器?不

平板包装

开源客户端?是
开源服务器?是的