内核之外的冰山:为什么说从零写一个操作系统已几乎不可能?
本文永久链接 – https://tonybai.com/2025/08/16/brand-new-os-impossible
大家好,我是Tony Bai。
对于许多心怀浪漫主义的开发者来说,“从零开始编写一个属于自己的操作系统”,或许是技术生涯中最终极、最性感的梦想。这几乎是现代编程世界的“创世纪”,是掌控计算机每一个比特的至高权力。
然而,最近一位名为 Wildan M 的工程师,在他的一篇博文中,用一次亲身参与 Redox OS 项目的经历,给我们所有人泼了一盆冷水。他的结论简单而又颠覆:
现在,从零开始编写一个全新的、能被广泛采用的操作系统,已几乎是一项不可能完成的任务。
而其真正的难点,并非我们想象中那个神秘而复杂的内核,而在于内核之外,那座看不见的、庞大到令人绝望的“冰山”。
冰山一角:内核,那个“最简单”的部分
故事的主角是 Redox OS,一个雄心勃勃的项目。它旨在用内存安全的 Rust 语言,构建一个现代的、基于微内核架构的、可以替代 Linux 和 BSD 的完整操作系统。
当我们谈论“写一个 OS”时,我们通常指的是编写内核。那么 Redox OS 的内核有多复杂呢?文章给出了惊人的数据:
* 代码量: 约 3 万行 (30k LoC)。
* 启动速度: 大多数情况下,不到 1 秒。
在短短十年间,Redox 团队已经完成了动态链接、Unix 套接字等核心功能。这无疑是令人敬佩的工程壮举。但 Wildan 指出,这仅仅是浮出水面的冰山一角。一个能启动的内核,距离一个“能用”的操作系统,还有着遥远的距离。
冰山之下:生态移植的“五层地狱”
当作者兴致勃勃地想为 Redox OS 贡献力量,尝试将一些现代程序(如 Go, Node.js, Rust 编译器)移植上去时,他才真正撞上了那座隐藏在水面之下的巨大冰山。
一个现代操作系统之所以“能用”,是因为它能运行我们日常使用的所有软件。而将这些软件“搬”到一个全新的操作系统上,需要闯过一重又一重难关。
第一层:系统调用 (Syscall) 的鸿沟
这是最底层的障碍。每个操作系统都有自己的一套与硬件和内核交互的“语言”,即系统调用。Redox OS 的 syscall 与我们熟知的 Linux 完全不同。这意味着,任何需要与内核打交道的程序(几乎是所有程序),都必须重写这部分逻辑,告诉它如何在新世界里“说话”。
第二层:libc 的重担
为了不让每个程序都去痛苦地学习 syscall 这门“方言”,操作系统通常会提供一个标准的“翻译官”——C 标准库 (libc)。它将复杂的 syscall 封装成开发者熟悉的函数(如 printf, open, read)。因此,一个新 OS 的核心任务之一,就是自己实现一个兼容的 libc。Redox 为此用 Rust 实现了一个名为 relibc 的项目,其工程量之浩大可想而知。
第三层:POSIX 的“几乎兼容”陷阱
即便新 OS 像 Redox 一样,努力兼容 POSIX 这个通用标准,噩梦也远未结束。因为无数现有的软件,早已深度依赖于 Linux 特有的、非 POSIX 的功能,比如解析 /proc 文件系统、操作 cgroups 等。结果就是,即使有了 relibc,你依然需要为这些软件挨个打上无数的“补丁”。文章提到,仅 Redox OS 的官方“软件食谱 (Cookbook)”中,就包含了约 70 个这样的补丁。
第四层:编译器的“先有鸡还是先有蛋”
你想在新 OS 上原生编译软件吗?那你首先需要一个能在这个 OS 上运行的编译器,比如 GCC、Rustc 或 Go 编译器。但问题是,移植编译器本身,就是所有软件移植任务中最复杂、最艰巨的一种。它需要处理极其底层的二进制格式、链接方式和系统调用。这形成了一个经典的“鸡生蛋还是蛋生鸡”的困局。
第五层:语言生态的“次元壁”
如果说移植 C 语言程序还只是“困难模式”,那么移植那些拥有自己庞大生态的现代语言程序(如 Rust, Go, Node.js),则是“地狱模式”。这些语言的包管理器(如 Cargo, Go Modules)会从中央仓库下载海量依赖,你很难像修改 C 代码一样,通过一个简单的 .patch 文件来修复所有问题。唯一的办法,往往是去 fork 无数个核心依赖库,然后逐一修改,这几乎是一项不可能完成的任务。
小结:生态,才是那座无法逾越的山
当 Wildan 经历过这一切后,他得出了文章开头的那个结论。
一个操作系统的成功,或许 20% 在于内核的精巧,而 80% 在于其上能否运行用户想要的所有软件。 后者,那个由编译器、标准库、第三方包、应用软件共同构成的庞大生态,才是真正的、几乎无法被复制的“护城河”。
这就像建造一座城市。你可以设计出最宏伟、最先进的市政厅(内核),但如果没有配套的道路、水电、学校、医院、商店(软件生态),这座城市就永远只是一座无法住人的“鬼城”。
这篇文章并非是要劝退所有对底层技术抱有热情的开发者。正如作者所说,如果你想学习,从零开始或加入 Redox 这样的项目,会是一段极其宝贵的经历。但如果你想构建一个被广泛采用的新 OS,你面对的将不仅仅是技术挑战,更是一个需要说服全球成千上万开发者为你“投票”的社会学难题。
这或许就是对那些仍在坚持构建新 OS 的探索者们,我们应该报以最高敬意的原因。因为他们挑战的,不仅仅是代码,更是一整个时代建立起来的软件文明。
资料链接:https://blog.wellosoft.net/writing-a-brand-new-os-is-almost-impossible-by-now
你的Go技能,是否也卡在了“熟练”到“精通”的瓶颈期?
- 想写出更地道、更健壮的Go代码,却总在细节上踩坑?
- 渴望提升软件设计能力,驾驭复杂Go项目却缺乏章法?
- 想打造生产级的Go服务,却在工程化实践中屡屡受挫?
继《Go语言第一课》后,我的《Go语言进阶课》终于在极客时间与大家见面了!
我的全新极客时间专栏 《Tony Bai·Go语言进阶课》就是为这样的你量身打造!30+讲硬核内容,带你夯实语法认知,提升设计思维,锻造工程实践能力,更有实战项目串讲。
目标只有一个:助你完成从“Go熟练工”到“Go专家”的蜕变! 现在就加入,让你的Go技能再上一个新台阶!
商务合作方式:撰稿、出书、培训、在线课程、合伙创业、咨询、广告合作。如有需求,请扫描下方公众号二维码,与我私信联系。
评论