Snap for Linux 的目的是什么?

Lee*_*ian 9 package-management snap

当我第一次切换到 Linux 时,我喜欢它的一件事是它的包管理。有一些项目将 Linux 风格的包管理引入 Mac (Homebrew) 和 Windows (Chocolatey)。

我越来越多地看到为 Linux 提供 Snap 安装说明的应用程序,但是添加第二个包管理系统的目的是什么?新的应用程序最终会迁移到 Apt(或其他 Linux 包管理系统),还是 Linux 用户必须在同一系统上运行两个不同的包管理器才能获得他们想要的所有应用程序?

kyr*_*ofa 13

Linux 上的传统包管理有很多优点。依赖关系可以共享,这使得事情变得小而高效。他们通常会通过某种委员会,因此需要几眼(这在 Linux 发行版之间有所不同,有些比其他的流程少)。通常也有一个记录错误的中心位置。

然而,传统的包管理有一些缺点。

例如,当您发布新版本的 libfoo 时,实际上每个使用该发行版的人都会获得该新版本。这意味着分发维护人员在发布更新时必须非常保守。他们不能倒退。

此外,很少看到应用程序的上游开发人员为各种 Linux 发行版打包他们的应用程序。尤其是当他们意识到他们将无法像预期的那样轻松地发布更新时。例如,在 Ubuntu 上,一旦稳定版本被削减,新功能通常不允许添加到发行版中的软件中。只有安全修复和错误修复。而且,即使这个过程是沉重的。这就是 Ubuntu 保持稳定的方式,但这也是 Ubuntu 存档在发行版的整个生命周期中变得陈旧的方式。

另一个问题(这是不利还是有利,取决于您如何看待它):通常为了使软件进入 Linux 发行版,它必须是开源的。并非一切都是。

快照在几个方面有所不同。首先,它们的依赖被捆绑到同一个包中。这意味着它们不能被共享,所以它们不如传统包那么有效,但这样做的原因是为了解决我刚刚提供的 libfoo 示例:它使 snap 开发人员可以自由地更改他们认为合适的内容不会破坏不相关的软件。因此,它们可以完全从 Linux 发行版中分发出去,无需任何委员会参与。事实上,看到应用程序的上游开发人员为其应用程序创建和维护快照是很常见的,因为他们知道他们可以随时向用户发送更新,如果他们破坏了某些东西,他们只会破坏他们的用户,他们的 libfoo 损坏还不到发行版的一半。

快照也只是包含...东西的 squashfs 图像。没有许可限制。这使得微软可以快速发布 Skype,或者 Spotify 发布他们的播放器。

由于它们捆绑了依赖项并且只是一个 squashfs 映像,因此可以很容易地在任何 Linux 发行版上安装和运行它们,而不管该发行版的内置包管理系统如何。

新的应用程序最终会迁移到 Apt(或其他 Linux 包管理系统),还是 Linux 用户必须运行两个不同的包管理器才能获得他们想要的所有应用程序?

是的,传统的依赖管理系统不会消失。随着时间的推移,新软件将通过 apt 提供。但这将继续由只想要 apt 软件的社区成员完成,而不是由上游开发人员自己完成。并且根据您的 Linux 发行版的工作方式,该软件可能会随着时间的推移变得陈旧,直到您升级到下一个。一般来说,如果你想要最新的东西,你需要从上游开发者那里得到。正如您所注意到的,他们似乎越来越多地选择快照来做到这一点。PPA(或类似的)是另一种选择。

无论如何,这并不是一个完整的利弊列表,我们可以在这里讨论更多。我只是想指出,每种使用软件的方式都有其目的,而且都不会消失。


Ale*_*ski 6

这个答案非常有偏见并包含意见 - 我是一些 Linux 发行版的打包人员。

正如 Linus Torvalds 所说,Linux 的一个缺点是你不能“为 Linux”编译包(或应用程序);您为 Debian/Ubuntu/Fedora/Suse/RHEL/Arch/Manjaro 等执行此操作。

snap、flatpak 和 AppImage 等项目是打包应用程序的格式,因此它们应该可以在任何 Linux 发行版上运行。这主要是通过包含运行时环境或通过静态编译来完成的。

像 Chromium 这样的大包通常会看到这些格式的更多好处,因为它们很难编译。