OSDN Git Service

Build vendor toybox unconditionally. am: 3829236617 am: cb54b3a2cf
[android-x86/external-toybox.git] / www / news.html
index b6662fb..73516b0 100755 (executable)
+<html><head><title>toybox news</title>
 <!--#include file="header.html" -->
 
+<p>Toybox combines common Linux command line utilities together
+into a single BSD-licensed executable that's simple, small, fast,
+reasonably standards-compliant, and powerful enough to turn Android into
+a development environment. See the links on the left for details.</p>
+
 <h2>News</h2>
-<hr><b>November 13, 2012</b>
+
+<a name="21-02-2017" /><a href="#21-02-2017"><hr><h2><b>February 21, 2017</b></h2></a>
+<blockquote><p>Only six people in the Galaxy knew that the job of the
+Galactic President was not to wield power but to attract attention
+away from it. Zaphod Beeblebrox was amazingly good at his job.</p>
+<p>- The Hitchhiker's Guide to the Galaxy</p></blockquote>
+
+<p>Despite everything, <a href=downloads/toybox-0.7.3.tar.gz>Toybox 0.7.3</a>
+(<a href=https://github.com/landley/toybox/releases/tag/0.7.3>git commit</a>)
+is out. The <u>new commands</u> this time are <b>ftpget</b>, <b>ftpput</b>, <b>microcom</b>, and <b>ascii</b>.<p>
+
+<p>We also had two command _demotions_ out of defconfig:
+<b>hostid</b> got moved to toys/example and
+switched to "default n" because despite <a href=http://pubs.opengroup.org/onlinepubs/9699919799/functions/gethostid.html>still being in posix</a>
+the concept of a unique 32 bit number identifying a system is something
+Linux outgrew about the time Pauline Middelink wrote the first IP
+Masquerading code. And Elliott did a complete rewrite of <b>dmesg</b> introducing
+two codepaths that I didn't get a chance to unify and didn't want to
+hold up the release for, so that's back in pending.</p>
+
+<p><u>New features</u>: Rob added units to <b>find</b> -atime and friends
+(with the legacy -amin alias). Elliott added color and -w to dmesg, fallocate
+-o, and improved file's ELF parsing. Steve Muckle added -d and finit_module
+support to modprobe. Rob and Elliott tweaked the
+ps/top display format a bit more (extending the USER field from 8 to 18 chars
+and putting + at the end of string fields that got truncated).
+df -a isn't entirely new, but wasn't documented and needed a bugfix.</p>
+
+<p><u>Bugfixes</u>:
+Last release broke oneit because -c didn't get moved to xopen_stdio() (oops).
+Rob and Elliott simultaneously spotted ps padding each line to 99999
+chars when there's no tty (serial console or adb); now it pads to 80 in
+that case but also switches on -w to avoid field truncation. The "tty"
+field also sometimes had trailing debris (that's fixed now). And "top" was
+endlessly redrawing with out tty because receipt of the ANSI size probe
+results would set SIGWINCH, and handling that sent another ansi probe. (Sigh.)
+And while we're there, replace "ADDR" with "BIT" in ps -l so there are
+more than 4 chars left for the "CMD" field on 64 bit systems.</p>
+
+<p>Izabera pointed out that split -b and -l can't mix, and suggested seq should
+multiply to avoid accumulating rounding errors from repeated fractional
+increments. Wang Xiao Jian fixed a bug in sort -k.
+Elliott let getprop use the @ character in property names, and
+Dimitry Ivanov removed the name length limit for system properties.
+Elliott also improved some error reporting and improved top -H's display
+of thread names.
+
+<p>Josh Gao pointed out that recursive operations on . and .. could be ignored
+in chmod -R (and the resulting generic fix to dirtree_notdotdot() fixed
+it in several other places).</p>
+
+<p>Justin Cormack caught tar producing a warning to stdout that screwed up
+"tar c" to stdout.
+Rob fixed an option parsing bug (where switching off a --longopt in menuconfig
+confused the parser), and another one where an option excluding itself
+(ala "abc[-ab][!abc]" with "command -a -b") would segfault.</p>
+
+<p>There's some sort of gcc stack over-optimization bug where musl-libc's
+version of vfork() doesn't get marked with attribute(returns_twice) so
+stack varabiles in the same function after that get semi-randomly overwritten
+when the optimizer decides to reclaim the space. So add the attribute
+to the function the XVFORK() wrapper macro calls. (It's a nommu thing.)</p>
+
+<p>Fixed a couple variable size mismatch bugs that were only tested on 64 bit
+(printf %x 64) or only tested on 32 bit (modprobe), removed some
+unnecessary casts in stat.</p>
+
+<p>Continuing attempts to build under Android NDK brought up that posix
+defines the global 'stdout' as a macro, which older versions of bionic
+turned into an array member, but a function was using it as an argument
+name. (This worked in the AOSP build because it only builds against current
+bionic, where there's a global 'stdout'.)</p>
+
+<p>Several commits argued with clang's warning generation, eventually
+settling on a variant of __attribute__((__shut_up__)).</p>
+
+<p>Android should no longer give spurious error messages
+when you "ps -A | head" about EPIPE on output. (Older versions of bionic
+set an error handler on SIGPIPE, but it shouldn't do that now. More recent
+versions of adb set the SIGPIPE handler to SIGIGN instead of SIGDFL,
+leading to write returning an error message instead of silently killing
+the program. So we set it back to the default.)</p>
+
+<p><u>Docs</u>:
+Removed website link to the gmane archive (which didn't survive gmane's
+change of ownership). The FAQ now answers a _second_ question. (Woo!)
+Some roadmap updates.</p>
+
+<p><u>Build tweaks</u>:
+Upgraded "make install_airlock" target to only warn about missing
+commands (unless $PEDANTIC is set) when it sets up the hermetic build
+path. (The plan is still to implement everything but the toolchain
+binaries in toybox, but in the meantime we're symlinking other stuff from
+the $HOST that isn't ready yet. See
+<a href=https://github.com/landley/mkroot>mkroot</a> for an example using
+this.)</p>
+
+<p>Elliott and Rob continue to poke at building toybox with Android's NDK,
+but it's a work in progress (<a href=http://lists.landley.net/pipermail/toybox-landley.net/2016-December/008767.html>thread</a>). Various changes
+removing libcutils dependencies and adding an selinux dependency to getprop
+are fallout from this.</p>
+
+<p>Cross-compiling from Macs needs to use "gsed" instead of apple's
+version, so teach the build to use that name if it exists in the $PATH.
+If you try to build without running config first, you should get better
+error reporting now. Added a workaround for Centos' broken "which" command
+producing output when it _can't_ find a name in the $PATH.</p>
+
+<p><u>Library</u>:
+The new dirtree flag DIRTREE_PROC skips non-numeric entries so things
+like ps and top can scan /proc more efficiently.</p>
+
+<a name="21-10-2016" /><a href="#21-10-2016"><hr><h2><b>October 21, 2016</b></h2></a>
+<blockquote><p>Probability factor of one to one. We have normality. I repeat,
+we have normality. Anything you still can't cope with is therefore your
+own problem.</p><p> - The Hitchhiker's Guide to the Galaxy</p></blockquote>
+
+<p><a href=downloads/toybox-0.7.2.tar.gz>Toybox 0.7.2</a>
+(<a href=https://github.com/landley/toybox/releases/tag/0.7.2>git commit</a>)
+is out.</p>
+
+<p>During this development cycle, Elliott Hughes <a href=http://androidbackstage.blogspot.com/2016/07/episode-53-adb-on-adb.html>got interviewed
+on the ADB podcast</a>
+and Rob Landley <a href=http://linuxluddites.com/shows/episode-88/>got interviewed on Linux Luddites</a> (<a href=http://linuxluddites.com/shows/episode-11/>again</a>).
+Both talk about toybox and many other things.
+The web page also grew a new <a href=faq.html>FAQ page</a>, currently with
+just the one.</p>
+
+<p>New comands added to defconfig are <b>tunctl</b>,
+<b>log</b>, <b>start</b>, <b>stop</b>, and <b>sendevent</b>.
+The commands <b>file</b> and <b>netstat</b> got promoted out of pending.
+Pending added <b>chrt</b>, <b>setfattr</b>, and <b>getfattr</b>, and saw
+a lot of cleanups to diffstat and dd but not enough to promote them to
+defconfig yet. A new toys/net directory was added, moving ifconfig, netcat,
+netstat, rfkill, and tunctl there so far.</p>
+
+<p><b>Upgrades</b>: All commands now parse --version when they understand
+--help, but "true" and "false" should now ignore their arguments entirely.
+We taught stat to handle "%12x" and "%.12x" printf-style escapes, which
+apparently other versions do. The ifconfig output now shows the interface's
+device driver. Added patch -d and --dry-run, wc can now do -cm together,
+find has a NOP -noleaf so scripts that use that don't break, add -c to md5sum
+and sha1sum. Elliott taught ps to treat extra aguments as additional -p
+pids, implemented xxd -s, did a number of upgrades to file (added -HL,
+support for ar files, improved ELF support to report android API level
+and stripped/not stripped and it no longer prints a guessed build ID type).
+Elliott also added optional build-time support for using openssl's
+assembly-optimized md5sum/sha1sum implementations (leading to a new
+<a href=design.html>design</a> policy on shared libraries).</p>
+
+<p><b>Bugfixes</b>: Too many fixes to "ps" and "touch" to list, from both
+Elliott and Rob. Rob taught sed to handle s/[[:space:]/]// type sequences
+properly, switched grep to a better
+workaround for <a href=https://sourceware.org/bugzilla/show_bug.cgi?id=17829>glibc bug 17829</a>, made sed -i preserve ownership when run as root,
+made du max out at 2 terabytes instead of 2 gigabytes on 32-bit systems
+(it was always designed to, but was missing a typecast),
+fixed the option parsing infrastructure (config options that remove command
+line options got the placeholders wrong), fix to printf for printing
+octal digits and handling the (posix-mandated) difference between %b and
+non-%b octal output, reading from "-" no longer closes stdin when done,
+netcat -L works with nommu (although it may need more portability work),
+and you can now "make test_scankey" if you want to. Several commands
+(stat, makedeves, chgrp, cp, find) handled user name lookup failure badly
+(stat was segfaulting if you interrogated a file belonging to a nonexistent
+user, "chown 12345 file" errored out if you didn't have that user
+in /etc/passwd... now they should all print/accept the number when
+appropriate). "LC_ALL=C ls -Cs --color" produces the same output
+as other versions (two spaces padding, -k hardwired on).<p>
+
+<p>Kyungsik Lee fixed a bug
+in cp (readlink() doesn't actually null terminate the string it reads in),
+Elliott Hughes made pgrep/pkill return success/failure, fixed trailing
+whitespace in netstat, fixed a SMACK symbol conflict due to linux/xattr.h
+changing, fixed ls -sh, and added a lot of
+stuff to the <a href=roadmap.html>roadmap page</a>.
+Izabera pointed out cmp -l and -s can't be selected at the same time,
+that timeout was never actually checking -v, that ls should default to -q
+when output is to a tty, and that "file -" would sometimes try to open "-"
+instead of stdin.
+Usischev Yury pointed out a use after free error, and that id shouldn't
+call exit() directly. Matthias Urhahn pointed out that stat(2) returns
+hardwired 512-byte units, so stat.c was wrong. David Hedges pointed out
+that route could only handle 10 character interface names when the kernel
+can do 15 (it's still in pending for a reason, but fixed). Evgenii
+Stepanov found and helped diagnose one of the more subtle ps bugs fixed
+this time around.</p>
+
+<p>Calling "make test_blah" no longer causes make to error out if the last
+test fails (and thus returns a nonzero error code).
+Building single commands and the multiplexer used to require a "make clean"
+between them (because they had different config files both of which were older
+than generated/config.h so it didn't get rebuilt; now it just always
+rebuilds it).</p>
+
+<p>The defconfig build is now slightly less broken on older centos versions
+(although <a href=http://lists.landley.net/pipermail/toybox-landley.net/2016-September/008664.html>the consensus</a> is that Centos is just generally broken).<p>
+
+<p>Several commands were over-using xprintf(), which flushes its output
+to check for error (something you only need to do maybe once per line,
+and even then maybe only in loops because xexit() flushes and checks
+ferror() for you and adjusts the exit code if we wrote stuff to stdout
+that couldn't be printed). Lots of little flushes are inefficient,
+so most things can use normal printf(). (Retransmission
+of short writes is presumably libc's problem since it's buffering the
+output and all.)</p>
+
+<p><b>Library:</b>
+New library functions readlink0() and readlinkat0() which properly null
+terminates the symlink value (which the stock libc function inexplicably
+doesn't).
+The new do_lines() function interates reading lines from a filehandle
+and calling a function on each line.
+New function pollinate() factoring out netcat's poll() loop so things
+like telnet can use it.
+New functions getusername() and getgroupname() return a
+char * given a uid/gid (and return a string representation of the number
+if the lookup fails), and xgetpwnamid/xgetgrnamid were renamed to
+xgetuid/xgetgid and now return an integer instead of a struct (also helping
+handle lookup failures, you can still return the uid/get for "12345").</p>
+
+<p>Switched atolx() to use long long internally.
+Renamed xopen() to xopen_stdio() and made a new xopen() that never returns
+stdin, stdout, or stderr (duping /dev/null into the filehandles as necessary).
+New function xopenro() opens a file read only with one less argument, and
+understands that "-" means stdin. New flag WARN_ONLY tells these functions
+to just print a warning on failure, and return -1 instead of exiting.
+Misc new functions like openro() which defaults to the WARN_ONLY behavior
+and notstdio() which dup()s a filehandle up beyond stdin/out/err backfilling
+with /dev/null as necessary. The WARN_ONLY flag let us remove the failok
+argument from loopfiles().</p>
+
+<p>New TOYFLAG_NOHELP disables --help processing (which "true" and "false"
+should not do).</b>
+
+<p>The test suite now has NOSPACE=1 to ignore whitespace (using diff -b to
+check results), which helps TEST_HOST pass the same tests as toybox.
+Fixes to chattr and date tests. It also has a new variable $C with the
+absolute path to the command being tested (bypassing shell builtins),
+and a function testcmd() which is just like testing() except it prepends
+the command name ($C) to the test command line as well as the test
+description.</p>
+
+<a name="02-06-2016" /><a href="#02-06-2016"><hr><h2><b>June 2, 2016</b></h2></a>
+<blockquote><p>When the 'Drink' button is pressed it makes an instant but
+highly detailed examination of the subject's taste buds, a spectroscopic
+analysis of the subject's metabolism, and then sends tiny experimental
+signals down the neural pathways to the taste centres of the subject's
+brain to see what is likely to be well received. However, no-one knows
+quite why it does this because it then invariably delivers a cupful of
+liquid that is almost, but not quite, entirely unlike tea.</p>
+<p> - The Hitchhiker's Guide to the Galaxy</p></blockquote>
+
+<p><a href=downloads/toybox-0.7.1.tar.gz>Toybox 0.7.1</a>
+(<a href=https://github.com/landley/toybox/releases/tag/0.7.1>git commit</a>)
+is out. (Yes, I forgot to update the --version string, but I already
+uploaded the <a href=downloads/binaries/0.7.1>binaries</a>.)</p>
+
+<p>The website has https support now, you can "make cat ps ls"
+to get standalone commands (and "make list list_pending" to see what's
+available), and a whole lot of bugfixes and new options to existing
+commands.</p>
+
+<h2>New Commands</h2>
+<p>Rob implemented <b>ulimit</b>. In pending, Elliott Hughes implemented
+file. and Lipi Lee implemented a simple wget. (Pending also had minor
+cleanups to more and lsof, but no promotions this time around.)</p>
+
+<h2>New Options</h2>
+<p>Izabera implemented env -u, suggested adding seq -w, made factor
+use full unsigned 64 bit math even on 32 bit platforms, pointed out base64
+-w0 should disable wrapping, and sped up wc -c.
+Elliott Hughes added mount -o relatime, xxd -p -r, and od -w.
+Sameer Pradhan (or possibly Bilal Qureshi) suggested adding stat -tL -c %m%t%T.
+Tom Cherry added getprop -Z. Paul Barker added hostname -b and -F.
+Rob added ls -b, made ls -q work with utf8,
+made sed -f - read from stdin, and added top -O (like ps -O).</p>
+
+<p>Elliott and Rob <b>added Thread support to ps and top</b>,
+with -o TID, TNAME. We also added -o PCY (android scheduling policy),
+-o BIT (process is 32 or 64 bit), and -o TNAME now shows the parent
+command name for threads.</p>
+
+<h2>Documentation</h2>
+
+<p>Rob added the sed invocations to convert tabs/spaces and back to
+design.html. Isaac Dunham updated hexedit's help text.
+Jakob Flierl pointed out a broken URL in the README.</p>
+
+<p>Rob also redid the naming scheme of sed's pattern manipulation code to
+remove the gratuitous references to Roger Zelazny's "Amber" series, since it
+was confusing people.</p>
+
+<h2>Bugfixes</h2>
+
+<p>Grep -H and -n should now work properly with -ABC. Andy Chu pointed out an
+out of bounds access for zero length lines in rev, fixed a buffer overflow
+in diff -r, and fixed operator precedence in expr (although Rob is rewriting
+chunks of expr so toysh can use its plumbing for $(( )) ).
+Patrick Ohly fixed the too-aggressive suid permission dropping logic.
+Josh Gao fixed a segfault when find -iname got no argument, and
+made tail -f work right with just one file argument.
+Tom Marshall cleaned up tar's long filename support and improved
+the tar tests, and reported another find bug (with -iname -o -iname not
+tracking copy lifetimes properly) that got fixed.</p>
+
+<p>Elliott Hughes fixed wc -c to not trust zero length files to actually be
+zero length (/proc does that), fixed "mount -o rw,remount /system" on
+Android, removed trailing spaces on ps -o cmdline, fixed pkill -9 and
+the corresponding tests, made "insmod -" work, fixed top -b and tail -NUM,
+pointed out that ps shouldn't trim numeric fields for display size limits,
+and added some more
+explicit "sort" calls to make pipelines so build tempfiles are easier to cache.
+Rob <a href=https://github.com/landley/toybox/commit/32b3587af261>fixed an insane sed thing</a> the perl 5.22 build was doing.
+Fixed mount -o to properly pass in leftover string data, and
+<a href=http://lists.landley.net/pipermail/toybox-landley.net/2016-March/004790.html>documented how to use toybox to mount nfs</a> (warning: kernel patch
+to fix some bitrot in the kernel NFS driver's string parsing attached
+to that message).</p>
+
+<p>George Burgess IV corrected some variable types in traceroute.
+Base64 now wraps == properly. Fixed two bzcat segfaults reported by
+John Regehr. Andy Chu found a segfault in "sed -e 'c\'" with no trailing
+line, and implemented mv -n and cp -n. The cyanogenmod guys pointed out that
+cp -a shouldn't complain if a non-root user can't chown, and we added
+the output path to cp -r error messages while we were there (before was just
+the filename).</p>
+
+<p>Samuel Holland fixed blkid's handling of vfat labels, and
+fixed a segfault when basename was passed an empty string and an empty
+suffix. Davis Mosenkovs fixed touch -t seconds parsing.
+Rob fixed a bunzip bug reported by John Regehr (the bad CRC
+error message was printing a NUL argument).</p>
+
+<p>Not all of the commands build standalone, but more of them do now;
+scripts/single.sh can now build a "mv" that isn't actually "cp".
+The dependencies are more granualr, so "make top; make ps" no longer
+produces a broken ps that ignores -A (because ps.o wasn't getting rebuilt
+even though top had the FLAG macros for -A zeroed).</p>
+
+<h2>Build</h2>
+<p>Rob added a <b>warning when building commands out of
+pending</b>. (The pending directory is full of code that hasn't been
+properly vetted. Use at your own risk.)</p>
+
+<p><b>New build targets let you build individual commands by name</b>, ala
+"make ls cat ps", and you can run the test suite for each standalone
+command with "make test_ls" and such.
+"make list" shows all such standalone commands in defconfig, and
+"make list_pending" shows unfinished commands from toys/pending
+("make list list_pending" shows both together). "make clean" now deletes
+these filenames at the top level, and the corresponding unstripped files
+live in the directory generated/unstripped.</p>
+
+<p>Nicholas Boichat suggested switching make.sh to use $! for process
+enumeration during parallel builds (which is both more efficient and more
+portable), and suggested shell builtin replacements for wc/awk/sed so the
+build loop has fewer forks now.</p>
+
+<p>Lots of work on the test suite, much of it due to Andy Chu. It now
+consistently prints the name of the command being tested at the start of each
+test (and the common infrastructure does that, not each individual test), and
+"make tests" actually runs all the available tests now.
+Seperated pgrep and pkill tests, split lsattr/chattr, added fstype and base64
+tests. The "tests/files" directory now collects files for tests to
+use, with blkid, bzcat, and utf8 subdirectories: the $FILES variable
+gives a path to it, so "$FILES/blkid/ext2.bz2" and so on.
+The testsuite now has test files with 3 different types of "not utf8 output"
+sequences that require escaping, plus some combining character torture
+tests, direction reversals, and so on.</p>
+
+<p>Added dependencies on TOYBOX_FORK to various pending commands that need
+nommu conversion (which should fix the allyesconfig build).</p>
+
+<p>Static builds with selinux should work again.</p>
+
+<h2>Library</h2>
+
+<p>New bufgetgrgid() and bufgetpwuid() functions cache previous lookup info
+rather than repeatedly traversing /etc/passwd and /etc/group (which is slow).
+Added xpipe() to lib to catch pipe creation failure.
+The HELP_ macros generated by config2help.c now use a capital prefix
+to avoid collicing with help_exit() and such.</p>
+
+<p>The dirtree infrastructure got a cleanup pass in preparation for adding
+infinite recursion depth support (needed by rm -r), updated the
+<a href=code.html#ib_dirtree>documentation</a> to describe the new
+semantics (removing dirtree_start() and adding dirtree_flagread()).
+Now dirtree_recurse() takes the new dirfd as an argument.</p>
+
+<p>Split out _xexit() from xexit() and let sigatexit() set multiple
+callbacks.</p>
+
+<p>For years the man pages have said to #include <sys/types.h> to get
+major/minor/makedev but now that glibc
+<a href=https://sourceware.org/ml/libc-alpha/2015-11/msg00253.html>has vowed
+to break existing programs</a> and replace it with another nonstandard header
+not in posix or lsb, we added our own functions to lib/ to do the transform
+ourselves (based on what the kernel actually expects).</p>
+
+<h2>Portability</h2>
+
+<p>Debian unstable started needing an extra header #include for some reason, and
+although printf("%.*s", INT_MAX, s) worked fine on Ubuntu 12.04 it
+didn't on 14.04, so added a workaround for that. Typecast a printf because
+wchar_t isn't a rigidly defined size. RLIMIT_RTTIME was
+added to the kernel in 2008 but you can't expect uClibc to have noticed yet,
+nor did it #define MS_RELATIME (added in 2006), or prlimit (2010)...
+(Given the improvements in musl and bionic, uClibc support may be dropped
+in a future release.) Given that the xattr functions were added during
+linux 2.5, we can #include its header unconditionally.</p>
+
+<p>Renamed basename_r() to something else to avoid conflicting with freebsd's
+libc, and both scripts/install.h and scripts/config2help.c no longer include
+toys.h (to make cross-compiling from systems we don't run on easier).</p>
+
+<p>Debian bug 635570 did something unspeakably nonportable, depending on
+"sed -e 'a\'" (with no next line of the pattern, so an unterminated
+continuation) to add a newline to the last line of input if and only if
+that last line of the input didn't have a newline, and to take no other
+action. This is well into "depending on a bug" territory, but we implemented
+it because otherwise Debian's install broke. (Of course this behavior
+is undocumented, non-obvious, and doesn't really make logical sense.)</p>
+
+<p>CONFIG_TOYBOX_NORECURSE now disables the stack measuring logic (which
+was giving some "security" code fits). Also we typecast pointers to (long)
+before comparing them to avoid spurious compiler "optimizations" that
+break the code.</p>
+
+<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>
 
@@ -65,7 +2037,7 @@ a separate <a href=oldnews.html>oldnews</a> page.</p>
 back now.</p>
 </span>
 
-<hr><b>July 23, 2012</b>
+<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>
@@ -90,7 +2062,7 @@ corresponding executable bit wasn't set, and worked around a longstanding
 glibc bug where static linking prevents stdout from automatically flushing
 pending output on exit.</p>
 
-<hr><b>June 25, 2012</b>
+<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
@@ -106,7 +2078,7 @@ it is. The roadmap and documentation are a bit behind, and I've got ~40
 pending submissions to review. I need to catch up...</p>
 </span>
 
-<hr><b>June 12, 2012</b>
+<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
@@ -171,7 +2143,7 @@ yet, but if I wait until everything works we won't have a release before
 1.0, so here's a checkpoint.)</p>
 
 
-<hr><b>March 3, 2012</b>
+<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.
@@ -211,7 +2183,7 @@ dirname, unshare, and various infrastructure tweaks, but it took me 3 months
 and those guys did their stuff in a week or so.)</p>
 
 
-<hr><b>February 12, 2012</b>
+<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
@@ -228,7 +2200,8 @@ patches pending on the mailing list I need to review and merge.</p>
 <p>More to come...</p>
 
 <hr>
-<p><b>November 15, 2011</b> - Back from the dead, Toybox is now under a 2
+<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>