Google describe planes para admitir el kernel principal 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 todos los teléfonos Android. La compañía fue un participante importante en la Conferencia de fontaneros de Linux de este año, una reunión anual de los principales desarrolladores de Linux, y Google pasó mucho tiempo hablando sobre cómo hacer que Android funcione con un kernel genérico de Linux en lugar de la versión altamente personalizada que usa ahora. Incluso mostró un teléfono Android con un kernel principal de Linux.

Pero primero, algunos antecedentes sobre el lío actual del kernel de Android. Actualmente, se producen tres bifurcaciones principales entre el kernel de Linux «principal» y un dispositivo Android (tenga en cuenta que la «línea principal» aquí no está relacionada con el «Proyecto Mainline» de Google). Primero, Google toma el kernel de Linux LTS (Long Term Support) y lo convierte en el «kernel común de Android», el kernel de Linux con todos los parches específicos del sistema operativo Android aplicados. Android Common se envía al proveedor de SoC (generalmente Qualcomm), donde obtiene su primera ronda de adiciones de hardware específicas, enfocándose primero en un modelo de SoC específico. Este «Kernel SoC» se envía a un fabricante de dispositivos para obtener un código de hardware aún más específico que admita todas las demás piezas de hardware, como pantalla, cámara, altavoces, puertos USB y cualquier hardware adicional. Este es el «núcleo del dispositivo» y es lo que realmente viene en un dispositivo.

Este es un viaje extremadamente largo que da como resultado que cada dispositivo envíe millones de líneas de código del kernel fuera del árbol. Cada kernel de dispositivo de envío es diferente y específico del dispositivo; básicamente, ningún kernel de dispositivo en un teléfono funcionará en otro teléfono. La versión principal del kernel de un dispositivo se bloquea al comienzo del desarrollo inicial de un SoC, por lo que es típico que un nuevo dispositivo se envíe con un kernel Linux de dos años. Incluso el último y mejor dispositivo de Google, el Pixel 4, se lanzó en octubre de 2019 con el kernel de Linux 4.14, una versión LTS de noviembre de 2017. Se quedará atascado en el kernel 4.14 para siempre. Los dispositivos Android generalmente no reciben actualizaciones del kernel, probablemente gracias a la increíble cantidad de trabajo que se requiere para producir un solo kernel de dispositivo y a la cadena de empresas que tendrían que cooperar para hacerlo. Gracias a las actualizaciones del kernel que nunca ocurren, esto significa que cada nueva versión de Android generalmente tiene que ser compatible con 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 admitir versiones anteriores de Android con parches de seguridad significa que la compañía aún admite el kernel 3.18, que ya tiene cinco años. La solución de curita de Google para esto hasta ahora ha sido unirse a la comunidad de Linux y admitir las principales versiones de Linux LTS durante más tiempo, y ahora tienen hasta seis años de soporte.

El año pasado, en la Linux Plumbers Conference 2018, Google anunció su investigación inicial para acercar el kernel de Android al Linux principal. Este año, compartió un poco más de detalles sobre su progreso hasta ahora, pero definitivamente todavía es un trabajo en progreso. «Actualmente, no sabemos qué se necesita para agregar al kernel para que se ejecute en un [specific] Dispositivo Android «, dijo el líder del equipo de Android Kernel, Sandeep Patil, al grupo en LPC 2019». Sabemos lo que se necesita para ejecutar Android, pero no necesariamente en ningún hardware. Entonces, nuestro objetivo es básicamente averiguar todo eso, luego aguas arriba y tratar de estar lo más cerca posible de la línea principal. «

Publicidad

Google dice que

Google dice que «en comparación con [Linux] LTS (4.14.0), el kernel común de Android tiene 355 cambios, 32,266 inserciones y 1,546 exclusiones (a febrero de 2018). «Aquí se avanza cada año, pero recuerde que hay dos bifurcaciones más después de eso.

Si bien queda trabajo por hacer para incorporar el ecosistema de Android más amplio y una miríada de configuraciones de dispositivos, para modelos de dispositivos específicos, las cosas parecen estar progresando bien. Tom Gall, el director del Grupo de Consumidores de Linaro, mostró un Xiaomi Poco F1 ejecutando el kernel principal de Linux bajo el sistema operativo Android habitual. Gall dijo al público: «Hay apoyos importantes que se le deben dar al equipo del Kernel de Google, en particular, para obtener su código en sentido ascendente para que podamos arrancar dispositivos con un kernel principal».

Junto con el plan de enviar tanto código de kernel como sea posible, Google también tiene la intención de replicar su trabajo anterior de modularización de Android, el Proyecto Treble. Así como Treble creó una interfaz estable entre el sistema operativo Android y las capas de abstracción de hardware (HAL) del dispositivo, la propuesta de Google de acercar Android al Linux principal (¿cómo podría no haber un nombre de «diseño» tonto para eso todavía?) implica estabilizar Linux en el núcleo ABI y tener una interfaz estable para que escriban los proveedores de hardware y el núcleo de Linux. Google quiere desacoplar el kernel de Linux de su soporte de hardware.

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 desea la capacidad de actualizar un kernel rápidamente, abra el código para sus controladores y colóquelos en el árbol principal del kernel, donde Se harán cambios para cuidar de usted. Sin embargo, los controladores de código abierto son un factor decisivo para muchas empresas de hardware, y ninguna defensa o degradación del producto cambiará eso. El hecho de que Google no admita versiones anteriores de Linux de cinco años muestra que este modelo no funciona.

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

Matthias Männich, ingeniero de software senior de Google, mostró un diagrama llamado «Android Next Generation» que mostraba cómo sería la arquitectura del kernel propuesta. Google enviaría una «Imagen de kernel genérica (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 kernel. Entonces, en lugar de horquillas sobre horquillas, todo está modularizado en paquetes de aditivos.

Publicidad

Por ahora, Google solo propone que ABI en el kernel sea estable para una única versión de LTS. Por lo tanto, esto no permitiría que los dispositivos se actualicen de una versión del kernel de Linux a otra; solo permitiría que una única imagen generalizada del kernel funcione en varios dispositivos, en lugar de las bifurcaciones del kernel específicas del dispositivo que tenemos hoy. Definitivamente permitiría actualizaciones de seguridad más fáciles y, con suerte, llevaría al mercado nuevas versiones de LTS más rápido.

Sería prematuro si dijéramos que este es un cambio que definitivamente llegará a Android y al kernel de Linux. Todavía hay muchos problemas por resolver (técnica y políticamente, imagino), y algunas de estas charlas fueron más como sesiones públicas de lluvia de ideas entre presentadores de Google e ingenieros de Linux (¡muchos de los cuales también eran empleados de Google!) En la audiencia. Este es el segundo año consecutivo en que Google apareció en LPC y lanzó la idea de usar el kernel principal de Linux en Android, y dado que Android es una de las distribuciones de Linux más grandes de la Tierra, tiene sentido que todos trabajen juntos, ¿verdad? ?

«Tenemos millas por delante y lo sabemos, pero venimos de donde comenzamos», dijo Patil a la multitud. «El año pasado hablé de ello. Esta vez, tenemos problemas que discutir».

Imagen de listado de Eric Adeleye / Flickr