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


<ul>
  <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://busybox.net/cgi-bin/viewcvs.cgi/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://busybox.net/cgi-bin/viewcvs.cgi/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>
    </p>

  <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://busybox.net/cgi-bin/viewcvs.cgi/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://busybox.net/cgi-bin/viewcvs.cgi/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://busybox.net/cgi-bin/viewcvs.cgi/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://busybox.net/cgi-bin/viewcvs.cgi/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>
    </p>

  </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://busybox.net/cgi-bin/viewcvs.cgi/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://busybox.net/cgi-bin/viewcvs.cgi/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://busybox.net/cgi-bin/viewcvs.cgi/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://busybox.net/cgi-bin/viewcvs.cgi/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>
    </p>
  </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://busybox.net/cgi-bin/viewcvs.cgi/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://busybox.net/cgi-bin/viewcvs.cgi/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>
    </p>
  </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>
    </p>
  </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>
    </p>
  </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="http://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="http://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" border="0" name="submit" alt="Make donation using PayPal">
</form>
</center>
<!-- End PayPal Logo -->

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

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

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


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

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


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

     <p>

     Those wanting an easy way to test the 0.60.0 release with uClibc can
     use <a href="http://user-mode-linux.sourceforge.net/">User-Mode Linux</a>
     to give it a try by downloading and compiling
     <a href="ftp://busybox.net/buildroot.tar.gz">buildroot.tar.gz</a>.
     You don't have to be root or reboot your machine to run test this way.
     Preconfigured User-Mode Linux kernel source is also on busybox.net.
     <p>
     Another cool thing is the nifty <a href="downloads/tutorial/index.html">
     BusyBox Tutorial</a> contributed by K Computing.  This requires
     a ShockWave plugin (or standalone viewer), so you may want to grab the
     the GPLed shockwave viewer from <a href="http://www.swift-tools.com/Flash/flash-0.4.10.tgz">here</a>
     to view the tutorial.
     <p>

     Finally, In case you didn't notice anything odd about the
     version number of this release, let me point out that this release
     is <em>not</em> 0.53, because I bumped the version number up a
     bit.  This reflects the fact that this release is intended to form
     a new stable BusyBox release series.  If you need to rely on a
     stable version of BusyBox, you should plan on using the stable
     0.60.x series.  If bugs show up then I will release 0.60.1, then
     0.60.2, etc...  This is also intended to deal with the fact that
     the BusyBox build system will be getting a major overhaul for the
     next release and I don't want that to break products that people
     are shipping.  To avoid that, the new build system will be
     released as part of a new BusyBox development series that will
     have some not-yet-decided-on odd version number.  Once things
     stabilize and the new build system is working for everyone, then
     I will release that as a new stable release series.

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


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

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

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


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

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


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

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

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

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

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

<ol>

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

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

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

</ol>

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

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


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

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


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

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

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

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

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

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


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

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


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

     This release has been slow in coming, but is very solid at this
     point.  BusyBox now supports libc5 as well as GNU libc.  This
     release provides the following new apps: cut, tr, insmod, ar,
     mktemp, setkeycodes, md5sum, uuencode, uudecode, which, and
     telnet.  There are bug fixes for just about every app as well (see
     the <a href="downloads/Changelog">changelog</a> for
     details).
     <p>
     Also, some exciting infrastructure news!  Busybox now has its own
     <a href="lists/busybox/">mailing list</a>,
     publically browsable
     <a href="/cgi-bin/viewcvs.cgi/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" -->

