基於什麼樣的理由或特徵可以判別某個系統是 Android 的修改版本而不是另一個基於 Linux 開發的系統?
我們知道android是在Linux的基礎上開發的。那麼其他的基於Linux開發的系統和android相比,會有什麼不同?閉源和開源的區別在哪?像cos那樣宣稱閉源的系統是否無法檢測它和android的關係?作為小白用戶,我還是知道UI這個東西大概是什麼,而新聞里提到UI像HTC這一點邏輯上不能判斷它和android的關係而只是懷疑。那麼,什麼樣的特徵是精確的證據?
系統層面:Android使用的是Google改良libc的binic,和GNU庫不兼容,而tizen、WebOS、MeeGo等Linux手機系統用的是glibc。Android的多媒體框架opencore也和其他系統不同,圖形引擎是Google自家的Skia。可以說,Android除了Linux內核,上層大部分框架和其他系統包括Linux桌面版不同,如果能看到cos os的系統文件,很容易就能分辨出是不是基於Android改造的。
作為普通用戶,如果能拿到cos os的手機,還有個辦法可以鑒別,因為Android除了支持Java虛擬機,還支持NDK,Java虛擬機可以在其他系統做出來一個,但是有用到NDK的應用就需要使用系統API,很難在另外系統重做,所以找個使用NDK的應用安裝一下,比如Google earth、Gmail、chrome等Android客戶端,如果能在cos os上運行,那基本沒跑,就是Android的修改版。
題外話:做個Linux手機系統難不難?其實很難,Linux內核只包括硬體操作、文件系統、進程管理等底層功能,而多媒體框架、圖形引擎、瀏覽器引擎、開發語言和SDK的開發都需要做很多工作,GNU那一套工具鏈基本沒辦法直接用到手機上,做的比較好的QT對手持設備優化較好,可惜諾基亞買了又放棄了,MeeGo和Ubuntu touch拿他作為了開發工具,成熟度太低。HTML5+js開發容易,跨平台性好,WebOS、Firefox OS主要用這種開發方法,可惜HTML5標準遲遲出不來,而且開發的應用比起本地應用效率太低。至於tizen,原來Intel用gtk開發證明行不通,後來三星招進了http://enlightenment.org開發組,以e17的底庫修改成手機開發工具,進度太慢,SDK遲遲出不來,所以tizen就沒辦法投入使用。
如果cos os是自創系統,從頭做出一套開發工具是很難的,世界上真正能投入使用,成熟度高的手機系統iOS、Android、WP的開發公司哪個不是開發系統方面的大牛,微軟、蘋果做了幾十年操作系統,Google有Java之父,為了適應手機模式,不惜把Java重寫一遍(Android採用的是J2SE版,諾基亞以前用的是J2ME版,兩者相差甚多),至於黑莓的BlackBerry OS,那是收購了實時Unix系統公司QNX改良過來的。我不認為一個名不見經傳的上海聯彤有能力設計出一個手機系統,要知道現在的手機系統完全就是PC系統的簡化版。
COS是一個Android發行版,這沒有疑問
1,肯定會沾到Linux,它就不可能閉源,GPLv2許可要求衍生作品發布時必須提供源代碼(至於是否發布編譯好的產品則沒有要求),並只能按GPLv2許可發行。
2,只要沾到AOSP的其餘部分,那麼cos除去linux kernel的部分就必須按照Apache2等許可證發行,這些許可不要求公開源代碼。(Android使用的許可證很多,具體見:Android 內核基於 Linux 設備廠商必須公開內核源代碼,如何逼迫小米公司開源?)
3,Android商標是Google的財產,因此Google可以制約它人使用「Android」商標的權利。但是,把AOSP拷貝過來,除了去掉Android商標外,一字不改編譯出來,並稱為「陳塵OS」是沒有問題的。
---------------------------
所以只要它能運行Android應用,它就一定從AOSP拿來了足夠完整的Android Framework(包括Dalvik環境)。
現在的問題是,我們知道Android應用也可以在非Android系統上運行(通過引入Android Framework的方式),同時,COS上面跑了一個sense啟動器。
而目前sense啟動器只出現於HTC的Android設備(這在暗示沒有Android就沒有Sense),而sense系列軟體是HTC的私有的閉源產品,無法被偽造,所謂的「cos」只可能是『由HTC開發的Android發行版』。把這個作為決定性依據有個條件,檢視者需要足夠了解Sense,我恰好是這樣的人,用過Sense2.1~5。
等到有人把ROM扒出來(只是時間問題),這件事就該了結了。Android 就是 Linux 上面跑了個 Java 虛擬機(以前是 Dalvik,後來是 ART)而已。所以說這東西如果閉源而且沒有辦法拿到 shell 的話,很難界定。但是 Android 從 shell 登錄應該很簡單,隨便裝個終端模擬器或者 adb shell 進去看看就好了。
現在的狀況是還沒人拿到樣機,所以沒法確定。拿到樣機以後很快就會真相大白的。
如果認為 Android 不是核心基礎的話,把 Dalvik 刪掉看看浩浩湯湯十萬應用還有幾個能跑好了。
很難有一個定義。邏輯學上有一個禿頭悖論:
這裡有一個Android系統,我改動一行代碼,它還是不是Android?改動兩行呢?改動三行呢?我們稱呼頭上沒有頭髮的人為禿子。那麼,如果他有一根頭髮呢? 也是禿子,兩根呢?還是禿子,所以比禿頭者多一根頭髮無法使一個禿子變成不是禿子。所以,如果一個有 X 根頭髮的人被稱為禿子,那麼,有 X+1 根頭髮的人也是禿子。所以,(X+1) +1 根頭髮的還是禿子。以此類推,無論你有幾根頭髮都是禿子。
究竟改多少代碼才不是Android?根本無從談起。
與現在COS相比的,還有阿里雲OS這個玩意兒。他和安卓的關係可以看看這個:http://www.williamlong.info/archives/3222.htmlCOS怎麼回事,要等今後的曝光了。一個完整的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是什麼關係已經很清楚了。
我覺得說不定虛擬機都沒寫。
推薦閱讀:
※學習bash編程時,應該養成哪些好的習慣?
※用 SSH 登錄伺服器用 Vim 在線寫 PHP 代碼的體驗是怎樣的?
※Google 的 Android 為什麼不自主開發一個內核而要用 Linux 內核?
※一個新手面試 Linux 運維工作至少需要知道哪些知識?
※linux/unix socket編程並發時什麼時候用進程(fork),什麼時候用線程(池)?