logotipo tecnofacts

BusyBox, un ejecutable con casi 200 utilidades GNU de línea de comandos

BusyBox, un ejecutable con casi 200 utilidades GNU de línea de comandos

Bien sabemos que los sistemas operativos que son basados en Unix cuentan con docenas de utilidades básicas para su correcto funcionamiento, todas ellas destinadas para su uso desde el intérprete de comandos: cd, ls, mkdir, rm, mv, chown, find, mount, su, kill, grep, cat, sed, awk…

A estas utilidades se les denomina ‘coreutils‘ o GNU Core Utilities. A pesar de que aun siendo básicas estas herramientas, no se encuentran presentes en todos los sistemas Unix: aun y sabiendo que ocupan muy poco espacio (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)

Justamente aquí es donde hace su aparición 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…

La solución de Bruce 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—.

Pasado el tiempo, BusyBox ha ocupado el lugar de “la navaja suiza del Linux embebido” y ha sido usado como base del sistema operativo de toda clase de proyectos. También es un componente fundamental de la distribución Alpine Linux, tan usada en la creación de contenedores Docker.

Una de las grandes ventajas es 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.

administrator

Related Articles

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *