На последней конференции Linux Plumbers 2021 компания Google рассказала об успехе инициативы по переводу платформы Android на использование обычного ядра Linux вместо использования собственной версии ядра, включающей изменения, специфичные для платформы Android.
Наиболее важным изменением в развитии стало решение перейти после 2023 года к модели «Upstream First», которая подразумевает разработку всех новых функций ядра, необходимых для платформы Android, непосредственно в основном ядре Linux, а не в отдельных его ветвях (функциональность будет продвигаться в основное ядро, а затем использоваться в Android, а не наоборот). В 2023 и 2024 годах также планируется перенести в основное ядро все дополнительные исправления, оставшиеся в ветке Android Common Kernel.
Что касается ближайшего будущего, то для платформы Android 12, ожидаемой в начале октября, будут предложены сборки ядра Generic Kernel Image (GKI), максимально приближенные к обычному ядру 5.10. Для этих сборок будет осуществляться регулярный выпуск обновлений, которые будут размещаться в репозитории ci.android.com. В ядре GKI специфические для Android дополнения, а также обработчики аппаратного обеспечения от OEM-производителей вынесены в отдельные модули ядра. Эти модули не привязаны к основной версии ядра и могут разрабатываться отдельно, что значительно упрощает обслуживание и перевод устройств на новые ветки ядра.
Необходимые производителям устройств интерфейсы реализованы в виде хуков, которые позволяют изменять поведение ядра без внесения изменений в код. Всего ядро android12-5.10 предлагает 194 обычных хуков, похожих на tracepoints, и 107 специализированных хуков, позволяющих запускать обработчики в неатомарном контексте. В ядре GKI производителям оборудования запрещено применять специфические патчи к основному ядру, а компоненты для поддержки оборудования должны поставляться производителями только в виде дополнительных модулей ядра, в которых должна быть обеспечена совместимость с основным ядром.
Напомним, что для платформы Android разработана собственная ветка ядра — Android Common Kernel, на основе которой формируются отдельные специфические сборки для каждого устройства. Каждая ветка Android предоставляет производителям несколько вариантов компоновки ядра для своих устройств. Например, Android 11 предлагал на выбор сразу три базовых ядра — 4.14, 4.19 и 5.4, а для Android 12 будут предложены базовые ядра 4.19, 5.4 и 5.10. Вариант 5.10 разработан как Generic Kernel Image, в котором возможности, необходимые OEM-производителям, перенесены в upstream, перенесены в модули или перенесены в Android Common Kernel.
Перед появлением GKI ядро для Android прошло несколько этапов подготовки:
- На основе основных ядер LTS (3.18, 4.4, 4.9, 4.14, 4.19, 5.4) был создан форк » Android Common Kernel «, в который были перенесены патчи, специфичные для Android (ранее размер изменений достигал нескольких миллионов строк).
- На основе «Android Common Kernel» производители чипов, такие как Qualcomm, Samsung и MediaTek, сформировали «SoC Kernel», которое включает дополнения для поддержки аппаратного обеспечения.
- На основе «SoC Kernel» производители устройств создали «Device Kernel», включающее изменения, связанные с поддержкой дополнительного оборудования, экранов, камер, звуковых систем и т.д.
Такой подход значительно усложнял поставку обновлений с устранением уязвимостей и переходом на новые ветки ядра. Хотя Google регулярно выпускает обновления общего ядра Android, производители часто не спешат поставлять эти обновления или вообще используют одно ядро на протяжении всего жизненного цикла устройства.