Google perfila sus planes de compatibilidad con el kernel de Linux en Android

Parece que Google está trabajando duro para actualizar y actualizar el kernel de Linux que se encuentra en el corazón de cada teléfono Android. La compañía participó de forma importante en la Linux Plumbers Conference de este año, una reunión anual de los principales desarrolladores de Linux, y Google dedicó mucho tiempo a hablar de cómo conseguir que Android funcione con un kernel Linux genérico en lugar de la versión altamente personalizada que utiliza ahora. Incluso mostró un teléfono Android que ejecuta un kernel Linux de línea principal.

Pero primero, algunos antecedentes sobre el actual lío del kernel de Android.Actualmente, tres grandes bifurcaciones ocurren entre el kernel Linux «de línea principal» y un dispositivo Android de envío (tenga en cuenta que «de línea principal» aquí no tiene relación con el propio «Proyecto de Línea Principal» de Google). En primer lugar, Google toma el kernel LTS (Long Term Support) de Linux y lo convierte en el «kernel común de Android», es decir, el kernel de Linux con todos los parches específicos del sistema operativo Android aplicados. Android Common se envía al proveedor del SoC (normalmente Qualcomm), donde recibe su primera ronda de adiciones específicas para el hardware, centrándose primero en un modelo concreto de SoC. Este «Kernel del SoC» se envía entonces al fabricante del dispositivo para que le aplique aún más código específico para el hardware, que soporta todas las demás piezas de hardware, como la pantalla, la cámara, los altavoces, los puertos USB y cualquier otro hardware adicional. Esto es el «Kernel del dispositivo», y es lo que realmente se envía en un dispositivo.

Ver más

Este es un viaje extremadamente largo que resulta en que cada dispositivo envía millones de líneas de código del kernel fuera del árbol. Cada kernel de dispositivo que se envía es diferente y específico del dispositivo: básicamente, ningún kernel de dispositivo de un teléfono funcionará en otro. La versión principal del kernel de un dispositivo se fija al principio del desarrollo inicial de un SoC, por lo que es habitual que un dispositivo nuevo salga al mercado con un kernel de Linux de hace dos años. Incluso el último y mejor dispositivo de Google, el Pixel 4, se envió en octubre de 2019 con el kernel Linux 4.14, una versión LTS de noviembre de 2017. También estará atascado en el kernel 4.14 para siempre. Los dispositivos Android no suelen recibir actualizaciones del kernel, probablemente gracias a la increíble cantidad de trabajo que se necesita para producir un solo kernel de dispositivo y la cadena de empresas que tendrían que cooperar para hacerlo. Gracias a que las actualizaciones del kernel nunca se producen, esto significa que cada nueva versión de Android normalmente tiene que soportar los últimos tres años de versiones del kernel LTS (el mínimo para Android 10 es 4.9, una versión de 2016). El compromiso de Google de dar soporte a las versiones más antiguas de Android con parches de seguridad significa que la empresa sigue dando soporte al kernel 3.18, que ya tiene cinco años. La solución de Google para esto hasta ahora ha sido asociarse con la comunidad de Linux y apoyar las versiones LTS de Linux de línea principal durante más tiempo, y ahora están hasta seis años de apoyo.

El año pasado, en la Conferencia de Plomeros de Linux 2018, Google anunció su investigación inicial para acercar el kernel de Android a la línea principal de Linux. Este año compartió un poco más de detalles sobre su progreso hasta ahora, pero definitivamente sigue siendo un trabajo en progreso. «Hoy en día, no sabemos lo que se necesita para ser agregado al kernel para ejecutarse en un dispositivo Android», dijo el líder del equipo del kernel de Android, Sandeep Patil, al grupo en LPC 2019. «Sabemos lo que se necesita para ejecutar Android, pero no necesariamente en un hardware determinado. Así que nuestro objetivo es básicamente encontrar todo eso, luego upstream y tratar de estar tan cerca de la línea principal como sea posible.»

Google dice que «en comparación con LTS (4.14.0), el kernel común de Android tiene 355 cambios, 32.266 inserciones y 1.546 eliminaciones (a partir de febrero de 2018).» Aquí se avanza cada año, pero hay que tener en cuenta que aún quedan dos forks más después de este.

Si bien aún queda trabajo por hacer para que el ecosistema Android más amplio y la miríada de configuraciones de dispositivos se sumen a él, para los modelos específicos de dispositivos, las cosas parecen progresar bien. Tom Gall, director del Linaro Consumer Group, mostró un Xiaomi Poco F1 que realmente ejecuta el kernel Linux de línea principal bajo el sistema operativo Android habitual. Gall dijo a la audiencia: «Hay que dar grandes, grandes apoyos al equipo del kernel de Google, en particular, por conseguir su código para que podamos arrancar los dispositivos con un kernel de línea principal».

Junto con el plan de subir todo el código del kernel posible, Google también pretende replicar su trabajo anterior de modularización de Android, Project Treble. Al igual que Treble creó una interfaz estable entre el sistema operativo Android y las HAL (capas de abstracción de hardware) de los dispositivos, la propuesta de Google para acercar Android a la línea principal de Linux (¿Cómo es que todavía no hay un nombre tonto de «proyecto» para esto?) implica estabilizar la ABI del núcleo de Linux y tener una interfaz estable para que el núcleo de Linux y los proveedores de hardware escriban en ella. Google quiere desacoplar el kernel de Linux de su soporte de hardware.

Publicidad

La comunidad de Linux ha estado en contra de la idea de una interfaz estable durante algún tiempo, con la sugerencia de que si quieres la capacidad de actualizar rápidamente un kernel, abre el código de tus controladores y ponlos en el árbol principal del kernel, donde cualquier cambio será atendido por ti. Sin embargo, el código abierto de los controladores es un obstáculo absoluto para muchas empresas de hardware, y ninguna cantidad de promoción o degradación del producto va a cambiar eso. El hecho de que Google esté atascado dando soporte a versiones de Linux de hace cinco años demuestra que este modelo no está funcionando.

Ampliar / En lugar de un montón de bifurcaciones, Google imagina el nuevo kernel como una serie de módulos.

Matthias Männich, un ingeniero de software senior de Google, mostró un diagrama etiquetado como «Android Next Generation» que mostraba cómo sería esta arquitectura de kernel propuesta. Google enviaría una «Imagen Genérica del Kernel (GKI)» junto con varios «Módulos GKI» que expondrían esta API/ABI estable en el kernel. Los controladores específicos del hardware (probablemente controladores de código cerrado) se cargarían como módulos del núcleo. Así, en lugar de bifurcaciones sobre bifurcaciones, todo se modularía en paquetes aditivos.

Por ahora, Google sólo propone que la ABI del núcleo sea estable para una única versión LTS. Así que esto no permitiría que los dispositivos se actualizaran de una versión del kernel de Linux a otra – sólo permitiría que una sola imagen del kernel generalizada funcionara en múltiples dispositivos, en lugar de las bifurcaciones del kernel específicas para cada dispositivo que tenemos hoy en día. Definitivamente permitiría actualizaciones de seguridad más fáciles y, con suerte, conseguiría que las nuevas versiones LTS llegaran al mercado más rápido.

Publicidad

Seríamos prematuros si dijéramos que este es un cambio que definitivamente va a llegar a Android y al kernel de Linux. Todavía hay toneladas de problemas por resolver (tanto técnica como políticamente, me imagino), y algunas de estas charlas eran más bien sesiones públicas de brainstorming entre los presentadores de Google y los ingenieros de Linux (¡muchos de los cuales eran también Googlers!) en la audiencia. Este es el segundo año consecutivo en que Google se presenta en la LPC y propone la idea de utilizar el núcleo principal de Linux en Android, y dado que Android es una de las mayores clases de Linux de la Tierra, tiene sentido que todos trabajen juntos, ¿no? «El año pasado, hablé de su existencia. Esta vez, realmente tenemos problemas que discutir».

Deja una respuesta

Tu dirección de correo electrónico no será publicada.