<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd"> 

<HTML>
<HEAD>
<TITLE>BusyBox</TITLE>
</HEAD>

<body text="#000000" alink="#660000" link="#660000" bgcolor="#dee2de" vlink="#660000">

<basefont face="lucida, helvetica, arial" size="3">


<CENTER>
      <TABLE BORDER=0 CELLSPACING=1 CELLPADDING=2>
	    <TR>
		<td bgcolor="#000000">
		  <FONT FACE="lucida, helvetica" COLOR="#ccccc0">
		      <B>B&nbsp;u&nbsp;s&nbsp;y&nbsp;B&nbsp;o&nbsp;x</B>
		  </FONT>
		</TD>
	    </TR>
      </TABLE>
      <a href="/"><IMG SRC="images/busybox2.jpg" alt="BusyBox" border="0" width="360" height="230"</a><BR>


<TABLE WIDTH=95% CELLSPACING=1 CELLPADDING=4 BORDER=1>

<!-- Begin Older News section -->

<TR><TD BGCOLOR="#ccccc0" ALIGN=center>
    <A NAME="news">
    <BIG><B>
    Older BusyBox News</A> 
    </B></BIG>
    </A>
</TD></TR>
<TR><TD BGCOLOR="#eeeee0">

<ul>

    <p> <li> <b>Take me back to the <a href="/">BusyBox</a> web site.</b>
    <hr>


	  <p>
	  <li><b>26 October 2002 -- BusyBox 0.60.5 released</b><p> 

	    I am very pleased to announce that the BusyBox 0.60.5 (stable)
	    is now available for download.  This is a bugfix release for
	    the stable series to address all the problems that have turned
	    up since the last release.  Unfortunately, the previous release
	    had a few nasty bugs (i.e. init could deadlock, gunzip -c tried
	    to delete source files, cp -a wouldn't copy symlinks, and init
	    was not always providing controlling ttys when it should have).
	    I know I said that the previous release would be the end of the
	    0.60.x series.  Well, it turns out I'm a liar.  But this time I
	    mean it (just like last time ;-).  This will be the last
	    release for the 0.60.x series --  all further development work
	    will be done for the development busybox tree.  Expect the development 
	    version to have its first real release very very soon now...

	    <p>
	    The <a href="downloads/Changelog.full">changelog</a> has all
	    the details.  As usual you can <a href="downloads">download busybox here</a>.
	    <p>Have Fun!
	    <p>

	  <p>
	  <li><b>18 September 2002 -- BusyBox 0.60.4 released</b><p> 

	    I am very pleased to announce that the BusyBox 0.60.4
	    (stable) is now available for download.  This is primarily 
	    a bugfix release for the stable series to address all
	    the problems that have turned up since the last
	    release.  This will be the last release for the 0.60.x series.
	    I mean it this time --  all further development work will be done 
	    on the development busybox tree, which is quite solid now and
	    should soon be getting its first real release.

	    <p>
	    The <a href="downloads/Changelog.full">changelog</a> has all
	    the details.  As usual you can <a href="downloads">download busybox here</a>.
	    <p>Have Fun!
	    <p>


	  <p>
	  <li><b>27 April 2002 -- BusyBox 0.60.3 released</b><p> 

	    I am very pleased to announce that the BusyBox 0.60.3 (stable) is
	    now available for download.  This is primarily a bugfix release
	    for the stable series.  A number of problems have turned up since 
	    the last release, and this should address most of those problems.
	    This should be the last release for the 0.60.x series.  The 
	    development busybox tree has been progressing nicely, and will
	    hopefully be ready to become the next stable release.

	    <p>
	    The <a href="downloads/Changelog">changelog</a> has all
	    the details.  As usual you can <a href="downloads">download busybox here</a>.
	    <p>Have Fun!
	    <p>


	  <p>
	  <li><b>6 March 2002 -- busybox.net now has mirrors!</b><p> 

	    Busybox.net is now much more available, thanks to
	    the fine folks at <a href= "http://i-netinnovations.com/">http://i-netinnovations.com/</a>
	    who are providing hosting for busybox.net and
	    uclibc.org.  In addition, we now have two mirrors:
	    <a href= "http://busybox.linuxmagic.com/">http://busybox.linuxmagic.com/</a>
	    in Canada and 
	    <a href= "http://busybox.csservers.de/">http://busybox.csservers.de/</a>
	    in Germany.  I hope this makes things much more
	    accessible for everyone!


      <li>
	<b>3 January 2002 -- Welcome to busybox.net!</b> 

	<p>Thanks to the generosity of a number of busybox
	users, we have been able to purchase busybox.net
	(which is where you are probably reading this).
	Right now, busybox.net and uclibc.org are both
	living on my home system (at the end of my DSL
	line). I apologize for the abrupt move off of
	busybox.lineo.com. Unfortunately, I no longer have
	the access needed to keep that system updated (for
	example, you might notice the daily snapshots there
	stopped some time ago).</p>

	<p>Busybox.net is currently hosted on my home
	server, at the end of a DSL line. Unfortunately,
	the load on them is quite heavy. To address this,
	I'm trying to make arrangements to get busybox.net
	co-located directly at an ISP. To assist in the
	co-location effort, <a href=
	"http://www.codepoet.org/~markw">Mark Whitley</a>
	(author of busybox sed, cut, and grep) has donated
	his <a href=
	"http://www.netwinder.org/">NetWinder</a> computer
	for hosting busybox.net and uclibc.org. Once this
	system is co-located, the current speed problems
	should be completely eliminated. Hopefully, too,
	some of you will volunteer to set up some mirror
	sites, to help to distribute the load a bit.</p>

	<p><!-- 
	    <center>
	    Click here to help support busybox.net!
	    <form action="https://www.paypal.com/cgi-bin/webscr" method="post">
	    <input type="hidden" name="cmd" value="_xclick">
	    <input type="hidden" name="business" value="andersen@codepoet.org">
	    <input type="hidden" name="item_name" value="Support Busybox">
	    <input type="hidden" name="image_url" value="https://codepoet-consulting.com/images/busybox2.jpg">
	    <input type="hidden" name="no_shipping" value="1">
	    <input type="image" src="images/donate.png" border="0" name="submit" alt="Make donation using PayPal">
	    </form>
	    </center>
	    -->
	 Since some people expressed concern over BusyBox
	donations, let me assure you that no one is getting
	rich here. All BusyBox and uClibc donations will be
	spent paying for bandwidth and needed hardware
	upgrades. For example, Mark's NetWinder currently
	has just 64Meg of memory. As demonstrated when
	google spidered the site the other day, 64 Megs in
	not enough, so I'm going to be ordering 256Megs of
	ram and a larger hard drive for the box today. So
	far, donations received have been sufficient to
	cover almost all expenses. In the future, we may
	have co-location fees to worry about, but for now
	we are ok. A <b>HUGE thank-you</b> goes out to
	everyone that has contributed!<br>
	 -Erik</p>
      </li>

      <li>
	<b>20 November 2001 -- BusyBox 0.60.2 released</b> 

	<p>We am very pleased to announce that the BusyBox
	0.60.2 (stable) is now released to the world. This
	one is primarily a bugfix release for the stable
	series, and it should take care of most everyone's
	needs till we can get the nice new stuff we have
	been working on in CVS ready to release (with the
	wonderful new buildsystem). The biggest change in
	this release (beyond bugfixes) is the fact that msh
	(the minix shell) has been re-worked by Vladimir N.
	Oleynik (vodz) and so it no longer crashes when
	told to do complex things with backticks.</p>

	<p>This release has been tested on x86, ARM, and
	powerpc using glibc 2.2.4, libc5, and uClibc, so it
	should work with just about any Linux system you
	throw it at. See the <a href=
	"downloads/Changelog">changelog</a> for <small>most
	of</small> the details. The last release was
	<em>very</em> solid for people, and this one should
	be even better.</p>

	<p>As usual BusyBox 0.60.2 can be downloaded from
	<a href=
	"downloads">http://www.busybox.net/downloads</a>.</p>

	<p>Have Fun.<br>
	 -Erik</p>
      </li>

    <li> <b>18 November 2001 -- Help us buy busybox.net!</b>
    
    <!-- Begin PayPal Logo -->
    <center>
    Click here to help buy busybox.net!
    <form action="https://www.paypal.com/cgi-bin/webscr" method="post">
	<input type="hidden" name="cmd" value="_xclick">
	<input type="hidden" name="business" value="andersen@codepoet.org">
	<input type="hidden" name="item_name" value="Support Busybox">
	<input type="hidden" name="image_url" value="https://busybox.net/images/busybox2.jpg">
	<input type="hidden" name="no_shipping" value="1">
	<input type="image" src="images/donate.png" border="0" name="submit" alt="Make donation using PayPal">
    </form>
    </center>
    <!-- End PayPal Logo -->

    I've contacted the current owner of busybox.net and he is willing
    to sell the domain name -- for $250.  He also owns busybox.org but
    will not part with it...  I will then need to pay the registry fee
    for a couple of years and start paying for bandwidth, so this will
    initially cost about $300.  I would like to host busybox.net on my
    home machine (codepoet.org) so I have full control over the system,
    but to do that would require that I increase the level of bandwidth 
    I am paying for.  Did you know that so far this month, there
    have been over 1.4 Gigabytes of busybox ftp downloads?  I don't
    even <em>know</em> how much CVS bandwidth it requires.  For the
    time being, Lineo has continued to graciously provide this
    bandwidth, despite the fact that I no longer work for them.  If I 
    start running this all on my home machine, paying for the needed bandwidth 
    will start costing some money.
    <p>

    I was going to pay it all myself, but my wife didn't like that
    idea at all (big surprise).   It turns out &lt;insert argument
    where she wins and I don't&gt; she has better ideas 
    about what we should spend our money on that don't involve
    busybox.  She suggested I should ask for contributions on the
    mailing list and web page.  So...
    <p>

    I am hoping that if everyone could contribute a bit, we could pick
    up the busybox.net domain name and cover the bandwidth costs.  I
    know that busybox is being used by a lot of companies as well as
    individuals -- hopefully people and companies that are willing to 
    contribute back a bit.  So if everyone could please help out, that 
    would be wonderful!
    <p>


    <li> <b>23 August 2001 -- BusyBox 0.60.1 released</b>
    <br>

	     This is a relatively minor bug fixing release that fixes
	     up the bugs that have shown up in the stable release in
	     the last few weeks.  Fortunately, nothing <em>too</em>
	     serious has shown up.  This release only fixes bugs -- no
	     new features, no new applets.  So without further ado,
	     here it is.  Come and get it.
	     <p>
	     The 
	     <a href="downloads/Changelog">changelog</a> has all
	     the details.  As usual BusyBox 0.60.1 can be downloaded from 
	     <a href="downloads">http://busybox.net/downloads</a>.
	     <p>Have Fun!
	     <p>


    <li> <b>2 August 2001 -- BusyBox 0.60.0 released</b>
    <br>
	     I am very pleased to announce the immediate availability of
	     BusyBox 0.60.0.  I have personally tested this release with libc5, glibc,
	     and <a href="http://uclibc.org/">uClibc</a> on
	     x86, ARM, and powerpc using linux 2.2 and 2.4, and I know a number
	     of people using it on everything from ia64 to m68k with great success.
	     Everything seems to be working very nicely now, so getting a nice
	     stable bug-free(tm) release out seems to be in order.   This releases fixes
	     a memory leak in syslogd, a number of bugs in the ash and msh shells, and
	     cleans up a number of things.
	     
	     <p>

	     Those wanting an easy way to test the 0.60.0 release with uClibc can 
	     use <a href="http://user-mode-linux.sourceforge.net/">User-Mode Linux</a>
	     to give it a try by downloading and compiling 
	     <a href="ftp://busybox.net/buildroot.tar.gz">buildroot.tar.gz</a>.
	     You don't have to be root or reboot your machine to run test this way.
	     Preconfigured User-Mode Linux kernel source is also on busybox.net.
	     <p>
	     Another cool thing is the nifty <a href="downloads/tutorial/index.html">
	     BusyBox Tutorial</a> contributed by K Computing.  This requires 
	     a ShockWave plugin (or standalone viewer), so you may want to grab the 
	     the GPLed shockwave viewer from <a href="http://www.swift-tools.com/Flash/flash-0.4.10.tgz">here</a>
	     to view the tutorial.
	     <p>
	     
	     Finally, In case you didn't notice anything odd about the
	     version number of this release, let me point out that this release
	     is <em>not</em> 0.53, because I bumped the version number up a
	     bit.  This reflects the fact that this release is intended to form
	     a new stable BusyBox release series.  If you need to rely on a
	     stable version of BusyBox, you should plan on using the stable
	     0.60.x series.  If bugs show up then I will release 0.60.1, then
	     0.60.2, etc...  This is also intended to deal with the fact that
	     the BusyBox build system will be getting a major overhaul for the
	     next release and I don't want that to break products that people
	     are shipping.  To avoid that, the new build system will be
	     released as part of a new BusyBox development series that will
	     have some not-yet-decided-on odd version number.  Once things
	     stabilize and the new build system is working for everyone, then
	     I will release that as a new stable release series. 

	     <p>
	     The 
	     <a href="downloads/Changelog">changelog</a> has all
	     the details.  As usual BusyBox 0.60.0 can be downloaded from 
	     <a href="downloads">http://busybox.net/downloads</a>.
	     <p>Have Fun!
	     <p>


    <li> <b>7 July 2001 -- BusyBox 0.52 released</b>
    <br>

	     I am very pleased to announce the immediate availability of
	     BusyBox 0.52 (the "new-and-improved rock-solid release").  This
	     release is the result of <em>many</em> hours of work and has tons
	     of bugfixes, optimizations, and cleanups.  This release adds
	     several new applets, including several new shells (such as hush, msh,
	     and ash).

	     <p>
	     The 
	     <a href="downloads/Changelog">changelog</a> covers 
	     some of the more obvious details, but there are many many things that
	     are not mentioned, but have been improved in subtle ways.  As usual,
	     BusyBox 0.52 can be downloaded from 
	     <a href="downloads">http://busybox.net/downloads</a>.
	     <p>Have Fun!
	     <p>


	<li> <b>10 April 2001 - Graph of Busybox Growth </b>
	<br> 
	The illustrious Larry Doolittle has made a PostScript chart of the growth
	of the Busybox tarball size over time. It is available for downloading /
	viewing <a href= "busybox-growth.ps"> right here</a>.

	<p> (Note that while the number of applets in Busybox has increased, you
	can still configure Busybox to be as small as you want by selectively
	turning off whichever applets you don't need.)
	<p>


    <li> <b>10 April 2001 -- BusyBox 0.51 released</b>
    <br>

	     BusyBox 0.51 (the "rock-solid release") is now out there.  This
	     release adds only 2 new applets: env and vi.  The vi applet,
	     contributed by Sterling Huxley, is very functional, and is only
	     22k.  This release fixes 3 critical bugs in the 0.50 release.
	     There were 2 potential segfaults in lash (the busybox shell) in
	     the 0.50 release which are now fixed.  Another critical bug in
	     0.50 which is now fixed: syslogd from 0.50 could potentially
	     deadlock the init process and thereby break your entire system.
	     <p>

	     There are a number of improvements in this release as well.  For
	     one thing, the wget applet is greatly improved.  Dmitry Zakharov
	     added FTP support, and Laurence Anderson make wget fully RFC
	     compliant for HTTP 1.1.  The mechanism for including utility
	     functions in previous releases was clumsy and error prone.  Now
	     all utility functions are part of a new libbb library, which makes
	     maintaining utility functions much simpler.  And BusyBox now
	     compiles on itanium systems (thanks to the Debian itanium porters
	     for letting me use their system!).
	     <p>
	     You can read the 
	     <a href="downloads/Changelog">changelog</a> for
	     complete details.  BusyBox 0.51 can be downloaded from 
	     <a href="downloads">http://busybox.net/downloads</a>.
	     <p>Have Fun!
	     <p>

    <li> <b>Busybox Boot-Floppy Image</b>

    <p>Because you asked for it, we have made available a <a href=
    "downloads/busybox.floppy.img"> Busybox boot floppy
    image</a>. Here's how you use it:

    <ol>

	    <li> <a href= "downloads/busybox.floppy.img">
	    Download the image</a>

	    <li> dd it onto a floppy like so: <tt> dd if=busybox.floppy.img
	    of=/dev/fd0 ; sync </tt>

	    <li> Pop it in a machine and boot up.

    </ol>

    <p> If you want to look at the contents of the initrd image, do this:

    <pre>
	    mount ./busybox.floppy.img /mnt -o loop -t msdos        
	    cp /mnt/initrd.gz /tmp                          
	    umount /mnt           
	    gunzip /tmp/initrd.gz
	    mount /tmp/initrd /mnt -o loop -t minix
    </pre>


    <li> <b>15 March 2001 -- BusyBox 0.50 released</b>
    <br>

	     This release adds several new applets including ifconfig, route, pivot_root, stty,
	     and tftp, and also fixes tons of bugs.  Tab completion in the
	     shell is now working very well, and the shell's environment variable
	     expansion was fixed.   Tons of other things were fixed or made
	     smaller.  For a fairly complete overview, see the 
	     <a href="downloads/Changelog">changelog</a>.
	     <p>
	     lash (the busybox shell) is still with us, fixed up a bit so it
	     now behaves itself quite nicely.  It really is quite usable as
	     long as you don't expect it to provide Bourne shell grammer.
	     Standard things like pipes, redirects, command line editing, and
	     environment variable expansion work great.  But we have found that
	     this shell, while very usable, does not provide an extensible
	     framework for adding in full Bourne shell behavior.  So the first order of
	     business as we begin working on the next BusyBox release will be to merge in the new shell
	     currently in progress at 
	     <a href="http://doolittle.faludi.com/~larry/parser.html">Larry Doolittle's website</a>.   
	     <p>


    <li> <b>27 January 2001 -- BusyBox 0.49 released</b>
    <br>

	     Several new applets, lots of bug fixes, cleanups, and many smaller 
	     things made nicer.  Several cleanups and improvements to the shell.
	     For a list of the most interesting changes 
	     you might want to look at the <a href="downloads/Changelog">changelog</a>. 
	     <p>
	     Special thanks go out to Matt Kraai and Larry Doolittle for all their
	     work on this release, and for keeping on top of things while I've been 
	     out of town.
	     <p>
	     <em>Special Note</em><br>

	     BusyBox 0.49 was supposed to have replaced lash, the BusyBox
	     shell, with a new shell that understands full Bourne shell/Posix shell grammer.
	     Well, that simply didn't happen in time for this release.  A new
	     shell that will eventually replace lash is already under
	     construction.  This new shell is being developed by Larry
	     Doolittle, and could use all of our help.  Please see the work in
	     progress on <a href="http://doolittle.faludi.com/~larry/parser.html">Larry's website</a> 
	     and help out if you can.  This shell will be included in the next 
	     release of BusyBox.
	     <p>

    <li> <b>13 December 2000 -- BusyBox 0.48 released</b>
    <br>

	     This release fixes lots and lots of bugs.  This has had some very
	     rigorous testing, and looks very, very clean.  The usual tar
	     update of course: tar no longer breaks hardlinks, tar -xzf is
	     optionally supported, and the LRP folks will be pleased to know
	     that 'tar -X' and 'tar --exclude' are both now in.  Applets are
	     now looked up using a binary search making lash (the busybox
	     shell) much faster.  For the new debian-installer (for Debian
	     woody) a .udeb can now be generated.  
	     <p>
	     The curious can get a list of some of the more interesting changes by reading 
	     the <a href="downloads/Changelog">changelog</a>. 
	     <p>
	     Many thanks go out to the many many people that have contributed to 
	     this release, especially Matt Kraai, Larry Doolittle, and Kent Robotti.
	     <p>
    <p> <li> <b>26 September 2000 -- BusyBox 0.47 released</b>
    <br>

	     This release fixes lots of bugs (including an ugly bug in 0.46
	     syslogd that could fork-bomb your system).  Added several new
	     apps: rdate, wget, getopt, dos2unix, unix2dos, reset, unrpm, 
	     renice, xargs, and expr.  syslogd now supports network logging.
	     There are the usual tar updates.  Most apps now use getopt for
	     more correct option parsing.
	     See the <a href="downloads/Changelog">changelog</a> 
	     for complete details.


    <p> <li> <b>11 July 2000 -- BusyBox 0.46 released</b>
    <br>

	     This release fixes several bugs (including a ugly bug in tar,
	     and fixes for NFSv3 mount support).  Added a dumpkmap to allow 
	     people to dump a binary keymaps for use with 'loadkmap', and a
	     completely reworked 'grep' and 'sed' which should behave better.
	     BusyBox shell can now also be used as a login shell.
	     See the <a href="downloads/Changelog">changelog</a> 
	     for complete details.


    <p> <li> <b>21 June 2000 -- BusyBox 0.45 released</b>
    <br>

	     This release has been slow in coming, but is very solid at this
	     point.  BusyBox now supports libc5 as well as GNU libc.  This
	     release provides the following new apps: cut, tr, insmod, ar,
	     mktemp, setkeycodes, md5sum, uuencode, uudecode, which, and
	     telnet.  There are bug fixes for just about every app as well (see
	     the <a href="downloads/Changelog">changelog</a> for
	     details).
	     <p>
	     Also, some exciting infrastructure news!  Busybox now has its own 
	     <a href="lists/busybox/">mailing list</a>, 
	     publically browsable
	     <a href="/cgi-bin/cvsweb/busybox/">CVS tree</a>,  
	     anonymous
	     <a href="cvs_anon.html">CVS access</a>, and
	     for those that are actively contributing there is even 
	     <a href="cvs_write.html">CVS write access</a>.
	     I think this will be a huge help to the ongoing development of BusyBox.
	     <p>
	     Also, for the curious, there is no 0.44 release.  Somehow 0.44 got announced
	     a few weeks ago prior to its actually being released.  To avoid any confusion
	     we are just skipping 0.44.
	     <p>
	     Many thanks go out to the many people that have contributed to this release
	     of BusyBox (esp. Pavel Roskin)!


    <p> <li> <b>19 April 2000 -- syslogd bugfix</b>
    <br>
        Turns out that there was still a bug in busybox syslogd.
	For example, with the following test app:
<pre>
	#include &lt;syslog.h&gt;

	int do_log(char* msg, int delay)
	{
	    openlog("testlog", LOG_PID, LOG_DAEMON);
	    while(1) {
	        syslog(LOG_ERR, "%s: testing one, two, three\n", msg);
	        sleep(delay);
	    }
	    closelog();
	    return(0);
	};

	int main(void)
	{
	    if (fork()==0)
	        do_log("A", 2);
	    do_log("B", 3);
	}
</pre>
	it should be logging stuff from both "A" and "B".  As released in 0.43 only stuff
	from "A" would have been logged.  This means that if init tries to log something
	while say ppp has the syslog open, init would block (which is bad, bad, bad).
	<p>
	Karl M. Hegbloom has created a fix for the problem. 
	Thanks Karl!


    <p> <li> <b>18 April 2000 -- BusyBox 0.43 released (finally!)</b>
    <br>
        I have finally gotten everything into a state where I feel pretty
	good about things.  This is definitely the most stable, solid release
	so far.  A lot of bugs have been fixed, and the following new apps
	have been added: sh, basename, dirname, killall, uptime, 
	freeramdisk, tr, echo, test, and usleep.  Tar has been completely
	rewritten from scratch.  Bss size has also been greatly reduced.
	More details are available in the 
	<a href="downloads/Changelog">changelog</a>.
	Oh, and as a special bonus, I wrote some fairly comprehensive
	<em>documentation</em>, complete with examples and full usage information.

	<p>
	Many thanks go out to the fine people that have helped by submitting patches
	and bug reports; particularly instrumental in helping for this release were 
	Karl Hegbloom, Pavel Roskin, Friedrich Vedder, Emanuele Caratti,
	Bob Tinsley, Nicolas Pitre, Avery Pennarun, Arne Bernin, John Beppu, and Jim Gleason.
	There were others so if I somehow forgot to mention you, I'm very sorry.
	<p>

	You can grab BusyBox 0.43 tarballs <a href="downloads">here</a>.

    <p> <li> <b>9 April 2000 -- BusyBox 0.43 pre release</b>
    <br>
        Unfortunately, I have not yet finished all the things I want to
        do for BusyBox 0.43, so I am posting this pre-release for people
        to poke at.  This contains my complete rewrite of tar, which now weighs in at
        5k (7k with all options turned on) and works for reading and writing
        tarballs (which it does correctly for everything I have been able to throw
        at it).  Tar also (optionally) supports the "--exclude" option (mainly because
        the Linux Router Project folks asked for it).  This also has a pre-release
        of the micro shell I have been writing.  This pre-release should be stable
        enough for production use -- it just isn't a release since I have some structural
        changes I still want to make.
        <p>
	The pre-release can be found <a href="downloads">here</a>.
	Please let me know ASAP if you find <em>any</em> bugs.
    
    <p> <li> <b>28 March 2000 -- Andersen Baby Boy release</b>
    <br>
	I am pleased to announce that on Tuesday March 28th at 5:48pm, weighing in at 7
	lbs. 12 oz, Micah Erik Andersen was born at LDS Hospital here in Salt Lake City.
	He was born in the emergency room less then 5 minutes after we arrived -- and
	it was such a relief that we even made it to the hospital at all.  Despite the
	fact that I was driving at an amazingly unlawful speed and honking at everybody
	and thinking decidedly unkind thoughts about the people in our way, my wife
	(inconsiderate of my feelings and complete lack of medical training) was lying
	down in the back seat saying things like "I think I need to start pushing now"
	(which she then proceeded to do despite my best encouraging statements to the
	contrary).
	<p>
	Anyway, I'm glad to note that despite the much-faster-than-we-were-expecting
	labor, both Shaunalei and our new baby boy are doing wonderfully.
	<p>
	So now that I am done with my excuse for the slow release cycle...
	Progress on the next release of BusyBox has been slow but steady.  I expect
	to have a release sometime during the first week of April.  This release will
	include a number of important changes, including the addition of a shell, a 
	re-write of tar (to accommodate the Linux Router Project), and syslogd can now
	accept multiple concurrent connections, fixing lots of unexpected blocking 
	problems.


    <p> <li> <b>11 February 2000 -- BusyBox 0.42 released</b>
    <br>

	     This is the most solid BusyBox release so far.  Many, many
		bugs have been fixed.   See the 
		<a href="downloads/Changelog">changelog</a> for details.

		Of particular interest, init will now cleanly unmount 
		filesystems on reboot, cp and mv have been rewritten and 
		behave much better, and mount and umount no longer leak 
		loop devices.  Many thanks go out to Randolph Chung, 
		Karl M. Hegbloom, Taketoshi Sano, and Pavel Roskin for 
		their hard work on this release of BusyBox.  Please pound 
		on it and let me know if you find any bugs.

    <p> <li> <b>19 January 2000 -- BusyBox 0.41 released</b>
    <br>

	     This release includes bugfixes to cp, mv, logger, true, false,
		mkdir, syslogd, and init.  New apps include wc, hostid, 
		logname, tty, whoami, and yes.  New features include loop device
		support in mount and umount, and better TERM handling by init.
		The changelog can be found <a href="downloads/Changelog">here</a>.

    <p> <li> <b>7 January 2000 -- BusyBox 0.40 released</b>
    <br>

	     This release includes bugfixes to init (now includes inittab support),
	     syslogd, head, logger, du, grep, cp, mv, sed, dmesg, ls, kill, gunzip, and mknod.
	     New apps include sort, uniq, lsmod, rmmod, fbset, and loadacm.
	     In particular, this release fixes an important bug in tar which 
	     in some cases produced serious security problems.
	     As always, the changelog can be found <a href="downloads/Changelog">here</a>.

    <p> <li> <b>11 December 1999 -- BusyBox Website</b>
    <br>
	     I have received permission from Bruce Perens (the original author of BusyBox)
		to set up this site as the new primary website for BusyBox.  This website
		will always contain pointers to the latest and greatest, and will also 
		contain the latest documentation on how to use BusyBox, what it can do,
		what arguments its apps support, etc.

    <p> <li> <b>10 December 1999 -- BusyBox 0.39 released</b>
    <br>
	     This release includes fixes to init, reboot, halt, kill, and ls, and contains 
	     the new apps ping, hostname, mkfifo, free, tail, du, tee, and head.  A full
	     changelog can be found <a href="downloads/Changelog">here</a>.
    <p> <li> <b>5 December 1999 -- BusyBox 0.38 released</b>
    <br>
	     This release includes fixes to tar, cat, ls, dd, rm, umount, find, df, 
		and make install, and includes new apps syslogd/klogd and logger. 
</ul>


<!-- Begin Links section -->

<TR><TD BGCOLOR="#ccccc0" ALIGN=center>
    <A NAME="links">
    <BIG><B>
    Important Links</A> 
    </B></BIG>
    </A>
</TD></TR>
<TR><TD BGCOLOR="#eeeee0">

<ul> 

    <li> <a href="/">Take me back to http://busybox.net/</a>.
    <p>

    <li>  <A HREF="http://perens.com/FreeSoftware/">
    Free Software from Bruce Perens</A><br>
    The original idea for BusyBox, and all versions up to 0.26 were written 
    by <A HREF="mailto:bruce@perens.com">Bruce Perens</a>.  This is his BusyBox website.
    <p>

    <li>  <A HREF="http://freshmeat.net/appindex/1999/04/11/923859921.html">
    Freshmeat AppIndex record for BusyBox</A>
    <p>

</ul>


<!-- End of Table -->

</TD></TR>
</TABLE>
</P>



<!-- Footer -->
<HR>
<TABLE WIDTH="100%">
    <TR>
	<TD>
	    <font size="-1" face="arial, helvetica, sans-serif">
	    Mail all comments, insults, suggestions and bribes to 
	    <a href="mailto:andersen@codepoet.org">Erik Andersen</a><BR>
	    The Busybox logo is copyright 1999-2002, Erik Andersen.
	    </font>
	</TD>

	<TD>
	    <a href="http://www.vim.org"><img border=0 width=88 height=32
	    src="images/anim.written.in.vi.gif" 
	    alt="This site created with the vi editor"></a>
	</TD>

	<TD>
	    <a href="http://www.gimp.org/"><img border=0 width=88 height=38
	    src="images/gfx_by_gimp.gif" alt="Graphics by GIMP"></a>
	</TD>

	<TD>
	    <a href="http://www.linuxtoday.com"><img width=90 height=36
	    src="images/ltbutton2.jpg" alt="Linux Today"></a>
	</TD>

	<TD>
	    <p><a href="http://slashdot.org"><img width=90 height=36
	    src="images/sdsmall.gif" alt="Slashdot"></a>
	</TD>

	<TD>
	    <a href="http://freshmeat.net"><img width=90 height=36
	    src="images/fm.mini.jpg" alt="Freshmeat"></a>
	</TD>

    </TR>
</TABLE>


</BODY>
</HTML>

