blob: 4dae2d21a7ff03456e88934c3a6445f67f6b419f [file] [log] [blame]
Rob Landleye258af32008-01-05 18:09:49 -06001<!--#include file="header.html" -->
2
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
6the important Linux command line utilities. These implementations should
7be small (the entire project should total less than a megabyte, uncompressed),
8fast, simple, and correctly implemented (which is related to standards
9compliance, 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
13embedded systems up to full general purpose desktop and development
14environments. 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
16Linux 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
21or Red Hat's Nash), or each command can be built as a traditional independent
22executable.</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
28go in.</p>
29
30<p>In general, configuring toybox for "defconfig" enables all the commands
31compete enough to be useful. Configuring "allyesconfig" enables partially
32implemented commands as well.</p>
33
34<p>The following commands are incomplete, but demonstrate some basic
35functionality: bzcat/bunzip2, help, mke2fs, sh/toysh, mdev.</p>
36
37<p>The following are partially implemented commands that don't actually do
38anything yet: mke2fs.</p>
39
40
41<b><h3>Command Shell</h3></b>
42<p>The Toybox Shell (toysh) aims to be a reasonable bash replacement. It
43implements the "sh" and "toysh" commands, plus the built-in commands "cd" and
44"exit". This is the largest single sub-project in toybox.</p>
45
46<p>The following additional commands may be built into the shell (but not as
47separate executables): cd, exit, if, while, for, function, fg, bg, jobs, source,
48<a href="http://www.opengroup.org/onlinepubs/009695399/utilities/alias.html">alias</a>,
49export, set, unset, read, trap, and exec. (Note: not done yet.)</p>
50
51</ul>
52
53<h2><a name="commands" />Which commands are planned?</h2>
54
55<p>The toybox <a href=todo.txt>todo list</a> mentions many potential commands
56which may be added to this project. (Whether that file is readable by anybody
57but the project's maintainer is open to debate.)</p>
58
59<p>The criteria for a toybox 1.0 release is that a system built from just the
60Linux kernel, toybox, uClibc, and a compiler (such as tinycc) can rebuild
61itself from source code.</p>
62
63<b><h3>Relevant Standards</h3></b>
64
65<p>Most commands are implemented according to
66<a href=http://www.opengroup.org/onlinepubs/009695399/idx/utilities.html>The
67Single Unix Specification version 3</a> where applicable. This does not mean
68that Toybox is implementing every SUSv3 utility: some such as SCCS and ed are
69obsolete, while others such as c99 are outside the scope of the project.
70Toybox also isn't implementing full internationalization support: it should be
718-bit clean and handle UTF-8, but otherwise we leave this to X11 and higher
72layers. And some things (like $CDPATH support in "cd") await a good
73explanation of why to bother with them. (The standard provides an important
74frame of reference, but is not infallable set of commandments to be blindly
75obeyed.)</p>
76
77<p>The other major sources of commands are the Linux man pages, and testing
78the behavior of existing commands (although not generally looking at their
79source code). SUSv3 does not include many basic commands such as "mount",
80"init", and "mke2fs", which are kind of nice to have.</p>
81
82<b><h2><a name="downloads" />Download</h2></b>
83
84<p>This project is maintained as a mercurial archive. To get a copy of the
85current development version, either use mercurial (hg clone
86http://landley.net/toybox) or click on one of the zip/gz/bz2 links
87at the top of the <a href=/hg/toybox>mercurial archive browser</a> page to get
88an archive of the appropriate version. Click
89<a href="/hg/toybox?cmd=tags">tags</a> to see all the tagged release
90versions ("tip" is the current development version).</p>
91
92<p>The maintainer's <a href=/notes.html>development log</a> and the project's
93<a href=http://www2.them.com:8080/cgi-bin/mailman/listinfo/toybox>mailing
94list</a> are also good ways to track what's going on with the project.</p>
95
96<!--#include file="footer.html" -->