# 我的 FreeBSD 故事

* [My FreeBSD Story](https://vermaden.wordpress.com/2018/09/07/my-freebsd-story/)
* 作者：𝚟𝚎𝚛𝚖𝚊𝚍𝚎𝚗
* 2018/09

由于 [Roman Zolotarev](https://www.romanzolotarev.com/) 邀请我为他的 ***Tell Your BSD Story（讲述你的 BSD 故事）*** 页面撰写一篇文章，我实在无法拒绝。该页面原本位于 [**https://www.bsdjobs.com/people/hi.html**](https://www.bsdjobs.com/people/hi.html)，但很遗憾，Roman 后来放弃了 **bsdjobs.com** 这个域名。我本想尽量简短，但看来还是不够直白 :🙂:

最近也被添加到了页面 [**cybersynapse.ro**](https://cybersynapse.ro/Vermaden_My_FreeBSD_Story.php)。

我记得的第一批设备/电脑/游戏机（不是同时拥有的）是 [Atari 2600](https://pl.wikipedia.org/wiki/Atari_2600) 和 [Pegasus](https://en.wikipedia.org/wiki/Pegasus_\(console\)) 游戏机，后者是 *Nintendo NES* 的硬件克隆版。

![](https://vermaden.wordpress.com/wp-content/uploads/2018/09/atari-2600.png?w=960)

那时我甚至不知道它是 *Atari 2600*，我只称它为 **Video Computer System** …… 当时我也完全不懂英语。花了大约二十年，我才偶然发现这个 **Video Computer System** 实际上是 *Atari 2600* :🙂:

这台设备只用来玩电子游戏。

后来我拥有了 [AMIGA 600](https://en.wikipedia.org/wiki/Amiga_600) 电脑（或者说是父母为我买的），这次它不仅可以玩游戏，还能干其他事。*AMIGA* 对我影响最大，因为这是我第一次学习 *Amiga Workbench* 操作系统的书籍，并在 *Amiga Shell* 终端学习命令。我特别喜欢桌面上 *Ram Disk* 图标/目录的概念，它能让我透明地将任何东西放入系统内存。如今的桌面系统中仍然没有这个概念，我仍然记得看到 [Amiga Deathbed Vigil](http://www.amigahistory.plus.com/vigil.html) 电影时的那份落寞。

![](https://vermaden.wordpress.com/wp-content/uploads/2018/09/amiga-600.png?w=960)

1998 年底，我拥有了第一台 PC，当然预装了 *Windows*，它既是游戏机，也是日常工具。有一次我深入研究 *Windows 注册表*（它的概念和实现让我感到厌恶）以及由 **CMD.EXE** 提供的有限命令行界面。我记得，这台机器的核心并不是 CPU 和主板，而是图形加速器——传奇的 *3Dfx Voodoo* 显卡。这个公司（*3Dfx*）的态度和理念，也像 *AMIGA* 一样，对我影响深远。

因此，我现在的笔记本外观也是这种风格 :🙂:

![](https://vermaden.wordpress.com/wp-content/uploads/2018/09/laptop.jpg?w=960)

有些游戏甚至以支持 *3Dfx Glide* 驱动为唯一特点发行特别版，比如 *Need for Speed II: Special Edition（极品飞车 II：特殊版）*。

![](https://vermaden.wordpress.com/wp-content/uploads/2018/09/nfs.jpg?w=960)

从 *AMIGA* 迁移到 PC 后，它再也没有“感觉对了”。游戏很酷，但 *Windows* 系统烂完了。随着时间推移，不同版本的 *Windows* 和硬件改进不断出现。当时 *Windows XP* 已经很沉重，更别提硬件要求更高的 *Windows 2000*。至于大家对 *Windows ME* 的所有抱怨，我并不完全理解。它的崩溃频率与 *Windows 98* 或 *Windows 98 Second Edition* 相当，也许只是我的硬件不同 :🙂:

![](https://vermaden.wordpress.com/wp-content/uploads/2018/09/windowsme.png?w=960)

那段时间，我没有保存任何“自己的”截图，因为在用 *Partition Magic* 移动/调整分区以从较空的 **C:** 盘获取更多空间时，我整个 40 GB（当时很大）数据盘都丢了。那天，我深刻领悟到：*“有些人会备份数据，有些人将会备份数据”*。自那以后，我再也没有丢过数据，因为我拥有多份备份，但就像 *Netheril* 帝国（《龙与地下城》中已毁灭的古老帝国）的覆灭一样，丢失的数据永远消失了。

我一直在尝试各种替代方案，这也促使我在 2003 年尝试 *Linux*。在阅读了各种发行版的理念后，我决定用 *Slackware Linux* 跑 *KDE 3*。当时我的朋友使用 *Aurox Linux*（波兰少数几个 *Linux* 发行版之一），并建议我也这样做——特别是在解决潜在问题时，因为他已经熟悉这个系统，而且他最近刚放弃了 *Windows*。但 *Slackware* 听起来更合适，所以我选择了这条路径。一开始，我在用 *Windows XP* 和 *Slackware Linux* 双系统，因为我在 *Windows* 世界里一切都运作正常，而在 *Linux* 世界里常常感到无助，所以如果需要玩游戏或解决 *Linux* 问题，我就会重启回 *Windows*。我还记得当时对双剪贴板（PRIMARY 和 SECONDARY）的概念感到非常陌生。我很惊讶，为什么 *Linux* 这个“更优秀”的系统（至少宣传如此）需要一个系统托盘程序来管理剪贴板。在 *Windows* 上很直观，\[CTRL]+\[C] 复制，\[CTRL]+\[V] 粘贴就完成了，但在 *Linux*（现在我知道这是 *X11* 的特性）中，有两个剪贴板，需要由 *KDE 3* 的这个小托盘程序同步。我也难以接受，如果关闭了进行复制操作的应用程序，最后一次 \[CTRL]+\[C] 的内容就会“丢失”。我在 *Slackware* 上稍微安定了一段时间，但不久就不适应了。我真的不喜欢手动管理软件包依赖，而且 *KDE 3* 非常丑陋，尽管尝试了各种可能的方案，我仍无法将它调成好看的界面。

在使用 *Slackware* 半年以后，我再次查看 *Linux* 发行版，并决定尝试 *Gentoo Linux*。我完全赞同下面的形象，它形象地展示了首次安装 *Gentoo Linux* 的体验 :🙂:

![](https://vermaden.wordpress.com/wp-content/uploads/2018/09/gentoo-fly.png?w=960)

当然，我选择了最硬核的版本——自建 Stage 1（编译器和工具链），当时这是个坏主意，因为在缓慢的单核机器上编译几乎耗时无穷……但经过若干小时，我终于安装好了 *Gentoo*。接下来我必须决定使用哪个桌面环境。当时我读到很多关于 *Fluxbox* 的好评，所以我尝试了它。这是一次非常奇特的体验（从零在 GUI 中创建一切），但也很愉快。这让我回想起 *AMIGA* 的时光……但 *Linux* 经常让事情变得复杂。越深入 *Gentoo Linux*，我越发现很多 *Gentoo* 特性都是基于 *FreeBSD* 的解决方案。*Gentoo Portage* 就是 *FreeBSD Ports* 的仿制品。而那个“中央”的 ·/etc/rc.conf· 系统配置文件概念也是从 *FreeBSD* 借鉴而来。所以我开始收集关于 *FreeBSD* 的信息。那个时候的 *FreeBSD* 网站或 *FreeBSD Ports* 网站（至今）显得有些过时，但这并没有让我气馁。

大约在 2005 年，我在电脑上安装了 *FreeBSD 5.4*。起步维艰，就像之前使用 *Gentoo* 时一样，但同样像 *Gentoo*，*FreeBSD* 项目提供了大量优秀的文档。*Gentoo* 的文档主要集中在各种 *Gentoo Wiki* 网站上，而 *FreeBSD* 项目提供了“官方”文档，如 *手册* 和 *FAQ*。我还记得在现已不存在的 *BSDForums.org* 网站上提的第一个问题——例如其中一个最早的问题是如何在普通终端中滚动输出。现在我知道需要按 Scroll Lock 键，但对我来说那完全是新鲜事物。

*BSDForums.org* 当年的样子。

[![](https://vermaden.wordpress.com/wp-content/uploads/2018/09/bsdforums.png?w=960)](https://vermaden.wordpress.com/wp-content/uploads/2018/09/bsdforums.png)

这是我从那个时期获得的最早截图，*Gentoo* 的安装界面看起来非常相似。

[![](https://vermaden.wordpress.com/wp-content/uploads/2018/09/vermaden-2005-11-08.jpg?w=960)](https://vermaden.wordpress.com/wp-content/uploads/2018/09/vermaden-2005-11-08.jpg)

为什么选择 *FreeBSD* 而不是 *OpenBSD* 或 *NetBSD*？可能是因为 *Gentoo* 的许多概念都是基于 *FreeBSD* 的解决方案，这也引导我选择了 *FreeBSD* 而非其他 BSD 操作系统。目前我仍在使用 *FreeBSD*，但我一直关注 *OpenBSD*、*HardenedBSD* 和 *DragonFly BSD* 的解决方案及改进。

由于从 *Linux* 迁移到 *FreeBSD* 的路径非常简单——`/home` 下的所有配置文件都可以直接复制——迁移过程非常快速且容易。我再次使用了在 Gentoo 上的 *Fluxbox* 配置。现在在 *FreeBSD* 上，它甚至更让我回想起 *AMIGA* 的那些日子。一切都是经过深思熟虑的，每个功能都有其位置和意义。文档完备，而 *FreeBSD 社区* 更是无与伦比。

我甚至决定升级硬件，尝试一些更“特别”的配置。我入手了服务器主板 *Gigabyte-GA-7DPXDW* ，搭载了双 CPU 插槽——而由于 *Athlon XP*（桌面）处理器可以很容易地改装为 *Athlon MP*（服务器）处理器，我也获得了第二颗 CPU，以及 1 GB ECC 内存。

![](https://vermaden.wordpress.com/wp-content/uploads/2018/09/gigabyte-ga-7dpxdw.jpg?w=960)

这套双 CPU 配置在当时不常见，但对我来说非常适合。我从 nvidia 的闭源驱动换成了开源的 nv 驱动，因为 nvidia 驱动会每隔几天就打断我的系统运行时间 :🙂:

我在这台桌面机器上累计达到了 30 天的正常运行时间，对于没有应急 UPS 的系统来说还不错 :🙂:

![](https://vermaden.wordpress.com/wp-content/uploads/2018/09/uptime-vermaden.png?w=960)

这是我最后一次在 FreeBSD 上（至少在我的机器上）使用 ECC 内存，当时 FreeBSD 上还没有 ZFS:🙂: 光阴荏苒，我开始感受到对更快硬件的需求。同时，我也对 *Intel* 显卡产生了兴趣，于是换上了新主板和当时最快的 *Intel X3000 GMA* 显卡——虽然听起来很愚蠢——使用 *Asus P5B-V*……这是个烂的主意，因为 *FreeBSD* 的图形栈尚不支持这款 *Intel* 显卡。最初我使用软件 VESA 驱动，但问题不在于驱动性能（我当时还有四核 *Intel Q6600 CPU*），而是在屏幕分辨率上。当时我有 1280 x 1024 的显示器，但只能使用 1024 x 768，体验极差。我决定暂时尝试其他方案，等待 *FreeBSD* 对 *Intel X3000* 的支持到来。我需要尽快解决，因为当时我还需要撰写我的 *硕士论文*。

那是 2007 年中期。我想尝试 *Linux* 发行版光谱的另一端——*Ubuntu*。我不能再更“桌面化”了 :🙂: 它当然顺利安装了 *GNOME 2* 桌面环境，但不幸的是 pulseaudio 已经存在。当时我喜欢长时间开机（不花电费），有几件事让我非常烦恼。例如前面提到的 pulseaudio——使用一两天后声音就会冻结（即使我没有播放音乐或视频），且一直保持冻结状态。可以重启 pulseaudio 或重新加载 ALSA 模块，但状态仍然保持 *SUSFU*（Situation Unchanged Still Fucked Up, 情况没有改变还是一团糟），必须重启才行。由于我要写 *硕士论文*，没时间重装其他系统，因为 pulseaudio 在其他 *Linux* 发行版上可能同样会出问题，而 *FreeBSD* 还不支持 *Intel X3000 GMA*。总体来说 *GNOME 2* 体验还行，但我非常怀念所有自定义设置、快捷键以及自定义行为。我在 *Ubuntu* 上忍受了两个月，直到完成了我的关于 [*操作系统虚拟化*](https://toya.net.pl/~vermaden/tmp/thesis.pdf) 的 *硕士论文*（PDF 为波兰语，可用翻译工具阅读） :🙂:

那时的 *Ubuntu* 长这样。

[![](https://vermaden.wordpress.com/wp-content/uploads/2018/09/ubuntu.jpg?w=960)](https://vermaden.wordpress.com/wp-content/uploads/2018/09/ubuntu.jpg)

我也曾短暂遨游过 *Mac* 世界，当时有机会使用了一年的 *MacBook Pro* 和 *Mac OS X Leopard*。这让我真正感受了 *Mac* 的生态系统和硬件（以及理念），因此不会像很多反苹果的人那样重复陈词滥调。但在工作中切回 *FreeBSD* 系统后，感觉更自然。我在 *Mac* 上大量使用 Terminal.app，但 *FreeBSD* 的 xterm(1) 更符合我的习惯。

有趣的是，多年来我设计了 *Mac* 风格的 *Fluxbox* 主题，直到真正使用 *Mac* 时，我仍然喜欢 *Leopard* 时代的 *Mac OS X* 外观。

[![](https://vermaden.wordpress.com/wp-content/uploads/2018/09/vermaden-2007-10-14-mac.png?w=960)](https://vermaden.wordpress.com/wp-content/uploads/2018/09/vermaden-2007-10-14-mac.png)

我还曾尝试过 *Solaris*（后来是 *OpenSolaris*）。必须承认，当时 *Solaris* 的所谓 *Java Desktop* 基于 *GNOME 2*，外观确实很棒，仅次于 *Mac OS X*。

[![](https://vermaden.wordpress.com/wp-content/uploads/2018/09/solaris-10-gnome-2-java-desktop.png?w=960)](https://vermaden.wordpress.com/wp-content/uploads/2018/09/solaris-10-gnome-2-java-desktop.png)

我非常喜欢 *Solaris* 的概念和解决方案，例如 *Zones*、*ZFS*、*Crossbow*、*Comstar* 或 *IPS*（当时 *FreeBSD* 还没有 *PNGng*）。但桌面软件始终是问题所在。虽然我在 *FreeBSD Ports* 中几乎找到了和 *Linux* 一样多的应用，但在 *Solaris* 世界中总是缺少一些应用。

这段 *Solaris* 体验也影响了我的灵感，所以我的 *Fluxbox* 主题也改成了 *Solaris* 风格 :🙂:

[![](https://vermaden.wordpress.com/wp-content/uploads/2018/09/vermaden-2007-07-30-solaris-java-fluxbox-system.png?w=960)](https://vermaden.wordpress.com/wp-content/uploads/2018/09/vermaden-2007-07-30-solaris-java-fluxbox-system.png)

在 *Ubuntu* 体验失败之后，我换了另一块主板，因为 *FreeBSD* 当时仍不支持 *Intel GMA X3000*，再次回到 *FreeBSD* 世界。摆脱 pulseaudio 的困扰后，我终于松了口气。同时，我看到很多关于 *Openbox* 的好评，决定尝试它来代替 *Fluxbox*。刚开始编辑 XML 配置文件时感觉很奇怪，但熟悉后将 rc.xml 和 menu.xml 文件整理好就不成问题了。从那以后，我在不同机器上使用 *FreeBSD*，包括物理服务器、虚拟机和笔记本。我学到，在 *FreeBSD* 生态中，硬件支持是最重要的因素。

我至今仍在使用 *Openbox* 和 *FreeBSD*，我的桌面如今如下所示：

[![](https://vermaden.wordpress.com/wp-content/uploads/2018/09/vermaden-now.jpg?w=960)](https://vermaden.wordpress.com/wp-content/uploads/2018/09/vermaden-now.jpg)

经过 15 年使用各种 *Windows*、*UNIX*（*macOS*/*AIX*/*HP-UX*/*Solaris*/*OpenSolaris*/*Illumos*/FreeBSD/OpenBSD/NetBSD）及类 UNIX（*Linux*）系统，我始终得出结论：*FreeBSD* 是“出错最少”的系统。而且每次发布更新，它表现得越来越好。某一天我会详细写为什么 *FreeBSD* 是如此出色的操作系统……如果我还没写的话 :🙂:

## 更新 1

正如 [Roman Zolotarev](https://www.romanzolotarev.com/) 所做，他将我的故事添加到他的 ***Tell Your BSD Story*** 页面。该页面原本在 [**https://www.bsdjobs.com/people/**](https://www.bsdjobs.com/people/)，但 Roman 后来似乎放弃了 **bsdjobs.com** 域名。

感谢 Roman！

你可以查看 [Slawomir Wojciech Wojtczak (vermaden) 的 FreeBSD 页面](https://www.bsdjobs.com/people/vermaden.html)。
