举个例子,在我的系统上apt-get
安装 IDE geany 需要下载 3.5 MB,而 snap 的下载大小为 100 MB。这太大了,让人无法接受!即使是 geany 的 Windows 安装程序也不超过 15.4 MB!
软件使用的哪些库包含在其 snap 文件中?操作系统上假定已经存在哪些库?snap 文件是否包含所有必需的库?如果是,为什么?我认为没有理由在系统上存在每个特定版本的库(例如 GTK)的多个副本。
也许我对 snap 系统了解不够。也许每个 snap 的下载大小取决于已安装的 snap。例如,如果 snap 安装的另一个应用程序使用相同版本的 GTK,geany 的 snap 安装下载大小将小于 100 MB。
答案1
我认为您已经回答了自己的问题。Snap 体积庞大,因为它们还包含一些依赖项,因此是“自包含”的应用程序。有利有弊。
系统上需要多个库实例的原因是因为可能需要不同的版本,尤其是在运行较旧的应用程序时。我认为对于使用最新依赖项的较新应用程序来说,这很少会成为问题。
如果您没有依赖问题,则没有真正理由使用 snap - 对于服务器来说尤其如此。就我个人而言,我没有理由安装 snap 而不是 apt 包(也是因为我尝试的 snap 没有维护,因此功能不如相应的 apt 包)。
答案2
正确的,Snap比常规软件包要庞大得多,因为它们是分发和安装应用程序的另一种方式,通过将其所有依赖项包含在自身中而实现自包含。
Snap 的优点:
- 始终包含开发人员想要的正确版本依赖关系 - 这可以避免 Linux 上未维护的应用程序中尤其常见的依赖问题。
- 在电脑上以独立的方式运行,在某些情况下,这是更好的安全性
- 在后台自动更新
- 适用于任何 Linux 发行版
- 对新用户来说很友好
Snap 的缺点:
- 由于捆绑所有特定软件包而不是重复使用系统上可能已有的软件包,因此下载和安装的大小更大。
- 一些 Snap 的第三方维护并不好(实际上所有包管理器都是如此,但通常 Snap 的更新可能会晚于单个包,有时由随机的第三方在某个时候停止。一般来说,如果组织使用 Snap 作为主要分发方式,那么拥有强大组织支持的流行成熟应用程序可以很好地与 Snap 配合使用,较新/较小的应用程序则不然)。
- 虽然这些依赖项是开发人员想要的,但可能会经常出现应用程序不会使用的更新、更好的版本。
- 可能需要一些额外的步骤来允许权限(就像类似容器化的 Android 或 Windows Store 应用程序一样)。
- 由 Canonical 集中控制(即只有一个中央 Snap 存储库,没有人可以自己启动。相比之下,Flatpak 是一种没有此限制的替代方案)。对于喜欢只有一个可用商店的简单性的新用户来说,这可能是一个优势。
- 由于运行在自己的容器中,Snap 应用程序有时无法反映当前的操作系统主题和样式。不过,我相信通过安装“common-themes”Snap(将容器化应用程序与当前操作系统主题相匹配)可以部分解决此问题。
我个人使用 Snap 的目的
- 当它是一款由大型组织支持的流行应用时,Snap 会由该组织直接发布。示例:Blender、Inkscape、VLC。 对我个人而言,这一点至关重要:开发人员必须直接且大力支持使用 Snap 作为主要分发方法。
- 当我遇到错误时,通常是由于新版本依赖项中不可预见的变化而导致的。在这种情况下,我会尝试为该应用程序切换到像 Snap 或 Flatpak 这样的自包含包。
在所有其他情况下,我更喜欢 Ubuntu apt 包管理器。
还要注意,在某些情况下,如果 Canonical 认为 Snap 软件包在各方面都比你通过 apt 安装的应用程序版本更好,Ubuntu 将自动安装 Snap,而不会通知您(!)