阿里雲OS和Android的血緣關係

谷歌高管、Android開發領頭人Andy Rubin在其Google+主頁中這樣寫道:阿里雲系統採用了谷歌Android系統的運行環境,明顯是由Android系統修改得來。

  Andy Rubin,事實是,阿里雲系統包含了Android中運行環境,明顯是從Android中演變而來,但無法與Android兼容。基於Google對阿里雲網站上應用的分析,這個平臺嘗試與Android兼容,但未能成功。

  阿里雲OS到底是不是Android以外的東西,筆者通過技術手段對其進行一些分析。天語W700是一款使用了“阿里雲OS操作系統”的手機,筆者找到一個天語W700手機的阿里雲OS的刷機包。打開粗粗看一下,和Android的刷機包沒兩樣。裏面的應用全部是apk,這意味着它們都是以Dalvik可執行文件的形式存在的。

阿里雲

[圖1]

  Build.prop裏面也指出是,Android2.2

阿里雲

[圖2]

  接下去來找其中的c library,因爲我們知道,Android是在Linux內核之上運行了一套Google自己組織起來的架構。和通常意義上的GNU Linux一樣,這個架構裏最基礎的東西之一就是C運行庫。

  GNU Linux的C運行庫是Glibc,而Android用的是Bionic。通過使用自己組織,編寫的代碼,Android可以從這一層以上避開GPL協議不允許發佈者擁有保密源代碼權利的限制。

  找到其中的lib/libc.so,也就是C運行庫,用readelf查看它的符號表(這麼做不涉及反向工程),可以在找到”bionic”。說明它的C運行庫很可能是bionic。

阿里雲

[圖3]

  內核是linux kernel,基礎的C運行庫是Bionic,有Dalvik,上層的應用全部是Dex格式,這些東西說明W700上的“阿里雲OS操作系統”不太可能是Android以外的東西。

  當然以上的內容無法用於推測,這麼做是否與Android的授權協議產生了矛盾。但是有一件事情比較明確,如果提供這個手機的廠商沒有提供其中linux kernel的源代碼,那很可能是非法的。

  更新:上篇用的ROM是錯的,是Android的刷機包,不是官方原生的雲OS的ROM,所以論據是錯的。這裏用官方原生雲OS的ROM分析一下,到底阿里雲OS和Android之間是什麼關係。

  解開看大目錄的結構:

阿里雲

  根目錄下是一個boot.img,這就是Android系統的bootloader,也就是啓動分區。另外有個system目錄,這就是Android系統的system分區。進入system目錄往下看:

阿里雲

  這裏和Android ROM的目錄結構是一模一樣的,各位可以自己找個Android ROM對比以下。核心的幾個目錄:

  app: 存放ROM預裝的app

  bin: 系統進程的目錄

  framwork: Android Framework目錄,就是Android應用程序運行所需要的庫文件的目錄

  lib: so庫文件目錄,相當於Windows的system32目錄

  咱們再進到app目錄看一下:

阿里雲

  好,看出區別來了,Android下所有的app都是以apk結尾的,前一篇帖子用的ROM就是Android的ROM,裏面對應這張圖裏的文件就都是apk的。這裏怎麼都是lar呢?這就是阿里雲OS和Android不同的地方了,因爲apk是Dalvik虛擬機管理應用程序的文件格式,阿里雲自己搞了個虛擬機,用lar文件來管理。lar文件和apk文件有什麼不同?我們知道apk文件其實就是一個zip文件,用WinRAR可以直接打開看,那lar文件呢?用WinRAR果然也可以直接打開:

阿里雲

  做過Android開發的人一看到這個目錄結構就發現,它和apk的目錄結構基本上是一模一樣的,除了Android應用的classes.dex文件變成了classes.lex。那所謂的lex文件是不是就是把dex文件換了個名字呢?我們用二進制比較一下:

阿里雲

  左邊的是Android應用的dex文件,右邊的是阿里雲應用的lex文件。可見,文件格式已經完全不一樣了。

  好,app的不同已經看出來了,我們再來看系統核心進程有什麼不同。進入到/system/bin目錄:

阿里雲

  熟悉Android系統的人一眼就能看出來,am, app_process之類的名字都是Android核心進程的名字。多出來了幾個:cloudserver, chpasswd.cgi之類,看來這就是阿里雲所謂的“雲服務”的核心進程了。

  好,文件的比較就到這裏,那現在基本上可以下結論了,一個完整的Android系統,包括以下幾個部分:

  1. bootloader:用來啓動操作系統

  2. kernel: 系統內核

  3. 核心進程,就是 /system/bin 下面那堆東西

  4. so庫: 系統運行基礎,就是 /system/lib 下面那堆東西

  5. Android虛擬機,所有的上層應用都是靠虛擬機來運行的

  6. Android Framework: 所有的上層應用都是通過調用Framework來實現功能的,就是 /system/framework下面那堆東西

  7. 上層應用,比如說桌面Launcher, 撥號,短信,通訊錄之類,就是/system/app下面那堆東西

  那麼,阿里雲OS,在上面7個部分中,虛擬機用的是自己的,上層應用是自己定製的,另外額外加了一個“雲服務”,其餘部分都是用的Android的。它和Android是什麼關係已經很清楚了。

  那順便八卦一下,爲什麼阿里雲要搞成這個樣子呢?說來就話長了,話說當年阿里雲剛成立的時候,還是很有追求滴,當時收購了一家國內做Java虛擬機的公司(叫“猛獁科技”),同時還找了一幫MOTO做Linux內核的人,想搞個自己的操作系統出來。阿里雲的CEO叫王堅,和李開復一樣都是從微軟研究院出身,但是頗看不起李開復搞的“點心OS”,認爲“拿個Android來改一改,多土啊!我們要搞自己的操作系統!”於是呢,阿里雲的一幫人就吭哧吭哧搞“自己的操作系統”了。結果呢,大家腳趾頭都能想到,從頭搞一個操作系統哪有那麼容易,做了半年沒做出來,咋給馬雲交差呢?於是也顧不上土不土了,拿Android改吧。虛擬機是現成的,那就換掉Android的虛擬機吧,好歹能算是自己的工作成果。但光換個虛擬機意義也不大啊,HTML5和WebOS的概念比較新潮,那就再加個“雲服務”的概念吧,也算是國內HTML5的倡導者了。HTML5通過瀏覽器引擎跑,性能肯定比不上原生應用,那怎麼保證操作流暢呢(特別是桌面Launcher,天天用,要是太卡,用戶就瘋了),那還是用原生應用來實現吧……於是,最後阿里雲OS就長成現在這樣了。

發佈了39 篇原創文章 · 獲贊 3 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章