如果一个软件包既有 deb 版本又有 snap 版本,哪种方法更可取?

当然,对于大多数软件包来说,答案是显而易见的:如果是某个工具或库,deb 是唯一的选择,而对于某些专有软件来说,snap 是唯一的选择。
似乎 Ubuntu 在大力推动和推广 Snap 软件包,引用了在打包、隔离、安全性和更新等方面的优势。然而,所有随 Ubuntu 18.04 一起安装的应用程序都是以 deb 软件包的形式提供的。
一个例子是 Firefox,出于安全原因,这个软件包应该保持最新版本,并且过去曾与发行版软件包维护者就安全性和品牌(Iceweasel)存在冲突。然而,Canonical 选择将 Firefox 作为 deb 软件包提供。
对于既有 snap 又有 deb 的软件包,这就引出了一个问题:应该安装哪个?如果答案是 snap,那么我应该主动迁移已安装的 deb 吗?
6个回答

总的来说,我会建议大多数依赖于系统库的应用程序使用DEB格式。这样做的好处是,如果您出于安全原因更新了该库中的某个组件,则使用该库的所有应用程序都将受益,即使原始应用程序的维护者不知道该漏洞存在。
SNAP在您只想要更新特定应用程序而不想更新整个系统时非常有用。例如,在LTS版本中,但想要拥有特定应用程序的最新版本。 与PPA相比,应用程序必须针对“旧”的系统级库进行编译,在快照中,应用程序带有自己的库。这对维护人员来说更容易,并且如果您碰巧使用了很多PPA,可能会避免陷入依赖地狱。

但这不就是PPA的用途吗(尤其是那些在launchpad.net上的)? - RonJohn
5@RonJohn 是的,但如果你使用ppa,应用程序必须针对“旧”的系统库进行编译。在一个snap中,应用程序自带自己的库。这对维护者来说更容易,并且如果你碰巧使用了很多ppa,也可以避免陷入依赖地狱。 - Bruni
如果你把关于PPA的解释编辑到你的回答中,那将很棒。 - dcorking
2@dcorking 我编辑了答案 - Bruni

Snaps的主要缺点之一是需要更多的空间,因为每个软件都有自己的依赖项,而deb包则在整个系统中使用共享依赖项,对系统影响较小。
当您希望保持系统隔离(例如,与专有二进制文件隔离)或者软件包本身依赖于与您已安装的依赖项不同的依赖项时(例如更高版本的依赖项),Snaps的实用性就体现出来了。

关于额外的空间是正确的,但在今天的世界中,现代计算机有足够的空间来专门用于操作系统、库和应用程序。只有当你处理旧的计算机或者“小型”设备(比如树莓派和物联网设备)时,空间才会成为一个限制因素。 - Paddy Landau
10@PaddyLandau 我完全不同意。我认为那是一个糟糕的观点,并且只会鼓励浪费。 - Steve Lorimer
对我来说,在一个大部分空置的硬盘上利用大量未使用的空间几乎不算是“浪费”。而对你来说,却是。我们只能各持己见。读者们可以自行决定采取哪种方法。 - Paddy Landau
10@PaddyLandau 我完全不同意。我经常使用一个小的固态硬盘来存储系统,再用一个大的机械硬盘来存储数据。我无法理解为什么要浪费钱去复制文件。 - Daniele Gamba
11@PaddyLandau 在当今世界,我们拥有存储空间较小的移动设备,甚至还有存储空间更小的物联网设备,我们还有带有操作系统的固态硬盘以实现快速启动等等。将所有东西归为一类并认为浪费是可以接受的,在我看来,这是一个错误的观点。无论如何,正如你所说,我们将不得不保持不同意见。 - Steve Lorimer
@SteveLorimer 解耦依赖非常有用。如果您想要发布更新,但同一系统上的另一个软件阻止了对某个依赖项的升级,那该怎么办呢? - Hyperplane

这是一个非常主观的回答。
我个人总是使用deb或其他包含式的打包方式。我不使用snaps,因为我觉得它们就像封闭的花园,与Linux所代表的开放生态系统不符。
由于软件中心中的描述/元数据不清楚/模糊,我曾经错误地安装了几次snaps。我发现它们降低了我的笔记本体验。那些都被迅速移除了。
如果一个应用只有一个snap包,我宁愿不使用这个应用本身。
我担心有一天snappers可能会说你甚至不需要操作系统。

是啊!仔细想想,这就像是在推广一场马车比赛(开个玩笑)。似乎一切都源于加快部署的渴望。亲爱的开发人员们,为何如此匆忙呢?宇宙并不会崩溃! - Sri
我的上面的评论是回应某人的评论,但似乎已被删除。我甚至给它点了个赞! - Sri

不使用SNAP是非常困难的。似乎你别无选择。是的,你可以选择通过终端安装DEB应用程序或者使用apt-get install ...命令,但即使这样也并不总是解决方案。经过一番搜索,我找到了解决办法。你可以(虽然不容易)完全移除SNAP。

Kevin Custer告诉你如何摧毁SNAP。我在21.04版本中测试过。 https://www.kevin-custer.com/blog/disabling-snaps-in-ubuntu-20-04/

完成这些步骤后,你可能需要重新安装gnome-software sudo apt-get install gnome-software。从那时起,软件商店将不再提供SNAP。

你有安装SNAP吗?

snap list

让我��开始,快速概述:
sudo snap remove snap-store
sudo snap remove gtk-common-themes
sudo snap remove gnome-3-34-1804
sudo snap remove core18
sudo snap remove snapd
sudo umount /var/snap
sudo apt purge snapd
rm -rf ~/snap
sudo rm -rf /snap
sudo rm -rf /var/snap
sudo rm -rf /var/lib/snapd

让我们来看看,还有没有SNAP剩下了?
snap list

感谢Kevin Custer!

在Ubuntu 22.04中,他们强制你使用snap(例如firefox),而deb软件包实际上安装了snap软件包。由于我在snap版本的firefox中遇到了很多问题(没有视频加速,SSO问题,Gnome扩展界面被阻塞,VPN扩展问题等),幸运的是,网上有几篇文章教你如何恢复到经典的deb版本并防止系统覆盖deb软件包。

从历史的角度来看,依靠Debian和apt这个旧系统可能是一个好选择。由于它持续不断地改进,似乎没有理由转换到新的系统。

所以保持传统吧!