最后,也是最重要的,操作系統(tǒng)過(guò)程中需要的技術(shù)和知識(shí)并不是非常復(fù)雜。比如操作系統(tǒng)核心模塊的開(kāi)發(fā),幾乎不會(huì)用到復(fù)雜的數(shù)學(xué)推導(dǎo)和運(yùn)算,只要有最基本的數(shù)據(jù)結(jié)構(gòu)知識(shí)和硬件知識(shí)就可以勝任。而在一些應(yīng)用軟件開(kāi)發(fā)過(guò)程中,比如GIS,圖形處理軟件,需要有非常深入的數(shù)學(xué)知識(shí),比如復(fù)雜的矩陣運(yùn)算、高階偏微分方程等,這對(duì)程序員的要求非常高。對(duì)比起來(lái),操作系統(tǒng)開(kāi)發(fā)難度,比復(fù)雜應(yīng)用軟件開(kāi)發(fā)難度低得多。
總之,操作系統(tǒng)開(kāi)發(fā)沒(méi)有想象得那么難。人們之所以一聽(tīng)到操作系統(tǒng)開(kāi)發(fā),就認(rèn)為非常難,甚至望而卻步,我認(rèn)為很大程度上是心理作用。因?yàn)槲覀儚奈闯晒﹂_(kāi)發(fā)出一個(gè)操作系統(tǒng),不知道操作系統(tǒng)的開(kāi)發(fā)難度如何,于是會(huì)產(chǎn)生一種對(duì)無(wú)知的畏懼。
打造出一個(gè)廣泛使用的流行操作系統(tǒng)的難度,在于建立一個(gè)完善的操作系統(tǒng)生態(tài)環(huán)境。這包括操作系統(tǒng)本身,與操作系統(tǒng)配套使用的開(kāi)發(fā)工具,與之配套使用的瀏覽器、多媒體播放器等軟件,為其定制的各種硬件驅(qū)動(dòng)程序,以及支持它的眾多硬件平臺(tái)。這不是一個(gè)開(kāi)發(fā)團(tuán)隊(duì)或一個(gè)公司能夠獨(dú)立做到的,必須借助于整個(gè)行業(yè)的力量,包括硬件設(shè)備提供商、應(yīng)用軟件開(kāi)發(fā)商、系統(tǒng)軟件開(kāi)發(fā)商等的通力合作才能完成。而且整個(gè)生態(tài)環(huán)境的成熟,需要很長(zhǎng)時(shí)間,有時(shí)會(huì)超過(guò)十幾年時(shí)間的培育。再?gòu)?qiáng)調(diào)一下,這里說(shuō)的生態(tài)鏈,是針對(duì)一個(gè)通用操作系統(tǒng)來(lái)說(shuō)的,比如Linux,Android等。
當(dāng)然,這并不是說(shuō)操作系統(tǒng)開(kāi)發(fā)就沒(méi)有任何機(jī)會(huì)了,相反,開(kāi)發(fā)的機(jī)會(huì)還會(huì)越來(lái)越多。之所以這樣說(shuō),就是基于先前論述的應(yīng)用場(chǎng)景細(xì)分趨勢(shì)。在操作系統(tǒng)應(yīng)用場(chǎng)景細(xì)分的情況下,操作系統(tǒng)的生態(tài)鏈范圍會(huì)大大縮小。一個(gè)優(yōu)秀的公司,以自己之力甚至就可以打造一個(gè)完整的生態(tài)環(huán)境。
怎樣的操作系統(tǒng)才能算是獨(dú)立開(kāi)發(fā)的操作系統(tǒng)
這個(gè)問(wèn)題可能比較敏感,而且見(jiàn)仁見(jiàn)智,這里只是說(shuō)一下我個(gè)人的理解。我認(rèn)為,一個(gè)獨(dú)立開(kāi)發(fā)的操作系統(tǒng),下列各模塊中,至少要有一個(gè)是完全獨(dú)立開(kāi)發(fā)的(即不重用任何現(xiàn)有模塊,完全是重新獨(dú)立編碼):
操作系統(tǒng)內(nèi)核,這里的內(nèi)核,包括基本的操作系統(tǒng)服務(wù),比如進(jìn)程/線程模型、內(nèi)存管理機(jī)制、設(shè)備管理機(jī)制、核心設(shè)備驅(qū)動(dòng)程序等;
圖形用戶接口(GUI),可以直接借用現(xiàn)有的圖形庫(kù),但是GUI不僅僅是一個(gè)圖形庫(kù),還包含了用戶交互機(jī)制、圖形資源管理等相對(duì)比較復(fù)雜的內(nèi)容。這些內(nèi)容需要自行編寫(xiě);
全新的應(yīng)用編程接口和開(kāi)發(fā)工具。比如,在原有操作系統(tǒng)核心基礎(chǔ)上,增加的API調(diào)用數(shù)量,要超過(guò)原有內(nèi)核體統(tǒng)的API數(shù)量,這些API組合起來(lái),提供一種全新的應(yīng)用解決方案或應(yīng)用場(chǎng)景。同時(shí)要開(kāi)發(fā)一個(gè)全新的應(yīng)用程序開(kāi)發(fā)環(huán)境,并能與操作系統(tǒng)和最新的API有機(jī)集成,提供面向某個(gè)應(yīng)用場(chǎng)景的整體解決方案。
比如Android,雖然其操作系統(tǒng)核心是借用的Linux內(nèi)核,但是其GUI卻是完全重新編寫(xiě),且提供了一個(gè)基于Java語(yǔ)言的全新開(kāi)發(fā)環(huán)境,上述列舉的模塊中,有至少兩個(gè)是全新編寫(xiě)的,因此Android屬于一個(gè)獨(dú)立開(kāi)發(fā)的操作系統(tǒng)。當(dāng)前市面上有很多號(hào)稱(chēng)是自主開(kāi)發(fā)的操作系統(tǒng),實(shí)際上只是把Android的GUI模塊進(jìn)行了部分修改,添加了一些個(gè)性化的東西。同時(shí)有針對(duì)性的增加了一些應(yīng)用。我認(rèn)為,這不應(yīng)該算是自主開(kāi)發(fā)的操作系統(tǒng),可以算作是自主定制的操作系統(tǒng)。
這里并不是否定自主定制操作系統(tǒng)的行為,而是從技術(shù)上,試圖把自主開(kāi)發(fā)和自主定制進(jìn)行澄清。實(shí)際上,自主定制是一種非常明智的行為,可以使得企業(yè)能夠很快推出其個(gè)性化產(chǎn)品,滿足市場(chǎng)需求,是企業(yè)積極適應(yīng)市場(chǎng)需求、積極參與競(jìng)爭(zhēng)的表現(xiàn)。相反,如果企業(yè)純粹去追求自主開(kāi)發(fā),在沒(méi)有明確市場(chǎng)需求和市場(chǎng)定位的情況下,不計(jì)成本的投入開(kāi)發(fā)一種全新的操作系統(tǒng),反而是一種愚蠢的行為?,F(xiàn)有的東西能夠滿足需求,為什么不拿來(lái)直接用呢?模塊重用原則一向是軟件行業(yè)推崇的基本原則。
對(duì)x86平臺(tái)在操作系統(tǒng)開(kāi)發(fā)中的作用的考慮
我個(gè)人認(rèn)為,x86硬件平臺(tái)是操作系統(tǒng)開(kāi)發(fā)過(guò)程中無(wú)法繞過(guò)的一個(gè)平臺(tái),而且對(duì)一些相對(duì)通用(這里的“相對(duì)”通用,可以理解為至少支持兩種以上硬件平臺(tái)的操作系統(tǒng))的操作系統(tǒng)來(lái)說(shuō),以x86為最開(kāi)始的開(kāi)發(fā)目標(biāo)平臺(tái),完成x86平臺(tái)的開(kāi)發(fā)后,再向其它硬件平臺(tái)移植,或許是最有效且最省事的策略。主要有以下幾點(diǎn)原因: