Привет, хабр! Все знают, что Android использует ядро Linux. В этой статье мы разберёмся, как современные (12+) версии Android позволяют Google обновить ядро Linux без участия вендора устройства, и как при помощи этого же механизма Google может обновить ядро с Linux на Fuchsia .

Краткая история ядра Linux в Android

До релиза Android GKI в Android 12 ядро Linux типично форкалось как минимум 3 раза до того как попасть на пользовательское устройство:

  1. Google форкал LTS-ветку актуального ядра в Android Common Kernel и накладывал свои патчи.

  2. SoC-вендор получал ядро от Google и добавлял свои патчи, специфичные для конкретного чипа.

  3. Производитель устройства получал ядро от SoC-вендора и добавлял ещё больше патчей.

Эта игра в сломанный телефон приводила к тому, что несмотря на то что Google управляет кодом ОС, они не могли доставить критичные исправления багов (в том числе уязвимостей) до конечных устройств, потому что патч должен пройти всю цепочку от mainline-ветки ядра до OEM-вендора, а потом вендор должен скомпилировать ядро и выкатить обновление. К тому же, многим вендорам не выгодно поддерживать старые устройства, что приводило к ещё большей фрагментации версий ядра.

Generic Kernel Image

Чтобы победить фрагментацию, начиная с Android 11 и версии ядра 5.4 Google обязует производителей устройств использовать GKI — общее для всей устройств ядро, собранное и подписанное Google. Все изменения, которые раньше были патчами вендоров поверх ядра, должны быть вынесены в специальные модули ядра GKI modules, которым запрещено использовать структуры ядра напрямую — вместо этого они должны линковаться с обёртками, предоставленными Google в Kernel Module Interface (KMI). KMI гарантирует стабильность ABI в рамках одной и той же версии ядра и Android, например, android13-5.10. Список структур и функцией, доступных модулям, можно посмотреть в сгенерированных дампах.

Теперь вернёмся к кликбейту, который я разметил в заголовке: поскольку ABI теперь фиксирован и контролируется Google, этот же ABI может реализовать и какое-нибудь другое ядро ОС. Пока что никаких новостей или даже слухов по этому поводу нет, но увидеть Android миграцию на микроядро было бы очень интересно.

Комментарии (0)