Los sistemas operativos basados en Unix cuentan con docenas de utilidades básicas para el correcto funcionamiento del sistema operativo, destinadas todas ellas para su uso desde el intérprete de comandos: cd, ls, mkdir, rm, mv, chown, find, mount, su, kill, grep, cat, sed, awk…
Éstas son las llamadas 'coreutils' o GNU Core Utilities. Sin embargo, aun siendo básicas estas herramientas, no están presentes en todos los sistemas Unix: por poco que ocupen (en disco y en la memoria RAM), siguen siendo —en conjunto— aplicaciones demasiado pesadas para su uso en sistemas embebidos.
BusyBox, la navaja suiza de los Linux embebidos (y de otros sistemas operativos)
Ahí es donde entra BusyBox. En 1995, Bruce Perens (el creador de la primera definición oficial de 'software open source') decidió crear un sistema de arranque completo capaz de entrar en un único disquete, para que pudiera servir como instalador y unidad de rescate de Debian Linux…
De modo que su solución fue crear un ejecutable único que contuviera versiones ligeras de todas las coreutils (y alguna que otra herramienta extra). Esta 'ligereza' viene conferida por dos circunstancias:
*BusyBox está compilado usando la librería uCLibc, específicamente diseñada para sistemas con bajos recursos, lo que optimiza su tamaño y rendimiento.
*Las utilidades que contiene BusyBox no incluyen siempre todas las opciones de las versiones originales, pero sí, desde luego, las más usadas.
Rápidamente, el uso y la evolución de BusyBox se desligó de su función originaria vinculada a Debian, y empezó a ser usada en proyectos con limitaciones de hardware, o incluso como modo de facilitar el uso de herramientas Unix en sistemas donde éstas no estuvieran disponibles, como Windows o Android —en el primero han perdido relevancia tras la creación de WSL, pero en Android sigue siendo la mejor opción para usar las típicas herramientas del ecosistema GNU de línea de comandos—.
Con el tiempo, BusyBox ha hecho honor a su proclama de ser "la navaja suiza del Linux embebido" y ha sido usado como base del sistema operativo de toda clase de proyectos, desde el de los coches autónomos de Tesla hasta el de multitud de routers disponibles en el mercado. También es un componente fundamental de la distribución Alpine Linux, tan usada en la creación de contenedores Docker.
Ayuda a esa versatilidad su diseño completamente modular: a la hora de compilarlo, cada desarrollador puede seleccionar —haciendo uso de 'make menuconfig— qué utilidades se incorporan o quedan fuera del binario a crear, lo que permite personalizarlo para cada proyecto.
Pero, ¿cómo un único ejecutable puede realizar la tarea de casi dos centenares de utilidades distintas? ¿Cómo funciona eso de cara al usuario? En primer lugar, se pasa la utilidad deseada como argumento de la propia aplicación BusyBox, de tal modo que '/bin/busybox ps' equivale a ejecutar el 'ps' de toda la vida.
Además, BusyBox cuenta con una particularidad: si se le cambia el nombre del ejecutable por el de una de las utilidades que contiene, actuará automáticamente como dicha utilidad… lo que permite crear tantos enlaces simbólicos como utilidades contenga, y olvidarnos de estar tecleando en cada momento la ruta del ejecutable.
Imagen | Basado en open box by Svelte UX from the Noun Project
Ver todos los comentarios en https://www.genbeta.com
VER 2 Comentarios