aboutsummaryrefslogtreecommitdiff
path: root/www/about.html
blob: bbfbc2655f17fea73ada6218b02decdc9d52d4ca (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
<!--#include file="header.html" -->

<h2><a name="what" />What is ToyBox?</h2>

<p>The goal of the Toybox project is to create simple implementations of all
the important Linux command line utilities.  These implementations should
be small (the entire project should total less than a megabyte, uncompressed),
fast, simple, and correctly implemented (which is related to standards
compliance, but isn't quite the same thing).  Click for
<a href="design.html">more about the design goals</a></p>

<p>Toybox has configurable levels of functionality, and should scale from tiny
embedded systems up to full general purpose desktop and development
environments.  The author plans to install it on his Android phone in
place of Toolbox, and the
<a href=/aboriginal>Aboriginal Linux</a> project is trying to get a complete
Linux system to rebuild itself from source code using toybox.</p>

<p>Toybox is <a href=license.html>released under a simple 2-clause BSD-style
license</a>.</p>

<p>Toybox can be built as a single "swiss army knife" executable (ala BusyBox
or Red Hat's Nash), or each command can be built as a traditional independent
executable.</p>

<b><h2><a name="status" />What commands are implemented?</h2></b>

<p>The current list of commands implemented by toybox is at the top of the
<a href=news.html>news page</a>.  That list is updated when new commands
go in.  The list of commands yet to implement for the 1.0 release is in the
<a href=todo.txt>todo list</a>.</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.</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 SUSv3 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 mercurial archive.  To get a copy of the
current development version, either use mercurial (hg clone
http://landley.net/hg/toybox) or click on one of the zip/gz/bz2 links
at the top of the <a href=/hg/toybox>mercurial archive browser</a> page to get
an archive of the appropriate version.  Click
<a href="/hg/toybox?cmd=tags">tags</a> to see all the tagged release
versions ("tip" is the current development version).</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="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" -->