<html><head><title>toybox news</title>
<!--#include file="header.html" -->

<p>Toybox combines common Linux command line utilities together
into a single BSD-licensed executable that's simple, small, fast,
reasonably standards-compliant, and powerful enough to turn Android into
a development environment. See the links on the left for details.</p>

<h2>News</h2>

<hr><b>July 7, 2014</b>
<blockquote><p>"This planet has - or rather had - a problem, which was this:
most of the people living on it were unhappy for pretty much of the time. Many
solutions were suggested for this problem, but most of these were largely
concerned with the movement of small green pieces of paper, which was odd
because on the whole it wasn't the small green pieces of paper that were
unhappy." - The Hitchhiker's Guide to the Galaxy.</p></blockquote>

<p><a href=downloads/toybox-0.4.9.tar.bz2>Toybox 0.4.9</a> (<a href=/hg/toybox/shortlog/1385>commit 1385</a>) is out.</p>

<p><b>New commands</b> added to pending include:
lsattr, chattr, inotifyd, rfkill, sulogin, strings, makedevs,
killall5, and tar from Ashwini Sharma, arp from Kyungwan Han,
sysctl by Bilal Qureshi, partprobe from Bertold Van den Bergh,
host from Rich felker, and I did nbd-client and the first 2/3 of mount.</p>

<p>Finished cleanups (commands promoted out of pending):
sysctl, rfkill, strings, mkpasswd, makedevs, partprobe, killall5,
fallocate, and nbd-client.</p>

<p>(Along the way partial cleanups got made to: last, fold, lspci, ps,
bootchartd, init, fsck, telnetd, telnet, vconfig, toysh, iconv, useradd,
login, host, openvt, deallocvt, getty, tftpd, and modprobe. But there's
still more to do on all of those.)</p>

<p>This time around the <a href=bin>static binaries</a> are linked against
musl instead of uClibc. (That's why there's no sparc version, musl doesn't
support that target yet.)</p>

<p><b>Documentation:</b></p>

<p>The help text parser expects lower case "usage:" lines with
a blank line after them, so go through and regularize those. Expand the
"coding style" section in the docs and move it to design.html. (Not a show
stopper for incoming
contributions, just an explanation of some of the things I'll do to them
during cleanup.) The help text for the "toybox" command now includes
the shell script snippet to install symlinks to the toybox binary.</p>

<p>The <a href=cleanup.html>cleanup page</a> now has descriptions for the
full ifconfig cleanup series, among others.</p>

<p>The new toys/examples directory contains hello.c and skeleton.c. The first is
a simple hello world program in toybox style, the second is a much more
elaborate example program using showing how to use the command line option
parsing and how to provide multiple commands in the same C file.</p>

<p><b>Fixes</b>:</p>

<p>Fix od bug reported by Samuel Holland ("od -v -b" was appending the default
output type even though an output type was specified). Ashwini Sharma reported
bugs where readfile() was incorrectly freeing its buffer, and where toy_init()
was zeroing the wrong data because the field it was using to measure (rebound)
had moved (when I moved it back I added a comment why the field needs to be
there), fixed a segfault in the dhcp client, and made a 0 length read at
the start of password entry count as EOF. Make the "we are not root" test
in the init code show the help text. Posix implies that fflush() can return
success even when the stream's error bit is set, so call both fflush() and
ferror() from xprintf().</p>

<p>Isaac Dunham pointed out that bloatcheck couldn't deal with diff
implementations that only implement "unified diff" format, and that some
diff implementations can't handle nonseekable input (I.E. reading from
a pipe). Bugfix so "help -a" works again. Option parsing on nohup now stops
at first nonoption argument. Fix segfault in "which" if PATH wasn't set,
which was actually a bug in lib function find_in_path(). Made rm -rf of
chmod 000 directories actually remove them.</p>

<p>The build now passes the same $CFLAGS to the library probe as the final
build, because arch linux is so broken it provides different sets of
libraries for static and dynamic linking.</p>

<p>It turns out sprintf("%.123s", str) is counting characters, not bytes,
so globally enabling locale support opens stack smashing vulnerabilities.
So there's a new TOYFLAGS_LOCALE you set in toyflags when you want the
setup code to setlocale().</p>

<p><b>Upgrades:</b></p>

<p>Isaac Dunham extended cpio to archive unreadable empty files, and I taught it
to set uid/gid and timestamp when extracting archives. Isaac also
added tests for cpio, link, and du, added lspci -i, made the pci database
parsing skip # comment lines, merged logname and whoami into id.</p>

<p>Daniel Verkamp sped up md5sum about 30% with some loop unrolling, making
it actually smaller in the process. I added -b flags to md5sum and sha1sum
for "brief" output that's just the hash with no filename. (I'm aware other
implementations use that for MSDOS "binary" mode, and don't care.)</p>

<p>When building standalone commands (scripts/singleconfig.sh commandname),
the build now switches on all the sub-options of the command so we get
a standalone version with all the bells and whistles enabled.</p>

<p>Add -ds flags to date and document +FORMAT escapes. Add the shell NOP
command ":" as an alias for true (for toysh).</p>

<p>Add uClibc probe for iconv() and fallocate. (The fact it didn't always
build against uClibc is why fallocate wasn't enabled in defconfig before.)</p>

<p>The umount command now does an losetup -d on the device by default, so
we don't leak loopback devices. Bugfix to losetup so "losetup /dev/loop0
filename" actually works again.</p>

<p>Divya Kothari sent in test suite entries for ls, ln, rm, mv, printf, dd,
and renice. Then a second round for lsattr/chattr, mount, chmod, pgrep/pkill,
groupadd, groupdel, and useradd. Several of these uncovered bugs, still
working to fix them.</p>

<p>There are now free() functions for the predefined llist types and a
dlist_terminate() function to break doubly linked lists. The new
generic_signal() handler either sets "toys.signal" or writes a byte
to toys.signalfd with the signal number if signalfd isn't -1 (which it's
initialized to in toy_init).</p>

<p>The option parsing logic can now detect when a double fits in a long and
use the more precise type for floating point arguments (the FLOAT macro
contains the type used). The human_readable() function now just outputs
decimal kilo/mega/gigabytes (so when du -u says 5.0G it means 5.0 billion
bytes). The build infrastructure now notices duplicate commands (so if you
cp toys/pending/command.c toys/other/command.c and forget to delete the
first one, the build break is now more informative).</p>

<hr><b>April 20, 2014</b>
<blockquote><p>And to this end they built themselves a stupendous supercomputer
which was so amazingly intelligent that even before the data banks
had been connected up it had started from "I think therefore I am" and got as
far as the existence of rice pudding and income tax before anyone managed to
turn it off. - The Hitchhiker's Guide to the Galaxy.</p></blockquote>

<p><a href=downloads/toybox-0.4.8.tar.bz2>Toybox 0.4.8</a> is based on
<a href=http://landley.net/hg/toybox/shortlog/1262>commit 1262</a>. And
about time too.</p>

<p>The big news is that the build no longer needs python to generate help.h,
that's now done in C. The help text generation is also collating help text
from multiple options, merging command line option blocks and usage: lines.
There's even a new <a href=help.html>help web page</a>.</p>

<p><b>New commands:</b> Ifconfig, cpio, and su were cleaned up the rest of the
way and promoted out of pending. That saga is mostly explained on the
<a href=cleanup.html>cleanup page</a>. Vivek Bhagat's freeramdisk,
Isaac Dunham's fsfreeze, and Felix Janda's iconv are also new.</p>

<p><b>In pending:</b>
Ashwini Sharma's team submitted tcpsvd, udpsvd, telnet, telnetd, last, more,
groupdel/delgroup, arping, brctl, ftpget, ftpput, printf, reset, and added
ipv6 support to traceroute. Kyungwan Han's team submitted modprobe and getty.
Vivek Bhagat submitted openvt and deacllocvt. Samuel Holland submitted fold.
I wrote a new inflate (zip/zlib/gzip decompression) implementation in
compress.c, and still  need to do a corresponding deflate (compression-side)
and plug them into gzip and zip and so on. (Right now it does zcat.)</p>

<p>Several commands (vmstat, login, du, vconfig, mountpoint, free, chroot,
cut, touch, modinfo, expand) predate the "pending" directory, and are thus
in other directories but still need cleanup. Of these, vmstat got some
work this time (which would be much easier other vmstat implementations
documented what their output actually meant).</p>

<p><b>Upgrades:</b> Ifconfig grew /prefix netmask support (ala 1.2.3.4/24). Grep now has -zZ to
handle null terminated data, cksum grew -H for hex output. Upgraded od so the
fields align better when producing multiple output types. Help has -a and -h
options (all commands, html output).
Bugfix to blkid building for a 32 bit target. The date command can actually
set dates now. The O_NOFOLLOW compile time probe didn't work with cross
compiling, so it's back to an #ifdef test in portability.h. Nathan McSween
sent in a bugfix to od and a portability fix in the common library code.
Ashwini Sharma spotted a bug in pidof -o, and added verbose (-v) options
to mkdir and ln, and suggested killall should have an -s option and
allow -l to take zero arguments. Ashwini Sharma and Felix Janda upgraded
tftpd.  Fixed dumpleases still using toynet.h after
that was removed. Corrected killall return code and error reporting.
Isacc Dunham fixed bugs all over the tree, did cleanup on a bunch of
pending commands (getty, ftpget, init, openvt, modprobe...), and clarified
find's help text. Tom Sparrow ran three different static analyzers on
the code, which resulted in a few cleanups. The peek()/poke() functions
now use "volatile" to prevent broken compiler "optimizations" to do with
aliasing.</p>

<p><b>Build stuff:</b> Each FOR_xxxx macro now has a complementary CLEANUP_xxxx macro, so you
can put multiple commands with different command line options in the same
.c file, so they can share infrastructure outside of lib. (This let the
bunzip logic move out of lib into bzcat.c.) See XXX for example.
i
<p>The headers #included in toys.h are now grouped by standard, and headers
not listed in Posix or LSB were moved to portability.h. The old xregcomp.h
was folded into lib.h because it's posix (and supporting oddball uClibc
configurations isn't as important as it once was).</p>

<p>Regression tested against Ubuntu 8.04 to fix up bit-rot in defconfig
build on older systems. (We depend on Posix-2008, but not necessarily
the absolute latest build environment.)</p>

<p><b>In lib</b>: lib/xwrap.c added xgetpwnam(), xchroot(), and lib/lib.c now has names_to_pid().
xsetuid() was replaced with xsetuser() which takes a struct passwd
and sets both gid and uid, mkpathat() got factored out into a library command,
get_int_value() became atolx_range(), and
xmsprintf() is now just xmprintf(). The bunzip2 logic moved from lib into
bzcat.c.</p>

<p><b>Documentation</b>: new <a href=help.html>help page</a> with the
help text for all the defconfig commands, using the new help -ah output.
The <a href=code.html>source code walkthrough</a> now says more about
#including header files, and how the generated/* directory works. The
<a href=design.html>design page</a> has some new paragraphs about trading
of different kinds of simplicity, and why comments aren't a substitute for
good code. The README no longer trails off into obvious unfinished confusion
at the end. Each page on the website should now have its own title.</p>

<hr><b>November 18, 2013</b>
<blockquote><p>"Space," it says, "is big. Really big. You just won't believe how vastly, hugely, mindbogglingly big it is. I mean, you may think it's a long way down the street to the chemist's, but that's just peanuts to space." -
The Hitchhiker's Guide to the Galaxy.</p></blockquote>

<p><a href=downloads/toybox-0.4.7.tar.bz2>Toybox 0.4.7</a> is based on
<a href=http://landley.net/hg/toybox/shortlog/1122>commit 1122</a>.</p>

<p>New commands: Brad Conroy submitted blkid. Elie De Brauwer submitted
reboot, halt, and poweroff. Strake's nl got cleaned up and promoted from
pending to posix. In addition, the existing chvt and vconfig got some
cleanup.</p>

<p>That said, I haven't nearly kept up with the flood of new commands going
into pending: Ashwini Sharma's team submitted
dd, dumpleases, traceroute, top, useradd, groupadd, mkpasswd, tftpd, and
an fsck wrapper (with no filesystem drivers yet). Isaac Dunham sent in cpio.</p>

<p>Bugfixes: Jeroen van Rijn added a user count to uptime. Elie De Brauwer
added -e to watch, removed a memory leak, and fixed a terminal size problem.
William Haddon made xargs call its command line once even with blank input
(the standard is vague, but builds expect it), and fixed an off by one bug
where grep didn't malloc enough space with -E (leading to a segfault).
I fixed a glitch in bunzip2 (same one as went into busybox since they're using
the code I wrote), in od to fix -t co, -J, and -c options. Add uname -o as a
synonym for -s. Build fix to never use $CC without prefixing it with
$CROSS_COMPILE (since $HOSTCC could be different). Anca Emanuel spotted
a typo in the web page.</p>

<p>The compile-time command line option parsing got rewritten (ported from
bash to C), which should speed up builds a bit and allow code controlled by
--longopts to drop out properly when disabled in the configuration. Terminal
querying got refactored. Patch's -x option is now more informative (a
debug thing if you're trying to figure out why a patch didn't apply).
The "toynet.h" file got folded into toys.h since musl supports it and
micromanging uClibc options isn't very interesting anymore. The test suite
now uses scripts/single.sh when testing a single command.</p>

<hr><b>September 17, 2013</b>
<blockquote><p>"Think of a number," said the computer, "any number."
Arthur told the computer the telephone number of King's Cross railway
station passenger inquiries, on the grounds that it must have some function,
and this might turn out to be it. - The Hitchhiker's Guide to the Galaxy</p>
</blockquote>

<p><a href=downloads/toybox-0.4.6.tar.bz2>Toybox 0.4.6</a> is based on
<a href=http://landley.net/hg/toybox/shortlog/1068>commit 1068</a>.</p>

<p>This release adds
several new commands: Felix Janda wrote paste and fallocate, Kyungwan Han
submitted eject, Strake contributed grep, Ashwini Sharma added pmap (and
a testsuite entry for grep), Lukasz Skalski sent pwdx, Isaac Dunham posted
acpi, and I did timeout and umount.</p>

<p>The ls command now has a --color=auto option (suggested by Rich Felker).
The multiplexer now has a --help option so you can say "./toybox --help blah"
instead of using the built-in "help" command. (Which is a shell built-in.
Try it on your command line, it's like man for shell builtins. But a certain
other project has conditioned people to expect --help, so...) I forget who
heehooman at gmail is but they pointed out unshare needed PID and UID
namespace support.</p>

<h3>Pending</h3>

<p>A lot of new commands in toys/pending, to the point the next release should
probably just focus on cleanup and review of this backlog. We've got klogd,
dhcp, dhcpd, watch, route, and ps from
Ashwini Sharma (and an fsck wrapper but no fsck.fstype engines yet),
syslogd, pgrep, and pkill from Madhur Verma, netstat by Ranjan Kumar,
test by Felix Janda, lspci by Isaac Dunham, nl, su, and renice by strake (I.E.
M. Farkas-Dyck), and sysvinit by Kyungwan Han.</p>

<p>Some cleanup work on existing pending commands that aren't
ready to promote yet: I did a few more rounds on ifconfig
and Isaac Dunham's did several cleanups to xzcat, Felix Janda cleaned up
logger and syslogd...</p>

<p>Also some cleanup work on commands that predate the pending directory,
but weren't quite polished when they went in, most prominently du,
expand, and touch.</p> 

<h3>Infrastructure</h3>

<p>The new scripts/single.sh builds a standalone command without the
multiplexer, although not all commands can be built that way yet (NEWTOY yes,
OLDTOY no) and the space savings aren't anything to write home about. (If a
command needs the option parsing logic at all, it needs all of it.) If
you're curious, you can do:</p>

<blockquote><pre>
make defconfig
make
mkdir singles
for i in $(./toybox)
do
  echo $i
  PREFIX=singles/ scripts/single.sh $i || break
done
</pre>
<p>(And then wait a long time and watch almost half the builds fail.)</p>
</blockquote>

<p>There is now libbuf analogous to toybuf, another global 4k buffer this
time for use by lib/ code instead of command code.</p>

<p>The lib directory got split up a bit, lib/pending.c contains functions
not yet used by anything outside of toys/pending/*, and lib/xwrap.c contains
functions that wrap other functions and handle failures (via error_exit).
This leaves lib/lib.c containing actual new functions.</p>

<p>General improvements and bug fixes to argument parsing. The [-abc] exclude
logic should now clear arguments slots when disabling options. Bare --longopts
should work now and be able to report errors using their name, the new ;
option allows optional arguments to longopts only suppliable with = (I.E.
--color and --color=auto but not --color auto).</p>

<p>I'm gradually weaning the code off of itoa()/utoa() because sprintf
does this already. In this case "simple" probably means "let libc do it
for us".</p>

<p>Rewrote for_each_pid_with_name_in() and renamed it to just names_to_pid().
It shouldn't get confused trying to compare absolute and relative paths quite
so much anymore.</p>

<p>lib/llist.c grew a new dlist_pop() function for removing a doubly
linked list entry while maintaining a circular list; tail and patch are
using it now.</p>

<p>The musl guys suggested a new optimization flag
(-fno-asynchronous-unwind-tables)
that shaves about 10% off the binary size by removing a C++ism that crept
into gcc's idea of C. While I don't normally try to micromanage the compiler,
"-fstop-being-stupid" is a thing you have to hit gcc with from time to time.</p>

<h3>Bugfixes</h3>

<p>Felix Janda and I did a largeish rewrite of tail to
finally make it work right (we think). Still need to implement tail -f
someday (the tricky bit is making -f follow multiple files at once).
Felix also reported a bug in xpidfile.</p>

<p>Juhani Haverinen pointed out that
python 3 doesn't work with config2help.py, so the detection logic looks
for python2 (until I get around to rewriting that in C). Elie De Brauwer
then fixed our first attempt at this, and also fixed uname's help string.</p>

<p>Ashwini Sharma
pointed out the build was making a FLAG_ macro for " " which broke some
configurations. (That's a control character, not a command line option.)</p>

<p>Jacek Bukarewicz pointed out a bug in chdir permission handling, and
a way to make env segfault. Both should be fixed now.</p> 

<p>The new function xexec_optargs()
replaces calls to xexec(toys.optargs) to avoid freeing and reusing optargs
during option parsing screwing stuff up (such as netcat's exec mode).</p>

<p>The stat command's %a output was padded with leading zeroes, which
didn't match anybody else's behavior and thus made the test suite hiccup
between TEST_HOST and testing toybox. (If you go "TEST_HOST=1 scripts/test.sh
command" it sanity checks the tests against the host implementation.)</p>

<p>Last release, "mkdir sub/sub && chmod 007 sub/sub && rm -rf sub" didn't
delete sub and didn't exit with an error either. Neither was correct, rm
should now be fixed.</p>

<p>
<hr><b>July 26, 2013</b>
<p>Georgi Chorbadzhiyski maintains a <a href=https://github.com/gfto/toybox>git
mirror</a> of the repository on github, automatically updated from the
mercurial every 6 hours. The mirror is read only, but you can generate patches
against it and post them to the list.</p>

<hr><b>July 2, 2013</b>
<blockquote><p>"Time is an illusion. Lunchtime doubly so." "Very deep. You
should send that in to the Reader's Digest. They've got a page for people
like you." -
The Hitchhiker's Guide to the Galaxy.</p></blockquote>

<p><a href=downloads/toybox-0.4.5.tar.bz2>Toybox 0.4.5</a> is based on
<a href=http://landley.net/hg/toybox/shortlog/941>commit 941</a>. It adds
uuencode and uudecode from Erich Plondke, and enables Luis Morales' "who" by
default. Felix Janda and I cleaned up last year's "stat" submission and
enabled it. Ivo van Poorten added "groups".
Andre Renaud added "lsusb". I implemented "split", "pivot_root", and "mv".
</p>

<p>The "help" command is implemented differently now (lib/help.c) and
each command can now understand --help (including both "toybox --help"
and "toybox --help command" in the multiplexer).</p>

<p>The "pending" directory has several commands (find, xzcat, nbd-client,
logger, expr) which work but are not enabled by default pending further cleanup.
Ifconfig is enabled, but still in pending because it's only 2/3 cleaned up.
(It's an awkward halfway state but I'm not holding up the release for it.)</p>

<p>I'm <a href=cleanup.html>documenting the cleanups</a> to teach
more people to do it, but the writeups aren't caught up yet. The
<a href=roadmap.html>roadmap</a> also got updated a bit with further analysis
of other projects, and the README and about pages got updated.</p>

<p>Fixed _another_ "ls -C" segfault when terminal size can't be detected,
condensed the ls help text to fit on one page, implented --color, and taught
-l to print the major, minor numbers when showing block/char devices.
Argument parsing now handles "--" properly (to end option checking),
and the infrastructure can now handle bare --longopts that have no
corresponding short option (both were implemented before but didn't work).
Fixed an old bug in "patch", chmod grew -f, who grew -a. Isaac Dunham
fixed "-" vs "_" handling in modinfo, added a "firmware" output
field, added -b and -k support, and taught it that the ".ko" extension means
to look for the file at the specified path instead of under /lib. Felix Janda
moved file permission display code to lib so ls and
stat could share it. Ashwini Sharma spotted a bug in xabspath when the
last path component exists but we haven't got permissions to open it
(ala readlink -f /dev/sda as a normal user).
</p>

<p>In the build infrastructure, scripts/findglobals.sh finds leaked global
variables. (Leaked means they aren't part of the global union: Other than glibc
debris, toybox should define "this", "toy_list", "toybuf", and "toys", and
that's it; the rest add memory footprint to every command for the benefit of
just one command; use GLOBALS() to stick 'em in the union.) Static linking
against libraries other than the host's libc now applies to feature probes
for unshare and such. Neuter stupid internationalization support that makes
various host "sort" commands put things in an order other than alphabetical
(breaking the multiplexer's binary search on command names).

<p>You should now be able to build from a source control snapshot on a build
system that hasn't got python: if you disable CONFIG_TOYBOX_HELP. (The
release tarballs ship generated/help.h, but it's not in source control.
Eventually I should rewrite that python script in C.)</p>
</p>

<p><b>LICENSE TWEAK</b>: After <a href=http://lists.landley.net/pipermail/toybox-landley.net/2013-March/000794.html>discussion</a> on the mailing list the "2 clause
BSD" <a href=license.html>license</a> got slightly simplified so the first
paragraph now says:</p>

<blockquote><p>Permission to use, copy, modify, and/or distribute this
software for any purpose with or without fee is hereby granted.</p></blockquote>

<p>It used to continue "provided that the above copyright notice and this
permission notice appear in all copies", but A) what's the point? B) does "all
copies" mean binaries, or just source code, or what? C) lots of projects
that consider BSD and GPL compatible have <a href=https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/crypto/aes_generic.c>files with
both license notices</a> on them (sometimes at <a href=http://git.busybox.net/busybox/tree/shell/ash.c>opposite ends of the file</a> to make the conflict
less obvious) because "all copies must include this function" would violate
the GPL but "all copies must include this magic text blob" somehow don't?</p>

<p>I don't want to have to care about this anymore. The tweaked version is more
or less public domain with a liability disclaimer, but we're still calling it
BSD (sometimes "0 clause BSD") to avoid explaining.</p>

<hr><b>March 21, 2013</b>
<p>Video of my ELC talk
"<a href=http://youtu.be/SGmtP5Lg_t0>Why is Toybox?</a>"
is up on youtube. Related materials include the
<a href=http://landley.net/talks/celf-2013.txt>talk outline</a> and an
<a href=/aboriginal/about.html#selfhost>android self-hosting writeup</a>.</p>

<p>[Updated June 4] The following links jump to specific topics in the video. (Sorry about
the ads, it's The Linux Foundation.)</p>

<ul>
<li>0m29s <a href=http://www.youtube.com/watch?v=SGmtP5Lg_t0#t=0m29s>The smartphone is replacing the PC</a></li>
  <ul>
  <li>4m22s <a href=http://www.youtube.com/watch?v=SGmtP5Lg_t0#t=4m22s>Software needed to become self-hosting</a></li>
  <li>6m20s <a href=http://www.youtube.com/watch?v=SGmtP5Lg_t0#t=6m20s>Do we care if android or iphone wins?</a></li>
  </ul>
<li>9m45s <a href=http://www.youtube.com/watch?v=SGmtP5Lg_t0#t=9m45s>Android not vanilla: oppose or accept?</a></li>
  <ul>
  <li>11m30s <a href=http://www.youtube.com/watch?v=SGmtP5Lg_t0#t=11m30s>Open source can't do User Interfaces</a></li>
  </ul>
<li>15m09s <a href=http://www.youtube.com/watch?v=SGmtP5Lg_t0#t=15m09s>Android is not copyleft: oppose or accept?</a></li>
<li>18m23s <a href=http://www.youtube.com/watch?v=SGmtP5Lg_t0#t=18m23s>Security issues</a></li>
<li>21m15s <a href=http://www.youtube.com/watch?v=SGmtP5Lg_t0#t=21m15s>Solutions to the software problems</a></li>
  <ul>
  <li>22m55s <a href=http://www.youtube.com/watch?v=SGmtP5Lg_t0#t=22m55s>What toybox needs to be/do</a></li>
  <li>28m17s <a href=http://www.youtube.com/watch?v=SGmtP5Lg_t0#t=28m17s>What is toybox?</a></li>
    <ul>
    <li>28m58s <a href=http://www.youtube.com/watch?v=SGmtP5Lg_t0#t=28m58s>Why toybox started...</a></li>
    <li>37m50s <a href=http://www.youtube.com/watch?v=SGmtP5Lg_t0#t=37m50s>What does toybox actually implement?</a></li>
    </ul>
  </ul>
</ul>
</span>


<hr><b>March 14, 2013</b>
<blockquote><p>"Ford, you're turning into a penguin. Stop it." -
The Hitchhiker's Guide to the Galaxy.</p></blockquote>

<p><a href=downloads/toybox-0.4.4.tar.bz2>Toybox 0.4.4</a> is based on
<a href=http://landley.net/hg/toybox/shortlog/813>commit 813</a>, adding
the "time" and "readahead" commands, plus some bugfixes.</p>

<p>The "cp" command now implements the -s symlink option, plus bugfixes
getting various corner cases right as used in actual package builds.
"id -Gn root" should now print root's groups
instead of the current user's. Several build fixes so toybox builds under
Ubuntu 8.04 again (which is about as old a build environment as you
can expect to find posix-2008 features in).</p>

<p>Unfinished commands have generally been moved to "toys/pending".
Everything else should "default y" to participate in make defconfig.
Several of those pending commands got some basic cleanup so allyesconfig
should at least compile (although defconfig is still what's useful).</p>

<p>Significant roadmap updates, checking several other multicall binaries
(klibc, sash, sbase, s6...) to see what commands they include.</p>

<hr><b>January 18, 2013</b>
<blockquote><p>This must be Thursday. I never could get the hang of Thursdays. - The Hitchhiker's Guide to the Galaxy.</p></blockquote>

<p><a href=downloads/toybox-0.4.3.tar.bz2>Toybox 0.4.3</a> is based on
<a href=http://landley.net/hg/toybox/shortlog/793>commit 793</a>. There
are now exactly 100 commands in defconfig (of a little over 220 on the
<a href=roadmap.html>todo list</a>).</p>

<p>Elie De Brauwer added the rev command, cleaned up tac, implemented the -s
and -f flags for seq, added -v and -i to killall (and fixed killall not to
kill itself before finishing its pid list), and added to the test suite.
Felix Janda added -m to mkdir, pwd -L and -P, and more test suite entries.</p>

<p>Rob Landley added the losetup command, and fixed the existing ls, cp, and
readlink commands. The segfault in ls
happened when it couldn't determine the screen size (last release changed the
default to -C and a screen size of 0 made column view unhappy), and cp got an
extensive rewrite bringing it up to date with the dirtree changes and fixing
a number of things it never did right in the first place. The xabspath()
code in the library now handles a symlink after ".." properly (and the test
suite checks for it).</p>

<p>Infrastructure-wise the code is better about automatically setting the
error return code properly. Now error_msg() sets the exit code to 1 if it's
still defaulting to 0, and the global exit path does a fflush(NULL) with error
bit check rather than trying to be quite so granular about flushing. (That
means if we use printf() instead of xprintf() it still exits with the right
error code, it just doesn't end the program early on an output error.)
Minor bugfix so TOYBOX_DEBUG
doesn't always warn about the lack of suid bit when toybox is built with
at least one STAYROOT command. Bugfix for the option [grouping] logic
(and then further fixes to the error reporting pointed out by Ashwini Sharma).
dirtree_handle_callback() now has a prefix like the rest of the dirtree
functions. A lot of stuff doing manual path handling was switched to using
libc basename() (including, embarassingly, the basename command), which means
it now correctly detects "/trailing/slash/" which the previous code didn't.</p>

<p>Also, last release included some accidentally checked in debug code that
disabled compiler optimization, so the binary size bloated a bit. It's back
to -Os by default now.</p>

<hr><b>December 15, 2012</b>
<blockquote><p>"The major difference between a thing that might go wrong and a
thing that cannot possibly go wrong is that when a thing that cannot possibly
go wrong goes wrong it usually turns out to be impossible to get at or repair."
</p><p>- The Hitchhiker's Guide to the Galaxy.</p></blockquote>

<p><a href=downloads/toybox-0.4.2.tar.bz2>Toybox 0.4.2</a> is based on
<a href=http://landley.net/hg/toybox/shortlog/749>commit 749</a> and is
just a resync. Linux 3.7 came out, meaning it's time to do an Aboriginal
Linux release, and that should use a stable version of toybox. So here's
a new stable version.</p>

<p>The new commands are cut (from Jason Kyungwan Han), touch
(from Choubey Ji), expand (from Jonathan Clairembault, and he fixed a
bug in login), and rm (from Rob Landley). Felix Janda added UTF-8
support infrastructure (for non-ascii character sets) with a config option.
Elie De Brauwer added tests for cat and sha1sum, and -so options to pidof.
The "ls" command defaults to -C (column view) now, and "readlink" now supports
-fenq.</p>

<p>Portability work: toybox should now build against the musl C library,
and against older glibc versions (circa 2008, much before that and kernel
features we depend on start to drop out).</p>

<p>The whole codebase got reindented from "one tab" to "two spaces" per
level. The option parsing logic now understands [groups] of commands (when more
than one in a group is selected it can switch the others off, or error out,
or other things). The error_exit() infrastructure can now longjmp back to an
earlier point instead of exiting. Each toys/* directory now has a README,
the first line of which is the fancy name menuconfig uses for the directory
(so no more hardwired directory list in scripts/genconfig.sh).</p>

<p>Fixed a filehandle leak in getmountlist().
Pass parent pointer to dirtree_add_node() so it can give error messages with
full path. The yesno() function now always reads from stdin and writes to
stderr (we can retry tty checking complexity once we've got commands needing
it).</p>

<p>The open group broke their website so the
<a href=http://opengroup.org/onlinepubs/9699919799>old links</a> to POSIX 2008
now <a href=http://pubs.opengroup.org/onlinepubs/9699919799>need to start with
pubs</a>. Some of the links in the tree have been updated, others haven't while
I wait to see if their webmaster notices and fixes it.</p>

<p>(I note that the current rm implementation is not technically posix compliant
because the standard requires infinite recursion depth and the current
implementation uses one filehandle per level. I can add a config option
to do it Posix's way, which is more brittle and needs extra security checks,
but am waiting for somebody to complain first. The default "ulimit -n" is 1024
filehandles, so drilling down over 1000 nested subdirectories).</p>

<hr><b>November 13, 2012</b>
<blockquote><p>"Rule Six: The winning team shall be the first team that wins."
- The Hitchhiker's Guide to the Galaxy.</p></blockquote>

<p><a href=downloads/toybox-0.4.1.tar.bz2>Toybox 0.4.1</a> is based on
<a href=http://landley.net/hg/toybox/shortlog/691>commit 691</a>.</p>

<p>Elie De Brauwer contributed usleep, Ashwini Kumar contributed du, and
Kyungwan Han contributed vconfig. Other new commands include switch_root and
md5sum, and the remaining shell wrappers are now proper commands (dos2unix,
unix2dos).</p>

<p>The patch command now supports -l, and gethostname is now enabled by
default. The df command follows symlinks to get the actual device name.
Felix Janda added -m support to wc (for utf8).</p>

<p>On the infrastructure side, the commands have now been grouped into
"posix", "lsb", and "other" subdirectories (for things required by Posix-2008,
the Linux Standard Base 4.1, and commands in neither). This affects menuconfig
and the actual source layout (toys/cp.c is now toys/posix/cp.c, and so on).
An android directory is planned (see the updated
<a href=roadmap.html#android>android roadmap analysis</a>).</p>

<p>The FLAG_ macros for command option parsing and TT alias for the command's
global block are now automatically generated, commands should
#define FOR_commandname before #including <toys.h> to get the macros for that
command.</p>

<p>An upgrade to the build infrastructure now allows commands with _ and -
in them, such as switch_root.</p>

<p>Bugfixes: Avery Pennarun spotted a case where ls showed uid twice instead of
uid and gid, and that nice was using the wrong range of numbers.
The ls command also recursed inappropriately last time (not quite
properly converted for the dirtree changes last release), and now it's
fixed. Roy Tam pointed out a glitch in sh, and fixed df's percentage
calculation to match the POSIX spec. The kernel build didn't like our mktemp
and it does now. The wc command wasn't quite posix compliant (trailing spaces
break stuff). The ls command recursed inappropriately last time (not quite
properly converted for the dirtree changes last release), and now it's
fixed. The catv command wasn't displaying byte 255 correctly. Some lib
fixes (thinko in xpidfile). Fixed uname -m when running a 32 bit x86 binary
on an x86-64 host (it lies and says the system is i686, i586, or i486 depending
on what the toolchain that built the binary supported. This makes builds in
a 32 bit chroot on a 64 bit kernel break less.) The df command was checking
partitions in the wrong order (displaying undermounts instead of overmounts:
this used to work but some library code changed out from under it and it
wasn't updated to match until now). Felix Janda filled out the test suite
some more. The patch file creation logic got tweaked several times to
successfully apply more patches. Support for older (pre 2.10) glibc
versions was added to portability.h.</p>

<p>Miscelaneous cleanups all around (mknod, sha1sum, logname), including a
rewrite of taskset to be less dependent on libc getting the headers right. All
the command headers should now point to the current relevant standards
document, where applicable.</p>

<p>This news page had old news entries from before the relaunch moved into
a separate <a href=oldnews.html>oldnews</a> page.</p>

<p>I forgot to create <a href=bin>static binaries</a> last time, but they're
back now.</p>
</span>

<hr><b>July 23, 2012</b>
<blockquote><p>"Ford", Arthur said. "There's an infinite number of monkeys
out here who want to talk to us about this script for Hamlet they've worked
out." - The Hitchhiker's Guide to the Galaxy.</p></blockquote>

<p><a href=downloads/toybox-0.4.0.tar.bz2>Toybox 0.4.0</a> is based on
<a href=http://landley.net/hg/toybox/shortlog/640>commit 640</a>.</p>

<p>The new <a href=status.html>status page</a> is calculated from
the roadmap info, and should be easier to keep up to date in future.</p>

<p>Andre Renaud contributed od and modinfo. Elie De Brauwer contributed
taskset, bugfixes to cmp and tail, and tests for sort and tail. Kyungwan Han
contributed passwd. Gaurang Shastri contributed w. Ashwini Sharma spotted a
case where dirtree was adding extra slashes to a path.</p>

<p>I rewrote od, cleaned up comm, documented the
<a href=code.html#lib_llist>llist</a> and
<a href=code.html#lib_dirtree>dirtree</a> infrastructure, added an -r option
to date (and fixed a bug where -u wouldn't override /etc/localtime),
fixed bugs in chmod +stw, fixed ls to show suid bits properly when the
corresponding executable bit wasn't set, and worked around a longstanding
glibc bug where static linking prevents stdout from automatically flushing
pending output on exit.</p>

<hr><b>June 25, 2012</b>
<blockquote><p>"For a moment, nothing happened. Then, after a second or so, nothing continued to happen." - The Hitchhiker's Guide to the Galaxy.</p></blockquote>

<p><a href=downloads/toybox-0.3.1.tar.bz2>Toybox 0.3.1</a> is based on commit
<a href=http://landley.net/hg/toybox/shortlog/607>commit 607</a>. It's
mostly a bugfix release for ls -l (which was unhappy on targets other than
x86-64), plus a new "date" from Andre Renaud and rewritten chgrp/chown which
now support the full set of posix flags, plus a little work on the test
suite and some more header tweaks towards eventual compatability with the
musl libc.</p>

<p>The todo list runneth over, but "release early, release often", so here
it is. The roadmap and documentation are a bit behind, and I've got ~40
pending submissions to review. I need to catch up...</p>
</span>

<hr><b>June 12, 2012</b>
<blockquote><p>"For instance, on the planet Earth, man had always assumed that
he was more intelligent than dolphins because he had achieved so much - the
wheel, New York, wars and so on - whilst all the dolphins had ever done was
muck about in the water having a good time. But conversely, the dolphins had
always believed that they were far more intelligent than man - for precisely
the same reasons." - The Hitchhiker's Guide to the Galaxy.</p></blockquote>

<p>It's well past time for <a href=downloads/toybox-0.3.0.tar.bz2>toybox 0.3.0</a>,
so here it is, based
on <a href=http://landley.net/hg/toybox/shortlog/595>commit 595</a>, and the
statically linked <a href=downloads/binaries>prebuilt binaries</a> should
actually be statically linked this time (thanks Ashwini Sharma for spotting
that).</p>

<p>It's hard to figure out where to cut a release, because development
doesn't stop. "Long before now" is the obviuos answer, of course.
The project's maintainer also moved house during this development cycle, which
threw things off for a bit (so many boxes). Releases should hopefully be a bit
more frequent from here on.</p>

<p>The big things Rob worked on this time were the new dirtree (directory
tree traversal) infrastructure, and a complete rewrite of ls using that
which should now implement all 26 posix options.</p>

<p>Georgi Chorbadzhiyski added printenv, whoami, mkdir, mkfifo, chmod, chown,
chgrp, and uniq. He also added fraction and extension support to sleep (so if
you need a quarter-second sleep, it can do that now), and fixed a build bug
on slackware.</p>

<p>Daniel Walter contributed a string to mode_t parser (in use by chmod and
mkdir -m).  Ilya Kuzmich contributed comm. Elie De Brauwer added mountpoint,
vmstat, logname, login, and mktemp. Kevin Chase did some portability cleanups.
Pere Orga fixed some documentation.</p>

<p>The "tac" and "clear" commands are now normal commands instead of shell
wrappers, and the header #includes have been cleaned up a bit to remove
deprecated functions and attempt to increase compatability with the bionic and
musl C libraries, "tail" should now use lseek() for large files, and "id" got
some cleanups and bugfixes.</p>

<p>The new TOYBOX_FLOAT configuration option selects whether or not
to include floating point support (for embedded targets where that's
problematic).</p>

<p>Several random bugfixes: unshare() might actually build portably now,
yes 'n' | cp -i should no longer bypass stdin and prompt via the tty, the
SUID support no longer drops permissions going through the toybox
multiplexer command, and a bugfix to xargs -0 means it should no longer
segfault. (I have a pending bug report about xargs not doing the full
posix whitespace handling that -0 obsoleted, but I'll deal with that next
release.)</p>

<p>The build infrastructure is now automatically generating FLAG_ macros
for the options, but currently with the wrong names. Some more macro glue
is necessary, which I haven't quite figured out how to do yet.</p>

<p>A defconfig toybox at the start of the $PATH has successfully built
Linux From Scratch (in my Aboriginal Linux project). The commands that
'default n' in the config are often still broken, cleanup is ongoing.
(The new dirtree stuff broke several of them that haven't been converted
yet, but if I wait until everything works we won't have a release before
1.0, so here's a checkpoint.)</p>


<hr><b>March 3, 2012</b>

<blockquote><p>"They went unnoticed at Goonhilly, passed over Cape Canaveral
without a blip, and Woomera and Jodrell Bank looked straight through them.
Which was a pity, because it was exactly the sort of thing they'd been looking
for all these years."</p></p>- The Hitchhiker's Guide to the Galaxy.</p>
</p></blockquote>

<p>Here's <a href=downloads/toybox-0.2.1.tar.bz2>toybox 0.2.1</a> based
on <a href=http://landley.net/hg/toybox/shortlog/512>commit 512</a>.  This
time around, there are statically linked <a href=downloads/binaries>prebuilt
binaries</a> for various embedded targets.</p>

<p>It's been a busy few weeks, almost entirely due to new contributors. (I
have not quite been keeping up.)</p>

<p>Elie De Brauwer contributed free, uptime, swapon, swapoff, lsmod, mknod,
insmod, rmmod, and fixed a bug in basename.  Andre Renaud contributed ls, ln,
realpath, and hostname. Andres Heck contributed pidof and killall.  Daniel
Walter wrote kill and extended id. Timothy Elliott contributed tail and tests
for cmp. Frank Bergmann sent a warning fix. Bryce Fricke added -i to cp.
Nathan McSween pointed out an optimization. Georgi Chorbadzhiyski fixed
cross compiling to work more reliably.</p>

<p>(My own contribution this time around was just tightening up other people's
code, a build fix to unshare, some random bugfixes, and so on. My only new
code this time around was writing a bash replacement for the existing python
bloat-o-meter.)</p>

<p>Last time (the 0.2.0 release) included the first pass at an id command from
Tim Bird, env and basename from Tryn Mirell, cmp and head from Timothy Elliott,
more bugfixes from Nathan McSween and Elie De Brauwer, and Luis Felipe Strano
Moraes did a first pass at the who command plus other bugfixes and
optimizations.</p>

<p>(For that release I did xargs, cal, truncate, unlink, nohup, tty, wc, link,
dirname, unshare, and various infrastructure tweaks, but it took me 3 months
and those guys did their stuff in a week or so.)</p>


<hr><b>February 12, 2012</b>
<blockquote><p>
"for though it has many omissions and contains much that is apocryphal, or at
least wildly inaccurate, it scores over the older, more pedestrian work in two
important respects..."</p>
<p> - The Hitchhiker's Guide to the Galaxy</p></blockquote>

<p>Here's the first BSD licensed release,
<a href=downloads/toybox-0.2.0.tar.bz2>toybox-0.2.0</a>, more a synchronization
point than anything particularly useful.  47 commands in a reasonably
ready-to-use state (what "make defconfig" builds), another ten or so partially
finished stubs ("make allyesconfig"), and several
patches pending on the mailing list I need to review and merge.</p>

<p>More to come...</p>

<hr>
<p><b>November 15, 2011</b> - Back from the dead, Toybox is now under a 2
clause BSD license, and aiming to become the default command line
implementation of Android systems everywhere.</p>

<p>More to come...</p>

<hr>

<p><a href=oldnews.html>Old news</a> from before the relaunch.</p>

<!--#include file="footer.html" -->
