這個地方的程序員太閑了,寫了三個世界流行的操作系統(tǒng)!
世界上有個地方,這里的程序員似乎特別閑,特別喜歡開發(fā)操作系統(tǒng)。
這個地方就是北歐。
1991年,芬蘭的程序員Linus Torvalds開發(fā)了Linux,現(xiàn)在已經(jīng)統(tǒng)治世界。
2018年,瑞典程序員Andreas Kling為了戒除毒癮,完全從頭兒開始,開發(fā)操作系統(tǒng)。
圖片
在短短的半年時間內(nèi),單槍匹馬構(gòu)建了普通程序員幾年,甚至十幾年才能搞定的東西:操作系統(tǒng)內(nèi)核、TCP/IP協(xié)議、GUI框架、進程管理器、文件瀏覽器、文本編輯器、界面編輯器、貪吃蛇游戲、繪圖工具......
這個叫做寧靜(SerenityOS)的操作系統(tǒng),從操作系統(tǒng)內(nèi)核到上層應(yīng)用系統(tǒng),全是重寫的,太可怕了。
圖片
今天我們要說的是另外一個芬蘭人Ville M. Turjanmaa的驚世之作:MenuetOS。
圖片
和Linux和寧靜OS不同,MenuetOS的最大特點是:全部用匯編寫成!
它小得驚人,最小的版本可以放到一個1.44M的軟盤當(dāng)中!
它快得驚人,即使是Intel Pentium MMX 200 MHz,啟動時間也僅需5秒。
你可能會問:這是不是一個玩具操作系統(tǒng)啊?就像大學(xué)生的畢業(yè)設(shè)計一樣。
其實判斷一個操作系統(tǒng)是不是玩具,我覺得看這幾個方面就行。
1.有沒有圖形用戶界面
簡單的操作系統(tǒng)內(nèi)核現(xiàn)在非常成熟,要想實現(xiàn)GUI,那工作量嗖嗖就上去了。
2.是否支持網(wǎng)絡(luò)訪問
MenuetOS實現(xiàn)了TCP/IP,也是用匯編寫的!你看看它的API:
rax = 53
rbx = 5
rcx = local port
rdx = remote port
rsi = 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也實現(xiàn)了自己的瀏覽器,雖然還比較簡單。
圖片
3.能不能跑大型游戲
這是個重要指標(biāo),能看出它的兼容性和性能。
在MenuetOS上是可以跑QUAKE和DOOM的。
圖片
除此之外,它還實現(xiàn)了libc,網(wǎng)絡(luò)驅(qū)動,圖形驅(qū)動,聲音驅(qū)動,API全部是匯編。
圖片
用匯編寫過程序的朋友知道,這個玩意兒實在是太低級了。
一個小小的hello world就需要寫一大堆代碼,寫出來的代碼非常難以理解。
圖片
當(dāng)然,匯編是操作系統(tǒng)啟動時不可或缺的部分,但是一旦進入內(nèi)核,就可以用C語言來寫其他功能了。
但是MenuetOS的功能全部由匯編編寫,實在是不可思議。
Linus寫Linux是“Just for Fun”,他自己也沒想到Linux將來會統(tǒng)治世界,能成為一種全新的開發(fā)模式。
Andreas開發(fā)寧靜OS則是為了逃離毒癮,Ville M. Turjanmaa用匯編寫MenuetOS,是因為匯編性能高。
他發(fā)現(xiàn)Linux中那些C/C++寫的組件用匯編重寫時,性能可以提升10%~40%,于是就開始重寫了。
在我們看來,這純屬于吃飽了飯沒事干,996那么累,下班了打打游戲,刷刷短視頻多好。
寫什么操作系統(tǒng)嘛!給錢嗎?
有開源免費的Linux在前,再寫個操作系統(tǒng)有啥用?還用匯編?自己折磨自己?
但是Ville M. Turjanmaa根本不管這些,MenuetOS從2000年開始開發(fā),打磨了整整15年以后,才發(fā)布1.0版本。
然后1.02、1.05、1.15、1.21...... 直到2024年的1.51版。
在匯編操作系統(tǒng)這條道路上,Ville M. Turjanmaa走了24年,也沒看到他從中賺到什么錢。
可以說,沒有巨大的熱情、興趣,沒有充足的時間,絕對不可能堅持到現(xiàn)在。
這種不考慮利益,可以完全憑興趣搞事情的環(huán)境,才是創(chuàng)新能不斷涌現(xiàn)的土壤。
這可能就是北歐程序員能寫出Linux、MySQL、Chrome V8、MineCraft、cURL、SSH、QT、Unity的重要原因吧!