Rob Landley | 589f5cd | 2010-01-05 10:41:52 -0600 | [diff] [blame] | 1 | <!--#include file="header.html" --> |
| 2 | |
Rob Landley | 689f095 | 2012-08-25 14:24:24 -0500 | [diff] [blame^] | 3 | <h1>Answers to <a href="#what">What</a>, <a href="#why">Why</a>, |
| 4 | <a href="#who">Who</a>, <a href="#how">How</a>, <a href="#when">when</a></h1> |
| 5 | |
Rob Landley | e258af3 | 2008-01-05 18:09:49 -0600 | [diff] [blame] | 6 | <h2><a name="what" />What is ToyBox?</h2> |
| 7 | |
Rob Landley | 689f095 | 2012-08-25 14:24:24 -0500 | [diff] [blame^] | 8 | <p>The goal of the Toybox project is to create simple, small, fast, and |
| 9 | correct implementations of all the standard Linux command line utilities. |
| 10 | There's a <a href="design.html">page on design goals</a>.</p> |
Rob Landley | e258af3 | 2008-01-05 18:09:49 -0600 | [diff] [blame] | 11 | |
Rob Landley | 689f095 | 2012-08-25 14:24:24 -0500 | [diff] [blame^] | 12 | <p>Toybox offers configurable levels of functionality, and should scale from |
| 13 | tiny embedded systems up to general purpose development environments. |
| 14 | The author plans to install it on his Android phone in place of Toolbox, |
| 15 | and the <a href=/aboriginal>Aboriginal Linux</a> project is working to get a |
| 16 | complete Linux system to rebuild itself from source code using toybox.</p> |
Rob Landley | e258af3 | 2008-01-05 18:09:49 -0600 | [diff] [blame] | 17 | |
Rob Landley | 1208ca7 | 2011-11-15 03:01:41 -0600 | [diff] [blame] | 18 | <p>Toybox is <a href=license.html>released under a simple 2-clause BSD-style |
Rob Landley | 689f095 | 2012-08-25 14:24:24 -0500 | [diff] [blame^] | 19 | license</a>. (Earlier versions were released under GPLv2, but |
| 20 | <a href=oldlicense.html>that changed</a>.)</p> |
Rob Landley | e258af3 | 2008-01-05 18:09:49 -0600 | [diff] [blame] | 21 | |
| 22 | <p>Toybox can be built as a single "swiss army knife" executable (ala BusyBox |
| 23 | or Red Hat's Nash), or each command can be built as a traditional independent |
| 24 | executable.</p> |
| 25 | |
Rob Landley | 689f095 | 2012-08-25 14:24:24 -0500 | [diff] [blame^] | 26 | <b><h2><a name="status" />What commands are implemented in Toybox?</h2></b> |
Rob Landley | e258af3 | 2008-01-05 18:09:49 -0600 | [diff] [blame] | 27 | |
Rob Landley | 689f095 | 2012-08-25 14:24:24 -0500 | [diff] [blame^] | 28 | <p>The current list of commands implemented by toybox is on the |
| 29 | <a href=status.html>status page</a>, which is updated each release. |
| 30 | There is also <a href=roadmap.html>roadmap</a> of planned commands for the |
| 31 | 1.0 release.</p> |
Rob Landley | e258af3 | 2008-01-05 18:09:49 -0600 | [diff] [blame] | 32 | |
| 33 | <p>In general, configuring toybox for "defconfig" enables all the commands |
| 34 | compete enough to be useful. Configuring "allyesconfig" enables partially |
Rob Landley | 689f095 | 2012-08-25 14:24:24 -0500 | [diff] [blame^] | 35 | implemented commands as well, along with debugging features.</p> |
Rob Landley | e258af3 | 2008-01-05 18:09:49 -0600 | [diff] [blame] | 36 | |
Rob Landley | 4c2484f | 2012-01-22 19:41:42 -0600 | [diff] [blame] | 37 | <p>Several toybox commands can do things other vesions can't. For example |
| 38 | the toybox "df" isn't confused by initramfs the way other df implementations |
Rob Landley | 689f095 | 2012-08-25 14:24:24 -0500 | [diff] [blame^] | 39 | are. (If initramfs is visible, df shows it like any other mount point.)</p> |
Rob Landley | bd91551 | 2008-01-07 20:28:26 -0600 | [diff] [blame] | 40 | |
Rob Landley | e258af3 | 2008-01-05 18:09:49 -0600 | [diff] [blame] | 41 | <b><h3>Command Shell</h3></b> |
| 42 | <p>The Toybox Shell (toysh) aims to be a reasonable bash replacement. It |
| 43 | implements 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 |
| 47 | separate executables): cd, exit, if, while, for, function, fg, bg, jobs, source, |
Rob Landley | 4c2484f | 2012-01-22 19:41:42 -0600 | [diff] [blame] | 48 | <a href="http://opengroup.org/onlinepubs/9699919799/utilities/alias.html">alias</a>, |
Rob Landley | e258af3 | 2008-01-05 18:09:49 -0600 | [diff] [blame] | 49 | export, 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 |
| 56 | which may be added to this project. (Whether that file is readable by anybody |
Rob Landley | 4c2484f | 2012-01-22 19:41:42 -0600 | [diff] [blame] | 57 | but the project's maintainer is open to debate.) The roadmap wiki in the |
| 58 | nav bar has a more human readable version.</p> |
Rob Landley | e258af3 | 2008-01-05 18:09:49 -0600 | [diff] [blame] | 59 | |
| 60 | <p>The criteria for a toybox 1.0 release is that a system built from just the |
Rob Landley | 4c2484f | 2012-01-22 19:41:42 -0600 | [diff] [blame] | 61 | Linux kernel, toybox, C library (such as uClibc), and a compiler (such as |
| 62 | tinycc) can rebuild itself from source code.</p> |
Rob Landley | e258af3 | 2008-01-05 18:09:49 -0600 | [diff] [blame] | 63 | |
| 64 | <b><h3>Relevant Standards</h3></b> |
| 65 | |
| 66 | <p>Most commands are implemented according to |
Rob Landley | 4c2484f | 2012-01-22 19:41:42 -0600 | [diff] [blame] | 67 | <a href=http://opengroup.org/onlinepubs/9699919799/idx/utilities.html>The |
| 68 | Single Unix Specification version 4</a> where applicable. This does not mean |
Rob Landley | e258af3 | 2008-01-05 18:09:49 -0600 | [diff] [blame] | 69 | that Toybox is implementing every SUSv3 utility: some such as SCCS and ed are |
| 70 | obsolete, while others such as c99 are outside the scope of the project. |
| 71 | Toybox also isn't implementing full internationalization support: it should be |
| 72 | 8-bit clean and handle UTF-8, but otherwise we leave this to X11 and higher |
| 73 | layers. And some things (like $CDPATH support in "cd") await a good |
| 74 | explanation of why to bother with them. (The standard provides an important |
| 75 | frame of reference, but is not infallable set of commandments to be blindly |
| 76 | obeyed.)</p> |
| 77 | |
| 78 | <p>The other major sources of commands are the Linux man pages, and testing |
| 79 | the behavior of existing commands (although not generally looking at their |
Rob Landley | 4c2484f | 2012-01-22 19:41:42 -0600 | [diff] [blame] | 80 | source code), including the commands in Android's toolbox. SUSv4 does not |
| 81 | include many basic commands such as "mount", "init", and "mke2fs", which are |
| 82 | kind of nice to have.</p> |
Rob Landley | e258af3 | 2008-01-05 18:09:49 -0600 | [diff] [blame] | 83 | |
| 84 | <b><h2><a name="downloads" />Download</h2></b> |
| 85 | |
| 86 | <p>This project is maintained as a mercurial archive. To get a copy of the |
| 87 | current development version, either use mercurial (hg clone |
Rob Landley | f83305e | 2012-02-03 22:39:55 -0600 | [diff] [blame] | 88 | http://landley.net/hg/toybox) or click on one of the zip/gz/bz2 links |
Rob Landley | e258af3 | 2008-01-05 18:09:49 -0600 | [diff] [blame] | 89 | at the top of the <a href=/hg/toybox>mercurial archive browser</a> page to get |
| 90 | an archive of the appropriate version. Click |
| 91 | <a href="/hg/toybox?cmd=tags">tags</a> to see all the tagged release |
| 92 | versions ("tip" is the current development version).</p> |
| 93 | |
| 94 | <p>The maintainer's <a href=/notes.html>development log</a> and the project's |
Rob Landley | 4c2484f | 2012-01-22 19:41:42 -0600 | [diff] [blame] | 95 | <a href=http://lists.landley.net/listinfo.cgi/toybox-landley.net>mailing |
Rob Landley | e258af3 | 2008-01-05 18:09:49 -0600 | [diff] [blame] | 96 | list</a> are also good ways to track what's going on with the project.</p> |
| 97 | |
Rob Landley | 689f095 | 2012-08-25 14:24:24 -0500 | [diff] [blame^] | 98 | <!-- |
| 99 | <b><h2><a name="why">Why do toybox?</h2></b> |
| 100 | |
| 101 | <p>Because smart phones are replacing the PC, and Android must become |
| 102 | self-hosting to beat the iPhone in establishing the new standard.</p> |
| 103 | |
| 104 | <p>This is the third such major transition in computer history: |
| 105 | (mainframe->minicomputer->microcomputer->smartphone). |
| 106 | The mainframe was replaced by the minicomputer, which was replaced by |
| 107 | the microcomputer (renamed the "personal" computer to make clear you could |
| 108 | access porn through it), which is being replaced by the smartphone. Nobody |
| 109 | needed to wait for printouts from a big computer in another building when they |
| 110 | could use a little one down the hall. Then nobody needed the big computer |
| 111 | down the hall when they had a little one on their desk. Now nobody needs the |
| 112 | big computer on their desk when they have a little one in their pocket.</p> |
| 113 | |
| 114 | <p>The new platform displaces the old when it becomes natively self hosting. |
| 115 | Often they leverage existing technology: just as early microcmputers used |
| 116 | teletypes and televisions for output, phones can use |
| 117 | <a href=http://us.toshiba.com/accessory/PA3575U-1PRP>USB docking stations</a> |
| 118 | to access a bigger screen, mouse, keyboard, speakers, etc. Plugging a phone into |
| 119 | USB even charges the battery. But to use the phone as a development |
| 120 | workstation, it needs more software, such as a Posix command line, a native |
| 121 | compiler, and drivers for the USB peripherals.</p> |
| 122 | |
| 123 | <p>The new platform also eventually weans itself off of its dominant language. |
| 124 | Dalvik is to Android what ROM Basic was to the PC: something it must |
| 125 | eventually outgrow. Thus toybox is native C code, not Java.</p> |
| 126 | |
| 127 | <b><h3>So why aren't self-hosting smartphones attracting more attention?</h3></b> |
| 128 | |
| 129 | <p>Because most people are focusing on the legacy platforms, not on the new |
| 130 | stuff. Existing multi-billion dollar industries are getting evicted from their |
| 131 | decades-old established niche, and are trying to spin the transition as an |
| 132 | opportunity instead of a forced march onto reservations. When elephants run |
| 133 | from mice, it's easier to notice the elephants.</p> |
| 134 | |
| 135 | <p>History's our guide here: the previous technology always gets kicked up into |
| 136 | the "server space", moving from "the thing you stood in front of waiting for |
| 137 | your printout" to "that thing you sometimes accessed remotely via the new |
| 138 | computer". This time around they're calling it "the cloud" and pretending it's |
| 139 | a big deal; it's really just a beowulf cluster with a layer of |
| 140 | virtualization/containerization software implementing hotplug hardware and |
| 141 | live migration to provide cheap |
| 142 | commodity processing power that dominant players (like amazon) literally |
| 143 | give away for free. These old machines become secondary, only |
| 144 | accessed through the new machines users now directly interact with.</p> |
| 145 | |
| 146 | <p>Since there's only one server space, the mainframe ate the minicomputer in |
| 147 | the 1980's (when DEC went under), and this time around "the cloud" seems to be |
| 148 | eating the mainframe (IBM ain't happy). The inevitable consolidation leads |
| 149 | to drama, but doesn't mean much in the long run.</p> |
| 150 | |
| 151 | <p><a href=http://landley.net/notes-2012.html#12-07-2012>For more |
| 152 | on this topic...</a></p> |
| 153 | |
| 154 | <b><h3><a name="why_android">Why is Android important?</h2></b> |
| 155 | |
| 156 | <p>Major hardware transitions introduce |
| 157 | <a href=http://landley.net/notes-2011.html#26-06-2011>new software |
| 158 | standards</a> which are extremely sticky once |
| 159 | established, due to network effects.</p> |
| 160 | |
| 161 | <p>Last time around, the PC was stuck with |
| 162 | a proprietary operating system (DOS/Windows) which is still dominant on that |
| 163 | hardware platform's descendants 30 years later. This time around, the choice |
| 164 | is between Android (a Linux derivative) and iPhone (a closed BSD fork ala |
| 165 | SunOS, put out by a company already engaged in multiple aggressive IP lawsuits). |
| 166 | The main difference between Apple and Microsoft is that Apple is competent.</p> |
| 167 | |
| 168 | <p>And yes, it has to be Android, it won't be vanilla Linux any time soon, |
| 169 | for three reasons. 1) <a href=http://landley.net/notes-2010.html#13-08-2010>Open |
| 170 | Source can't do user interfaces</a> for about the same reason wikipedia can't |
| 171 | write a novel, 2) it's too late to the |
| 172 | party (a 5 year headstart is forever in computers), 3) preinstalls matter |
| 173 | (GPLv3 spooked all the hardware vendors, Android has a "no GPL in |
| 174 | userspace" policy which is rigidly enforced).</p> |
| 175 | |
| 176 | <p>And "any time soon" is important: attempting to displace an existing |
| 177 | entrenched de-facto standard is what linux has spent the last 20 |
| 178 | years trying (and failing) to do on the desktop. Spending another 20 |
| 179 | years fighting for less than 1% of the phone market would just be sad.</p> |
| 180 | |
| 181 | <b><h3><a name="how_google">How is Google less evil than Apple?</h3></b> |
| 182 | |
| 183 | <p>Because Android isn't Google's core business, attaching advertising to large |
| 184 | scale data searches is. Android and Chrome and such are Google's way of |
| 185 | "commoditizing their co-factors" to drive down the price of ingredients |
| 186 | to their core business.</p> |
| 187 | |
| 188 | <p>Thus Google is pursuing a commodity market and encouring as many vendors as |
| 189 | possible to participate, not to control the new space but to hold it open, |
| 190 | so that its search products are widely available without requiring the |
| 191 | permission of some other monopoly gatekeeper. Apple is attemping to corner the |
| 192 | smartphone market and extract monopoly rents, excluding all |
| 193 | vendors except itself.</p> |
| 194 | |
| 195 | <p>So if Google wins we get a commodity market in smartphone/tablet software, |
| 196 | and may be able to open it further in future. If Apple wins we get a proprietary |
| 197 | smartphone/tablet OS with a single monopoly vendor, which is likely to close it |
| 198 | further.</p> |
| 199 | |
| 200 | <b><h3>Why not just use BusyBox?</h3></b> |
| 201 | |
| 202 | <p>Android can't. Busybox predates android |
| 203 | by many years; if they were ever going to ship it they'd have done so by |
| 204 | now. Android has had a "No GPL in Userspace" policy ever since GPLv3 |
| 205 | came out (before the first Android phone shipped), and they mean it.</p> |
| 206 | |
| 207 | <p>Toybox also has a better design and simpler code. I did both |
| 208 | and this is the one I enjoy banging on; I tried to contribute a few things |
| 209 | to busybox and it was like crawling through a thornbush of #ifdefs. Busybox |
| 210 | development is just no fun anymore.</p> |
| 211 | |
| 212 | --> |
| 213 | |
Rob Landley | 08671ef | 2009-09-30 23:30:26 -0500 | [diff] [blame] | 214 | <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] | 215 | |
| 216 | <p>It's <a href=toycans-big.jpg>carefully stacked soda cans</a>. Specifically, |
| 217 | 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] | 218 | stacked to spell out the binary values of the ascii string "Toybox", with |
| 219 | null terminator at the bottom. (The big picture's on it's side because |
| 220 | the camera was held sideways to get a better shot.)</p> |
| 221 | |
| 222 | <p>No, it's not photoshopped, I actually had these cans until a coworker |
| 223 | 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, |
| 224 | thinking they were recycling. (I still have two of each kind, but |
| 225 | Pepsi One seems discontinued and Coke Zero switched its can color |
| 226 | 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] | 227 | |
| 228 | <!--#include file="footer.html" --> |