Наиболее важным изменением в разработке стало решение по переходу после 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 обычных хука, аналогичных точкам трассировки (tracepoint), и 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-ядер (Android Common Kernel), поставщики часто не спешат поставлять эти обновления или вообще используют одно ядро на протяжении всего жизненного цикла устройства.
Источник: OpenNET.ru