如果你的下一個應用會部署在一個32位或64位處理器和TCP/IP網絡的設備上,那么現在正是好機會,因為你已經考慮選擇Linux或者Android作為你的嵌入式操作系統。將原有實時操作系統和嵌入式內核相比較,無論是Android還是Linux都是成熟的企業/桌面級操作系統。它們都能運行現成的中間件和打包應用程序,即便是在專門的嵌入式和移動應用環境中。然而,這兩個開源的操作系統從軟件堆棧的底層到頂層的開發、集成和托管方式都不一樣,而這些都影響著如何以及在何處找到最好的部署方案。
本文將會整理出在選擇小綠機器人或矮胖企鵝時要考慮的決定因素。特別地,本文關注的是為何在不同的使用場景下需要不同的開發方法,為何是使用這個操作系統而不是另一個,為何有些應用程序只需使用一個操作系統,而有時候卻同時需要這兩個操作系統。
接下來的內容部分代表了一個經典的“思想運動”,但實際上這個討論源于一系列圍繞以能源管理,IVI(汽車信息娛樂系統),網絡和智能顯示設備為前提的項目目標的對話和產品設計的辯論。
開放盒子還是封閉盒子?
絕大多數的原有嵌入式系統都是非常封閉的實體。即使選中的實時操作系統支持標準的API(典型的如POSIX線程和/或BSDlite 網絡的子集),為那些嵌入式平臺精心定制或托管在那些平臺上的應用程序也還都是高度定制的。它們也仍然是唯一的在整個生命周期中運行在那些系統的軟件。相比之下,那些部署在智能手機、平板電腦和其他越來越多的現代智能設備上的軟件已經更像桌面**務器系統軟件了。由于有了越來越多的現代設備,原始設備制造商、運營商和終端用戶已經可以在設備的整個使用過程中安裝新應用程序包了。固件和系統軟件也已能在不依靠特殊的工作臺軟件或工廠式RMA(翻修)程序的情況下完成升級。
在創造一個智能手機操作系統時,Google將Android定位為一個開放的、現場可升級的應用程序平臺,這個移動操作系統的核心思想是隨時能夠運行應用程序包。因此,為了創建,銷售和部署打包應用程序,圍繞著Android平臺生態環境的優化首先是通過Google Play應用商店進行的。
嵌入式Linux系統也存在著和Android應用程序平臺同樣的情況,但從實踐的角度來看,它更適合一次性部署在封閉盒應用中。確實如此,Linux上的編程存在著更多被認可的編程方法,比如C,C++,Java,Ruby,Python,Lua等等,但卻不存在一個為構建、發布和安裝應用程序的單一模型,也不存在一個跟Android一樣的支持(如果不確定)互操作性的硬件抽象模型。相反,存在著多種特定的方法(如包管理,apt-get等方法)和工作在不同內核體系架構樹(Kernel Tree)中的普通/最佳實踐。
由于這些務實的原因,Linux有點更適合于封閉或半封閉的嵌入式應用程序。如果不需要廣泛的互操作性,也不用考慮是否會破壞API和打包應用程序,原始設備制造商(OEM)就可以從約束中解脫;這還能讓他們從為設備的硬件和軟件需求專門做定制和適配Linux的工作中解脫。若當一個生態系統圍繞單一設備演變(就好像發生在Raspberry Pi和Python上),Linux的例子總能打破封閉盒子策略,就好像使用了Dalvik虛擬機和親睞于Java的Android一樣。
有一點需要注意,不要把開放盒子和封閉盒子的問題與開源和不開源的問題混淆。Linux內核和GNU/Linux操作系統遠比Android更開源。維護和升級Linux的社區是真正的精英管理的社區,它對各種來源的資源都開放。相比之下,Android是Google和它的頂級合作伙伴OHA可以發號施令和掌控平臺發展路線圖的私人俱樂部,它只接受了外界組織的最小輸入。
你是想預算還是省點錢?
和開放/閉合盒子有關的問題是資源豐富與否的問題。有一個極端資源不足的例子是說只有一個網絡接口的大塊頭的設備,而一個極端資源豐富的設計則需要一個顯示器、鍵盤、定點設備或觸摸屏,一個健壯的內存和存儲器部件等。世界上最真實的設計則是介于這兩者之間。
鑒于其智能手機的遺產,Android適用于擁有豐富接口的消費電子類應用程序。在盒子之外,Android協議棧支持手持和平板類型的配置,而且它正越來越多地被部署在DTV,機頂盒,IVI系統和其他用戶界面密集型系統上。因此,沒有多少令人信服的理由去說服人們在無外設的系統上使用Android系統。
相反,Linux能夠支持的硬件配置和外圍設備范圍非常廣泛而且豐富,它還可以根據需要被裁減為一個只擁有內存、存儲器等的極度精簡的系統。若沒有幾百MB甚至GB的DRAM或更多的Flash空間(對于操作系統和應用程序),是無法將Android部署在這樣的系統之上的,但你可能只需要幾十MB的存儲空間就能部署一個簡約型嵌入式Linux系統(天啊,我從未想到過我會認為Linux是那么的小!)。在為精簡硬件配置挑選系統時,另一個不投票給Android的原因是Android是CPU/GPU密集型的系統。
所以,如果你的設計是想通過部署一個低端CPU,不使用GPU,并且最小化內存和存儲器來達到降低成本的目的,那么Linux是一個更合適的選擇。如果你有很多錢拿來“燒” -- 這些年,硅的價格只要幾美元了,但顯示器和輸入硬件則很可能是需要幾萬美元的,那么這時候Android會更適合你。
本地顯示還是自帶設備(BYO)?
在上個月的RTC雜志上,我寫了一篇為無外設系統挑選可用設備作為顯示服務器的文章。在文中我強調了本地無外設系統設計是如何利用在附近或遠程的基于瀏覽器顯示設備的,包括智能手機、數字電視等。在Android和Linux中選擇其一的前提下,需要一個本地的還是遠程的顯示器是另一個決定因素。若你的設備需要一個近距離的身體上接觸的顯示,那么擁有一個集成用戶接口(UI)的Android是一個不錯的選擇。但如果用戶主要是想在遠處通過瀏覽器或專用的智能手機和平板電腦應用程序來與設備交互,那么你可以通過支持使用嵌入式Linux來托管Apache服務或幾個小Web服務器**務器端的編程范例(PHP,Python,C等)達到省掉Android系統的開銷的目的。
當然,你可以根據需要同時配置Android和Linux來支持本地顯示、網絡接口或移動應用程序。兩個操作系統都支持豐富的用戶接口,而且都很容易被部署為Web服務器。但現成的Android應用程序只能運行和顯示在一個Android原生顯示設備上,而使用GTK+或Qt創建的Linux原生應用則要求一個本地顯示器或一個可用的遠程X服務器。
選擇Java或C/C++,還是LAMP?
一個半技術性的論點是Android或Linux是熟悉的編程語言和框架。如果你的團隊已經在一些其他環境中創建了Java應用程序,那么你很可能會希望可以利用這個專業知識去創造其他設備上的應用程序(甚至是無外設的設備)。但如果你的開發人員更熟悉C/C++,Lua,GTK+和QT類似的UI框架及無數的其他編程范式,那么強烈建議你選擇Linux和/或LAMP(Linux,Apache httpd,MySQL和PHP/Perl/Python)。
這個論點并非是很明確的,還要和在座的其他人一起討論。你也可以使用Android/Linux本地編程接口來創建你的嵌入式應用程序,但你可能會打破Android應用程序的互操作性和封裝,并且不再擁有一個開放盒子。還請記住,在選擇某種語言和框架的同時往往還要考慮是本地顯示還是遠程顯示。另外,也許更解放性的思想是當今開發人員通曉多種語言,這樣無論在Android還是在Linux上使用Java,C++或Web編程語言都會感到同樣舒適。
考慮許可證
一套非技術然而復雜的以許可體制為中心的選擇標準圍繞著Linux和Android以及寫給這兩個操作系統的應用程序和擴展展開。許多原生設備制造商之所以采用Android是因為這個移動操作系統的自由許可條款:實際上Apache 2.0對于Android中間件及其應用程序的組件只是在底層Linux級別的通用公共許可證(GNU GPL)部分對原生設備制造商有披露資料的要求。Android中的頂級Apache許可證總是注明“OEM friendly”,是因為設備制造商修改了Android堆棧的大部分,并使用了在Apache和任何其他OSS許可證(表1)下都不需要披露修改和分發他們自己的代碼的硬件抽象層(HAL)來添加了外圍設備接口。實際情況稍微有些復雜,這在Black Duck的文章“Android-Opportunity,Complexity and Abundance”中有論述。
表格1 各種Android和Linux堆棧層的許可
這不是一個反對Linux的例子—它只是很可能完美地在一臺運行著Linux的設備上隔離和保護專有代碼。然而,修改和添加到嵌入式Linux堆棧上的每一種類型都需要考慮它自己的實際情況(見表1)。特別地,一些原生設備制造商不喜歡直接在任何GNU許可證(GPLv2/v3,LGPL等)下工作,這就導致他們選擇了Android,而非Linux。當然,他們仍然需要部署Linux內核,但運行其上的Android庫和中間件僅僅將它作為一個“緩沖器”。通常做到這樣就可以感到很舒適了。
在這里,我們的目的只是為各種類型的智能設備提供選擇Android或Linux的一般指導方法。對于垂直應用程序(手機、醫學設備、運輸工具等)而言,這種分類本身并不想列出所有的方法,而是想提供開發范例依賴的選擇標準,或者提供考慮設備市場和部署生命周期的途徑。
表2總結了本文表述的論點。它強調了選擇不是絕對的:由于Android包含了一個Linux內核實例,Android系統理論上可以托管和運行和Linux一樣的軟件。Linux同樣因為能托管和運行Java,以及一系列的用戶接口(UI)框架,它也能被部署在有本地顯示器的設備中,即使在和Android有密切關系的手機、平板電腦和其他設備上。
表2 總結了Android和Linux特點的論點
所以,去使用Android或Linux或同時使用這兩個操作系統吧。但需要先考慮以下問題:
在你的設備的整個壽命中,系統軟件和應用程序是如何部署的?
你想將你的預算中的大部分花在哪些地方上?
設備主要有哪些用戶交互模式?
你的開發人員有哪些編程嗜好?
你選擇的平臺和許可證對你公司的知識產權(IP)組合有怎么樣的影響?
評論
查看更多