為什麼除了 Microsoft 以外的開發者都用 Linux / Unix 內核而不像 Microsoft 一樣自行開發內核?

現在除了 Microsoft,再優秀的公司和系統,都是基於Linux開發、繼續Unix開發,鮮有像微軟那樣,直接開發自己的內核。

這是為什麼呢?

——————————————————————————————

感謝 @馮東 的回答。另外有個問題,「在應用軟體形成標準化之後,特別是 Web 流行之後」是不是說,NT內核的東西在現如今工程化標準化的軟體開發領域內,只會越來越被邊緣化,照這樣的勢頭髮展下去,是不是Linux內核會成為全球唯一的、大家所認可的內核呢?那NT內核和Linux內核各自都有哪些限制呢?


對於軟體開發機構來說,最大的財產往往不光是懂什麼特殊的演算法(何況在OS這個被反覆研究過的領域,基本沒有什麼飛躍式的改進可以做),還有積累下來的總用戶(小白鼠)測試時間


事實一:操作系統內核是軟體工業里需求最為穩定的一類軟體。內核有天然的屏障可以防止 GPL 等許可證的傳染。更不用說還有很多類似 BSD 許可的軟體。

事實二:大量人員參與的開源工程適合需求穩定並且不需要和用戶直接打交道的底層軟體。

事實三:Microsoft 決定開發伺服器操作系統時,Linux 內核還不成熟,BSD 內核正在經受法律糾紛。

事實四:Microsoft 在關於版權的法律上是極端保守派。試圖避免任何的法律不確定性。

所以,結論是,Microsoft 由於「事實四」的極端偏執,不顧「事實一」和「事實二」的優勢,無限誇大「事實三」的不確定性。致使其在操作系統方面採取了一條和業界其它公司都截然不同的道路。這條道路在軟體沒有形成標準化之前是行得通的,因為那時候一個低廉的通用硬體平台(Wintel)帶來的價格優勢遠遠超過違背「事實一」和「事實二」帶來的成本和穩定性劣勢。但是在應用軟體形成標準化之後,特別是 Web 流行之後,這條路帶來的成本維護劣勢就高於能採用通用硬體平台的優勢了。


因為早在建造babel tower時,人類已經犯過這樣的錯誤了


因為養不起那麼多牛逼的人來做所有的業務,只好把【開發操作系統】犧牲了。

趁這個機會講一下,@林燦斌 說的Don"t reinvent the wheel在這裡語境是不對的。對於一個操作系統來說,Reinvent指的是在沒有參考別人的情況下,自己發明那些演算法並證明其正確性。Reengineering的意思才是重頭做一個(譬如react os就算是reengineering而不是reinvent)。因此我們都將Don"t Reinvent the wheel,意思是讓你們多論文/博客/書/別人的代碼,這句話絲毫沒有隱含【讓你們多別人的代碼】的意思。

很多話本來意思都是好的,都是被不知道哪些居心叵測的人給傳壞了。特別是那句【不好的代碼才需要注釋,好的代碼本來就很清楚】,你們就喜歡把後面的那一句【而且文檔都寫得很完整】給忽略了,然後把這個當成不寫注釋和文檔的理由。


首先來說一下題主的問題吧,現在真有除了MS之外自己開發的內核,不是基於Linux,UNIX開發,那就是Solaris,完全自己搞出來的內核,目前仍然在不斷的發展,而且有著非常多的優秀的軟體。

MS的windows和Solaris都是很久遠的系統,當時的Linux和Unix可能不能滿足他們自身的需要。所以自己開發了,但是就現在而言,目前的Linux和Unix內核都已經非常的成熟,即使再優秀的內核開發者或者架構師要想重新開發內核都是需要花費巨大的精力和費用的。而且另外就是一個優秀的系統最關鍵的就是要有各種驅動程序,如果驅動程序沒有的話,那麼就沒有使用的價值了(要知道現在需要做的驅動成千上萬呀)。


ReactOS Project


我忽然發現,現在除了 MS,再優秀的公司和系統,都是基於 Linux 開發、繼續 Unix 開發,鮮有像微軟那樣,直接開發自己的內核。

MS 開發 NT 的時候地球上還沒有 Linux,而且 NT 的目標之一是同時兼容 OS/2 和 POSIX(嗯,早期 NT 里真的有 POSIX 支持,結果沒人用……),前者導致他們不能用魔改 Xenix(對,MS 做過 Unix,還是 80 年代最流行的發行版),所以只能從 DEC 挖人自己開發。

「在應用軟體形成標準化之後,特別是 Web 流行之後」是不是說,NT 內核的東西在現如今工程化標準化的軟體開發領域內,只會越來越被邊緣化,照這樣的勢頭髮展下去,是不是 Linux 內核會成為全球唯一的、大家所認可的內核呢?

據我所知目前 NT 內核的 PC 和伺服器,要遠遠高於 *nix。移動設備則是相反 - -|||

離邊緣化還早著呢,只是端軟以後會專業化。

那 NT 內核和 Linux 內核各自都有哪些限制呢?

這個你還是開一個新問題吧。

==============================================================================

另外,@馮東的答案有個明顯錯誤:MS 開始研發 NT 的時候,Linux 還沒出生。而且他們完全沒必要用 BSD 內核啊,MS 當時有做 Unix 啊喂。


嚴格來說,這種說法是不準確的。

因為還是有許多不同的完全獨立開發的OS. 只不過都不如unix/linux, windows流行

之所以出現這樣的局面:

1,說到底,IT是一種工具, 幫助現有的產業提供效率。

這樣的情況下,IT廠家關注的是迅速出產品。

2,對他們來說,如果市面上已經有了滿足需要的,並且開源,那麼就不必花錢去重新開發自己的。所謂自主知識產權這個問題對他們來說不重要。

這就是為什麼即使Apple那麼富有,也用Linux內核

3,絕大多數的開發者都是打工的,或者普通的大學生,或者hacker之類,用什麼內核不是需要他們考慮的問題,能拿到工資就可以了。

4,畏難

其實一個本科生就可以開發內核。不過就是要花上許多時間。

但是,人們認為自己不行,認為這個難度太大,怕別人的嘲笑,相信別人說的「有開源Linux就足夠了」,相信「如果沒有生態環境,就不可能成功」等等。。。

人們喜歡選擇簡單的道路,用現有的技術,找個公司就業,然後。。。

5,浮躁

對於我們這樣一個龐大的國家,必須獲得各產業的獨立性,否則就會受制於人。

但是,一直沒有開發出獨立的OS,是一個巨大的遺憾。

開發出一個內核並不困難,難的是實現高性能,實現商業化所需要的基本功能。

這需要幾年的埋頭苦幹,但是,沒有一家企業願意這麼做。我們看到的各種國產OS都是在Linux基礎上改來改去。

這就像是我們每天快樂的瀏覽各種網頁,但是如果所有境外的根域名伺服器全部出了問題,我們整個國家是否就只能停下了所有的工作?


選擇linux更多的是因為省事,自己造一個還不一定能比linux好。

但微軟自家的nt本身就是一強力產品,沒理由放棄啊。

現在nt依然是主流的系統,遊戲機手機平板筆記本桌面伺服器甚至銀行atm等等不都在用么。

另,看了馮東的回答,我笑了。更可笑的是,他特意把我的評論給刪了,呵呵。

不過在我隨手翻看了下馮東在其他問題里的一些回答後,我釋然了,我連回復他的慾望的沒有了。


應該是沒必要吧,內核理論幾乎已經標準化,沒有理論突破,你照著現有理論自己寫一個只會與現有實現差不多,區別只是 BUG更多,那還不如直接用別人的呢


一個公司選擇自己的戰略的時候,考慮的因素很多。

但經濟和成本因素是關鍵所在。

正是由於來源linus的存在,使得操作系統的開發變得完全無利可圖。。。這是重點所在。

一個壓根無利可圖的事情,你指望那家公司來加入一起玩呢?


自行設計一個操作系統不難,難的是把操作系統商業化,如果不能商業化,即不能用它來掙錢,就沒有繼續發展下去的動力,而要操作系統能掙到錢,就要有依附於其上的應用軟體生態系統,所以:

要麼就像微軟一樣,給開發者提供一整套的開發環境,包括操作系統,各種開發語言編譯器,資料庫,開發框架等等,另外還需要一大幫給微軟開發應用軟體的開發者,所有這一切,世界上很難再有哪個公司能做到;

要麼就開發一個兼容POSIX的操作系統,提供各類相應的系統調用,以此來兼容現有的開源應用軟體生態系統,使它們可以被移植到你的操作系統上,linux就是這麼做的,而Linux是開源的,它的源碼都是公開的,全世界的黑客都給它提供代碼,基本上沒有可能也沒有必要再開發出一個類似Linux的操作系統,你想要的操作系統功能Linux上都能免費獲取,能理解這些代碼已經不容易了,浪費巨大的精力財力重新開發,基本上沒人幹這種事,而且即使是打算著手開發,開發過程中你還得不時參考這些現成的代碼,這個時候最明智的做法就是站在前人的肩膀上前行,直接把Linux當作自己的操作系統,在此基礎上定製出符合自己要求的特性,當然要商業化還得遵守其相應的授權許可。

最後說下unix ,unix是最早出現的操作系統之一,比Windows還早,當時很多公司開發出兼容posix的unix操作系統版本,商業化競爭不可避免的產生代碼版權問題,這限制了unix 的發展,在這種背景下促成了開放源碼的Linux的崛起。


上面造輪子的比喻很洽當,要知道造一個系統可不是件簡單的事,人力財力花費不是一般人能承受得了的,不知道有多少人試過,最後結果都很快就消失結束。

要說能真正做業務的通用標準化平台,還真不多,也就我們知道的Unix,Linux,windows,其它的都可以略過,即做不出來,也沒那精力去做,那以我們能選擇的平台並不多。而這些平台經過N年的發展進化,千千萬萬人的使用和測試,已經很穩定可靠了,新出的系統單是解決bug都不知道要用多少年,這裡又增加了後期的維護成本。


OS X / 各種 BSD / Solaris / Symbian / ...


Don"t Reinvent the Wheel.

既然有免費而且開源的,為什麼自己還要請些人來再造一個,而且也不見得能在短時間內做得比它更好,浪費錢。

Unix和Linux不一定是最圓的輪子,但是一般認為把Unix或Linux打磨得圓,要比直接拿塊木頭打磨成輪子更省時間、資源。


操作系統是程序研發的最高成就之一,這個東西太龐大,牽涉的軟體硬體亂七八糟的東西太多了,現在除非是頂級公司助力,一般的開源開發者能做出demo,但無法推廣,沒有前途,註定沒前途的肯定沒人去做。

linux也是因為是最早開源的OS,然後加上這麼多年的積累才成功。


推薦閱讀:

RHCE(Red Hat Certified Engineer)紅帽認證工程師在面試的時候作用有多大?
為什麼許多常見軟體有 Windows 和 OS X 版,卻沒有 Linux 版?
怎麼才能翻過公司防火牆 訪問自己的網站?
如何理解 Epoll select 和 poll 三種模型,能否用生活中的例子做比喻?
linux 我有2個c程序 a,b 是否可以通過獲得a的物理地址之後,在b中調用a的函數?

TAG:Linux | 彙編語言 | Linux內核 | 操作系統內核 |