BusyBox es una suite de software que proporciona varias utilidades de Unix en un único archivo ejecutable . Se ejecuta en una variedad de entornos POSIX como Linux , Android , [8] y FreeBSD , [9] aunque muchas de las herramientas que proporciona están diseñadas para funcionar con interfaces proporcionadas por el núcleo Linux . Fue creado específicamente para sistemas operativos embebidos con recursos muy limitados. Los autores lo apodaron "La navaja suiza de Linux embebido ", [10] ya que el único ejecutable reemplaza funciones básicas de más de 300 comandos comunes. Se publica como software libre bajo los términos de la Licencia Pública General GNU v2 , [6] después de decidir polémicamente no pasar a la versión 3 .
BusyBox , escrito originalmente por Bruce Perens en 1995 y declarado completo para su uso previsto en 1996, [11] inicialmente tenía como objetivo poner un sistema de arranque completo en un solo disquete que sirviera tanto como disco de rescate como instalador para la distribución Debian . Desde entonces, se ha ampliado hasta convertirse en el conjunto de herramientas de espacio de usuario estándar de facto para dispositivos Linux integrados e instaladores de distribuciones Linux. Dado que cada ejecutable Linux requiere varios kilobytes de sobrecarga, hacer que el programa BusyBox combine más de doscientos programas juntos a menudo ahorra espacio en disco y memoria del sistema sustanciales.
BusyBox fue mantenido por Enrique Zanardi y se centró en las necesidades del sistema de instalación de disquetes de arranque de Debian hasta principios de 1998, cuando Dave Cinege se hizo cargo del proyecto Linux Router Project (LRP). Cinege realizó varias incorporaciones, creó un entorno de compilación modularizado y cambió el enfoque de BusyBox hacia sistemas embebidos generales de alto nivel . Cuando el desarrollo de LRP se ralentizó en 1999, Erik Andersen, entonces de Lineo, Inc. , se hizo cargo del proyecto y se convirtió en el mantenedor oficial entre diciembre de 1999 y marzo de 2006. Durante este tiempo, el mercado de sistemas embebidos Linux creció enormemente y BusyBox maduró enormemente, expandiendo tanto su base de usuarios como su funcionalidad. Rob Landley se convirtió en el mantenedor en 2005 hasta finales de 2006, luego Denys Vlasenko asumió como el mantenedor actual.
En septiembre de 2006, después de intensas discusiones y controversias entre el mantenedor del proyecto Rob Landley y Bruce Perens , [12] el proyecto BusyBox [13] [14] decidió no adoptar la Licencia Pública General GNU Versión 3 ( GPLv3 ); se aclaró que la licencia BusyBox era solo GPL-2.0 . [15]
Desde octubre de 2006, Denys Vlasenko se hizo cargo del mantenimiento de BusyBox de manos de Rob Landley, quien había iniciado Toybox , también como resultado de las controversias sobre la licencia. [13] [16]
A finales de 2007, BusyBox también saltó a la fama por perseguir activamente las violaciones de los términos de su licencia (la GPL) en el Tribunal de Distrito de los Estados Unidos para el Distrito Sur de Nueva York . [17]
La primera demanda en Estados Unidos por violación de la GPL se refería al uso de BusyBox en un dispositivo integrado . La demanda, [17] caso 07-CV-8205, fue interpuesta 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 descubriera el código de BusyBox en una actualización de firmware y los intentos de contactar con la empresa aparentemente hubieran fracasado. El caso se resolvió con la publicación de la versión de Monsoon del código fuente y el pago de una cantidad de dinero no revelada a Andersen y Landley. [18]
El 21 de noviembre de 2007, la SFLC presentó dos demandas similares en nombre de Andersen y Landley contra otras dos empresas, Xterasys (caso 07-CV-10455) y High-Gain Antennas (caso 07-CV-10456). [19] [20] El caso de Xterasys se resolvió el 17 de diciembre por la liberación del código fuente utilizado y un pago no revelado, [21] y el caso de High-Gain Antennas el 6 de marzo de 2008, por el cumplimiento activo de la licencia y un pago no revelado. [22] El 7 de diciembre de 2007, se presentó un caso contra Verizon Communications por su distribución de firmware para enrutadores Actiontec; [23] [24] este caso se resolvió el 17 de marzo de 2008 con la condición de cumplimiento de la licencia, nombramiento de un funcionario para supervisar el cumplimiento futuro de las licencias de software libre y pago de una suma no revelada. [25] El 9 de junio de 2008 se presentaron otras demandas contra Bell Microproducts (caso 08-CV-5270) y SuperMicro (caso 08-CV-5269), [26] y el caso Super Micro se resolvió el 23 de julio de 2008. [27] BusyBox y Bell Microproducts también llegaron a un acuerdo extrajudicial el 17 de octubre. [28]
El 14 de diciembre de 2009, se presentó una nueva demanda nombrando a catorce acusados, incluidos Best Buy , JVC , Samsung y otros. [29] [30] [31] En febrero de 2010, Samsung lanzó su firmware de TV LN52A650 bajo GPLv2, [32] que luego fue utilizado como referencia por el proyecto comunitario SamyGO . [33]
El 3 de agosto de 2010, BusyBox obtuvo de Westinghouse una sentencia en rebeldía por el triple de daños y perjuicios de 90.000 dólares y los costes y honorarios de los abogados por 47.865 dólares, y la posesión de "presumiblemente una gran cantidad de televisores de alta definición" como equipo infractor en la demanda Software Freedom Conservancy v. Best Buy, et al., el caso de infracción de la GPL mencionado en el párrafo anterior. [34]
Ningún otro desarrollador, incluido el autor original Bruce Perens y el mantenedor Dave Cinege, estuvo representado en estas acciones o fue parte de los acuerdos. El 15 de diciembre de 2009, Perens publicó una declaración en la que expresaba su descontento con algunos aspectos de la situación legal y, en particular, alegó que los desarrolladores actuales de BusyBox "parecen haber eliminado algunas de las declaraciones de derechos de autor de otros desarrolladores de BusyBox y parecen haber alterado las declaraciones de licencia". [12]
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 Especificación Única de Unix (SUS) más muchas otras que un usuario esperaría ver en un sistema Linux. BusyBox utiliza el shell Almquist , también conocido como A Shell, ash y sh. [35] Una alternativa para la personalización es el shell más pequeño 'hush'. "Msh" y "lash" solían estar disponibles. [36]
Como es un sistema de arranque completo, reemplazará además al demonio init y a udev (o al último systemd ) utilizándose a sí mismo para ser llamado como init en el inicio y mdev en el momento de la conexión en caliente.
El sitio web de BusyBox proporciona una lista completa de las utilidades implementadas. [37]
Los programas informáticos típicos tienen un archivo binario ( ejecutable ) independiente 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 (apoyado por tener un enlace simbólico o un enlace duro para cada nombre diferente) [38] de una manera específica con los argumentos apropiados.
BusyBox se beneficia del enfoque binario único, ya que reduce la sobrecarga introducida por el formato de archivo ejecutable (normalmente ELF ) y permite compartir código entre múltiples aplicaciones sin necesidad de una biblioteca . Esta técnica es similar a la que proporciona el comando crunchgen [39] en FreeBSD , con la diferencia de que BusyBox proporciona versiones simplificadas de las utilidades (por ejemplo, unaescomando sin capacidad de clasificación de archivos), mientras que una suma generada por Crunchgen de todas las utilidades ofrecería versiones completamente funcionales.
Compartir el código común, junto con rutinas escritas teniendo en mente la optimización del tamaño, puede hacer que un sistema BusyBox utilice mucho menos espacio de almacenamiento que un sistema creado con las versiones completas correspondientes de las utilidades reemplazadas por BusyBox. La investigación [40] que comparó las implementaciones GNU , BusyBox, asmutils y Perl de los comandos estándar de Unix mostró que en algunas situaciones BusyBox puede funcionar más rápido que otras implementaciones, pero no siempre.
La documentación oficial de BusyBox enumera una descripción general de los comandos disponibles y sus opciones de línea de comandos.
Lista de comandos de BusyBox [41]
Los programas incluidos en BusyBox se pueden ejecutar simplemente agregando su nombre como argumento al ejecutable de BusyBox:
/bin/busybox ls
Más comúnmente, los nombres de los comandos deseados se vinculan (usando enlaces físicos o simbólicos ) al ejecutable de BusyBox; BusyBox lee argv[0] para encontrar el nombre por el cual se lo llama y ejecuta el comando apropiado, por ejemplo, simplemente
/bin/ls
después de que /bin/ls esté vinculado a /bin/busybox . Esto funciona porque el primer argumento que se pasa 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".
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 tareas comunes similares a Unix que se realizan en el shell del sistema. [42]
BusyBox también es un componente esencial de VMware ESXi , Tiny Core Linux , SliTaz 5(Rolling) y Alpine Linux , todas las cuales no son distribuciones integradas.
Es necesario para varias aplicaciones root en Android y también viene preinstalado con algunas soluciones "1 Tap Root" como Kingo Root .
Toybox fue creado a principios de 2006 bajo la licencia GPL-2.0-only por el antiguo mantenedor de BusyBox, Rob Landley, como resultado de las controversias en torno a las discusiones sobre GPLv3/GPLv2. A fines de 2011 [43], se le cambió la licencia a la licencia BSD-2-Clause después de que el proyecto quedara inactivo. [44] En marzo de 2013, se le cambió la licencia nuevamente a la licencia 0BSD . [45] El 11 de enero de 2012, Tim Bird, un empleado de Sony , sugirió crear una alternativa a BusyBox que no estuviera bajo la Licencia Pública General de GNU. Sugirió que se basara en el inactivo Toybox. [46] En enero de 2012, la propuesta de crear una alternativa con licencia BSD al proyecto BusyBox con licencia GPL provocó duras críticas de Matthew Garrett por quitarle la única herramienta relevante para la aplicación de los derechos de autor al grupo Software Freedom Conservancy . [47] El iniciador de las demandas basadas en BusyBox, Rob Landley, respondió que esto fue intencional ya que llegó a la conclusión de que las demandas no dieron los resultados positivos esperados y quería detenerlas "de la manera que considere adecuada" . [48] [49]
Del registro de cambios:
Esta es la última versión de BusyBox bajo la antigua licencia dual "GPLv2 o posterior". Las versiones futuras (que contengan cambios posteriores a svn 16112) solo serán GPLv2, sin el "o posterior".
Dado que BusyBox se puede encontrar en tantos sistemas integrados, se encuentra en el centro del debate anti-DRM de la
GPLv3
. [...] Los resultados reales, sin embargo, son estos: BusyBox será GPLv2 solamente a partir de la próxima versión. Se acepta generalmente que eliminar el "o cualquier versión posterior" es legalmente defendible, y que la fusión de otro código que sólo sea GPLv2 forzará esa cuestión en cualquier caso
no inventes un argumento falaz. Considero que licenciar BusyBox bajo GPLv3 es inútil, innecesario, demasiado complicado y confuso, y además de eso tiene desventajas reales. 1) Inútil: nunca abandonaremos GPLv2.
Las flagelaciones y ejecuciones públicas como la reciente demanda de la SFLC podrían evitarse si existieran realmente estándares y procedimientos reales para el cumplimiento de la GPL y otras licencias libres y de código abierto.
El shell 'ash' añade unos 60k a la configuración predeterminada y es el shell más completo y más pedantemente correcto incluido con busybox. Este shell es en realidad un derivado del
shell 'dash' de Debian
(por Herbert Xu), que se creó al portar el shell 'ash' (escrito por Kenneth Almquist) desde NetBSD.
El verdadero problema aquí es que la dependencia de [Software Freedom Conservancy] de Busybox significa que solo pueden atacar a los infractores que usan ese código de Busybox. Hasta ahora, ningún titular de derechos de autor del kernel importante se ha ofrecido a permitir que la SFC haga cumplir sus derechos de autor, con el resultado de que las acciones de cumplimiento se detendrán a medida que los proveedores se pasen a este reemplazo de Busybox.
>Como ex-mantenedor de busybox que INICIÓ esas demandas en primer lugar y ahora se arrepiente ENORMEMENTE de haberlo hecho, creo que tengo derecho a detener las demandas de la manera que considere adecuada. Nunca resultaron en una sola línea de código agregada al repositorio de busybox. HAN resultado en que más de una compañía abandone por completo el desarrollo de Linux y cambie a sistemas operativos que no sean Linux para sus productos integrados, y son una gran parte de la razón detrás de la política de Android "Sin GPL en el espacio de usuario".