Construí Linux desde cero en un fin de semana (y solo conseguí un prompt)
Pasé un fin de semana construyendo un sistema Linux desde cero absoluto, compilando cada paquete a mano, uno por uno. Esto es lo que un programador de videojuegos aprendió sobre sistemas operativos haciendo la tarea más tediosa posible.
Me quedé mirando un cursor parpadeante en una pantalla negra. Sin escritorio. Sin gestor de paquetes. Sin mensaje de bienvenida. Solo un prompt en un sistema que había construido enteramente a mano, un paquete a la vez, durante un fin de semana entero.
Fue la nada más satisfactoria que he visto en mi vida.
Por qué un programador de videojuegos construyó Linux
Uso Linux. Hago videojuegos. He pasado años escribiendo C# en Unity, depurando netcode multijugador y optimizando asignaciones de memoria. Pero no tenía ni idea real de lo que pasa entre pulsar el botón de encendido y obtener una terminal.
Conocía las palabras (kernel, bootloader, sistema init), pero eran abstracciones. Cajas negras que nunca abrí. Un día, la curiosidad pudo conmigo. Encontré el libro de Linux From Scratch y pensé: ¿cómo de difícil puede ser?
La respuesta es: difícil no exactamente. Simplemente implacable.
Qué es Linux From Scratch
Para quien no lo conozca, Linux From Scratch (LFS) es un libro, disponible gratis online, que te guía en la construcción de un sistema Linux completo desde el código fuente. Sin instalador. Sin binarios precompilados. Descargas el código fuente de cada paquete y los compilas tú mismo.
No es una distro. Es más bien un libro de recetas para crear la tuya. La filosofía es simple: la mejor manera de entender algo es construirlo tú mismo, pieza por pieza.
El libro es genuinamente excelente. Está bien escrito, bien mantenido y te trata como a un adulto. Te dice qué hacer, explica por qué y sigue adelante. Sin llevarte de la mano, pero sin esnobismo tampoco.
Muerte por mil paquetes
El proceso empieza de forma inocente. Configuras una partición, creas una estructura de directorios y descargas una lista de tarballs con código fuente. Luego empiezas a compilar.
Y a compilar. Y a compilar.
El primer gran desafío es la toolchain de compilación cruzada. Necesitas un compilador para compilar cosas, pero estás construyendo un sistema que aún no tiene compilador. Así que usas el compilador de tu sistema anfitrión para construir un compilador temporal y luego usas ese compilador temporal para construir el compilador real. GCC compilando GCC. Son compiladores hasta el fondo.
Después de la toolchain, entras en la fase de construcción principal. Aquí es donde la escala de un sistema operativo “simple” te golpea. No estás construyendo solo el kernel y un shell. Estás construyendo:
- Glibc: la biblioteca de C de la que depende básicamente todo
- Coreutils:
ls,cp,mvy los demás comandos que das por sentado - Bash: tu shell
- Grep, sed, awk, find: herramientas de procesamiento de texto
- Systemd o SysVinit: para que la cosa arranque
- Y docenas más: m4, bison, flex, gettext, ncurses, readline, zlib…
Cada uno tiene el mismo ritmo: extraer, configurar, make, make install. Una y otra vez. Algunos tardan segundos. Otros tardan minutos. Unos pocos tardan lo suficiente como para ir a hacer café.
Es manual, repetitivo y extrañamente meditativo.
Lo que no entendí (y no pasa nada)
Voy a ser honesto: no entendí completamente cada paquete que compilé. Sé lo que hace GCC. Sé lo que hace Bash. ¿Pero bison? ¿M4? ¿Autoconf? Tenía una idea vaga (generadores de parsers, procesadores de macros, herramientas de sistemas de compilación), pero no podría explicarlos en profundidad.
Y está bien. El libro de LFS no pretende que domines cada componente. Reconoce que algunos paquetes existen para dar soporte al proceso de compilación de otros. Son el andamio, no el edificio.
Lo que importa es la visión general. Empiezas a ver la cadena de dependencias. Te das cuenta de que las herramientas que usas cada día están construidas sobre capas y capas de otras herramientas, cada una mantenida por personas que nunca conocerás. Un sistema Linux no es una cosa. Son cientos de cosas que resulta que funcionan juntas.
Como programador de videojuegos, esto me resultó familiar. Un motor de juegos es el mismo tipo de bestia en capas: renderizado sobre APIs gráficas sobre drivers sobre abstracciones de hardware. LFS simplemente me mostró el mismo patrón a nivel de sistema operativo.
El momento en que arrancó
Después de un fin de semana copiando comandos, viendo pasar la salida del compilador y releyendo párrafos de vez en cuando para asegurarme de no saltarme un paso, configuré GRUB, preparé el kernel y reinicié.
Funcionó.
Apareció un prompt de login. Escribí root, pulsé enter y ahí estaba. Un shell. Mi shell, en mi sistema, construido desde la nada.
No podía hacer mucho. Sin red. Sin interfaz gráfica. Sin gestor de paquetes para instalar nada. Solo un sistema pelado que podía ejecutar comandos básicos y… existir.
Pero yo lo había construido. Cada binario en ese sistema había pasado por mi terminal. Cada biblioteca había sido compilada en mi máquina. No había magia, no había misterio: solo código fuente, un compilador y paciencia.
No era nada. Y lo era todo.
Lo que realmente aprendí
Un fin de semana no es suficiente para convertirse en experto en Linux. Pero fue suficiente para desmitificar cosas que llevaba años usando sin entender.
Lo que las distros realmente hacen por ti. Ubuntu, Fedora, Arch no son simplemente “Linux con un tema diferente”. Manejan una cantidad brutal de trabajo: resolución de dependencias, paquetes precompilados, detección de hardware, configuraciones sensatas, parches de seguridad. Después de construir LFS, nunca volveré a dar por sentado un apt install.
Cómo se bootstrappean los compiladores. El problema del huevo y la gallina de necesitar un compilador para construir un compilador es de esas cosas que suenan a acertijo hasta que lo haces. La compilación cruzada y las builds multipaso de repente tienen sentido.
Lo poco que se necesita para “ejecutar Linux”. El kernel, una biblioteca de C, un shell y un puñado de utilidades. Eso es todo. Puedes arrancar un sistema con sorprendentemente poco.
Lo mucho que se necesita para que Linux sea usable. Ese sistema mínimo es básicamente inútil para trabajo real. La distancia entre “arranca” y “puedo navegar por internet” es enorme. Cada comodidad que disfrutas la construyó alguien.
¿Deberías hacerlo?
Si eres programador y alguna vez has sentido curiosidad por lo que hay debajo del capó de tu sistema operativo: sí. Hazlo. Reserva un fin de semana, abre el libro de LFS y empieza a compilar.
No necesitas ser programador de sistemas. No necesitas experiencia previa con Linux más allá de un uso básico de terminal. Solo necesitas paciencia y la disposición de escribir ./configure && make && make install unas cien veces.
El libro de LFS es una de las mejores piezas de documentación técnica que he leído. Es gratis, es completo y respeta tu tiempo. No puedo recomendarlo lo suficiente.
Probablemente no vayas a usar tu sistema LFS para nada después de construirlo. Esa no es la cuestión. La cuestión es que la próxima vez que veas un cursor parpadeante, sabrás exactamente lo que costó llegar ahí.