2010年3月10日 星期三

MeeGo軟體架構簡介與展望

本篇文章僅為個人心得文章,軟體架構部分,內容參考MeeGo ArchitectureUnder the Hood with MeeGo
MeeGo
MeeGo是由兩大巨擎Intel與Nokia所共同推出的一套以Linux為核心的作業系統,合併Intel的Moblin與Nokia的Maemo的開發計畫為一,讓兩者的資源能夠達到更高的利用。
Moblin是Intel為了推廣Netbook所推出的作業系統,但是似乎沒有很顯著的成效有實際且大量的產品在市面上流通;Maemo則是Nokia為了擺脫Symbian的框架,讓軟體開發能夠更迎合網路時代的高效能需求而打造,Nokia N900則是Maemo最新推出產品,評價不惡。
在Android吃下絕大多數Mobile Linux Developer的目光之下,Moblin與Maemo似乎都不太受到注目,未來的發展方向也沒有太多人在乎,也缺少第三方廠商支持,於是乎在MWC 2010上,Nokia與Intel便決定將這兩個計畫合而為一,MeeGo就此誕生。
可以說MeeGo是不得不的存在,也能說MeeGo開創了有別於Android的一個Linux Embedded Sysmte的新局面。除了同樣是採用Linux Kernel之外,MeeGo有太多地方與Android不同,本文將介紹MeeGo在軟體架構的特點。

MeeGo-Arch-FullSize
MeeGo的軟體架構主要分為三層,分別是OS Base, Middleware與UX。

OS BASE

在OS Based中,MeeGo與Android採用相同的作法,利用Hardware Adaption Software將驅動程式抽象化,藉以擺脫Linux原生驅動程式必須Open Source的問題,讓硬體開發商能夠在維護商業機密且不違反Linux License (GPL)的前提下,進行MeeGo Driver的開發。Linux與驅動程式的問題可以參考 針對Linux kernel開發商業應用的Driver 這篇文章中的回應。
MeeGo的Kernel即是Linux Kernel的分支,這部份自然是會針對下層的Hardware Adaption Software做最佳化,驅動程式開發者只需發佈二進位制(Binary)的Driver,並發佈所需MeeGo Kernel Patch,即可完成Driver的發佈。這部份的流程可參考Hardware Enabling Process

MIDDLEWARE

在軟體開發架構上,MeeGo與Android或Windows Phone不同的是MeeGo開發的是Native Application,也就是能夠直接呼叫Linux Library, Linux Kerne Calls的應用程式。
與Android透過Dalvik Virtual Machine或Windows Phone透過.Net Compact Framework不同的地方在於,Native App. 會直接被編譯成為Hardware Associated Assembly Code後,再轉為Machine code執行,效能較高;而透過VM執行的App.則需先轉為中介語言後,再執行期中由VM轉換中介語言為Assembly Code或Machine Code執行,當然這其中有很多不同的作法,例如Android會做預先編譯的動作提高效能等。
整體來說,透過VM執行的App.效能還是比較低一些,但很大的好處在於軟體可攜性很高,只需要complile once,就能夠在各個不同的硬體平台上使用。MeeGo卻必須根據不同的硬體平台做compile,但MeeGo保證了一件事,就是程式開發者只需要維護一個Code Base,不需要針對不同的硬體平台做程式的修改,只需要在程式發佈時針對不同硬體平台做編譯即可,這部份則歸功於MeeGo採用Qt作為UI Library。
Qt是Linux上一個很常見的跨平台的UI Library,除了能夠跨多個平台如Windows, Linux, MacOS, Symbian S60等,最大的特色就是他是Native UI,使用Qt開發的GUI與使用該平台原生的UI Library相同,不會像使用Java UI或GTK一樣,能夠非常明顯的看出這是一個由不同平台轉移過來的程式。延展性(Scalability)很好可以由使用Qt為UI Lib的KDE看出這點,著名軟體開發者Jserv也有一篇文章 KDE 的 MS-Windows 平台移植 介紹KDE Windows,文中Jserv說使用Qt的KDE on Windows效能相當好,與在Linux平台上上感覺無異。

UX

MeeGo使用Qt作為UI Library,並且搭配各種內建的Services與API與特製版本的Linux Library,讓各種Linux Native App.能夠很輕易的port到MeeGo上,我們可以從Firefox for Maemo是Firefox在各個行動平台上最早推出的這點看出。同樣的Adobe也將在MeeGo上推出完整版的Flash應用,由此,傳統的Linux App.應該也會相繼的被port到MeeGo上才是。原先Symbian S60 v5上使用Qt進行開發的軟體,也能夠在小幅度改款的模式下轉移到MeeGo下使用。
在UX層中,我們可以發現MeeGo將會有Handheld與Netbook兩個UX,其中也包含著對應的UI,  Apps與UI Framework,當然UX客製化也是可行的,廠商可針對自己的需求進行修改,從建立完整的UX或者是透過UI Framework修改UI均可。
會有兩個不同應用的UX是可想而知的,畢竟MeeGo是由Moblin這個原先要設計給Netbook的OS與Maemo這個原先要設計給Handheld device的OS合併而來,未來的開發目標也從未捨棄這兩個平台,甚至希望能夠包含車用電子、STB等用途,也希望未來能有各種廠商採用MeeGo作為OS開發產品。
在軟體開發上,不僅僅能使用傳統的C, Java開發程式,MeeGo也提供開發者利用HTML+JavaScript+CSS開發應用程式,MeeGo所使用的瀏覽器引擎是WebKit,與iPhone, Android, BlackBerry相同,並且將WebKit與Qt做整合推出QtWebKit,讓MeeGo的軟體開發更具可攜性,也讓軟體開發商在其他平台所撰寫的HTML+JavaScript+CSS能輕易的port到MeeGo之上。

MeeGo與Android的比較

Android是目前Mobile Linux Device的霸主,幾乎吸引了所有人的目光,各種不同的應用均在Android上開發著,相較於MeeGo,注目度似乎低很多.... 但這不代表MeeGo不好,只是Android吸引了太多目光。
MeeGo與Android相比,最大的特色就是夠開放,目前也與Linux Kernel Development Team保持著良好的關係,Intel本身在Linux的開發上也貢獻不少,在 2009 Linux kernel Source Contributions 的比較中,甚至是貢獻度第二名的公司,僅次於Red Hat而勝過IBM, Novell, Sun等著名的公司,當然這與Intel本身有自己的硬體平台,希望讓Linux能夠在Intel Architecture平台上更快更穩定而貢獻了不少的硬體相關原始碼有關,不可否認的,Intel對Linux Kernel有很顯著的貢獻。
而Google呢?    最近Android被Linux Kernel踢出Branch Tree的消息不斷的被提到 (Is Android Forking from Linux?),也有許多Open Source的開發者提到Android其實沒有想像中的開放 (Android 還是開放源碼計劃嗎?),Android Kernel在2.0之後甚至連Google之外的的patch都很少被接受,讓人覺得Google違背了許多Open Source Dever.的期望。  但Google有做「錯」什麼嘛?   其實也沒有…   他的所作所為並沒有違反Andoird所採用的Apache License (Google Android 採用 Apache License: 為什麼不是 GPL?),沒有把Android所修改的Linux Kernel Patch merge回Linux Kernel也沒有法律的責任,但對Open Source的dever.來說,這已經違反了他們心中所希望能夠讓整個軟體世界更好的心願,不少抨擊由此而來。
Android除了ARM有Google官方做維護之外,其他硬體架構平台均由Community進行開發,與MeeGo至少能夠完整支援ARM與x86相比,自由度也差了許多。MeeGo官方也接受各家廠商的Driver Patch並放入官方Image之中,Android大多需要開發者自行進行修改與編譯。以各種不同平台的自由度來說,MeeGo是勝過Android不少的。

MeeGo未來可能的發展方向

對Linux embedded硬體產品的開發廠商來說,MeeGo也許是可行的選擇,一是能夠使用x86作為硬體平台,量大且便宜,也可選擇ARM平台,順應各種不同的效能需求推出不同等級的產品。二來是MeeGo的硬體需求也比Android來的低,Native App不需要額外的VM做中介,耗損效能。再來是開發人員不需要另外訓練他們寫Android平台的專屬程式,只要熟悉Qt就能就進行程式開發,甚至是客製化UI的開發,也因為MeeGo是使用Native App.,Linux上既有的App.能夠很快的被port到MeeGo之上,廠商進行產品開發的時程就會比較快。
若以Handheld device來說,目前Android受到比較多廠商的支持,App.的數量也蓬勃的增長中,MeeGo似乎很難在短時間內趕上,但至少可以推論的是Nokia未來的高階產品一定會使用MeeGo作為作業系統,中階產品也可能會以類似Nokia 5800XM推廣Symbian S60 v5的方式以$300 USD~$2000左右的價位進行強打,屆時整合Nokia既有的Ovi Store與Symbian S650 v5的App.,也能夠在行動市場取得一席之地。
而Netbook or Tablet也將會是另外一塊MeeGo目標的市場,以既有的Atom Netbook硬體直接安裝MeeGo與Windows作業系統或者是Smartbook的方式推出純MeeGo產品也是可行的方案,如同iPhone + iPad一般相輔相成。
很明顯的,除了Nokia之外不會有太多廠商推出MeeGo SmartPhone,畢竟Nokia本身的品牌魅力很高,市佔率也很高,第三方廠商很難有機會插入Nokia的市場中,如同Symbian S60 v5幾乎是Nokia獨佔而SonyEricsson只有少數產品亮相一樣。但採用MeeGo的MID, Tablet, Netbook倒是有可能出線。
Android不是不好,只是人們太過推崇它與莫名的Google崇拜讓我覺得不舒服,所以想寫些其他面相的文章來平衡一下視聽,以目前的狀況看來Android會很受歡迎,會成為除了iPhone之外第二大的Smartphone平台,但他真的適合在所有地方使用嘛? 好像也不一定。
MeeGo也是一個設計精良的作業系統,也很有可能成為人們心中真正受歡迎的Open Source Mobile Platform,期待MeeGo能有更好的發展,希望Nokia能推出更多採用MeeGo的產品,更重要的是,要記得在台灣上市阿!!!
(寫完MeeGo之後,似乎也該寫一篇Windows Mobile 7來踹踹Android XD)