对一些 Linux 发行版本的思考
我一直觉得选择使用 Linux 是一种选择美学。我使用过许多 Linux 发行版本,也有过多次用了一个发行版本一段时间,然后又换了另外一个发行版本的丰富经验……所幸换 Linux 发行版本不像跨越一片稻田寻找一根最长的稻草那样不会头,也不会像那种“你一个接一个不断换发行版本,请你明白,你没有办法xxxxxx”那样。
这样子我就可以找到一款对我来说比较理想的发行版本了吧,但是这样的发行版本对我来说并不存在。如果谈起现有的这些 Linux 发行版本的话,我一定要说一下几个我比较不喜欢的地方:
- 用户目录下的文件乱七八糟。不过遵循 XDG 标准的软件越来越多了。
- 我不是很喜欢 Linux 的文件系统层次结构标准。虽然我大体上明白什么文件会放在哪里,但是这些对我来说总是有些模糊。如果有一个更容易让一般人明白的现代的文件系统结构我觉得会更好。
- 所有用文件系统层次结构标准的 Linux 应该像 Clear Linux OS 那样,/etc 只放用户手动覆盖的配置。
关于美学上,我更是希望:
- 我一直希望有一个好用的 Linux 发行版本,它就像一个程序。系统的软件包管理系统就像是这个程序的构建工具。我们通过命令行安装一个依赖,那么这个依赖的添加将会被系统记录下来,写入到一个文件里。甚至在一个系统目录下新建一个文件也有类似的记录。我们能记录下这些变更;用这个一直更新下来的配置文件便能重新安装现在的操作系统并保留我们在原先系统上做过的变更。我们也就不用在意安装或者删除一些软件包后,那些残留物了……虽然本质上并它们不纯,但是从这个可重演的配置文件角度来看,它们就看起来很纯粹了……NixOS 是最接近这样的存在。
- 所有用户使用的软件配置也是如此,就算是那些 GUI 操作后的变更也能被记录下来,它们本质上使用了更高层和中心化的配置进行管理,本质上也许和 emacs 的配置文件差不多。如果一个配置变成了该软件的默认的选项,那么原先的那条变更在之后也会被删除掉。不过现在的桌面软件都不是这样架构或者设计的,在现阶段也根本做不到。现在的操作系统和软件的设计对绝大部分人来说不是问题……重新安装后再配置对于新旧的交替来说也显得更纯粹(就像人类的传承一样)。
但是理想总是理想,下面我就来说说我对于一些发行版本的看法吧。我对 Debian/Ubuntu 的使用的体会也已远去,而且我有段时间对 Canonical 有很多偏见,所以还是不提了。
Fedora
虽然 Fedora 的 logo 没有 openSUSE 或者 Gentoo 那么可爱,但是感觉 Fedora 是所有发行版本里我比较喜欢的那个。
优点
- 感觉 Fedora 的很多东西(或者说流程)都很专业,而且我觉得 Fedora 在一些 Linux 的新技术上的推进做得很好。虽然 Fedora 没有像 NixOs 那样,有一些完全不一样的东西,但是它一直在做技术方面的古典创新。我还是比较喜欢像 Fedora 31 这样直接使用 CgroupsV2 的大刀阔斧的决定的。
- DNF 很好用,名字我也很喜欢。各种软件包也很新。firewalld、podman 我也经常用。
- 使用了 SELinux。虽然我经常被 SELinux 坑,但是 it’s fine.
缺点
- 比起 AUR 来说,Fedora + RPM Fusion 很多软件包都没有。
- DNF 的 metadata 很大……下载依赖的时候感觉体验蛮差的。
- Fedora 默认安装的时候会安装很多相关的桌面软件。桌面系统里的许多地方都能看到系统现有的桌面软件,但是我并不喜欢看到那些我用不到的全家桶软件。
- KDE 的版本经常会落后一个版本。
Fedora Silverblue
这个发行版本的名字取得非常一流,而且又有 Fedora 的底在。不过我用了那么多年的 Linux,从来没有过希望能回滚情况……现在 Linux 的发行版本很多已经很稳定了,我很少修 Linux 无法启动、软件包不兼容的问题。但是我觉得这个发行版本实际上并不能解决什么现实的需求……无法将不纯的和纯的东西分离,甚至把很多东西都弄得更复杂了。
优点
- 软件包管理系统能显示安装的软件包名(而不包含依赖),感觉很不错。安装依赖的 CLI 界面也不错。
- 安装好后自带的软件包还是蛮 minimal 的。
缺点
- overlay、Flatpak 的软件 (尤其在我看了 Flatpak 文档,了解了很多细节后)和 podman 化对于正常的桌面用户太 overkill 了。对于 Flatpak 的相关的批评有很多,可以参考网上的评论。
Arch Linux
我一直觉得所谓好用的发行版本就是安装软件很方便……AUR 真的很好用。
优点
- AUR、ArchLinuxCN 真的很方便。美中不足的是 AUR 里的软件包都需要再重现构建一遍,而不是提供一个现成的 pkgname.pkg.tar.xz。如果一个软件的 license 对这方面没什么限制,也不是 Git master 下的版本,现在这样就感觉不绿色了。
- 可以 minimal 配置自己的系统。
- 滚动更新,所以软件包很新。
- Wiki 很多。
缺点
- 安装系统极度反人类。虽然我能理解这可以提高使用的门槛,但是更多的手动输入或者操作总是 error-prone。另外想象一下,在安装的时候,一个 Emacs 用户想安装 Emacs 来对一些文件进行编辑,但是他/她需要先对源的镜像文件里的镜像顺序进行修改,不然下载 Emacs 的速度很慢……先有鸡还是蛋的问题。在主流的 Linux 安装都很方便的现在,没必要把安装弄得那么复杂,并且认为这是一个优点。
- 我一直觉得让用户完全地定制化其实没什么必要……如果提供一个简单的图形或者 CLI 界面让用户选择 boot loader、桌面环境等就够了。很多时候用户不知道安装一些很有用的软件包(比如说 fstrim、earlyoom),另外也不应该让用户纠结这些细节。有一个简单的 out of the box 的安装未尝不好。
- 所有的 Wiki 应该是给予有需要帮助的人看的,而不是什么都要参考 Wiki……
NixOs
看上去很美好,但是我觉得因为生态的问题,所以不是非常很好用。
优点
- 安装和配置系统真的很优雅和美。可以很方便地在配置文件里写明要在 /etc 下创建的文件、编写自定义的 systemd service。可以把 Emacs 相关的依赖也写在配置里,然后通过 Nix 统一管理安装。甚至可以把默认 Emacs 软件包里自带的 emacs.desktop 去掉(因为很多人都会用 Emacs daemon,而自带的 emacs.desktop 并不会以 daemon mode 的方式启动 Emacs)。
缺点
- 很多软件包比起 Fedora、Arch 来说要旧好些,并且软件包 bug 也多好些。
- 因为 Nix 的包管理的机理,每次更新都要更新很多软件包(包含依赖这些软件包的其他软件包)。
- 就算是有 Home Manager 这样的工具,还是无法很好地管理用户层的很多软件的配置。
- 也许你可以看了十几页或者更多页的教程后,给一些没有的包编写构建脚本,patch 非 NixOS 的可执行文件,但是从日常的使用来说,相比较使用其他的发行版本,会不会把事情弄得更麻烦了。
最后还是因为 Arch 安装软件很方便,所以桌面的发行版本选择了 Arch。服务器端我觉得 Fedora 是不错的选择。