Toybox es una implementación de software libre y de código abierto de más de 200 utilidades de línea de comandos de Unix . El proyecto Toybox se inició en 2006 [ 3 ] y se convirtió en una alternativa a BusyBox con licencia BSD [ 4 ] [ 5 ] . Toybox se utiliza para la mayoría de las herramientas de línea de comandos de Android en todas las versiones de Android compatibles actualmente, y también se utiliza para compilar Android en Linux y macOS. Todas las herramientas se prueban en Linux, y muchas de ellas también funcionan en BSD y macOS.
Toybox pretende ofrecer una alternativa con licencia BSD a BusyBox , que tiene licencia GPL . [ 6 ] Los principales objetivos de diseño técnico de Toybox son la simplicidad, el tamaño reducido, la velocidad y el cumplimiento de los estándares. [ 7 ] Toybox busca ser compatible principalmente con POSIX -2008 y LSB 4.1 , y no se centra en tener todas las opciones que se encuentran en sus contrapartes GNU . [ 3 ]
Toybox se licencia bajo la licencia permisiva 0BSD , mientras que BusyBox utiliza la licencia copyleft GNU General Public License , lo que dio lugar a diferentes ámbitos de uso. BusyBox se utiliza principalmente en el ámbito del software libre copyleft , mientras que Toybox se utiliza sobre todo en proyectos con licencias permisivas y por empresas comerciales, como Android de Google , [ 8 ] que es un objetivo explícito de Toybox. [ 9 ]
Historia
Toybox fue creado a principios de 2006 por Rob Landley [ 3 ] [ 5 ] después de que terminara su labor de mantenimiento de BusyBox debido a una disputa con Bruce Perens , el creador original de BusyBox. [ 10 ]
En 2008, el proyecto quedó inactivo [ 4 ] hasta finales de 2011. Rob Landley reanudó el trabajo en Toybox, comenzando con el cambio de licencia de la licencia GPL-2.0 a la licencia BSD-2-Clause [ 11 ] [ 12 ] con el objetivo de reemplazar la implementación de la línea de comandos de Android. [ 13 ]
A principios de 2012, Tim Bird, empleado de Sony , sugirió crear una alternativa a BusyBox con una licencia permisiva. [ 6 ] En marzo de 2013, el proyecto fue re-licenciado a una licencia 0BSD aún más permisiva . [ 14 ]
A finales de 2014, Toybox se integró en las ramas de desarrollo de Android 6.0.x "Marshmallow" para su uso en dispositivos. [ 15 ] [ 8 ] [ 16 ] En 2018, se añadió una versión precompilada de Toybox para host a AOSP para ayudar a que la compilación de Android fuera más hermética. [ 17 ]
Controversia
En enero de 2012, la propuesta de crear una licencia BSD alternativa al proyecto BusyBox con licencia GPL generó duras críticas de Matthew Garrett por eliminar la única herramienta relevante para la aplicación de los derechos de autor del grupo Software Freedom Conservancy . [ 18 ] Rob Landley, quien había iniciado las demandas basadas en BusyBox, respondió que esto era intencional, explicando que las demandas no habían beneficiado al proyecto, sino que habían provocado la evasión corporativa, expresando su deseo de detener las demandas "de la manera que considere oportuna". [ 19 ] [ 20 ] [ 21 ]
Progreso del proyecto
La documentación oficial de Toybox enumera una descripción general de los comandos disponibles, parcialmente disponibles y faltantes. [ 22 ] A septiembre de 2024, la versión 0.8.11 logra aproximadamente el 80% de los objetivos de implementación del proyecto previstos para la versión 1.0. [ 23 ]
- Lista de comandos de Toybox
- acpi — Muestra el estado de las fuentes de alimentación y los dispositivos térmicos.
- adduser , addgroup : agrega un usuario o grupo al sistema.
- ar — Crear, modificar y extraer de archivos.
- arch — Imprime el nombre de la máquina (hardware), igual que uname -m.
- arp — El Protocolo de Resolución de Direcciones (ARP)
- arping — Envía una solicitud ARP a un host vecino.
- ascii — Muestra el conjunto de caracteres ASCII .
- en — Ejecutar comandos en un momento posterior.
- awk — lenguaje de escaneo y procesamiento de patrones.
- base32 — Codifica o decodifica en base32.
- base64 — Codifica o decodifica en base64.
- basename — Devuelve la parte no directorio de una ruta eliminando el sufijo.
- bc — Lenguaje aritmético de precisión arbitraria.
- blkdiscard — Descartar sectores del dispositivo.
- blkid — Imprime el tipo, la etiqueta y el UUID del sistema de archivos en un dispositivo de bloques o una imagen.
- blockdev — Llama a las llamadas ioctl en cada dispositivo de bloques listado.
- bunzip2 — Descomprime archivos bzip2.
- bzcat — Descomprime archivos bzip2 a la salida estándar.
- cal — Imprimir un calendario.
- cat — Copia (concatena) archivos a la salida estándar.
- cd — Cambiar el directorio de trabajo.
- chattr — Cambia los atributos de un archivo en un sistema de archivos Linux.
- chgrp — Cambia el grupo de uno o más archivos.
- chmod — Cambia el modo de los archivos listados.
- chown — Cambia el propietario de uno o más archivos.
- chroot — Ejecuta el comando dentro de un nuevo directorio raíz.
- chrt — Obtiene/establece la política de programación en tiempo real y la prioridad de un proceso.
- chsh — Cambia tu intérprete de comandos de inicio de sesión.
- chvt — Cambiar al número de terminal virtual N.
- cksum — Para cada archivo, genera el valor de la suma de comprobación CRC-32, la longitud y el nombre del archivo.
- limpiar — Borrar la pantalla.
- cmp — Compara el contenido de dos archivos.
- comm — Seleccionar o rechazar líneas comunes a dos archivos.
- count — Copia la entrada estándar a la salida estándar, mostrando un indicador de progreso simple en stderr.
- cp — Copiar archivos.
- cpio — Copia archivos dentro y fuera de un archivo cpio con formato "newc".
- crc32 — Genera la suma de comprobación CRC-32 para cada archivo.
- cortar — Imprime partes seleccionadas de las líneas de cada ARCHIVO en la salida estándar.
- dd — Convertir y copiar un archivo.
- fecha — Establecer/obtener la fecha/hora actual.
- devmem — Dirección física de lectura/escritura a través de /dev/mem.
- df — Muestra el espacio en disco total/utilizado/disponible para cada sistema de archivos listado en la línea de comandos, o para todos los sistemas de archivos montados actualmente.
- diff - Compara dos archivos.
- dirname — Muestra la parte de la ruta que corresponde al directorio.
- dmesg — Imprime o controla el búfer circular del kernel.
- dnsdomainname — Muestra el dominio al que pertenece este sistema (igual que hostname -d).
- dos2unix — Convierte el formato de nueva línea de dos "\r\n" a unix "\n".
- du — Muestra el uso del disco, el espacio consumido por archivos y directorios.
- echo — Escribe cada argumento en la salida estándar, con un espacio entre cada uno, seguido de un salto de línea.
- egrep — Muestra las líneas que coinciden con expresiones regulares extendidas.
- expulsar — Expulsar DISPOSITIVO o /dev/cdrom por defecto.
- env — Establece el entorno para la invocación de comandos o enumera las variables de entorno.
- expandir — Expande las pestañas a espacios según las tabulaciones.
- factor — Factorizar números enteros.
- fallocate — Indica al sistema de archivos que asigne espacio para un archivo.
- falso — Devuelve un valor distinto de cero.
- fdisk — Manipular la tabla de particiones del disco.
- fgrep — Muestra las líneas que coinciden con expresiones regulares.
- archivo — Examine los archivos proporcionados y describa sus tipos de contenido.
- buscar — Buscar archivos coincidentes en los directorios.
- flock — Gestionar los bloqueos de archivos de asesoramiento.
- pliegue — Filtro para líneas de plegado.
- fmt — Reformatea la entrada para que se ajuste a la longitud de línea especificada, conservando el nivel de sangría existente y escribiendo en la salida estándar.
- libre — Muestra la cantidad total, libre y utilizada de memoria física y espacio de intercambio.
- freeramdisk — Libera toda la memoria asignada al ramdisk especificado.
- fsfreeze — Congela o descongela un sistema de archivos.
- fstype — Tipo de sistema de archivos impreso en un dispositivo de bloques o imagen.
- fsync — Sincroniza el estado en memoria de un archivo con el dispositivo de almacenamiento.
- ftpget — Utiliza el Protocolo de Transferencia de Archivos (FTP) para obtener un archivo de un servidor FTP.
- ftpput — Utiliza el Protocolo de Transferencia de Archivos (FTP) para enviar un archivo a un servidor FTP.
- getconf — Obtiene los valores de configuración del sistema.
- getopt — Analiza las opciones y parámetros de la línea de comandos.
- grep — Muestra las líneas que coinciden con expresiones regulares.
- grupos — Imprime los grupos a los que pertenece un usuario.
- gunzip — Descomprime archivos gz.
- detener — Reiniciar, detener o apagar el sistema.
- head — Copia las primeras líneas de los archivos a la salida estándar.
- Ayuda : muestra información de uso para los comandos de Toybox.
- hexedit — Editor de archivos hexadecimales.
- hostname — Obtiene/establece el nombre de host actual.
- hwclock — Obtiene/establece el reloj de hardware.
- i2cdetect — Detecta dispositivos i2c.
- i2cdump — Volca los registros de i2c.
- i2cget — Lee un registro i2c.
- i2cset — Escribe un registro i2c.
- iconv — Convierte la codificación de caracteres de los archivos.
- id — Imprime el ID de usuario y de grupo.
- ifconfig — Muestra o configura la interfaz de red.
- inotifyd — Ejecuta un programa cuando ocurre un evento en el sistema de archivos.
- insmod — Carga el módulo llamado MODULE pasando las opciones si se proporcionan.
- instalar — Copiar archivos y establecer atributos.
- ionice — Cambia la prioridad de planificación de E/S de un proceso.
- iorenice — Muestra o cambia la prioridad de E/S de un proceso existente.
- iotop — Clasifica los procesos por E/S.
- matar — Enviar señal al proceso.
- killall — Envía una señal (predeterminada: TERM) a todos los procesos con los nombres dados.
- killall5 — Envía una señal a todos los procesos fuera de la sesión actual.
- menos — lo opuesto a más
- enlace — Crea un enlace físico a un archivo.
- ln — Crea un enlace entre FROM y TO.
- logger — Registra el mensaje (o entrada estándar) en syslog.
- Iniciar sesión : Inicie sesión como usuario; si es necesario, se le solicitará el nombre de usuario y la contraseña.
- logname — Imprime el nombre del usuario actual.
- losetup — Asocia un dispositivo de bucle con un archivo, o muestra el archivo actual (si lo hay) asociado con un dispositivo de bucle.
- ls — Listar archivos.
- lsattr — Lista los atributos de archivo en un sistema de archivos Linux.
- lsmod — Muestra los módulos cargados actualmente, sus tamaños y sus dependencias.
- lspci — Lista los dispositivos PCI.
- lsusb — Lista los hosts/dispositivos USB.
- makedevs — Crea una serie de archivos especiales según lo especificado en una tabla de dispositivos.
- mcookie — Genera un número aleatorio seguro de 128 bits.
- md5sum — Calcula el hash md5 para cada archivo de entrada, leyéndolo de la entrada estándar si no hay ninguno.
- memeater — Asigna y utiliza la memoria internamente.
- microcom — Consola serie simple.
- Mezcla : lista los canales de sonido OSS (módulo snd-mixer-oss) o ajusta los volúmenes.
- mkdir — Crea uno o más directorios.
- mkfifo — Crea FIFOs (tuberías con nombre).
- mknod — Crea un archivo especial con el nombre especificado y un tipo determinado.
- mkpasswd — Cifra la CONTRASEÑA usando crypt(3).
- mkswap — Configura un área de intercambio de Linux en un dispositivo o archivo.
- mktemp — Crea de forma segura un nuevo archivo llamado "DIR/TEMPLATE" e imprime su nombre.
- modinfo — Muestra los campos del módulo para los módulos especificados por nombre o ruta .ko.
- mount — Monta nuevos sistemas de archivos en directorios.
- mountpoint — Comprueba si el directorio o dispositivo es un punto de montaje.
- mv — Mover archivos.
- nbd-client — Conéctese a un servidor NBD.
- nc / netcat — Reenvía la entrada/salida estándar a un archivo o conexión de red.
- netstat — Muestra información de red.
- nice — Ejecuta una línea de comandos con una prioridad de programación aumentada o disminuida.
- nl — Número de líneas de entrada.
- nohup — Ejecuta un comando que sobrevive al final de su terminal.
- nproc — Imprime el número de procesadores.
- nsenter — Ejecuta COMANDO en un (conjunto de) espacios de nombres existentes.
- od — Volcar datos en octal/hexadecimal.
- oneit — Programa de inicio simple que ejecuta una única línea de comandos proporcionada
- partprobe — Informa al kernel sobre los cambios en la tabla de particiones.
- passwd — Actualiza los tokens de autenticación del usuario.
- pegar — Combinar las líneas correspondientes de cada archivo de entrada.
- parche : aplica una diferencia unificada a uno o más archivos.
- pgrep — Buscar proceso(s).
- pidof — Imprime los PID de todos los procesos con los nombres dados.
- ping : Comprueba la conectividad de la red enviando paquetes a un host e informando de su respuesta.
- pivot root — Intercambia los sistemas de archivos ANTIGUO y NUEVO (como si fuera un montaje simultáneo) y mueve todos los procesos con chdir o chroot bajo ANTIGUO a NUEVO (incluidos los subprocesos del kernel) para que ANTIGUO pueda desmontarse.
- pkill : busca o envía señales a procesos según el nombre y otros
- pmap — Informa sobre el mapa de memoria de un proceso o procesos.
- poweroff — Reinicia, detiene o apaga el sistema.
- printenv — Imprime las variables de entorno.
- printf — Formatea e imprime ARGUMENTO según FORMATO, usando la sintaxis printf de C.
- prlimit — Imprime o establece límites de recursos para el número de proceso PID.
- ps — Listar procesos.
- pwd — Imprimir directorio de trabajo (actual).
- pwdx — Imprime el directorio de trabajo de los procesos listados en la línea de comandos.
- readahead — Precargar archivos en la caché del disco.
- readlink — Muestra a qué apunta el enlace simbólico.
- realpath — Muestra la ruta absoluta canónica
- reiniciar — Reiniciar, detener o apagar el sistema.
- renice — establece valores agradables para los procesos en ejecución
- reiniciar — Reiniciar la terminal.
- rev — Imprime cada línea en orden inverso; cuando no se proporcionan archivos, se utiliza la entrada estándar (stdin).
- rfkill — Habilita/deshabilita dispositivos inalámbricos.
- rm — Elimina cada argumento del sistema de archivos.
- rmdir — Elimina uno o más directorios.
- rmmod — Descarga el módulo llamado MODULE del kernel de Linux.
- rtcwake — Entra en el estado de suspensión especificado hasta el tiempo especificado.
- sed — Editor de flujo.
- seq — Cuenta desde el primero hasta el último, por incrementos.
- setfattr — Escribe atributos extendidos POSIX.
- setsid — Ejecutar el proceso en una nueva sesión.
- sha1sum — Calcula el hash sha para cada archivo de entrada, leyéndolo de la entrada estándar si no hay ninguno.
- shred — Elimina de forma segura un archivo sobrescribiendo su contenido con datos aleatorios.
- dormir — Espere antes de salir.
- sntp — Cliente del Protocolo de Tiempo de Red Simple.
- ordenar — Ordena todas las líneas de texto de los archivos de entrada (o stdin) a stdout.
- split — Copia los datos de ENTRADA (o stdin) a una serie de archivos de SALIDA (o "x") con un sufijo alfabéticamente creciente (aa, ab, ac... az, ba, bb...).
- stat — Muestra el estado de los archivos o sistemas de archivos.
- cadenas — Muestra cadenas imprimibles en un archivo binario
- su — Cambia de usuario, solicitando la contraseña del nuevo usuario cuando no se ejecuta como root.
- swapoff — Deshabilita el intercambio en una región de intercambio determinada.
- swapon — Habilita el intercambio de archivos en un dispositivo/archivo determinado.
- cambiar de raíz : utilice desde PID 1 en initramfs para liberar initramfs, cambiar de raíz a NEW_ROOT y ejecutar NEW_INIT.
- sync — Escribe en el disco los datos en caché pendientes (sincronizar), bloqueando el proceso hasta que finalice.
- sysctl — Lee/escribe datos de control del sistema (en /proc/sys).
- tac — Líneas de salida en orden inverso.
- tail — Copia las últimas líneas de los archivos a la salida estándar.
- tar — Crea, extrae o lista archivos en un archivo .tar (o t?z comprimido).
- taskset : inicia una nueva tarea que solo puede ejecutarse en ciertos procesadores, o cambia la afinidad de procesador de un PID existente.
- tee — Copia la entrada estándar a cada archivo listado, y también a la salida estándar.
- prueba — Devuelve verdadero o falso realizando pruebas.
- tiempo — Ejecuta la línea de comandos e informa el tiempo real, el tiempo de usuario y el tiempo del sistema transcurridos en segundos.
- timeout — Ejecuta la línea de comandos como un proceso hijo, enviándole una señal si el comando no finaliza lo suficientemente pronto.
- arriba — Muestra la actividad del proceso en tiempo real.
- touch — Actualiza las horas de acceso y modificación de cada ARCHIVO a la hora actual.
- verdadero — Devuelve cero.
- truncar — Establece la longitud de los archivos, ampliándolos de forma esporádica si es necesario.
- ts — entrada estándar de marca de tiempo.
- tsort — Ordenación topológica para la resolución de dependencias.
- tty — Muestra el nombre del archivo de la terminal conectada a stdin.
- tunctl — Crea y elimina dispositivos Ethernet virtuales tun/tap.
- ulimit — Imprime o establece límites de recursos para el número de proceso PID.
- umount — Desmonta los sistemas de archivos listados.
- uname — Imprimir información del sistema.
- Unicode : conjunto universal de caracteres.
- uniq — Informa o filtra las líneas repetidas en un archivo.
- unix2dos — Convierte el formato de salto de línea de Unix "\n" a DOS "\r\n".
- unlink — Eliminar un archivo.
- unshare : crea un nuevo espacio de nombres de contenedor para este proceso y sus procesos hijos, de modo que algún atributo no se comparta con el proceso padre.
- Tiempo de actividad : indica la hora actual, el tiempo que lleva funcionando el sistema, el número de usuarios y la carga promedio del sistema durante los últimos 1, 5 y 15 minutos.
- usleep — Pausa durante MICROSECONDS microsegundos.
- uudecode — Decodifica un archivo uuencoded.
- uuencode — Codifica un archivo binario.
- uuidgen — Crea e imprime un nuevo UUID aleatorio RFC4122.
- vconfig — Crea y elimina dispositivos Ethernet virtuales.
- vmstat — Imprime estadísticas de la memoria virtual.
- w — Muestra quién ha iniciado sesión y desde cuándo lo ha hecho.
- watch — Ejecuta PROG cada -n segundos, mostrando la salida.
- wc — Cuenta líneas, palabras y caracteres en la entrada.
- que — Buscar en $PATH archivos ejecutables que coincidan con los nombres de archivo.
- watchdog — demonio de vigilancia de software.
- quién — Imprimir información sobre los usuarios que han iniciado sesión.
- whoami — Imprime el nombre del usuario actual.
- xargs — Ejecuta la línea de comandos una o más veces, agregando argumentos desde la entrada estándar.
- xxd — Volcado hexadecimal de un archivo a la salida estándar.
- Sí — Generar repetidamente una línea de salida hasta que sea eliminado.
- zcat — Descomprime archivos gz a la salida estándar.
Véase también
Referencias
- ↑ Toybox se publica bajo la siguiente licencia BSD "sin cláusulas" de Rob Landley.
- ↑ "Simplificar el texto de la licencia, como se mencionó en la lista de correo" . 14 de marzo de 2013. Consultado el 29 de junio de 2021 .
- 1 2 3 Landley, Robert. "¿Qué es ToyBox?" . Sitio web del proyecto Toybox . Consultado el 13 de julio de 2012 .
- 1 2 Dj Walker-Morgan. "Dentro de ToyBox: Una entrevista con Rob Landley" . Recuperado el 13 de julio de 2012 .
- 1 2 Varghese, Sam (2012-02-01). "El proyecto de reemplazo de BusyBox alimenta una animada disputa verbal" . IT Wire . Recuperado el 12 de mayo de 2013 .
- 1 2 "Proyecto de reemplazo de Busybox" . 11 de enero de 2012. Consultado el 4 de marzo de 2014 .
- ↑ Landley, Robert. "Documentación de diseño" . Sitio web del proyecto Toybox . Consultado el 18 de febrero de 2015.
Toybox combina las utilidades de línea de comandos de Linux más comunes en un único ejecutable con licencia BSD. Es simple, pequeño, rápido y cumple razonablemente con los estándares (
POSIX-2008
y LSB 4.1).
- 1 2 toybox en android.googlesource.com (28-12-2014)
- ↑ celf-2015.txt por Rob Landley (2015)
- ↑ Landley, Robert (30 de septiembre de 2006). "Voy a salir ahora. Puede que tarde un rato" . busybox (Lista de correo).
- ↑ Relanzamiento de Toybox en toybox.landley.narkive.com (2011-11-20)
- ↑ Cambiar a la licencia BSD de 2 cláusulas (con una salvedad sobre el directorio de scripts). 0.2.0 por landley el 15 de noviembre de 2011
- ↑ "Noticias de la caja de juguetes" .
- ↑ Simplificar el texto de la licencia, como se mencionó en la lista de correo. Por Landley (14 de marzo de 2013)
- ↑ Android obtiene una caja de juguetes en lwn.net por Jake Edge (14 de enero de 2015)
- ↑ Problema 76861: Importación de partes de Toybox a Android, incluyendo dos2unix, unix2dos, sort, uniq y usleep
- ↑ "Empieza a usar la caja de juguetes predefinida" .
- ↑ Corbet, Jonathan (31 de enero de 2012). "Garrett: La lucha continua contra la aplicación de la GPL" . LWN.net . Recuperado el 4 de marzo de 2014.
El verdadero problema aquí es que la dependencia de [Software Freedom Conservancy] en Busybox significa que solo pueden dirigirse a los infractores que usan ese código Busybox. Ningún titular importante de derechos de autor del kernel se ha ofrecido hasta ahora a permitir que la SFC haga valer sus derechos de autor, con el resultado de que la acción de aplicación se detendrá a medida que los proveedores migren a este reemplazo de Busybox.
- ↑ "Garrett: La lucha continua contra la aplicación de la GPL" . LWN.net . 31 de enero de 2012. Consultado el 4 de marzo de 2014. >
Como antiguo 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 forma que considere oportuna. Nunca dieron como resultado que se añadiera una sola línea de código al repositorio de busybox. SÍ han dado como resultado que más de una empresa abandone por completo el desarrollo de Linux y cambie a sistemas operativos que no sean Linux para sus productos integrados, y son una parte importante de la razón detrás de la política de Android de "No GPL en el espacio de usuario".
- ↑ Proffitt, Brian (2012-02-02). "La aplicación de la GPL enciende las llamas de la comunidad: ¿tirar al bebé de la GPL con el agua del baño de la aplicación?" . ITworld . Recuperado el 2015-03-04 .
- ↑ Landley, Rob (13 de marzo de 2013). "Conferencia sobre Linux embebido 2013 - Toybox: Escribiendo una nueva línea de comandos" (vídeo) . The Linux Foundation . Archivado del original el 21 de diciembre de 2021. Consultado el 24 de junio de 2016 .
- ↑ Estado de la caja de juguetes
- ↑ Progreso del proyecto para la versión 0.8.7
Enlaces externos
- Sitio web oficial
- Software Linux
- Software que utiliza la licencia BSD.
- Software Unix
- Software de dominio público con código fuente
- Software libre programado en C
- Software de línea de comandos