|Original author(s)||Robert Landley|
|Developer(s)||Robert Landley and others|
0.8.1 / May 21, 2019
|Size||814 KB (archived)|
|Type||Independent SUSp XCU implementation|
|License||0BSD license (permissive license / Public domain equivalent license)|
Toybox is a free and open-source software implementation of some Unix command line utilities for embedded devices. These include ls, cp, mv, and about 150 others. The Toybox project was started in 2006, and became a BSD-licensed BusyBox alternative. Toybox is included with Android 6.0 "Marshmallow" and all later Android versions (i.e. on all currently supported Androids versions), and is also available for installation on certain other operating systems.
Functionality and aim
Toybox aims to provide a BSD licensed replacement for the GPL licensed BusyBox. Toybox's major technical design goals are simplicity, smallness, speed and standard compliance. Toybox is POSIX-2008 and LSB 4.1 compatible, and doesn't focus on having every option found in GNU counterparts.
Toybox is licensed using the permissive BSD license, where BusyBox uses the copyleft GNU General Public License, which lead to different usage domains. Busybox is mostly used in the copyleft FOSS domain, while Toybox is used mostly with permissive licensed projects and by commercial companies, e.g. Google's Android which is an explicit target of Toybox. Feature-wise, Toybox has not reached parity with Busybox. As of version 0.7.7, Toybox offers only a subset of the Busybox functionality.
In early 2006 Toybox was started by Rob Landley after he ended his BusyBox maintainership due to a dispute with Bruce Perens, the original creator of BusyBox. In 2008 the project went dormant. At the end of 2011, Tim Bird, a Sony employee suggested to create an alternative to BusyBox which would not be under the GNU General Public License. Rob Landley followed the request and suggested instead to base this library on the dormant Toybox. He re-licensed Toybox from the GNU General Public License to the 2-clause BSD License, and took up the Toybox development again. In March 2013 the project was relicensed to an even more permissive 0-clause BSD license, a Public domain equivalent license variant.
In January 2012 the proposal of creating a BSD license alternative to the GPL licensed BusyBox project drew harsh criticism from Matthew Garrett for taking away the only relevant tool for copyright enforcement of the Software Freedom Conservancy group. Rob Landley, who had started the BusyBox-based lawsuits, responded this was intentional, explaining that the lawsuits had not benefited the project but that they had led to corporate avoidance, expressing a desire to stop the lawsuits "in whatever way I see fit".
The official Toybox documentation lists an overview of the available, partially available and the missing commands. According to the roadmap to version 1.0, approx. 50% of the project's implementation goals were achieved in 2015.
List of Toybox Commands
- 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
- 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
- expand — Convert tabs to spaces
- 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
- 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
- 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
- logname — Return the user's login name
- 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
- mv — move file
- nc — Arbitrary TCP and UDP connections and listens
- 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
- 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
- renice — set nice values of running processes
- rev — reverse lines of a file or files
- 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
- 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
- uniq — report or filter out repeated lines in a file
- unix2dos — UNIX to DOS text file format converter
- usleep — sleep some number of microseconds
- uuencode — Encode a binary file
- uudecode — Decode a binary file
- 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
- Toybox is released under the following "zero clause" BSD license by Rob Landley
- Landley, Robert. "What is ToyBox?". Toybox project website. Retrieved 13 July 2012.
- Dj Walker-Morgan. "Inside the ToyBox: An interview with Rob Landley". Retrieved 13 July 2012.
- Varghese, Sam (2012-02-01). "BusyBox replacement project fuels animated verbal spat". IT Wire. Retrieved 2013-05-12.
- Android gets a toybox on lwn.net by Jake Edge (January 14, 2015)
- "Busybox replacement project". 2012-01-11. Retrieved 2014-03-04.
- Landley, Robert. "Design Docs". Toybox project website. Retrieved 18 February 2015.
Toybox combines the most common Linux command line utilities together into a single BSD-licensed executable. It's simple, small, fast, and reasonably standards-compliant (POSIX-2008 and LSB 4.1).
- toybox on android.googlesource.com (2014-12-28)
- celf-2015.txt by Rob Landley (2015)
- Landley, Robert. "Status of toybox 0.7.7". Toybox project website. Retrieved 13 October 2018.
- Landley, Robert (2006-09-30). "I'm going out now. I may be some time". busybox (Mailing list).
- Toybox relaunch on toybox.landley.narkive.com (2011-11-20)
- Switch to 2-clause BSD license (with caveat about scripts directory). 0.2.0 by landley on 15 Nov 2011
- Simplify license text, as mentioned on the mailing list. by Landley (14 Mar 2013)
- Issue 76861: Importing parts of Toybox into Android, including dos2unix, unix2dos, sort, uniq, and usleep
- "Garrett: The ongoing fight against GPL enforcement". LWN.net. 2012-01-31. Retrieved 2014-03-04.
The real problem here is that the [Software Freedom Conservancy's] reliance on Busybox means that they're only able to target infringers who use that Busybox code. No significant kernel copyright holders have so far offered to allow the SFC to enforce their copyrights, with the result that enforcement action will grind to a halt as vendors move over to this Busybox replacement.
- "Garrett: The ongoing fight against GPL enforcement". LWN.net. 2012-01-31. Retrieved 2014-03-04.
>As the ex-maintainer of busybox who STARTED those lawsuits in the first place and now HUGELY REGRETS ever having done so, I think I'm entitled to stop the lawsuits in whatever way I see fit. They never resulted in a single line of code added to the busybox repository. They HAVE resulted in more than one company exiting Linux development entirely and switching to non-Linux operating systems for their embedded products, and they're a big part of the reason behind Android's "No GPL in userspace" policy.
- Proffitt, Brian (2012-02-02). "GPL enforcement sparks community flames - Throwing the GPL baby out with the enforcement bath water?". ITworld. Retrieved 2015-03-04.
- Landley, Rob. "Embedded Linux Conference 2013 - Toybox: Writing a New Command Line" (video). The Linux Foundation. Retrieved 2016-06-24.
- Toybox Help
- "How are we doing on implementing stuff so far?". Retrieved 2015-03-17.
- Toybox Todo List