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

<h3>News archive</h3>

<ul>

  <li><b>25 June 2008 -- BusyBox 1.11.0 (unstable), BusyBox 1.10.4 (stable)</b>
    <p><a href="http://busybox.net/downloads/busybox-1.11.0.tar.bz2">BusyBox 1.11.0</a>.
    (<a href="http://sources.busybox.net/index.py/branches/busybox_1_11_stable/">svn</a>,
    <a href="http://busybox.net/downloads/fixes-1.11.0/">patches</a>,
    <a href="http://busybox.net/fix.html">how to add a patch</a>)</p>
    <p><a href="http://busybox.net/downloads/busybox-1.10.4.tar.bz2">BusyBox 1.10.4</a>.
    (<a href="http://sources.busybox.net/index.py/branches/busybox_1_10_stable/">svn</a>,
    <a href="http://busybox.net/downloads/fixes-1.10.4/">patches</a>,
    <a href="http://busybox.net/fix.html">how to add a patch</a>)</p>
    <p>Sizes of busybox-1.10.4 and busybox-1.11.0 (with equivalent config, static uclibc build):<pre>
   text    data     bss     dec     hex filename
 800675     636    7080  808391   c55c7 busybox-1.10.4
 798392     611    6900  805903   c4c0f busybox-1.11.0
</pre>

    <p>New applets: inotify (Vladimir Dronnikov), man (Ivana Varekova),
    fbsplash (Michele Sanges), depmod (Bernhard Reutner-Fischer)

    <p>Changes since previous release:
      <ul>
	<li>build system: reinstate CONFIG_CROSS_COMPILE_PREFIX</li>
	<li>ash: optional bash compatibility features added; other fixes</li>
	<li>hush: lots and lots of fixes</li>
	<li>msh: fix the case where the file has exec bit but can't be run directly (runs "$SHELL file" instead)</li>
	<li>msh: fix exit codes when command is not found or can't be execed</li>
	<li>udhcpc: added workaround for buggy kernels</li>
	<li>mount: fix mishandling of proto=tcp/udp</li>
	<li>diff: make it work on non-seekable streams</li>
	<li>openvt: made more compatible with "standard" one</li>
	<li>mdev: fix block/char device detection</li>
	<li>ping: add -w, -W support (James Simmons)</li>
	<li>crond: add handling of "MAILTO=user" lines</li>
	<li>start-stop-daemon: make --exec follow symlinks (Joakim Tjernlund)</li>
	<li>date: make it accept ISO date format</li>
	<li>echo: fix echo -e -n "msg\n\0" (David Pinedo)</li>
	<li>httpd: fix several bugs triggered by relative path in -h DIR</li>
	<li>printf: fix printf -%s- foo, printf -- -%s- foo</li>
	<li>syslogd: do not error out on missing files to rotate</li>
	<li>ls: support Unicode in names</li>
	<li>ip: support for the LOWER_UP flag (Natanael Copa)</li>
	<li>mktemp: make argument optional (coreutil 6.12 compat)</li>
	<li>libiproute: fix option parsing, so that "ip -o link" works again</li>
	<li>other fixes and code size reductions in many applets</li>
      </ul>
    <p>
    The email address gpl@busybox.net is the recommended way to contact
    the Software Freedom Law Center to report BusyBox license violations.
    </p>
  </li>

  <li><b>12 June 2008 -- Sponsors!</b>
    <p>We want to thank the following companies which are providing support
    for the BusyBox project:
    </p>
      <ul>
        <li>AOE media, a <a href="http://www.aoemedia.com/typo3-development.html">
	TYPO3 development agency</a> contributes financially.</li>
	<li><a href="http://www.analog.com/en/">Analog Devices, Inc.</a> provided
        a <a href="http://docs.blackfin.uclinux.org/doku.php?id=bf537_quick_start">
	Blackfin development board</a> free of charge.
	<a href="http://www.analog.com/blackfin">Blackfin</a>
	is a NOMMU processor, and its availability for testing is invaluable.
	If you are an embedded device developer,
	please note that Analog Devices has entire Linux distribution available
	for download for this board. Visit
	<a href="http://blackfin.uclinux.org/">http://blackfin.uclinux.org/</a>
	for more information.
	</li>
      </ul>
  </li>

  <li><b>5 June 2008 -- BusyBox 1.10.3 (stable)</b>
    <p><a href="http://busybox.net/downloads/busybox-1.10.3.tar.bz2">BusyBox 1.10.3</a>.
    (<a href="http://sources.busybox.net/index.py/branches/busybox_1_10_stable/">svn</a>,
    <a href="http://busybox.net/downloads/fixes-1.10.3/">patches</a>,
    <a href="http://busybox.net/fix.html">how to add a patch</a>)</p>
    <p>
    Bugfix-only release for 1.10.x branch. It contains fixes for dnsd, fuser, hush,
    ip, mdev and syslogd.
    </p>
  </li>

  <li><b>8 May 2008 -- BusyBox 1.10.2 (stable)</b>
    <p><a href="http://busybox.net/downloads/busybox-1.10.2.tar.bz2">BusyBox 1.10.2</a>.
    (<a href="http://sources.busybox.net/index.py/branches/busybox_1_10_stable/">svn</a>,
    <a href="http://busybox.net/downloads/fixes-1.10.2/">patches</a>,
    <a href="http://busybox.net/fix.html">how to add a patch</a>)</p>
    <p>
    Bugfix-only release for 1.10.x branch. It contains fixes for echo, httpd, pidof,
    start-stop-daemon, tar, taskset, tab completion in shells, build system.
    <p>Please note that mdev was backported from current svn trunk. Please
    report if you encounter any problems with it.
    </p>
  </li>

  <li><b>19 April 2008 -- BusyBox 1.10.1 (stable)</b>
    <p><a href="http://busybox.net/downloads/busybox-1.10.1.tar.bz2">BusyBox 1.10.1</a>.
    (<a href="http://sources.busybox.net/index.py/branches/busybox_1_10_stable/">svn</a>,
    <a href="http://busybox.net/downloads/fixes-1.10.1/">patches</a>,
    <a href="http://busybox.net/fix.html">how to add a patch</a>)</p>
    <p>
    Bugfix-only release for 1.10.x branch. It contains fixes for
    fuser, init, less, nameif, tail, taskset, tcpudp, top, udhcp.
  </li>

  <li><b>21 March 2008 -- BusyBox 1.10.0 (unstable)</b>
    <p><a href="http://busybox.net/downloads/busybox-1.10.0.tar.bz2">BusyBox 1.10.0</a>.
    (<a href="http://sources.busybox.net/index.py/branches/busybox_1_10_stable/">svn</a>,
    <a href="http://busybox.net/downloads/fixes-1.10.0/">patches</a>,
    <a href="http://busybox.net/fix.html">how to add a patch</a>)</p>

    <p>Sizes of busybox-1.9.2 and busybox-1.10.0 (with almost full config, static uclibc build):<pre>
   text    data     bss     dec     hex filename
 781405     679    7500  789584   c0c50 busybox-1.9.2
 773551     640    7372  781563   becfb busybox-1.10.0
</pre>
    <p>Top 10 stack users:<pre>
busybox-1.9.2:               busybox-1.10.0:
echo_dg                 4116 bb_full_fd_action       4112
bb_full_fd_action       4112 find_list_entry2        4096
discard_dg              4108 readlink_main           4096
discard_dg              4096 ipaddr_list_or_flush    3900
echo_stream             4096 iproute_list_or_flush   3680
discard_stream          4096 insmod_main             3152
find_list_entry2        4096 fallbackSort            2952
readlink_main           4096 do_iproute              2492
ipaddr_list_or_flush    3900 cal_main                2464
iproute_list_or_flush   3680 readhere                2308
</pre>

    <p>New applets: brctl, chat (by Vladimir Dronnikov &lt;dronnikov AT gmail.com&gt;),
	findfs, ifenslave (closes bug 115), lpd (by Vladimir Dronnikov &lt;dronnikov AT gmail.com&gt;),
	lpr+lpq (by Walter Harms), script (by Pascal Bellard &lt;pascal.bellard AT ads-lu.com&gt;),
	sendmail (Vladimir Dronnikov &lt;dronnikov AT gmail.com&gt;), tac, tftpd.
    </p>
    <p>Made NOMMU-compatible: crond, crontab, ifupdown, inetd, init, runsv, svlogd, tcpsvd, udpsvd.
    </p>
    <p>Changes since previous release:
    </p>
      <ul>
	<li>globally: add -Wunused-parameter</li>
	<li>globally: add optimization barrier to all "G trick" locations</li>
	<li>adduser/addgroup: check username for invalid chars (by Tito &lt;farmatito AT tiscali.it&gt;)</li>
	<li>adduser: optional support for long options. Closes bug 2134</li>
	<li>ash: handle "A=1 A=2 B=$A; echo $B". Closes bug 947</li>
	<li>ash: make ash -c "if set -o barfoo 2&gt;/dev/null; then echo foo; else echo bar; fi" work. Closes bug 1142</li>
	<li>build system: don't use "gcc -o /dev/null", old gcc can delete /dev/null in this case</li>
	<li>build system: fixes for cross-compiling on an OS X host</li>
	<li>build system: make it do without "od -t"</li>
	<li>build system: pass CFLAGS to link stage too. Closes bug 1376</li>
	<li>build system: add CONFIG_NOMMU</li>
	<li>cp: add ENABLE_FEATURE_VERBOSE_CP_MESSAGE. Closes bug 1470</li>
	<li>crontab: almost complete rewrite</li>
	<li>dnsd: properly set _src_ IP:port on outgoing UDP packets</li>
	<li>dpkg: fix bug where existence check was reversed</li>
	<li>eject: add -s for SCSI- and USB-devices (Nico Erfurth)</li>
	<li>fdisk: fix a case where break was reached only for DOS labels</li>
	<li>fsck: don't kill pid -1! (Roy Marples &lt;roy at marples.name&gt;)</li>
	<li>fsck_minix: fix bug in map_block2: s/(blknr &gt;= 256 * 256)/(blknr &lt; 256 * 256)/</li>
	<li>fuser: substantial rewrite</li>
	<li>getopt: add support for "a+" specifier for nonnegative int parameters. By Vladimir Dronnikov &lt;dronnikov at gmail.com&gt;</li>
	<li>getty: don't try to detect parity on local lines (Joakim Tjernlund &lt;Joakim.Tjernlund at transmode.se&gt;)</li>
	<li>halt: write wtmp entry if wtmp support is enabled</li>
	<li>httpd: "HEAD" support. Closes bug 1530</li>
	<li>httpd: fix bug 2004: wrong argv when interpreter is invoked</li>
	<li>httpd: fix bug where we did chdir("") if CGI path had only one "/"</li>
	<li>httpd: fix for POST upload</li>
	<li>httpd: support for "I:index.xml" syntax (Peter Korsgaard &lt;jacmet AT uclibc.org&gt;)</li>
	<li>hush: fix a case where none of pipe members could be started because of fork failure</li>
	<li>hush: more correct handling of piping</li>
	<li>hush: reinstate `cmd` handling for NOMMU</li>
	<li>hush: report [v]fork failures</li>
	<li>hush: set CLOEXEC on script file being executed</li>
	<li>hush: try to add a bit more of vfork-friendliness</li>
	<li>inetd: make "udp nowait" work</li>
	<li>inetd: make inetd IPv6-capable</li>
	<li>init: add FEATURE_KILL_REMOVED (Eugene Bordenkircher &lt;eugebo AT gmail.com&gt;)</li>
	<li>init: allow last line of config file to be not terminated by "\n"</li>
	<li>init: do not die if "/dev/null" is missing</li>
	<li>init: fix bug 1111: restart actions were not splitting words</li>
	<li>init: wait for orphaned children too while waiting for sysinit-like processes (harald-tuxbox AT arcor.de)</li>
	<li>ip route: "ip route" was misbehaving (extra argv+1 ate 1st env var)</li>
	<li>last: do not go into endless loop on read error</li>
	<li>less,klogd,syslogd,nc,tcpudp: exit on signal by killing itself, not exit(1)</li>
	<li>less: "examine" command will not bomb out on bad file name now</li>
	<li>less: fix bug where backspace wasn't actually deleting chars</li>
	<li>less: make it a bit more resistant against status line corruption</li>
	<li>less: improve search when data is not supplied fast enough by stdin - now will try reading for 1-2 seconds before declaring that there is no match. This fixes a very common annoyance with long manpages</li>
	<li>less: update line input so that it doesn't interfere with screen update. Makes "man bash", [enter], [/], &lt;enter search pattern&gt;, [enter] more usable - manpage now draws even as you enter the pattern!</li>
	<li>libbb: filename completion matches dangling symlinks too</li>
	<li>libbb: fix getopt state corruption for NOFORK applets</li>
	<li>libbb: full_read/write now will report partial data counts prior to error</li>
	<li>libbb: intrduce and use safe_gethostname. By Tito &lt;farmatito AT tiscali.it&gt;</li>
	<li>libbb: introduce and use nonblock_safe_read(). Yay! Our shells are immune from this nasty O_NONBLOCK now!</li>
	<li>login,su: avoid clearing environment with some options, as was intended</li>
	<li>microcom: read more than 1 byte from device, if possible</li>
	<li>microcom: split -d (delay) option away from -t</li>
	<li>mktemp: support -p DIR (Timo Teras &lt;timo.teras at iki.fi&gt;)</li>
	<li>mount: #ifdef out MOUNT_LABEL code parts if it is not selected</li>
	<li>mount: add another mount helper call method</li>
	<li>mount: allow and ignore _netdev option</li>
	<li>mount: make -f work even without mtab support (Cristian Ionescu-Idbohrn &lt;cristian.ionescu-idbohrn at axis.com&gt;)</li>
	<li>mount: optional support for -vv verbosity</li>
	<li>mount: plug a hole where FEATURE_MOUNT_HELPERS could allow execution of arbitrary command</li>
	<li>mount: recognize "dirsync" (closes bug 835)</li>
	<li>mount: sanitize environment if called by non-root</li>
	<li>mount: support for mount by label. Closes bug 1143</li>
	<li>mount: with -vv -f, say what mount() calls we were going to make</li>
	<li>msh: create testsuite (based on hush one)</li>
	<li>msh: don't use floating point in "times" builtin</li>
	<li>msh: fix Ctrl-C handling with line editing</li>
	<li>msh: fix for bug 846 ("break" didn't work second time)</li>
	<li>msh: glob0/glob1/glob2/glob3 were just a sorting routine, removed</li>
	<li>msh: instead of fixing "ls | cd", "cd | ls" etc disallow builtins in pipes. They make no sense there anyway</li>
	<li>msh: stop trying to parse variables in "msh SCRIPT VAR=val param". They are passed as ordinary parameters</li>
	<li>netstat: print control chars as "^C" etc</li>
	<li>nmeter: fix bug where %[mf] behaves as %[mt]</li>
	<li>nohup: compat patch by Christoph Gysin &lt;mailinglist.cache at gmail.com&gt;</li>
	<li>od: handle /proc files (which have filesize 0) correctly</li>
	<li>patch: don't trash permissions of patched file</li>
	<li>ps: add conditional support for -o [e]time</li>
	<li>ps: fix COMMAND column adjustment; overflow in USER and VSZ columns</li>
	<li>reset: call "stty sane". Closes bug 1414</li>
	<li>rmdir: optional long options support for Debian users. By Roberto Gordo Saez &lt;roberto.gordo AT gmail.com&gt;</li>
	<li>run-parts: add --reverse</li>
	<li>script: correctly handle buffered "tail" of output</li>
	<li>sed: "n" command must reset "we had successful subst" flag. Closes bug 1214</li>
	<li>sort: -z outputs NUL terminated lines. Closes bug 1591</li>
	<li>stty: fix mishandling of control keywords (Ralf Friedl &lt;Ralf.Friedl AT online.de&gt;)</li>
	<li>switch_root: stop at first non-option. Closes bug 1425</li>
	<li>syslogd: avoid excessive time() system calls</li>
	<li>syslogd: don't die if remote host's IP cannot be resolved. Retry resolutions every two minutes instead</li>
	<li>syslogd: fix shmat error check</li>
	<li>syslogd: optional support for dropping dups. Closes bug 436</li>
	<li>syslogd: send "\n"-terminated messages over the network. Fully closes bug 1574</li>
	<li>syslogd: tighten up hostname handling</li>
	<li>tail: fix "tail -c 20 /dev/huge_disk" (was taking ages)</li>
	<li>tar: compat: handle tarballs with only one zero block at the end</li>
	<li>tar: autodetection of gz/bz2 compressed tarballs. Closes bug 992</li>
	<li>tar: real support for -p. By Natanael Copa &lt;natanael.copa at gmail.com&gt;</li>
	<li>tcpudp: narrow down time window where we have no wildcard socket</li>
	<li>telnetd: use login always, not "sometimes login, sometimes shell"</li>
	<li>test: fix mishandling of "test ! arg1 op arg2 more args"</li>
	<li>trylink: instead of build error, disable --gc-sections if GLIBC and STATIC are selected</li>
	<li>udhcp: make file paths configurable</li>
	<li>udhcp: optional support for non-standard DHCP ports</li>
	<li>udhcp: set correct op byte in the packet for DHCPDECLINE</li>
	<li>udhcpc: filter unwanted packets in kernel (Cristian Ionescu-Idbohrn &lt;cristian.ionescu-idbohrn AT axis.com&gt;)</li>
	<li>udhcpc: fix wrong options in decline and release packets (Jonas Danielsson &lt;jonas.danielsson AT axis.com&gt;)</li>
	<li>umount: do not complain several times about the same mountpoint</li>
	<li>umount: do not try to free loop device or erase mtab if remounted ro</li>
	<li>umount: instead of non-standard -D, use -d with opposite meaning. Closes bug 1604</li>
	<li>unlzma: shrink by Pascal Bellard &lt;pascal.bellard AT ads-lu.com&gt;</li>
	<li>unzip: do not try to read entire compressed stream at once (it can be huge)</li>
	<li>unzip: handle short reads correctly</li>
	<li>vi: many fixes</li>
	<li>zcip: don't chdir to root</li>
	<li>zcip: open ARP socket before openlog (else we can trash syslog socket)</li>
      </ul>
  </li>

  <li><b>21 March 2008 -- BusyBox old stable releases</b>
    <p>
    Bugfix-only releases for four past branches. Links to locations
    for future hot patches are in parentheses.
    <p>
    <a href="http://busybox.net/downloads/busybox-1.9.2.tar.bz2">1.9.2</a>
    (<a href="http://busybox.net/downloads/fixes-1.9.2/">patches</a>),
    <a href="http://busybox.net/downloads/busybox-1.8.3.tar.bz2">1.8.3</a>
    (<a href="http://busybox.net/downloads/fixes-1.8.3/">patches</a>),
    <a href="http://busybox.net/downloads/busybox-1.7.5.tar.bz2">1.7.5</a>
    (<a href="http://busybox.net/downloads/fixes-1.7.5/">patches</a>),
    <a href="http://busybox.net/downloads/busybox-1.5.2.tar.bz2">1.5.2</a>
    (<a href="http://busybox.net/downloads/fixes-1.5.2/">patches</a>).
    <p>
    <a href="http://busybox.net/fix.html">How to add a patch.</a>
    </p>


  <li><b>12 February 2008 -- BusyBox 1.9.1 (stable)</b>
    <p><a href="http://busybox.net/downloads/busybox-1.9.1.tar.bz2">BusyBox 1.9.1</a>.
    (<a href="http://sources.busybox.net/index.py/branches/busybox_1_9_stable/">svn</a>,
    <a href="http://busybox.net/downloads/fixes-1.9.1/">patches</a>,
    <a href="http://busybox.net/fix.html">how to add a patch</a>)</p>

    <p>This is a bugfix-only release, with fixes to fsck,
    iproute, mdev, mkswap, msh, nameif, stty, test, zcip.</p>
    <p>hush has `command` expansion re-enabled for NOMMU, although it is
    inherently unsafe (by virtue of NOMMU's use of vfork instead of fork).
    The plan is to make this less likely to bite people in future versions.</p>
  </li>

  <li><b>24 December 2007 -- BusyBox 1.9.0 (unstable)</b>
    <p><a href="http://busybox.net/downloads/busybox-1.9.0.tar.bz2">BusyBox 1.9.0</a>.
    (<a href="http://sources.busybox.net/index.py/branches/busybox_1_9_stable/">svn</a>,
    <a href="http://busybox.net/downloads/fixes-1.9.0/">patches</a>,
    <a href="http://busybox.net/fix.html">how to add a patch</a>)</p>

    <p>Sizes of busybox-1.8.2 and busybox-1.9.0 (with almost full config, static uclibc build):<pre>
   text    data     bss     dec     hex filename
 792796     978    9724  803498   c42aa busybox-1.8.2
 783803     683    7508  791994   c15ba busybox-1.9.0
</pre>
    <p>Top 10 stack users:<pre>
busybox-1.8.2:               busybox-1.9.0:
input_tab             10428  echo_dg                4116
umount_main            8252  bb_full_fd_action      4112
rtnl_talk              8240  discard_dg             4096
xrtnl_dump_filter      8240  echo_stream            4096
sendMTFValues          5316  discard_stream         4096
mainSort               4700  find_list_entry2       4096
mkfs_minix_main        4288  readlink_main          4096
grave                  4260  ipaddr_list_or_flush   3900
unix_do_one            4156  iproute_list_or_flush  3680
parse_prompt           4132  insmod_main            3152
</pre>

    <p>lash is deleted from this release. hush can be configured down to almost
       the same size, but it is significantly less buggy. It even works
       on NOMMU machines (interactive mode and backticks are not working on NOMMU,
       though). "lash" applet is still available, but it runs hush.

    <p>init has some changes in this release, please report if it causes
       problems for you.

    <p>Changes since previous release:
      <ul>
	<li>Build system improvements
	<li>Testsuite additions
	<li>Stack size reductions, code size reductions, data/bss reductions
	<li>An option to prefer IPv4 address if host has both
	<li>New applets: hd, sestatus
	<li>Removed applets: lash
	<li>hush: fixed a few bugs, wired up echo and test to be builtins
	<li>init: simplify forking of children
	<li>getty: special handling of '#' and '@' is removed
	<li>[su]login: sanitize environment if called by non-root
	<li>udhcpc: support "bad" servers which send oversized packets
	  (Cristian Ionescu-Idbohrn &lt;cristian.ionescu-idbohrn at axis.com&gt;)
	<li>udhcpc: -O option allows to specify which options to ask for
	  (Stefan Hellermann &lt;stefan at the2masters.de&gt;)
	<li>udhcpc: optionally check whether given IP is really free (by ARP ping)
	  (Jonas Danielsson &lt;jonas.danielsson at axis.com&gt;)
	<li>vi: now handles files with unlimited line length
	<li>vi: speedup for huge line lengths
	<li>vi: Del key works
	<li>sed: support GNUism '\t'
	<li>cp/mv/install: optionally use bigger buffer for bulk copying
	<li>line editing: don't eat stack like crazy
	<li>passwd: follows symlinked /etc/passwd
	<li>renice: accepts priority with +N too
	<li>netstat: wide output mode
	<li>nameif: extended matching (Nico Erfurth &lt;masta at perlgolf.de&gt;)
	<li>test: become NOFORK applet
	<li>find: -iname (Alexander Griesser &lt;alexander.griesser at lkh-vil.or.at&gt;)
	<li>df: -i option (show inode info) (Pascal Bellard &lt;pascal.bellard at ads-lu.com&gt;)
	<li>hexdump: -R option (Pascal Bellard &lt;pascal.bellard at ads-lu.com&gt;)
      </ul>
  </li>

  <li><b>23 November 2007 -- BusyBox 1.8.2 (stable), BusyBox 1.7.4 (stable)</b>
    <p><a href="http://busybox.net/downloads/busybox-1.8.2.tar.bz2">BusyBox 1.8.2</a>.
    (<a href="http://sources.busybox.net/index.py/branches/busybox_1_8_stable/">svn</a>,
    <a href="http://busybox.net/downloads/fixes-1.8.2/">patches</a>,
    <a href="http://busybox.net/fix.html">how to add a patch</a>)</p>
    <p><a href="http://busybox.net/downloads/busybox-1.7.4.tar.bz2">BusyBox 1.7.4</a>.
    (<a href="http://sources.busybox.net/index.py/branches/busybox_1_7_stable/">svn</a>,
    <a href="http://busybox.net/downloads/fixes-1.7.4/">patches</a>,
    <a href="http://busybox.net/fix.html">how to add a patch</a>)</p>

    <p>These are bugfix-only releases.
    1.8.2 contains fixes for inetd, lash, tar, tr, and build system.
    1.7.4 contains a fix for inetd.</p>
  </li>

  <li><b>9 November 2007 -- BusyBox 1.8.1 (stable)</b>
    <p><a href="http://busybox.net/downloads/busybox-1.8.1.tar.bz2">BusyBox 1.8.1</a>.
    (<a href="http://sources.busybox.net/index.py/branches/busybox_1_8_stable/">svn</a>,
    <a href="http://busybox.net/downloads/fixes-1.8.1/">patches</a>,
    <a href="http://busybox.net/fix.html">how to add a patch</a>)</p>

    <p>This is a bugfix-only release, with fixes to login (PAM), modprobe, syslogd, telnetd, unzip.</p>
  </li>

  <li><b>4 November 2007 -- BusyBox 1.8.0 (unstable)</b>
    <p><a href="http://busybox.net/downloads/busybox-1.8.0.tar.bz2">BusyBox 1.8.0</a>.
    (<a href="http://sources.busybox.net/index.py/branches/busybox_1_8_stable/">svn</a>,
    <a href="http://busybox.net/downloads/fixes-1.8.0/">patches</a>,
    <a href="http://busybox.net/fix.html">how to add a patch</a>)</p>

    <p>Note: this is probably the very last release with lash. It will be dropped. Please migrate to hush.

    <p>Applets which had many changes since 1.7.x:
    <p>httpd:
      <ul>
	<li>does not clear environment, CGIs will see all environment variables which were set for httpd
	<li>fix bug where we were trying to read more POSTDATA than content-length
	<li>fix trivial bug (spotted by Alex Landau)
	<li>optional support for partial downloads
	<li>simplified CGI i/o loop (now it looks good to me)
	<li>small auth and IPv6 fixes (Kim B. Heino &lt;Kim.Heino at bluegiga.com>)
	<li>support for proxying connection to other http server (by Alex Landau &lt;landau_alex at yahoo.com>)
      </ul>

    <p>top:
      <ul>
	<li>TOPMEM feature - 's(how sizes)' command
	<li>don't wait before final bailout (try top -b -n1)
	<li>fix for command line wrapping
      </ul>

    <p>Build system improvements: libbusybox mode restored (it was lost in transition to new makefiles).

    <p>Code and data size in comparison with 1.7.3:<pre>
Equivalent .config, i386 uclibc static builds:
   text    data     bss     dec     hex filename
 768123	   1055	  10768	 779946	  be6aa	busybox-1.7.3/busybox
 759693	    974	   9420	 770087	  bc027	busybox-1.8.0/busybox</pre>

    <p>New applets:
      <ul>
	<li>microcom: new applet by Vladimir Dronnikov &lt;dronnikov at gmail.ru&gt;
	<li>kbd_mode: new applet by Loic Grenie &lt;loic.grenie at gmail.com&gt;
	<li>bzip2: port bzip2 1.0.4 to busybox, 9 kb of code
	<li>pgrep, pkill: new applets by Loic Grenie &lt;loic.grenie at gmail.com&gt;
	<li>setsebool: new applet (Yuichi Nakamura &lt;ynakam at hitachisoft.jp&gt;)
      </ul>

    <p>Other changes since previous release (abridged):
      <ul>
	<li>cp: -r and -R imply -d (coreutils compat)
	<li>cp: detect and prevent infinite recursion
	<li>cp: make it a bit closer to POSIX, but still refuse to open and overwrite symbolic link
	<li>hdparm: reduce possibility of numeric overflow in -T
	<li>hdparm: simplify timing measurement
	<li>wget: -O FILE is allowed to overwrite existing file (compat)
	<li>wget: allow dots in header field names
	<li>telnetd: add -K option to close sessions as soon as child exits
	<li>telnetd: don't SIGKILL child when closing the session, kernel will send SIGHUP for us
	<li>ed: large cleanup, add line editing
	<li>hush: feeble attempt at making it more NOMMU-friendly
	<li>hush: fix glob()
	<li>hush: stop doing manual accounting of open fd's, kernel can do it for us
	<li>adduser: implement -S and fix uid selection
	<li>ash: fix prompt expansion (Natanael Copa &lt;natanael.copa at gmail.com&gt;)
	<li>ash: revert "cat | jobs" fix, it causes more problems than good
	<li>find: fix -xdev behavior in the presence of two or more nested mount points
	<li>grep: fix grep -F -e str1 -e str2 (was matching str2 only)
	<li>grep: optimization: stop on first -e match
	<li>gunzip: support concatenated gz files
	<li>inetd: fix bug 1562 "inetd does not set argv[0] properly" (fix by Ilya Panfilov)
	<li>install: 'support' (by ignoring) -v and -b
	<li>install: fix bug in "install -c file dir" (tried to copy dir into dir too)
	<li>ip: tunnel parameter parsing fix by Jean Wolter &lt;jw5 at os.inf.tu-dresden.de&gt;
	<li>isrv: use monotonic_sec
	<li>less: make 'f' key page forward
	<li>libiproute: add missing break statements
	<li>load_policy: update (Yuichi Nakamura &lt;ynakam at hitachisoft.jp&gt;)
	<li>logger: fix a problem of losing all argv except first
	<li>login: do reject wrong passwords with PAM auth
	<li>losetup: support -f (Loic Grenie &lt;loic.grenie at gmail.com&gt;)
	<li>fdisk: make fdisk compile on libc without llseek64
	<li>libbb: by popular request allow PATH to be customized at build time
	<li>mkswap: selinux support by KaiGai Kohei &lt;kaigai at ak.jp.nec.com&gt;
	<li>mount: allow (and ignore) -i
	<li>mount: ignore NFS bg option on NOMMU machines
	<li>mount: mount helpers support (by Vladimir Dronnikov &lt;dronnikov at gmail.ru&gt;)
	<li>passwd: handle Ctrl-C, restore termios on Ctrl-C
	<li>passwd: SELinux support by KaiGai Kohei &lt;kaigai at ak.jp.nec.com&gt;
	<li>ping: make -I ethN work too (-I addr already worked)
	<li>ps: fix RSS parsing (rss field in /proc/PID/stat is in pages, not bytes)
	<li>read_line_input: fix it to not do any fancy editing if echoing is disabled
	<li>run_parts: make it sort executables by name (required by API)
	<li>runsv: do not use clock_gettime if !MONOTONIC_CLOCK
	<li>runsvdir: fix "linear wait time" bug
	<li>sulogin: remove alarm handling, it is redundant there
	<li>svlogd: compat: svlogd -tt should timestamp stderr too
	<li>syslogd: bail out if you see null read from Unix socket
	<li>syslogd: do not need to poll(), we can just block in read()
	<li>tail: work correctly on /proc files (Kazuo TAKADA &lt;kztakada at sm.sony.co.jp&gt;)
	<li>tar + gzip/bzip2/etc: support NOMMU machines (by Alex Landau &lt;landau_alex at yahoo.com&gt;)
	<li>tar: strip leading '/' BEFORE memorizing hardlink's name
	<li>tftp: fix infinite retry bug
	<li>umount: support (by ignoring) -i; style fixes
	<li>unzip: fix endianness bugs
	<li>vi: don't wait 50 ms before reading ESC sequences
	<li>watchdog: allow millisecond spec (-t 250ms)
	<li>zcip: fix unaligned trap on ARM
      </ul>
  </li>

  <li><b>4 November 2007 -- BusyBox 1.7.3 (stable)</b>
    <p><a href="http://busybox.net/downloads/busybox-1.7.3.tar.bz2">BusyBox 1.7.3</a>.
    (<a href="http://sources.busybox.net/index.py/branches/busybox_1_7_stable/">svn</a>,
    <a href="http://busybox.net/downloads/fixes-1.7.3/">patches</a>,
    <a href="http://busybox.net/fix.html">how to add a patch</a>)</p>

    <p>This is a bugfix-only release, with fixes to ash, httpd, inetd, iptun, logger, login, tail.</p>
  </li>

  <li><b>30 September 2007 -- BusyBox 1.7.2 (stable)</b>
    <p><a href="http://busybox.net/downloads/busybox-1.7.2.tar.bz2">BusyBox 1.7.2</a>.
    (<a href="http://sources.busybox.net/index.py/branches/busybox_1_7_stable/">svn</a>,
    <a href="http://busybox.net/downloads/fixes-1.7.2/">patches</a>,
    <a href="http://busybox.net/fix.html">how to add a patch</a>)</p>

    <p>This is a bugfix-only release, with fixes to install, find, login, httpd, runsvdir, chcon, setfiles, fdisk and line editing.</p>
  </li>

  <li><b>16 September 2007 -- BusyBox 1.7.1 (stable)</b>
    <p><a href="http://busybox.net/downloads/busybox-1.7.1.tar.bz2">BusyBox 1.7.1</a>.
    (<a href="http://sources.busybox.net/index.py/branches/busybox_1_7_stable/">svn</a>,
    <a href="http://busybox.net/downloads/fixes-1.7.1/">patches</a>,
    <a href="http://busybox.net/fix.html">how to add a patch</a>)</p>

    <p>This is a bugfix-only release, with fixes to cp, runsv, tar, busybox --install and build system.</p>
  </li>

  <li><b>24 August 2007 -- BusyBox 1.7.0 (unstable)</b>
    <p><a href="http://busybox.net/downloads/busybox-1.7.0.tar.bz2">BusyBox 1.7.0</a>.
    (<a href="http://sources.busybox.net/index.py/branches/busybox_1_7_stable/">svn</a>,
    <a href="http://busybox.net/downloads/fixes-1.7.0/">patches</a>,
    <a href="http://busybox.net/fix.html">how to add a patch</a>)</p>

    <p>Applets which had many changes since 1.6.x:
    <p>httpd:
      <ul>
	<li>works in standalone mode on NOMMU machines now (partly by Alex Landau &lt;landau_alex at yahoo.com&gt;)
	<li>indexer example is rewritten in C
	<li>optional support for error pages (by Pierre Metras &lt;genepi at sympatico.ca&gt;)
	<li>stop reading headers using 1-byte reads
	<li>new option -v[v]: prints client addresses, HTTP codes returned, URLs
	<li>extended -p PORT to -p [IP[v6]:]PORT
	<li>sendfile support (by Pierre Metras &lt;genepi at sympatico.ca&gt;)
	<li>add support for Status: CGI header
	<li>fix CGI handling bug (we were closing wrong fd)
	<li>CGI I/O loop still doesn't look 100% ok to me...
      </ul>

    <p>udhcp[cd]:
      <ul>
	<li>add -f "foreground" and -S "syslog" options
	<li>fixed "ifupdown + udhcpc_without_pidfile_creation" bug
	<li>new config option "Rewrite the lease file at every new acknowledge" (Mats Erik Andersson &lt;mats at blue2net.com&gt; (Blue2Net AB))
	<li>consistently treat server_config.start/end IPs as host-order
	<li>fix IP parsing for 64bit machines
	<li>fix unsafe hton macro usage in read_opt()
	<li>do not chdir to / when daemonizing
      </ul>

    <p>top, ps, killall, pidof:
      <ul>
	<li>simpler loadavg processing
	<li>truncate usernames to 8 chars
	<li>fix non-CONFIG_DESKTOP ps -ww (by rockeychu)
	<li>improve /proc/PID/cmdinfo reading code
	<li>use cmdline, not comm field (fixes problems with re-execed applets showing as processes with name "exe", and not being found by pidof/killall by applet name)
	<li>reduce CPU usage in decimal conversion (optional) (corresponding speedup on kernel side is accepted in mainline Linux kernel, yay!)
	<li>make percentile (0.1%) calculations configurable
	<li>add config option and code for global CPU% display
	<li>reorder columns, so that [P]PIDs are together and VSZ/%MEM are together - makes more sense
      </ul>

    <p>Build system improvements: doesn't link against libraries we don't need,
	generates verbose link output and map file, allows for custom link
	scripts (useful for removing extra padding, among other things).

    <p>Code and data size in comparison with 1.6.1:<pre>
Equivalent .config, i386 glibc dynamic builds:
   text    data     bss     dec     hex filename
 672671    2768   16808  692247   a9017 busybox-1.6.1/busybox
 662948    2660   13528  679136   a5ce0 busybox-1.7.0/busybox
 662783    2631   13416  678830   a5bae busybox-1.7.0/busybox.customld

Same .config built against static uclibc:
 765021    1059   11020  777100   bdb8c busybox-1.7.0/busybox_uc</pre>

    <p>Code/data shrink done in applets: crond, hdparm, dd, cal, od, nc, expr, uuencode,
	test, slattach, diff, ping, tr, syslogd, hwclock, zcip, find, pidof, ash, uudecode,
	runit/*, in libbb.

    <p>New applets:
      <ul>
	<li>pscan, expand, unexpand (from Tito &lt;farmatito at tiscali.it&gt;)
	<li>setfiles, restorecon (by Yuichi Nakamura &lt;ynakam at hitachisoft.jp&gt;)
	<li>chpasswd (by Alexander Shishkin &lt;virtuoso at slind.org&gt;)
	<li>slattach, ttysize
      </ul>

    <p>Unfortunately, not much work is done on shells. This was mostly stalled
	by lack of time (read: laziness) on my part to learn how to adapt existing
	qemu-runnable image for a NOMMU architechture (available on qemu website)
	for local testing of cross-compiled busybox on my machine.

    <p>Other changes since previous release (abridged):
      <ul>
	<li>addgroup: disallow addgroup -g num user group; make -g 0 work (Tito &lt;farmatito at tiscali.it&gt;)
	<li>adduser: close /etc/{passwd,shadow} before calling passwd etc. Spotted by Natanael Copa &lt;natanael.copa at gmail.com&gt;
	<li>arping: -i should be -I, fixed
	<li>ash: make "jobs | cat" work like in bash (was giving empty output)
	<li>ash: recognize -l as --login equivalent; do not recognize +-login
	<li>ash: fix buglet in DEBUG code (Nguyen Thai Ngoc Duy &lt;pclouds at gmail.com&gt;)
	<li>ash: fix SEGV if type has zero parameters
	<li>awk: fix -F 'regex' bug (miscounted fields if last field is empty)
	<li>catv: catv without arguments was trying to use environ as argv (Alex Landau &lt;landau_alex at yahoo.com&gt;)
	<li>catv: don't die on open error (emit warning)
	<li>chown/chgrp: completely match coreutils 6.8 wrt symlink handling
	<li>correct_password: do not print "no shadow passwd..." message
	<li>crond: don't start sendmail with absolute path, don't report obsolete version (report true bbox version)
	<li>dd: fix bug where we assume count=INT_MAX when count is unspecified
	<li>devfsd: sanitization by Tito &lt;farmatito at tiscali.it&gt;
	<li>echo: fix non-fancy echo
	<li>fdisk: make it work with big disks (read: typical today's disks) even if CONFIG_LFS is unset
	<li>find: -context support for SELinux (KaiGai Kohei &lt;kaigai at kaigai.gr.jp&gt;)
	<li>find: add conditional support for -maxdepth and -regex, make -size match GNU find
	<li>find: fix build failure on certain configs (found by Cristian Ionescu-Idbohrn &lt;cristian.ionescu-idbohrn at axis.com&gt;)
	<li>fsck_minix: make it print bb version, not it's own (outdated/irrelevant) one
	<li>grep: implement -m MAX_MATCHES, fix buglets with context printing
	<li>grep: fix selection done by FEATURE_GREP_EGREP_ALIAS (Maxime Bizon &lt;mbizon at freebox.fr&gt; (Freebox))
	<li>hush: add missing dependencies (Maxime Bizon &lt;mbizon at freebox.fr&gt; (Freebox))
	<li>hush: fix read builtin to not read ahead past EOL and to not use insane amounts of stack
	<li>ifconfig: make it work with ifaces with interface no. &gt; 255
	<li>ifup/ifdown: make location of ifstate configurable
	<li>ifupdown: make netmask parsing smaller and more strict (was accepting 255.0.255.0, 255.1234.0.0 etc...)
	<li>install: fix -s (strip) option, fix install a b /a/link/to/dir
	<li>libbb: consolidate ARRAY_SIZE macro (Walter Harms &lt;wharms at bfs.de&gt;)
	<li>libbb: make /etc/network parsing configurable. -200 bytes when off
	<li>libbb: nuke BB_GETOPT_ERROR, always die if there are mutually exclusive options
	<li>libbb: xioctl and friends by Tito &lt;farmatito at tiscali.it&gt;
	<li>login: optional support for PAM
	<li>login: make /etc/nologin support configurable (-240 bytes)
	<li>login: ask passwords even for wrong usernames
	<li>md5_sha1_sum: fix mishandling when run as /bin/md5sum
	<li>mdev: add support for firmware loading
	<li>mdev: work even when CONFIG_SYSFS_DEPRECATED in kernel is off
	<li>modprobe: add scanning of /lib/modules/`uname -r`/modules.symbols (by Yann E. MORIN &lt;yann.morin.1998 at anciens.enib.fr&gt;)
	<li>more: fixes by Tristan Schmelcher &lt;tpkschme at engmail.uwaterloo.ca&gt;
	<li>nc: make connecting to IPv4 from IPv6-enabled hosts easier (was requiring -s local_addr)
	<li>passwd: fix bug "updating shadow even if user's record is in passwd"
	<li>patch: fix -p -1 handling
	<li>patch: fix bad line ending handling (Nguyen Thai Ngoc Duy &lt;pclouds at gmail.com&gt;)
	<li>ping: display roundtrip times with 1/1000th of ms, not 1/10 ms precision.
	<li>ping: fix incorrect handling of -I (Iouri Kharon &lt;bc-info at styx.cabel.net&gt;)
	<li>ping: fix non-fancy ping6
	<li>printenv: fix "printenv VAR1 VAR2" bug (spotted by Kalyanatejaswi Balabhadrapatruni &lt;kalyanatejaswi at yahoo.co.in&gt;)
	<li>ps: fix -Z (by Yuichi Nakamura &lt;ynakam at hitachisoft.jp&gt;)
	<li>rpm: add optional support for bz2 data. +50 bytes of code
	<li>rpm: fix bogus "package is not installed" case
	<li>sed: fix 'q' command handling (by Nguyen Thai Ngoc Duy &lt;pclouds at gmail.com&gt;)
	<li>start_stop_daemon: NOMMU fixes by Alex Landau &lt;landau_alex at yahoo.com&gt;
	<li>stat: fix option -Z SEGV
	<li>strings: strings a b was processing a twice, fix that
	<li>svlogd: fix timestamping, do not warn if config is missing
	<li>syslogd, logread: get rid of head pointer, fix logread bug in the process
	<li>syslogd: do not convert tabs to ^I, set syslog IPC buffer to mode 0644
	<li>tar: improve OLDGNU compat, make old SUN compat configurable
	<li>test: fix testing primary expressions like '"-u" = "-u"'
	<li>uudecode: fix to base64 decode by Jorgen Cederlof &lt;jcz at google.com&gt;
	<li>vi: multiple fixes by Natanael Copa &lt;natanael.copa at gmail.com&gt;
	<li>wget: fix bug in base64 encoding (bug 1404). +10 bytes
	<li>wget: lift 256 chars limitation on terminal width
	<li>wget, zcip: use monotonic_sec instead of gettimeofday
      </ul>
  </li>

  <li><b>30 June 2007 -- BusyBox 1.6.1 (stable)</b>
    <p><a href="http://busybox.net/downloads/busybox-1.6.1.tar.bz2">BusyBox 1.6.1</a>.
    (<a href="http://sources.busybox.net/index.py/branches/busybox_1_6_stable/">svn</a>,
    <a href="http://busybox.net/downloads/fixes-1.6.1/">patches</a>,
    <a href="http://busybox.net/fix.html">how to add a patch</a>)</p>

    <p>This is a bugfix-only release, with fixes to echo, hush, and wget.</p>
  </li>

  <li><b>1 June 2007 -- BusyBox 1.6.0 (unstable)</b>
    <p><a href="http://busybox.net/downloads/busybox-1.6.0.tar.bz2">BusyBox 1.6.0</a>.
    (<a href="http://sources.busybox.net/index.py/branches/busybox_1_6_stable/">svn</a>,
    <a href="http://busybox.net/downloads/fixes-1.6.0/">patches</a>,
    <a href="http://busybox.net/fix.html">how to add a patch</a>)</p>

    <p>Since this is a x.x.0 release, it probably does not deserve "stable"
    label. Please help making 1.6.1 stable by testing 1.6.0.</p>
    <p>Note that hush shell had many changes and (hopefully) is much improved now,
    but there is a possibility that it regressed in some obscure cases. Please
    report any such cases.</p>
    <p>lash users please note: lash is going to be deprecated in busybox 1.7.0
    and removed in the more distant future. Please migrate to hush.</p>
    <p><a href="http://busybox.net/~vda/mem_usage-1.6.0.txt">Memory usage has decreased, but we can do better still</a></p>
    <p>Other changes since previous release:
    <ul>
<li>NOFORK: audit small applets and mark some of them as NOFORK. Put big scary warnings in relevant places
<li>NOFORK: factor out NOFORK/NOEXEC code from find. Use NOFORK/NOEXEC in find and xargs
<li>NOFORK: remove potential xmalloc from NOFORK path in bb_full_fd_action
<li>NOMMU: random fixes; compressed --help now works for NOMMU
<li>SELinux: load_policy applet
<li>[u]mount: extend -t option (Roy Marples &lt;uberlord at gentoo.org&gt;)
<li>addgroup: clean up, fix adding users to existing groups and make it optional (Tito)
<li>adduser: don't bomb out if shadow password file doesn't exist (from Tito &lt;farmatito at tiscali.it&gt;)
<li>applet.c: do not even try to read config if run by real root; fix suid config handling
<li>ash: fix infinite loop on exit if tty is not there anymore
<li>ash: fix kill -l (by Mats Erik Andersson &lt;mats.andersson64 at comhem.se&gt;)
<li>ash: implement type -p, costs less than 10 bytes (patch by Mats Erik Andersson &lt;mats.andersson64 at comhem.se&gt;)
<li>awk: don't segfault on printf(%*s). Closes bug 1337
<li>awk: guard against empty environment
<li>awk: some 'lineno' vars were shorts, made them ints (code got smaller)
<li>cat: stop using stdio.h opens
<li>config system: clarify PREFER_APPLETS/SH_STANDALONE effects in help text
<li>cryptpw: new applet (by Thomas Lundquist &lt;lists at zelow.no&gt;)
<li>cttyhack: new applet
<li>dd: NOEXEC fix; fix skip= parse error (spotted by Dirk Clemens &lt;develop at cle-mens.de&gt;)
<li>deluser: add optional support for removing users from groups (by Tito &lt;farmatito at tiscali.it&gt;)
<li>diff: fix SEGV (NULL deref) in diff -N
<li>diff: fix segfault on empty dirs (Peter Korsgaard &lt;peter.korsgaard at barco.com&gt;)
<li>dnsd: fix several buglets, make smaller; openlog(), so that applet's name is logged
<li>dpkg: run_package_script() returns 0 if all ok and non-zero if failure. The result code was checked incorrectly in two places. (from Kim B. Heino &lt;Kim.Heino at bluegiga.com&gt;)
<li>dpkg: use bitfields which are a bit closer to typical short/char. Code size -800 bytes
<li>dumpleases: getopt32()-ization (from Mats Erik Andersson &lt;mats.andersson64 at comhem.se&gt;)
<li>e2fsprogs: stop using statics in chattr. Minor code shrinkage (-130 bytes)
<li>ether-wake: close bug 1317. Reorder fuctions to avoid forward refs while at it
<li>ether-wake: save a few more bytes of code
<li>find: -group, -depth (Natanael Copa &lt;natanael.copa at gmail.com&gt;)
<li>find: add support for -delete, -path (by Natanael Copa)
<li>find: fix -prune. Add big comment about it
<li>find: improve usage text (Natanael Copa &lt;natanael.copa at gmail.com&gt;)
<li>find: missed 'static' on const data; size and prune were mixed up; use index_in_str_array
<li>find: un-DESKTOPize (Kai Schwenzfeier &lt;niteblade at gmx.net&gt;)
<li>find_root_device: teach to deal with /dev/ subdirs (by Kirill K. Smirnov &lt;lich at math.spbu.ru&gt;)
<li>find_root_device: use lstat - don't follow links
<li>getopt32: fix llist_t options ordering. llist_rev is now unused
<li>getopt: use getopt32 for option parsing - inspired by patch by Mats Erik Andersson &lt;mats.andersson64 at comhem.se&gt;
<li>hdparm: fix multisector mode setting (from Toni Mirabete &lt;amirabete at catix.cat&gt;)
<li>hdparm: make -T -t code smaller (-194 bytes), and output prettier
<li>ifupdown: make it possible to use DHCP clients different from udhcp
<li>ifupdown: reread state file before rewriting it. Fixes "ifup started another ifup" state corruption bug. Patch by Natanael Copa &lt;natanael.copa at gmail.com&gt;
<li>ifupdown: small optimization (avoid doing useless work if we are not going to update state file)
<li>ip: fix compilation if FEATURE_TR_CLASSES is off
<li>ip: mv ip*_main into ip.c; use a dispatcher to save on needless duplication. Saves a minor 12b
<li>ip: rewrite the ip applet to be less bloaty. Convert to index_in_(sub)str_array()
<li>ip: set the scope properly. Thanks to Jean Wolter
<li>iplink: shrink iplink; sanitize libiproute a bit (-916 bytes)
<li>iproute: shrink a bit (-200 bytes)
<li>kill: know much more signals; make code smaller; use common code for kill applet and ash kill builtin
<li>klogd: remove dependency on syslogd
<li>lash: "forking" applets are actually can be treated the same way as "non-forked". Also save a bit of space on trailing NULL array elements.
<li>lash: fix kill buglet (didn't properly recognize ESRCH)
<li>lash: make -c work; crush buffer overrun and free of non-malloced ptr (from Mats Erik Andersson &lt;mats.andersson64 at comhem.se&gt;)
<li>lash: recognize and use NOFORK applets
<li>less: fix case when regex search finds nothing; fix very obscure memory corruption bug; fix less &lt;HUGEFILE + [End] busy loop
<li>libbb: add xsendto, xunlink, xpipe
<li>libbb: fix segfault in reset_ino_dev_hashtable() when *hashtable was NULL
<li>libbb: make pidfile writing configurable
<li>libbb: make xsocket die with address family printed (if VERBOSE_RESOLUTION_ERRORS=y)
<li>libbb: rework NOMMU helper API so that it makes more sense and easier to use
<li>libiproute: audit callgraph, shortcut error paths into die() functions
<li>lineedit: do not try to open NULL history file
<li>lineedit: nuke two unused variables and code which sets them
<li>login: remove setpgrp call (makes it work from shell prompt again); sanitize stdio descriptors (we are suid, need to be careful!)
<li>login: shrink login and set_environment by ~100 bytes
<li>mount: fix incorrect usage of strtok (inadvertently used NULL sometimes)
<li>mount: fix mounting of symlinks (mount from util-linux allows that)
<li>msh: data/bss reduction (more than 9k of it); fix "underscore bug" (a_b=1111 didn't work); fix obscure case with backticks and closed fd 1
<li>nc: port nc 1.10 to busybox
<li>netstat: fix for bogus state value for raw sockets
<li>netstat: introduce -W: wide, ipv6-friendly output; shrink by ~500 bytes
<li>nmeter: should die if stdout doesn't like him anymore
<li>patch: do not try to delete same file twice
<li>ping: fix wrong sign extension of packet id (bug 1373)
<li>ps: add -o tty and -o rss support; make a bit smaller; work around libc bug: printf("%.*s\n", MAX_INT, buffer)
<li>run_parts: rewrite
<li>run_parts: do not check path portion of a name for "bad chars". Needed for ifupdown. Patch by Gabriel L. Somlo &lt;somlo at cmu.edu&gt;
<li>sed: fix escaped newlines in -f
<li>split: new applet
<li>stat: remove superfluous bss user (flags) and manually unswitch some areas
<li>stty: fix option parsing bug (spotted by Sascha Hauer &lt;s.hauer at pengutronix.de&gt;)
<li>svlogd: fix 'SEGV on uninitialized data' and make it honor TERM
<li>tail: fix SEGV on "tail -N"
<li>ipsvd: tcpsvd,udpsvd are new applets, GPL-ed 'clones' of Dan Bernstein's tcpserver. Author: Gerrit Pape &lt;pape at smarden.org&gt;, http://smarden.sunsite.dk/ipsvd/
<li>test: close bug 1371; plug a memory leak; code size reduction
<li>tftp: code diet, and I think retransmits were broken
<li>tr: fix bug where we did not reject invalid classes like '[[:alpha'. debloat while at it
<li>udhcp: MAC_BCAST_ADDR and blank_chaddr are in fact constant, move to rodata; use pipe instead of socketpair
<li>udhcp[cd]: stop using atexit magic fir pidfile removal; stop deleting our own pidfile if we daemonize
<li>xargs: shrink code, ~80 bytes; simplify word list management
<li>zcip: make it work on NOMMU (+ improve NOMMU support machinery)
    </ul>
  </li>

  <li><b>20 May 2007 -- BusyBox 1.5.1 (stable)</b>
    <p><a href="http://busybox.net/downloads/busybox-1.5.1.tar.bz2">BusyBox 1.5.1</a>.
    (<a href="http://busybox.net/downloads/fixes-1.5.1/">patches</a>,
    <a href="http://busybox.net/fix.html">how to add a patch</a>)</p>

    <p>This is a bugfix-only release, with fixes to hdparm, hush, ifupdown, ps
    and sed.</p>
  </li>

  <li><b>23 March 2007 -- BusyBox 1.5.0 (unstable)</b>
    <p><a href="http://busybox.net/downloads/busybox-1.5.0.tar.bz2">BusyBox 1.5.0</a>.
    (<a href="http://busybox.net/downloads/fixes-1.5.0/">patches</a>,
    <a href="http://busybox.net/fix.html">how to add a patch</a>)</p>

    <p>Since this is a x.x.0 release, it probably does not deserve "stable"
    label. Please help making 1.5.1 stable by testing 1.5.0.</p>
    <p>Notable changes since previous release:
    <ul>
    <li>find: added support for -user, -not, fixed -mtime, -mmin, -perm
    <li>[de]archivers: merge common logic into one module
    <li>ping[6]: unified code for both
    <li>less: regex search improved
    <li>ash: more readable code, testsuite added
    <li>sed: several very obscure bugs fixed
    <li>chown: -H, -L, -P support (required by POSIX)
    <li>tar: handle (broken) checksums a-la Sun; tar restores mode again
    <li>grep: implement -w, "implement" -a and -I by ignoring them
    <li>cp: more sane behavior when overwriting existing files
    <li>init: stop doing silly things with the console (-400 bytes)
    <li>httpd: make httpd usable for NOMMU CPUs; fix POSTDATA handling bugs
    <li>httpd: run interpreter for configured file extensions in any dir,
        not only in /cgi-bin/
    <li>chrt: new applet
    <li>SELinux: SELinux-related code and -Z option added to several applets,
        new SELinux-specific applets: chcon, runcon.
    <li>Build system: produces link map, uses -Wwrite-strings to catch
        improper usage of string constants.
    <li>Data and bss section usage audited and reduced - should help NOMMU
        targets.
    <li>Applets with bug fixes: gunzip, vi, syslogd, dpkg, ls, adjtimex, resize,
        sv, printf, diff, awk, sort, dpkg, diff, tftp
    <li>Applets with usability improvements: swapon, more, ifup/ifdown, hwclock,
        udhcpd, start_stop_daemon, cmp
    <li>Applets with code cleaned up: telnet, fdisk, fsck_minix, mkfs_minix,
        syslogd, swapon, runsv, svlogd, klogd
    </ul>
  </li>

  <li><b>18 March 2007 -- BusyBox 1.4.2 (stable)</b>
    <p><a href="http://busybox.net/downloads/busybox-1.4.2.tar.bz2">BusyBox 1.4.2</a>.
    </p>

    <p>This release includes only trivial fixes accumulated since 1.4.1.
    </p>
  </li>

  <li><b>25 January 2007 -- BusyBox 1.4.1 (stable)</b>
    <p><a href="http://busybox.net/downloads/busybox-1.4.1.tar.bz2">BusyBox 1.4.1</a>.
    (<a href="http://busybox.net/downloads/fixes-1.4.1/">patches</a>)</p>

    <p>This release includes only trivial fixes accumulated since 1.4.0.
    </p>
  </li>

  <li><b>20 January 2007 -- BusyBox 1.4.0 (stable)</b>
    <p><a href="http://busybox.net/downloads/busybox-1.4.0.tar.bz2">BusyBox 1.4.0</a>.
    (<a href="http://busybox.net/downloads/fixes-1.4.0/">patches</a>)</p>

    <p>Since this is a x.x.0 release, it probably is a bit less "stable"
    than usual.</p>
    <p>Changes since previous release:
    <ul>
    <li>e2fsprogs are mostly removed from busybox. Some smaller parts remain,
    the rest of it sits disabled in e2fsprogs/old_e2fsprogs/*, because
    it's too bloated. Really. I'm afraid it's about the only way we can
    ever get e2fsprogs cleaned up.
    <li>less: many improvements. Now can display binary files
    (although I expect it to have trouble with displays where 8bit chars
    don't have 1-to-1 char/glyph relationship). Regexp search is not buggy
    anymore. Less does not read entire input up-front. Reads input
    as it appears (yay!). Works rather nice as man pager. I recommend it
    for general use now.
    <li>IPv6: generic support is in place, many networking applets are
    upgraded to be IPv6 capable. Probably some work remains, but it is
    already much better than what we had previously.
    <li>arp: new applet (thanks to Eric Spakman).
    <li>fakeidentd: non-forking standalone server part was taking ~90%
    of the applet. Factored it out (in fact, rewrote it).
    <li>syslogd: mostly rewritten.
    <li>decompress_unzip, gzip: sanitized a bit.
    <li>sed: better hadling of NULs
    <li>httpd: stop adding our own "Content-type:" to CGI output
    <li>chown: user.grp works again.
    <li>minor bugfixes to: passwd, date, tftp, start_stop_daemon, tar,
    ps, ifupdown, time, su, stty, awk, ping[6], sort,...
    </ul>
  </li>

  <li><b>20 January 2007 -- BusyBox 1.3.2 (stable)</b>
    <p><a href="http://busybox.net/downloads/busybox-1.3.2.tar.bz2">BusyBox 1.3.2</a>.</p>

    <p>This release includes only one trivial fix accumulated since 1.3.1
    </p>
  </li>

  <li><b>27 December 2006 -- BusyBox 1.3.1 (stable)</b>
    <p><a href="http://busybox.net/downloads/busybox-1.3.1.tar.bz2">BusyBox 1.3.1</a>.
    (<a href="http://busybox.net/downloads/fixes-1.3.1/">patches</a>)</p>

    <p>Closing 2006 with new release. It includes only trivial fixes accumulated since 1.3.0
    </p>
  </li>

  <li><b>14 December 2006 -- BusyBox 1.3.0 (stable)</b>
    <p><a href="http://busybox.net/downloads/busybox-1.3.0.tar.bz2">BusyBox 1.3.0</a>.
    (<a href="http://busybox.net/downloads/fixes-1.3.0/">patches</a>)</p>

    <p>This release has CONFIG_DESKTOP option which enables features
    needed for busybox usage on desktop machine. For example, find, chmod
    and chown get several less frequently used options, od is significantly
    bigger but matches GNU coreutils, etc. Intended to eventually make
    busybox a viable alternative for "standard" utilities for slightly
    adventurous desktop users.
    <p>Changes since previous release:
    <ul>
    <li>find: taking many more of standard options
    <li>ps: POSIX-compliant -o implemented
    <li>cp: added -s, -l
    <li>grep: added -r, fixed -h
    <li>watch: make it exec child like standard one does (was totally
        incompatible)
    <li>tar: fix limitations which were preventing bbox tar usage
        on big directories: long names and linknames, pax headers
        (Linux kernel tarballs have that). Fixed a number of obscure bugs.
        Raised max file limit (now 64Gb). Security fixes (/../ attacks).
    <li>httpd: added -i (inetd), -f (foreground), support for
        directory indexer CGI (example is included), bugfixes.
    <li>telnetd: fixed/improved IPv6 support, inetd+standalone support,
        other fixes. Useful IPv6 stuff factored out into libbb.
    <li>runit/*: new applets adapted from http://smarden.sunsite.dk/runit/
        (these are my personal favorite small-and-beautiful toys)
    <li>minor bugfixes to: login, dd, mount, umount, chmod, chown, ln, udhcp,
        fdisk, ifconfig, sort, tee, mkswap, wget, insmod.
    </ul>
    <p>Note that GnuPG key used to sign this release is different.
    1.2.2.1 is also signed post-factum now. Sorry for the mess.
    </p>
  </li>

  <li><b>29 October 2006 -- BusyBox 1.2.2.1 (fix)</b>
    <p><a href="http://busybox.net/downloads/busybox-1.2.2.1.tar.bz2">BusyBox 1.2.2.1</a>.</p>

    <p>Added compile-time warning that static linking against glibc
    produces buggy executables.
  </li>

  <li><b>24 October 2006 -- BusyBox 1.2.2 (stable)</b>
    <p>It's a bit overdue, but
    <a href="http://busybox.net/downloads/busybox-1.2.2.tar.bz2">here is
    BusyBox 1.2.2</a>.</p>

    <p>This release has dozens of fixes backported from the ongoing development
    branch.  There are a couple of bugfixes to sed, two fixes to documentation
    generation (BusyBox.html shouldn't have USE() macros in it anymore), fix
    umount to report the right errno on failure and to umount block devices by
    name with newer kernels, fix mount to handle symlinks properly, make mdev
    delete device nodes when called for hotplug remove, fix a segfault
    in traceroute, a minor portability fix to md5sum option parsing, a build
    fix for httpd with old gccs, an options parsing tweak to hdparm, make test
    fail gracefully when getgroups() returns -1, fix a race condition in
    modprobe when two instances run at once (hotplug does this), make "tar xf
    foo.tar dir/dir" extract all subdirectories, make our getty initialize the
    terminal more like mingetty, an selinux build fix, an endianness fix in
    ping6, fix for zcip defending addresses, clean up some global variables in
    gzip to save memory, fix sulogin -tNNN, a help text tweak, several warning
    fixes and build fixes, fixup dnsd a bit, and a partridge in a pear tree.</p>

    <p>As <a href="http://lwn.net/Articles/202106/">Linux Weekly News noted</a>,
    this is my (Rob's) last release of BusyBox.  The new maintainer is Denis
    Vlasenko, I'm off to do <a href="http://landley.net/code">other things</a>.
    </p>
  </li>

  <li><b>29 September 2006 -- New license email address.</b>
    <p>The email address gpl@busybox.net is now the recommended way to contact
    the Software Freedom Law Center to report BusyBox license violations.</p>

  <li><b>31 July 2006 -- BusyBox 1.2.1 (stable)</b>
    <p>Since nobody seems to have objected too loudly over the weekend, I
    might as well point you all at
    <a href="http://busybox.net/downloads/busybox-1.2.1.tar.bz2">Busybox
    1.2.1</a>, a bugfix-only release with no new features.</p>

    <p>It has three shell fixes (two to lash: going "var=value" without
    saying "export" should now work, plus a missing null pointer check, and
    one to ash when redirecting output to a file that fills up.)  Fix three
    embarassing thinkos in the new dmesg command.  Two build tweaks
    (dependencies for the compressed usage messages and running make in the
    libbb subdirectory).  One fix to tar so it can extract git-generated
    tarballs (rather than barfing on the pax extensions).  And a partridge
    in a pear...  Ahem.</p>

    <p>But wait, there's more!  A passwd changing fix so an empty
    gecos field doesn't trigger a false objection that the new passwd contains
    the gecos field.  Make all our setuid() and setgid() calls check the return
    value in case somebody's using per-process resource limits that prevent
    a user from having too many processes (and thus prevent a process from
    switching away from root, in which case the process will now _die_ rather
    than continue with root privileges).  A fix to adduser to make sure that
    /etc/group gets updated.  And a fix to modprobe to look for modules.conf
    in the right place on 2.6 kernels.</p>

  <li><b>30 June 2006 -- BusyBox 1.2.0</b>
    <p>The -devel branch has been stabilized and the result is
    <a href="http://busybox.net/downloads/busybox-1.2.0.tar.bz2">Busybox
    1.2.0</a>.  Lots of stuff changed, I need to work up a decent changelog
    over the weekend.</p>

    <p>I'm still experimenting with how long is best for the development
    cycle, and since we've got some largeish projects queued up I'm going to
    try a longer one.  Expect 1.3.0 in December.  (Expect 1.2.1 any time
    we fix enough bugs. :)</p>

    <p>Update: Here are <a href="http://busybox.net/downloads/busybox-1.2.0.fixes.patch">the first few bug fixes</a> that will go into 1.2.1.</p>

  <li><b>17 May 2006 -- BusyBox 1.1.3 (stable)</b>
    <p><a href="http://busybox.net/downloads/busybox-1.1.3.tar.bz2">BusyBox
    1.1.3</a> is another bugfix release.  It makes passwd use salt, fixes a
    memory freeing bug in ls, fixes "build all sources at once" mode, makes
    mount -a not abort on the first failure, fixes msh so ctrl-c doesn't kill
    background processes, makes patch work with patch hunks that don't have a
    timestamp, make less's text search a lot more robust (the old one could
    segfault), and fixes readlink -f when built against uClibc.</p>

    <p>Expect 1.2.0 sometime next month, which won't be a bugfix release.</p>

  <li><b>10 April 2006 -- BusyBox 1.1.2 (stable)</b>
    <p>You can now download <a href="http://busybox.net/downloads/busybox-1.1.2.tar.bz2">BusyBox 1.1.2</a>, a bug fix release consisting of 11 patches
    backported from the development branch: Some build fixes, several fixes
    for mount and nfsmount, a fix for insmod on big endian systems, a fix for
    find -xdev, and a fix for comm.  Check the file "changelog" in the tarball
    for more info.</p>

    <p>The next new development release (1.2.0) is slated for June.  A 1.1.3
    will be released before then if more bug fixes crop up.  (The new plan is
    to have a 1.x.0 new development release every 3 months, with 1.x.y stable
    bugfix only releases based on that as appropriate.)</p>

  <li><b>27 March 2006 -- Software Freedom Law Center representing BusyBox and uClibc</b>
    <p>One issue Erik Andersen wanted to resolve when handing off BusyBox
    maintainership to Rob Landley was license enforcement.  BusyBox and
    uClibc's existing license enforcement efforts (pro-bono representation
    by Erik's father's law firm, and the
    <a href="http://www.busybox.net/shame.html">Hall of Shame</a>), haven't
    scaled to match the popularity of the projects.  So we put our heads
    together and did the obvious thing: ask Pamela Jones of
    <a href="http://www.groklaw.net">Groklaw</a> for suggestions.  She
    referred us to the fine folks at softwarefreedom.org.</p>

    <p>As a result, we're pleased to announce that the
    <a href="http://www.softwarefreedom.org">Software Freedom Law Center</a>
    has agreed to represent BusyBox and uClibc.  We join a number of other
    free and open source software projects (such as
    <a href="http://lwn.net/Articles/141806/">X.org</a>,
    <a href="http://lwn.net/Articles/135413/">Wine</a>, and
    <a href="http://plone.org/foundation/newsitems/software-freedom-law-center-support/">Plone</a>
    in being represented by a fairly cool bunch of lawyers, which is not a
    phrase you get to use every day.</p>

  <li><b>22 March 2006 -- BusyBox 1.1.1</b>
    <p>The new maintainer is Rob Landley, and the new release is <a href="http://busybox.net/downloads/busybox-1.1.1.tar.bz2">BusyBox 1.1.1</a>.  Expect a "what's new" document in a few days.  (Also, Erik and I have have another announcement pending...)</p>
    <p>Update: Rather than put out an endless stream of 1.1.1.x releases,
    the various small fixes have been collected together into a
    <a href="http://busybox.net/downloads/busybox-1.1.1.fixes.patch">patch</a>,
    and new fixes will be appended to that as needed.  Expect 1.1.2 around
    June.</p>
  </li>
  <li><b>11 January 2006 -- 1.1.0 is out</b>
    <p>The new stable release is
    <a href="http://www.busybox.net/downloads/busybox-1.1.0.tar.bz2">BusyBox
    1.1.0</a>.  It has a number of improvements, including several new applets.
    (It also has <a href="http://www.busybox.net/lists/busybox/2006-January/017733.html">a few rough spots</a>,
    but we're trying out a "release early, release often" strategy to see how
    that works.  Expect 1.1.1 sometime in March.)</p>

  <li><b>31 October 2005 -- 1.1.0-pre1</b>
    <p>The development branch of busybox is stable enough for wider testing, so
    you can now
    <a href="http://www.busybox.net/downloads/busybox-1.1.0-pre1.tar.bz2">download</a>,
    the first prerelease of 1.1.0.  This prerelease includes a lot of
    <a href="http://www.busybox.net/downloads/BusyBox.html">new
    functionality</a>: new applets, new features, and extensive rewrites of
    several existing applets.  This prerelease should be noticeably more
    <a href="http://www.opengroup.org/onlinepubs/009695399/">standards
    compliant</a> than earlier versions of busybox, although we're
    still working out the <a href="https://bugs.busybox.net">bugs</a>.</p>

  <li><b>16 August 2005 -- 1.01 is out</b>

    <p>A new stable release (<a href="http://www.busybox.net/downloads/busybox-1.01.tar.bz2">BusyBox
    1.01</a>) is now available for download, containing over a hundred
    <a href="http://www.busybox.net/lists/busybox/2005-August/015424.html">small
    fixes</a> that have cropped up since the 1.00 release.</p>

  <li><b>13 January 2005 -- Bug and Patch Tracking</b><p>

    Bug reports sometimes get lost when posted to the mailing list.  The
    developers of BusyBox are busy people, and have only so much they can keep
    in their brains at a time. In my case, I'm lucky if I can remember my own
    name, much less a bug report posted last week... To prevent your bug report
    from getting lost, if you find a bug in BusyBox, please use the
    <a href="https://bugs.busybox.net/">shiny new Bug and Patch Tracking System</a>
    to post all the gory details.

    <p>

    The same applies to patches... Regardless of whether your patch
    is a bug fix or adds spiffy new features, please post your patch
    to the Bug and Patch Tracking System to make certain it is
    properly considered.


  <p>
  <li><b>13 October 2004 -- BusyBox 1.00 released</b><p>

    When you take a careful look at nearly every embedded Linux device or
    software distribution shipping today, you will find a copy of BusyBox.
    With countless routers, set top boxes, wireless access points, PDAs, and
    who knows what else, the future for Linux and BusyBox on embedded devices
    is looking very bright.

    <p>

    It is therefore with great satisfaction that I declare each and every
    device already shipping with BusyBox is now officially out of date.
    The highly anticipated release of BusyBox 1.00 has arrived!

    <p>

    Over three years in development, BusyBox 1.00 represents a tremendous
    improvement over the old 0.60.x stable series.  Now featuring a Linux
    KernelConf based configuration system (as used by the Linux kernel),
    Linux 2.6 kernel support, many many new applets, and the development
    work and testing of thousands of people from around the world.

    <p>

    If you are already using BusyBox, you are strongly encouraged to upgrade to
    BusyBox 1.00.  If you are considering developing an embedded Linux device
    or software distribution, you may wish to investigate if using BusyBox is
    right for your application.  If you need help getting started using
    BusyBox, if you wish to donate to help cover expenses, or if you find a bug
    and need help reporting it, you are invited to visit the <a
    href="FAQ.html">BusyBox FAQ</a>.

    <p>

    As usual you can <a href="downloads">download busybox here</a>.

    <p>Have Fun!

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


  <li><b>16 August 2004 -- BusyBox 1.0.0-rc3 released</b><p>

    Here goes release candidate 3...
    <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>
  <li><b>26 July 2004 -- BusyBox 1.0.0-rc2 released</b><p>

    Here goes release candidate 2...
    <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>
  <li><b>20 July 2004 -- BusyBox 1.0.0-rc1 released</b><p>

    Here goes release candidate 1...  This fixes all (most?) of the problems
    that have turned up since -pre10.  In particular, loading and unloading of
    kernel modules with 2.6.x kernels should be working much better.
    <p>

    I <b>really</b> want to get BusyBox 1.0.0 released soon and I see no real
    reason why the 1.0.0 release shouldn't happen with things pretty much as
    is.  BusyBox is in good shape at the moment, and it works nicely for
    everything that I'm doing with it.  And from the reports I've been getting,
    it works nicely for what most everyone else is doing with it as well.
    There will eventually be a 1.0.1 anyway, so we might as well get on with
    it.  No, BusyBox is not perfect.  No piece of software ever is.  And while
    there is still plenty that can be done to improve things, most of that work
    is waiting till we can get a solid 1.0.0 release out the door....
    <p>

    Please do not bother to send in patches adding cool new features at this
    time.  Only bug-fix patches will be accepted.  If you have submitted a
    bug-fixing patch to the busybox mailing list and no one has emailed you
    explaining why your patch was rejected, it is safe to say that your patch
    has been lost or forgotten.  That happens sometimes.  Please re-submit your
    bug-fixing patch to the BusyBox mailing list, and be sure to put "[PATCH]"
    at the beginning of the email subject line!

    <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>
    On a less happy note, My 92 year old grandmother (my dad's mom) passed away
    yesterday (June 19th).  The funeral will be Thursday in a little town about
    2 hours south of my home.  I've checked and there is absolutely no way I
    could be back in time for the funeral if I attend <a
    href="http://www.linuxsymposium.org/2004/">OLS</a> and give my presentation
    as scheduled.
    <p>
    As such, it is with great reluctance and sadness that I have come
    to the conclusion I will have to make my appologies and skip OLS
    this year.
    <p>


  <p>
  <li><b>13 April 2004 -- BusyBox 1.0.0-pre10 released</b><p>

    Ok, I lied.  It turns out that -pre9 will not be the final BusyBox
    pre-release.  With any luck however -pre10 will be, since I <b>really</b>
    want to get BusyBox 1.0.0 released very soon.  As usual, please do not
    bother to send in patches adding cool new features at this time.  Only
    bug-fix patches will be accepted.  It would also be <b>very</b> helpful if
    people could continue to review the BusyBox documentation and submit
    improvements.

    <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>6 April 2004 -- BusyBox 1.0.0-pre9 released</b><p>

    Here goes the final BusyBox pre-release...  This is your last chance for
    bug fixes.  With luck this will be released as BusyBox 1.0.0 later this
    week.  Please do not bother to send in patches adding cool new features at
    this time.  Only bug-fix patches will be accepted.  It would also be
    <b>very</b> helpful if people could help review the BusyBox documentation
    and submit improvements.  I've spent a lot of time updating the
    documentation to make it better match reality, but I could really use some
    assistance in checking that the features supported by the various applets
    match the features listed in the documentation.

    <p>
    I had hoped to get this released a month ago, but
    <a href="http://codepoet.org/gallery/baby_peter/img_1796">
    another release on 1 March 2004</a> has kept me busy...

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


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



  <li><b>10 December 2003 -- BusyBox 1.0.0-pre4 released</b><p>

    Here goes the fourth pre-release for the new BusyBox stable
    series.  This release includes major rework to sed, lots of
    rework on tar, a new tiny implementation of bunzip2, a new
    devfsd applet, support for 2.6.x kernel modules, updates to
    the ash shell, sha1sum and md5sum have been merged into a
    common applet, the dpkg applets has been cleaned up, and tons
    of random bugs have been fixed.  Thanks everyone for all the
    testing, bug reports, and patches!  Once again, a big
    thank-you goes to Glenn McGrath (bug1) for stepping in and
    helping get patches merged!

    <p>

    And of course, if you are reading this, you might have noticed
    the busybox website has been completely reworked.  Hopefully
    things are now somewhat easier to navigate...  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>
  <li><b>12 Sept 2003 -- BusyBox 1.0.0-pre3 released</b><p>

    Here goes the third pre-release for the new BusyBox stable
    series.  The last prerelease has held up quite well under
    testing, but a number of problems have turned up as the number
    of people using it has increased.  Thanks everyone for all
    the testing, bug reports, and patches!

    <p>

    If you have submitted a patch or a bug report to the busybox
    mailing list and no one has emailed you explaining why your
    patch was rejected, it is safe to say that your patch has
    somehow gotten lost or forgotten.  That happens sometimes.
    Please re-submit your patch or bug report 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
    (besides additional testing) that is still still on the TODO
    list before the final BusyBox 1.0.0 release is sorting out the
    modutils issues.  For the new 2.6.x kernels, we already have
    patches adding insmod and rmmod support and those need to be
    integrated.  For 2.4.x kernels, for which busybox only supports
    a limited number of architectures, we may want to invest a bit
    more work before we cut 1.0.0.  Or we may just leave 2.4.x
    module loading alone.

    <p>

    I had hoped this release would be out a month ago.  And of
    course, it wasn't since Erik became busy getting a release of
    <a href="http://www.uclibc.org/">uClibc</a>
    out the door.  Many thanks to Glenn McGrath (bug1) for
    stepping in and helping get a bunch of patches merged!  I am
    not even going to state a date for releasing BusyBox 1.0.0
    -pre4 (or the final 1.0.0).  We're aiming for late September...
    But if this release proves as to be exceptionally stable (or
    exceptionally unstable!), the next release may be very soon
    indeed.

    <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>
    <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" 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="http://sources.busybox.net/index.py/trunk/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>


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

