Flatpak和Snap是通用包管理器,使用都很简单。
如果你去问Linux社区的任何人,你会发现他们对自己不使用的那一个都有相当锋利的看法。对Flatpak用户来说,Snap是敌人;对Snap用户来说,Flatpak则不如自己用的。
作为两者都在使用的人,我也有自己的看法。你一定很惊讶吧?在比较Flatpak与Snap时,确实有一些重要的事实需要考虑。我们来聊聊吧。
我不会在这里赘述通用包管理器是什么,或它们为何让Linux更好。如果你已经了解Flatpak和Snap是什么,请直接跳到下一节。
对于不了解的人,我把它们简单解释一下Flatpak和Snap是在Linux上安装应用的替代方式(虽然一些发行版正倾向于将通用包管理器设为默认)。
它们与传统安装方式的区别在于,这两种包管理器把安装应用所需的一切(包括依赖)都打包进去。
这意味着只要系统支持对应的包管理器,Flatpak或Snap应用就能在任何发行版上保证安装成功。大概就是这个意思。接下来,我们来讨论哪个更好。
如果让我只能选一个包管理器,我会有点难办。为什么?虽然它们都提供了大量可以轻松安装的桌面应用,但只有其中一种还能用于服务器应用……那就是Snap。
原因之一是Flatpak在沙箱化时高度依赖桌面会话服务(如D‑Bus和门户),这些服务在服务器上不可用,所以几乎找不到太多Flatpak服务器应用。
而Snap在服务器上表现不错。比如安装Nextcloud,你可以手动安装(需要先装数据库、Web服务器,再装Nextcloud本体),也可以一条命令搞定sudo snap install nextcloud。
本质上,如果你想在服务器上使用通用包管理器,唯一合乎逻辑的选择就是Snap。但桌面呢?毕竟绝大多数通用包管理器应用是装在桌面系统上的。它们的表现如何?
首先,Flatpak完全开源且去中心化。Flatpak应用通常更快、占用的系统资源更少。同时,由于用户可以通过像Flatseal这样的工具轻松管理权限,Flatpak在安全性上略有优势。使用Flatseal,你可以像管理Android应用权限一样,关闭某个Flatpak应用对摄像头、麦克风、位置信息等的访问。
Snap在这方面就不那么容易(有时甚至根本做不到)。
最后,如果你使用基于Arch或Fedora的发行版,Flatpak毫无疑问是更好的选择,因为这两者都更倾向于使用Flatpak(甚至默认自带)。这并不是说你不能在Fedora上装Snap……当然可以。但鉴于Flatpak已经开箱即用,Fedora开发者显然更希望你走这条路。
相反,如果你是Ubuntu用户,核心应用和服务器组件会有更深入的系统集成。同时,如果你需要服务器、物联网、机器人或桌面应用,Snap往往是最佳(甚至唯一)选择。此外,如果你看重自动更新,Snap就是唯一的方案。
还有一点你可能不知道Snap依赖Canonical集中的Snap Store,而Flatpak使用去中心化的仓库(如Flathub)。如果你不喜欢由单一公司控制你的通用包管理器,Flatpak会更合你的胃口。
因为Flatpak仓库是分散的,你永远不必担心因为某个仓库宕机就装不到应用。
如果Snap Store发生故障,只有等Canonical解决问题后你才能继续使用。
简单来说,Flatpak应用占用的磁盘空间更小、启动更快,而Snap应用往往占用更多磁盘空间且启动较慢。Flatpak更快的原因在于它的运行时开销显著更低。
与Snap不同,Flatpak不需要后台守护进程(也不依赖systemd)来运行。如果你选择的发行版不走systemd路线,你唯一的选择只能是Flatpak。
如果我不是一名长期的Linux老手(也没有对几乎所有Linux事物形成长期看法),而你问我哪个更好,我会这么说
Flatpak是桌面使用时更优秀的通用包管理器,而Snap则最适合服务器、物联网、机器人等场景。这并不是说Snap在桌面上是个坏选项,只是Flatpak在图形界面领域略占上风。如果我使用Ubuntu作为桌面发行版,Snap会是我的首选。
最终,我两者都在用。主要原因是我发现有些必备应用只有Snap版,而有些只能通过Flatpak获得。基于此,我总是确保在我的桌面发行版上同时安装Snap和Flatpak。
无论走哪条路,这两种通用包管理器已经成为Linux生态系统中不可或缺的一部分。
