¿Qué es un núcleo? Si pasa algún tiempo leyendo foros, blogs, publicaciones de procedimientos o debates en línea de Android, pronto escuchará a las personas hablar sobre el núcleo. Un núcleo no es algo exclusivo de Android: iOS y MacOS tienen uno, Windows tiene uno, QNX de BlackBerry tiene uno, de hecho, todos los sistemas operativos de alto nivel tienen uno. El que nos interesa es Linux, ya que es el que usa Android. Intentemos analizar qué es y qué hace.
Los dispositivos Android usan el kernel de Linux, apuesto a que cada teléfono usa su propia versión. Los mantenedores del kernel de Linux mantienen todo ordenado y disponible, los contribuyentes (como Google) agregan o alteran cosas para satisfacer mejor sus necesidades, y las personas que hacen el hardware también contribuyen, porque necesitan desarrollar controladores de hardware para las partes que están utilizando para el versión del kernel que están usando. Es por eso que los desarrolladores y hackers independientes de Android tardan un tiempo en portar nuevas versiones a dispositivos más antiguos y hacer que todo funcione. Los controladores escritos para trabajar con una versión del núcleo para un teléfono podrían no funcionar con una versión diferente de software en el mismo teléfono. Y eso es importante, porque una de las funciones principales del núcleo es controlar el hardware. Es una gran cantidad de código fuente, con más opciones mientras lo construyes de lo que puedes imaginar, pero al final es solo el intermediario entre el hardware y el software.
Cuando el software necesita que el hardware haga algo, envía una solicitud al núcleo. Y cuando decimos algo, queremos decir cualquier cosa. Desde el brillo de la pantalla, hasta el nivel de volumen, para iniciar una llamada a través de la radio, incluso lo que se dibuja en la pantalla es controlado por el núcleo. Por ejemplo, cuando toca el botón de búsqueda en su teléfono, le dice al software que abra la aplicación de búsqueda. Lo que sucede es que tocaste cierto punto en el digitalizador, lo que le dice al software que tocaste la pantalla en esas coordenadas. El software sabe que cuando se toca ese punto en particular, se supone que se abre el cuadro de diálogo de búsqueda. El núcleo es lo que le dice al digitalizador que busque (o escuche, los eventos son "escuchados") por toques, ayuda a determinar dónde tocó y le dice al sistema que lo tocó. A su vez, cuando el sistema recibe un evento táctil en un punto específico del núcleo (a través del controlador), sabe qué dibujar en su pantalla. Tanto el hardware como el software se comunican en ambos sentidos con el núcleo, y así es como su teléfono sabe cuándo hacer algo. La entrada de un lado se envía como salida al otro, ya sea que esté jugando Angry Birds o conectándose al Bluetooth de su automóvil.
Suena complicado, y lo es. Pero también es una lógica de computadora bastante estándar: se genera una acción de algún tipo para cada evento, y dependiendo de esa acción suceden cosas al software en ejecución. Sin el núcleo para aceptar y enviar información, los desarrolladores tendrían que escribir código para cada evento individual para cada pieza de hardware en su dispositivo. Con el kernel, todo lo que tienen que hacer es comunicarse con él a través de las API del sistema Android, y los desarrolladores de hardware solo tienen que hacer que el hardware del dispositivo se comunique con el kernel. Lo bueno es que no necesita saber exactamente cómo o por qué el kernel hace lo que hace, solo entender que es el intermediario entre el software y el hardware le da una idea bastante clara de lo que está sucediendo bajo el cristal.
Una especie de perspectiva completamente nueva hacia aquellos tipos que se quedan despiertos toda la noche para trabajar en los núcleos de su teléfono, ¿no?