“我辞职了,决定全职去开发我的操作系统!”
The following article is from CSDN Author 苏宓
读万里书,行万里路。本文作者在积攒了多年的工作经验之后,毅然决定辞职,开启了全职开源开发者的道路,并围绕一手创建的底层 SerenityOS 操作系统,为自己的梦想而开拓新的天地。
什么样的人才能被称之为顶级程序员?
Linus Torvalds 闭关一个周末,隔周他宛如变戏法般地带着 Git 从天而降;Brendan Eich 临危受命,在 10 天内完成了 JavaScript 的第一个版本......
顶级的程序员或许平凡、或许脾气暴躁、或许生活随心,但是他们的自驱力、创造力、毅力都将隐藏无限的潜力。
今天,我们要提及的主人公 Andreas Kling 就是这样的一位程序员,虽然截止目前其个人及创建的技术知名度并不像 Linux 等项目一样广为人知,但是他正在追逐梦想的道路上散发万丈光芒,引人注目,未来可期。
Andreas Kling 是谁?
Andreas Kling,是一位来自瑞典的程序员,他也是一位终身的编程爱好者。他曾任职于苹果、诺基亚等公司,主要负责基于 WebKit 的 Web 浏览器开发工作,非常擅长使用 C++。
近日,他发表了一篇《I quit my job to focus on SerenityOS full time》文章,揭晓了自己过去近三年的时间里正在做的一些事情,并宣布从 2021 年 5 月 28 日起,他结束了“打工人”的职业生涯,专注于自己一手创建的操作系统工作:
2018 年 10 月,Andreas Kling 从当地一家戒毒所完成了为期 3 个月的康复计划。时间结束后,他失业了,后来,他与家人住在一起,无所事事。
由于没有药物或其他恶习可以打发时间,他觉得日子太过漫长了。因此,他努力寻找一些事情来打发时间。他在学校待过一段时间,发现那里不适合自己。最终他又将关注点转向了编程,因为正如上文所述,他一直对编程有着浓厚的兴趣。
半年的时间,开发出操作系统的 Demo
对于 Andreas Kling 个人而言,更为底层的技术深深地吸引着他,因此在拥有一定编程经验的基础上,他开始自己尝试创建一些新的事物,譬如从头开始写操作系统——SerenityOS(“宁静”操作系统),之所以用这个名字来命名,是因为 Andreas Kling 彼时较为担心自己的未来,借助“宁静的祷告”或许能帮助其更加坚信自己未来要走的路。
而创建这款操作系统的初衷,Andreas Kling 表示是他想要供日常使用。SerenityOS 是一款适用于 x86 计算机的图形类 UNIX 操作系统。与此同时,基于热爱和喜欢,这款系统结合了一些传统操作系统的特性,如 20 世纪 90 年代的 GUI 和 20 年代末的 UNIX 命令行。
2018 年 10 月 10 日,Andreas Kling 在 GitHub 上首次提交了代码:
https://github.com/SerenityOS/serenity
通过不断地迭代,SerenityOS 操作系统开始成型。对此,Andreas Kling 表示:“在苹果公司任职的时候,我真的很喜欢他们大部分软件都是在同一个”屋檐“下制作的感觉。这不仅使所有的软件可以超紧密集成,还可以给开发者更大的创作空间。我想我可以尝试把同样的感觉带到开源世界,所以我决定 SerenityOS 不会是一个个拼凑起来的软件包,我们正在建立自己的一切,包括从内核到 Web 浏览器,以及两者之间的一切。“
在此之下,Andreas Kling 仅用了半年的时间,研发出了 SerenityOS 的 Demo。
他是怎么做到的?
在 SerenityOS 内部,Andreas Kling 做了大量的工作,包括写了一个小的 ELF 可执行解析器、Ext2 文件系统浏览器、基于 SDL 的简单 GUI 工具包,还有一个 AK 实用程序库等等。
下面是 ext2 文件系统解析器在运行时的样子:
::> cd /home/andreas
::> ls -l
[VFS] ls ///home/andreas -> ext2fs 01:00000017
01:00000017 drwxr-xr-x 1024 2018-10-08 13:47:04 ./
01:00000016 drwxr-xr-x 1024 2018-10-02 23:43:49 ../
01:00000018 -rw-r--r-- 18 2018-10-02 23:44:09 file1
01:00000019 -rw-r--r-- 18 2018-10-02 23:44:14 file2
::>
作为底层基础软件,一款操作系统的研发并非想象中那么容易。对此,Andreas Kling 究竟是如何实现,接下来,我们不妨从其研发过程中来一探究竟。
Andreas Kling 开发 SerenityOS 的第一年
2018-10-10:Serenity 首个截图
2018-11-08 :Serenity 在虚拟机中运行
2019-01-09:在 SDL 帧缓冲区中测试 Widget
2019-01-10:Serenity 首次启动 GUI
2019-01-21:生成多个“guitest”进程
2019-02-03:添加 FontEditor、Clock 等
2019-02-08:增加壁纸支持
2019-02-11:第一次实现菜单,以及一个早期的 FileManager
2019-02-28:实现了 ProcessManager 的早期版本(今天称之为 SystemMonitor)
2019-03-12:使用 ping 命令
2019-03-15:当 TCP 功能有起色时,开始构建一个 IRC 客户端
2019-03-29:使用 FileManager 驱动 tree 和 icon 视图的开发
2019-04-11:实现 VisualBuilder 的第一个屏幕截图,它的 GUI 设计来源于 Visual Basic 的启发
2019-04-20:实现了一个贪吃蛇的游戏
2019-04-22:半成品的 GCC,只能编译小的 C 程序
2019-06-14:构建一个简单的绘画应用程序 PaintBrush
2019-07-14:构建了一个桌面声音合成器 Piano
2019-08-27:受微软启发,改善菜单栏外观
2019-09-09:拥有了 DOOM
2019-09-29:致力于在 LibHTML 中实现 CSS
2019-10-10:在 Serenity 的浏览器中查看此网页!
Andreas Kling 开发 SerenityOS 的第二年
2019-10-31:浏览器中的 hover 选择器
2019-11-30:在 HackStudio IDE 中使用“文件查找”
2019-12-30:SerenityOS 在 36c3(第 36 届 Chaos 通信大会)中被挑战者入侵
2020-01-31:采用两个类似 OpenBSD 的系统调用——pledge()和unveil()
2020-02-22:Profiler 中的内核符号
2020-02-29:一个简单的 HTTP 服务器
2020-03-31:Web 浏览器支持 JavaScript
2020-05-30:使用 TLS(和 HTTPS)访问更多 Web 网站
2020-06-22:自己的 JPEG 解码器
2020-06-30:致力于 ACID2 合规性测试修复
2020-07-27:使用用户空间模拟器捕获内存错误
2020-08-30:实现更多的桌面游戏(国际象棋和2048)
2020-09-22:HackStudio IDE 中的 Git 集成
2020-09-29:玩转 Excel
2020-10-10:制作这个网页!
“我辞职了,未来将全力构建这款操作系统”
或许在很多人看来,Andreas Kling 有着一段“不太光彩”的过去,但迷途知返后的他用自己的实际行动在证明,错掉的人生可以重新开始,也可以焕发精彩。
经过近三年的开发与维护,SerenityOS 已经获得了业界一定的认可与支持,越来越多的开源开发者加入其中,而它也从星星点点逐渐成长为一个充满活力的开源社区,截止目前,该系统也支持一些包括《Quake》、《Zelda》、《VVVVVV》等经典游戏。
除此之外,Andreas Kling 在开发 SerenityOS 项目的同时,也会录制一些编程教程并将其发布到 YouTube 平台(https://www.youtube.com/andreaskling)。截至目前,在 YouTube 上,Andreas Kling 已发布超过 700 个视频教程,获得了 2.54 万的订阅者。
如今,Andreas Kling 也正式宣布辞掉原有的全职工作,专心把 SerenityOS 运营壮大。正如 Andreas Kling 所说,“在许多方面,我们仍然只是开始。”
对此,网友也纷纷表示支持:
@Overlord Maniac:辞掉自己的工作,去追逐梦想,需要很大的勇气。我尊重,希望这个是值得的。不过,为什么不改做兼职工作,就像很多自由职业者一样,每周 10-20 小时。
@Mathias Jakobsen:恭喜 Andreas Kling !祝这次“新”冒险好运。能够在开源项目上支持自己决定是很棒的,你激励了我们所有的人。
@dpbriggs:我强烈建议大家去看一下他的 YouTube 频道(https://www.youtube.com/c/AndreasKling/videos)。他是一个令人难以置信且极具思想的人,在保持专注方面提供了很好的经验分享。
我认为他是一位导师,他的软件方法让我真正产生共鸣。他非常关注软件质量,但我们也明白他不可能一次让所有事情都完美无缺。这种方法帮助我摆脱了项目和工作中的决策难题。
还有许多我没有提到的内容,其实都能从他的视频中学到,无论是调试内核及引导程序、移植、编写实时反馈 GUI 编辑器、实现系统调用,还是实现动态加载器,这一切视频他都拥有。
GitHub 地址:https://github.com/SerenityOS/serenity/
参考:https://www.serenityos.org/happy/1st/
https://www.serenityos.org/happy/2nd/
https://awesomekling.github.io/I-quit-my-job-to-focus-on-SerenityOS-full-time/
- EOF -
觉得本文有帮助?请分享给更多人
推荐关注「算法爱好者」,修炼编程内功
点赞和在看就是最大的支持❤️