Linux es uno de esos programas con los que muchos se llenan la boca cuando hablan de dónde se puede ejecutar, con afirmaciones tales como que lo verás en tu televisión, tu frigorífico e incluso tu tostadora.
Pero no son más que afirmaciones sensacionalistas. Linux se podrá instalar en una lavadora sólo si la lavadora cumple con los requisitos mínimos. ¿Y cuáles son esos requisitos?
Muchos veréis que a día de hoy algunas distros como Debian siguen marcando sus paquetes x86 de 32 bits como compilados para la arquitectura i386, pero desde hace años esa nomenclatura es falsa ya que los requisitos mínimos son un procesador Pentium. Es decir, que hace falta un micro de 32 bits con coprocesador matemático.
Si nos vamos a la rama 2.6 que dejó de tener soporte en 2016 (no hace tanto), sus requisitos bajan a un micro de 32 bits con unidad de gestión de memoria (MMU), lo que se traduce en un 386 si nos vamos a x86.
Yéndonos a la práctica, puede que los dispositivos con Linux más limitados que usamos (o que tenemos la posibilidad de usar) a diario, sean ciertos routers con firmwares como el célebre DD-WRT/OpenWRT. Pero no olvidemos que cacharros como el mítico Linksys WRT54G, van motorizados con un procesador MIPS de 32 bits.
A fin de cuentas, hace falta una FPU para kernels actuales o una MMU para versiones legacy. Pero esta respuesta es demasiado sosa. ¿Qué pasa si quieres darle una segunda vida a ese 8086 que tienes cogiendo polvo desde hace 30 años? Va a ser difícil sacarle partido, pero si te gusta experimentar, desde hace años hay un proyecto cuyo fin es precisamente ofrecer un kernel de Linux que funcione en un 8086 con 640kb de RAM. Y la cuestión es que funciona.
Se trata de ELKS (Embeddable Linux Kernel Subset), un proyecto que ha trabajado desde hace tiempo en sacar una versión de Linux (muy limitada, pero que cumple con el estándar Unix v7) que funciona en procesadores de 16 bits. Tiene un soporte de hardware básico limitado a los puertos serie y paralelo. Desde el punto de vista práctico esto parece que no sirve de mucho porque en cualquier microcontrolador actual medio decente vamos a encontrar una potencia, si no igual, sí superior a aquellos 8086. Pero pensar que lo más básico de Linux se puede ejecutar en estas máquinas, nos da una idea de los verdaderos requisitos mínimos del sistema.
Y ahora que he mencionado los microcontroladores, ¿se podría ejecutar Linux en uno de ellos? Si tiene MMU y la CPU es de 32 bits, probablemente sí. Si la CPU es de 16 bits, quizás se podría conseguir arrancar con funcionalidades básicas (ELKS ha demostrado que es posible). Pero ¿y si la CPU es de 8 bits?
Pensar que Linux se puede ejecutar en un procesador de 8 bits puede parecer descabellado. En el mundo x86 no existe nada así: el primer micro x86 era de 16 bits. Pero en la actualidad hay multitud de microcontroladores básicos con este ancho de bus.
Pues bien, un tal Dmitry Grinberg (célebre por sacar herramientas que exprimían todo el jugo al hardware de la Palm), sacó hace ya unos años algo que permite ejecutar Linux en microcontroladores de 8 bits. En concreto, ha usado un ATmega644a muy similar al que se encuentra en Arduino UNO. Pero en este caso Grinberg ha hecho algo de trampa, aunque hay que reconocer que se trata una trampa muy bien ejecutada.
Básicamente ha usado el microcontolador como CPU. A este le ha añadido un módulo de memoria SIMM de 30 pines (sí, de los que se usaban en los 386 y en aquellas tarjetas de sonido). Como sistema de almacenamiento ha usado una memoria flash de 1Gb.
Como todo esto pasó hace ya unos años, la versión de Linux no es la más reciente pero es una rama moderna. De hecho, usó toda una distro como Ubuntu 9.04. Seguramente ahora alguno se habrá perdido. ¿Una distro precompilara en un microcontrolador AVR de 8 bits? Y es que aquí viene la trampa. Grinberg desarrolló un emulador de ARM para AVR. En concreto, la CPU emulada es una ARMv5TE.
Todo esto como os podréis imaginar, va a una velocidad exasperantemente lenta. Aunque el ATmega corre a 24MHz, el micro emulado ofrece un rendimiento equivalente a una CPU física de unos 6.5kHz (vuestros ojos no os fallan; son kiloherzios con k de kilo). La linea de comandos de bash tarda 2 horas en estar disponible y el resto del sistema (sin entorno gráfico) no termina de cargar hasta que han pasado 4 horas. Según comenta el creador, una vez que ha arrancado, es usable hasta cierto punto.
La prueba de que esto es real se puede ver en el siguiente video:
Para conocer todos los detalles de este interesante experimento, podéis visitar la página personal de su autor.
Ahora bien, ¿cuál es la respuesta a la pregunta inicial? Es difícil de responder. ¿Se puede considerar que la máquina ARM emulada sobre la CPU AVR es una forma de ejecutar Linux sobre un miro de 8 bits? Probablemente sí. ¿Tener un kernel tan limitado como el que ofrece ELKS se puede considerar Linux? Al menos parece cumplir con Unix v7. Al final se trata de una pregunta demasiado ambigua y simple para un tema tan complejo.