架构师大咖
架构师大咖,打造有价值的架构师交流平台。分享架构师干货、教程、课程、资讯。架构师大咖,每日推送。
这位名为 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)。