Linux 命令行入门教程这个网上杂七杂八的非常多。最近看到有个 MIT 的教程 The Missing Semester of Your CS Education,感觉很不错,网址是 https://missing.csail.mit.edu/
它还有个中文翻译版:https://missing-semester-cn.github.io
我没有逐字逐句看完,但它的有一个说法,我非常不认同:
Some distros, like Arch Linux, use a rolling update policy where things are bleeding-edge but things might break every so often.
中文翻译版:
不同操作系统的优缺点是什么,我们如何选择(比如选择最适用于我们需求的 Linux 发行版)?
Arch Linux 采用滚动更新策略,用了最前沿的软件包(bleeding-edge),但软件可能并不稳定。
我查了一下,ˌevery so ˈoften 的意思是:occasionally; sometimes 有时;偶尔。
这一说法具有误导性,并且毫无意义。
从我个人多年的在桌面和服务器上使用 Arch 的经历来说,滚动更新从未导致系统崩溃、数据丢失等问题,就我的感觉,Arch 比 Windows 还稳定。
原因是 Arch 的软件包在进入普通用户使用的稳定版软件仓库前会进入测试版软件仓库,即虽然 Arch 的软件总是最新的,但是软件打包者在用 ABS 构建软件包并安装后会进行测试,更不用说一些软件的上游在发布新版本时本身也可能会有测试。当然可能有测试不全的情况,这也不能怪 Arch,要怪就怪上游开发者代码质量和测试质量不行。
由于这一误导性说法比较常见,Arch Wiki 专门解释了这个事情:
Is Arch Linux a stable distribution? Will I get frequent breakage?
It is the user who is ultimately responsible for the stability of their own rolling release system. The user decides when to upgrade, and merges necessary changes when required. If the user reaches out to the community, help is often provided in a timely manner. The difference between Arch and other distributions in this regard is that Arch is truly a ‘do-it-yourself’ distribution; complaints of breakage are misguided and unproductive, since upstream changes are not the responsibility of Arch devs.
See the System maintenance article for tips on how to make an Arch Linux system as stable as possible.
至于软件包总是最新会不会造成其他问题,有时可能会有,但具体事情具体分析,都可以解决,比如同时安装多版本,用 PATH 选择不同版本。比如有个 archlinux-java
可以人性化地改 JAVA 环境变量。
例如,2019 年秋天,Felix Yan 同学早早地打包了最新的 Python3.8,由于当时我使用的很多 Python 代码的很多依赖不支持 3.8 版本,虽然可以同时安装 3.6,但不管我怎么改,某些使用 pybind11 和 CMake 的代码就是死活不认 Python3.6,导致编译报错。然而由于很多系统软件依赖 python3.8
,我又不能卸载它。在今天看来可能是我不会配 CMake 导致的。
CMake 和 C++ 是编译软件时最令我头痛的东西,经常编译到一半出错,然而由于用了make -j32
,错误信息隐藏在中间,还要用 ctrl+F 找 err
关键字。CMake 本质上就是在修补 C++ 被造出来的时候没有考虑的依赖管理问题。还是 Rust 这种现代语言好,自带包管理器 cargo 和包仓库https://crates.io。
不过最近两年,Python 这个包由于依赖它的包众多,大版本更新速度有所放缓,比如 Python3.11 在 2022 年 10 月发布,Felix 同学直到今年 Apr 05, 2023 才打包,让 Arch 变得不像是滚动更新 Distro其实并没有,因为 AUR 上有 rixx 同学早早打包好的 Python3.11 可以用。