<!--#include file="header.html" -->


<ul>

  <li><b>23 February 2004 -- BusyBox 1.0.0-pre8 released</b><p>

    Here goes yet another BusyBox pre-release...  Please do not bother to send
    in patches supplying new features at this time.  Only bug-fix patches will
    be accepted.  If you have a cool new feature you would like to see
    supported, or if you have an amazing new applet you would like to submit,
    please wait and submit such things later.  We really want to get a release
    out we can all be proud of.  We are still aiming to finish off the -pre
    series in February and move on to the final 1.0.0 release...  So if you
    spot any bugs, now would be an excellent time to send in a fix to the
    busybox mailing list.  It would also be <b>very</b> helpful if people could
    help review the BusyBox documentation and submit improvements.  It would be
    especially helpful if people could check that the features supported by the
    various applets match the features listed in the documentation.

    <p>

    The <a href="downloads/Changelog">changelog</a> has all the details.
    And as usual you can <a href="downloads">download busybox here</a>.

    <p>Have Fun!
    <p>


  <p>
  <li><b>4 February 2004 -- BusyBox 1.0.0-pre7 released</b><p>

    There was a bug in -pre6 that broke argument parsing for a
    number of applets, since a variable was not being zeroed out
    properly.  This release is primarily intended to fix that one
    problem.  In addition, this release fixes several other
    problems, including a rewrite by mjn3 of the code for parsing
    the busybox.conf file used for suid handling, some shell updates
    from vodz, and a scattering of other small fixes.  We are still
    aiming to finish off the -pre series in February and move on to
    the final 1.0.0 release...  If you see any problems, of have
    suggestions to make, as always, please feel free to email the
    busybox mailing list.

    <p>

    The <a href="downloads/Changelog">changelog</a> has all
    the details.  And as usual you can
    <a href="downloads">download busybox here</a>.

    <p>Have Fun!
    <p>


  <p>
  <li><b>30 January 2004 -- BusyBox 1.0.0-pre6 released</b><p>

    Here goes the next pre-release for the new BusyBox stable
    series.  This release adds a number of size optimizations,
    updates udhcp, fixes up 2.6 modutils support, updates ash
    and the shell command line editing, and the usual pile of
    bug fixes both large and small.  Things appear to be
    settling down now, so with a bit of luck and some testing
    perhaps we can finish off the -pre series in February and
    move on to the final 1.0.0 release...  If you see any
    problems, of have suggestions to make, as always, please
    feel free to email the busybox mailing list.

    <p>

    People who rely on the <a href= "downloads/snapshots/">daily BusyBox snapshots</a>
    should be aware that snapshots of the old busybox 0.60.x
    series are no longer available.  Daily snapshots are now
    only available for the BusyBox 1.0.0 series and now use
    the naming scheme "busybox-&lt;date&gt;.tar.bz2".  Please
    adjust any build scripts using the old naming scheme accordingly.

    <p>

    The <a href="downloads/Changelog">changelog</a> has all
    the details.  And as usual you can
    <a href="downloads">download busybox here</a>.

    <p>Have Fun!
    <p>


  <p>
  <li><b>23 December 2003 -- BusyBox 1.0.0-pre5 released</b><p>

    Here goes the next pre-release for the new BusyBox stable
    series.  The most obvious thing in this release is a fix for
    a terribly stupid bug in mount that prevented it from working
    properly unless you specified the filesystem type.  This
    release also fixes a few compile problems, updates udhcp,
    fixes a silly bug in fdisk, fixes ifup/ifdown to behave like
    the Debian version, updates devfsd, updates the 2.6.x
    modutils support, add a new 'rx' applet, removes the obsolete
    'loadacm' applet, fixes a few tar bugs, fixes a sed bug, and
    a few other odd fixes.

    <p>

    If you see any problems, of have suggestions to make, as
    always, please feel free to send an email to the busybox
    mailing list.

    <p>

    The <a href="downloads/Changelog">changelog</a> has all
    the details.  And as usual you can
    <a href="downloads">download busybox here</a>.

    <p>Have Fun!
    <p>



    <p>
    <li><b>Old News</b><p>
    <a href="/oldnews.html">Click here to read older news</a>


</ul>

<!--#include file="footer.html" -->

