Android支持主線Linux內(nèi)核還需要多久?
作為當(dāng)前市場上唯一能與 iOS 抗衡的移動操作系統(tǒng),基于 Linux 開發(fā)的 Android 系統(tǒng)重要性不言而喻。但是為了使其更加適應(yīng)智能手機的需求,華為、三星以及谷歌自己等 OEM 廠商,乃至高通和聯(lián)發(fā)科等芯片廠商,其實都在 Android 系統(tǒng)的底層方面進行了大量的修改。這也就不可避免地帶來了系統(tǒng)安全性、維護性等諸多問題,從而備受開發(fā)者吐槽。
為什么 Android 設(shè)備總是運行古老的內(nèi)核?
如果你對手機有一定的了解,那么你肯定知道谷歌的 Android 系統(tǒng)是基于 Linux 內(nèi)核的操作系統(tǒng),但是,運行在 Android 設(shè)備上的內(nèi)核其實與 Google 選擇的 LTS 版本 Linux 內(nèi)核有很大不同。
通常來說,Android 設(shè)備使用的內(nèi)核會經(jīng)歷三次 fork:
首先是 Google 選擇一個 LTS 版本,將其轉(zhuǎn)變成 Android Common 內(nèi)核——即打上了 Android OS 特有的補??;
Android Common 隨后提供給 SoC 供應(yīng)商如高通,經(jīng)歷第二次fork,打上高通硬件補丁變成SoC 內(nèi)核;
該內(nèi)核之后提供給設(shè)備制造商經(jīng)歷第三次 fork ,打上支持設(shè)備不同元件的內(nèi)核補丁變成設(shè)備內(nèi)核,這個內(nèi)核才是最后隨手機提供給客戶的。
在去年的 Linux Plumbers 大會上,谷歌工程師 Sandeep Patil 也曾就這個問題詳細介紹過。他表示:
Android 內(nèi)核起初是一個來自主線的長期穩(wěn)定(LTS)版本,這些版本結(jié)合 Android 核心的專有代碼構(gòu)成了 Android 公共內(nèi)核版本。供應(yīng)商選擇一個公共內(nèi)核,然后添加更多的樹外代碼,從而創(chuàng)建一個特定于片上系統(tǒng)(SoC)的內(nèi)核,并提供給設(shè)備制造商。
最終,這些 SoC 內(nèi)核中的其中一個被凍結(jié),可能加入了另外一些樹外代碼,作為一個特定設(shè)備模型的內(nèi)核?,F(xiàn)在,只需要幾周就可以把一個 LTS 版本合并到 Android 公共內(nèi)核中,但它仍然需要幾年才能成為設(shè)備內(nèi)核。
這就是為什么 Android 設(shè)備總是運行古老的內(nèi)核。
以 Google 10 月份最新發(fā)布的旗艦手機 Pixel 4 為例,其使用的是 Linux kernel 4.14 LTS,這個版本是在 2017 年 11 月發(fā)布的,而且在可預(yù)見的未來,該型號的手機會一直停留在 4.14——總之,Android 內(nèi)核的開發(fā)和管理方式從一開始就消除了使用 Linux 帶來的許多優(yōu)勢:內(nèi)核更新緩慢,大量樹外代碼的使用使得要合并新的穩(wěn)定更新變得極為困難。
為減少這樣的代碼、提升系統(tǒng)的安全性,同時也為了更方便地維護系統(tǒng),谷歌已經(jīng)投入了大量的資源,并試圖縮小各 Android 設(shè)備內(nèi)核與主線 Linux 內(nèi)核間的差距,讓設(shè)備內(nèi)核更接近上游內(nèi)核主線。
模塊化的未來?
在今年的 Linux Plumbers Conference 大會上,谷歌工程師在公司如何使 Android 系統(tǒng)底層更加接近主流 Linux 內(nèi)核方面做了演講。
其表示,具體方法是模塊化:谷歌計劃穩(wěn)定 Linux 的內(nèi)核 ABI,Android 內(nèi)核將由 Generic Kernel Image (GKI) 和多個 GKI 模塊構(gòu)成,以模塊化方式加載所需的硬件驅(qū)動或其它補丁,從而提供一個穩(wěn)定的寫入接口,使硬件供應(yīng)商可以輕松地插入代碼,最終消除特定的設(shè)備內(nèi)核。
總之在該設(shè)想中,所有東西都將被模塊化。
隨著 Linux 內(nèi)核的演變,目前的 Linux 內(nèi)核與以往相比更加適合在移動設(shè)備當(dāng)中使用,因此谷歌已經(jīng)不需要對目前主流的系統(tǒng)內(nèi)核進行很大的改動。谷歌表示,計劃的第一步是將在 Android 內(nèi)核方面的修改更多地回歸到主流 Linux 內(nèi)核上。
截至 2018 年 2 月,與 Linux 4.14.0 內(nèi)核相比,Android 通用內(nèi)核插入了 32000 行代碼,并且刪除了 1500 多行代碼。與幾年前 60000 行代碼的插入量相比,谷歌已經(jīng)大幅度減少了對內(nèi)核代碼的修改程度。
此外,根據(jù)谷歌的計劃,目前處于開發(fā)階段的 Fuchsia 系統(tǒng)將在未來代替目前主流的 Android 系統(tǒng)。這款采用自定義內(nèi)核的系統(tǒng),可以更好地消除與 Linux 系統(tǒng)有關(guān)的技術(shù)障礙。對于芯片制造商與 OEM 商場的修改,谷歌將驅(qū)動程序和應(yīng)用程序與 Android 內(nèi)核區(qū)分開,從而保持系統(tǒng)內(nèi)核的純凈度——其 2017 年推出的 Project Treble 項目也是谷歌計劃的一部分。
這也意味著,雖然在 Android 設(shè)備上運行主線內(nèi)核的夢想還沒有實現(xiàn),站長資源平臺但谷歌的動作可能會讓這一天來得比想象中更快。
無論如何,將 Android 設(shè)備內(nèi)核引入主線 Linux 內(nèi)核肯定會是大勢所趨的未來,包括 Android 用戶、手機制造商和 Linux 社區(qū)等在內(nèi)的不少人都將受益。在引導(dǎo) Android 內(nèi)核盡可能接近主線的路上,谷歌也一直在努力。但是考慮到 Android 生態(tài)系統(tǒng)的技術(shù)壁壘和多樣性,這應(yīng)該不是一件容易的事情。