<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>

<a name="02-02-2016" /><a href="#02-02-2016"><hr><h2><b>February 2, 2016</b></h2></a>
<blockquote><p>"I checked it very thoroughly," said the computer, "and that
quite definitely is the answer. I think the problem, to be quite honest with
you, is that you've never actually known what the question is."
- The Hitchhiker's Guide to the Galaxy.</p></blockquote>

<p><a href=downloads/toybox-0.7.0.tar.gz>Toybox 0.7.0</a>
(<a href=https://github.com/landley/toybox/releases/tag/0.7.0>git commit</a>)
is out.</p>

<p>The new commands in defconfig are <b>iotop</b>, <b>top</b>, <b>pgrep</b>,
and <b>pkill</b>
(most replacing corresponding versions from pending). Added grep -ABC,
swapon -d (discard), mkswap -L (label) and UUID support, and find -delete.
Izabera added free -h and unshare -f. Josh Gao implemented tail -f.
Jose Bollo submitted cp --preserve=context,attr. Kylie McClain added
mktemp -u.</p>

<p>In pending there's the start of a vi command, and Sameer Pradhan contributed
a new dhcp6. This cycle saw several rounds of route cleanup and a little dhcp
cleanup, but neither are complete yet. Lipi Lee did some cleanup to netstat.c
and Elliott Hughes removed warnings from traceroute.</p>

<p>Lots of updates to ps: several new -o options, -k (--sort) -O and -M,
improved compatibility with Android's historical behavior, and
extensive internal code cleanup (including the removal of all
the magic constants).</p>

<h3><b>Website</b></h3>

<p>Dreamhost restored the <a href="#12-21-2015">missing 11 months</a>
to the mailing list archive, in the process deleting the month after
that. Now they've asked if I have mbox files archiving the new
gap (between December 20, 2015 to January 21, 2016, and presumably they
could also fill in the gap from December 14, 2014 to January 3, 2015 that's
been there since the last time they did this),
but due to some gmail filtering I've
<a href=http://landley.net/notes-2012.html#15-10-2012>never
been able to disable</a>, my copy of those files is spread among 3 different
mbox files I'd have to sort/filter/collate. (It's on the todo list.)</p>

<p>Added a code of conduct to the README (we're
<a href=https://engineering.twitter.com/opensource/code-of-conduct>borrowing twitter's</a>) because somebody
made it necessary.</p>

<h3><b>Bugfixes</b></h3>
<p>Fixed another sed bug where any ] right after [ was skipped (not just the
first one in the range, so [[] didn't terminate). Fixed sort -f and added test cases.
Assume 80 columns in "ls -m | cat", ls -L is no longer backwards,
and ls of files with no paths no longer uses an uninitialized (zero) dirfd.
Several bugfixes
to find (Gilad Arnold fixed -perm, Daniel K. Levy fixed "find . -exec echo {}",
and while we're there I fixed find --prune, made "find . -execdir
echo {} + -execdir ls {} +" work, and ripped out the environment size
measuring code that checked for a 128k limit removed back in linux 2.6.22).
Elliott Hughes fixed the date command's parsing of 4 digit
years and documented the %s escape, fixed hwclock -u, and pointed out
that runcon needs to exec to do its job (not recursively call another
command_main() in the same process). Tom Marshall reported that blkid was
handling ext2 wrong. Mike Moreton corrected cpio extraction's uid and gid
values, and added a --no-preserve-owner option. Fixed the SUID permission
dropping logic (which was a bit over-zealous, preventing some commands from
running at all).</p>

<p>I'm told that debian-testing broke its libc so the nsenter build breaks,
but my attempts to install the debian-testing network cd image under
qemu keep breaking. Maybe someday they'll fix it enough I can actually
reproduce the problem. (Debootstrap under unbuntu builds an ubuntu-flavored
chroot in which toybox builds fine.)</p>

<h3><b>Documentation</b></h3>
<p>Rewrite of the about.html page, tweaks to design.html, and a re-triage of
sbase in roadmap.html. Update to mkstatus.py to collate multiple span
tags with the same id, resulting in a larger status.html page (which
was previously ignoring some commands in the roadmap).</p>

<p>Expanded the defconfig/allyesconfig/allnoconfighelp text in "make help"
to explain what they're for.</p>

<h3><b>infrastructure</b></h3>
<ul>
<li><p>Expanded toys.optargs to 64 bits so a command can have more than 32 options.</p></li>
<li><p>Added NOEXIT() wrapper to turn xwrap() functions into warning versions
using the existing longjump(toys.rebound) infrastructure.</p></li>
<li><p>Renamed dirtree->data to dirfd and stopped storing symlink length
into it (this fixed a bug where following symlinks to directories
didn't give a valid directory filehandle, noticeable with ls -Z).</p></li>
<li><p>New TAGGED_ARRAY() infrastructure generates index and bitmask macros
for arrays of structures starting with a name string.</p></li>
<li><p>New lib/linestack.c for utf8 fontmetrics (draw_str() and utf8len()
and so on), and for tracking multiple lines of text
(vi, less, shell history) that need wordwrapping and scrolling up/down.</p></li>
<li><p>Upgrades to lib/interestingtimes.c: scan_key() now has a timeout
in miliseconds and recognizes more sequences including ANSI
window size probes. New utf8 test files in tests/files/utf8 including
sequence reversing, stacked combining chars, and all three types of
unprintable sequences (low ascii <32 ala ^X, invalid utf8 sequences ala
<AB><CD>, and invalid unicode code points ala U+1234).</p></li>
<li><p>More comma handling code in lib.c: comma_args()</p></li>
<li><p>Added error_msg_raw() to shut up fortify's endless static checking false
positives.</p></li>
<li><p>readfileat() can now realloc() in a loop to read long files
("zcat | insmod" needed it).</p></li>
</ul>

<h3><b>Roadmap</b></h3>
<p>We're getting close to having a self-hosting development environment
using toybox for the command line. The remaining busybox commands in
<a href=http://landley.net/aboriginal/about.html>Aboriginal Linux</a> are:</p>

<blockquote><p><b>
awk bunzip2 bzcat bzip2 dd diff expr fdisk ftpd ftpget ftpput gunzip gzip
less ping route sh sha512sum tar test tr unxz vi wget xzcat zcat
</b></p></blockquote>

<p>And the remaining non-busybox commands in Aboriginal Linux's build/host
directory (from the distcc, genext2fs, e2fsprogs, zlib, and squashfs packagesi)
are:</p>

<blockquote><p><b>
mke2fs fsck.ext2 resize2fs distcc genext2fs unsquashfs distccd mksquashfs tune2fs
</b></p></blockquote>

<p>Squashfs and distcc are probably out of scope for toybox, but mke2fs,
fsck.ext2, resize2fs, genext2fs, and tune2fs should all be added to the
above "busybox" replacement list.</p>

<p>Remind me to include this countdown in future releases. Once they've all
been replaced, the next goal is <a href=http://landley.net/aboriginal/about.html#selfhost>building AOSP under itself</a>.</p>

<p>See the full <a href=roadmap.html>roadmap</a> and <a href=status.html>status</a>
pages for more details.</p>

<a name="12-21-2015" /><a href="#12-21-2015"><hr><h2><b>December 21, 2015</b></h2></a>

<p>Yes, 11 months have gone missing from the mailing list web archive.</p>

<p>Yesterday evening Dreamhost's mailman server went down (timing out trying
to connect). I poked them about it, they
<a href=https://twitter.com/landley/status/678781271670149121>blamed
DNS</a>, I explained that the hang was _after_ the DNS lookup and
entered the dig info into the trouble ticket showing the IPs the DNS
queries were returning, they reinstalled the server at that IP from what I
assume was their most recent backup, and that's how 11 months of messages
vanished out of the archive.</p>

<p>I've <a href=https://twitter.com/landley/status/679114451975467008>continued to poke them about it</a> but I honestly believe that's the best they
can do. <a href=http://landley.net/dreamhost.txt>Last time</a>
this sort of thing <a href=http://landley.net/dreamhost2.txt>happened</a>
we went back and forth for months, so I added a link to a backup web
archive (in the nav bar on the left) that isn't controlled by dreamhost,
and thus doesn't gratuitously lose data on a regular basis. (I note
the earlier hole in Dreamhost's archive was never fixed either. That
was data never getting archived, this is a year's worth of data that
was in the archive until yesterday vanishing after the fact.)</p>

<p>If you're wondering why the <a href=http://lists.landley.net>top level</a>
list page has been "temporarily disabled" for multiple years now... you'd have
to ask Dreamhost. I know I have. More than a dozen times.</p>

<a name="03-11-2015" /><a href="#03-11-2015"><hr><h2><b>November 3, 2015</b></h2></a>
<blockquote><p>"Alright," said Ford. "How would you react if I said that I'm
not from Guildford after all, but from a small planet somewhere in the vicinity
of Betelgeuse?" Arthur shrugged in a so-so sort of way. "I don't know," he
said, taking a pull of beer. "Why - do you think it's the sort of thing you're
likely to say?" - The Hitchhiker's Guide to the Galaxy.</p></blockquote>

<p><a href=downloads/toybox-0.6.1.tar.gz>Toybox 0.6.1</a>
(<a href=https://github.com/landley/toybox/releases/tag/0.6.1>git commit</a>)
is out.</p>

<p>We have a new <b>ps</b> command with all the -o fields posix wants (although
it doesn't accept BSD non-dash option syntax yet), and <b>bunzip2</b> (not just
bzcat but the proper extract-in-place command).
Sameer Pradhan added <b>hostid</b> and <b>fsync</b>.
Elliott Hughes added <b>flock</b>.

<p>The people waiting for <b>human readable number support</b> (du -hH, ls -h,
and so on) can thank Elliott Hughes for implementing it. (Our output doesn't
exactly match others' because we our "binary" mode will say 1.0G instead of
1024M, which is a bug in the other one we didn't emulate.)</p>

<p>The other big news is <b>nommu support</b>, tested on the new
<a href=http://nommu.org/jcore>jcore</a> processor but presumaby working
on any nommu system. A few commands don't support nommu yet, but those
are disabled by dependencies on TOYBOX_FORK in menuconfig when building
for nommu. The roadmap now has a large section analyzing the uClinux
project (note that <a href=http://nommu.org>nommu.org</a> is slowly replacing
<a href=http://uclinux.org>uclinux.org</a> as the standard repository of
all knowledge and wisdom about nommu. The old site <a href=#12-02-2012>contains
much that is apocryphal</a>, or at least wildly inaccurate, and the new one
is trying to improve on that).</p>

<p>Both "make change" and scripts/single.sh (for building standalone commands
without the multiplexer logic) now use the top level .config
for toybox global settings such as Linux Security Blanket Module selection,
(so make defconfig before change now).</p>

<p>Documentation updates to the <a href=code.html>code</a> and
<a href=roadmap.html>roadmap</a> pages.</p>

<h3>pending</h3>

<p>In the pending directory Sameer Pradhan added tftp,
and Elliott Hughes sent lsof. Isaac Dunham upgraded mdev,
reboot, init, login, and modprobe, and fixed a distro-specific build break in
scripts/mkflags.h. Elliott Hughes and Lipi Lee made netstat -p handle
command lines longer than 21 characters, and Elliott fixed netstat -e and
some build warnings. Yeongdeok Suh fixed a warning in dhcpd.
I started cleanup on pgrep/pkill.</p>

<h3>Command updates, bugfixes, and infrastructure</h3>

<p>The multiplexer's "command not found" error exit is now 127, so now you can't
distinguish between a command not being found in the multiplexer and
the multiplexer itself not being found by the shell, because people wanted
that for some reason.</p>

<p>Elliott Hughes made date reject invalid dates rather
than set the clock to something weird (setting the clock 100 years into the
future makes most Linux desktops surprisingly unhappy, and ntpdate won't fix it
either), fixed several ls -l display issues (user/group field ordering,
make user/group/lsmcontext left aligned), did the aforementioned
extensive work on human readable number output, fixed ionice's default
class, fixed a mv overwrite bug, made df's columns auto-size, added
--ppid and -Z to ps, and teamed up with Daniel K. Levy to fix
a segfault in find's handling of -newer -group or -user.</p>

<p>Hyejin Kim added stat -c %T support. Colin Cross worked
on vmstat fixing
a header printing bug and calculating the bi and bo columns in the right
units. Isabella Parakiss reported that sed -e "/x/c\" -e "y" added an extra
newline and that grep -w '\(x\)\1' didn't work, both now fixed.
Alistair Strachan fixed several problems with switch_root. Kylie McClain
pointed out env should be able to clear variables via NAME= syntax.
Dima Krasner added support for running blkid without a partition (so it shows
all partitions). Hyejin Kim sent in a bunch of static analysis bug reports.</p>

<p>Isabella Parakiss reported that sed -e "/x/c\" -e "y" added an extra
newline and that grep -w '\(x\)\1' didn't work, both now fixed.
Alistair Strachan fixed several problems with switch_root. Kylie McClain
pointed out env should be able to clear variables via NAME= syntax.
Dima Krasner added support for running blkid without a partition (so it shows
all partitions). Hyejin Kim sent in a bunch of static analysis bug reports.</p>

<p>Two large thinko fixes in oneit: -3 was always enabled (which would
eventually block if the child never read the exiting PID numbers from its file
descriptor #3 until the pipe filled up), and the signal handlers weren't
set up right (for requesting semi-graceful halt/poweroff/reboot).
Calling install without a mode is now 0755, and install -g 0 no longer clashes
with cp --preserve. Better error message for ls -r on unreadable
directories, and ls -Z now uses O_PATH (with the /proc/self/fd/%d
workaround for kernel stupidity as necessary).</p>

<p>Date now understands @unixtime[.fraction] and uses -D for
the set-side format (matching busybox's extension for this). The seq -f
string now checks that it's got exactly one %f escape with the correct
attributes (and a whole bunch of test cases for it). Fixed a bug
in od that screwed up the position indicator on arm and mips.
In stat the d/h units moved from %d %D to the default string.
And patch can now correctly apply hunks with trailing context to the start of
the file.</p>

<p>The prompt argument moved out of yesno() (the caller can print the prompt
themselves). Replaced toys.exithelp with help_exit(). Added new
XVFORK() macro, and xpopen_both() calls /proc/self/exe when passed
a NULL argv (see cpio -p for example usage). Replaced toys.recurse
with toys.stacktop so the recurse or re-exec decision is now based
on bytes of stack space used. Marked a bunch of command-local functions
static.</p>

<p>New additions to lib/ include strlower(), xconnect(), and the
aforementioned help_exit().
The testsuite now has some infrastructure tests based on "example"
commands such as toys/examples/test_human_readable.c.
The login command finally got a long-overdue cleanup (it's one of the
commands that predate the "pending" directory but were part of the reason
for it). Hexedit had an
uninitialized variable (of course gcc didn't spot it, it was too busy
warning about "may be used uninitialized but never actually is" variables).</p>

<p>Tweaked makefile so
"make CROSS_COMPILE=prefix-" (as well as "CROSS_COMPILE=prefix- make",
which still works). Toybox is now installed chmod -w so broken installers
(like the bunzip2 package's) that try to overwrite existing binaries won't
knock out the whole of toybox.
GCC 5.2.0 stopped being able to compile Linux 2.6.12's kconfig, but
we added a workaround. You can now build uptime without utmpx.h.
Alejandro Joya pointed out that enabling smack required smack on the host
as well as target when cross compiling, which is now fixed.</p>

<p>Note: toybox can autodetect nommu support when building with a uClibc
toolchain such as <a href=http://landley.net/aboriginal/downloads/binaries/old/1.4.3/cross-compiler-sh2eb.tar.gz>the one from Aboriginal Linux</a>,
but <a href=http://github.com/richfelker/musl-cross-make>with musl-libc</a>
you'll have to enable CONFIG_TOYBOX_MUSL_NOMMU_IS_BROKEN to work around the
fact they provide a non-functional fork() implementation that always returns
-ENOSYS, to prevent you from compile-time probing for nommu support when
cross-compiling. Unfortunately "preventing you from probing" seems to be
an explicit policy with musl, they also don't provide an "#ifdef __MUSL__"
because their library is perfect and you're only ever allowed to work around
other people's bugs, not theirs. So we have to use menuconfig to manually
enable musl-specific bug workarounds.</p>

<a name="23-07-2015" /><a href="#23-07-2015"><hr><h2><b>July 23, 2015</b></h2></a>
<p>I recreated the <a href=downloads/toybox-0.6.0.tar.gz>0.6.0 source tarball</a>
(new sha1sum 08fb1c23f520c25a15f262a8a95ea5b676a98d54)
because I forgot to add --prefix to the git archive command when I updated
my release script from mercurial, so the files weren't in an enclosing
directory. (Ooops.)</p>

<a name="19-07-2015" /><a href="#19-07-2015"><hr><h2><b>July 19, 2015</b></h2></a>
<blockquote><p>
The reason why it was published in the form of a micro sub meson electronic
component is that if it were printed in normal book form, an interstellar
hitchhiker would require several inconveniently large buildings to carry it
around in." - The Hitchhiker's Guide to the Galaxy </p></blockquote>

<p><a href=downloads/toybox-0.6.0.tar.gz>Toybox 0.6.0</a>
(<a href=https://github.com/landley/toybox/releases/tag/0.6.0>git commit</a>)
is out. (Yes, git. See the <a href=#05-04-2015>previous news entry</a>.)</p>

<p>Sorry for the unusually long gap between releases. Since last release Ye
Olde Project Maintainer traveled to japan twice and had two more "once
a century" floods at home. (Probably a coincidence.) Still catching up.</p>

<h3><b>CELF/ELC talk and Wikipedia[citation needed] article</b></h3>

<p>I gave another State Of The Toybox talk
(<a href=https://www.youtube.com/watch?v=04XwAbtPmAg>video</a>
<a href=http://landley.net/talks/celf-2015.txt>outline</a>), in which I
repeat my <a href=http://landley.net/notes-2013.html#07-11-2013>perennial</a>
<a href=https://twitter.com/landley/status/557309224535851009>complaint</a>
that Wikipedia[citation needed]
<a href=http://en.wikipedia.org/wiki/Toybox>still</a>
<a href=https://en.wikipedia.org/wiki/BusyBox#Controversy_over_Toybox>says</a>
toybox was relicensed before its hiatus, when relicensing was why
the hiatus ended.</p>

<p>Since Wikipedia[citation needed] seems unable to do the
<a href=#15-11-2011>most</a>
<a href=http://landley.net/hg/toybox/log/tip/LICENSE>basic</a>
<a href=http://landley.net/notes-2011.html#13-11-2011>research</a> on
this point, and has stuck to an incorrect sequence of events for years,
I've been gradually escalating my attempts to correct them. Toybox
came out of mothballs in November 2011 <b>because</b> it could be
relicensed. That's what opened up a new niche busybox wasn't already
filling with a 10 year headstart.</p>

<a name="asterisk_back" />
<p>The article has plenty of smaller issues<a href=#asterisk>*</a>, but
given that I gave an entire talk at Ohio LinuxFest in 2013
(<a href=http://landley.net/talks/ohio-2013.txt>outline</a>,
<a href=https://archive.org/download/OhioLinuxfest2013/24-Rob_Landley-The_Rise_and_Fall_of_Copyleft.mp3>audio</a>) on why I switched away from GPL for
my projects, that one bugs me.</p>

<h3><b>New stuff this release</b></h3>

<p>There's a new android menu in menuconfig, and rather a lot of Linux
Security Module support (Smack for Tizen from Xavier Roche and José Bollo,
and SELinux for Android from Elliott Hughes; see
the Security Blanket menu under global settings in menuconfig) has
trickled in, although there's still more to come.</p>

<p><b>New commands:</b> Added reset, nproc, ionice, and iorenice.
Elliott Hughes contributed xxd, runcon,
restorecon, load_policy, getenforce, setenforce, getprop, and setprop.
Promoted shred, nsenter, and hwclock.</p>

<p>You can once again build catv now the flag infrastructure's been updated to
let it coexist with cat -v.
And on a long plane flight I wrote
hexedit, an interactive hex editor that implements the start of
cursor control infrastructure (for eventual use by less and vi and shell
command history and so on).</p>

<p><b>New options:</b> Added sed -E as a BSD-compatible synonym for -r.
Upgraded oneit with -r (restart), -3 (send exiting PID values to child),
and signal handling. Added -v option to timeout, -m to mknod, -u to shred,
-t to dmesg, and -123 to head and tail. Added implicit "." to grep -r without
any files to work on. Hyejin Kim requested prefix support for truncate -s.
Greg Hackman added -inum to find.
Jan Cybulski added the smack side of ls -Z support. Various patches also
added -Z to mkdir, mknod, and mkfifo.
Basic cp --preserve support went in, but not yet the xattr/LSM parts.</p>

<p>The toybox command now has a --version option,
which uses "git describe" if available.</p>

<p><b>Build infrastructure:</b>
The "make change" target now saves the output of each failed standalone
command build in a .bad file, and "make defconfig" is quieter now.</p>

<p>Paul Barker submitted a large patch changing command install paths so
"toybox can be installed alongside busybox without confusing
update-alternatives". (There's some argument over
what the right paths should be, and I'm waiting for
people to tell me what else needs fixing because I have no idea. I've
been symlinking /bin to /usr/bin since 2002
<a href=http://landley.net/writing/hackermonthly-issue022-pg33.pdf>for
historical reasons</a>.)</p>

<p><b>Docs:</b> The repository link now goes to github, with another link
to the commit rss feed.</p>

<p>Elliott Hughes updated the Android section of the roadmap
(and he would know). Redid bits of scripts/mkstatus.py to make updating
status.html easier, and the README is larger.</p>

<p>More description of option parsing in code.html, which now describes the
FLAG_x macros, switching flag macro sets with FOR_newcommand, how
configuration zeroes flag macros and using FORCE_FLAGS to suppress the
zeroing of options shared between commands. Also added description of ";"
to make --longopts take an optional =value part, and more about TOYBOX_DEBUG
to check NEWTOY() option strings (otherwise a bad option string makes
lib/args.c obviously segfault, but doesn't explain why).</p>

<p>Added a "Why 0BSD?" section to license.html when submitting zero clause bsd
to SPDX (according to the pending license spreadsheet, it's been approved for
SPDX 2.2).</p>

<p>The old list of commands needing cleanup but not in pending was
removed from toys/pending/README and instead the issues were added
as TODO comments in the individual commands.</p>

<p><b>Bugfixes:</b>
Fixed mount -a segfaulting without -O (reported by Janus Troelsen),
and made it try a "become rw" ioctl() on the block device before falling
back to mounting read only (because Android expects that).
Fixed printf -- and printf ---. Lots of tweaks to ls -l spacing with
different options. Make touch -d and -t actually set time when you don't
specify nanoseconds.
Fixed a subtle bug where recursive calls (toybox commands that run other
toybox commands) weren't resetting all their state. (This manifested as
a "no }" error from "find | xargs sed", but could cause other problems.)
And David Halls reported another sed bug trying to compile libiconv (which
left extra \ at the start of lines in a generated shell script, breaking
the build). Output an error message for "cat /mnt".</p>

<p>Kylie McClain reported that mktemp broke when $TMPDIR was set to an empty
string (which is not the same as unset), that install/find didn't support
numeric uid/gids, and that sort -z affects both input and output.
Isabella Parakiss fixed a printf.c bug.
David Halls fixed bugs in install -D and find -exec. Samuel Holland
fixed unshare -r. Hyejin Kim fixed makedevs with a count of 1, fold -w
range checking, an error path in scripts/mkflags.c, added -i to dhcpd,
and stopped su from prompting the root user for the new user's password.
Jan Cybulski spotted wrong indentation when combining ls -s and -i with -C and
-x. José Bollo fixed stat %G. Sameer Pradhan fixed a bug in mkfifo -Z.</p>

<p>Elliott Hughes asked for a default SIGPIPE handler to disable
the signal handler bionic's dynamic loader installs (yes really). Still not
100% sure what the correct behavior is there. (Posix is
(<a href=http://permalink.gmane.org/gmane.comp.standards.posix.austin.general/10915>actively unhelpful</a>, but at least they're taking
<a href=http://austingroupbugs.net/view.php?id=789#c1976>years to
make up their mind</a>. Elliott also sent patches to fix a typo in
useradd.test, add missing arguments to error_exit() calls and clean up
printf() format strings, fix an off by one error in human_readable(),
fix dmesg -c error reporting, fix a segfault in comma_scan where the option
was the last item in optlist (triggered by mount -o ro,remount), fix
hwclock -w, made ifconfig print lowercase MAC addresses (it was bothering
him), and make terminal_size() read the right environment variable
(LINES, not ROWS). And he suggested the test suite notice high command exit
values (corresponding to segfault or other signals).</p>

<p>People are apparently using toys/pending commands, despite the police tape
and flashing lights, so added louder warnings to toys/pending/README.
Elliott Hughes fixed various problems with tar, dd, more, and top.
Hyejin Kim cleaned up syslogd and dumpleases. Isaac Dunham added hotplug
support to mdev. Yeongdeok Suh added RFC-3315 ipv6 support to dhcpd.</p>

<p>I rewrote ps.c from scratch (in pending), but it's not ready for real use
yet.</p>

<p><b>Portability:</b>
On the portability front Bernhard Rosenkranzer fixed a problem where the
menuconfig code wouldn't compile in C99 mode. (This led to me documenting
the craptacular nature of kconfig in a README, and the plan to replace it
sometime before 1.0.) Some extra flags to shut up overzealous llvm warnings
were added (and have to be probed for because gcc complains about
arguments it doesn't recognize even when they switch stuff _off_ using
a standard syntax). Don't depend on malloc(0) to return non-null in ls.
David Halls fixed some mac/ios portability issues,
implying somebody's built at least part of toybox on a mac.</p>

<p>Added basename_r() to lib/lib.c because the posix semantics for basename()
are stupid but what the gnu guys did to it was appalling.
Turns out bionic already had a basename_r(), but posix still doesn't.
Fixed it up in portability.h, but this
could break more stuff in future. (Correct fix is to lobby posix to add it,
which would probably take about 15 years...)</p>

<p><b>Infrastructure:</b>
The build now checks $LDFLAGS for linker-only flags, and allows the strip
command to fail (binflt toolchains provide a strip that doesn't work).
Since time.c uses floating point, added TOYBOX_FLOAT dependency in config.</p>

<p>There's a lib/lsm.h defining varous inline functions for linux
security modules stuff, if (lsm_enabled()) should turn into a compile-time
constant 0 and let code drop out when TOYBOX_LSM_NONE selected, but
testing against CFG_TOYBOX_LSM_NONE or derived symbols is still useful
becuase when it _is_ enabled the probe turns into a system call you
don't want to repeat too much.</p>

<p>Switched a bunch of commands from signal() to xsignal(). Factored out
xgetgrnamid() and xgetpwnamid() into xwrap.c. Make time.c depend on
TOYBOX_FLOAT (since it always uses float so shouldn't be available on
build targets without even software float). Added readfileat() to lib/lib.c.</p>

<p>The dirtree infrastructure now passes in full flags for the old symlink
field, and the new DIRTREE_SHUTUP flag disables warnings if a file vanishes
out from under you during traverse. New dirtree_start() wrapper to
create dirtree root with only two arguments.</p>

<p>The not-curses infrastructure introduced by hexedit mostly moved to
lib/interestingtimes.c.</p>

<a name="asterisk" />
<a href="#asterisk_back" />Asterisk:</a> such when
Tim contacted me (my blog says a couple days before nov 13, 2011, I.E.
11/11/11 not some specific day 2 months later) to ask if I wanted to work
on a new project he was proposing called
<a href=http://www.elinux.org/Busybox_replacement_project>BentoBox</a>
(because I used to do busybox, he'd forgotten toybox existed
until I brought it up). And don't ask me what "focuses not on compatibility
with its GNU counterparts" means when CP_MORE adds 7 non-posix options
and toys/other has 84 commands in neither posix nor LSB. I think they're
struggling to explain the difference having dismissed "licensing" as being
the reason it started up again after a long hiatus? The reason I don't think
GNU is special is there are a half-dozen other independent
implementations of the same unix command tools out there (AT&amp;T,
BSD, Coherent, Minix, plan 9, busybox, toybox, and several more analyzed in
the <a href=roadmap.html>roadmap</a>, and that's ignoring the implementations
written for DOS or in assembly over the years). But I do care what
Linux From Scratch expects, and if it's
<a href=http://archive.linuxfromscratch.org/lfs-museum/7.6/LFS-BOOK-7.6-NOCHUNKS.html#ch-tools-gcc-pass1>calling mv -v</a>
then I impelement mv -v
even if <a href=http://landley.net/toybox/roadmap.html>posix hasn't got
it</a>. And I don't know why "gnu counterparts" would describe this when
util-linux isn't a gnu package, nor are info-zip, e2fsprogs, kmod, less,
procps, shadow, sysklogd, vim, zlib, sudo, dhcpcd...</p>

<a name="05-04-2015" /><a href="#05-04-2015"><hr><h2><b>April 5, 2015</b></h2></a>
<p>Since <a href=https://android.googlesource.com/platform/external/toybox/>android</a> and
<a href=https://git.tizen.org/cgit/platform/upstream/toybox.git>tizen</a>
and <a href=https://github.com/kraj/meta-musl/tree/master/recipes-core/toybox>openembedded</a>
and <a href=https://packages.gentoo.org/package/sys-apps/toybox>gentoo</a>
and so on have all been using Georgi Chorbadzhiyski's git mirror rather
than the mercurial repository, I bit the bullet and switched the project's repo
<a href=https://github.com/landley/toybox>to git</a>. Georgi's
<a href=https://github.com/gfto/toybox>mirror</a> is now pulling from that.</p>

<a name="25-02-2015" /><a href="#25-02-2015"><hr><h2><b>February 25, 2015</b></h2></a>
<blockquote><p>"A common mistake that people make when trying to design
something completely foolproof is to underestimate the ingenuity of
complete fools."</p><p>- The Hitchhiker's Guide to the Galaxy.</p></blockquote>

<p><a href=downloads/toybox-0.5.2.tar.gz>Toybox 0.5.2</a>
(<a href=/hg/toybox/shortlog/1702>commit 1702</a>) is out.</p>

<p>New promoted commands: sed (finally fixed enough it builds Linux From
Scratch), printf (cleaned up and promoted), shred and
base64 (the Tizen guys wanted them), getenforce, setenforce, and chcon (android),
mix (promoted with fixes from Isaac Dunham), nsenter (from
Andy Lutomirski, merged into unshare).</p>

<p>Elliott Hughes submited a bunch of patches to support Android (to
both toybox and Bionic libc, which he maintains). On toybox's end this
involved a lot of fixups to portability.[ch] and fixes to over a dozen
commands, plus several new ones. Other portability fixes included working
with buildroot's uclibc fork and building for nommu targets.</p>

<p>The new "make change" target builds each toybox command as a standalone
binary. Rather a lot of commands that didn't build by themselves (mv depending
on cp and so on) were hit with a large rock until they built standalone.
This involved rewriting bits of option parsing, more elaborate dependency
generation, making each command have its own config
symbol and main() function (even when it's just a wrapper calling another
command's main()), and so on. Also, some commands can't be built standalone
at a conceptual level: "help" describes other enabled commands and "sh"
has a number of bulitin commands (cd, exit, set) that require the
multiplexer infrastructure, so "make change" filters them out.</p>

<p>The mailing list's web archive is still screwed up. Dreamhost has
been trying to fix it since approximately September. There are
<a href=http://www.mail-archive.com/toybox@lists.landley.net/>two</a>
<a href=http://news.gmane.org/gmane.linux.toybox>other</a> less broken
archives, but neither has quite the same UI as mailman.</p>

<h3>Bugfixes and tweaks</h3>

<p>Cynt Rynt sent in tests for ifconfig,
Robert Thompson taught factor to accept whitespace separated arguments,
Hyejin Kim pointed out that some of mktemp's longopts were attached to
the wrong short options,
Luis Felipe Strano Moraes fixed a wrong free() call in bootchartd in pending.
Patches from Ashwini Sharma to make "df /dev/node" work, prevent du from
looping endlessly following symlinks, and to make expr.c
(in pending) understand == and regex matches. (Speaking of expr, it gets
priority groupings wrong but the bug was actually in the posix spec's
HTML conversion. They fixed the posix spec upstream for us. Still need
to fix the expr code, but it's in pending for a reason...)</p>

<p>Some commands grew new option flags, such as cp --remove-destination
and touch -h.</p>

<p>The parallel build has better error reporting now. When toybox needs to
re-exec itself to regain suid root permissions and hasn't got the suid bit,
it now gives the right error message ("not root" instead of "no such command").

<p>Added a test to "mount" to not mount the same device/directory combination
over itself (the OS catches this for block devices, but not for tmpfs).
Make blkid distinguish ext3 from ext4. Added catv back into cat (because
the Android guys wanted it, and they have historical usage on their side,
so...). Handle nanoseconds in touch.</p>

<p>Fixed a segfault when CP_MORE was disabled (the resulting option flag list
no longer defined -d but still had it in option groups at the end).
Workaround for glibc redefining dirname() and basename() to random non-posix
semantics because gnu. (They could have created dirname_r() but didn't want
to.)</p>

<p>Fix an ifconfig test that was preventing assigning an ipv4 address to
interface aliases. Several cleanup passes on hwclock but not quite
promoted out of pending yet.<p>

<p>Fixed a wrong error message in rm (if you had a chmod 000 directory and
did rm -r on it without -f, after the prompt it would complain it was a
directory, which was not the problem).</p>

<p>The gzip compression code now does "store only" output to stdout, for
what that's worth.</p>

<p>Cleanup mountpoint and expand, and remove them from toys/pending/README
(a list of commands that predate the toys/pending directory but needed
another pass).</p>

<h3>Library and infrastructure:</h3>

<p>Reworked the option parsing infrastructure so more commands build
standalone (via scripts/single.sh or "make change"). The option flag bit
values are no longer packed, it leaves spaces where currently disabled
flags go, and you can #define FORCE_FLAGS so disabled flags aren't zeroed.
This allows multiple commands to more easily share infrastructure, even if
your current flag context is for a disabled command (switched off in config),
you can force them to stay on and as long as the flags read the same right
to left they'll have the same values.</p>

<p>We've started removing use of strncpy() because it's a hugely broken
standard C function: the length is the maximum length to _append_, not
the size of the destination buffer. It memsets the remaining space it didn't
copy ala "memset(dest+strlen(dest), 0, len);" so
if you think len is the size of dest you're guaranteed to stomp memory off the
end). And if it runs out of space it won't null terminate because reasons.
(Meanwhile sprintf("%*s", len, str) is counting wide characters in your current
locale, so if you set a locale other than "C" it will also go past your
allocated buffer size. Whoever is maintining the C library standards is really
bad at strings.)
Instead we have xstrncat() which will error_exit() if src+dest+1 doesn't
fit in the buffer. (Because randomly truncating input data isn't necessarily
an improvement.) And there's always xmprintf().</p>

<p>Similarly, strtol() doesn't return an error indicator on overflow,
you have to clear and then check errno. So new xstrtol() that cares
about overflow.</p>

<p>The bionic and musl guys agree faccessat(AT_SYMLINK_NOFOLLOW) is not
supported, so stop using it.</p>

<p>Fixed toy_exec() to detect when argc is in optargs, so we don't
need a separate xexec_optargs().</p>

<a name="18-02-2015" /><a href="#18-02-2015"><hr><h2><b>February 18, 2015</b></h2></a>
<p>Dreamhost continues to be unable to make mailing list archives work, so
here's <a href=http://www.mail-archive.com/toybox@lists.landley.net/>another
list archive</a> with a less awkward interface than gmane.</p>

<p>(Neither gives you the convenient historical monthly views of mailman,
but I still have hopes dreamhost will someday figure out what they're doing
wrong. They've only been trying since October. Last month they did a
<a href=http://www.dreamhoststatus.com/2015/01/14/discussion-list-hardware-maintenance/>hardware upgrade to fix a software problem</a>, and the stale
data loads much faster now, so that's something.)</p>

<p>Update (Feb 19): the archive started updating again, by discarding
all the pending data. So there are now _two_ giant holes in Dreamhost's
web archive, from Dec 15-Jan 3, and then another hole from Jan 16-Feb 18.
The relevant messages are in both of the other archives. Here's hoping
the chronic archive constipation problem won't happen a sixth time.</p>

<a name="30-12-2014" /><a href="#30-12-2014"><hr><h2><b>December 30, 2014</b></h2></a>
<p>Due to Dreamhost's <a href=http://landley.net/dreamhost.txt>ongoing</a>
<a href=http://landley.net/dreamhost2.txt>inability</a> to make mailman
work reliably, I've added a link to a backup web archive at
<a href=http://news.gmane.org/gmane.linux.toybox>gmane</a> to the nav bar
on the left.</p>

<p>You still subscribe to the list through
<a href=http://lists.landley.net/listinfo.cgi/toybox-landley.net>the first link</a>.</p>

<p>Update (January 27, 2015): they're <a href=https://twitter.com/landley/status/558428839462703104>still working on it</a>.</p>

<a name="19-11-2014" /><a href="#19-11-2014"><hr><h2><b>November 19, 2014</b></h2></a>

<blockquote><p>"This time it was right, it would work, and no one would have to get nailed to anything." - The Hitchhiker's Guide to the Galaxy.</p></blockquote>

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

<p>It's an interim release, mostly bugfixes. There are several new commands,
but they're all in pending.</p>

<h3>Development</h3>

<p>Finally implemented sed, which is still in pending because although
it's feature complete according to posix, and even passes the parts of
Busybox's sed test suite that aren't explicitly testing for gnu bugs we
don't want to copy, it's not yet good enough to build Linux From Scratch.
(The ./configure stages use very long sed scripts. 20 commits worth of
implementation and debugging, just under 1000 lines of code, and there's
still more to do. We're definitely up to some of the "fiddly" commands now.
Did you know "echo hello | sed p - -" segfaults gnu sed in Ubuntu 12.04?
Yeah...)</p>

<p>Talked with the Tizen developers to follow up on their desire to
make toybox a part of the base Tizen system, and got a list of commands
to add to the roadmap. The tizen todo list is:</p>

<blockquote><p>
wget, sha256*, gzip, gunzip, bunzip2, rsync, zdiff*,
less, ar, arch, base64, csplit, dir, fmt, join, 
nproc, shred, shuf, stdbuf, stty, test, tr, unexpand,
users, vdir, diff3, sdiff, dosfsck (fsck.vfat), awk, fdisk
</p></blockquote>

<p>(Most of which was already on the todo list, but it helps prioritize.)</p>

<p>Fixed md5sum and sha1sum on big endian systems (reported by James McMechan).
Andy Lutomirski fixed unshare's help text and option parsing,
and submitted nsenter (a tool to use setns(2)) to pending.
Isaac Dunham implemented acpi -ctV options, and spotted the bug that ls -d
was inappropraitely following command line symlinks without -H or -L (it
should act like ls -l does), and ls -F handles symlinks wrong too.
Lukasz Szpakowski sent in two bugfixes to tail.c. Cynt Rynt spotted an
unnecessary assignment in lib/password.c.</p>

<p>Ashwini Sharma's team was as busy as usual, submitting tr, crontab, and
ipcrm, and hwclock to pending, more features to the pending ip.c, and a
pile of bugfixes (to chgrp, killall, ifconfig, insmod,
losetup, comm, cp, id, xwrap, netcat, modprobe, nohup...) mostly found by
static analysis. (These fixes are mostly to seldom-used codepaths like the
TOYBOX_FREE config option, but test coverage is always appreciated.) Ashwini
also suggested upgrading ln -f to leave the original target alone if link
creation fails, and reported that mv -f and -i weren't implemented (now fixed).</p>

<p>New config option: TOYBOX_NORECURSE prevents xexec() from making internal
function calls (for nommu systems with a finite stack).</p>

<p>The "toybox" multiplexer command no longer adds a trailing space to each
line of command names, so things like "./toybox | tr ' \n' '|'" to create
a grep pattern snippet are easier to do. (Why you'd want to is your business,
but the output is tidier now.)</p>

<h3>Infrastructure</h3>

<p>Isaac Dunham added Android support to portability.h, including compile
probes for functions missing from bionic-libc, and annotated the commands that
use those functions. We haven't really tested building against bionic,
but in theory it's possible now.</p>

<p>Running the test suite now color codes the PASS/SKIP/FAIL notifications
if output is to a tty. (And in case you missed it last time, VERBOSE=fail
to stop at the first failure is really useful.)</p>

<p>In loopfiles_rw() use O_CLOEXEC instead of O_RDONLY to request the loop
function close filehandles for us. (Otherwise the callback function must
close each supplied filehandle itself.)</p>

<p>The printf-style escape parsing ("\n" and friends) got factored out into
a new unescape() function.</p>

<a name="02-10-2014" /><a href="#02-10-2014"><hr><h2><b>October 2, 2014</b></h2></a>
<blockquote><p>"There is an art, it says, or rather, a knack to flying.
The knack lies in learning how to throw yourself at the ground and miss...
Clearly, it is this second part, the missing, which presents the
difficulties." - The Hitchhiker's Guide to the Galaxy.<p></blockquote>

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

<h3>New commands</h3>

<p>The new commands are find, install, factor, and mount. Promoted commands
(cleaned up and moved out of "pending") are lspci, inotifyd, and blockdev.</p>

<p>cp now implements -HL and -F to force delete of pending files, cpio now
ignores -m and implements -p, ls -C now has utf8 support (using wcwidth
instead of strlen), and umount got a number of upgrades involving
looking things up in /proc/mounts. Other minor cleanups happend to
cut, touch, free, and id.</p>

<p>In pending: Bradley Controy submitted mix (adjusts OSS sound volume). Ashwini
Sharma submitted diff, userdel, blockdev, ipcs, and crond, upgraded
fdisk, fsck, and ftpget, and ran a static analyzer on a lot of other code.
Partial cleanup was done to useradd, userdel, groupadd, and groupdel.</p>

<h3>Build infrastructure</h3>

<p><b>Parallel builds</b></p>

<p>The build now takes advantage of SMP, autodetecting the number of
processors. (Export the environment variable CPUS to pick a specific number.)
Other build changes: split out $LDOPTIMIZE because old compilers complain
about linker options passed with -c, and the entire "generated" directory now
gets deleted by clean (the README that was in there got merged into code.html).</p>

<p><b>Standalone builds</b></p>

<p>The standalone build infrastructure (scripts/single.sh) got upgraded to
build more commands as standalone executables. In make.sh the source file
selection uses a regex to find the source files with the NEWTOY/OLDTOY macro
for the command. It enables each command's
sub-options (so CP has CP_MORE), enables I18N and FLOAT support to build
full-featured commands, and includes --help text (at least when
the command doesn't use another command's help). The OLDTOY() macro
now produces (redundant) function prototypes so you can build an OLDTOY
without the NEWTOY</p>

<p>It doesn't quite have complete coverage yet, the defconfig entries that
aren't building standalone yet are:</p>

<blockquote><p>chown, egrep, fgrep, fstype, halt, mv, nc, poweroff, unix2dos,
whoami</p></blockquote>

<p>The main reason for standalone build failures is NEWTOY() or OLDTOY()
entries that don't have their own config symbol. Another problem is entries
that depend on another entry in kconfig, usually because common infrastructure
is using one command's flags (which the other commands copy): if that command
is disabled, the FLAG macros become 0 so dead code elimination can remove the
code. It's <a href=http://landley.net/hg/toybox/rev/1503>possible
to untangle</a> this, but a bit awkward. (It boils down to conflicting
design goals in the two contexts.)</p>

<p>Standalone builds are used by the test suite when testing individual
commands.

<p><b>Snapshot builds</b></p>

<p>A new addition to the "generated" directory is generated/build.sh
containing a single compiler command line to build toybox in its current
configuration. Combined with the generated/*.{h,sh} files from an
exisiting build, this may let you build on a new system that hasn't quite
got enough OS bits working to run a full configureand make.</p>

<h3>Internals</h3>

<p>Library code: xcreate/xopen now O_CLOEXEC by default to avoid leaking
filehandles to child processes. DIRTREE_COMEAGAIN's second callback is now
done with the directory filehandle still open (new dir->again variable added
to distinguish first from second callback, and requesting DIRTREE_RECURSE now
requires passing in the specific macro value, not just a true/false).
Use daemon() out of libc instead of hand-rolled daemonize() in various
pending commands. string_to_mode() now passes through type bits so you can
use it to more easily modify a file's existing mode.
Split xpopen() into xpopen_both(), xopen(), and xrun() depending on whether
we want to redirect both, one, or neither of stdin/stdout.</p>

<p>Bugfixes: Better error message when TOYBOX_SUID option can't drop priviliges
(which happens when you suid something _other_ than root).
The old pending version of nbd_client.c wasn't deleted when the
command was promoted (and the build would break if both were enabled),
toy_exec() sometimes needs to re-exec from $PATH rather than recurse
internally (to gain dropped root permissions or limit stack depth),
always call setlocale() when I18N is enabled to switch it back _off_ when
we run commands that expect sscanf("%n") to return bytes,
dirtree() had a memory leak in an error path, patch.c had some bugs in
error paths (didn't report problem clearly). Ashwini Sharma spotted an
option parsing bug where [-abc] would forget _all_ command line arguments
saved in the GLOBALS() block (not just the ones for options being switched
off), plus various minor fixes to nbd_client and cpio.
Lukasz Szpakowski fixed rm -f on a broken symlink (failed), and killall
with no arguments (segfaulted).</p>

<p><b>Portability</b></p>

<p>A somewhat fiddly fix to rm -rf (which needs to chmod directories to u+rwx
to descend into them) which hit a musl bug in faccessat() which the musl
maintainer refuses to fix. (He literally wants the man page changed
instead, despite other libcs working.) Added an #ifdef __MUSL__ section
to portability.h with a workaround, you may need CFLAGS=-D__MUSL__ in your
build if your musl build's features.h doesn't #define that. (I may do
a different workaround in future, but sometimes you've just got to make
it work so you can ship. Also, toybox grep with multiple patterns
requires <a href=http://landley.net/hg/aboriginal/rev/1692>a patch
to musl's regex engine</a>, which applies to 1.1.4 but not to the current
musl source control.)</p>

<p>More portability.h fixes for uClibc too. (I don't expect that to ever have
another release, so locally patching around posix-2008 violations is silly).</p>

<p><b>Change to username filtering</b></p>

<p>Posix recommends the username creation logic filter usernames to a small
allowed set of characters (which even Red Hat breaks by explicitly allowing
"$" at the end), but this prevents UTF-8 usernames. Posix' stated logic
is to allow filesystems to create the user's home directory, but Linux
filesystems can accept any character but NUL and "/". The only characters
we actually _need_ to filter out are ":" (field separator in passwd),
newline (line separator in passwd), and "/" (directory separator in
filesystem).</p>

<h3>Documentation</h3>

<p>Web pages updated: cleanup.html documents more cleanup, code.html
documents more code, and about.html now capitalizes "toybox" consistently
(it's just a word, capitalize at start of sentence).</p>

<p>The pending/README file now lists commands that needed review/cleanup
before the pending directory was added.</p>

<h3>Test Suite</h3>

<p>Moved out of scripts/test into top level "tests" directory, and the
testing.sh script is now in scripts rather than mixed into the *.test files.</p>

<p>Johan Bergström requested VERBOSE=fail to make tests (telling it to
stop at the first failure), and spotted a build bug where using gnu
sort on the host broke in non-C locales.</p>

<p>Divya Kothari submitted tests for chmod, link, tar, bzcat, xzcat, zcat,
and hostname. (And more, but that's all that's merged so far.)</p>

<a name="07-07-2014" /><a href="#07-07-2014"><hr><h2><b>July 7, 2014</b></h2></a>
<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>

<a name="20-04-2014" /><a href="#20-04-2014"><hr><h2><b>April 20, 2014</b></h2></a>
<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>

<a name="18-11-2013" /><a href="#18-11-2013"><hr><h2><b>November 18, 2013</b></h2></a>
<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>

<a name="17-09-2013" /><a href="#17-09-2013"><hr><h2><b>September 17, 2013</b></h2></a>
<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>
<a name="26-07-2013" /><a href="#26-07-2013"><hr><h2><b>July 26, 2013</b></h2></a>
<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>

<a name="02-07-2013" /><a href="#02-07-2013"><hr><h2><b>July 2, 2013</b></h2></a>
<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>

<a name="21-03-2013" /><a href="#21-03-2013"><hr><h2><b>March 21, 2013</b></h2></a>
<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>


<a name="14-03-2013" /><a href="#14-03-2013"><hr><h2><b>March 14, 2013</b></h2></a>
<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>

<a name="18-01-2013" /><a href="#18-01-2013"><hr><h2><b>January 18, 2013</b></h2></a>
<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>

<a name="15-12-2012" /><a href="#15-12-2012"><hr><h2><b>December 15, 2012</b></h2></a>
<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>

<a name="13-11-2012" /><a href="#13-11-2012"><hr><h2><b>November 13, 2012</b></h2></a>
<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>

<a name="23-07-2012" /><a href="#23-07-2012"><hr><h2><b>July 23, 2012</b></h2></a>
<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>

<a name="25-06-2012" /><a href="#25-06-2012"><hr><h2><b>June 25, 2012</b></h2></a>
<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>

<a name="12-06-2012" /><a href="#12-06-2012"><hr><h2><b>June 12, 2012</b></h2></a>
<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>


<a name="03-03-2012" /><a href="#03-03-2012"><hr><h2><b>March 3, 2012</b></h2></a>

<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>


<a name="12-02-2012" /><a href="#12-02-2012"><hr><h2><b>February 12, 2012</b></h2></a>
<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>
<a name="15-11-2011" /><a href="#15-11-2011"><hr><h2><b>November 15, 2011</b></h2></a>
- 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" -->
