中國能不能寫出作業系統?

架構設計頻道發表於2018-11-02

作者:稻草魚       連結:

來源:知乎/著作權歸作者所有。轉載請註明出處。

謝邀,我確實想在這個事情上說幾句。

針對題主的問題:“中國能不能寫出作業系統?”,這個問題本身很寬泛。以飛機作類比,從紙飛機、玩具飛機、消費級無人級,再到飛豹,J10,J11,J20,再到B2、F22、F35等等。如果你問“中國能不能造出飛機?”,答案肯定是可以造的,但造出來的飛機可能跟別人有20~50年的差距。同樣的,“中國能不能寫出作業系統?”,答案也肯定是能。因為一個幾百幾千行程式碼的micro tiny os kernel你也可以說它是“作業系統”,一個像Windows這樣光程式碼就有5000萬行,全球使用者數十億,擁有巨無霸生態的也可以稱為作業系統,中國肯定產生過很多micro os kernel,tiny os kernel。

所以借這個題目,我們不妨更進一步,考慮另一個問題:“中國能不能寫出一款比肩windows/mac os/linux/android,獲得商業上巨大成功、廣泛應用的作業系統?”

不能給出肯定回答,也不敢否定。但我傾向於回答“現階段不能”。

瞭解一下作業系統史,或者上過大學作業系統課程,你會發現,很多作業系統原型,或者設計思想,都來源於學校或研究院,比如minix/linux/bsd等等。實現一個作業系統是一項紛繁複雜的工程,涉及cpu架構指令、資料結構、演算法、編譯原理、記憶體管理、程式管理等等內容,而且在此基礎之上,還需要各種各樣的應用軟體:資料庫、工程、設計,有了這些軟體作業系統才會有人用,有人用了才能集廣大人民的智慧開發更多的軟體,反過來促進更多的人用,形成良性迴圈。

當今,windows/mac os/linux/android已大行天下,形成了一個比四大洋還深的護城河,從頭開發一個能比肩這些作業系統的競品,真比登天還難。

所以,要做這些事情,需要花費巨大的人力、物力、財力。這不是幾個人的意志力就能搞定的事情,而是需要整個社會達到一定階段。

中國的哪些群體、部門、企業可以有資源開發作業系統呢?首先說企業,企業家都是逐利的,我不認為企業願意投入五年的時候,花費巨大的代價去搞這麼一個看不到前途,看不到效益的事情。再說研究院,中國的眾多研究院,除了醫學,都在往高大上不接地氣不著調的路子走,所以我不認為他們會去做這個事情。

然後就是高校,我想重點說一說高校。

【我的寫os核心經歷】

我高中開始寫程式碼,從2008年讀本科,當時受到倪光南關於“中國人要有自己的作業系統”的感召,想寫一個小型的os核心,然後在學校裡搭一個svn服務,把os核心程式碼放上去,採用校內開源的方式,逐漸去完善這個os核心。相信每屆學校都會有牛人,把牛B的思想加進來,最終走出一條自主作業系統的路。

大學學生是最有精力、資源做這個事情的人。他們有大把的時間、精力,而且學校會教授作業系統、資料結構、演算法、編譯原理、資料庫等基礎課程。如果學校有一個自己的os核心,在上課的時候結合這個os核心給學生講課,效果一定非常好,讓學生們能親身實踐這些比較“虛”的課程,一定會吸引不少人參與這個專案。最後透過長期的工程管理,會讓這個作業系統逐漸成熟豐滿,並且在某一時刻走向工業化。

但是,我想說但是,等我開始做這件事,才發現,在中國的大學,懂程式設計的人非常少,既使計算機學院,也找不到幾個能寫程式碼的,更不容說能寫os核心的。但我找了8個技術稍微好點的同學,我們每人分一塊領域,比如io管理,記憶體管理,程式管理,研究linux核心,各人學習一塊,然後每週做報告。

但是,經過兩個月我就發現,太難了,大家對os核心一點都不理解,而且還不願意學。只能作罷,於是我決定,我自已來。

整整大半年的時間,我白天上課,做專案,晚上熬到2點多,讀IBM BIOS中斷手冊,趙炯的深入理解linux作業系統,intel的cpu指令手冊,minix/orange/linux v0.12原始碼,各種裝置的指令手冊,最後花了3個月時間,寫出了一個能在模擬器上跑的os tiny核心(這段歷史距今有7-8年曆史,記不太清了)。

然後,我想了很多辦法把這個os核心推廣出去,讓同學們都知道,然後參與進來,但其中的淚不知有多少,比如:

1、參加學校創業大賽,評委只有一個計算機老師,並且是計院副院長,其他人不發問不說話,看樣子是完全不懂。這位計算機副院長評委問我:你調了什麼api?我回答,我寫的是os核心,如果說調了api,bios中斷算一個吧。然後我感覺他沒聽懂,他又問了一遍,你要回答你到底調了什麼api?我徹底蒙了,又說了一遍答案。然後他又問,你這個有什麼用?我說有幾個用處。。。,我感覺他還是沒聽懂。最後給了我一個三等獎,而我另外一個只做了一個月的專案,拿了個一等獎。

2、想搭建svn服務,跑計院申請機器,苦苦請求之下給了一臺,但不給固定ip,跑宣傳部申請域名,說不給申請,因為他們聽上去感覺我的這個事情沒什麼用。讓計院領導幫忙搞定,計院領導也說你這個沒什麼用,讓我自己搞。。。最後只能用一個只有動態ip的伺服器搭建了一個svn服務,把os核心原始碼放上去。

3、找一些聽說比較牛的學弟學妹們,給他們講os核心原始碼,他們一臉懵B。

不知不覺,到了我大四,雖然在我拿到畢業證之後還在為此事奔波,但我最終要離開,於是找了個人交代了下幫我維護svn伺服器,拜拜。

然後是讀研三年,發現新的985/211大學也一個尿性,想做這件事,沒人會care,大家為了發paper,都在扯各種高大上的東西,都在為生計奔波,我都不好意思提os核心了。後來我想讀博,去大學當老師,繼續我的想法,但一想大學裡都是這個鳥樣,我一個也改變不了,隨他去吧。

說了這麼多,我把os核心原始碼貼一下,後來我放到github上了:ahhuiyang/LycheeOS

【總結】

我傾向於說“現階段不能”,是因為,縱觀計算機發展史,許多計算機基礎技術往往產生於高校,比如作業系統,資料庫,搜尋引擎,比如國外的卡內基梅降,哥倫比亞,stanford,berkerly等,無數的技術在這裡萌芽,成熟,然後被學生帶到工業界。比如Google,開始是stanford兩個學生在學校裡做實驗搗鼓出Google的核心演算法PageRank,然後退學用這個演算法去建立了Google。但在中國,起碼在我所見的兩個高校,計算機學院領導、老師完全忽視程式碼,不注重儲存、維護學生的程式碼成果,沒有一個專案能在學校裡紮根並得到很好的發展,這簡直是計算機學院最大的恥辱。在這種環境下,不可能產生作業系統、資料庫、編譯器,永遠都不可能。

另外,像其它行業一樣,中國的學生們,在初中高中,老師、家長一直給學生灌輸“計算機就是洪水猛獸”這個觀念,什麼碰了電腦全毀了之類,許多計算機學院大一新生甚至連計算機基本操作都不會,幾乎都是到了大學才開始學習計算機專業知識。試問,這種環境出來的計算機學生,如何能學好計算機。電腦是一項偉大的工具,如同任何一項工具一樣,我們應該從小教育孩子合理使用,如果要學程式設計,初中、高中就開始學起,任何一項能力,必須經過長期的訓練和堅持,才能達到牛B的程度,大學課堂上的知識量估計只能佔10%。我很慶幸我高中就開始學程式設計,寫程式碼了,一路走來,我發現我的路越走越對。

最後,就像我上面說的,windows/mac os/linux/android已經把護城河挖的很深了,在相同的領域競爭,按照傳統作業系統的模式做國產作業系統,我個人認為幾乎沒有機會。我們不但沒機會,在核心技術的能力上還比較欠缺。我覺得可以從中小學生開始啟蒙程式設計教育,儘早培養更多的人才。等這些人進入大學就有知識有意識去鑽研計算機核心計術,加上大學良好的環境和充足的時間,還是很有可能發展出下一代作業系統(比如AI作業系統)的原型。再利用高校優勢,不斷吸收牛B的研究成果和思想,同時帶動cpu、硬體的發展,帶動產業鏈上下游核心技術,走出一條獨特的路,說不定還有希望能搞出一個有競爭力的東西出來。

來自 “ 稻草魚 ”, 原文作者:稻草魚;原文連結:https://www.zhihu.com/question/274446721/answer/377395235,如有侵權,請聯絡管理員刪除。

相關文章