0.41
	* New Apps: wc, hostid, logname, tty, whoami, yes -- all contributed 
	    by Edward Betts <edward@debian.org>
	* Fixed a bug in both cp and mv preventing 'cp foo/README bar'
	    type commands (file in a directory to another directory) 
	    from working.
	* Fixed a logger bug that caused garbage to be written to the syslog 
	    (unless you used busybox syslog, which hid the bug).  Thanks
	    to Alex Holden <alex@linuxhacker.org> for the fix.
	* /bin/true and /bin/false were echoing a blank line when run.  Now fixed.
	* mkdir -p would print an error when asked to mkdir an existing dir
	    with no interveining subdirectories.
	* Fixed "syslogd -O" so that it works.
	* Added -o loop option for mount, and support in umount for loop
	  devices. Support is toggled by MOUNT_LOOP feature -- Ben Collins
	  <bcollins@debian.org>
	* Several fixes from Marco Pantaleoni <panta@prosa.it>
	    * compile in fullWrite() not only if BB_TAR is defined, but also
		if BB_CP or BB_MV are (fullWrite() is referenced by copyFile())
	    * add some compiler optimizations to further reduce executable size
		(as a side note, on my machines the largest code is generated by
		gcc 2.95.2 with -Os ! The smallest by plain gcc 2.7.2.3 with -O2
		-m386 ...)
	    * Compile no longer fails if busybox.def.h defines BB_FEATURE_LINUXRC 
		but not BB_INIT.  (init_main used to be referenced, but not compiled)
	* Fixed a bug in setting TERM for serial console support.  TERM now
	    defaults to "ansi" for serial consoles.
	* Fixed a bug in handling the CONSOLE env. variable for serial consoles.

	-Erik Andersen, Jan 15, 2000

0.40
	* New Apps: sort, uniq. -beppu
	* New Apps: lsmod, rmmod -erik
	* New Apps: fbset contributed by Randolph Chung <tausq@debian.org>.
	* New App:: loadacm contributed by Peter Novodvorsky <petya@logic.ru>
	    for loading application character maps for Unicode fonts.
	* Major init re-work.  init now supports inittab (slightly different
	    but similar to sysvinit), allowing me to get all the policy out
	    of init and into the conf file.  It works just fine without inittab
	    being present, but if you dont like the defautl behavior you can
	    now do something about it.  Init is much cleaner as a result.
	* Fixed an bug in syslogd causing it to stop after 20 minutes. -erik
	* Fixed an embarrasing segfault in head	-beppu
	* Fixed the embarrasing failure of 'logger -p'. -erik
	* Added the -s option to du -beppu
	* Re-worked the source tree a bit so it will compile under glibc 2.0.7 
	    with the 2.0.x Linux kernel.
	* Added 'grep -q' thanks to a patch from "Konstantin Boldyshev" 
	    <konst@voshod.com>.
	* Grep -i previously failed on UPPER CASE patterns due to a silly 
	    regexp implementation bug that is now fixed.
	* Fixed a bug where tar would set, and then clear SGID and SUID bits.
	* Fixed a bug where tar would not set the user and group on device
	    special files.
	* Fixed a bug where tar would not restore the time to files.
	* Fixed a major security problem with tar -- it changed ownership 
	    of any file pointed to by a symlink to 777 (like say libc....)
	    Ouch!!!
	* cp and mv were very broken when moving directories.  I have rewritten 
	    them so they should now work as expected. 
	* sed now supports addresses (numeric or regexp, with negation) and 
	    has an append command, thanks to Marco Pantaleoni <panta@prosa.it>
	* Fixed dmesg.  It wasn't parsing its options (-n or -s) properly.  
	* Some cosmetic fixes to ls output formatting to make it behave more
	    like GNU ls.
	* Fixed a stupid segfault in kill.
	* Several fixes from Friedrich Vedder <fwv@myrtle.lahn.de>:
	    - Added gunzip -t, removed gunzip.c dead code,
	    - fixed several typos
	    - Glibc 2.0.7 and libc5 compile fixes
	* Fixed a bug where 'mknod --help' would segfault.
	    

	-Erik Andersen, Jan 07, 2000

0.39 
	* New Apps: ping, hostname, and mkfifo contributed by Randolph Chung
	    <tausq@debian.org>.  3 items off the TODO list!
	* I wrote free (just calls "cat /proc/meminfo").
	* Added tail, based on tail from GNU textutils-1.19, but adjusted
	    to suit my evil purposes.  Costs 6k.  I'll make it smaller sometime.
	* on reboot, init called 'umount -a -n', which caused errors
	    when BB_MTAB was not enabled.  Changed to 'umount -a',
	    which does the right thing.
	* init will now try to run /sbin/getty if it is present (for easy
	    integration with the about-to-be-released tinylogin.)
	* kill now behaves itself properly, added 'kill -l' to list signals
	* 'ls -l' was failing on long directories, since my_getid was leaking 
	    one file descriptor per file.  Oops.
	* Fixed rebooting from init.  I'd accidently left some debugging code in
	    which blocked reboots.
	* Fixed reboot, halt (and added poweroff) such that they handle it when
	    init is not at PID 1 (like when running in an initrd).
	* Added a prelinary du implementation.  Some parameter parsing
	    stuff still needs to be added. -beppu (John Beppu <beppu@lineo.com>)
	* Implemented tee.  -beppu
	* Implemented head. -beppu

	-Erik Andersen, Dec 10, 1999

0.38
	* Fixed a segfault in 'umount -a' when a badly formed /etc/fstab
	    file existed.
	* df will not exit on error, but will stat all mounted filesystems.
	* Fixed tar so uid/gid/permissions on extracted tarballs will be correct.
	* Fixed find -name so it properly uses shell wildcard patterns 
	    (i.e. `*', `?', and `[]') instead of regular expressions, which
	    was causing some confusing and unexpected behavior.
	* Added klogd to syslogd, so now the log will contain both system and
	    kernel messages.
	* syslogd now creates the /dev/log socket to make sure it is there, and
	    is actually a socket with the right permissions.
	* I've taken a first step to making busybox not need the /proc 
	    filesystem.  Most apps don't need it.  Those that _require_ it, 
	    will complain if you enable them when you disable 
	    BB_FEATURE_USE_PROCFS.
	   
	-Erik Andersen, Dec 5, 1999

0.37
	* Wrote a micro syslogd, and a logger util (to log things to the syslog
	    from the command line or scripts)  With both compiled in, costs 4k.
	* Fixed 'make install' so symlinks are installed in their proper locations.
	* Changed the build system slightly so that features can now be enabled
	    or disabled from the busybox.defs.h header file, without trying to 
	    compile in a source file named after that featue (unless that file exists).
	* Several options are now moved into busybox.defs.h
	* Now 'rm -R' and 'rm -r' both work.
	* dd now properly handles input beyond 1 block from stdin.
	* Fixed a bug where tar unpacked everything a directories. Moved some code 
	    from createPath into mkdir where it belonged, thereby making tar work properly.
	* Fixed an off-by-one bug in cat.  Given a list of file it wouldn't cat out the
	    last file in the list.
	* Fixed 'ls -ln' so numeric group/uid are presented properly, and fixed 'ls -l' 
	    so when uid/gid is not in /etc/{passwd,group} the numeric group/uid are 
	    presented properly.  
	* Also added a TODO.


	-Erik Andersen, Nov 25, 1999

0.36
	* fixed dd so it properly defaults to stdin and stdout when no 
	    if= and of= are set (fix thanks to Eric Delaunay).
	* Don't try to close the file descriptor of a pipein tar. (fix also from
	    Eric Delaunay).
	* Made createPath be quiet (again thanks to Eric Delaunay).
	* If BB_CONSOLE_CMD_IF_RC_SCRIPT_EXITS is defined, then whatever
	    command you define it as will be run if the init script exits.
	* Updated install.sh to make it more robust (thanks to Adam Di Carlo)
	* NFS support added to mount by Eric Delaunay.  It costs 10k when compiled
	    in, but that is still a big win for those that use NFS.
	* Made 'rm -f' be silent for non-existant files (thanks to Eric Delaunay).
	* changed zcat.c to gunzip.c.  It now obeys the principle of least surprise 
	    and acts as god intended gunzip and zcat to act.  They answer --help and
	    obey the '-c' flag.
	* Fixed a bug in mv which caused it to not move files when the destination
	    was a directory.
	* Fixed a decimal-instead-of-octal bug causing mkdir to make directories
	    with very wrong permissions.
	* chmod would overwrite file permissions instead of modifying them.
	    Now it properly modifies permissions.
	* Init now sends warnings destined for the console to /dev/console to ensure
	    they show up on whatever the active console it.  Otherwise important
	    messages (for example that the system is rebooting) were not seen when
	    switched to a different VT.

	-Erik Andersen, Nov 17, 1999
	
0.35
	* gzip now obeys the principle of least surprise and acts like god intended 
	    (i.e. it accepts a file name, answers --help, and obeys the '-c' flag 
	    and only then outputs to stdout).
	* Fixed more.c to compile autowidth on sparc and set initial winsize 
	    to 0,0 in case the TIOCGWINSZ ioctl fails.  Fix thanks to Eric Delaunay.
	* Fixed tar so it now works as expected (it had TRUE/FALSE backwards)
	* tar now accepts --help
	* chmod, chown, and chgrp usage now works
	* General usage (i.e. --help) cleanups for most apps
	* umount now parses options correctly
	* tar can now unpack tarballs containing device special files, 
	    sockets, and fifos (though it can't pack them up) thanks 
	    to Matt Porter.  Creating archives containing these is still
	    left to the interested student.
	* fixed up the license in more.c to properly point to Bruce Perens.

	-Erik Andersen, Nov  11, 1999

0.34
	* ls -l now displays link names outside the current directory,
	    Patch thanks to Eric Delaunay
	* init now properly handles sparc serial consoles and does a
	    better job of finding the real console device rather than using
	    /dev/console which doesn't support job control. Patch also
	    thanks to Eric Delaunay.
	* more started to read from stdin after the last file was finished, and 
	    options were not parsed correctly (fix thanks to Eric Delaunay).
	* more will now use the terminal size if BB_FEATURE_AUTOWIDTH is on.
	* rm wouldn't remove a symlink unless the symlink was valid.  This was
	    a side effect of the busybox 0.32 recursiveAction() fix.  Things 
	    should now work correctly.
	* grep wouldn't grep stdin.  Now it does.
	* sed wouldn't sed stdin.  Now it does.
	* sed was appending a \n to the end of lines with replacements.
	    Now it doesn't do that.
	* ls -l now bypasses libc6 nss when displaying user/group names.
	    Now uses my_getpwuid and my_getgrgid.

	 -Erik Andersen, Nov  8, 1999

0.33
	* Fixed a bug where init could hang instead of rebooting.
	* Removed some debugging noise from init.c
	* Fixed ln so it works now (it was very broken).
	* Fixed df so it won't segfault when there is no /etc/fstab,
	* If BB_MTAB is not defined, df and mount will whine if /etc/fstab
	    is not installed (since they cannot fixup "/dev/root" to 
	    state the real root device name)
	* merged some redundant code from mtab.c/df.c into utility.c

	 -Erik Andersen, Nov  5, 1999

0.32
	* More changes -- many thanks to Lineo for paying me to work on
	    busybox.  If you have any problems please let me know ASAP
	    at andersen@lineo.com or andersee@debian.org
	* usage() now prints the BusyBox version.  This will help folks
	    realize that they are not in Kansas anymore.
	* Fixed mkdir -m option so that it works.
	* kill segfaulted w/o any arguments.  Now it doesn't do that.
	* kill wasn't properly accepting signal names.  It does now.
	* Added new apps chvt and deallocvt (I should probably add open)
	* Major rewrite of init.c.  Code is now readable by mere mortals IMHO.
	* Wrote sed -- weighs only 1.8k (5.8k with full regular expressions!).
	* Fixed a stupid seg-fault in sync
	* Fixed mount -- mount -a failed to parse and apply mount options
	* Fixed umount -n (patch thanks to Matthew Grant <grantma@anathoth.gen.nz>)
	* umount -a no longer umounts /proc
	* Added BB_MTAB, allowing (at the cost of ~1.5k and the need for a rw /etc)
	    folks to use a real /etc/mtab file instead of a symlink to /proc/mounts.
	    mount, and umount will add/remove entries and df will now use /etc/mtab 
	    if BB_MTAB is defined. 
	* Fixed a nice bug in recursiveAction() which caused it to infinitely
	    hunt through /proc/../fd/* creating new file descriptors if it
	    followed the /dev/fd link over to /proc.  recursiveAction() now 
	    lstat's the file when followLinks==FALSE so it won't follow links 
	    as the name suggests.  Fix thanks to Matt Porter <porter@debian.org>.


	 -Erik Andersen, Nov  4, 1999

0.31
	* I added a changelog for version 0.30. 
	* adjusted find internals to make it smaller, and removed 
	    some redundancy.
	* Fixed a segfault in ps when /etc/passwd or /etc/group 
	    are absent.  Now will warn you and carry on.
	* Added in optional _real_ regular expression support (to be
	    the basis for a future sed utility).  When compiled in
	    it adds 3.9k, but makes grep much more capable.
	* Checked out using nftw(3) for recursive stuff, but unfortunatly
	    it wasn't supported before GNU libc 2.1, and some folks use
	    glibc 2.0.7 since it is much smaller than that latest and greatest.

	 -Erik Andersen, Oct 21, 1999

0.30
	Major changes -- lots of stuff rewritten. Many thanks to Lineo for
	paying me to make these updates. If you have any problems with busybox, 
	or notice any bugs -- please let me know so I can fix it.  These 
	changes include:

	Core Changes:
	    * busybox can now invoke apps in two ways: via symlinks to the
		busybox binary, and as 'busybox [function] [arguments]...'
	    * When invoked as busybox, the list of currently compiled in 
		functions is printed out (no this is not bloat -- the list
		has to be there anyway to map invocation name to function).
	    * busybox no longer parses command lines for apps or displays their
		usage info.  Each app gets to handle (or not handle) this for
		itself.
	    * Eliminated monadic, dyadic, descend, block_device, and 
		postprocess.  It was cumbersome to have so many programs
		cobbled together in this way.  Without them, the app is much
		more granular.
	    * All shared code now lives in utility.c, and is properly
		ifdef'ed to be only included for those apps requiring it.
	    * Eliminated struct FileInfo (the basis of monadic, dyadic, etc)
		so now each app has the function prototype of (da-dum):
		    extern int foo_main(int argc, char** argv);
		which speeds integration of new apps.
	    * Adjusted the Makefile to make it easier to 
		{en|dis}able debugging.
	    * Changed default compiler optimization to -Os 
		(optimize for smaller binaries).

	App Changes:
	    * To cope with the new app function prototype and the removal of
		monadic, dyadic, etc, the following apps were re-written:
		    * cat - Works same as always.
		    * chgrp, chmod, chown - rewrite.  Combined into a single 
			source file.  Absorbed patches from Enrique Zanardi <ezanard@debian.org>
			that removes the dependency on libc6 libnss* libraries.
		    * cp - Can now do 'cp -a' can can copy devices,
			pipes, symlinks, as well as recursive or non-recursive dir copies.
		    * fdflush - adjusted to remove dependancy on struct FileInfo.
		    * find - Now includes some basic regexp matching 
			which will be the basic of a future mini-sed.
		    * ln - Same functionality.
		    * mkdir - Added -p flag to feature set.
		    * mv - rewrite.
		    * rm - Added -f flag to feature set.
		    * rmdir - Same functionality.
		    * swapon, swapoff - Combined into a single binary. No longer
			uses /etc/swaps.  swap{on|off} -a uses /etc/fstab instead.
		    * touch - Same functionality.
	    * date - adjusted with a patch from Matthew Grant <grantma@anathoth.gen.nz>
		to accomodate glibc timezone support.  I then ripped out GNU getopt.
	    * mkswap -- new version merged from util-linux.  Can now make >128Meg swaps.
	    * Replaced the old and star, unstar, and tarcat with the tar 
		implementation from sash.   Now tar behaves as god intended
		it to (i.e. tar -xvf <file> and tar -cf <file> <dir> work).
	    * dd -- rewritten.  Can with with files, stdin, stdout.
	    * Added the following new apps:
		    * loadfont -- added from debian boot floppies 
		    * chroot -- added based on a patch from Paolo Molaro <lupus@lettere.unipd.it> 
		    * grep -- I just wrote it.  Only matches simple strings
		    * ps -- I just wrote it.  Has _no_ options at all, but works.
		    * fsck_minix, mkfs_minix -- added from util-linux, but I ripped out
			internationalization and such to make them smaller.
		    * sfdisk -- Added from util-linux (minus internationalization and such).
	    * Probably some other changes that I forgot to document...

	 -Erik Andersen, Oct 20, 1999

0.29	
	This version was a messy pre-alpha.  stay away or it will bite you.
	 -Erik Andersen, Sep 24, 1999
	
0.28	
	mini-netcat (mnc) rewritten.
	
0.27
	Mount now supports -a, and -t auto.
	Mount now updates mtab correctly for 'ro'.
	More checks screen rows size, outputs bytes percentage.
	Printf added as module.
0.26
	Touch now creates files. -c option for no create.
	
