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