世界上有个地方,这里的程序员似乎特别闲,特别喜欢开发操作系统。
这个地方就是北欧。
1991年,芬兰的程序员Linus Torvalds开发了Linux,现在已经统治世界。
2018年,瑞典程序员Andreas Kling为了戒除毒瘾,完全从头儿开始,开发操作系统。
在短短的半年时间内,单枪匹马构建了普通程序员几年,甚至十几年才能搞定的东西:操作系统内核、TCP/IP协议、GUI框架、进程管理器、文件浏览器、文本编辑器、界面编辑器、贪吃蛇游戏、绘图工具......
这个叫做宁静(SerenityOS)的操作系统,从操作系统内核到上层应用系统,全是重写的,太可怕了。
Linux的故事和SerenityOS的故事在下面的链接中可以看到:
Linux之父:财务自由以后,我失眠了
我决定辞掉工作,全职开发我的操作系统
今天我们要说的是另外一个芬兰人Ville M. Turjanmaa的惊世之作:MenuetOS
和Linux和宁静OS不同,MenuetOS的最大特点是:全部用汇编写成!
它小得惊人,最小的版本可以放到一个1.44M的软盘当中!
它快得惊人,即使是Intel Pentium MMX 200 MHz,启动时间也仅需5秒。
你可能会问:这是不是一个玩具操作系统啊?就像大学生的毕业设计一样。
其实判断一个操作系统是不是玩具,我觉得看这几个方面就行
1.有没有图形用户界面
简单的操作系统内核现在非常成熟,要想实现GUI,那工作量嗖嗖就上去了。
2.是否支持网络访问
MenuetOS实现了TCP/IP,也是用汇编写的!你看看它的API:
rax = 53rbx = 5rcx = local portrdx = remote portrsi = remote ip address ( in internet byte order )rdi = mode : SOCKET_PASSIVE or SOCKET_ACTIVE ( defined in stack.inc )The socket number allocated is returned in rax.
用汇编方式打开一个TCP socket ,太疯狂了。
MenuetOS也实现了自己的浏览器,虽然还比较简单。
3.能不能跑大型游戏
这是个重要指标,能看出它的兼容性和性能。
在MenuetOS上是可以跑QUAKE和DOOM的。
除此之外,它还实现了libc,网络驱动,图形驱动,声音驱动,API全部是汇编。
用汇编写过程序的朋友知道,这个玩意儿实在是太低级了。
一个小小的hello world就需要写一大堆代码,写出来的代码非常难以理解。
当然,汇编是操作系统启动时不可或缺的部分,但是一旦进入内核,就可以用C语言来写其他功能了。
但是MenuetOS的功能全部由汇编编写,实在是不可思议。
Linus写Linux是“Just for Fun”,他自己也没想到Linux将来会统治世界,能成为一种全新的开发模式。
Andreas开发宁静OS则是为了逃离毒瘾,Ville M. Turjanmaa用汇编写MenuetOS,是因为汇编性能高。
他发现Linux中那些C/C++写的组件用汇编重写时,性能可以提升10%~40%,于是就开始重写了。
在我们看来,这纯属于吃饱了饭没事干,996那么累,下班了打打游戏,刷刷短视频多好。
写什么操作系统嘛!给钱吗?
有开源免费的Linux在前,再写个操作系统有啥用?还用汇编?自己折磨自己?
但是Ville M. Turjanmaa根本不管这些,MenuetOS从2000年开始开发,打磨了整整15年以后,才发布1.0版本。
然后1.02、1.05、1.15、1.21...... 直到2024年的1.51版。
在汇编操作系统这条道路上,Ville M. Turjanmaa走了24年,也没看到他从中赚到什么钱。
可以说,没有巨大的热情、兴趣,没有充足的时间,绝对不可能坚持到现在。
这种不考虑利益,可以完全凭兴趣搞事情的环境,才是创新能不断涌现的土壤。
这可能就是北欧程序员能写出Linux、MySQL、Chrome V8、MineCraft、cURL、SSH、QT、Unity的重要原因吧!