标签 GCC 下的文章

内核之外的冰山:为什么说从零写一个操作系统已几乎不可能?

本文永久链接 – 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技能再上一个新台阶!


商务合作方式:撰稿、出书、培训、在线课程、合伙创业、咨询、广告合作。如有需求,请扫描下方公众号二维码,与我私信联系。

Go语言进入“后元老时代”?Ian Lance Taylor离职引发的思考:传承、创新与社区

本文永久链接 – https://tonybai.com/2025/05/11/ian-lance-taylor-leave-go

大家好,我是Tony Bai。

今天,Go 语言社区传来一个令人瞩目又略感“悲伤”的消息:Go核心团队的元老级人物 Ian Lance Taylor在为 Google 效力 19 年后,宣布离开。对于许多 Gopher 来说,Ian Taylor 的名字与 Go 语言的早期发展、GCC Go 前端 gccgo 的诞生,以及历时多年最终在 Go 1.18 实现的泛型设计紧密相连。

他的离开,不仅仅是一位资深工程师的职业变动,更像是一个时代的注脚,引发我们对 Go 语言发展阶段、团队演进以及开源项目生命力的深层思考。我们是否可以说,Go 语言正在步入一个“后元老时代”?这又意味着什么?在这篇文章中,我们就来简单聊聊。

一位“老兵”的自白与 Go 的变迁

在 Ian Taylor 的告别博文《Leaving Google》中,他回顾了自己从 2008 年加入 Go 团队(几乎与 Russ Cox 同期)至今的历程。他对自己角色的定位是:“追踪我所能追踪的关于项目的一切,并寻找需要帮助的领域。” 从为 GCC 添加 Go 前端以确保语言规范的清晰,到为 Google 内部构建系统和 SWIG 添加 Go 支持,再到推动泛型的落地,Ian Taylor 的贡献无疑是奠基性的

然而,最引人深思的是他对自己离开的解释:“Google has changed, and Go has changed, and the overall computer programming environment has changed. It’s become clear over the last year or so that I am no longer a good fit for the Go project at Google.” (谷歌变了,Go 也变了,整个计算机编程环境都变了。在过去一年左右的时间里,我已经越来越不适合谷歌的 Go 项目了。)

他还坦诚地剖析了自己的工作方式:“我能很快看到人们今天遇到的问题,以及他们明天会遇到的问题,并且我常常能够解决这些问题。但我迟迟未能看到那些能帮助人们做他们没有尝试去做、因此也没有错过的那些新事物的想法,比如 Go 模块代理和 Go 漏洞数据库。”

这段话意味深长。它似乎在暗示这么几点:

  • Go 项目的成熟:Go 已从最初“希望成为其他语言有用想法的范例”的探索期,成长为一个被广泛接受和使用的成熟语言。其面临的挑战和发展重心可能已从核心语言特性的打磨,转向生态系统的完善、开发者体验的优化以及应对更大规模应用的新需求。
  • 能力与阶段的匹配:Ian Taylor 所擅长的“解决已知和可预见问题”的能力,在项目早期至关重要。但随着项目的成熟,或许更需要能够预见和开创“用户尚未意识到其需求”的创新型人才。他提到的 Go module proxy 和 Go vulnerability database 正是这类创新的代表。
  • “新陈代谢”的必然:成功的开源项目如同生命体,核心团队成员的更迭是其发展过程中的自然现象。这并非衰落的信号,反而可能是项目适应新环境、焕发新活力的契机。

Go 语言的“后元老时代”:挑战与机遇并存

如果我们将 Go 的早期核心开发者(如 Rob Pike, Ken Thompson, Robert Griesemer, Russ Cox, Ian Lance Taylor 等)视为“元老”,那么随着时间的推移和人员的变动,Go 语言是否正在进入一个由新一代核心开发者主导,更加依赖成熟流程和广大社区贡献的“后元老时代”?

注:随着2024年Russ Cox将Go团队旗手的角色“让位”给Austin Clements,随着今天Ian Lance Taylor的离职,目前曾经的元老团队仅剩下Robert Griesemer一人还在Go核心团队一线为Go做着贡献。

我认为,这并非悲观的论调,而是对现实的客观描述,其中蕴含着独特的挑战与机遇:

传承

元老们奠定的设计哲学、简洁高效的文化基因、以及对工程实践的极致追求,是 Go 语言最宝贵的财富。如何在团队演进中确保这些核心价值不被稀释,并得到良好传承,是至关重要的。这需要完善的文档、清晰的设计原则、以及新核心成员对 Go 精神的深刻理解。

创新

Ian Taylor 的自省提醒我们,成熟项目也需要持续创新以避免僵化。他明确指出:“任何编程语言都不会‘完成’——编程环境总是在变化,语言必须进化,否则就会消亡。” 对于 Go 而言,未来的创新可能更多体现在:

  • 标准库的与时俱进:以适应新的编程范式和技术趋势(例如 AI/ML 对数据处理和并行计算的需求、云原生领域的新标准等)。
  • 工具链的智能化与易用性:如更好的调试工具、性能分析工具、更智能的 IDE 支持等。
  • 生态系统的拓展与治理:如何更好地支持和管理庞大的第三方库生态,确保质量和安全。
  • 拥抱新兴领域:在 AI 赋能开发、WebAssembly、IoT 等领域,Go 能否抓住新的增长点?

这些创新,可能需要不同于早期核心特性设计的思维模式和技能组合。

社区

随着 Go 的普及,其社区已经成为一支不可忽视的力量。在“后元老时代”,社区的角色可能愈发重要:
* 贡献的多元化:从代码贡献到文档撰写、Bug 反馈、布道推广,社区成员可以在各个层面参与。
* 人才的培养皿:许多未来的核心贡献者可能就来自于活跃的社区成员。
* 需求的反馈源:广泛的社区用户是检验语言特性和工具实用性的最佳试金石。
* 生态的共建者:第三方库的繁荣离不开社区的共同努力。

Ian Taylor 也表示“希望将来能再次为 Go 做出贡献”,这正体现了开源精神的魅力——即使离开官方团队,热爱和能力依然可以通过社区持续发光发热。

对我们 Gopher 的启示

Ian Lance Taylor 的离开,以及他对 Go 变迁的洞察,对我们每一位 Gopher 来说,都是一次宝贵的反思机会:

  1. 拥抱变化,持续学习:编程语言和技术环境在不断进化。作为开发者,我们需要保持好奇心和学习能力,跟上时代的步伐。
  2. 理解语言背后的哲学:学习一门语言,不仅要掌握其语法,更要理解其设计哲学和核心价值观。这有助于我们写出更“Go-idiomatic”的代码,并更好地参与社区讨论。
  3. 贡献的力量:无论能力大小,我们都可以通过各种方式为 Go 社区做出贡献。每一次提问、每一个 Bug 报告、每一篇分享,都是在为这个生态添砖加瓦。
  4. 思考个人与项目的匹配:Ian Taylor 的经历也提醒我们,个人职业发展需要考虑自身能力特点与项目/公司发展阶段的匹配度。

小结

Ian Lance Taylor 的离开,无疑是 Go 社区的一个损失,但更是 Go 语言走向更成熟、更开放阶段的一个标志。这不是一个时代的结束,而更像是一个新篇章的序曲。

Go 语言的未来,将由 Google 的持续投入、新一代核心开发者的智慧、以及全球数百万 Gopher 的共同努力来书写。

让我们向 Ian Taylor 致以崇高的敬意,感谢他为 Go 所做的一切!

传承不息,创新不止,社区共荣——这或许就是 Go 语言“后元老时代”最值得期待的图景。

  • Ian Taylor博文的地址:https://www.airs.com/blog/archives/670

Go的未来,你我共塑:聊聊你的看法

Ian Lance Taylor的离开标志着一个时代的节点,也开启了对Go语言“后元老时代”的无限遐想。你如何看待Go语言当前的演进阶段?在传承元老们奠定的基石之上,你认为Go在创新方面最需要突破的方向是什么?作为社区的一员,你又将如何参与到Go的未来建设中?

欢迎在评论区留下你的思考、祝福或任何想对Go社区说的话! 让我们一起见证并参与Go的下一个十年。

想与Go一同进化,系统把握语言精髓与未来趋势?

在Go语言迈入新发展阶段的今天,深刻理解其设计哲学、掌握核心原理、并洞察前沿创新(如AI与Go的结合)变得尤为重要。如果你渴望与Go一同成长,系统性地提升自己的技术认知,并与一群对Go充满热情的开发者深度交流…

那么,我的 「Go & AI 精进营」知识星球 正是这样一个为你搭建的平台!这里不仅有【Go原理课】带你追本溯源,【Go进阶课】助你技艺精进,【Go避坑课】让你从容应对挑战,更有关于Go未来发展方向的探讨和AI赋能的实践分享。我会亲自为你答疑解惑,你还能与众多优秀的Gopher思想碰撞,共同探索Go在“后元老时代”的无限可能。

立即扫码加入,与我们一起传承Go的优秀基因,拥抱创新,共建繁荣社区!

img{512x368}


商务合作方式:撰稿、出书、培训、在线课程、合伙创业、咨询、广告合作。如有需求,请扫描下方公众号二维码,与我私信联系。

如发现本站页面被黑,比如:挂载广告、挖矿等恶意代码,请朋友们及时联系我。十分感谢! Go语言第一课 Go语言进阶课 Go语言精进之路1 Go语言精进之路2 Go语言第一课 Go语言编程指南
商务合作请联系bigwhite.cn AT aliyun.com

欢迎使用邮件订阅我的博客

输入邮箱订阅本站,只要有新文章发布,就会第一时间发送邮件通知你哦!

这里是 Tony Bai的个人Blog,欢迎访问、订阅和留言! 订阅Feed请点击上面图片

如果您觉得这里的文章对您有帮助,请扫描上方二维码进行捐赠 ,加油后的Tony Bai将会为您呈现更多精彩的文章,谢谢!

如果您希望通过微信捐赠,请用微信客户端扫描下方赞赏码:

如果您希望通过比特币或以太币捐赠,可以扫描下方二维码:

比特币:

以太币:

如果您喜欢通过微信浏览本站内容,可以扫描下方二维码,订阅本站官方微信订阅号“iamtonybai”;点击二维码,可直达本人官方微博主页^_^:
本站Powered by Digital Ocean VPS。
选择Digital Ocean VPS主机,即可获得10美元现金充值,可 免费使用两个月哟! 著名主机提供商Linode 10$优惠码:linode10,在 这里注册即可免费获 得。阿里云推荐码: 1WFZ0V立享9折!


View Tony Bai's profile on LinkedIn
DigitalOcean Referral Badge

文章

评论

  • 正在加载...

分类

标签

归档



View My Stats