在過去的十年中,嵌入式系統的開發發生了很大的變化。以前嵌入式設備往往是一個孤立的、資源有限的系統,它們追求的是在有限的價格上滿足一定的功能性要求。通常它們采用那些功能並不強大的CPU,這也是開發者不得不盡可能地壓縮嵌入式系統性能的原因。而今天人們對嵌入式設備在智能化和互連性上提出了要求,這使得嵌入式設備不再是孤立的,他們要通過互聯網、無線或是其他的方式實現相互連接,同時它們也是軟件生態系統(software ecosystem)的一部分。最初的嵌入式設備是單一用途的,它們擁有各自獨特的顯示方式和用戶界面;而今天它們變成了我稱之為“等同PC”的系統。它們必須運行很多相同的應用程序,它們需要采用相同的方式實現互連或是在某些情況下增強互連性。因此你可以看到在傳統的實時操作系統(RTOS)之上建立應用程序的必要性。作為內部開發(in-house developed)操作系統的替代方式,RTOS的出現使得建立嵌入式應用變得更加容易。 在2000年以前,大多數的嵌入式系統仍然建立在內部開發的操作系統(OS)基礎之上,但在此之後,WindRiver和其他的商業化RTOS產品逐漸贏得了越來越大的市場份額。 如果開發者試圖通過內部開發建立某些嵌入式系統,就不得不建立從固件到應用程序的完整的軟件棧(software stack)。垂直集成在給開發者帶來很大的控制能力的同時,也需要其在開發和維護上進行大量的投入。在過去的五年中,在經歷了全球性的經濟危機之後,面市時間(time-to-market)意味著一切,追求附加值成為電子業重要的追求。因此,如果你是一個工程經理,考慮到你手中的資源,你是寧願投資去創建一個自主產權的操作系統軟件平台,還是去開發那些可以給你的應用帶來差異化的技術呢?我相信你會選擇後者,因為開發者通常希望使他們的應用變得與眾不同。這就使得內部開發操作系統整合自主產權內核的方法逐漸被淘汰。 如果你使用VxWorks或者是pSOS,仍然免不了要在建立應用軟件和中間件上進行大量投入。這是因為圍繞在這些操作系統周邊的生態資源十分有限。例如對於VxWorks,只有一種Webserver可供使用,而如果采用Linux,會有八九種Webserver供你選擇;VxWorks只提供了一種網頁浏覽器,而Linux有16種不同的網頁浏覽器支持。通常情況下對於某種實時系統你只能選擇一種文件系統——通常情況下為與windows兼容而選用FAT文件系統;而Linux包含八九種本地文件系統,它們可以與十多種外部文件系統兼容。 傳統的RTOS與Linux相比還有一個很大的不同——傳統的RTOS是一系列“服務”的集合(libraries of services),開發者需要一個功能就加入一個功能,如果開發者不需要就將它們去掉。但這就意味著建立在一個RTOS上的系統的每一個執行程序都是不同的,因為開發者只是與那些需要的“服務”相聯系,你建立的是一組非常獨特的服務集合。這並不象是一個操作系統。而象Linux這樣的操作系統提供了一個統一的平台,這使得那些智能設備不但可以獲得更好的互連性,增強它們彼此之間的差異性,同時也使它們獲得了不同的生命周期。 以手機的開發為例,一部智能手機在離開工廠時,它具有一系列確定的功能。但是在銷售渠道中,人們往往希望對它原有的功能進行修改,或是加入其他的功能。運營商希望在他們銷售的手機中體現出更多的差異化,他們希望加入諸如游戲等更多的服務。而最終用戶也許還希望能夠從第三方購買到更豐富的游戲(和其他服務)。如果開發者的手機是一個單一用途的設備,它只能提供有限的服務,那麼在它基礎上建立服務和其他增值功能將是非常困難的。但如果開發者面對的是一部采用嵌入式Linux的手機,並了解API和相關的標准,他們就可以十分迅速地建立起豐富的軟件生態系統並迅速占領市場。產品長期的差異化與互連性息息相關,這包括它的網絡互連性、與中間件的互連性,以及與外圍生態環境的互連性。Linux作為一個“在互聯網上成長起來的動物”,無論從哪方面講都應該算是互連性最好的操作系統。 有人會將Linux與微軟的Windows相比較,確實Windows具有很好的互連性,且具有非常全面的軟件棧。但一旦開發者用Windows建立了產品,他也就喪失了實現差異化的機會。僅僅將Windows OS加到你的產品中並實現商用是十分迅速的。所以如果你想獲得面市時間上的優勢,Windows會給你帶來很多功能性上的優勢。但是你獲得功能性的同時,也就失去了差異化的機會。 當然,Windows還有其他一些技術上的問題,這主要體現在可靠性和軟件規模方面。Windows的“體積”十分龐大。人們都在說Linux很大,確實與傳統RTOS的70~80k的代碼規模相比,Linux的大小通常在幾兆字節,而最小的Windows CE的代碼規模也有27MB。出於政治和法律上的考慮,微軟是不能將Windows進行拆分的。 同時,Windows和其它RTOS還將遇到來自用戶不斷增加的使用成本(runtime costs)方面的挑戰,因為他們收取高額的版稅。嵌入式Windows的版權費大約為每拷貝12~15美元。對於那些大批量的產品,其每件產品上可承受的分攤成本十分有限,如果要向Windows支付這樣的版稅,很可能會造成虧本。其它商業化的RTOS采用的也是這樣一種收取版稅的商業模式。而Linux,其突出的一個優點就是免版稅的。 Linux還具有很好的可靠性。傳統的RTOS通常不具備強大的內存保護功能,這使應用程序很容易被破壞。 另一個影響嵌入式系統對操作系統選擇的是商業因素。在這方面傳統RTOS供應商和微軟的境遇是相同的。傳統RTOS供應商和微軟都會在不與客戶協商的情況下終止某一產品的供應,他們的商業決策是從他們公司自身的利益出發的,而不是站在客戶的角度考慮。Linux則能給予使用者更多的選擇。 如果采用一個開放源碼的操作系統,開發者能夠主宰他們自己的命運,他們不必被一個供應商的決策牽著鼻子走,他們總是有很多選擇。即使他們選擇了MontaVista這樣商業化的Linux供應商,他們依然能夠保有對開放資源進行客戶化和利用的選擇性,他們可以選擇繼續和MontaVista合作或是走開。 我們還注意到,現實中,與MontaVista所提供的商業化版本的Linux形成競爭的除了Windows和其它RTOS,還有由用戶自主開發(roll-your-own)的Linux。但是建立和維護一個基於Linux的平台是很艱巨的工作,而對於用戶來說,這是一種無法創造附加值的工作。我們日常管理著MontaVista的Linux環境中超過4200萬行的代碼。嵌入式應用程序平均的代碼長度最多是50萬行,很多組織是沒有能力去管理4200萬行代碼的。 如果你著眼於源代碼的開發,即使是針對單一目的的應用,其源代碼的規模也將以千萬行計。為了完成內核的維護工作,你需要每年投入10個工程師的力量;同時你還要花費35~40人年去建立整個嵌入式Linux操作系統。很多公司試圖用兩個工程師去維護一個自主研發的Linux項目,這樣開發者很快就會發現他們已經陷入困境。 自主開發Linux過程中會遭遇到的另一個問題是,你是在一個開放資源基礎上開始工作的,同時你需要投入大量的時間和精力在基礎性資源的周圍建立一個平台。但是Linux是開放源碼的,其發展速度十分迅速。因此大多數自主開發的項目實際上是我們稱之為“某一時間點(point-in-time)”的版本,因為開發者只是選取了某一時段的源代碼並基於它進行開發,而並不想繼續投資以保持與Linux同步的發展。而象MontaVista這樣的供應商會保持大量基礎性的投入跟蹤Linux的最新版本,並將其加入到產品中來。 有人會說,也許是因為開發者的規模太小而沒有充足的預算去自主開發Linux,那麼讓我們來看看那些大的嵌入式開發者的選擇又是如何的。規模較大系統OEM,他們擁有數以千計的開發工程師,這些大公司也許應該有工程資源在內部開發一個Linux平台。但同樣,他們的預算也十分有限,他們也面臨著增加附加值的挑戰,他們在Linux之外還有很多其他的問題需要解決。他們面臨著不同的項目,而每個項目建立在不同的微處理器的基礎上,同時還需要不同的中間件和應用軟件棧與之相配。因此很難說他們是否能夠在統一公司內部不同的Linux版本方面花力氣。 MontaVista建立了一個統一的基礎資源,可以為那些大OEM建立一個我們稱之為“策略平台”的統一的Linux平台。因此我們可以在相同的源代碼上建立針對MIPS、ARM、PowerPC或SH等不同處理器架構的Linux。要想建立這樣的Linux系統需要大量的基礎性投入,而大多數嵌入式系統公司是不會在他們的產品之外投入一分錢的。 因此如果他們試圖使用自主開發的Linux時,他們將面臨很大的風險,因為他們自主開發的Linux的品質將受制於他們能夠投入的資源的多少,即使是一個大公司也不會象MontaVista這樣投入這麼多。我們整個的業務都集中在這方面。 如果你使用一個有知識產權約束而非開放源碼的操作系統,比如NUCleus,你是不能將其在你的組織內部廣泛推行的。而如果你使用自主開發的Linux,你仍然將不得不對付那些針對不同應用的變種Linux,這仍然會耗費大量的工程資源。但如果你與一個象MontaVista這樣的供應商合作,你會得到一個單一的策略平台。這就是要選擇一個商業化的Linux供應商的重要原因。