# Busybox

BusyBox es un software suite que proporciona varias utilidades Unix en un solo archivo ejecutable. Se ejecuta en una variedad de entornos POSIX como Linux (Android) y FreeBSD, aunque muchas de las herramientas que proporciona están diseñadas para funcionar con interfaces proporcionadas por el kernel de Linux. Fue creado específicamente para sistemas operativos integrados con recursos muy limitados. Los autores lo denominaron "La navaja suiza de Linux embebido", ya que el único ejecutable reemplaza las funciones básicas de más de 300 comandos comunes. Ha sido lanzado como software libre bajo los términos de la Licencia Pública General de GNU en su versión 2.

## Historia
### Orígenes

En un principio escrito por Bruce Perens en 1995 y listo para ser usado en 1996, BusyBox originalmente tenía como objetivo poner un sistema de arranque completo en un solo disquete que sirviera tanto como un disco de rescate como un instalador para la distribución Debian. Desde entonces, se ha ampliado para convertirse en el conjunto de herramientas estándar de facto de espacio de usuario para dispositivos Linux integrados e instaladores de distribución de Linux. Dado que cada ejecutable de Linux requiere varios kilobytes de sobrecarga, hace que el programa BusyBox combine más de doscientos programas juntos para ahorrar espacio en disco y memoria del sistema.
Enrique Zanardi mantuvo BusyBox y se centró en las necesidades del sistema instalador de disquetes de arranque de Debian hasta principios de 1998, cuando Dave Cinege lo asumió para el Proyecto Router Linux (LRP). Cinege hizo varios aportes, creó un entorno de construcción modular y cambió el enfoque de BusyBox hacia sistemas integrados generales de alto nivel. A medida que el desarrollo de LRP se desaceleró en 1999, Erik Andersen, entonces de Lineo, Inc., se hizo cargo del proyecto y se convirtió en el responsable oficial entre diciembre de 1999 y marzo de 2006. Durante este tiempo, el mercado integrado de Linux explotó en crecimiento y BusyBox maduró mucho, expandiendo tanto su base de usuarios como su funcionalidad. Rob Landley fue el responsable desde 2005 hasta finales de 2006, luego Denys Vlasenko asumió el cargo responsable actual.

### Controversias GPLv2/GPLv3

En septiembre de 2006, después de intensas discusiones y controversias entre el responsable del proyecto Rob Landley y Bruce Perens, el proyecto BusyBox decidió no adoptar la Licencia Pública GNU Versión 3 (GPLv3); la licencia de BusyBox se aclaró como GPL Versión 2 (GPLv2) solamente.
A partir de octubre de 2006, Denys Vlasenko se hizo cargo del mantenimiento de BusyBox de Rob Landley, quien comenzó Toybox, también como resultado de las controversias sobre la licencia.

### Demandas de GPL

A finales de 2007, BusyBox también se destacó por denunciar activamente las violaciones de los términos de su licencia (GPL) en el Tribunal de Distrito de los Estados Unidos para el Distrito Sur de Nueva York.
Fue la primera demanda de los Estados Unidos por una violación de la GPL, se refería al uso de BusyBox en un dispositivo integrado. La demanda, caso 07-CV-8205 en el Tribunal de Distrito de los Estados Unidos para el Distrito Sur de Nueva York fue presentada el 20 de septiembre de 2007 por el Software Freedom Law Center (SFLC) en nombre de Andersen y Landley contra Monsoon Multimedia Inc., después de que se descubrió el código de BusyBox en una actualización de firmware y los intentos de contactar a la compañía aparentemente fracasaron. El caso se resolvió con el lanzamiento de la versión del código fuente de Monsoon y el pago de una cantidad no revelada de dinero a Andersen y Landley.
El 21 de noviembre de 2007, el SFLC presentó dos demandas similares en nombre de Andersen y Landley contra dos compañías más, Xterasys (caso 07-CV-10455) y High-Gain Antennas (caso 07-CV-10456). El caso Xterasys se resolvió el 17 de diciembre por la liberación del código fuente utilizado y un pago no revelado, y el caso de High-Gain Antennas el 6 de marzo de 2008 por cumplimiento activo de la licencia y un pago no revelado. El 7 de diciembre de 2007, se presentó un caso contra Verizon Communications por su distribución de firmware para Actiontec routers; este caso se resolvió el 17 de marzo de 2008 con la condición del cumplimiento de la licencia, el nombramiento de un oficial para supervisar el cumplimiento futuro con licencias de software libre y el pago de una suma no revelada. El 9 de junio de 2008 se presentaron nuevas demandas contra Bell Microproducts (caso 08-CV-5270) y Supermicro (caso 08-CV-5269), el caso de Super Micro se resolvió el 23 de julio de 2008. BusyBox y Bell Microproducts también llegaron a un acuerdo extrajudicial el 17 de octubre.
El 14 de diciembre de 2009, se presentó una nueva demanda en la que se nombraron catorce acusados, incluidos Best Buy, JVC, Samsung y otros. En febrero de 2010, Samsung lanzó su firmware de TV LN52A650 bajo GPLv2, que luego fue utilizado como referencia por el proyecto comunitario SamyGO.
Alrededor del 3 de agosto de 2010, BusyBox ganó de Westinghouse una sentencia por defecto de daños triples de $90.000 además de costos y honorarios de abogados de $47.865, y la posesión de "presumiblemente muchos televisores de alta definición" como equipo infractor en la demanda Software Freedom Conservancy v. Best Buy, et al., el caso de infracción GPL mencionado en el párrafo anterior.
Ningún otro desarrollador, incluido el autor original Bruce Perens y el responsable Dave Cinege, estuvieron representados en estas acciones o partes en los acuerdos. El 15 de diciembre de 2009, Perens emitió una declaración expresando su descontento con algunos aspectos de la situación legal, y en particular alegó que los actuales desarrolladores de BusyBox "parecen haber eliminado algunas de las declaraciones de derechos de autor de otros desarrolladores de Busybox, y parecen haber alterado declaraciones de licencia".

## Características

BusyBox se puede personalizar para proporcionar un subconjunto de más de doscientas utilidades. Puede proporcionar la mayoría de las utilidades especificadas en la Especificacion Single Unix (SUS) más muchas otras que un usuario esperaría ver en un sistema Linux. BusyBox usa el Almquist shell, también conocido como A Shell, ash and sh.
Como es un sistema de arranque completo, reemplazará aún más el init daemon y udev (o el latter-day systemd) usándose para ser llamado como init en el inicio y mdev en el momento del hotplug.
El sitio web de BusyBox proporciona una lista completa de las utilidades implementadas.

### Binario único

Los sistemas informáticos típicos tienen un archivo binario (ejecutable) separado para cada aplicación. BusyBox es un binario único, que es un conglomerado de muchas aplicaciones, a cada una de las cuales se puede acceder llamando al binario único de BusyBox con varios nombres (respaldado por tener un enlace simbólico o un enlace duro para cada nombre diferente) en una manera específica con argumentos apropiados.
BusyBox se beneficia del enfoque binario único, ya que reduce la sobrecarga introducida por el formato de archivo ejecutable (generalmente ELF), y permite que el código se comparta entre múltiples aplicaciones sin requerir una biblioteca. Esta técnica es similar a la que proporciona el comando crunchgen en FreeBSD, la diferencia es que BusyBox proporciona versiones simplificadas de las utilidades (por ejemplo, un comando ls sin capacidad de clasificación de archivos), mientras que crunchgen genera la suma de todos los Las utilidades ofrecerían las versiones totalmente funcionales.
Compartir el código común, junto con las rutinas escritas teniendo en cuenta la optimización del tamaño, puede hacer que un sistema BusyBox use mucho menos espacio de almacenamiento que un sistema construido con las versiones completas correspondientes de las utilidades reemplazadas por BusyBox. La investigación que comparó las implementaciones de GNU, BusyBox, Asmutils y Perl de los comandos estándar de Unix demostró que en algunas situaciones BusyBox puede funcionar más rápido que otras implementaciones, pero no siempre.

### Comandos

La documentación oficial de BusyBox enumera una descripción general de los comandos disponibles y sus opciones de línea de comandos.

## Ejemplos

Los programas incluidos en BusyBox se pueden ejecutar simplemente agregando su nombre como argumento al ejecutable de BusyBox:
Más comúnmente, los nombres de comandos deseados están vinculados (usando enlaces duros o simbólicos) al ejecutable de BusyBox; BusyBox lee argv[0] para encontrar el nombre con el que se llama y ejecuta el comando apropiado, por ejemplo solo
después de /bin/ls está vinculado a /bin/busybox. Esto funciona porque el primer argumento pasado a un programa es el nombre utilizado para la llamada del programa, en este caso el argumento sería "/bin/ls".
Busybox vería que su "nombre" es "ls" y actuaría como el programa "ls".

## Aplicaciones y recepción

BusyBox es utilizado por varios sistemas operativos que se ejecutan en sistemas integrados y es un componente esencial de distribuciones como OpenWrt, OpenEmbedded (incluido el Proyecto Yocto) y Buildroot. Sharp Zaurus utiliza BusyBox ampliamente para las tareas ordinarias Unix-like realizadas en el shell del sistema.
Es necesario para varias aplicaciones root en Android y también está preinstalado con algunas soluciones "1 Tap Root" como Kingo Root.

## Controversias sobre Toybox

Toybox se inició a principios de 2006 bajo la Licencia Pública General de GNU por el ex contributor de Busybox Rob Landley como resultado de las controversias en torno a las discusiones sobre GPLv3 / GPLv2. A finales de 2011 se volvió a licenciar bajo la Licencia BSD después de que el proyecto quedó inactivo. El 11 de enero de 2012, Tim Bird, un empleado de Sony, sugirió crear una alternativa a BusyBox que no estaría bajo la Licencia Pública General de GNU. Sugirió que se basara en la inactiva de Toybox. En enero de 2012, la propuesta de crear una alternativa con licencia BSD al proyecto BusyBox con licencia GPL generó duras críticas por parte de Matthew Garrett por quitarle la única herramienta relevante para la aplicación de los derechos de autor del grupo Software Freedom Conservancy. El titular de las demandas basadas en BusyBox, Rob Landley, respondió que esto fue intencional cuando llegó a la conclusión de que las demandas no dieron lugar a los resultados positivos esperados y quería detenerlos "de la forma que yo considere conveniente".