Kabosu - Creando cosas

Logo de la página. Gato esférico con colores verdoso.

Reto Open Source: Busybox

Publicado: 2026-01-08

Etiquetas: Git, Reto Open Source, Software


Buenos días, tardes o noches:

Para este segundo Reto Open Source elegí Busybox, una colección de utilidades para la terminal sistemas tipo Unix (ls, cat, cp... hay 300 comandos implementados). Se usa en sistemas ligeros como Alpine Linux y en dispositivos como alternativa a coreutils de GNU. No tiene tantas opciones pero ocupa mucha menos memoria y espacio. El código está escrito en C.

Para el anterior reto publiqué un artículo bastante largo. Tardé más en escribirlo que en hacer los cambios en el código. Esta vez voy a ir más al grano. Pondré los ejercicios que hice y un breve comentario.

Preparativos

Me bajé el código de https://git.busybox.net/busybox/. Hay una copia en Github pero parece que no es oficial.

Compilarlo fue bastante fácil porque no tiene muchas dependencias.

Conceptos:

Algunas cosas que conviene conocer para entender el código de Busybox.

Ejercicio 1: Good morning Vietnam

Tarea: Modificar el applet "who" para que muestre el mensaje "Good morning Vietnam" al ejecutarse.

Este ejercicio permite familiarizarse con cómo funcionan los applets y con la compilación de Busybox.

Ejercicio 2: yes con prefijo

Tarea: modifica el applet "yes" para que al ejecutarse compruebe la variable de entorno "YES_PREFIX" y, si existe, imprima su valor como prefijo en cada línea.

Es decir, si "YES_PREFIX" tiene el valor "abc", al ejecutar yes en vez de imprimir "y" debe imprimir "abcy".

Este ejercicio permite familiarizarse un poco con otro applet e ir investigando un poco las funciones que hay disponibles.

Ejercicio 3: Applet Hello

Tarea: crea un nuevo applet llamado "hello" que al ejecutarse escribe el mensaje "Hello, world!" y termina.

Con este ejercicio se puede aprender la estructura básica de los applets y cómo se definen.

Hacer el applet me resultó muy sencillo pero no conseguía compilarlo y ejecutarlo. Me costó varias horas de pruebas y desesperación hasta que me di cuenta que el editor de texto había añadido unos espacios extra en unos comentarios que se usan para configurar el applet y eso hacía que no se incluyera durante la compilación.

¿Esta tarea no debería ser escribir "Good Morning Vietnam"? Se me olvidó.

Ejercicio 4: yes -n N

Tarea: modifica el applet "yes" para añadir un nuevo parámetro "-n N" que limite el número de veces que se imprime la cadena. Añade tests para el nuevo parámetro.

Ejemplo:

El comando yes imprime la cadena "y" infinitas veces. En cambio yes -n 5 imprimirá solo 5 veces "y".

El ejercicio en sí es sencillo pero yes no tiene ningún argumento así que hay que añadir toda la parafernalia de procesamiento de argumentos.

Ejercicio 5: echo --loud

Tarea: Añade un nuevo parámetro "--load" al applet "echo" que convierta el texto a MAYÚSCULAS. Escribe tests para el nuevo parámetro.

Ejemplo: echo --loud hello world tiene que imprimir "HELLO WORLD"

En este ejercicio tiene dos pequeños detalles a considerar:

Conclusiones

Este reto me pareció mucho más sencillo que el de Tiled aunque es por varias razones:

Podría ponerme ejercicios más complicados pero mi objetivo es aprender un poco y exponerme a código nuevo. No estar montones de horas trabajando en algo. Las tareas que me pongo se pueden hacer en minutos o como mucho en una hora aunque a veces por errores tontos me pueda costar más.

Al escribir estas líneas me he dado cuenta de que esta vez no he hecho ninguna simulación de solucionar un bug del pasado. Voy a enmendar el error haciendo una segunda parte del reto y espero publicar una continuación a este texto en los próximos días.

Me pregunto y supongo que tú también porqué llamo a estos pasatiempos "reto". Me ha dejado de gustar el nombre.


Artículo anterior: Juegos terminados en 2025 - Cuarto trimestre