开发操作系统是我从小到大的梦想。但在追逐这个梦想的道路上我走了不少的弯路。

初中的时候,我因为写 VBS 脚本装 B 认识了一位很好的朋友。我们一起讨论和学习 VBS,后来是 HTML,再后来是 VB 和 C#。那时候的我们相信,写一个操作系统是全天下最牛逼的事情。但就这点本事怎么可能写操作系统呢?我选择了用 PPT 来 “设计” “操作系统”,搞出一个 “Windows 13” 来。我的朋友选择用 C# 来模拟 Windows 的外观和基本功能,这样就看起来像是一个操作系统了。在这个 PPT 里,我通过 PowerPoint 内置的 VBA 写了一个记事本功能的“Word 2019”,那是我写的第一个程序。

图 1 我用 PPT “设计” 的 “Windows 13.5” (微软请原谅我糟糕的美术知识)

图 2 在另一个朋友制作的“手机”上搭载 “Windows 13 Phone”,那时的我可以很快画出 Win10 的 Hero 壁纸

图 3 “也许 N 年后,Windows 13 系列会有后续,但那时,也许就不再是 PPT 了”

高中的时候,我仍然在有限的空闲时间内继续空想一个操作系统。一方面,在闲暇时间,手边又没有电脑,我会手绘一些想到的“产品设计”;另一方面,我了解到有《30天自制操作系统》这本书,还在网上找了一些很有意思的教程,打算在有空闲时间时大干一场。

图 4 我使用汇编语言写了第一个裸机应用程序 “Hello World”

图 5 我那时还在着迷于所谓的“产品设计”

可惜的是,那时候的空闲时间实在太少,我还把大部分时间用来开发一个在班级白板上使用的教学助手。等到有时间实践网上找到的操作系统教程时,却被汇编语言的难度和连接国际互联网的问题(那时不配置 apt 源在国内是用不成 apt 的。对于一个使用 Windows 很多年的爱好者,我在刚开始并没有找到学习 Ubuntu 的合理路径,被大量不熟悉的细节给围殴了。而且没有 Google 很多问题也没法完全搞清楚。)困扰了很久,最后还是放弃了。对那时的我,访问 Github 都得靠运气——据说早上九点是个好的时间。

再后来,我成功得偿所愿进入计算机系学习。和操作系统相关的第一次尝试是数电实验课程。我那时仍然空想在我设计的 rv32ui 指令集的用 FPGA 模拟的 CPU 上运行自己写的操作系统——可是没有特权指令集,这怎么可能呢?最后,我仍然只实现了一个简陋的裸机终端。不过因为以往的这些执念,我没有组小组,而是一个人完成了从 CPU 设计到终端开发的全部工作——其实应该去 Github 找找裸机终端的代码的,那时候还是太年轻了。

图 6 minTerminal 的架构图。那时的我很骄傲独立完成了这个项目

现在的我,学习完了操作系统课程,认识到自己以前幼稚的探索确实错过了很多学习知识、实现梦想的机会。但蓦然回首,我发现我已经可以学习一个优秀的内核实现的全部代码了,我有信心掌握全部的细节。而且,还有《Operating Systems: Three Easy Pieces》这样优秀的教材。这比自己碰壁,在知乎上找“操作系统教程”有意义的多。

好了,说了这么多废话,最后还是希望自己能坚持下来吧。