一年一度的 Linux Plumbers 大會是從事 Linux 系統(tǒng)底層開發(fā)的工程師的聚會。考慮到 Android 作為全球規(guī)模最大的 Linux 內(nèi)核發(fā)行版之一,谷歌軟件工程師 Todd Kjos 今年也參與了大會并做了分享。
他表示,即將正式亮相的 Android 12 承諾向最終用戶提供谷歌打造的“通用內(nèi)核鏡像(Generic Kernel Image,簡稱 GKI)”,以確保新一代 Android 能無限拉近與主流 Linux 的距離。
在傳統(tǒng)上,Linux 內(nèi)核在入駐 Android 手機之前會經(jīng)歷多次分叉,而且 Android 設(shè)備供應(yīng)流程中的每個利益相關(guān)方都會進行自己的分叉。簡單來說,就是谷歌先將 Linux LTS 內(nèi)核分叉為 Android Comon Kernel,之后再由 SoC 供應(yīng)商針對每款芯片進行分叉,最后由設(shè)備制造商進行再次分叉。
首先,谷歌會將 Linux 內(nèi)核分叉為“Android Common”——即 Linux 內(nèi)核加上一系列手機與 Android 特定調(diào)整。之后以高通、三星或聯(lián)發(fā)科為代表的 SoC 供應(yīng)商又會對 Android Common 進行分叉,為各個主要芯片版本開發(fā)一套 SoC 專用內(nèi)核。最后,每臺設(shè)備都要對應(yīng) SoC 內(nèi)核的一個特定分叉,用于實現(xiàn)對特定設(shè)備的硬件支持。
可以看到,Android 內(nèi)核的這種嚴(yán)重碎片化必然引發(fā)巨大混亂,我們不難想象從分支樹頂端到最終用戶推動 bug 修復(fù)會是一項多么漫長而艱難的旅程。Android.com 官方文檔提到,“內(nèi)核修改范圍極為廣泛,因此在最終設(shè)備上運行的代碼中有多達(dá) 50% 的代碼屬于樹外代碼(并非來自上游 Linux 或 AOSP 通用內(nèi)核)?!贝送?,這樣的方式還帶來嚴(yán)重的時間浪費,即使是谷歌自家的官方品牌手機也得提前兩年就開始供應(yīng)內(nèi)核。
谷歌一直希望通過 GKI 拉近 Android 與 Linux 之間的距離。谷歌的目標(biāo)是只為 Android 對 Linux 內(nèi)核進行一次分叉(而不是三次),再通過插件模塊為 SoC 及設(shè)備制造商提供定制化空間。
演示文稿中的幻燈片,其中詳細(xì)介紹了新的內(nèi)核策略時間表
Kjos 解釋道,“最大的驅(qū)動力是將所有特定于硬件的代碼從通用內(nèi)核中遷移至供應(yīng)商模塊處。要達(dá)成這個目標(biāo),我們必須在各供應(yīng)商模塊與通用內(nèi)核之間建立起穩(wěn)定的接口。只有這樣,才能讓異步發(fā)布成為現(xiàn)實?!痹摻涌诒环Q為“KMI”,即“內(nèi)核模塊接口”。Kjos 指出,目前 Android GKI 與主線 Liux 之間的“主要區(qū)別”就是各供應(yīng)商模塊間使用的 hook 有所不同。
Kjos 提到,谷歌更傾向于在供應(yīng)商模塊中使用短小的 hook(而非主干代碼),只有這樣“才能盡可能靠近上游”。雖然一直在努力將供應(yīng)商代碼推向上游,但谷歌也承認(rèn)“這是一項需要耗時多年的龐大計劃,我們覺得恐怕很難真正實現(xiàn)。”
Kjos 還為未來幾年的內(nèi)核工作制定了時間表,其中 2020 年至 2022 年期間的主要任務(wù)是將現(xiàn)有功能推向上游、并隔離供應(yīng)商的變更模塊;從 2023 年開始,正式采用“上游優(yōu)先”新功能開發(fā)模型?!翱紤]到樹外模式對我們的用例非常重要,我們希望能在上游之外也始終保持一定程度的外部開發(fā)空間。但必須承認(rèn),這項將耗時多年的整體計劃是要盡可能消除樹外補丁,讓下游產(chǎn)出盡可能與上游保持一致?!?/p>
谷歌的通用內(nèi)核鏡像工作與 Treble 項目非常相似,后者的目標(biāo)在于建立起 GSI(即「通用系統(tǒng)鏡像」),允許以硬件中立的方式更新 Android 版本。如今,我們可以將通用版本的 Android 下載到手機并獲得不錯的運行體驗。但 GKI 的意義有所不同,谷歌希望通過它直接將通用內(nèi)核交付至最終用戶手中。
雖然演講中并沒有明確提及,但谷歌確實在努力將 GKI 作為“項目主線”模塊進行發(fā)布。在它的幫助下,內(nèi)核更新將能夠通過 Play 應(yīng)用商店發(fā)布,整個更新過程與移動應(yīng)用基本一致。我們已經(jīng)多次就 GKI 采訪了 Android 團隊的成員,他們的最終計劃不僅是通過 Play 應(yīng)用商店更新 LTS 內(nèi)核版本,更是要實現(xiàn)對主要新版本的升級能力。如今,TLS 內(nèi)核更新偶爾會通過 OTA 的形式送達(dá),但新的主要內(nèi)核版本更新對大多數(shù)移動設(shè)備仍是個老大難問題。
GKI 計劃在“Android 12”版本中與廣大消費者正式見面。因為這次內(nèi)核升級調(diào)整只適用于新設(shè)備,所以全世界的目光都集中在了 Pixel 6 身上。我們也期待著雄心勃勃的谷歌能借此機會一展自己的強大實力。
Pixel 6 將是第一款配備內(nèi)部“Google Tensor”SoC 的移動設(shè)備;如果關(guān)于谷歌延長技術(shù)支持時間線的理論準(zhǔn)確無誤,那么這種內(nèi)核大版本升級能力將使該設(shè)備的生命周期超過五年。而且如果 Pixel 6 中使用的是發(fā)布于 2020 年 12 月的 Linux 5.10 內(nèi)核,則代表著谷歌已經(jīng)在以往平均滯后兩年的內(nèi)核版本基礎(chǔ)之上邁出了重要的一步。