| <html><head><title>What is toybox?</title> |
| <!--#include file="header.html" --> |
| |
| <h2><a name="what" />What is toybox?</h2> |
| |
| <p>Toybox combines the most common Linux command line utilities together into |
| a single <a href=license.html>BSD-licensed</a> executable. It's simple, small, fast, and reasonably |
| standards-compliant (<a href=http://opengroup.org/onlinepubs/9699919799>POSIX-2008</a> and <a href=http://refspecs.linuxfoundation.org/LSB_4.1.0>LSB 4.1</a>).</p> |
| |
| <p>Toybox's 1.0 release goal is to turn generic Android into a |
| development environment capable of compiling <a href=http://www.linuxfromscratch.org>Linux From Scratch</a>. |
| A tiny system <a href=/aboriginal>built from</a> just toybox, linux, <a href=http://musl-libc.org>a C library</a>, and a C compiler (such as LLVM or |
| gcc 4.2.1+binutils 2.17) should be |
| able to rebuild itself from source code without needing any other packages.</p> |
| |
| <b><h2><a name="status" />What commands are implemented in toybox?</h2></b> |
| |
| <p>The current list of commands implemented by toybox is on the |
| <a href=status.html>status page</a>, which is updated each release. |
| There is also <a href=roadmap.html>roadmap</a> listing all planned commands for the |
| 1.0 release.</p> |
| |
| <p>In general, configuring toybox for "defconfig" enables all the commands |
| compete enough to be useful. Configuring "allyesconfig" enables partially |
| implemented commands as well, along with debugging features.</p> |
| |
| <p>Several toybox commands can do things other vesions can't. For example |
| the toybox "df" isn't confused by initramfs the way other df implementations |
| are. (If initramfs is visible, df shows it like any other mount point.)</p> |
| |
| <b><h3>Command Shell</h3></b> |
| <p>The toybox shell (toysh) aims to be a reasonable bash replacement. It |
| implements the "sh" and "toysh" commands, plus the built-in commands "cd" and |
| "exit". This is the largest single sub-project in toybox.</p> |
| |
| <p>The following additional commands may be built into the shell (but not as |
| separate executables): cd, exit, if, while, for, function, fg, bg, jobs, source, |
| <a href="http://opengroup.org/onlinepubs/9699919799/utilities/alias.html">alias</a>, |
| export, set, unset, read, trap, and exec. (Note: not done yet.)</p> |
| |
| </ul> |
| |
| <h2><a name="commands" />Which commands are planned?</h2> |
| |
| <p>The toybox <a href=todo.txt>todo list</a> mentions many potential commands |
| which may be added to this project. (Whether that file is readable by anybody |
| but the project's maintainer is open to debate.) The roadmap wiki in the |
| nav bar has a more human readable version.</p> |
| |
| <p>The criteria for a toybox 1.0 release is that a system built from just the |
| Linux kernel, toybox, C library (such as uClibc), and a compiler (such as |
| tinycc) can rebuild itself from source code.</p> |
| |
| <b><h3>Relevant Standards</h3></b> |
| |
| <p>Most commands are implemented according to |
| <a href=http://opengroup.org/onlinepubs/9699919799/idx/utilities.html>The |
| Single Unix Specification version 4</a> where applicable. This does not mean |
| that toybox is implementing every SUSv4 utility: some such as SCCS and ed are |
| obsolete, while others such as c99 are outside the scope of the project. |
| Toybox also isn't implementing full internationalization support: it should be |
| 8-bit clean and handle UTF-8, but otherwise we leave this to X11 and higher |
| layers. And some things (like $CDPATH support in "cd") await a good |
| explanation of why to bother with them. (The standard provides an important |
| frame of reference, but is not infallable set of commandments to be blindly |
| obeyed.)</p> |
| |
| <p>The other major sources of commands are the Linux man pages, and testing |
| the behavior of existing commands (although not generally looking at their |
| source code), including the commands in Android's toolbox. SUSv4 does not |
| include many basic commands such as "mount", "init", and "mke2fs", which are |
| kind of nice to have.</p> |
| |
| <b><h2><a name="downloads" />Download</h2></b> |
| |
| <p>This project is maintained as a <a href=https://github.com/landley/toybox>git |
| archive</a>, and also offers <a href=http://landley.net/toybox/downloads>source |
| tarballs</a> and <a href=http://landley.net/toybox/bin>static binaries</a> |
| of the release versions.</p> |
| |
| <p>The maintainer's <a href=/notes.html>development log</a> and the project's |
| <a href=http://lists.landley.net/listinfo.cgi/toybox-landley.net>mailing |
| list</a> are also good ways to track what's going on with the project.</p> |
| |
| <b><h2><a name="why" />Why is toybox?</h2></b> |
| |
| <p>The <a href=http://landley.net/talks/celf-2015.txt>2015 toybox talk</a> |
| starts with links to three previous talks on the history and motivation of |
| the project: "Why Toybox", "Why Public Domain", and "Why did I do |
| Aboriginal Linux (which led me here)?".</p> |
| |
| <b><h2><a name="toycans" />What's the toybox logo image?</h2></b> |
| |
| <p>It's <a href=toycans-big.jpg>carefully stacked soda cans</a>. Specifically, |
| it's a bunch of the original "Coke Zero" and "Pepsi One" cans, circa 2006, |
| stacked to spell out the binary values of the ascii string "Toybox", with |
| null terminator at the bottom. (The big picture's on it's side because |
| the camera was held sideways to get a better shot.)</p> |
| |
| <p>No, it's not photoshopped, I actually had these cans until a coworker |
| who Totally Did Not Get It <sup><font size=-3><a href=http://www.timesys.com>tm</a></font></sup> threw them out one day after I'd gone home, |
| thinking they were recycling. (I still have two of each kind, but |
| Pepsi One seems discontinued and Coke Zero switched its can color |
| from black to grey, presumably in celebration. It was fun while it lasted...)</p> |
| |
| <!--#include file="footer.html" --> |