揭秘:前操作系统开发者转型浏览器领域的心路历程

发表时间: 2024-06-04 16:43

从入职大厂到后来误入歧途,从洗心革面到以一己之力全职开发一款操作系统,又到果断辞职全身心投入到浏览器项目上,势要为自己开发一款操作系统、跨平台 Web 浏览器的 Andreas Kling 正在开启人生的下一篇章。


整理 | 苏宓
出品 | CSDN(ID:CSDNnews)

这位名为 Andreas Kling 的程序员,自 2019 年每次更新自己的最新动态时,似乎都能登上国外科技网站的热榜,成为众人关注的焦点。

不是因为他堪比 Linux 之父 Linux Torvalds 那样有名,也不是因为他是来自某大厂的高管,更不是因为他研发的某样工具直接改变了世界,其实严格来看,他只是一名普通的程序员。

近日,他在职业生涯中又做了一个大胆的决定,辞去自己亲手创建的 SerenityOS 操作系统项目的 BDFL(终身仁慈独裁者,Benevolent Dictator For Life,是少数开源软件开发者所拥有的头衔,他们通常是某一项目的创始人,并在该项目社区出现争议时拥有最终的决定权)职务,把自己研发的浏览器项目 Ladybird 从操作系统中分叉出去,让其成为一个真正的跨平台浏览器。

这也让人好奇,为什么 Andreas Kling 的一举一动就能受到如此高的关注度,我们不妨从他过往的经历中一探究竟。


Andreas Kling:一位从大厂离职、到误入歧途、迷途知返的程序员

Andreas Kling,是一位来自瑞典的程序员。在他的自述中,他用了“终身编程爱好者、有志成为通才”来描述自己。

在外人看来,作为一个程序员,他本来有非常好的发展前景,毕竟曾任职于苹果(2011-2017 年)、诺基亚(2009-2011 年)等大厂,主要负责基于 WebKit 的 Web 浏览器开发工作,非常擅长使用 C++。“现在的你,很有可能正在使用一个因为我而速度稍快的浏览器阅读本文”,他在博客介绍页写道。

不过,遗憾的是,从苹果离职后不久的 Andreas Kling 误入歧途,直到 2018 年 10 月,他从当地一家戒毒所完成了为期 3 个月的康复计划。

出来之后,Andreas Kling 失业了。他与家人住在一起,无所事事。由于没有药物或其他恶习可以打发时间,他觉得日子太过漫长了。

起初,Andreas Kling 努力寻找一些事情来打发时间。他在学校待过一段时间,发现那里并不适合自己。

「完成药物成瘾康复计划几个月后,我的心态非常开放,想要挑战自己,找到提升自己的方法。毒品让我的生活充满了秘密和谎言,但那样的生活已经结束了。虽然我不确定下一步该怎么做,但我对秘密已经厌倦,以至于我想不出还有什么可以改变的。

我需要一些东西来打发空闲时间,同时学习如何过上正常的生活,而事实证明,构建一个新的操作系统是一项恰到好处的任务」,Andreas Kling 说。

这也是 SerenityOS(“宁静”操作系统)操作系统的由来,Andreas Kling 希望借助“宁静的祷告”,或许能帮助自己更加坚信未来要走的路


6 个月,开发出一款操作系统的原型

Andreas Kling 对开发 SerenityOS 的目标是——「构建一个完整的桌面操作系统,最终用作我的日常驱动程序」。

结合其个人最喜欢的两种计算机模式,即 20 世纪 90 年代的 GUI 和 21 世纪末 Unix 的简洁命令行,Andreas Kling 将 SerenityOS 开发成一款适用于 x86 计算机的图形类 UNIX 操作系统。

在开发过程中,Andreas Kling 表示:「在苹果公司任职的时候,我真的很喜欢他们大部分软件都是在同一个“屋檐”下制作的感觉。这不仅使所有的软件可以超紧密集成,还可以给开发者更大的创作空间。我想我可以尝试把同样的感觉带到开源世界,所以我决定 SerenityOS 不会是一个个拼凑起来的软件包,我们正在建立自己的一切,包括从内核到 Web 浏览器,以及两者之间的一切。」

在此之下,通过不断地迭代,Andreas Kling 仅用了半年的时间,研发出了 SerenityOS 的 Demo。

2018 年 10 月 10 日经过六个月的独立工作之后,Andreas Kling 将其发布到网上,并邀请其他人参与,这也是他在 GitHub 上首次提交了代码
https://github.com/SerenityOS/serenity)

与此同时,Andreas Kling 为了让自己更加忙碌,也为了记录,他开始制作 YouTube 视频来记录项目开发的进度。

Andreas Kling 表示,“当时,我还在独自从事这个项目,我认为视频可能是一种引人入胜的形式。最初的视频都是简单的编程课程,充满了笨拙。我犯了很多错误,在纠正错误时含糊不清。随着时间的推移,我进步了,并且开始每月制作 SerenityOS 更新视频——这一传统至今仍在延续。”

直至今日,Andreas Kling 在 YouTube 上视频量达到了 1056 个,拥有 4.58 万的订阅者。

而 SerenityOS 从由 Andreas Kling 一个人全职参与的项目发展到数百人合作开发的开源社区。在 GitHub 上,SerenityOS 项目从 0 获得了 29.1k Star,Fork 数量达 3.1k。

就 SerenityOS 的功能而言,其也从一个用 C 语言编写而成的小 x86 内核起步,逐渐能够在虚拟机中运行、拥有 GUI、生成多个“guitest”进程、增加壁纸支持、使用 ping 命令、构建一个 IRC 客户端、实现了一个贪吃食的游戏、编译小的 C 程序......

时下,Andreas Kling 删除了 32 位 x86 端口,使 SerenityOS 成为仅限 64 位的操作系统。还增加了对更多流行媒体格式的支持,如 VP9、WebP、JPEG、JPEG XL、TinyVG。此外,还能在 SerenityOS 上玩《超级马里奥 64》。

更值得一提的是,Andreas Kling 做到了其最初的承诺,会从内核到 Web 浏览器,构建 SerenityOS 所需的一切。他于 2022 年推出了一个名为 Ladybird Web 开源浏览器(https://github.com/SerenityOS/ladybird),进一步增加 SerenityOS 系统的完善性。

不止于此,Ladybird Web 浏览器的一大特性是跨平台,这也意味着 Andreas Kling 等人的开发将跳出 SerenityOS 的桎梏。


跳出 SerenityOS 的桎梏,一个新的跨平台浏览器项目 Ladybird 诞生

提及 Ladybird Web 浏览器的开发,在 Andreas Kling 最初设想中,Ladybird 是作为 SerenityOS 系统的 LibWeb 和 LibJS 浏览器引擎调试工具,它让人们可以更轻松地在 Linux 上工作。

LibWeb 和 JavaScript 引擎 LibJS 是 Andreas Kling 分别于 2019 年、2020 年开发的引擎。

随着 Ladybird 功能不断完善,两个月过去之后,Andreas Kling 发现自己在大部分浏览器开发工作中都在使用 Ladybird。

于是,本着“建造一些有朝一日可能对更多人有用的东西”的想法,他开始将 Ladybird 定位改为一款“跨平台浏览器”。

Andreas Kling 表示,浏览器和库都是用 C++ 编写的,主要技术栈包括:

  • Ladybird:选项卡式浏览器 GUI 应用程序

  • LibWeb:Web 引擎,多种标准:HTML、DOM、CSS、SVG……

  • LibJS:ECMAScript 语言、运行时库、垃圾收集器

  • LibGfx:2D 图形、文本渲染、图像格式(PNG、JPG、GIF 等)

  • LibRegex:正则表达式引擎

  • LibXML:XML 解析器

  • LibWasm:WebAssembly 解析器和解释器

  • LibUnicode:Unicode 支持库

  • LibTextCodec:文本编码转换库

  • LibMarkdown:Markdown 解析器

  • LibCore:其他支持功能(I/O、日期时间、MIME 数据……)

  • Qt:跨平台 GUI 和网络

LibWeb 有一个 Platform 层,Ladybird 在这层为事件循环、计时器、系统字体设置等注入 Qt 支持代码。Ladybird 使用 Qt 进行联网,因为多进程的 RequestServer 系统在 SerenityOS 之外还没有使用。同时,Ladybird 是单进程的,“所有这些都是暂时的,并且会随着时间而改变。”

Ladybird 在 2-clause BSD 许可下是免费的,“没有人可以购买该项目,但你可以通过参与开发来改进浏览器”。

那时 Andreas Kling 表示,「我将“真正独立的跨平台浏览器”添加到我的个人目标列表中。这也是对任何可能有兴趣开发全新浏览器的人的邀请。」

随着对 Ladybird 的投入,这一项目可以在 Linux、macOS、Windows (WSL) 和 Android 上运行,同时也获得了不少业界人士对于这款浏览器开发的资金支持,包括来自 Shopify 的 100,000 美元赞助、两笔匿名的 100,000 美元捐款以及来自德国公司 ohne-makler.net 的 10,000 美元赞助。


两年之后的今天,从操作系统到浏览器

也就是从这时起,Andreas Kling 几乎把全部精力都放在了 Ladybird 上。

“时光飞逝,现在我已经不记得上次在 SerenityOS 中从事与 Ladybird 无关的工作是什么时候了”,Andreas Kling 说。

他表示,到目前为止,SerenityOS 项目及其社区一直处于两个团体共享所有资源和基础设施的状态:

  • 一个群体主要关心构建桌面操作系统。

  • 另一个群体主要关心构建跨平台的网络浏览器。

过去,兴趣之间有足够多的重合,因此分享一切是有意义的,但大家对这两个项目的共同兴趣已经逐渐减少。

现在 Andreas Kling 想要做出一些改变,「为了简化 Ladybird 的开发,我将它从 SerenityOS 中分叉出来,形成一个新的、独立的顶级项目。

我热爱 SerenityOS,也热爱围绕它形成的社区。我不想再因为分心而成为 BDFL 而阻碍它的发展。这也是我决定辞职的原因。从即日起,SerenityOS 现在由其维护者小组负责。他们是一群可爱的人,我相信他们会好好照顾它的

对我来说这是一个困难且情绪化的决定,但我相信这将为两个项目带来更好的未来。

那么,这对于 Ladybird 来说意味着什么?

Andreas Kling 表示:

  • Ladybird 开发现在在 GitHub 上的一个新存储库中进行(https://github.com/LadybirdWebBrowser/ladybird)。

  • 日常交流转移到新的Ladybird Discord 服务器(https://discord.gg/nvfjVJ4Svh)。

  • Ladybird 现在主要针对 Linux 和 macOS 平台而发。不再以 SerenityOS 为目标。

  • 与 SerenityOS 不同的是,Ladybird 将采用宽松的 NIH 政策(而不是“禁止第三方代码!”),并将利用更大的 OSS 生态系统。

那么,这对 SerenityOS 意味着什么?实则:

  • 对于构建 Web 浏览器的过度关注将从该项目中消失。

  • “与朋友一起破解有趣的软件”再次成为主要焦点。

  • 接下来会发生什么取决于社区!

Andreas Kling 进一步解释道,“在有人问之前,我先说明一下,这次改变背后没有什么特别之处。我只是意识到两个大项目太长时间都挤在一个地方,让人感到很不舒服,而我所做的我相信会让所有参与的人生活得更好。

我要衷心感谢所有与我一起参与这些项目的人。你们都帮助我保持清醒,这是我一生中最美好的时光!现在,我将 SerenityOS 交给你们,让你们自己动手。

我对这两个项目的未来感到兴奋,现在我们都可以更好地专注于我们的主要兴趣!”


写在最后

对于 Andreas Kling 最新选择让浏览器项目从操作系统 SerenityOS 中“单飞”的做法,有人理解:

我完全尊重这些理由,它们合乎逻辑,说得也很好。但希望人们对 SerenityOS 的兴趣不会因此而减弱。Kling 非常善于通过他的 YouTube 视频吸引人们的兴趣,在视频中他会深入讨论错误修复和功能开发。

当然,对于开放网络来说,浏览器是最有潜力的,甚至是迫切需要的,但我还是希望有一天能每天使用 SerenityOS。它的美学和整体架构让我梦想成真。

Windows 正在迅速衰落,而 Linux 缺乏整体元素,因此拥有一款能够将最伟大的视觉设计语言(20 世纪 90 年代中后期的界面指南)与强大的 Unix shell 相结合的产品将为桌面计算带来巨大的好处。(是的,OSX 拥有出色的现代用户体验,具有 Unix 基础,但不是开源软件,也不是大众可以承受的)。

另一方面,有人对其放弃 SerenityOS 管理同样感到惋惜,甚至担心“SerenityOS 现在有点注定要失败了?说实话,我从未见过这种举动会有好结果。即使没有参与,拥有原创者坐阵项目,也会对项目的受欢迎程度大有裨益。”

不过,在 Andreas Kling 个人看来,通过放弃 SerenityOS 作为目标,Ladybird 浏览器可以自由使用目前无法在 SerenityOS 上运行的第三方库。这意味着 SerenityOS 无论如何都无法在这种新状态下集成 Ladybird,因为 SerenityOS 有严格的“禁止第三方代码”政策。

“随着时间的推移,我也期待看到 Ladybird 未来会作为 SerenityOS 的一个端口重新回归”,Andreas Kling 说。

来源:https://awesomekling.substack.com/p/forking-ladybird-and-stepping-down-serenityos

https://awesomekling.github.io/Ladybird-a-new-cross-platform-browser-project/