Rob Landley | 589f5cd | 2010-01-05 10:41:52 -0600 | [diff] [blame^] | 1 | <!--#include file="header.html" --> |
| 2 | |
Rob Landley | e258af3 | 2008-01-05 18:09:49 -0600 | [diff] [blame] | 3 | <h2><a name="what" />What is ToyBox?</h2> |
| 4 | |
| 5 | <p>The goal of the Toybox project is to create simple implementations of all |
| 6 | the important Linux command line utilities. These implementations should |
| 7 | be small (the entire project should total less than a megabyte, uncompressed), |
| 8 | fast, simple, and correctly implemented (which is related to standards |
| 9 | compliance, but isn't quite the same thing). Click for |
| 10 | <a href="design.html">more about the design goals</a></p> |
| 11 | |
| 12 | <p>Toybox has configurable levels of functionality, and should scale from tiny |
| 13 | embedded systems up to full general purpose desktop and development |
| 14 | environments. The author plans to run it on his laptop, and the |
| 15 | <a href=/code/firmware>Firmware Linux</a> project is trying to get a complete |
| 16 | Linux system to rebuild itself from source code using toybox.</p> |
| 17 | |
| 18 | <p>Toybox is <a href=license.html>Licensed under GPL version 2</a>.</p> |
| 19 | |
| 20 | <p>Toybox can be built as a single "swiss army knife" executable (ala BusyBox |
| 21 | or Red Hat's Nash), or each command can be built as a traditional independent |
| 22 | executable.</p> |
| 23 | |
| 24 | <b><h2><a name="status" />What commands are implemented?</h2></b> |
| 25 | |
| 26 | <p>The current list of commands implemented by toybox is at the top of the |
| 27 | <a href=news.html>news page</a></p>. That list is updated when new commands |
| 28 | go in.</p> |
| 29 | |
| 30 | <p>In general, configuring toybox for "defconfig" enables all the commands |
| 31 | compete enough to be useful. Configuring "allyesconfig" enables partially |
| 32 | implemented commands as well.</p> |
| 33 | |
| 34 | <p>The following commands are incomplete, but demonstrate some basic |
| 35 | functionality: bzcat/bunzip2, help, mke2fs, sh/toysh, mdev.</p> |
| 36 | |
| 37 | <p>The following are partially implemented commands that don't actually do |
| 38 | anything yet: mke2fs.</p> |
| 39 | |
Rob Landley | bd91551 | 2008-01-07 20:28:26 -0600 | [diff] [blame] | 40 | <p>Several toybox commands can do things other vesions can't. For example:</p> |
| 41 | |
| 42 | <p>The toybox "df" isn't confused by initramfs the way other df implementations |
| 43 | are. If initramfs is visible, df shows it like any other mount point.</p> |
| 44 | |
| 45 | <p>The toybox "touch" command has a -l option to set the length of a file. |
| 46 | This can truncate a file, or create completely sparse files.</p> |
Rob Landley | e258af3 | 2008-01-05 18:09:49 -0600 | [diff] [blame] | 47 | |
| 48 | <b><h3>Command Shell</h3></b> |
| 49 | <p>The Toybox Shell (toysh) aims to be a reasonable bash replacement. It |
| 50 | implements the "sh" and "toysh" commands, plus the built-in commands "cd" and |
| 51 | "exit". This is the largest single sub-project in toybox.</p> |
| 52 | |
| 53 | <p>The following additional commands may be built into the shell (but not as |
| 54 | separate executables): cd, exit, if, while, for, function, fg, bg, jobs, source, |
| 55 | <a href="http://www.opengroup.org/onlinepubs/009695399/utilities/alias.html">alias</a>, |
| 56 | export, set, unset, read, trap, and exec. (Note: not done yet.)</p> |
| 57 | |
| 58 | </ul> |
| 59 | |
| 60 | <h2><a name="commands" />Which commands are planned?</h2> |
| 61 | |
| 62 | <p>The toybox <a href=todo.txt>todo list</a> mentions many potential commands |
| 63 | which may be added to this project. (Whether that file is readable by anybody |
| 64 | but the project's maintainer is open to debate.)</p> |
| 65 | |
| 66 | <p>The criteria for a toybox 1.0 release is that a system built from just the |
| 67 | Linux kernel, toybox, uClibc, and a compiler (such as tinycc) can rebuild |
| 68 | itself from source code.</p> |
| 69 | |
| 70 | <b><h3>Relevant Standards</h3></b> |
| 71 | |
| 72 | <p>Most commands are implemented according to |
| 73 | <a href=http://www.opengroup.org/onlinepubs/009695399/idx/utilities.html>The |
| 74 | Single Unix Specification version 3</a> where applicable. This does not mean |
| 75 | that Toybox is implementing every SUSv3 utility: some such as SCCS and ed are |
| 76 | obsolete, while others such as c99 are outside the scope of the project. |
| 77 | Toybox also isn't implementing full internationalization support: it should be |
| 78 | 8-bit clean and handle UTF-8, but otherwise we leave this to X11 and higher |
| 79 | layers. And some things (like $CDPATH support in "cd") await a good |
| 80 | explanation of why to bother with them. (The standard provides an important |
| 81 | frame of reference, but is not infallable set of commandments to be blindly |
| 82 | obeyed.)</p> |
| 83 | |
| 84 | <p>The other major sources of commands are the Linux man pages, and testing |
| 85 | the behavior of existing commands (although not generally looking at their |
| 86 | source code). SUSv3 does not include many basic commands such as "mount", |
| 87 | "init", and "mke2fs", which are kind of nice to have.</p> |
| 88 | |
| 89 | <b><h2><a name="downloads" />Download</h2></b> |
| 90 | |
| 91 | <p>This project is maintained as a mercurial archive. To get a copy of the |
| 92 | current development version, either use mercurial (hg clone |
| 93 | http://landley.net/toybox) or click on one of the zip/gz/bz2 links |
| 94 | at the top of the <a href=/hg/toybox>mercurial archive browser</a> page to get |
| 95 | an archive of the appropriate version. Click |
| 96 | <a href="/hg/toybox?cmd=tags">tags</a> to see all the tagged release |
| 97 | versions ("tip" is the current development version).</p> |
| 98 | |
| 99 | <p>The maintainer's <a href=/notes.html>development log</a> and the project's |
| 100 | <a href=http://www2.them.com:8080/cgi-bin/mailman/listinfo/toybox>mailing |
| 101 | list</a> are also good ways to track what's going on with the project.</p> |
| 102 | |
Rob Landley | 08671ef | 2009-09-30 23:30:26 -0500 | [diff] [blame] | 103 | <b><h2><a name="toycans" />What's the toybox logo image?</h2></b> |
Rob Landley | b9d0cf1 | 2008-01-05 18:13:19 -0600 | [diff] [blame] | 104 | |
| 105 | <p>It's <a href=toycans-big.jpg>carefully stacked soda cans</a>. Specifically, |
| 106 | it's a bunch of the original "Coke Zero" and "Pepsi One" cans, circa 2006, |
Rob Landley | 797a4c3 | 2008-01-05 18:23:30 -0600 | [diff] [blame] | 107 | stacked to spell out the binary values of the ascii string "Toybox", with |
| 108 | null terminator at the bottom. (The big picture's on it's side because |
| 109 | the camera was held sideways to get a better shot.)</p> |
| 110 | |
| 111 | <p>No, it's not photoshopped, I actually had these cans until a coworker |
| 112 | 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, |
| 113 | thinking they were recycling. (I still have two of each kind, but |
| 114 | Pepsi One seems discontinued and Coke Zero switched its can color |
| 115 | from black to grey, presumably in celebration. It was fun while it lasted...)</p> |
Rob Landley | 589f5cd | 2010-01-05 10:41:52 -0600 | [diff] [blame^] | 116 | |
| 117 | <!--#include file="footer.html" --> |