Google está trabajando para que se utilice la versión principal del Kernel de Linux en Android
Durante la conferencia Linux Plumbers 2019 (una reunión anual de los principales desarrolladores de Linux), Google habló sobre el desarrollo de una iniciativa para transferir al núcleo principal de Linux los cambios desarrollados en la versión del núcleo para la plataforma Android.
El objetivo final es permitir que Android use la versión principal del Kernel de Linux, en lugar de tener que preparar versiones personalizadas por separado para cada dispositivo basados en la rama del núcleo común de Android específico de Android. Este objetivo ya se ha logrado parcialmente y en la conferencia se demostró el teléfono inteligente Android “Xiaomi Poco F1” con firmware basado en el núcleo Linux no modificado habitual.
Una vez que el proyecto esté listo, se solicitará a los proveedores que suministren un núcleo central basado en el Kernel principal de Linux. Los componentes para soporte de hardware serán suministrados por proveedores solo en forma de módulos de kernel adicionales, sin imponer parches en el kernel.
En los módulos, debe garantizarse la compatibilidad con el núcleo principal a nivel del espacio de nombres del símbolo del núcleo. Todos los cambios que afecten al núcleo principal serán promovidos hacia arriba.
Además, que para mantener la compatibilidad con los módulos propietarios dentro del marco de las ramas LTS, se propone mantener una API de núcleo estable y ABI, lo que permitirá mantener la compatibilidad de los módulos con las actualizaciones para cada rama común del núcleo.
A lo largo del año, características como el subsistema PSI (información de bloqueo de presión) para analizar información sobre el tiempo de espera de varios recursos (CPU, memoria, dispositivos de entrada y salida), el sistema de pseudo archivo BinderFS para el mecanismo de comunicación entre procesos, se transfirieron al núcleo principal de Linux desde el núcleo de Android, así como también el planificador de tareas de eficiencia energética EAS (Energy Aware Scheduling).
Es importante saber que hasta ahora el núcleo de Android ha pasado por varias etapas de preparación ya que actualmente, existen tres bifurcaciones principales entre el kernel de Linux “mainline” y un dispositivo Android de envío.
- Primero, Google toma el kernel de Linux LTS y lo convierte en el “Android Common Kernel”, en el cual el kernel de Linux recibe todos los parches específicos del sistema operativo Android aplicado.
- Android Common se envía al proveedor de SoC (generalmente Qualcomm) donde obtiene su primera ronda de adiciones específicas de hardware, primero enfocándose en un modelo particular de SoC.
- Este “Kernel de SoC” luego se envía a un fabricante de dispositivos para obtener aún más código específico de hardware que admita cualquier otra pieza de hardware, como la pantalla, la cámara, los altavoces, los puertos usb y cualquier hardware adicional.
Sobre la base de los principales núcleos LTS (3.18, 4.4, 4.9 y 4.14), se creó la rama “Android Common Kernel”, en la que se transfirieron parches específicos de Android (anteriormente el tamaño de los cambios alcanzó varios millones de líneas, pero recientemente los cambios se redujeron a varios miles de líneas de código)
Además de que para cada dispositivo se formó su propio núcleo, que no podía usarse en otros dispositivos.
Tal esquema complica significativamente la entrega de actualizaciones con la eliminación de vulnerabilidades y la transición a nuevas ramas del kernel. Por ejemplo, el último teléfono inteligente Pixel 4 lanzado en octubre viene con el kernel Linux 4.14, lanzado hace dos años.
En parte, Google intentó simplificar el mantenimiento promoviendo el sistema Treble, que permite a los fabricantes crear componentes de soporte de hardware universales que no están vinculados a versiones específicas de Android y las versiones de kernel de Linux utilizadas. Treble permite utilizar actualizaciones ya preparadas de Google como base, integrando componentes específicos del dispositivo en ellas.
Si bien aún queda trabajo por hacer para incorporar el ecosistema de Android de una manera más amplia al Kernel, ademas de que se requiere mucho trabajo en la parte de las configuraciones de los dispositivos para modelos específicos, pero Google dice que las cosas parecen estar progresando bien.