
—— Linux桌面软件商场,究竟是应该Snap还是Flatpak?

最近读到两个新闻觉得非常有意思,分别是:
- By order of Canonical: Official Ubuntu flavors must stop including Flatpak by default
Ubutun背后的公司Canonical强制要求Ubuntun及其Flavors风味版本(如KUbuntu,XUbuntu等)停止默认安装Flatpak
- Flatpak could become a universal app store for Linux systems
Linux行业内的一些有影响力的人物,包括GNOME项目领导人,Debian项目领导人等,都提议并支持在Linux系统内建立一个统一的软件商城.
当然,有软件商场,就要选择一个实现方案,这些人都提议使用Flatpak商城做为Linux统一商城
发生什么事了?
这两个新闻都是最近的新闻, 但反馈出来的确是截然不同的信息.
首先可能需要解释下什么是Ubuntu Flavors. Ubuntu在Linux桌面是非常有名的,占用率与使用率非常高,这都是得益于它的易用性.
Ubutun官方版本是由Canonical官方发布与维护的,但很多人可能听到或使用过类似XUbutun, LUbuntu等一些衍生的Ubutun版本. 这些版本都是基于Ubuntu官方版本并受到Ubuntu认可的一些改动版本.
另外,也有一些非常流行诸如Linux Mint这种也是基于Ubuntu修改,但不受Ubuntu官方认可的发行版本,这样的不能称之为Ubuntu Flavors.
所以, Canonical公司就是自己以及要求这些Ubuntu Flavors不能默认安装Flatpak. 但与之相对应的是, Linux业界一些有影响力的人物, 都认为Linux桌面系统的一个很严重的问题就是缺少一个统一的软件商城,软件安装不方便,得搞一个. 于是就提出了基于Flatpak做统一的软件商城这个建议.
显然,这个不可能得到Canonical的支持, 因为Ubuntu有自己的一套,与Flatpak相对应的软件发行机制Snap. 但是Canonical的这个Snap在Linux开源业界并不是非常受欢迎,比如Linux Mint默认就删除它了.
关于这一点,我过往也写过文章解释原因 为什么Ubuntu的Snap是不受欢迎的
为什么要推Flatpak Store
对于操作系统来说, 一个好的软件生态必不可少, 也就是从开发者开发出好的软件,用户能简单方便的使用好的软件,反馈至利润给开发者,以形成一个正向的良性循环.
这个正向循环在Windows以及MacOS上都是存在. 但在Linux显然是不存在. Linux软件生态,无论是站在开发者角度,还是用户角度,都属于非常不方便,缺少良性循环.
而其中一个被认为重要原因就是缺少统一的软件Store, 让用户方便的下载安装软件,让开发者方便的发布软件并从中受益(比如要求用户付费等)
这便是这个提议的初衷与来源. 那它能解决Linux桌面软件的困境么? 还是从Linux桌面软件的困境开始说起吧.
Linux桌面软件的困境
Linux完全开源与自由的操作系统,在服务器领域应用极为广泛, 这是众所周知的. 在计算机领域内,不可能有不知道Linux的.
除了服务器领域以外,Linux也有非常多的桌面发行版本. 比较受欢迎的有诸如Fedora, Ubuntu, Linux Mint, Arch Linux等发行版本, 国内的Deepin也有很大的知名度
但一个不可否认的事实是,Linux桌面发行版本使用率不广,无法与Windows相提并论, 也无法与MacOS相比. 始终处于非常小众地位.
原因有多种多样,但一个非常重要原因就是Linux桌面软件生态相对较差,而造成Linux软件生态较差的主要原因在于:Linux混乱的软件模式以及极差的兼容性
混乱的软件安装模式
做为一个Linux的桌面使用者, 你可能得需要知道源码编译软件, RPM包安装,DEB安装, YUM方式, APT方式,Snap安装,Flatpak安装,AppImage格式等, 光是这个列表你都能感受到它的混乱.
虽然做为Linux桌面的一般使用人员,很少需要遇到源码编译这种方式,但其它那些模式,或多或少都会遇上. 因为有些软件要求你这种方式来安装,有些软件要求你用那种方式来安装, 没有统一的模式.
而同为桌面操作系统, Windows就是exe安装,而MacOS主要是dmg. 相比起来都是简单并且易于操作的安装方式.
极差的兼容性
更为重要的是, Linux桌面软件的兼容性比较差. 当我们在使用Windows或MacOS的时候, 下载一个软件,当它说支持Windows或MacOS的时候, 我们是不需要关心什么Windows 7还是Windows 10, MacOS哪个版本这些,因为肯定都支持.
但是, 与之相对应的是,一个Linux软件, 你得关心它支持了哪些发行版本,它可能支持某个系统,但这个系统升级后就不支持了,这种情况在Linux桌面系统中比较常见.
之所以会出现这种情况,一个很重要的原因于是Linux的基础类库的兼容性非常差. 这导致开发Linux软件相对MacOS与Windows更为痛苦与成本更高. 因为Windows和MacOS有统一的基础API给软件调用,是可靠的,兼容性强的.
共有的缺点
其实,无论是Snap还是Flatpak,这两种在概念上都是一致的. 都是主张把一个软件的依赖全打包进去,不依赖特定的Linux发行版本. 这样就极大化的避免了Linux不同发行版本不同类库的兼容性问题.
与之对应的,是过往的诸如源码编译,DEB/RPM包等方式,它们是依赖操作系统上已有的类库. 所以用户在安装时会遇到经常需要先安装依赖的类库或借助APT/YUM这一类的工具来解决依赖安装的问题. 这就是由它们的打包方式决定的.
很显然,由于概念几乎一致, Sanp与Flatpak共享一些共有的缺点.
软件体积非常大
由于几乎是每一个软件打包都把所有依赖全打包进去. 这种软件体积可想而知是非常大的.
举例来说,即使一个小小的计算器(KCal) ,体积几百M之多.
ID Branch Op Remote Download
org.freedesktop.Platform.GL.default 20.08 i flathub < 106.4 MB
org.freedesktop.Platform.VAAPI.Intel 20.08 i flathub < 11.6 MB
org.freedesktop.Platform.openh264 2.0 i flathub < 1.5 MB
org.kde.KStyle.Adwaita 5.15 i flathub < 6.6 MB
org.kde.Platform.Locale 5.15 i flathub < 341.4 MB (partial)
org.kde.Platform 5.15 i flathub < 370.1 MB
org.kde.kcalc.Locale stable i flathub < 423.1 kB (partial)
org.kde.kcalc stable i flathub < 4.4 MB
虽然有共享的运行环境(即不同软件共享同一Runtime), 但实际上由于无法强制约束, 不同软件依赖的运行环境各异, 因而每个都占有非常大的体积.
运行性能差
体积大并不是最重要的缺点. 因为很多人会认为现在硬盘都足够大了,不用在意体积的问题.
那接下来的这个缺点相对就有点严重了,就是运行性能较差.
由于每个软件都几乎有自己独立的运行依赖. 我们要明白,一个软件要运行的时候,依赖的一些类库是需要加载到内存中的,这样才足够快.
好, 那我们可以想像一个,一个Linux系统同时肯定会运行许多软件, 如果以Snap或Flatpak模式来打包,则几乎每个软件运行时,不仅要加载自己的一些代码到内存中,所依赖的一些类库也要加载到内存.
很明显,与过往DEB/RPM这样的依赖系统类库相比, Snap或是Flatpak则在性能上肯定会差很多.
虽然它们一直在不断的试图优化自己的运行性能,但它的打包模式几乎决定了它们的上限,根本无法与DEB/RPM这样的原生软件相比.
碎片化的扩大
Linux的一个最严重的问题就是碎片化, 这个在桌面系统上表现更为突出.
在服务器领域,由于使用Linux服务器的都是属于专业人士(比如程序员或专业的运维人员), Linux的碎片化还可以克服. 无论是使用Debian或是CentOS, 这些专业人士还是能够应用自如的.
但在桌面系统上则完全不同, 桌面系统的用户是普通用户. Linux桌面不仅发行版本众多,令人难以选择,更重要的是开发Linux下的软件相对成本更高,更为困难.
这一次, 无论是想推广一个统一的Flatpak软件商场,还是Ubuntu阻止Flatpak,推行自己的Snap Store, 都只是在本已经碎片化严重的现状之上,进一步加剧Linux桌面生态的碎片化.
可想而知, 未来的Linux桌面软件, 不仅要发行Flatpak版本,还要发行Snap版本, 更不能少了性能较好的原生的DEB/RPM版本.
与之相对应的是,得益于良好的兼容性,开发一个Windows软件或MacOS软件,开发一次,就能适应跨很多版本的系统.
Linux的这种碎片化, 不仅吓退了用户,也吓退了开发者. 就我感受而言,Linux软件生态最好的可能就是软件开发类的软件了, 其它的全都差了几个数量级.
比如举例来说,微软的Teams, 就停止了Linux版本的开发,建议Linux用户使用网页版本, 因为很难在Linux上开发出与Windows,MacOS体验一致的程度,成本很高,用户又少,做起来得不偿失.
Linux桌面之路漫漫
每一年,我都能阅读到类似2023,是不是Linux桌面元年这种只改了下年份一样的讨论. 但是可惜,短期内我认为不存在Linux桌面元年可能性很小.
Linux这个操作系统,在服务器领域它是王者,但在桌面操作系统,路漫漫其修远矣,仍有待其努力去追赶.