0.42
	* Made tar creation support in busybox tar optional.

	-Erik Andersen

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.
	
