En esta página, se describe el proyecto de imagen genérica del kernel (GKI) y cómo aumenta la estabilidad de Android y mejora la seguridad.
Historial
Cada dispositivo con Android necesita un kernel de producción. Antes de GKI, los kernels eran personalizados y se basaban en el kernel común de Android (ACK), con cambios específicos del dispositivo realizados por los proveedores de sistemas en chip (SoC) y los OEM.
Esta personalización podría hacer que hasta el 50% del código del kernel sea código fuera del árbol y no de los ACK o kernels de Linux upstream. Por lo tanto, la naturaleza personalizada de los kernels anteriores a GKI generó una fragmentación significativa del kernel.
Costos de fragmentación
La fragmentación del kernel tiene varios efectos negativos en la comunidad de Android.
Las actualizaciones de seguridad requieren mucho trabajo
Los parches de seguridad que se mencionan en el boletín de seguridad de Android (ASB) deben portarse a cada uno de los kernels del dispositivo. Sin embargo, debido a la fragmentación del kernel, es prohibitivamente costoso propagar correcciones de seguridad a los dispositivos Android en el campo.
Es difícil combinar las actualizaciones compatibles a largo plazo.
Las versiones con asistencia a largo plazo (LTS) incluyen correcciones de seguridad y otras correcciones de errores críticas. Mantenerse al día con las versiones LTS demostró ser la forma más eficaz de proporcionar correcciones de seguridad. En los dispositivos Pixel, se descubrió que el 90% de los problemas de seguridad del kernel informados en el ASB ya se habían solucionado en los dispositivos que se mantienen actualizados.
Sin embargo, con todas las modificaciones personalizadas en los kernels del dispositivo, es difícil combinar las correcciones de LTS en los kernels del dispositivo.
Inhibe las actualizaciones de lanzamiento de la plataforma de Android
La fragmentación dificulta que se agreguen funciones nuevas de Android que requieran cambios en el kernel a los dispositivos en el campo. El código del framework de Android debía tener en cuenta las diferentes variaciones del kernel y no podía depender de las nuevas funciones de Android que se implementaban en el kernel. Esto ralentizó la innovación y aumentó el tamaño y la complejidad del código.
Es difícil contribuir con los cambios del kernel a Linux upstream.
La forma fragmentada de extraer parches en los kernels de producción causó una demora de hasta 18 meses desde el momento en que una versión LTS estaba disponible en upstream hasta que estaba en un dispositivo. Esta larga demora entre la versión del kernel upstream y los productos dificulta que la comunidad de Android envíe las funciones y los controladores necesarios a los kernels upstream. Cuando un usuario envió sugerencias de mejoras, la base de código había cambiado, lo que dificultaba mostrar la relevancia del parche.
Corrige la fragmentación: Imagen genérica del kernel
El proyecto de imagen genérica del kernel (GKI) se encarga de la fragmentación del kernel unificando el kernel principal y transfiriendo la asistencia del SoC y la placa desde el kernel hacia los módulos cargables del proveedor. GKI también presenta una interfaz de módulo de kernel (KMI) estable para los módulos del proveedor, de modo que los módulos y el kernel se puedan actualizar de forma independiente. Estas son algunas de las características del kernel de GKI:
- El kernel de GKI se compila a partir de las fuentes de ACK.
- El kernel de GKI es un binario de un solo kernel más los módulos cargables asociados por arquitectura y por versión de LTS.
- El kernel de GKI se prueba con todas las versiones de la plataforma de Android que son compatibles con el ACK asociado. No hay baja de funciones durante el ciclo de vida de una versión del kernel de GKI.
- El kernel de GKI expone un KMI estable a los controladores dentro de un LTS determinado.
- El kernel de GKI no contiene código específico de SoC ni de la placa.
Para obtener una imagen de la arquitectura de GKI, consulta la descripción general del kernel.
Imagen común
A partir de Android 12, los dispositivos que se envían con la versión 5.10 del kernel o una posterior deben enviarse con el kernel de GKI. Las compilaciones de lanzamiento de imágenes genéricas de kernel (GKI) se actualizan periódicamente con LTS y correcciones de errores críticas. Debido a que se mantiene la estabilidad binaria para el KMI, puedes instalar estas imágenes de inicio sin hacer cambios en las imágenes del proveedor. El proyecto GKI tiene los siguientes objetivos:
- No introduzcas regresiones significativas de rendimiento o energía cuando reemplaces el kernel del producto por el kernel de GKI.
- Permite que los socios proporcionen correcciones de seguridad y errores del kernel sin la participación del proveedor.
- Reduce el costo de actualizar la versión principal del kernel de los dispositivos.
- Mantén un solo binario de kernel de GKI por arquitectura actualizando las versiones del kernel con un proceso de actualización claro.