# Toybox

Toybox es una implementación de software libre y de código abierto de algunas utilidades de línea de comandos de Unix para dispositivos integrados. Estos incluyen ls, cp, mv y unos 150 más. El proyecto Toybox se inició en 2006, y se convirtió en una alternativa de BusyBox con licencia BSD. Toybox se incluye con Android 6.0 "Marshmallow" y todas las versiones posteriores de Android (es decir, en todas las versiones de Android compatibles actualmente), y también está disponible para la instalación en otros sistemas operativos.

## Funcionalidad y objetivos

Toybox tiene como objetivo proporcionar un reemplazo con licencia BSD para la BusyBox con licencia GPL. Los principales objetivos técnicos de diseño de Toybox son la simplicidad, la pequeñez, la velocidad y el cumplimiento de los estándares. Toybox es compatible con POSIX-2008 y LSB 4.1, y no se enfoca en tener todas las opciones encontradas en las contrapartes de GNU.
Toybox se publica bajo la licencia BSD permisiva, mientras que BusyBox usa la licencia pública general GNU, que conduce a diferentes dominios de uso. Busybox se usa principalmente en el dominio FOSS con copyleft, mientras que Toybox se usa principalmente con proyectos con licencia permisiva y por compañías comerciales, por ejemplo Android de Google, que es un objetivo explícito de Toybox. En cuanto a las características, Toybox no ha alcanzado la paridad con Busybox. A partir de la versión 0.7.7, Toybox ofrece sólo un subconjunto de la funcionalidad de Busybox.

## Historia

A principios de 2006, el proyecto Toybox fue iniciado por Rob Landley después de que terminó su mantenimiento de BusyBox debido a una disputa con Bruce Perens, el creador original de BusyBox. En 2008 el proyecto quedó inactivo. A fines de 2011, Tim Bird, un empleado de Sony, sugirió crear una alternativa a BusyBox que no estaría bajo la Licencia Pública General de GNU. Rob Landley siguió la solicitud y sugirió, en cambio, basar esta biblioteca en el Toybox inactivo. El código del proyecto Toybox fue relicenciado desde la Licencia Pública General de GNU a la Licencia BSD de 2 cláusulas, y retomó el desarrollo de Toybox. En marzo de 2013, el proyecto recibió una licencia BSD con una cláusula 0 aún más permisiva, una variante de licencia equivalente de dominio público.
A fines de 2014, Toybox se integró en las ramas de desarrollo "Marshmallow" de Android 6.0.x.

## Controversia

En enero de 2012, la propuesta de crear una alternativa al proyecto BusyBox con licencia BSD provocó duras críticas de Matthew Garrett por quitar la única herramienta relevante para hacer cumplir los derechos de autor del grupo Software Freedom Conservancy. 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, pero que habían llevado a la evasión corporativa, expresando el deseo de detener las demandas "en la forma que considere más adecuada".

## Progreso del proyecto

La documentación oficial de Toybox muestra una descripción general de los comandos disponibles, parcialmente disponibles y faltantes. Según la hoja de ruta a la versión 1.0, aprox. El 50% de los objetivos de implementación del proyecto se lograron en 2015.
* acpi — shows battery status and other ACPI information
* ascii — report character aliases
* base64 — encoder and decoder for base64
* basename — return non-directory portion of a pathname
* bunzip2 — block-sorting file compressor
* blkid — command-line utility to locate/print block device attributes
* blockdev — call block device ioctls from the command line
* bzcat — decompresses files to stdout
* cal — prints a calendar of the given month or year
* cat — Copy file content to stdout
* chgrp — Change group
* chmod — Change file modes
* chown — Change owner
* chroot — Changes the apparent root directory
* chrt — manipulate the real-time attributes of a process
* cksum — Write file checksums and sizes
* clear
* cmp — Compare two files
* comm — Select or reject lines common to two files
* count — Count the number of elements of an array
* cp — Copy
* cpio — Copy files to and from archives
* cut — Cut out selected fields of each line of a file
* date — Display system date/time
* df — Report free disk space
* dirname — Return the directory portion of a pathname
* dmesg — Display message or driver message
* du — Estimate file space usage
* echo
* eject
* env
* expand — Convert tabs to spaces
* factor
* fallocate
* false — Return false value
* fgrep — Search a file with a fixed pattern
* find — Command-line utility that searches through one or more directory trees
* ftpget — Use File Transfer Protocol (FTP) to get a file from an FTP server
* ftpput — Use File Transfer Protocol (FTP) to put a file from an FTP server
* egrep
* grep — Search for PATTERN in each FILE or standard input
* groups — Display a group
* gzip — File compression
* head — Copy the first part of files
* help — Command help lists all commands
* hostname — Show or set the system's host name
* id — Prints the user or group identifier
* install
* ifconfig — System administration utility for network interface configuration.
* ln — Create a link named LINK_NAME or DIRECTORY to the specified TARGET.
* kill — Send signals to running processes in order to request the termination of the process
* killall — kill processes by name
* link — call link function
* login
* logname — Return the user's login name
* losetup
* lspci — Prints detailed information about all PCI buses and devices
* md5sum — Generate or check MD5 message digests
* ls — List of files or folders
* mkdir — Create a folder
* mkfifo — Make FIFO special files
* mknod — Make special files
* microcom — A minimalistic terminal program
* mount — Mount a file system
* mountpoint
* mv — move file
* nbd-client
* nc — Arbitrary TCP and UDP connections and listens
* netcat
* nice — Invoke a utility with an altered nice value
* nl — line numbering filter
* nohup — Invoke a utility immune to hangups
* od — dump files in various formats
* oneit
* partprobe
* passwd — Change user password
* paste — Merge corresponding or subsequent lines of files
* patch — Apply changes to files
* pidof — Find the process ID of a running program
* pmap — Report memory map of a process
* pwd — Print working directory name
* pwdx — Report current working directory of a process
* readahead
* readlink
* realpath
* renice — set nice values of running processes
* rev — reverse lines of a file or files
* rfkill
* rm — Remove directory entries
* rmdir — Remove directories
* seq — Generate a sequence of numbers
* setsid — Run a program in a new session
* sha1sum — Compute and check SHA1 message digest
* sleep — Suspend execution for an interval
* sort — Sort, merge, or sequence check text files
* split — Split files into pieces
* stat — Display file or file system status
* strings — Print the strings of printable characters in files.
* stty — Print or change terminal characteristics.
* su — Change user ID
* swapon
* swapoff
* switch root
* sync — Flush file system buffers
* tac — Concatenate and print files in reverse
* tail — Copy the last part of a file
* taskset — Retrieve or set a process's CPU affinity
* tee — Duplicate standard input
* time — time a simple command
* timeout — Run a command with a time limit
* touch — change file access and modification times
* true — Return true value
* truncate — shrink or extend the size of a file to the specified size
* tty — Return user's terminal name
* umount
* uname
* uniq — report or filter out repeated lines in a file
* unix2dos — UNIX to DOS text file format converter
* unlink
* unshare
* usleep — sleep some number of microseconds
* uuencode — Encode a binary file
* uudecode — Decode a binary file
* vconfig
* w — Shows who is logged on and what they are doing.
* wc — Word, line, and byte or character count
* which — Shows the full path of (shell) commands
* who — Display who is on the system
* whoami — Print effective userid
* xargs — Construct argument lists and invoke utility
* yes — to print a string repetitively