<!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>30 July 2003 -- BusyBox 1.0.0-pre2 released</b><p> 

		Here goes another pre release for the new BusyBox stable
		series.  The last prerelease (pre1) was given quite a lot of
		testing (thanks everyone!) which has helped turn up a number of
		bugs, and these problems have now been fixed.

		<p>

		Highlights of -pre2 include updating the 'ash' shell to sync up
		with the Debian 'dash' shell, a new 'hdparm' applet was added,
		init again supports pivot_root,  The 'reboot' 'halt' and
		'poweroff' applets can now be used without using busybox init.
		an ifconfig buffer overflow was fixed, losetup now allows
		read-write loop devices, uClinux daemon support was added, the
		'watchdog', 'fdisk', and 'kill' applets were rewritten, there were
		tons of doc updates, and there were many other bugs fixed.
		<p>
		
		If you have submitted a patch and it is not included in this
		release and Erik has not emailed you explaining why your patch
		was rejected, it is safe to say that he has lost your patch.
		That happens sometimes.   Please re-submit your patch to the
		BusyBox mailing list.
		<p>

		The point of the "-preX" versions is to get a larger group of
		people and vendors testing, so any problems that turn up can be
		fixed prior to the final 1.0.0 release.  The main feature that
		is still still on the TODO list before the final BusyBox 1.0.0
		release is adding module support for the new 2.6.x kernels.  If
		necessary, a -pre3 BusyBox release will happen on August 6th.
		Hopefully (i.e.  unless some horrible catastrophic problem
		turns up) the final BusyBox 1.0.0 release will be ready by
		then...
		<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>15 July 2003 -- BusyBox 1.0.0-pre1 released</b><p> 

	    The busybox development series has been under construction for
	    nearly two years now.  Which is just entirely too long...  So
	    it is with great pleasure that I announce the imminent release
	    of a new stable series.  Due to the huge number of changes
	    since the last stable release (and the usual mindless version
	    number inflation) I am branding this new stable series verison
	    1.0.x...
	    <p>

	    The point of "-preX" versions is to get a larger group of
	    people and vendors testing, so any problems that turn up can be
	    fixed prior to the magic 1.0.0 release (which should happen
	    later this month)...  I plan to release BusyBox 1.0.0-pre2 next
	    Monday (July 21st), and, if necessary, -pre3 on July 28th.
	    Hopefully (i.e. unless some horrible catastrophic problem turns
	    up) the final BusyBox 1.0.0 release should be ready by the end
	    of July.
	    <p>
	    
	    If you have submitted patches, and they are not in this release
	    and I have not emailed you explaining why your patch was
	    rejected, it is safe to say that I have lost your patch.  That
	    happens sometimes.  Please do <B>NOT</b> send all your patches,
	    support questions, etc, directly to Erik.  I get hundreds of
	    emails every day (which is why I end up losing patches
	    sometimes in the flood)...  The busybox mailing list is the
	    right place to send your patches, support questions, etc.
	    <p>

	    I would like to especially thank Vladimir Oleynik (vodz), Glenn
	    McGrath (bug1), Robert Griebl (sandman), and Manuel Novoa III
	    (mjn3) for their significant efforts and contributions that
	    have made this release possible.
	    <p>

	    As usual you can <a href="downloads">download busybox here</a>.
	    You don't really need to bother with the 
	    <a href="downloads/Changelog">changelog</a>, as the changes
	    vs the stable version are way too extensive to easily enumerate.
	    But you can take a look if you really want too.

	    <p>Have Fun!
	    <p>



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

