Android 開源的真相: 無法fork

類別: 新奇
標籤: android

Android 開源的真相: 無法fork
雖然是名義上的開源系統,但如果微軟的手機採用 Android 系統,那將是個巨大的錯誤,諾基亞都不行,因為 Google 把 Android 做得無人可改。

不止一次了,總有人跳出來「建議」微軟採用 Android,替換掉市場乏力的 Windows Phone 系統。這種口水文章估計將來也不會停。

說這話的人到底是人笨呢,還是心眼壞。Google 這麼多年來,已經把 Android 做成了本質上無法分支(fork)的軟體,開源只是名義上的,對於其他手機廠來說毫無意義。沒人能再 fork 出自己的 Android,同時保證可用性,吸引大量的開發者和海量的軟體。

「微軟該轉 Android」的論點是:Windows Phone 平臺沒能吸引到足夠的開發者投入精力,也沒能為開發者創造收入,但是 Android 兩者兼備。如果從 Android fork出一個微軟自己的系統來,微軟就能一箭雙鵰——在 Android 上部署自己最擅長的服務,包括 Exchange,Active Dictory 和 System Center 或者 InTune;給予消費者完整的 office 體驗——並且替換掉 Google 的服務,完全基於自己的雲套件(Bing搜尋,Bing 地圖,Azure) 。同時還能保留大量使用者需要的 Android 應用。

按照這種邏輯,Android 的豐富應用和巨大市場號召力會吸引消費者購買微軟的產品,更多熟悉 Android API 的開發者會入場。微軟的開發成本也會降低,因為核心的維護工作就讓 Google 去做好了。

這種事情根本沒法弄的原因在於,Android 平臺的正確用法不是這個樣子的,Android 本來就不是為了大家一起玩而設計的,它是一個Google控制的「莊家定規則的遊戲」,隨著 Android 的每一次新版本釋出,Google 正把這種想法變得更加不切實際。

大體上說,Google 寫了兩大坨程式碼。
第一坨是核心的 Android 開源平臺(AOSP)底層程式碼,它提供了整個智慧手機系統的基礎骨架:包括一份 Android 專用的 Linux 核心,Dalvik 虛擬機器,和部分基礎的使用者介面(設定、訊息皮膚、鎖屏介面)。這部分程式碼以 GPL 和 Apache 的混合授權模式釋出。雖然 Google 週期性地釋出這部分的開原始碼包,但被行業批評為「一副關起門來悶頭搞」的不合作腔調。

第二坨稱之為「Google 服務套件(GMS)」。GMS 又分為兩大塊:Google Play Services 提供了海量的 API 和系統服務,包括 Google 地圖,位置服務和內購功能;Google+ 整合;遠端 Wipe;惡意軟體掃描等等。還有就是一些 Google 自己的軟體:搜尋,Gmail,Chrome 瀏覽器,Gogole 地圖等。

GMS 提供了很多重要的系統特性。而且 GMS 是閉源的。任何人可以拿到 AOSP 的程式碼編譯好刷進任何一臺手機。但是 GMS 可不能這麼搞,為了獲得 GMS 的授權,裝置必須符合 Google 的硬體標準(效能,螢幕解析度等等),而且必須通過 Google 的測試。雖然 Google 表示 GMS 套件是免費的,但測試是收費的,平均每部配置 GMS 套件的 Android 手機都得支付給 Google 0.75美元的測試費。換句話說,除了最有用的部分,Android 的確都開源的。

GMS 也沒法分割:如果手機要通過 Google 的測試,那麼它必將裝載上全部的 Google 軟體。

而且對於開發者來說,AOSP 和 GSM 也是水乳交融,分不清彼此。Google 正慢慢地把越來越多的功能從 AOSP 從 開源的 AOSP 遷徙到閉源的 GMS 裡去。舉個栗子,在五太子 Nexus 5 上,手機的介面——你用來顯示圖示和載入程式的核心功能已經滾到了 GMS 套件的 Search 元件裡。

類似的,API 也發生了相應的修改。比如 AOSP 本來是有一個位置服務的 API 可用,但 GMS 提供了一個很好,更新,提供更多功能的 API。Google 鼓勵開發者用 GMS 裡的 API。AOPS 裡的那個老 API 從 Android 1.5 以後就沒有更新過。這樣造成的結果就是很多新的第三方 Android 軟體其實很難說是 Android 的軟體,其實它們更應該是 GMS 軟體,離開閉源的 GMS 就沒法工作。

對於手機廠來說,採用 Android 系統的方式一共有四種。

第一種就是 Google 希望各家採用的方式:同時使用 AOPS 和 GMS。提交通過測試,裝載全部 Google 的服務和應用套件。這就是三星,HTC 和 LG 採用的方式。這條道路還是給手機廠留下了一些自定義的空間。OEM 廠可以在 Google 應用以外,裝載自己的相同的應用。但貌似 Google 對各廠在這點空間搞的花頭也不滿意了,有報導說 Google 和三星談判,三星同意減少在手機介面上的各種奇葩修改,特別是移除與 Google 應用重複的其他應用。

這種方式因為提供了完整的 AOPS 和 GMS 的 API, 也就保證了最佳的軟體相容性。同時也最大程度地保證了 Android 系統的使用者體驗,不管各廠怎麼折騰介面,Google 的軟體總是存在的,使用者體驗總是一致的。

這讓 Google 也最大程度地保持自己對 Android 系統的控制力,而且這種控制力只會與日俱增。每一次新版本 Android 的釋出,Google 就會把更多的 API 弄到 GMS 套件裡去,慢慢把 AOSP 上的肉一點點剃掉,只剩一個底層的骨架。

第二種極端做法,整個移除 GMS 服務包,基於 AOSP 開發一些粗製濫造的替代品。當然,這樣做的結果,就是使用者得到的體驗會差很多,所謂能用就行了。在一些低端機上,很多廠家就是這麼幹的,特別是在中國市場。只要你敢用,廠家提供了自己的軟體市場和各種替代軟體,填平 Google 軟體缺失所留下的空隙,但這些產品和採用 GMS 套件的手機比起來,在水準上要低很多,這些手機不相容很多基於 GMS 開發的軟體,而且數量不少,比如很多軟體依賴 GMS 的內購功能。

第三種做法介於第一種和第二種之間:釋出基於AOSP的裝置,但是開發與 GMS 一樣的 API 以保證相容性,比如GPS和地圖服務,但是基於微軟而不是 Google 的。很少有廠家選擇這條道路,最接近這種做法的只有 Amazon,它們提供了 GMS API 的替代方案(特別是地圖服務),但完全沒法跟上 Google 的開發迭代速度。

是從技術上說,如果一家公司足夠土豪心,豹子膽,完全開發出自己的 API, 整個端掉 GMS,這代價也絕對沒法讓人淡定。特別是為了保證相容性,這活不光是提供與 GMS 想通的功能,還包括提供和 GMS 提供的開發框架和開發者工具。

另外,GMS 還有一些無法替代的東西,比如「Google+ 分享」,很少有公司能提供能與之匹敵的替代方案。又比如,GMS裡有一個 API 提供了多人回合遊戲功能,雖然廠家可以提供自己的API,並建設自己的後臺硬體支援回合制遊戲服務,但顯然這完全脫離 GMS 的做法,無法讓遊戲開發者接受。

更不要說這麼大費周章搞掉 GMS,定是不小心忘了 Google 和 Oracle 之間關於這些 API 的漫長的專利官司。事實上,能做出這樣事情的廠家,不可能不引起 Google 法務部門的瘋狂點贊。Google有錢啊,如果他願意,法庭當茶館,慢慢和你談。

除了以上三條路以外,總有狠人能比劃出第四條道路:只用 AOSP 的最基礎的功能,比如硬體支援層、通訊模組什麼的,餘下的全部推牆揭瓦,自己開發……但這相當於又把 Android 從頭開發了一遍。Amazon 的自有API 可以歸入這種「猛人」行列,提供了功能一樣,但是實現了與 GMS 完全不相容的 API。我想不太會有廠家能做出 Amazon 這種事情。雖然還有像 Ubuntu for Android 這種怪東西,但那只是精神可嘉。

嘛? C.O.S. 比這還猛?但是這貨比劃的實在太猛了,我連呵呵都不敢。

以上四種途徑中,第一種 AOSP 加 GMS 的做法是唯一能提供完整 Android 體驗的方法,並能保證開發者不會有任何彆扭的地方,也是唯一能相容所有Andoid第三方應用的途徑。但顯然,這種做法不是微軟能接受的,這等於幫 Google 做硬體,讓 Google 唱戲,而且這一唱就沒有翻身之日了。

第二種 —— 在 AOSP 的基礎上提供一些替代應用,這可以讓微軟在 Android 上整合自己的服務。這樣雖然能支援不少 Android 應用,但能支援多少並不確定。但至少肯定沒法支援像 植物大戰殭屍2,憤怒的小鳥這些依賴 GMS,並且有大量內購利潤的大牌應用,但如果這部手機就是設計來主要使用內建應用就行的(比如相機,瀏覽器,郵件客戶端),那丟掉些相容性也無大礙。

NOKIA 傳說中在開發的 Android 手機可能就是以這種方式實現:AOSP作為底層,上面全是諾基亞自己的服務。

這種做法可能只適合於對軟體相容性要求不高的低端市場,能不能打正版殭屍無所謂的超低價手機,也是很多中國廠家採用的方案。但是對於微軟來說,這完全搞錯了方向:這家公司已經有了一個不能支援許多高大上賺錢應用的雞肋系統,幹嘛還要再搞一個?!

而且,能想象這種 Android 手機的使用者體驗有多差。Google 已經把眾多核心功能遷移到 GMS 框架內,比如簡訊和 Chrome 瀏覽器。AOSP 是一個多bug、老舊,基本上不會再有後續維護的框架。想要拋開 GMS 從 AOSP 開始重起爐灶,開發出同等使用者體驗的系統,那前面就是兩萬五千里長徵在歡迎你。因為 Android 開源的部分很差。

Amazon 的 Kindle Fire 就是一個例子告訴你從 AOSP 平地起樓有多難。Kindle Fire 不支援最新最酷的遊戲,因為開發者沒興趣去同時維護一個不依賴 GMS 框架的產品線,雖然兩者之間看上去很像。Windows Phone 所遇到的問題,換了 Android 也完全沒有解決。只能帶上 GMS 才能玩得開。

第三條道路,就是在 AOSP 的基礎上,從頭開發與 GMS 完全相容的介面——或許可以解決這個問題,但這也把做 Android 分支的工作量放大到極大。但如果能做到完全提供與 GMS 一樣的介面,開發者和使用者的體驗,以及那些只基於 AOSP 的程式的相容性都可以得到保證。

但這個工作量……打個比方,大概和把 Windows Phone 的殼和 API 全部套在桌面版的 Windows 系統一樣。某種程度上,這個工作量可能會更大,比如在 AOSP 上重新開發一遍 IE 瀏覽器。

更重要的是,Google 還是把著上游控制權,因為 Android 系統的表現,完全是基於底層 API 提供的功能的:比如「分享到」功能,完全是 Android 自己的方法和風格,而這都是由 Google 決定的,這就限制了下游開發者無法反駁 Google 的選擇。

最後一個 —— 除了 AOSP,其他全部推翻重來。自由度和靈活度都有了,然後呢?核心其實根本不重要好不好,不就是個核心麼!微軟已經有了一個手機系統的核心了,在 Window Phone 8 用的好好的。很明顯,對微軟來說,拋棄整個 Windows Phone 系統不是說連這核心都能不要了。這已經是一個為微軟量身打造的手機系統核心,沒道理用別人的。而且核心真的不是整件事情最難的部分。

如果 Android 真的和 Firefox OS 或者 Ubuntu 一樣的開源境界,那麼「微軟你就從了 Android 吧」這種話題才有意義。但是 Android 和 GMS 已經密不可分。如果所有東西都在 AOSP 的開源框架下,其他人才能把後臺服務的一塊塊程式碼替換掉,以較小的工作量,同時又不毀掉相容性,這件事情才有可能。

但顯然事情已經不是這樣。不光因為 Android 骨子裡根本就不開源,而且 Google 正努力把它搞得越來越不開源。所以對於想 fork 自己的 Android 系統的人來說,選擇只有兩個:要麼受制於 Google 得到其他的好處,要麼把控制權拿來,並放棄一切。

Android 天生就不是讓你來隨便 fork 的。因為 GMS,Google 擺明了就是不許別人 fork。那些建議微軟從了 Android 的人,不是居心叵測,就是根本不懂 Google 為什麼要做「開源」的 Android。

別忘了 Google 和硬體商簽訂的授權協議裡規定了,通過 Google 授權採用 Android 系統的廠家不允許製造不含GMS套件但又基於 AOSP ,同時相容 GMS API 的手機裝置。換句話說,如果有廠家敢為其他軟體商製造純 AOSP 的裝置,將被完全拒絕使用任何 GMS 的軟體和 API 服務。Amazon 只好費盡力氣在地球上找到一家這樣的 OEM 廠家來給他們代工造 Kindle,這必定是一家對自己的 Android 產品的沒有任何市場野心的公司。

[Junius via ars]

Android 開源的真相: 無法fork原文請看這裡

推薦文章