About Documentation Get BusyBox Development


Developer Pages

News archive

  • 28 May 2012 -- BusyBox 1.20.1 (stable)

    BusyBox 1.20.1. (git, patches, how to add a patch)

    Bug fix release. 1.20.1 has fixes for build system (some .config's were failing to build), line editing (in non-default config, sometimes history was erased), getty (was dying on self-generated SIGHUP at times), mdev (let kernel know that firmware wasn't found), sed (empty match could run forever), find (added support for -wholename), ext4 detection was added.

  • 22 April 2012 -- BusyBox 1.20.0 (unstable)

    BusyBox 1.20.0. (git, patches, how to add a patch)

    Sizes of busybox-1.19.4 and busybox-1.20.0 (with equivalent config, static uclibc build):

       text    data     bss     dec     hex filename
     840348     473    7508  848329   cf1c9 busybox-1.19.4/busybox
     843717     473    7500  851690   cfeea busybox-1.20.0/busybox

    Changes since previous release:

    Aaro Koskinen:
          cttyhack: handle multiple consoles found in sysfs
    Alexander Shishkin:
          cttyhack: print detected ctty name when called without parameters
    Alexey Fomenko:
          kill: fix segfault in arguments parsing
    Baruch Siach:
          networking: consolidate the IP checksum code. -129 bytes
          udhcp: remove the declaration of non-existent udhcp_checksum
    Bernhard Reutner-Fischer:
          Config: fix wording in help-text
          Config: clarify {SHOW,VERBOSE,COMPRESS}_USAGE
          bloat-o-meter: handle huge (hex) sizes
          bloat-o-meter: remove unused code
    Christian Engelmayer:
          syslogd: work around rename() not renaming hardlinks to themselves
    Cristian Ionescu-Idbohrn:
          ps: fix for !FEATURE_PS_LONG build
    Dan Fandrich:
          rx: fix file corruption with duplicate blocks
    Daniel Fandrich:
          android build system updates
          rx: fix file corruption on block checksum failure
          configs/android_defconfig: update
    Dave Love:
          mount: support -o noacl
    Dennis Groenen:
          vi: add ":prev" command support
    Denys Vlasenko:
          build system: detect missing crypt and drop it from linking
          build system: fix broken CONFIG_SYSROOT handling
          build system: remove bogus $(1) in last commit
          libarchive: move seamless .Z support into unpack_gz_stream
          libarchive: update seamless uncompression code
          libarchive/decompress_unzip.c -> decompress_gunzip.c. no code changes
          libbb.h: add check for bad off_t size detection
          libbb.h: remove unused defines
          libbb/bb_strtonum: always set end ptr, even on error return
          libbb/procps.c: make fast_strtoul_10() stop on '\n' too
          libbb: make xchroot do a chdir("/") after chroot
          libbb: remove is_directory's argument which is always NULL
          libbb: shrink base64 decoding a bit
          platform.h: define endgrent() and endpwent() as no-ops on Android
          libpwdgrp/pwd_grp.c: set opened /etc/{passwd,group,shadow} fds CLOEXEC
          libpwdgrp/pwd_grp.c: use same static buffer for all getpwXX functions
          lineedit: add support for M-b, M-f, M-d, M-Backspace
          lineedit: add support for history saving on exit
          lineedit: fix atomic replace of history file
          lineedit: remove SAVE_HISTORY bit, ->hist_file can be used as indicator
          applets_sh/nologin: an applet implemented as shell script
          acpid: close fds which are reported as dead (POLLERR/POLLHUP/POLLNVAL) by poll
          acpid: do not install handlers for fatal signals
          applet_tables: fix single applet build failure. Closes 4009
          ash: in standalone mode, search in $PATH if /proc/self/exe doesn't exist
          awk: fix a SEGV
          awk: next_input_file can return NULL, don't SEGV in this case
          blkid: if parameters are given, do not scan /dev
          bzcat: fix unpacking of more than one file, and unpacking of zero-size bz2. Closes 4393
          chpasswd: fix possible free() or non-allocated string. +8 bytes
          conspy,nandwrite,nanddump: enable in defconfig
          crond: fix the case when option -d is disabled
          cttyhack: move /sys/class/tty/console/active check to the front
          date: extend help text to explain compat date format. Closes 4820
          dhcpc: fix the case where we might add extra space at the end of envvar
          gen_build_files.sh: simplify "print everything up to INSERT line" part
          gen_build_files: don't pass 200k+ strings as params. Closes 4321
          get_header_tar: shrink 6->64 sign extension code
          getty,login: tighten up handling of ctty, pgrp, and tty attr restoring on timeout
          getty: Hurd has no CBAUD, work around that
          getty: add O_NONBLOCK to open which is used to drop ctty
          getty: fix a minor problem of Ctrl-D not printing '\n'
          getty: remove now not needed resetting of ALRM to to SIG_DFL
          getty: reset tty attrs on Ctrl-C and Ctrl-D too
          hexdump: fix hexdump -n1 -ve '8/2 ""' SEGV. Closes 4478
          hostname: make -i not emit extra trailing space
          httpd: don't drop/abuse QUERY_STRING when /cgi-bin/index.cgi is used
          httpd: fix /../ sanitization (had one extra semicolon)
          httpd: fix MD5-encrypted-in-httpd.conf password logic
          httpd: fix sendfile of files larger than 2 Gb. Closes 4754
          httpd: make byte ranges which start at 0 work too. Closes 4766
          httpd: remove redundant NULL assignment and save one strrchr. -8 bytes
          hush: fix $HISTFILE handling
          hwclock: fix wrong comparison of time value (when it will overlow int)
          inet_cksum: big-endian fix
          inetd: close new udp fd in "udp nowait" case
          init: add a segv debugging aid, disabled by default
          init: utmp update of DEAD_PROCESS was misplaced, and could be skipped
          killall5: don't do STOP/CONT dance if the signal we send is SIGSTOP or SIGCONT
          less: fix for screen size detection
          losetup: implement -r option. Closes 4033
          makemime: content-type should default to application/octet-stream
          makemime: fix -a option not taking parameter
          mdev: do not treat non-leading '#' chars as start of comment. Closes 4676
          mdev: don't reparse rules on -s
          mdev: fix mode of created node if config file support is not configured
          mke2fs: do not zero out first kilobyte. Closes 3247
          mktemp: add support for -u
          modinfo: make it select PLATFORM_LINUX. Closes 4411
          mount: free commented /etc/filesystems lines when we read it
          mount: make FEATURE_MOUNT_NFS not needed for Linux 2.6.23+
          mount: resolve hosts to IPs in NFS mounts
          nc: support "-e PROG" form of -e option
          nmeter: fix block i/o count on newer Linux kernels
          nommu: fix cases where we mangle argv[0][0]
          ntpd: avoid printing messages between send and recv: good for fast networks
          ntpd: drop offset averaging code
          ntpd: experimental code to correct frequency a bit more aggressively
          ntpd: fix a case when discipline_jitter = 0 if we step
          ntpd: fix build failure if !NTPD_SERVER. Closes 4994
          ntpd: fix offset adjustment after step, better step printing
          ntpd: increase OPT_qq constant to not collide with -L
          ntpd: log clock drift with three digits after decimal point
          ntpd: log jitter on update too; increase assumed clock precision x2 - to 2ms
          ntpd: make "reply from IP" messages more uniform
          old_e2fsprogs/blkid: close the fd after we are done with it
          passwd,cryptpw: make default encryption algorithm configurable
          patch: add a test we currently fail
          ping: display real IPv6 response address. Hopefully closes 3745
          preparatory cleanups for seamless uncompression improvements
          printf: fix this case: printf "%b" '\0057usr\0057bin\n'
          ps: add support for -l for !DESKTOP
          pwd: implement -LP if DESKTOP
          sed: fix possible case of signed char bug; expand debugging printouts
          sed: fix range handling for sed -i. Closes 4069
          sendmail: don't talk until 220 code is seen. Closes 3487
          sendmail: stop doing -t unconditionally; makemime: generate 76 char base64 lines
          shell_builtin_read: set cc[VMIN] to 1; lineedit: don't clear c_cc[VINTR]
          ssd: compat: match -x EXECUTABLE by /proc/pid/exe too
          start_stop_daemon: set complementary group ids too. Closes 3253
          stty: trim too verbose error messages (-40 bytes)
          swapoff: do not pass "p" in opt_complementary
          syslogd: fix missing newline problen in memory log buffer. Closes 4159
          tail: fix -c +N. Closes 4111
          tar,rpm2cpio: check that child decompressor did not error out
          tar: add support for PAX-encoded path=LONGFILENAME
          test: "test !" was accessing argv past NULL - fix it. Closes 4832
          tftp: mode string is case independent
          tftpd: chroot to DIR, not merely chdir. Closes 4874
          top: fix CPU% for thread display. Closes 4081
          tune2fs: add support for -C MOUNT_COUNT. +40 bytes. Closes 3901
          ubi_tools: add workaround for bad kernel headers. Closes 4838
          udhcp: make arpping code resistant to time jumps
          udhcpc6: new applet
          udhcpc6: rudimentary code to export data to script; fix IAADDR parsing
          udhcpc[6]: remove -B from udhcpc6 and "--version" from both
          udhcpc: add support for DHCP option 212 (RFC 5969)
          udhcpc: deprecate --hostname NAME
          udhcpc: fix 6rd option formatting (was using 4 more bytes than there is)
          udhcpc: fix improper size calculation for OPTION_STRING_HOST
          udhcpc: in fill_envp, export BOOTP fields first
          udhcpc: remove unused argument in sprint_nip6
          udhcpc: remove workaround for bugs in Win98 dhcp server ("MSFT 98" vendor string)
          udhcpc: reuse string constant; remove unneeded memset(0)
          udhcpc: sanitize hostnames in incoming packets. Closes 3979
          udhcpc: shrink code by setting xid more economically
          umount: make -d always active, add -D to suppress it
          uncompress: die on read errors
          uncompress: fix buffer underrun by corrupted input
          unzip: fflush stdout before reading interative y/n answer from stdin
          uudecode: fix buggy check for empty filename
          vconfig: small code shrink. Closes 4658
          vi: fix [end] key handling
          vi: move mark[i] pointers if text[] moves after realloc
          vi: prevent unlimited recursion in do_cmd(). Closes 4153
          wget: URL-decode user:password before base64-encoding it into auth hdr. Closes 3625
          wget: fix use-after-free on redirect
    Felipe Contreras:
          modprobe: accept -b even if blacklist functionality is disabled
    Flemming Madsen:
          ps: with -l, show STIME too
          inotify: if PROG is -, print events to stdout
    Ian Wienand:
          find: fix -follow support
          gzip: new GZIP_BIG_MEM option
          login: new option LOGIN_SESSION_AS_CHILD
          du: use long long for size field
    Javier Viguera:
          find_mount_point: fix find_mount_point for char devices
          mdev: fix wrong sizeof
    Jonh Wendell:
          Make unix (local) sockets work without IPv6 enabled
    Karol Lewandowski:
          mount: handle list of comma-separated fs types in -t option
    Kevin Cernekee:
          cttyhack: remove the trailing newline when reading console name from sysfs
    Lauri Hintsala:
          ifupdown: remove interface from state_list if iface_up fails
    Lauri Kasanen:
          grep: be GNU compatible with -f EMPTY_FILE
          depmod: supply help text
    Leonid Lisovskiy:
          udhcp: IF_UDHCP_VERBOSE() macro - improve code readability
          libbb: split decode_base64 off read_base64
    Matthias Andree:
          Fixes for FreeBSD build
    Michael McTernan:
          udhcp: finish support of classless static routes
    Natanael Copa:
          ifupdown: support metric for static default gw
          grep: support for -x, match whole line
    Oliver Metz:
          disable strverscmp usage if we build against uClibc-0.9.31
    Pascal Bellard:
          conspy: add framebuffer support, -Q option
          httpd: make it possible to use system passwords for auth
          httpd: small fixes to previous change
    Paulius Zaleckas:
          vconfig: remove /proc/net/vlan/config check
          gen_build_files.sh: exclude hidden directories
    Pere Orga:
          hostid: fix behavior on identifiers starting with zeros
          applets_sh/*: add a few more examples of "shell applets"
    Peter Korsgaard:
          fbsplash: limit progress bar flicker
          fbsplash: support 8bit mode
          ifupdown: support post-up / pre-down hooks
          bb_daemonize_or_rexec(): add flag to double-fork; use it in start-stop-daemon
    Quentin Casasnovas:
          bootchartd: add process accounting feature
    Rob Landley:
          patch: make it able to create files (again)
          patch: make -p count path components, not slashes (think /blah//thing)
    Rob Walker:
          Add SYSROOT, EXTRA_{LDFLAGS,LDLIBS} config opts; sample Android NDK config
          httpd: emit correct content length on range requests past the end. Closes 4952
    Sergey Naumov:
          login: -f should not ask for password even with PAM
    Sonic Zhang:
          depmod.pl: output correct dep format according to kernel version
    Sven Oliver Moll:
          lsof: new applet
    Timo Teras:
          mkdir: fix permissions on 64-bit platforms
    Tristan Schmelcher:
          Fix link failure on some platforms when PAM is enabled
    Vladislav Grishenko:
          udhcpc: on SIGUSR1, limit renew attempts time to 20 seconds; then do total reconfig
    Yin Kangkai:
          fbsplash: use line_length instead of xres * bytes_per_pixel
    walter harms:
          touch: add new option FEATURE_TOUCH_SUSV3

  • 4 February 2012 -- BusyBox 1.19.4 (stable)

    BusyBox 1.19.4. (git, patches, how to add a patch)

    Bug fix release. 1.19.4 has fixes for getty (build fix for systems without CBAUD), mdev (error in mdev.seq handling if sequence number is >999), modinfo (made it select PLATFORM_LINUX), wget (fixed use-after-free on redirect).

  • 29 October 2011 -- BusyBox 1.19.3 (stable)

    BusyBox 1.19.3. (git, patches, how to add a patch)

    Bug fix release. 1.19.3 has fixes for build system, chpasswd, crond, inetd (fix open fd leak), syslogd (fix problem with in-memory log buffer), tail (fix for 'tail: -c +N' with large N), tftp (made mode check case-insensitive).

  • 6 September 2011 -- BusyBox 1.19.2 (stable)

    BusyBox 1.19.2. (git, patches, how to add a patch)

    Bug fix release. 1.19.2 has fixes for FreeBSD build, build fix for match_fstype.c, ash/hush (history file saving fixes), cttyhack (/sys/class/tty/console/active has trailing newline, account for that), find (fix for -follow), grep (fix for "grep -f EMPTY_FILE" usage), less (fix for windows sizing via "ESC [ 6 n"), patch (fix handling of patches which create files) sed (fix for range match with option -i), top (fix for thread accounting), uncompress (fix for certain cases of corrupted input), swapoff.

  • 13 August 2011 -- BusyBox 1.19.0 (unstable)

    BusyBox 1.19.0. (git, patches, how to add a patch)

    Sizes of busybox-1.18.5 and busybox-1.19.0 (with equivalent config, static uclibc build):

       text    data     bss     dec     hex filename
     837577     493    7516  845586   ce712 busybox-1.18.5/busybox
     839598     493    7508  847599   ceeef busybox-1.19.0/busybox

    Changes since previous release:

    Alexander Shishkin:
          diff: return 1 when skipping directories with -r, but without -N
    Alexey Fomenko:
          libbb: remove dead code in getopt32
          lineedit: fix rare SEGV
          route: add missing fclose's
          ifupdown: don't leak malloced variables in the loop; remove double alloc
          md5/sha1sum: fix small resource leak
    Alexey Soloviev:
          date: preserve isdst value if date is in time_t (unix time) format
    Bernhard Reutner-Fischer:
          mount: for NFS use tcp per default rather than udp
          inetd: check if RPC is available
    Bogdan Harjoc:
          find: implement -ipath
    Chris Rees:
          build system: do not use GNU-isms in find
          FreeBSD compat patches
    Dan Fandrich:
          simplify Ethernet header includes
          use the built-in getline on more systems that don't have it
          hush: support set -o xtrace/noexec alternates for set -x/-n
          fbsplash: display images even when a second buffer is active
          blockdev: add --getsz to replace --getsize
          platform.h: support for build under Android
    Daniel Fandrich:
          replaced __u32 etc with standard uint32_t style types
          support configuring Busybox from _defconfig files
          add defconfig files for Android, Cygwin and FreeBSD
    Davide Cavalca:
          hwclock: implement --systz
          syslogd: add and use CONFIG_FEATURE_SYSTEMD
    Denys Vlasenko:
          use net/ethernet.h instead of linux/if_ether.h in more cases. Closes 3619
          improve --install operation in chroot jails
          incorporate header fixes proposed in bug 3097
          remove erroneous dependencies on INSTALLER
          remove old "define lchown chown"
          replace "depends on PLATFORM_LINUX" with "select PLATFORM_LINUX"
          use user's shell instead of hardwired "/bin/sh" (Android needs this)
          disable automatic selection of FEATURE_SUID
          if only one applet is enabled, make "busybox applet [params]" work as expected
          fix !ENABLE_FEATURE_GETOPT_LONG build. Closes 3775
          scripts/kconfig/mconf.c: stop-gap fix for buffer overflow
          libbb/login/su: do not sanitize shell name twice
          libbb/progress.c: make sure we never get negative ETA
          libbb/progress.c: use unicode support funcs instead of open-coding it
          libbb/progress.c: better overflow protection; more precise bar
          libbb/progress.c: display >999 hours ETA correctly
          libbb/progress.c: fix bugs found in stall detection and unknown size logic
          libbb/read_cmdline: prepend {comm} if different from argv0. Closes 3835
          libbb: make BB_EXECVP/LP try to exec real binary if there's no /proc/self/exe
          libbb: make set_nport accept pointer to sockaddr, not to len_and_sockaddr
          libbb: make user/group name cache strings longer (~27 chars)
          libbb: optionally support RTMIN[+n] and RTMAX[-n] signal names
          libbb: spawn should remove child which failed to exec
          libbb: use _unlocked variants of stdio I/O
          lineedit: implement optional Ctrl-R history search
          lineedit: fixes for CONFIG_UNICODE_USING_LOCALE=y
          main: free suid_config list after use
          main: make busybox.conf mode handling less obscure
          ash: fix ash-signals/signal8 testcase failure
          ash: fix execution of shell scripts without shebang
          ash: optional support for $TMOUT variable
          ash,hush: add ulimit -e -r (RLIMIT_NICE, RLIMIT_RTPRIO)
          ash,hush: optional support for $HISTFILESIZE
          ash,hush: recheck LANG before every line input
          hush: do not print killer signal's name for SIGPIPE
          hush: fix "cmd & <newline>" problem
          hush: fix FEATURE_CLEAN_UP code (was freeing unallocated memory)
          hush: fix a case where return in sourced file has no effect
          hush: fix a corner case of empty "do \n done" structure
          hush: fix incorrect PS2 display and trap handling while reading command
          hush: fix login shell's signal handling; add -l option so that it's easier to test
          hush: fix misparsing of "... do eval a= ...". Closes 3721
          hush: fix bugs with IFS expansion. Closes 4027
          hush: fix source1.tests
          hush: fix wrong prompt problem on empty interactive commands
          hush: fixes and small shrink for HUSH_JOB!=y
          hush: improve prompt in nested {}s
          hush: make parse errors in sourced file non-fatal in interactive script
          hush: make read builtin interruptible
          hush: replace signal handling machinery
          hush: use FEATURE_SH_NOFORK to enable NOFORK trick
          adduser: prefer to call addgroup --gid, not non-std addgroup -g
          adduser: safe username passing to passwd/addgroup
          basename,dirname,freeramdisk,rx,raidautorun,runsv,chvt: skip "--" argument
          blkid: optional support for TYPE="fstype"
          busybox.conf: USER.GROUP is _optional_
          busybox: fail if --install is not given an absolute path
          bzip2: plug memory leak on every processed file
          chrt: -m can be used without any arguments. Closes 2989
          chrt: correct opt_complementary. Closes 2977
          cpio: allow cpio -i to take params - names of files to extract
          date,touch: treat 2-digit years better (fit them into +-50 yrs around today)
          date: add a comment about _SVID_SOURCE
          dc: fix a case where we can run off malloced space
          die_if_bad_username: tighten up a bit
          echo: do not retry on write errors
          echo: fix ENOSPC detection and some iffy code in \NNN handling
          echo: fix SEGV when run with no args
          fbset: abort on unknown options. Closes 3121
          fbset: apply modelines. Closes 3823
          fdisk: make FDISK_SUPPORT_LARGE_DISKS redundant when LFS=y
          fdisk: reinstate a short sleep between sync() and ioctl(BLKRRPART)
          fdisk_osf: simplify ifdef (incidentally, adds support for Microblaze)
          find: cater for libc w/o FNM_CASEFOLD
          find: fix a bug in !ENABLE_FEATURE_FIND_XDEV config
          find: print/print0/prune _can_ be inverted, fix it
          find: remove the hack we use to parse options first, replace with simpler code
          fuser: fix inverted access() check. Closes 3799
          getty: add sleep before initial tcdrain; reduce another sleep from 1 to 0.1s
          getty: do clear CLOCAL and CRTSCTS unless told otherwise
          getty: do not clear all c_cflag's (we were clearing baud bits!)
          getty: document bits we don't set - maybe we should set some of them?
          getty: fix -i (was ignored)
          getty: flush _only_ input after switching to the next baud rate
          getty: simplify macros; improve VSWTC[H] compat
          halt/reboot: better message if /sbin/telinit is not found
          httpd: send correct mtime for .gz files
          hwclock: use locale-specific date output format
          id: correct getgroups usage
          id: fix inverted if (!ENABLE_DESKTOP)
          init: fix a case where execv's 1st arg was wrong
          init: simpler handling of leading dash in commands
          insmod: check for module read errors
          insmod/modprobe: fix parameter loading problem for 2.4 kernels. Closes 3223
          iplink: tweak includes to work on Android
          iproute: fix handling of "dev IFACE" selector
          iproute: fix parsing and matching of "short" IP addrs like 10/8
          kill[all[5]],pkill: make signal list show signal numbers, and show RTMIN/MAX
          klogd: fix the problem of delayed handling of ^C and SIGTERM
          length: disable this applet
          less: optionally query terminal size via "ESC [ 6 n". Closes 2659
          ls: -g implies -l
          ls: add support for -H
          ls: fix HAVE_STRVERSCMP check; add check for older uclibc versions
          ls: fix bits for -T, -w and --color; make -n imply -l
          ls: fix handling of symlinks by option -1
          ls: fix one-bit-off which caused -H to behave as -h
          ls: for some options, only last takes effect. Closes 2959
          ls: make -F not follow symlinks of the command line
          ls: make -v and -X actually work as intended
          ls: make -x force columnar output
          ls: print a space after each column. Closes 2941
          ls: reduce memory consumption and speed up (don't do redundant [l]stat)
          ls: widen -s (1k blocks) column from 4 to 6
          lsmod: fix unsafe usage of strlen()-1
          mailutils/*: add verbose option to sendmail; remove -m and -j from makemime
          mesg: make group/all writability configurable
          mesg: operate on stdin, not on stderr (compat)
          mktemp: make it more compatible with GNU coreutils 8.4
          modprobe-small: support compressed modules in insmod
          modprobe/insmod: fix parameter quoting
          modprobe: fix "modprobe -l name-with-dash"
          more: exit if write to stdout errors out
          more: fix tabs handling
          mount: strip multiple trailing slashes, not just one
          nmeter: deprecate %NNNd specifier, use -d MSEC instead
          ntpd: decrease ntpd -q "no response" timeout to 10 sec
          od: another fix for --strings
          od: fix "od --traditional FILE"
          od: fix -S NUM to not print chars >0x80
          parse_config: make this test applet easier to enable; fix its code
          ping: fix IPv6 pinging. Closes 3187
          ping: set not only IP_TTL, but also IP_MULTICAST_TTL
          printenv: fix environ == NULL segfault
          procps: remove PSSCAN_STAT define, users were using it incorrectly
          ps: implement -o stat
          pstree: use stdin for screen size detection
          reformime: do not require \r\n
          reset: "ESC(K" selects German, why did we use that? Change to "ESC(B" (US)
          sed: support \r in s command
          start-stop-daemon: fix "-K --test --pidfile PIDFILE" exit code
          stty: enable line discipline display and change code if __linix__
          stty: make swtch and iutf8 visible/settable
          su: document -l in --help text. Closes 2761
          tail: optimize "tail -c HUGENUM REGULAR_FILE". Closes 3763
          tar: fix a bug where autodetection + -z is messed up on extract
          tar: on extract, everything up to and including last ".." is stripped
          tar: skip leading / and handle names like abc/..////def -> def (not ///def)
          tar: store negative mtime as 0; pack very large files using base-256 encoding
          tar: support "-T -" and "-X -"
          telnetd: write utmp record with correct pid
          tftp: fix bad interaction between poll() and alarm(). Closes 3061
          tftp: fix progress bar for large (>32M) files. Closes 3499
          tftpd: add -l "log to syslog" option. Needed for inetd mode
          top: display sort indicator in memory display
          top: make it possible to feed commands via pipe
          top: replace %MEM with %VSZ in header text
          traceroute: properly reduce poll timeout
          udhcp: fix some default values from "" to NULL
          udhcpc: allow -O OPT to take numeric params
          udhcpc: emit correct secs field
          udhcpc: fix a problem with binary-encoded options
          udhcpd: reply with NAK to clients in INIT-REBOOT state w/o existing lease
          udhcpd: smaller code: do not look for REQUESTED_IP twice
          uptime: more compatible output
          wc: fix swapped -c and -m
          wget: check for final write errors for -O FILE too
          wget: chunked mode fix. Closes 3229
          wget: correctly handle rare case when we get EAGAIN _on first_ read
          wget: display 100% at the _end_ of chunked download
          wget: fix fname_out usage wrt redirects
          wget: make "wget -O FILE URL1 URL2" concatenate output
          wget: remove functions which retry on EINTR
          wget: support multiple URLs on command line
          wget: use FEATURE_COPYBUF_KB-sized buffer. Much faster for local transfers
          wget: use closed HTTP/1.1 connection, stop when we dl'ed $content_len bytes
          xargs: support --no-run-if-empty (synonym to -r)
    Eric Lammerts:
          runsvdir: do not miss closely spaced service dir changes
    Harald Becker:
          showkey: make -a work on any stdin
    Ian Wienand:
          login: apply PAM environment
          ash: clear sa_flags always
          tar: ignore file size (assume 0) for hardlinks
    James Youngman:
          ls: remove redundant constants LIST_FILENAME and LIST_SHORT
    Joachim Nilsson:
          ping: add -t TTL option
          build system: fix "make install" to skip /usr when configured so
    Keith Young:
          udhcpc: add -B option
    Kevin Cernekee:
          cttyhack: check sysfs for the name of the active console
          cttyhack: fail gracefully if the device node is missing
    Lauri Kasanen:
          pstree: new applet
          df,find_mount_point: optionally don't ignore rootfs
          modinfo: show firmware and depends fields
          fdisk: backport disk check from util-linux
          md5/shaNsum: make -c support a list of files
    Macpaul Lin:
          scripts: fix fixdep.c to let it work in Cygwin
    Maksym Kryzhanovskyy:
          iostat: code shrink ~0.5k
          fuser: code shrink
          iostat: code shrink
    Marek Bečka:
          setserial: new applet
    Nigel Hathaway:
          udhcp: add FEATURE_UDHCP_8021Q option
          udhcpc: export unrecognized options in "optNN=XXXXXXXXX" form
    Nuno Lucas:
          fbsplash: add support for 24 and 32 bit color depth
    Pascal Bellard:
          chsum: fix
          conspy: fix lost ESC key
    Pere Orga:
          whois: new applet
          pwdx: new applet
          move help text from include/usage.src.h to *.c files
          wget: fix SEGV with multiple urls and redirection
          kill: fix infinite loop when passed PIDs are not valid numbers
          uptime: add config flag to allow displaying the number of users currently logged on
    Peter Korsgaard:
          getty: wait up to 5 seconds for the output buffer to drain
          mount: ignore unknown mount options when remounting NFS mounts
          httpd: don't send error messages with gzip encoding
          setconsole: open console for writing rather than reading
    Phil Sutter:
          nameif: fix parsing of /proc/net/dev
          nameif: add matching by phy_address=NUM
    Ralf Friedl:
          df: more compatible -P behavior
    Reuben Dowle:
          ubimkvol,ubirmvol,ubirsvol,ubiupdatevol: new applets
    Rob Landley:
          patch: fix "patch at the beginning" testcase failure
    Roman Borisov:
          mount: fix wrong long option names
          mount: properly update /etc/mtab on mount --move
          mount: rprivate option fix
          mount: add --rbind option support
          diff: optimize diffing of files with the same metadata
    Ryan Phillips:
          login: set PAM RHOST
    Sergey Naumov:
          syslogd: optional support for /etc/syslog.conf
    Serj Kalichev:
          modprobe: add support for --show-depends
          modprobe: add -D option (synonym of --show-depends)
    Steve Iribarne:
          pam link error with SHARED_BUSYBOX and LIBBUSYBOX enabled
    Timo Teras:
          modprobe: use hash table. speeds up significantly if modprobe.dep is large
          parse_config: use getline. BIG speedup with glibc (~40%)
          platform.c: provide getline implementation
    Tito Ragusa:
          passwd,chpasswd: reset password in /etc/passwd to "x" if /etc/shadow was updated
          groups: new applet
          users: new applet
    Vitaly Magerya:
          wget: --post-data=STR should not encode STR, should send it verbatim
    Vladislav Grishenko:
          udhcpc: use more correct, and more importantly, more understandable BPF code
          udhcpd: optional IP selection based on MAC hash
    Wade Berrier:
          pkill/pgrep: support extended regular expressions
    Walter Harms:
          vi: fix regex search, make it selectable in config

  • 12 June 2011 -- BusyBox 1.18.5 (stable)

    BusyBox 1.18.5. (git, patches, how to add a patch)

    Bug fix release. 1.18.5 has fixes for fuser (fix error in handling of PORT/PROTO argument), hush (fix handling of while loop with empty body), build system fix (was using non-portable invocation of grep).

  • 13 March 2011 -- BusyBox 1.18.4 (stable)

    BusyBox 1.18.4. (git, patches, how to add a patch)

    Bug fix release. 1.18.4 has fixes for cksum, klogd (fix "delayed" death on signals), modutils (handling of spaces in module arguments for Linux 2.4), wget (fix for downloads encoded using chunked encoding), build system fix for "make install" and "make menuconfig".

  • 8 February 2011 -- BusyBox 1.18.3 (stable)

    BusyBox 1.18.3. (git, patches, how to add a patch)

    Bug fix release. 1.18.3 has fixes for hush (fix for "cmd & [Enter]" behavior), modprobe-small (better handling of "insmod BAD_MODULE_NAME"), modprobe (reverted bad change affecting module parameters with spaces), ping (IPv6 fix), tar (fix for "tar -xzf FILE.tgz"), udhcp (fix for options specified in hex), wc (-c and -m were swapped), libbb (fixed a case when fork+(exec error) was leaving a zombie), build system (does not force FEATURE_SUID anymore).

  • 16 January 2011 -- BusyBox 1.18.2 (stable)

    BusyBox 1.18.2. (git, patches, how to add a patch)

    Bug fix release. 1.18.2 has fixes for bzip2 (bzip2 many_files* was leaking memory), cpio (was not allowing list of extracted files on command line), httpd (now sends correct Last-Modified: header for gzipped files), hush (was showing wrong prompt on empty interactive input), mkswap (build fix for selinux-enabled config), modprobe-small (support gzipped modules in insmod), tftp (fix timing out in progress meter enabled build), and build failures in some configs.

  • 21 December 2010 -- BusyBox 1.18.1 (stable)

    BusyBox 1.18.1. (git, patches, how to add a patch)

    Bug fix release. 1.18.1 has fixes for build system for installations where sh is dash (Ubuntu is one), SEGV in sha hashing of passwords, runsvdir sometimes not noticing directory changes, compatibility with compilers which don't allow declarations inside for() statements.

  • 22 November 2010 -- BusyBox 1.18.0 (unstable)

    BusyBox 1.18.0. (git, patches, how to add a patch)

    Sizes of busybox-1.17.4 and busybox-1.18.0 (with equivalent config, static uclibc build):

       text    data     bss     dec     hex filename
     831950     453    7224  839627   ccfcb busybox-1.17.4/busybox
     832282     450    7212  839944   cd108 busybox-1.18.0/busybox

    Changes since previous release:

    Alexander Shishkin:
          pmap: new applet. +1k
          add-shell, remove-shell: new applets
          *: introduce and use xmkstemp. -65 bytes
          fix out-of-tree build's recursion
          ash: fix $! value when traps are set
          ulimit: set both hard and soft limits by default
          stat: remove superfluous setXXent() calls, plug memory leak
          tail: free tailbuf upon cleaning up
          smemcap: close /proc handle upon cleaning up
          login: free fromhost upon cleaning up
          mount: pass NULL, not "", as "data" to mount syscall if we have no opts
    Baruch Siach:
          nandwrite: new applet
          nanddump: new applet
    Bernhard Reutner-Fischer:
          find_stray_empty_lines: make it work
    Bradley M. Kuhn:
          wget: implement -T SEC; rework progress meter to not use signals (it was unsafe)
    Carmelo AMOROSO:
          insmod: do not add a pair of "" around the arguments of the module
    Christian Hornung:
          ip: fix command line option parsing of "ip route get ..."
    Cristian Ionescu-Idbohrn:
          remove redundant ENABLE_DESKTOP in procps/ps.c
    Dan Fandrich:
          improve portability of tests
          rename a struct member from "interrupt"
          testsuite: show the number of failures after a test run
          fix some test cases
          tar: add a test for extraction of read-only directory
          avoid side effects in putc(), which may be implemented as a macro
          fix a couple of failing tar tests
          fix build failure for pmap
          mark some more applets NOEXEC/NOFORK
    Daniel Dickinson:
          syslogd: close/re-resolve/reopen remote sockets on some sendto() errors
    Denys Vlasenko:
          build system: make 3.82 compat fix. Closes bug 2323
          base64: new applet
          platform.h: regularize endian detection
          md5 and shaN: big shrink
          libbb/process_escape_sequence.c: fix recently broken handling of \\
          libbb: add xfstat function
          libbb: factor out common code from mpstat/iostat
          libbb: fix fallout from last patch to obscure() (my mistake). +143 bytes
          libbb: introduce and use common crc32 routine
          libbb: introduce and use strcpy_and_process_escape_sequences
          libbb: merge mail and uudecode's base64 decoders
          libbb: move read_base64 to libbb/uuencode.c
          lineedit: partially rewrite and clean up tab completion code
          lineedit: do not hang on error, but return error indicator
          lineedit: limit ASK_TERMINAL to the case when we can't find out the width
          *: deinline SWAP_xE64 on 32-bit CPUs. Wins !90 bytes both on 32 and 64 bits
          *: pass md5/shaN context pointer as 1st arg, not last
          *: use SWAP_BE64 instead of open-coding it
          shell/math.c: improved in various ways
          shell: remove lash and bbsh
          ash: add a testcase for bug 2281 (currently fails)
          ash: add another ${v/a/b} test we currently fail
          ash: add missing casts to match CTLfoo
          ash: fix another bit of var_bash4 bug
          ash: fix another bug detected by var_bash4.tests
          ash: fix dequoting error detected by var_bash4 test
          ash: fix signal and "set -e" interaction
          hush: add support for "set -o pipefail"
          hush: add support for ${var/pattern/repl}, conditional on bash compat
          hush: add support for set -x
          hush: implement brace expansion
          hush: make set -x support optional
          hush: optional support for history saving
          hush: fix EXIT trap display inside exit trap handler
          hush: fix another corner case with backslashes in heredocs
          hush: fix backslash and terminator handling in <<[-]["]heredoc["]
          hush: fix globbing+backslashes in unquoted $var expansion
          hush: fix handling of \" in quoted/unquoted `cmd`
          hush: fix handling of backslashes in variable assignment
          hush: fix improper handling of newline and hash chars in a few corner cases
          hush: fix multiple dependent variable expansion cases
          hush: fix set -- q w e; (IFS='' echo "$*"; IFS=''; echo "$*"); echo "$*"
          hush: fix var_bash3.tests and var_bash5.tests failures
          hush: fix "cmd | var=`cmd` | cmd" handling
          awk: 00.123 is not a octal constant; neither is 009.123 - fixed
          awk: fix SEGV on closing non-opened file
          bbconfig: add COMPRESS_BBCONFIG option
          cmp: with -s, do not report open errors
          crond: check mtime on crontab dir every minute, and reread if changed
          dc: make it use long longs for integer ops
          decompress_bunzip2: handle concatenated .bz2 files; speedup
          depmod: generate "new-style" modules.dep with relative paths
          diff: make diff -r much less eager to recurse into directories
          dmesg: more correct skipping of <N> perfix
          dnsd: fix 64-bit bug 2539
          dos2unix: fix SEGV when run w/o parameters
          find: add rudimentary support for -exec {} +
          free: add -b/k/m/g options; remove 4 TB limitation. +100 bytes
          free: more compatible output. +16 bytes. Closes bug 2383
          grep: cap insanely big -B NUM values to MAX_INT / 8. Closes bug 2653
          grep: fix -o match with empty string (suggested by Colin Watson (cjwatson@ubuntu.com))
          ifupdown: %client%, not %clientid%
          ifupdown: add manual method for IPv6. Closes bug 2497
          init: do not clear CRTSCTS (fix from Debian bug 528560)
          init: do not sleep forever on usage errors
          init: if PID!=1, show clearer error message
          ip: fix "ip r" breakage
          klogd: do not log partial lines
          ls: fix -lg to show group (was showing user)
          lzop: fix misordered "v=NULL; free(v)"
          man: add compatibility with man-db
          mdev: fix non-working device deletion, add a test for that
          mkswap: clear 1st kilobyte. Closes bug 1831
          mktemp: fix "mktemp /path/to/tempfile.XXXXXX"
          mktemp: fix for dir/file.XXXXXX param (by Rob). +9 bytes
          modprobe-simple: do not error out on "rmmod module" if module is unloaded ok
          modutils: explain why we no longer quote params
          mv: implement -n option
          nandwrite: complain on malformed -s NUM
          nc: fix SEGV on -v when NC_EXTRA is off
          netstat: fix IPv6 problem (garbage in scope_id)
          netstat: was using buffers one byte short for scanf (no place for NUL) - fixed
          ntpd: allow peer-less (standalone stratum 1 server) operation
          ntpd: with -q, exit after 60 seconds even if time is not synced
          patch: add -N and a test for it (fails for now)
          patch: busyboxify by migrating from toybox to busybox helpers
          patch: fix -N regression
          patch: support "patch [FILE [PATCH]]" format
          sed: fix sed -i: unlike without -i, it does not forget ranges
          sed: make N command behave as in GNU sed
          seq: exit on write errors
          sleep: fix fractional arguments in non-POSIX locale
          sleep: make it non-NOFORK. Fixes ^C in standalone shell
          smemcap: use correct tar magic
          sort: -o FILE should create/truncate FILE
          split: handle "-" file name correctly
          telnet: convert CR NUL -> CR on input. Closes bug 2569
          telnet: do not check for 0 return from poll (it's impossible)
          top: add tie breaking for topmem mode
          udhcpc: emit maxsize option in all non-NAK type packets
          udhcpc: periodically reread our ifindex and mac
          udhcpc: reduce stack usage by de-inlining routines with on-stack pkt buf
          udhcpc: remove -c CLIENTID, it is hard to use, -x 61:hexstring does the same better
          udhcpc: remove now-unneeded definitions of vendor and client-id opts
          udhcpd: reduce stack usage by ~700 bytes. +28 bytes code size
          umount: do not (ab)use PATH_MAX as mntent buffer size
          unicode: update unicode_width on !unicode branch too. Closes bug 2593
          vi: fix "ask terminal" code
          wc: add support for -m
    Eric Lammerts:
          stat: fix mtime/ctime/atime
    Gilles Espinasse:
          patch: implement -E option
    Harald Becker:
          deluser: make it simpler, fix inability to delete user from group
    Holger Blasum:
          update docs/new-applet-HOWTO.txt
    Javier Viguera:
          find_stray_empty_lines: fix tail "invalid context" error
    Jeremie Koenig:
          readlink: use xmalloc_realpath()
          mark Linux-specific configuration options
          init,loginutils: termios portability fixes
          init,halt: portability improvements
          init: make the initial $TERM value configurable
          libbb.h: add device names for Hurd and FreeBSD
          mkdir: fix -p on FreeBSD
          libbb: conditionalize AF_* usage in error reporting
          tcpsvd,udpsvd: conditionalize usage of SO_ORIGINAL_DST
          less: remove misguided dependency on PLATFORM_LINUX
          bootchartd: mounting tmpfs is Linux-specific
          vlock: disable linux console calls on other systems
          cttyhack: serial console detection is Linux-specific
          klogd: make it work on non-linux systems
          stty: sort out preprocessor conditionals
    Kevin Cernekee:
          docs: change CVS references to git
          docs: sync up AUTHORS and busybox_footer.pod
          fdisk: initial stab at GPT partition support
    Lauri Kasanen:
          modprobe: make -l open the right file
          libbb: remove unused variable
    Lukas Huba:
          patch: implement -E option
    Macpaul Lin:
          fdisk: add support for NDS32 architecture
          modutils: add support for NDS32 architecture
    Marek Polacek:
          mpstat: new applet. ~5.5k
          iostat: new applet. 2800 bytes
          powertop: new applet
          *: s/perror/bb_simple_perror_msg/g
          *: use _exit() in sighandlers
          showkey: do not use exit-thru-sighandler
          bloat-o-meter: make it python3 compliant
    Matheus Izvekov:
          diff: fix "diff dir1 dir2/". Closes bug 2203
    Mike Frysinger:
          depmod.pl: add recursive sanity check
          build system: allow SKIP_STRIP to be set in the env
          gen_build_files.sh: rewrite with sed
          inetd: if argv[0] is not specified, set it to program name
    Mike Shal:
          lineedit: fix tab-completion of file names with spaces
    Nguyen Thai Ngoc Duy:
          wget: flush output to network before receving reply
    Pascal Bellard:
          depmod: accept and ignore -u, -q, -C FILE
          cpio: avoid 'not created: newer or same age file exists' message for dirs
    Peter Korsgaard:
          httpd: optional support for gzip-compressed pages
          httpd: simplified "gzip" test
    Richard Braun:
          tune2fs: implement -c and -i options
    Rob Landley:
          nbd-client: new applet
          patch: replace it with toybox's implementation
          patch: deal with omitted ",len" in hunk headers (default len to 1)
          awk: reduce ifdef forest
    Sergey Naumov:
          blockdev: new applet
    Souf Oued:
          acpid: add config file and map file
    Thomas Chou:
          mkmakefile: make 3.82 fix
    Tito Ragusa:
          deluser: deluser/delgroup size reduction and improvements
    Vladimir Dronnikov:
          sendmail: fix assumption that headers should have a space after the colon
    Vladislav Grishenko:
          udhcp: add support for 0x21 ROUTES and 0xf9 MS_STATIC_ROUTES options
          udhcpc: fix OPTION_IP_PAIR parsing
    Waldemar Brodkorb:
          OpenBSD compatibility
    Wolfram Sang:
          lineedit: create history files with mode 0600

  • 22 November 2010 -- BusyBox 1.17.4 (stable)

    BusyBox 1.17.4. (git, patches, how to add a patch)

    Bug fix release. 1.17.4 has fixes for dnsd (fix for 64-bit builds), ip route (fixed bug of misplaced argv++), ls (-g was showing user instead of group), sort (fix for -o FILE not creating FILE), unicode (fixed bug in build with disabled unicode support).

  • 9 October 2010 -- BusyBox 1.17.3 (stable)

    BusyBox 1.17.3. (git, patches, how to add a patch)

    Bug fix release. 1.17.3 has fixes for ip (build fix for older systems), hush (fix for handling of backslashes in unquoted $var expansion), line editing (fixed handling of EIO error and tab expansion for non-ASCII file names).

  • 25 August 2010 -- BusyBox 1.17.2 (stable)

    BusyBox 1.17.2. (git, patches, how to add a patch)

    Bug fix release. 1.17.2 has fixes for build system (now works with make 3.82), grep (zero length match could loop forever with -o), mdev (/dev nodes were never deleted), mktemp (fix for patterns with slashes), sed (fixes to -i option and N command), shell ($! was sometimes set to a wrong value; ulimit without both -H and -S now sets both hard and soft limits)

    Patch applet is completely replaced by a more capable implementation from toybox (Rob Landley's code). Aboriginal Linux needs it.

  • 25 July 2010 -- BusyBox 1.17.1 (stable)

    BusyBox 1.17.1. (git, patches, how to add a patch)

    Bug fix release. 1.17.1 has fixes for build system (out-of-tree build was broken), acpid (fix for older kernel headers), depmod (now generates new-style modules.dep with relative paths), diff (fix for "diff DIR1 DIR2/" - note the trailing slash), dos2unix (fix for invocation without parameters), ip r (was not working since "r" abbreviates both "route" and "rule"; aliased to "route" now), mktemp (fix regression which prevented kernel builds), modprobe (fix modprobe -l), vi (fix in "ask terminal" code), wget (fix for progress indicator)

  • 06 July 2010 -- BusyBox 1.17.0 (unstable)

    BusyBox 1.17.0. (git, patches, how to add a patch)

    Sizes of busybox-1.17.0 and busybox-1.16.2 (with equivalent config, static uclibc build):

       text    data     bss     dec     hex filename
     819343     441    7068  826852   c9de4 busybox-1.16.2
     819623     441    7076  827140   c9f04 busybox-1.17.0

    Changes since previous release:

    New applets:

    • conspy by Pascal Bellard (pascal.bellard AT ads-lu.com),
    • rev by Marek Polacek (mmpolacek AT gmail.com),
    • ubiattach,ubidetach by Baruch Siach (baruch AT tkos.co.il),
    • modinfo by Pascal Bellard (pascal.bellard AT ads-lu.com),
    • fgconsole by Grigory Batalov (bga AT altlinux.org),
    • fkill by Souf Oued (souf_oued AT yahoo.fr),
    • flock by Timo Teras (timo.teras AT iki.fi),
    • smemcap, bootchartd, unxz (complete with xzcat and xz -d aliases)

    Other changes:

    • build system: make it possible to have include/applets.h-esque entries in .c files, to keep Config/Kbuild snippets in *.c files, to keep usage texts in .c files
    • build system: gold may not support --sort-common (yet)
    • unicode: significantly improved, by Tomas Heinrich (heinrich.tomas AT gmail.com)
    • libbb: teach tar et. al. to understand .xz
    • libbb: fix bb_ask() to operate on correct fd
    • libbb: locate PAGE_SIZE on Hurd
    • libbb: make index_in_substrings return -1 on ambiguous matches
    • libbb/copyfd.c: don't mmap a largish buffer if we only want to copy a few kb
    • libbb/read_key: fix buffer length calculation
    • *: hurd compat fixes by Jérémie Koenig (jk AT jk.fr.eu.org)
    • *: s/"/bin/sh"/DEFAULT_SHELL by Ladislav Michl (Ladislav.Michl AT seznam.cz)
    • ash,hush: make it possible to alias one of shells to "bash"
    • ash,hush: make "source" a synonym for . if bash compat is on
    • ash,hush: make bare "." set exitcode to 2
    • ash: <>FILE does not truncate FILE anymore. By Andreas Bühmann (buehmann AT users.berlios.de)
    • ash: fix ". EMPTY_FILE" exitcode
    • ash: fix bug which causes signal6.tests to fail
    • ash: fix SEGV on empty command with redirection (bug 1087). Fix by Leonid (lly.dev AT gmail.com)
    • ash: fix cubic slowdown in ${v/*foo*/repl} (really bad one)
    • ash: fix obscure case of replacing + globbing + backslashes
    • ash: fix redirection of fd 0 in scripts which are sourced from interactive ash
    • ash: fix signal5.tests
    • ash: fix unset in standalone mode
    • ash: fix var_leak testcase
    • ash: fix var_leak.tests so that it actually catches the NOFORK bug
    • ash: refresh stack pointers after makestrspace in rmescapes. By Colin Watson (cjwatson AT ubuntu.com)
    • ash: make trap with bad signal name not abort
    • hush: fix "hush -c 'echo $#'" showing -1
    • hush: fix a=abc; c=c; echo ${a%${c}}
    • hush: fix hush -c 'echo $0' - was showing empty string
    • hush: fix hush-bugs/parse_err.tests
    • hush: fix more obscure ${var%...} cases
    • hush: fix var=`exit 2` not setting $? to 2
    • hush: handle expansions in ${var?expanded_word} constructs
    • hush: support "cd -- DIR" and other such double-dash constructs in builtins
    • hush: optional support for ${var:EXPR:EXPR} bashism
    • hush: use ash's ulimit builtin; make it more more bash-like while at it
    • adduser: copy /etc/skel to new homes. +100 bytes
    • ar: add archive creation support. By Alexander Shishkin (virtuoso AT slind.org)
    • ar: fix a regression: "ar t arch.a" stopped showing files. By Nguyễn Thái Ngọc Duy (pclouds AT gmail.com)
    • awk: be more paranoid when freeing loop variable; make code less obfuscated
    • awk: don't append bogus data after NUL in sub()
    • awk: fix the case where nested "for" loops with the same variable misbehave
    • awk: skip whitespace between array name and subscript. By Alexander Shishkin (virtuoso AT slind.org)
    • beep: the -d option takes milliseconds, not microseconds. By Natanael Copa (natanael.copa AT gmail.com)
    • brctl: fix parsing of timespec to allow 0 (setfd, sethello..), fix stp parameters incompatibility. By Maciek Borzecki (maciek.borzecki AT gmail.com)
    • busybox --list option. +140 bytes. Rob wanted it
    • cmp: ifdefectomy by Rob Landley (rob AT landley.net)
    • cpio: "NNN blocks" message should go to stderr. By Matheus Izvekov (mizvekov AT gmail.com)
    • cttyhack: don't do anything if ctty is already available
    • data_extract_all(): do not chmod symlink. Closes bug 2053
    • date,touch: accept "Jan 7 00:00:00 2010" format. By Alexander Shishkin (virtuoso AT slind.org)
    • date: optional support for %N. Closes bug 1861
    • date: support -d @SECONDS_SINCE_1970
    • devmem: map two pages only if it is necessary
    • dnsd: add -s option. This allows (clumsy) operation with real DNS servers
    • dnsd: enforce alignment on packet buffer
    • dnsd: fix one big-endian goof; add a TODO about RA bit
    • dnsd: fix unaligned access problem
    • dpkg: add support for lzma compression, by Pascal Bellard (pascal.bellard AT ads-lu.com)
    • dpkg: better check for validity of options
    • dpkg: support config file overwrite options. By Kim B. Heino (Kim.Heino AT bluegiga.com)
    • dpkg: enable tar compability even if tar applet is not enabled
    • [un]expand: account for different character widths
    • fbsplash: reinstate drawing of over/undersized images
    • fdisk: do not treat names ending in '0' as partitions
    • fdisk: make 'b' command optionally adjust C/H/S; "fdisk IMAGE_FILE" sets cylinders
    • find: fix -name matching for dotfiles. -1 byte
    • ftpd: work around LIST -aXYZ too, not only LIST -lXYZ
    • fuser: fix default signal, exitcode and PID display. By Maksym Kryzhanovskyy (xmaks AT email.cz)
    • getty: do not emit bogus error message on EOF
    • grep: fix -Fi. By Ian Wienand (ianw AT vmware.com)
    • grep: make -w support unconditional
    • gunzip: inflate_codes(): add fix from upstream gzip to prevent false CRC error
    • head,tail: make suffixes unconditional for head too
    • hexdump: fix "hexdump NONEXISTENT_FILE" handling
    • hexdump: make -s 0xNNNNN work
    • httpd: fix proxy mode bug (annoying but harmless)
    • ifconfig: do not truncate interface names. Closes bug 1795
    • ifdown: use /var/run/udhcpc.%iface%.pid only if it exists
    • ifplugd: more robust interface name match check
    • ifplugd: replace potentially-leaking setenv with malloc/putenv/free
    • init: clear utmp entries for dead processes, if they (entries) exist
    • ip a: fix SEGV if "dev IFACE" is not specified
    • ip addr/rule/tunnel: unify parsing args. By Bernhard Reutner-Fischer (rep.dot.nop AT gmail.com)
    • ip link: add qlen. By Bernhard Reutner-Fischer (rep.dot.nop AT gmail.com)
    • ipaddress: print OPERSTATEs and NO-CARRIER. By Bernhard Reutner-Fischer (rep.dot.nop AT gmail.com)
    • ipcalc: more correct checking for proper number of arguments
    • iplink: support add/delete. By Bernhard Reutner-Fischer (rep.dot.nop AT gmail.com)
    • loadfont/setfont: optional PSF2 font support
    • loop: correct minor device number limit
    • losetup: support /dev/loop10 and higher. Closes bug 1627
    • lsusb: 2.6.32 compat. By Souf Oued (souf_oued AT yahoo.fr)
    • mdev: add "!" syntax support
    • mdev: fix a SEGV when subsystem is not known
    • mdev: fix subsystem passing (new kernels broke it again). Closes bugs 639, 721
    • mkswap: support [KBYTES] parameter
    • mkXXXX: unify [KBYTES] parameter handling
    • mkfs_ext2: fix handling of -I argument. By Bernhard Reutner-Fischer (rep.dot.nop AT gmail.com)
    • mktemp: be more compatible: bare "mktemp" creates tempfile in /tmp, not cwd
    • modprobe: add support for -l and -s. By Pascal Bellard (pascal.bellard AT ads-lu.com)
    • modprobe: pick up module options from /proc/cmdline too
    • modprobe: remove 2k limit on /proc/cmdline
    • modutils-24: [mips] modutlis-24 segfault fix for 2.4 kernel modules, by Ralf Rösch (ralf.roesch AT rw-gmbh.de)
    • mount: add an optional capability to create new /dev/loopN as needed. By Lauri Kasanen (curaga AT operamail.com)
    • mount: fix a case when sometimes error message is not printed
    • mount: handle EDQUOT > 255 properly. Closes bug 1579
    • nc: introduce CONFIG_NC_110_COMPAT option
    • tftp/tftp: make tftp/tftpd-related options less confusing in config. Closes bug 2017
    • ntpd: step correction to variables had wrong sign, fixing
    • passwd: make 'echo -e "foo\nfoo" | passwd USER' work
    • ping: do not leak data from stack
    • provide safe_gethostname() for non-linux systems
    • ps: fix non-DESKTOP option handling code
    • ps: make "ps -o BAD" emit list of good -o params
    • rpm: use open_zipped's logic (factored out into setup_unzip_on_fd())
    • rpm: make rpm -i SRPM.rpm install it to surrent dir
    • rpm2cpio: teach it to understand xz format
    • sed: fix a case when one-line range matches past lines. Closes bug 1867
    • sed: fix a command with multiple trailing backslashes
    • sed: fix c cmd
    • sed: fix nested {} case
    • setkeycodes: fix handling of 0exx scancodes
    • setsid: check for setsid error directly
    • shaNNNsum: accept and ignore -b and -t
    • stat: make output more similar to GNU stat. By Seb (sbb AT tuxfamily.org)
    • swapon: skip noauto entries. By Lauri Kasanen (curaga AT operamail.com)
    • syslogd: allow multiple -R options. By Thomas Geulig (geulig AT nentec.de)
    • syslogd: remove stray umask(0) - was giving log files bad mode
    • syslogd: make maximum message length configurable. By Janne Kiviluoto (janne.kiviluoto AT bluegiga.com)
    • tail: document FANCY flags in helptext
    • tar: fix "hardlinks to symlinks chown" bug 1519
    • tar: fix mishandling of repeated hardlink in tarball
    • tar: make typical extraction less memory-hungry
    • tar: optional support for --to-command. By Ladislav Michl (Ladislav.Michl AT seznam.cz)
    • tar: optional support for restoring selinux context. By J. Tang (tang AT jtang.org)
    • tar: support GNU 256-bit encoding in all numeric fields
    • telnet: prevent SEGV if we are requested TELOPT_NEW_ENVIRON
    • telnetd: fill hostname field in utmp/wtmp records
    • telnetd: write LOGIN/DEAD_PROCESS utmp records. Closes bug 1363
    • test: "" is not a valid number. Closes bug 1915
    • tftp: do not show progress bar if we get error right away. +13 bytes
    • tftp: increase initial retry timeout from 50 to 100 ms
    • tftp: make message about 512 byte block less confusing
    • tftpd: fix file creation with bogus mode. Closes bug 1021
    • top: make 's' display easier to understand
    • touch: do not ignore argument of -d/-t option. By Mikhail Gusarov (dottedmag AT dottedmag.net)
    • udhcp: abort if we see unknown option, and show valid options if so
    • udhcp: disable time and log server options
    • udhcp: fix DNS domain codec bug: bad compression flag checks
    • udhcp: handle errors in read_staticlease
    • udhcp: implement "raw" binary options. Closes bug 735
    • udhcp: remove support for some really old and odd options
    • udhcp: s/sipservers/sipsrv/ to match other similar option names
    • udhcp: we call DNS name encoder with NULL, this can SEGV. Added a check
    • udhcp: truncate packets instead of padding them to 574 bytes. Closes bug 1849
    • udhcpc: add -x OPT:VAL option
    • udhcpc: make it possible to disable vendor id
    • udhcpd: apparently, sometimes IP is in ciaddr, not requested_ip
    • udhcpd: fix -v/-P mixup
    • udhcpd: fix daemonize crash on nommu systems. By Mike Frysinger (vapier AT gentoo.org)
    • udhcpd: fix hostname truncation bug 1663
    • udhcpd: support decoding of option 120 "SIP servers". Closes bug 737
    • udhcpd: untangle incredibly messy handling of DHCPREQUEST
    • unexpand: fix "a b"\n" input case. By Tomas Heinrich (heinrich.tomas AT gmail.com)
    • unlzma: add "lzma -d" alias, add -t support, rename lzmacat to lzcat
    • unzip: restore unix file mode if possible. Closes bug 1045
    • unzip: improve handling of stream ZIP files
    • vi: save/restore errno in signal handlers
    • vi: discover window size even on serial consoles (optional)
    • vi: fix "set ic" command. Closes bug 1765
    • vi: fix NUM + "$" handling
    • volume_id/linux_swap: detect suspended image signatures too
    • wc: compat: make "wc -c ONE_FILE" not print leading spaces. +2 bytes
    • wget: fix bug 1057 "busybox wget segfaults with http_proxy environment set"
    • wget: ignore --no-check-certificate
    • who: fix attempts to open '/dev/dev/ttyX'; make columns a bit wider, add -H
    • xargs: bump default -sNUM up to 32k. Use sysconf() to trim it down if necessary
    • xargs: make -s NUM accept practically unlimited range

  • 12 June 2010 -- BusyBox 1.16.2 (stable)

    BusyBox 1.16.2. (git, patches, how to add a patch)

    Bug fix release. 1.16.2 has fixes for ash (complex cases of stdin redirection, memory reallocation bug fix), cpio ("NNN blocks" goes to stderr now), udhcp (last byte of hosthame was truncated), dnsd (misaligned access), hush (in some cases $# was wrong), hwclock (subsecond sync code removed), sed (a corner case with line continuation is fixed).

  • 28 March 2010 -- BusyBox 1.16.1 (stable)

    BusyBox 1.16.1. (git, patches, how to add a patch)

    Bug fix release. 1.16.1 has fixes for ash (SEGV with 'trap' and 'jobs'), beep (pause was 1000 times too small), udhcpd (SEGV with -v), fbsplash (re-enable drawing of images with size different than screen size), hush (exec was not picking up applets in standalone mode), blkid (a few newer swap formats supported), md5sum/shaNsum (accept -bt options), syslogd (logfile had mode 0666), tail (a case where we tried to write negative number of bytes), tftpd (open without third argument), touch (-d wasn't working as it should), wc (with one file, don't print any leading spaces), wget (SEGV if proxy is specified in environment), some toolchain compatibility fixes, help text fixes, build system fix (defconfig was not updated).

  • 27 January 2010 -- BusyBox 1.16.0 (unstable)

    BusyBox 1.16.0. (git, patches, how to add a patch)

    Sizes of busybox-1.16.0 and busybox-1.15.3 (with equivalent config, static uclibc build):

       text    data     bss     dec     hex filename
     816619     453    7436  824508   c94bc busybox-1.15.3/busybox
     812074     453    7300  819827   c8273 busybox-1.16.0/busybox

    Changes since previous release:

    New applets:

    • lspci: new applet. +573 bytes. By Souf Oued (souf_oued AT yahoo.fr)
    • lsusb: new applet. +400 bytes. By Souf Oued (souf_oued AT yahoo.fr)
    • flashcp: new applet. +900 bytes. By Stefan Seyfried (stefan.seyfried AT googlemail.com)
    • mkfs.reiser: new applet. Needs much polishing. By Vladimir Dronnikov (dronnikov AT gmail.com)
    • mkfs_ext2: new applet. By Vladimir Dronnikov (dronnikov AT gmail.com)
    • ntpd: new applet, +5k. By Adam Tkac (vonsch AT gmail.com)
    • traceroute6: new applet. +1562 bytes. By Leonid Lisovskiy (lly.dev AT gmail.com)
    • tune2fs: new applet by Vladimir. Only supports -L LABEL
    • wall: new applet. By Bernhard Reutner-Fischer (rep.dot.nop AT gmail.com)

    Other changes:

    • ash,hush: check that variable names are sane
    • ash,hush: fix "'read' without parameters" bash compat thingy
    • ash,hush: fix $RANDOM in children being repeated
    • ash,hush: fix `trap`
    • ash: do not let EXIT trap to fire in `trap`
    • ash: error out on ${#1#}, ${#$11}, ${#11#}. By Cristian Ionescu-Idbohrn (cristian.ionescu-idbohrn AT axis.com)
    • ash: factor out $RANDOM support and read builtin
    • ash: fix bad interaction of "stty -echo" + ASK_TERMINAL
    • ash: fix bug 585 (>"$VAR_WITH_UNICODE_CHARS" problem)
    • ash: fix for read $IFS splitting. Closes bug 235
    • ash: fix handling of Unicode chars in redirects. Closes bug 585
    • ash: fix mishandling of bash-style redirects. By Chris Metcalf (cmetcalf AT tilera.com)
    • ash: implement set -o pipefail (conditional on bash compat). By Michael Abbott (michael AT araneidae.co.uk)
    • ash: make "jobs -l" more similar to bash. By Earl Chew. Closes bug 481
    • ash: re-enable SIGHUP on entry. Closes bug 771
    • hush: add printf builtin. By Mike Frysinger (vapier AT gentoo.org)
    • hush: add support for $RANDOM
    • hush: code shrink by Dan Fandrich (dan AT coneharvesters.com)
    • hush: do not reset to default "" traps in subshell
    • hush: export $PWD
    • hush: fix exec builtin in a better way (+ "glob in exec" bug fixed)
    • hush: fix exit code propagation from `cmd`
    • hush: fix exitcodes of killed processes
    • hush: fix handling of empty arguments
    • hush: fix handling of words with braces
    • hush: fix potential buffer overflow on NOMMU
    • hush: fix subshell.tests failure on NOMMU
    • hush: handle empty execs. By Mike Frysinger (vapier AT gentoo.org)
    • hush: make memleak debugging more robust
    • hush: plug a memory leak
    • hush: support $PPID
    • hush: two NOMMU fixes for bugs 877 and 883
    • hush: unify handling of builtin applets. By Mike Frysinger (vapier AT gentoo.org)
    • hush: wait for `cmd` to complete, and immediately store its exitcode in $?
    • build system: fix for coarse mtime problem
    • build system: fix parallel make
    • build system: more fixes to parallel build
    • build system: update documentation generator so that it sucks less
    • *: do not assign to stdout/stderr, it's not portable. Based on patch by Aaron Carroll (xaaronc AT gmail.com)
    • *: platform compatibility work. By Dan Fandrich (dan AT coneharvesters.com)
    • *: use utimes() rather than obsolescent utime(). By Bernhard Reutner-Fischer (rep.dot.nop AT gmail.com)
    • libbb: add and use xopen_nonblocking (-18b). By Bernhard Reutner-Fischer (rep.dot.nop AT gmail.com)
    • libbb: add mallopt tweaks for reduced memory consumption
    • libbb: better unicode width support. Hopefully fixes bug 839
    • libbb: move generate_uuid from mkswap to libbb. By Vladimir Dronnikov (dronnikov AT gmail.com)
    • libbb: optimize most of isXXXXX() macros
    • libbb/lineedit: fix the case when we configured history to have 0 lines
    • libbb/lineedit: restore ^D handling for unicode
    • libbb/lineedit: try to make FEATURE_EDITING_ASK_TERMINAL less ugly
    • libbb/lineedit: do not hardcode ctrl-C and ctrl-D, use termios fields
    • libbb/lineedit: handle Ctrl-arrows
    • libbb/read_key,lineedit: parse position answerback faster; sanitize its use
    • libbb/read_key: ignore unknown keys (do not return them to caller byte-by-byte)
    • libunarchive: fix a bug where mode and time is no longer restored. Introduced by vda in 1.15.x. Found by Rob Landley
    • libunarchive: fix reversed test for older/newer
    • libunarchive: move dpkg-specific things into dpkg.c. 0 byte size differences
    • volume_id: add support for btrfs. By Vladimir Dronnikov (dronnikov AT gmail.com)
    • tests: fix POSIX shell source style. By Mike Frysinger (vapier AT gentoo.org)
    • all_sourcecode.tests: check commented out applet order too. By Mike Frysinger (vapier AT gentoo.org)
    • INSTALL: update obsolete doc, as suggested by Doug Clapp (doug.clapp AT triad.rr.com)
    • documentation and typo fixes. By Dan Fandrich (dan AT coneharvesters.com)
    • adduser: create a group for new user too
    • adduser: fix a logical inversion which made -G GRP inoperative. By Tito Ragusa (farmatito AT tiscali.it)
    • applets/usage_compressed: combine many seds in one; hide dd stats. By Bernhard Reutner-Fischer (rep.dot.nop AT gmail.com)
    • applets: fix alphabetical order. By Mike Frysinger (vapier AT gentoo.org)
    • ar: fix long filenames handling. Closes bug 611
    • awk: fix a case when number is treated as string. Closes bug 725
    • awk: implement mktime. By Leonid Lisovskiy (lly.dev AT gmail.com)
    • chown: support long options. By Matheus Izvekov (mizvekov AT gmail.com)
    • chpst: tiny shrinkage and add possible TODO. By Bernhard Reutner-Fischer (rep.dot.nop AT gmail.com)
    • cp: add support for --parents and long option synonyms of short opts. By Ian Wienand (ianw AT vmware.com)
    • cp: fix -H handling
    • cpio: fix -o-less cpio -F FILE
    • cpio: fix unpacking of names with leading slashes
    • crond: do not log info messages at LOG_ERR. Closes bug 681
    • date: handle long options. By Bernhard Reutner-Fischer (rep.dot.nop AT gmail.com)
    • dc: make "dc -1.23 ..." work
    • dd: fix conv=noerror w/o sync to not write out zeroed blocks
    • dd: speed measurement. Optional. By Gabor Heja (kakaopor AT kakaopor.hu)
    • df: unicode-aware column formatting. By Tomas Heinrich (theinric AT redhat.com)
    • diff: rewrite. Much smaller and more correct. By Matheus Izvekov (mizvekov AT gmail.com)
    • dpkg: fix handling of names with leading dots. Closes bug 783
    • dumpleases: unicode spport. By Tomas Heinrich (heinrich.tomas AT gmail.com)
    • echo et al: support \e escape
    • env: don't SEGV on bare "env -"
    • ether-wake: can use ether_hostton on uclibc >= 0.9.30. By Leonid Lisovskiy (lly.dev AT gmail.com)
    • examples: add ENABLE_FEATURE_MDEV_RENAME_REGEXP examples to mdev documentation. By Bernhard Reutner-Fischer (rep.dot.nop AT gmail.com)
    • examples: add mdev.conf and mdev_fat.conf
    • examples: adding runit-style service directory
    • fbset: add possibility to set timing and sync polarity. By Michael Grzeschik (m.grzeschik AT pengutronix.de)
    • fbsplash: allow compressed image files. By Vladimir Dronnikov (dronnikov AT gmail.com)
    • fdisk: add a warning and truncate disks with >= 2^32 sectors
    • find: -follow should not error out on dangling links
    • find: add optional support for -links. By Matheus Izvekov (mizvekov AT gmail.com)
    • find: correct handling of -xdev
    • find: do not recurse into directories with depth == maxdepth. This may avoid many, many unnecessary stat() calls
    • fold: fix a corner case. By Tomas Heinrich (heinrich.tomas AT gmail.com)
    • fold: unicode support. Based on a patch by Tomas Heinrich (heinrich.tomas AT gmail.com)
    • ftpd: conditional support for broken clients. By Stefan Seyfried (stefan.seyfried AT googlemail.com)
    • ftpget/put: make 3rd parameter optional. By Vladimir Dronnikov (dronnikov AT gmail.com)
    • grep: fix a case when -o loops forever
    • gzip: add optional support for --long-opts. By Matheus Izvekov (mizvekov AT gmail.com)
    • httpd: -m: output _salted_ MD5 hash. By (forrest AT hifulltech.com)
    • httpd: fix bug 601 "I:index.php does not run interpreter on DIR/ url"
    • httpd: shrink mime type matching code (suggested by Bernhard)
    • httpd_indexcgi: fix off-by-one error
    • httpd_post_upload.txt example: handle binary files too
    • hwclock: fix sizeof bug (used it on pointer, not array)
    • hwclock: make --systohc exact
    • ifplugd: mention iff mode in help; restore auto-ifup unless -a; make iff method less iffy :D
    • ifup: make /etc/network/interfaces parser tolerant to trailing spaces
    • inetd: be more careful with syslog socket; other small fixes
    • init: fix "while true; do reboot; done" bug. Closes bug 781
    • init: fix logically inverted FEATURE_EXTRA_QUIET check
    • init: for paranoid reasons, restore SIGCONT too
    • init: make FEATURE_EXTRA_QUIET more consistent
    • init: restore possibility to reload inittab even before we finish initialization
    • init: use applet_name instead of "init" (we can be linuxrc)
    • login: log PAM errors to syslog, not stderr. By Ian Wienand (ianw AT vmware.com)
    • ls: add "total NNNN" header if DESKTOP. By Johannes Stezenbach (js AT sig21.net)
    • ls: fix for !FEATURE_LS_RECURSIVE (forgotten free); cleanups
    • ls: fix sort of very large files
    • ls: make it so that group never glues itself to file size
    • lsmod: unicode-aware column formatting. By Tomas Heinrich (heinrich.tomas AT gmail.com)
    • mdev: adjust error message. By Bernhard Reutner-Fischer (rep.dot.nop AT gmail.com)
    • mdev: do not die on mknod errors
    • mdev: handle string modes. By Bernhard Reutner-Fischer (rep.dot.nop AT gmail.com)
    • mdev: tiny shrinkage by index_in_strings. By Bernhard Reutner-Fischer (rep.dot.nop AT gmail.com)
    • mkfs_vfat: fixes for large image cases
    • mkswap: add -L LABEL option. Closes bug 689
    • modprobe-small: hopefully fix bug 591 (incorrect detection of alias with '-')
    • modprobe: it's not an error if module is already loaded. Closes bug 833
    • modprobe: protect against possible SEGV
    • modutils: add FEATURE_INSMOD_TRY_MMAP option
    • mount: "already mounted" msg appears only if -v
    • mount: add support for -O list. By Michael Abbott (michael AT araneidae.co.uk)
    • mount: do not execute "mount.(null)" :)
    • mount: if we mount //host/xxx, add ip=IPADDR to options
    • mount: prevent second mount -a from mounting everything again
    • mount: support -o union. By Vladimir Dronnikov (dronnikov AT gmail.com)
    • mountpoint: btrfs fix. By Vladimir Dronnikov (dronnikov AT gmail.com)
    • nc: fix "nc -nl -p LPORT RHOST" case (was expecting remote port 0). Closes bug 837
    • networking/httpd_ssi.c: new example CGI handler
    • od: fix -tx without length spec
    • passwd: do not complain if /etc/shadow is missing
    • patch: add longopts, --dry-run, add one more test
    • patch: ignore -g NUM. By Matheus Izvekov (mizvekov AT gmail.com)
    • pidof/killall: fix bug 625 (kernel threads get stale "binary name")
    • ping6: do not play dirty tricks with argv
    • ping: fix unaligned access. Closes bug 745
    • ping: use ICMP_MINLEN. By Bernhard Reutner-Fischer (rep.dot.nop AT gmail.com)
    • ps,top: add an option to show threads. +260 bytes
    • ps: conditionally enable -T on non-DESKTOP build too
    • ps: document -T option
    • ps: show longer COMMAND
    • rpm2cpio: handle bz2 too. By Pascal Bellard (pascal.bellard AT ads-lu.com)
    • rpm2cpio: handle unseekable input correctly
    • sed: fix bug 623 (SEGV on some sed commands)
    • sed: minor usage tweak. By Rob Landley (rob AT landley.net)
    • sed: on output file, set not only mode, but owner too
    • sendmail: accept -i too, not only -oi. By Vladimir Dronnikov (dronnikov AT gmail.com)
    • sendmail: fix for long headers. By Vladimir Dronnikov (dronnikov AT gmail.com)
    • sendmail: update by Vladimir Dronnikov (dronnikov AT gmail.com)
    • sort: make sort -o FILE FILE (same FILE) work. Closes bug 785
    • split: handle - as "use stdin". Closes bug 741
    • start-stop-daemon: we could need ssd -d (fancy). By Bernhard Reutner-Fischer (rep.dot.nop AT gmail.com)
    • stty: add B921600. By Bernhard Reutner-Fischer (rep.dot.nop AT gmail.com)
    • stty: fix columns command. Closes bug 791
    • swaponoff: add uuid/label support. By Natanael Copa (natanael.copa AT gmail.com)
    • tar: accept spaces at the end of header fields (compat)
    • tar: add support for --overwrite
    • tar: add support for -o as synonym to --no-same-owner. By Bernhard Reutner-Fischer (rep.dot.nop AT gmail.com)
    • tar: do chown, not lchown to restore mode (compat)
    • tar: fix --numeric-owner, --no-same-owner, --no-same-permissions bits
    • tar: fix bug 673 (misdetection of repeated dir as hardlink)
    • tar: fix handling of tarballs with chksums prepended by spaces
    • tar: handle "tar fx TARFILE" etc
    • tar: optional support for -m (--touch). By Mikhail Gusarov (dottedmag AT dottedmag.net)
    • telnetd: optional support for -w ("inetd wait")
    • tftp: add optional support for progress bar. By Magnus Damm (magnus.damm AT gmail.com)
    • tftp: extend tsize support a little. By Magnus Damm (magnus.damm AT gmail.com)
    • top: add -m ("memory") option
    • tty: use defines rather than constants. By Bernhard Reutner-Fischer (rep.dot.nop AT gmail.com)
    • udhcpc: fix bug 629: use bcast receive when we perform rebinding
    • udp_io: fix two potential cases of unaligned accesses
    • uniq: plug memory leak. Patch from OpenWRT project
    • wc: fix a hang gue to isprint(EOF). By Dan Fandrich (dan AT coneharvesters.com)
    • wget: check for close() success; fix chunked; do not bother to send QUIT to ftp
    • wget: factor out progress bar code. By Magnus Damm (magnus.damm AT gmail.com)
    • wget: fix for code 302. By Vladimir Dronnikov (dronnikov AT gmail.com)
    • [un]expand: unicode support. By Tomas Heinrich (heinrich.tomas AT gmail.com)

  • 12 December 2009 -- BusyBox 1.15.3 (stable)

    BusyBox 1.15.3. (git, patches, how to add a patch)

    Bug fix release. 1.15.3 has fixes for ash (compilation with signed chars, SIGHUP handling fix), awk, flash_eraseall (fix for newer kernel headers), grep, mount (mount -a won't mount everyting again on 2nd run), ping (fix unaligned access), split (accepts "-" as stdin now), build system (parallel build).

  • 8 October 2009 -- BusyBox 1.15.2 (stable)

    BusyBox 1.15.2. (git, patches, how to add a patch)

    Bug fix release. 1.15.2 has fixes for ash and hush (`trap` handling), dd (fixed handling of I/O errors), find (fix for -follow and symlinks), pidof (corrected recognition of kernel thread names), sed (SEGV), uniq (memory leak), line editing (Ctrl-D works again), build system.

  • 15 September 2009 -- BusyBox 1.15.1 (stable), BusyBox 1.14.4 (stable)

    BusyBox 1.15.1. (git, patches, how to add a patch)

    BusyBox 1.14.4. (git, patches, how to add a patch)

    Bug fix releases. 1.14.4 has fixes for ash, httpd, modprobe and the build system, 1.15.1 has fixes for ash (unicode fix), httpd (fix for "dir index via interpreter" case), hush ($PWD support), inetd (fd leak fix), modprobe-small (fix for aliases with dashes), unlzma (SEGV on 64-bit), and generic unpacking routines (was not restoring mode).

  • 23 August 2009 -- BusyBox 1.15.0 (unstable)

    BusyBox 1.15.0. (git, patches, how to add a patch)

    Sizes of busybox-1.15.0 and busybox-1.14.3 (with equivalent config, static uclibc build):

       text    data     bss     dec     hex filename
     778114     454    7340  785908   bfdf4 busybox-1.14.3/busybox
     780508     445    7328  788281   c0739 busybox-1.15.0/busybox

    Changes since previous release:

    New applets:

    • beep: new applet by Bernhard
    • dnsdomainname: new applet - the alias to "hostname -d"
    • flash_lock, flash_unlock: new applets by Thierry Reding (thierry.reding AT avionic-design.de)
    • fsync: new applet by Pekka Pessi (Pekka.Pessi AT nokia.com)
    • ifplugd: new applet by Maksym Kryzhanovskyy (xmaks AT email.cz)
    • lzop: new applet. Busyboxed by Alain Knaff. +7700 bytes
    • scriptreplay: new applet
    • volname: new applet

    lash and msh are deprecated, please migrate to hush. They both are aliased to hush anyway. lash now prints "lash is deprecated, please use hush instead" message, msh does not (yet).

    Other changes:

    • libbb: make find_pid_by_name look at /proc/PID/exe too
    • libbb: make get_sock_lsa use only one getsockaddr syscall, not two
    • libbb: prevent resursion on malloc failure
    • libbb: stop using bb_strtod for now
    • libbb/lineedit: implement Unicode-aware line editing (optional)
    • libbb/lineedit: use read_key to recognize ESC sequence
    • libbb/lineedit: added simplified Unicode support for non-locale-enabled builds
    • libbb/lineedit: add an option to emit ESC [ 6 n ("report cursor position") and use results
    • libbb/read_key: drop optimization where we read 3 bytes at once
    • libbb/des encrypt: fix goof with NUL byte added at the end as '.'
    • libbb/device matching against UUIDs: do not try floppies
    • acpid: prevent creation of zombies
    • adduser/addgroup: make system id range configurable. By Tito (farmatito AT tiscali.it)
    • adduser/addgroup: support specifying uid/gid, add system account creation mode. By Tito
    • ash: fix . builtin
    • ash: fix bug 571 (jobs %string misbehaving)
    • ash: further fixes to debug machinery. Fixes bug 485
    • ash: make "jobs" work even in subshells
    • awk: put at least one NUL between $n. Hopefully fixes bug 337
    • busybox --install [-s] [DIR]: allow a parameter - destination DIR
    • cp: by popular demand, make it POSIX compliant (but less safe)
    • cpio: --verbose, --quiet, --to-stdout
    • date: change date -d TIME format a bit, make it more compatible
    • dd: conv=noerror should skip read errors using lseek. Fixes bug 539
    • depmod.pl: updates and fixes galore
    • depmod: fix handling of .gz modules
    • df: fix "df /"
    • dmesg: try to detect buffer size
    • dpkg: delete postrm script after it has been run, not before. Fixes bug 449
    • fdisk: add handling of avr32. Fixes bug 555
    • ftpd: allow multiple -S options to increase verbosity too, like -v
    • ftpd: fix a case when with -w unknown commands are ignored with no error code
    • grep: fix -E + {range}; fix -o not printing all matches. Fixes bug 489
    • gzip: fix gzip with many files corrupting some files after first
    • halt/reboot/poweroff: add a CONFIG_xxx to act SysV compatibly
    • hdparm: correct (t & 1) ? '0' : '5' thinko; wrap 80+ col lines
    • hostname: support --fqdn, --domain, --file
    • httpd: allow empty lines in conf file
    • httpd: speed up httpd.conf parsing at the cost of 49 bytes of code
    • hush: add HUSH_BASH_COMPAT, make [[ special handling depend on it
    • hush: add support for local builtin
    • hush: allow umask to take symbolic modes
    • hush: disallow "{echo hi; }" (require whitespace) and "{ echo hi }" (require semicolon or &)
    • hush: do not process options after non-option args
    • hush: "export -n" support
    • hush: fix "export not_yet_defined_var", fix parsing of "cmd | }" corner case
    • hush: fix "if { echo foo; } then { echo bar; } fi" parsing
    • hush: fix "trap -- handler SIGs..."; escape handlers in "trap" output
    • hush: fix SEGV in % expansion
    • hush: fix SIGCHLD counting code, but keep it disabled for now
    • hush: fix \*newline* handling
    • hush: fix a case when backgrounded command makes shell hang
    • hush: fix a segfault in export builtin
    • hush: fix wrong handling of \x in assignments
    • hush: fix a bug where in "var=val func" var's value is not visible in func
    • hush: fix handling of unterminated subshell: (*eof*. Fixes bug 229
    • hush: fix handling of } which is not a closing one in { cmd; }
    • hush: fix multiple redirections of the same fd. Fixes bug 227
    • hush: fix non-interactive response to pipe being stopped
    • hush: fix problems with case in subshells and with "case esac"
    • hush: implement 'type' builtin
    • hush: implement proper SIGHUP handling
    • hush: implement unset -f; beautify the handling of signal-killed pipe
    • hush: make . command search $PATH
    • hush: make builtins work in pipes (eval ... | ...) on NOMMU
    • hush: make it possible to have interactive shell on non-ctty. init=/bin/hush: shows prompt, history works, etc
    • hush: return builtin by Bayram Kurumahmut (kbayram AT ubicom.com)
    • hush: set $n properly for "source" builtin
    • hush: specially handle [[ - suppress globbing & multiword expansion
    • hush: stop ignoring ^Z in child shells
    • hush: unblock TERM, INT, HUP in child shells too
    • ifupdown: if $PATH is not set, do not set it to "" in children
    • install: compat fix for mode of created files. By Mat Hostetter (mhostetter AT tilera.com)
    • login: consider platforms having no domainname field in the utsname struct
    • ls: fix --color handling. Fixes bug 435
    • ls: make --color more compatible with coreutils
    • man: use man.config, not only man.conf (man version 1.6f compat)
    • mdev: #if forest removal (thanks Rob)
    • mdev: be more permissive on errors (don't die): mdev -s users want that
    • mdev: change subsystem syntax from /subsystem to subsystem/devname
    • mdev: do not exit if user:group parse failed. Fixes bug 309
    • mdev: fix a case where we mangle device_path string and then use it
    • mdev: fix the case when move rule deletes node with name == device_name
    • mdev: set $MDEV correctly for renamed nodes
    • mdev: set mode, needed when device node already exists
    • mdev: support $ENVVAR=regex
    • mkswap: optionally generate UUID. +110 bytes
    • modprobe: correct exitcode handling and error messages with respect to -q
    • modprobe: fix modprobe -r. Fixes bug 315
    • modprobe: treat tabs in modules.dep as delimiters too. Fixes bug 567
    • mount: document when kernel started accepting string as NFS options
    • mount: support -i; pass through -f and -n to helpers as necessary
    • nc: fix nc -ll
    • passwd + /etc/shadow: change "change time" field too
    • patch: support -N option. By Olivier Duclos (olivier.duclos AT gmail.com)
    • pgrep/pkill: support -s and -P options
    • pgrep: match argv[0] too, not only comm; fix a bug in argv sanitization
    • ping6: make it setuid just like ping
    • printf: accept negative numbers for %x
    • printf: fix exit code on conversion error
    • ps: conditionally support additional -o FIELDs
    • readlink: support -n, -v, -s and -q too if support for -f is requested
    • runsv: run ./finish with parameters (runit compat)
    • rx: strip padding from last block. Fixes bug 501
    • sed: deal with peculiar behavior of '2d;2,1p' in GNU sed
    • sed: fix "echo /usr/lib | sed 's,\(^/\|\)[^/][^/]*,..,g' " bug
    • sed: fix handling of 1d;1,3p and 1d;1,REGEXp
    • seq: fix input handling in non-C locales
    • sv: fix "sv o SRV; ...; sv d SRV". Fixes bug 461
    • svlogd: do not overrun read buffer. Fixes bug 439
    • svlogd: use line buffering if any filtering is done. Fixes bug 521
    • switch_root: allow /init to be a symlink; add doc (thanks Rob!)
    • syslogd: added comment, no code changes
    • tail: fix "tail +N file_shorter_than_N"
    • tail: implement -F
    • tail: read only a portion of a file if it's HUGE. Fixes bug 551
    • tar: handle 256-base encoding in mtime
    • tar: support for tar --numeric-owner. By Natanael Copa
    • tcpsvd,udpsvd: fix uid/gid printing when run with -u
    • telnetd: properly close fds in child
    • test: fix "test !" and "test abc -a !". Fixes bug 465
    • test: make 64-bit math enable-able for hush too
    • tftp: do not risk invoking Sorcerer's Apprentice syndrome
    • tftp[d]: fix block# handling on upload with non-default blocksize
    • touch: implement -d --date (our own testsuite needs that)
    • touch: implement -t TIME (needed for testsuite)
    • udhcp: change UDHCP_DEBUG into int, make verbosity selectable with -v
    • udhcp: dname_dec may return NULL, account for that case
    • udhcp: shorten mac len from 16 to 6 in lease file
    • udhcpc: fix a read error loop (e.g.: device is down) blocking TERM
    • udhcpc: fix truncation of last char in client hostnames
    • udhcpc: if got IP successfully, disable -n for future renewals
    • udhcpc: support option 0x79 (static routes) (part of bug 341)
    • udhcpd: don't fail ARP check if returned MAC matches client's one
    • udhcpd: fix a bug in add_lease where it was reading at [-1]
    • unlzma: speedup, by Pascal Bellard (pascal.bellard AT ads-lu.com)
    • unzip: try lseek before resorting to reading for seeking forward
    • vi: do not accept uppercase commands (compat). Fixes bug 397
    • watchdog: enable it before setting timeout
    • wget: fix redirection from HTTP to FTP server
    • wget: remove IPv6 scope id in Host: field (apache compat)

  • 2 August 2009 -- BusyBox 1.14.3 (stable)

    BusyBox 1.14.3. (git, patches, how to add a patch)

    Bug fix release. Contains fixes in df (fix for "df /"), ls (problems with colored output in some configurations), ping6 (was not suid, unlike ping), test (parameter to "not" operator is optional), udhcpd (fixed lease file restore routine).

  • 22 June 2009 -- BusyBox 1.14.2 (stable)

    BusyBox 1.14.2. (git, patches, how to add a patch)

    Bug fix release. Contains fixes in ash ('.' builtin), ftpd, httpd, modprobe (better exit code compatibility), readlink (more options supported), telnetd (now closes file descriptors in children, it was forgetting to do so).

  • 27 May 2009 -- BusyBox 1.14.1 (stable)

    BusyBox 1.14.1. (git, patches, how to add a patch)

    Bug fix release. Contains fixes in acpid, awk, depmod, dhcp, gzip, mdev, modprobe, sysctl; libbb fixes. hush is significantly updated.

  • 5 May 2009, SVN -> GIT

    We've migrated from SVN to GIT. SVN is frozen read-only before the conversion, so check out the Developing links and such for updated instructions.

  • 15 April 2009 -- BusyBox 1.14.0 (unstable), BusyBox 1.13.4 (stable)

    BusyBox 1.14.0. (git, patches, how to add a patch)

    BusyBox 1.13.4. (git, patches, how to add a patch)

    Sizes of busybox-1.13.4 and busybox-1.14.0 (with equivalent config, static uclibc build):

       text    data     bss     dec     hex filename
     785501     483    7036  793020   c19bc busybox.1.13.4/busybox
     788380     467    6960  795807   c249f busybox.1.14.0/busybox
      15361       0       0   15361    3c01 busybox.1.13.4/shell/hush.o
      20724       0       0   20724    50f4 busybox.1.14.0/shell/hush.o

    Most of growth is in hush. The rest shrank a bit.

    New applets:

    • flash_eraseall: by Sebastian Andrzej Siewior (bigeasy AT linutronix.de)
    • acpid, mkdosfs, tunctl: by Vladimir
    • ftpd: by Adam Tkac (vonsch AT gmail.com)
    • timeout: by Roberto Foglietta
    • ionice: adapted from Linux kernel example by Walter Harms
    • mkpasswd: synonym to cryptpw. mkpasswd is in Debian, OTOH cryptpw was added to busybox earlier. Trying to make both camps happy by making those two applets just aliases. They are command-line compatible

    Changes since previous release:

    lash and msh are deprecated, please migrate to hush.

    hush had many, many fixes and features added: here documents, arithmetic evaluation, function support, and all this works on NOMMU too, safely, including 100kb-sized `command` and here documents. Here document support, arithmetic evaluation, improved ${var} operations, other fixes are by Mike Frysinger (vapier AT gentoo.org).

    Other changes:

    • libbb: unify concurrent-safe update of /etc/{passwd,group,[g]shadow}. By Tito (farmatito AT tiscali.it)
    • libbb/sha{1,256,512}: major code shrink
    • libbb/lineedit: make history saving/loading concurrent-safe
    • libbb: shrink linked list ops. By xmaks AT email.cz
    • libbb: str2sockaddr should accept [IPv6] addr without port - wget 'ftp://[::1]/file' needs that to work
    • libbb: make bb_info_msg do atomic, unbuffered writes
    • util-linux/volumeid: abort early on read failures. Should help with probing missing fdd's
    • util-linux/volumeid: fix bug 249 "findfs finds the wrong partition"
    • adduser: allow adding to group 0; don't _create_ /etc/shadow, only append data if it exists
    • ash: fix mishandled ^C and SIGINT (several cases)
    • ash: fix "ash -c 'exec 1>&0'" complaining that fd 0 is busy
    • ash: fix $IFS handling in read. Closes bug 235
    • ash: fix a case where we were closing wrong descriptor
    • ash: fix bad interaction between ash -c '....&' and bash compat
    • ash: fix miscalculation of memory needed for eval tree. Found by Timo Teras (timo.teras AT iki.fi)
    • ash: make dot command search current directory first, as bash does
    • ash: printf builtin with no arguments should not exit
    • awk: fix long field separators case. By Ian Wienand (ianw AT vmware.com)
    • awk: in BEGIN section $0 should be "", not "0"
    • awk: make "struct global" hack more robust wrt alignment. Closes bug 131
    • brctl: fix compilation on 2.4.x kernels
    • chat: treat timeout more correctly
    • chat: recognize RECORD directive
    • cksum, head, printenv: report errors via exitcode
    • cpio: add -p, -0 and -L options
    • crond, crontab: make cron directory location configurable
    • crond: correct more of logfile to 0666 (as usual, umask allows user to remove unwanted bits)
    • crond: put tasks in separate process groups
    • dc: fix the "base 2" patch omission of base not being set
    • depmod: accept and ignore -r. Linux kernel build needs this
    • depmod: fix -b option. By timo.teras AT iki.fi
    • udhcpc: fix a problem where we don't open listening socket fast enough
    • udhcpc: stop filtering environment passed to the script
    • udhcpd: disable option to have absolute lease times in lease file (that does not work with dumpleases)
    • udhcpd: write 64-bit current time in lease file. Without it, determination of remaining lease time is unreliable
    • udhcpd: remember hostnames of clients
    • dumpleases: fix -a option, use recorded current time in lease file, show hostnames
    • dnsd: fix a number of bugs. Ideas by Ming-Ching Tiew (mctiew AT yahoo.com)
    • dpkg: better and shorter code to compare versions. Taken from "official" dpkg by Eugene T. Bordenkircher (eugebo AT gmail.com)
    • du: fix "du /dir /dir" case
    • env: support -uVAR=VAL
    • expand, unexpand: fix incorrect expansion in some cases
    • expr: a bit more robust handling of regexps with groups. Closes bug 87
    • find: support --mindepth
    • getty: make speed 0 mean "don't change speed", stop using non-portable way of setting speeds
    • grep: support -z
    • gzip: fix gzip -dc bug caused by using stale getopt state
    • httpd: set $HOST to Host: header value. By Tobias Poschwatta (tp AT fonz.de)
    • ifupdown: allow options to udhcpc to be configurable from .config
    • init: do not eat last char in messages; do not print duplicate "init:" prefix to syslog
    • init: fix a bug where on reload order of entries might be wrong
    • init: major improvement in documentation and signal handling. Lots of nasty, but hard to trip, races are fixed
    • init: reinstate proper handling of !ENABLE_FEATURE_USE_INITTAB
    • init: remove wait loop on restart, it may be dangerous
    • init: test for vt terminal with VT_OPENQRY, assume that anything else is TERM=vt102, not TERM=linux. Closes bug 195
    • inotifyd: add x, o, and u events
    • inotifyd: fix buffer overflow and "unreaped zombies" problem
    • inotifyd: conserve resourses by closing unused inotify descriptors
    • insmod/modprobe: do not pass NULL to kernel as module parameter
    • ip: in "ip rule add from all table 1", "all" is taken as, whereas "any" and "default" would be They must be all Closes bug 57
    • iproute: fix ipXXX utilities trying to parse their applet name as their 1st parameter
    • klogctl: fix a problem where we don't terminate read data with '\0' and then misinterpret it
    • ls: do not follow links with -s. Closes bug 33
    • ls: implement -Q and -g (-g was accepted but ignored)
    • ls: make readlink error to not disrupt output (try ls -l /proc/self/fd)
    • man: better check for duplicated MANPATH
    • mdev: add support for - ("dont stop here") char
    • mdev: if /sys/class/block exists, don't scan /sys/block
    • mdev: ignore events with "$SUBSYSTEM" == "firmware" && "$ACTION" == "remove"
    • mdev: provide $SUBSYSTEM. By Vladimir
    • modprobe/insmod for 2.4: support compressed modules. By Guenter (lists AT gknw.net)
    • modprobe: rework/speedup by Timo Teras (timo.teras AT iki.fi)
    • modutils-24: fix bad interaction of xzalloc with xrealloc_vector
    • mount: support "-O option", stop trying to mount swap partitions, fix CIFS support
    • mountpoint: add -n option. By Vladimir
    • nslookup: allow usage of IPv6 addresses or hostnames for DNS server name; allow for port specification. Tested to work on uclibc svn: "nslookup google.com [::1]:5353". glibc + IPv6 address of DNS server still does not work
    • popmaildir: fix several grave bugs with using memory past end of malloc block
    • printf: fix 1.12.0 breakage (from %*d fix), it was misinterpreting "*"
    • printf: make integer format strings print long long-sized values
    • rmmod: fix bug 263 "modutils/rmmod can't remove modules with dash in name on 2.4 kernels"
    • sendmail: document and fix usage of fd #4, fix check for helper failure
    • sendmail: update by Vladimir
    • seq: add -w support. By Natanael Copa
    • seq: add support for "-s separator"
    • stat: make stat -f show filesystem "ID:" as coreutils does
    • sysctl: fix another corner case with "dots and slashes"
    • sysctl: fix broken -p [file]. Closes bug 231
    • sysctl: support recursing if name is a directory: "sysctl net.ipv4.conf". Patch by xmaks AT email.cz
    • syslogd: make signal handling syncronous
    • syslogd: create logfile with 0666 (affected by umask as usual), not 0600
    • tail: fix tail +N syntax not working. Closes bug 221
    • tar: do not change new tarfile's mode, GNU tar doesn't do it
    • tar: support GNU tar's "base256" encoding
    • telnetd: correctly output 0xff char
    • telnetd: do not advertise TELNET_LFLOW, we do not support it properly
    • tftp: when we infer local name from remote (-r [/]path/path/file), strip path. This mimics wget and is generally more intuitive
    • timeout: fix parsing of -t NUM on MMU
    • top: make it work again on 2.4 kernels. Closes bug 125
    • tr: fix overflow in expand and complement, fix stop after [:class:], fix handling of ranges and [x]'s
    • tr: support -C as synonym to -c, support [:xdigit:]
    • traceroute: rewrite. Do not emit raw IP packets, instead send UDP or ICMP packets and rely on the kernel to form IP headers, select source IP and interface
    • uname: add support for -i and -o, fix printing of unknown -p value with -a option, support long options
    • unzip: fix thinko with le/be conv and size. Closes bug 129
    • vi: fix several instances of major goof: when text grows, text[] might get reallocated! We were keeping around pointers to old place
    • vi: speedup and code shrink. By Walter Harms
    • wget: --post-data support. By Harald Kuthe (harald-tuxbox AT arcor.de)
    • wget: fix --header handling, more robust EINTR detection

  • 8 March 2009 -- BusyBox 1.13.3 (stable)

    BusyBox 1.13.3. (git, patches, how to add a patch)

    1.13.3 is a bug fix release. It has fixes for awk, depmod, init, killall, mdev, modprobe, printf, syslogd, tar, top, unzip, wget.

  • 31 December 2008 -- BusyBox 1.13.2 (stable), BusyBox 1.12.4 (stable)

    BusyBox 1.13.2. (git, patches, how to add a patch)

    BusyBox 1.12.4. (git, patches, how to add a patch)

    Bug fix releases. 1.13.2 has fixes for crond, dc, init, ip, printf. 1.12.4 has fixes for ip and printf.

  • 29 November 2008 -- BusyBox 1.13.1 (stable), BusyBox 1.12.3 (stable)

    BusyBox 1.13.1. (git, patches, how to add a patch)

    BusyBox 1.12.3. (git, patches, how to add a patch)

    Bug fix releases. 1.13.1 has fixes for ash, option parsing, id, init, inotifyd, klogd, line editing and modprobe. 1.12.3 has fixes for option parsing and line editing.

  • 10 November 2008 -- BusyBox 1.13.0 (unstable), BusyBox 1.12.2 (stable)

    BusyBox 1.13.0. (git, patches, how to add a patch)

    BusyBox 1.12.2. (git, patches, how to add a patch)

    Sizes of busybox-1.12.2 and busybox-1.13.0 (with equivalent config, static uclibc build):

       text    data     bss     dec     hex filename
     778291     551    7856  786698   c010a busybox-1.12.2/busybox
     778981     551    7852  787384   c03b8 busybox-1.13.0/busybox

    New applets: blkid, devmem

    Changes since previous release:

    • mail applets: total overhaul. Vladimir as usual
    • ash: fix "while kill -0 $child; do true; done" looping forever
    • ash: fix NOEXEC mode - we were forgetting to pass environment
    • ash: fix a bug in standalone mode (corrupted getopt state)
    • ash: optionally support ">&file" and "&>file" redirections
    • awk: bitwise ops cast oprands and results to unsigned long, not signed. Closes bug 4774
    • awk: fix typo in atan2 code. Closes bug 5594
    • awk: improve handling of negative numbers in bitwise ops; fix handling of octal costants
    • awk: support hex constants
    • basename: fix error code (again)
    • cpio: emit TRAILER even when hard links were found. By Pascal Bellard (pascal.bellard AT ads-lu.com)
    • crontab: do not destroy STDIN_FILENO, editor may need it (crontab -e)
    • dc: support for bases 2 and 8, by Nate Case (ncase AT xes-inc.com)
    • dhcpc: treat "discover...select...discover..." loop the same way as "discover...discover...discover..."
    • dpkg: add dpkg -l PACKAGE_PATTERN. By Peter Korsgaard
    • fbset: fix mode matching code: original code may trigger false positive.
    • findfs: fix LUKS and FAT detection routines; do not exit if corrupted FAT fs makes us try to seek past the end
    • grep: fix 'echo aaa | grep -o a' + ENABLE_EXTRA_COMPAT case. By Natanael Copa
    • grep: fix EXTRA_COMPAT grep to honor -E and -i
    • gunzip: restore mtime
    • halt: reinstate -w even if !FEATURE_WTMP
    • hexdump: fix SEGV in hexdump -e ""
    • httpd: pass "Accept:" and "Accept-Language:" header to CGI scripts (Alina Friedrichsen)
    • hush: fix environment and memory leaks
    • hush: fix trashing of environment by local env vars: a=a; a=b cmd; - a was unset
    • id: improve compatibility with coreutils. By Tito Ragusa
    • inetd: fix a case when we have zero services
    • inetd: use config parser. By Vladimir
    • init: set stderr to NONBLOCK
    • insmod: fix detection of open failure
    • install: support -D
    • ip: fix ip route rejecting dotted quads as prefix
    • ip: route metric support (Natanael Copa)
    • iplink: accept shorthands for "address" keyword: "ip link set address 00:11:22:33:44:55"
    • kbd_mode: support -C TTY
    • kill[all[5]]: accept -s SIG too. By Steve Bennett (steveb AT workware.net.au)
    • klogd: handle many lines at once. By Steve Bennett (steveb AT workware.net.au)
    • less: support -I to be able to search case-insensitively
    • less: add optional line number toggle and resizing on window resize
    • libbb: do not reject floating point strings like ".15"
    • lineedit: fix bug 5824 "since rev 23530 fdisk and ed don't work any more"
    • lineedit: fix problems with empty commands in history
    • login: fix /etc/nologin handling
    • man: fix inconsistencies in handling $MANPATH
    • mdev: support match by major,minor. See bug 4714
    • modprobe-small: make insmod command line compatible
    • modprobe-small: support "blacklist" keyword in /etc/modules/MODULE_NAME
    • modprobe: fix a segfault when modprobe is called with no arguments at all
    • modutils/*: rewrite by Timo Teras (timo.teras AT iki.fi)
    • mount: fix "-o parm1 -o parm2" not accumulating
    • nmeter: 4k buffers are too small for /proc files, make them dynamically sized with 16k upper limit
    • ping: SO_RCVBUF must be bigger than packet size, otherwise large ping packets might fail to be received
    • route: fix for 64-bit BE machines by Seonghun Lim (wariua AT gmail.com)
    • rpm: fix incompatibilities which prevented rpm -i foo.src.rpm
    • runsvdir: support runsvdir-as-init
    • setarch: do not try to use non-existent data in argv[]
    • setfont: support -m and -C, support -m TEXTUAL_MAP (by Vladimir)
    • setup_environment: cd $HOME regardless of clear_env value
    • slattach: preserve speed in non-raw mode. By Matthieu Castet (matthieu.castet AT parrot.com)
    • start_stop_daemon: accept (and ignore) -R PARAM
    • sv: make default service dir configurable (Vladimir wants it)
    • sysctl: fix bug 3894 (by Kryzhanovskyy Maksym)
    • tar: fix bug 3844: non-root tar does not preserve perms
    • telnetd: handle emacs M-DEL and IAC-NOP. By Jim Cathey (jcathey AT ciena.com)
    • top: fix "top -d 1" (bug 5144)
    • top: optional SMP support by Vineet Gupta (vineetg76 AT gmail.com)
    • trylink: make messages less confusing
    • unzip: handle "central directory". Needed for OpenOffice, gmail attachment .zips etc
    • vi: Rob's algorithm of reading and matching ESC sequences (nice work btw!)
    • vi: deal with EOF/error on stdin and with input NULs
    • vi: fix uninitialized last_search_pattern (bug 5794)
    • vi: handle chars 0x80, 0x81 etc correctly
    • volume identification: abolish /proc/partitions and /proc/cdroms scanning. It does not catch volume managers and such. Simply scan /dev/* for any block devices
    • watchdog: WDIOC_SETTIMEOUT accepts seconds, not milliseconds
    • watchdog: add -T option

  • 28 September 2008 -- BusyBox 1.12.1 (stable), BusyBox 1.11.3 (stable)

    BusyBox 1.12.1. (git, patches, how to add a patch)

    BusyBox 1.11.3. (git, patches, how to add a patch)

    Bugfix-only releases for 1.11.x and 1.12.x branches.

  • 21 August 2008 -- BusyBox 1.12.0 (unstable), BusyBox 1.11.2 (stable)

    BusyBox 1.12.0. (git, patches, how to add a patch)

    BusyBox 1.11.2. (git, patches, how to add a patch)

    Sizes of busybox-1.11.2 and busybox-1.12.0 (with equivalent config, static uclibc build):

       text    data     bss     dec     hex filename
     829687     617    7052  837356   cc6ec busybox-1.11.2/busybox
     822961     594    6832  830387   cabb3 busybox-1.12.0/busybox

    New applets: rdev (Grant Erickson), setfont, showkey (both by Vladimir)

    Most significant changes since previous release (please report any regression):

    • ash: bash compat: "shift $BIGNUM" is equivalent to "shift 1"
    • ash: dont allow e.g. exec <&10 to attach to script's fd!
    • ash: fix a bug where redirection fds were not closed afterwards. Optimize close+fcntl(DUPFD) into dup2
    • ash: fix segfault in "command -v"
    • ash: fix very weak $RANDOM generator
    • ash: prevent exec NN>&- from closing fd used for script reading
    • ash: teach ash about 123>file. It could take only 0..9 before
    • hush: fix a case where "$@" must expand to no word at all
    • hush: fix mishandling of a'b'c=fff as assignments. They are not
    • hush: fix non-detection of builtins and applets in "v=break; ...; $v; ..." case
    • hush: fix "while false; ..." exitcode; add testsuites
    • hush: support "case...esac" statements (~350 bytes of code)
    • hush: support "break [N]" and "continue [N]" statements
    • hush: support "for if in do done then; do echo $if; done" case
    • hush: support "for v; do ... done" syntax (implied 'in "$@"')
    • hush: support $_NUMBERS variable names
    • libbb: unified config parser (by Vladimir). This change affected many applets

    Other changes:

    • libbb: dump: do not use uninitialized memory (closes bug 4364)
    • libbb: fix bb_strtol[l]'s check for "-" (closes bug 4174)
    • libbb: fix --help to not affect "test --help"
    • libbb: fix mishandling of "all argv are opts" in getopt32()
    • libbb: getopt32() should not ever touch argv[0] (even read)
    • libbb: introduce and use xrealloc_vector
    • libbb: [x]fopen_for_{read,write} introduced and used (by Vladimir)
    • lineedit: fix use-after-free
    • libunarchive: refactor handling of archived files. "tar f file.tar.lzma" now works too
    • bb_strtoXXX: close bug 4174 (potential use of buf[-1])
    • open_transformer: don't leak file descriptor
    • open_transformer: fix bug of calling exit instead of _exit
    • arp: without -H type, assume "ether" (closes bug 4564)
    • ar: reuse existing ar unpacking code
    • awk: fix a case with multiple -f options. Simplify -f file reading.
    • build system: introduce and use FAST_FUNC: regparm on i386, otherwise no-op
    • bunzip2: fix an uncompression error (by Rob Landley rob AT landley.net)
    • b[un]zip2, g[un]zip: unlink destination if -f is given (closes bug 3854)
    • comm: almost total rewrite
    • cpio: fix -m to actually work as expected (by Pascal Bellard)
    • cpio: internalize archive_xread_all_eof, add a few paranoia checks for corrupted cpio files
    • cpio: make long opts depend only on ENABLE_GETOPT_LONG
    • cpio: on unpack, limit filename length to 8k
    • cpio: support some long options
    • crond: use execlp instead of execl
    • cut: fix buffer overflow (closes bug 4544)
    • envdir: fix "envdir" (no params at all) and "envdir dir" cases
    • findfs: make it use setuid-ness of busybox binary
    • fsck: use getmntent_r instead of open-coded parsing (by Vladimir)
    • fuser: a bit of safety in scanf
    • grep: option to use GNU regex matching instead of POSIX one. This fixes problems with NULs in files being scanned, but costs +800 bytes
    • halt: signal init regardless of ENABLE_INIT
    • httpd: add homedir directive specially for (and by) Walter Harms wharms AT bfs.de
    • ifupdown: /etc/network/interfaces can have comments with leading blanks
    • ifupdown: fixes for custom MAC address (by Wade Berrier wberrier AT gmail.com)
    • ifupdown: fixes for shutdown of DHCP-managed interfaces (by Wade Berrier wberrier AT gmail.com)
    • inetd: do not trash errno in signal handlers; in CHLD handler, stop looping through services when pid is found
    • insmod: users report that "|| defined(__powerpc__)" is missing
    • install: do not chown intermediate directories with install -d (by Natanael Copa)
    • install: fix long option not taking params (closes bug 4584)
    • lpd,lpr: send/receive ACKs after filenames, not only after file bodies
    • ls: fix a bug where we may use uninintialized variable
    • man: add handling of "man links", by Ivana Varekova varekova AT redhat.com
    • man: fix a case when a full pathname to manpage is given
    • man: fix inverted cat/man bool variable
    • man: fix missed NULL termination of an array
    • man: mimic "no manual entry for 'bogus'" message and exitcode
    • man: support cat pages too (by Jason Curl jcurlnews AT arcor.de)
    • man: teach it to use .lzma if requested by .config
    • mdev: check for "/block/" substring for block dev detection
    • mdev: do not complain if mdev.conf does not exist
    • mdev: if device was moved at creation, at removal correctly remove it from moved location and also remove symlinks to it
    • mdev: support for serializing hotplug
    • mdev, init: use shared code for fd sanitization
    • mkdir: fix "uname 0222; mkdir -p foo/bar" case (by Doug Graham dgraham AT nortel.com)
    • modprobe: support for /etc/modprobe.d (by Timo Teras)
    • modprobe: use buffering line reads (fgets()) instead of reads()
    • modutils: optional modprobe-small (by Vladimir), 15kb smaller than standard one
    • mount: support for "-o mand" and "[no]relatime"
    • mount: support nfs mount option "nordiplus" (by Octavian Purdila opurdila AT ixiacom.com)
    • mount: support "relatime" / "norelatime"
    • mount: testsuite for "-o mand"
    • msh: fix "while... continue; ..." (closes bug 3884)
    • mv: fix a case when we move dangling symlink across mountpoints
    • netstat: optional -p support (by L. Gabriel Somlo somlo AT cmu.edu)
    • nmeter: fix read past the end of a buffer (closes bug 4594)
    • od, hexdump: fix bug where xrealloc may move pointer, leaving other pointers dangling (closes bug 4104)
    • pidof/killall: allow find_pid_by_name to find running processes started as scripts_with_name_longer_than_15_bytes.sh (closes bug 4054)
    • printf: do not print garbage on "%Ld" (closes bug 4214)
    • printf: fix %b, fix several bugs in %*.*, fix compat issues with aborting too early, support %zd; expand testsuite
    • printf: protect against bogus format specifiers (closes bug 4184)
    • sendmail: updates from Vladimir:
    • sendmail: do not discard all headers
    • sendmail: do not ignore CC; accept to: and cc: case-insensitively. +20 bytes
    • sendmail: fixed mail recipient address
    • sendmail: fixed SEGV if sender address is missed
    • sendmail: use HOSTNAME instead of HOST when no server is explicitly specified
    • sleep: if FANCY && DESKTOP, support fractional seconds, minutes, hours and so on (coreutils compat)
    • ssd: CLOSE_EXTRA_FDS in MMU case too
    • ssd: do not stat -x EXECUTABLE, it is not needed anymore
    • ssd: fix -a without -x case
    • ssd: use $PATH
    • tar: fix handling of tarballs with symlinks with size field != 0
    • tar: handle autodetection for tiny .tar.gz files too, simplify autodetection
    • taskset: fix some careless code in both fancy and non-fancy cases. -5 bytes for fancy, +5 for non-fancy
    • tee: fix infinite looping on open error (echo asd | tee "")
    • tee: "-" is a name for stdout, handle it that way
    • telnetd: fix issue file printing
    • test: fix parser to prefer binop over unop, as coreutils does
    • testsuite: uniformly use $ECHO with -n -e
    • time: don't segfault with no arguments
    • touch: support -r REF_FILE if ENABLE_DESKTOP (needed for blackfin compile)
    • tr: fix "access past the end of a string" bug 4354
    • tr: fix "tr [=" case (closes bug 4374)
    • tr: fix yet another access past the end of a string (closes bug 4374)
    • unlzma: fix memory leak (by Pascal Bellard)
    • vi: fix reversed checks for underflow
    • vi: using array data after it fell out of scope is stupid
    • xargs: fix -e default to match newer GNU xargs, add SUS mandated -E (closes bug 4414)
    • other fixes and code size reductions in many applets

  • 12 July 2008 -- BusyBox 1.11.1 (stable)

    BusyBox 1.11.1. (git, patches, how to add a patch)

    Bugfix-only release for 1.11.x branch. It contains fixes for awk, bunzip2, cpio, ifupdown, ip, man, start-stop-daemon, uname and vi.

  • 11 July 2008 -- HOWTO is updated

    "How to build static busybox for i486-linux-uclibc" is updated and tested on a fresh Fedora 9 install. Please report if it doesn't work for you.

  • 25 June 2008 -- BusyBox 1.11.0 (unstable), BusyBox 1.10.4 (stable)

    BusyBox 1.11.0. (git, patches, how to add a patch)

    BusyBox 1.10.4. (git, patches, how to add a patch)

    Sizes of busybox-1.10.4 and busybox-1.11.0 (with equivalent config, static uclibc build):

       text    data     bss     dec     hex filename
     800675     636    7080  808391   c55c7 busybox-1.10.4
     798392     611    6900  805903   c4c0f busybox-1.11.0

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

    Changes since previous release:

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

  • 12 June 2008 -- Sponsors!

    We want to thank the following companies which are providing support for the BusyBox project:

    • Analog Devices, Inc. provided a Blackfin development board free of charge. Blackfin is a NOMMU processor, and its availability for testing is invaluable. If you are an embedded device developer, please note that Analog Devices has an entire Linux distribution available for download for this board. Visit http://blackfin.uclinux.org/ for more information.

  • 5 June 2008 -- BusyBox 1.10.3 (stable)

    BusyBox 1.10.3. (git, patches, how to add a patch)

    Bugfix-only release for 1.10.x branch. It contains fixes for dnsd, fuser, hush, ip, mdev and syslogd.

  • 8 May 2008 -- BusyBox 1.10.2 (stable)

    BusyBox 1.10.2. (git, patches, how to add a patch)

    Bugfix-only release for 1.10.x branch. It contains fixes for echo, httpd, pidof, start-stop-daemon, tar, taskset, tab completion in shells, build system.

    Please note that mdev was backported from current svn trunk. Please report if you encounter any problems with it.

  • 19 April 2008 -- BusyBox 1.10.1 (stable)

    BusyBox 1.10.1. (git, patches, how to add a patch)

    Bugfix-only release for 1.10.x branch. It contains fixes for fuser, init, less, nameif, tail, taskset, tcpudp, top, udhcp.

  • 21 March 2008 -- BusyBox 1.10.0 (unstable)

    BusyBox 1.10.0. (git, patches, how to add a patch)

    Sizes of busybox-1.9.2 and busybox-1.10.0 (with almost full config, static uclibc build):

       text    data     bss     dec     hex filename
     781405     679    7500  789584   c0c50 busybox-1.9.2
     773551     640    7372  781563   becfb busybox-1.10.0

    Top 10 stack users:

    busybox-1.9.2:               busybox-1.10.0:
    echo_dg                 4116 bb_full_fd_action       4112
    bb_full_fd_action       4112 find_list_entry2        4096
    discard_dg              4108 readlink_main           4096
    discard_dg              4096 ipaddr_list_or_flush    3900
    echo_stream             4096 iproute_list_or_flush   3680
    discard_stream          4096 insmod_main             3152
    find_list_entry2        4096 fallbackSort            2952
    readlink_main           4096 do_iproute              2492
    ipaddr_list_or_flush    3900 cal_main                2464
    iproute_list_or_flush   3680 readhere                2308

    New applets: brctl, chat (by Vladimir Dronnikov <dronnikov AT gmail.com>), findfs, ifenslave (closes bug 115), lpd (by Vladimir Dronnikov <dronnikov AT gmail.com>), lpr+lpq (by Walter Harms), script (by Pascal Bellard <pascal.bellard AT ads-lu.com>), sendmail (Vladimir Dronnikov <dronnikov AT gmail.com>), tac, tftpd.

    Made NOMMU-compatible: crond, crontab, ifupdown, inetd, init, runsv, svlogd, tcpsvd, udpsvd.

    Changes since previous release:

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

  • 21 March 2008 -- BusyBox old stable releases

    Bugfix-only releases for four past branches. Links to locations for future hot patches are in parentheses.

    1.9.2 (patches), 1.8.3 (patches), 1.7.5 (patches), 1.5.2 (patches).

    How to add a patch.

  • 12 February 2008 -- BusyBox 1.9.1 (stable)

    BusyBox 1.9.1. (git, patches, how to add a patch)

    This is a bugfix-only release, with fixes to fsck, iproute, mdev, mkswap, msh, nameif, stty, test, zcip.

    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.

  • 24 December 2007 -- BusyBox 1.9.0 (unstable)

    BusyBox 1.9.0. (git, patches, how to add a patch)

    Sizes of busybox-1.8.2 and busybox-1.9.0 (with almost full config, static uclibc build):

       text    data     bss     dec     hex filename
     792796     978    9724  803498   c42aa busybox-1.8.2
     783803     683    7508  791994   c15ba busybox-1.9.0

    Top 10 stack users:

    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

    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.

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

    Changes since previous release:

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

  • 23 November 2007 -- BusyBox 1.8.2 (stable), BusyBox 1.7.4 (stable)

    BusyBox 1.8.2. (git, patches, how to add a patch)

    BusyBox 1.7.4. (git, patches, how to add a patch)

    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.

  • 9 November 2007 -- BusyBox 1.8.1 (stable)

    BusyBox 1.8.1. (git, patches, how to add a patch)

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

  • 4 November 2007 -- BusyBox 1.8.0 (unstable)

    BusyBox 1.8.0. (git, patches, how to add a patch)

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

    Applets which had many changes since 1.7.x:


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


    • TOPMEM feature - 's(how sizes)' command
    • don't wait before final bailout (try top -b -n1)
    • fix for command line wrapping

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

    Code and data size in comparison with 1.7.3:

    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

    New applets:

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

    Other changes since previous release (abridged):

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

  • 4 November 2007 -- BusyBox 1.7.3 (stable)

    BusyBox 1.7.3. (git, patches, how to add a patch)

    This is a bugfix-only release, with fixes to ash, httpd, inetd, iptun, logger, login, tail.

  • 30 September 2007 -- BusyBox 1.7.2 (stable)

    BusyBox 1.7.2. (git, patches, how to add a patch)

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

  • 16 September 2007 -- BusyBox 1.7.1 (stable)

    BusyBox 1.7.1. (git, patches, how to add a patch)

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

  • 24 August 2007 -- BusyBox 1.7.0 (unstable)

    BusyBox 1.7.0. (git, patches, how to add a patch)

    Applets which had many changes since 1.6.x:


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


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

    top, ps, killall, pidof:

    • simpler loadavg processing
    • truncate usernames to 8 chars
    • fix non-CONFIG_DESKTOP ps -ww (by rockeychu)
    • improve /proc/PID/cmdinfo reading code
    • 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)
    • reduce CPU usage in decimal conversion (optional) (corresponding speedup on kernel side is accepted in mainline Linux kernel, yay!)
    • make percentile (0.1%) calculations configurable
    • add config option and code for global CPU% display
    • reorder columns, so that [P]PIDs are together and VSZ/%MEM are together - makes more sense

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

    Code and data size in comparison with 1.6.1:

    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

    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.

    New applets:

    • pscan, expand, unexpand (from Tito <farmatito at tiscali.it>)
    • setfiles, restorecon (by Yuichi Nakamura <ynakam at hitachisoft.jp>)
    • chpasswd (by Alexander Shishkin <virtuoso at slind.org>)
    • slattach, ttysize

    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.

    Other changes since previous release (abridged):

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

  • 30 June 2007 -- BusyBox 1.6.1 (stable)

    BusyBox 1.6.1. (git, patches, how to add a patch)

    This is a bugfix-only release, with fixes to echo, hush, and wget.

  • 1 June 2007 -- BusyBox 1.6.0 (unstable)

    BusyBox 1.6.0. (git, patches, how to add a patch)

    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.

    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.

    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.

    Memory usage has decreased, but we can do better still

    Other changes since previous release:

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

  • 20 May 2007 -- BusyBox 1.5.1 (stable)

    BusyBox 1.5.1. (patches, how to add a patch)

    This is a bugfix-only release, with fixes to hdparm, hush, ifupdown, ps and sed.

  • 23 March 2007 -- BusyBox 1.5.0 (unstable)

    BusyBox 1.5.0. (patches, how to add a patch)

    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.

    Notable changes since previous release:

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

    BusyBox 1.4.2.

    This release includes only trivial fixes accumulated since 1.4.1.

  • 25 January 2007 -- BusyBox 1.4.1 (stable)

    BusyBox 1.4.1. (patches)

    This release includes only trivial fixes accumulated since 1.4.0.

  • 20 January 2007 -- BusyBox 1.4.0 (stable)

    BusyBox 1.4.0. (patches)

    Since this is a x.x.0 release, it probably is a bit less "stable" than usual.

    Changes since previous release:

    • 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.
    • 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.
    • 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.
    • arp: new applet (thanks to Eric Spakman).
    • fakeidentd: non-forking standalone server part was taking ~90% of the applet. Factored it out (in fact, rewrote it).
    • syslogd: mostly rewritten.
    • decompress_unzip, gzip: sanitized a bit.
    • sed: better hadling of NULs
    • httpd: stop adding our own "Content-type:" to CGI output
    • chown: user.grp works again.
    • minor bugfixes to: passwd, date, tftp, start_stop_daemon, tar, ps, ifupdown, time, su, stty, awk, ping[6], sort,...
  • 20 January 2007 -- BusyBox 1.3.2 (stable)

    BusyBox 1.3.2.

    This release includes only one trivial fix accumulated since 1.3.1

  • 27 December 2006 -- BusyBox 1.3.1 (stable)

    BusyBox 1.3.1. (patches)

    Closing 2006 with new release. It includes only trivial fixes accumulated since 1.3.0

  • 14 December 2006 -- BusyBox 1.3.0 (stable)

    BusyBox 1.3.0. (patches)

    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.

    Changes since previous release:

    • find: taking many more of standard options
    • ps: POSIX-compliant -o implemented
    • cp: added -s, -l
    • grep: added -r, fixed -h
    • watch: make it exec child like standard one does (was totally incompatible)
    • 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).
    • httpd: added -i (inetd), -f (foreground), support for directory indexer CGI (example is included), bugfixes.
    • telnetd: fixed/improved IPv6 support, inetd+standalone support, other fixes. Useful IPv6 stuff factored out into libbb.
    • runit/*: new applets adapted from http://smarden.sunsite.dk/runit/ (these are my personal favorite small-and-beautiful toys)
    • minor bugfixes to: login, dd, mount, umount, chmod, chown, ln, udhcp, fdisk, ifconfig, sort, tee, mkswap, wget, insmod.

    Note that GnuPG key used to sign this release is different. is also signed post-factum now. Sorry for the mess.

  • 29 October 2006 -- BusyBox (fix)


    Added compile-time warning that static linking against glibc produces buggy executables.

  • 24 October 2006 -- BusyBox 1.2.2 (stable)

    It's a bit overdue, but here is BusyBox 1.2.2.

    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.

    As Linux Weekly News noted, this is my (Rob's) last release of BusyBox. The new maintainer is Denis Vlasenko, I'm off to do other things.

  • 29 September 2006 -- New license email address.

    The email address gpl@busybox.net is now the recommended way to contact the Software Freedom Law Center to report BusyBox license violations.

  • 31 July 2006 -- BusyBox 1.2.1 (stable)

    Since nobody seems to have objected too loudly over the weekend, I might as well point you all at Busybox 1.2.1, a bugfix-only release with no new features.

    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.

    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.

  • 30 June 2006 -- BusyBox 1.2.0

    The -devel branch has been stabilized and the result is Busybox 1.2.0. Lots of stuff changed, I need to work up a decent changelog over the weekend.

    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. :)

    Update: Here are the first few bug fixes that will go into 1.2.1.

  • 17 May 2006 -- BusyBox 1.1.3 (stable)

    BusyBox 1.1.3 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.

    Expect 1.2.0 sometime next month, which won't be a bugfix release.

  • 10 April 2006 -- BusyBox 1.1.2 (stable)

    You can now download BusyBox 1.1.2, 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.

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

  • 27 March 2006 -- Software Freedom Law Center representing BusyBox and uClibc

    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 Hall of Shame), 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 Groklaw for suggestions. She referred us to the fine folks at softwarefreedom.org.

    As a result, we're pleased to announce that the Software Freedom Law Center has agreed to represent BusyBox and uClibc. We join a number of other free and open source software projects (such as X.org, Wine, and Plone in being represented by a fairly cool bunch of lawyers, which is not a phrase you get to use every day.

  • 22 March 2006 -- BusyBox 1.1.1

    The new maintainer is Rob Landley, and the new release is BusyBox 1.1.1. Expect a "what's new" document in a few days. (Also, Erik and I have have another announcement pending...)

    Update: Rather than put out an endless stream of 1.1.1.x releases, the various small fixes have been collected together into a patch, and new fixes will be appended to that as needed. Expect 1.1.2 around June.

  • 11 January 2006 -- 1.1.0 is out

    The new stable release is BusyBox 1.1.0. It has a number of improvements, including several new applets. (It also has a few rough spots, but we're trying out a "release early, release often" strategy to see how that works. Expect 1.1.1 sometime in March.)

  • 31 October 2005 -- 1.1.0-pre1

    The development branch of busybox is stable enough for wider testing, so you can now download, the first prerelease of 1.1.0. This prerelease includes a lot of new functionality: new applets, new features, and extensive rewrites of several existing applets. This prerelease should be noticeably more standards compliant than earlier versions of busybox, although we're still working out the bugs.

  • 16 August 2005 -- 1.01 is out

    A new stable release (BusyBox 1.01) is now available for download, containing over a hundred small fixes that have cropped up since the 1.00 release.

  • 13 January 2005 -- Bug and Patch Tracking

    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 shiny new Bug and Patch Tracking System to post all the gory details.

    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.

  • 13 October 2004 -- BusyBox 1.00 released

    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.

    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!

    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.

    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 BusyBox FAQ.

    As usual you can download busybox here.

    Have Fun!

  • 16 August 2004 -- BusyBox 1.0.0-rc3 released

    Here goes release candidate 3...

    The changelog has all the details. And as usual you can download busybox here.

    Have Fun!

  • 26 July 2004 -- BusyBox 1.0.0-rc2 released

    Here goes release candidate 2...

    The changelog has all the details. And as usual you can download busybox here.

    Have Fun!

  • 20 July 2004 -- BusyBox 1.0.0-rc1 released

    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.

    I really 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....

    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!

    The changelog has all the details. And as usual you can download busybox here.

    Have Fun!

    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 OLS and give my presentation as scheduled.

    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.

  • 13 April 2004 -- BusyBox 1.0.0-pre10 released

    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 really 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 very helpful if people could continue to review the BusyBox documentation and submit improvements.

    The changelog has all the details. And as usual you can download busybox here.

    Have Fun!

  • 6 April 2004 -- BusyBox 1.0.0-pre9 released

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

    I had hoped to get this released a month ago, but another release on 1 March 2004 has kept me busy...

    The changelog has all the details. And as usual you can download busybox here.

    Have Fun!

  • 23 February 2004 -- BusyBox 1.0.0-pre8 released

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

    The changelog has all the details. And as usual you can download busybox here.

    Have Fun!

  • 4 February 2004 -- BusyBox 1.0.0-pre7 released

    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.

    The changelog has all the details. And as usual you can download busybox here.

    Have Fun!

  • 30 January 2004 -- BusyBox 1.0.0-pre6 released

    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.

    People who rely on the daily BusyBox snapshots 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-<date>.tar.bz2". Please adjust any build scripts using the old naming scheme accordingly.

    The changelog has all the details. And as usual you can download busybox here.

    Have Fun!

  • 23 December 2003 -- BusyBox 1.0.0-pre5 released

    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.

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

    The changelog has all the details. And as usual you can download busybox here.

    Have Fun!

  • 10 December 2003 -- BusyBox 1.0.0-pre4 released

    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!

    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.

    The changelog has all the details. And as usual you can download busybox here.

    Have Fun!

  • 12 Sept 2003 -- BusyBox 1.0.0-pre3 released

    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!

    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!

    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.

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

    The changelog has all the details. And as usual you can download busybox here.

    Have Fun!

  • 30 July 2003 -- BusyBox 1.0.0-pre2 released

    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.

    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.

    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.

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

    The changelog has all the details. As usual you can download busybox here.

    Have Fun!

  • 15 July 2003 -- BusyBox 1.0.0-pre1 released

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

    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.

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

    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.

    As usual you can download busybox here. You don't really need to bother with the changelog, 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.

    Have Fun!

  • 26 October 2002 -- BusyBox 0.60.5 released

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

    The changelog has all the details. As usual you can download busybox here.

    Have Fun!

  • 18 September 2002 -- BusyBox 0.60.4 released

    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.

    The changelog has all the details. As usual you can download busybox here.

    Have Fun!

  • 27 April 2002 -- BusyBox 0.60.3 released

    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.

    The changelog has all the details. As usual you can download busybox here.

    Have Fun!

  • 6 March 2002 -- busybox.net now has mirrors!

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

  • 3 January 2002 -- Welcome to busybox.net!

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

    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, Mark Whitley (author of busybox sed, cut, and grep) has donated his NetWinder 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.

    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 HUGE thank-you goes out to everyone that has contributed!

  • 20 November 2001 -- BusyBox 0.60.2 released

    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.

    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 changelog for most of the details. The last release was very solid for people, and this one should be even better.

    As usual BusyBox 0.60.2 can be downloaded from https://busybox.net/downloads.

    Have Fun.

  • 18 November 2001 -- Help us buy busybox.net!
    Click here to help buy busybox.net!
    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 know 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.

    I was going to pay it all myself, but my wife didn't like that idea at all (big surprise). It turns out <insert argument where she wins and I don't> 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...

    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!

  • 23 August 2001 -- BusyBox 0.60.1 released
    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 too 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.

    The changelog has all the details. As usual BusyBox 0.60.1 can be downloaded from https://busybox.net/downloads.

    Have Fun!

  • 2 August 2001 -- BusyBox 0.60.0 released
    I am very pleased to announce the immediate availability of BusyBox 0.60.0. I have personally tested this release with libc5, glibc, and uClibc 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.

    Those wanting an easy way to test the 0.60.0 release with uClibc can use User-Mode Linux to give it a try by downloading and compiling buildroot.tar.gz. 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.

    Another cool thing is the nifty BusyBox Tutorial contributed by K Computing. This requires a ShockWave plugin (or standalone viewer), so you may want to grab the the GPLed shockwave viewer from here to view the tutorial.

    Finally, In case you didn't notice anything odd about the version number of this release, let me point out that this release is not 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.

    The changelog has all the details. As usual BusyBox 0.60.0 can be downloaded from https://busybox.net/downloads.

    Have Fun!

  • 7 July 2001 -- BusyBox 0.52 released
    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 many 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).

    The changelog 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 https://busybox.net/downloads.

    Have Fun!

  • 10 April 2001 - Graph of Busybox Growth
    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 right here.

    (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.)

  • 10 April 2001 -- BusyBox 0.51 released
    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.

    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!).

    You can read the changelog for complete details. BusyBox 0.51 can be downloaded from https://busybox.net/downloads.

    Have Fun!

  • Busybox Boot-Floppy Image

    Because you asked for it, we have made available a Busybox boot floppy image. Here's how you use it:

    1. Download the image
    2. dd it onto a floppy like so: dd if=busybox.floppy.img of=/dev/fd0 ; sync
    3. Pop it in a machine and boot up.

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

        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
  • 15 March 2001 -- BusyBox 0.50 released
    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 changelog.

    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 Larry Doolittle's website.

  • 27 January 2001 -- BusyBox 0.49 released
    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 changelog.

    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.

    Special Note
    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 Larry's website and help out if you can. This shell will be included in the next release of BusyBox.

  • 13 December 2000 -- BusyBox 0.48 released
    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.

    The curious can get a list of some of the more interesting changes by reading the changelog.

    Many thanks go out to the many many people that have contributed to this release, especially Matt Kraai, Larry Doolittle, and Kent Robotti.

  • 26 September 2000 -- BusyBox 0.47 released
    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 changelog for complete details.

  • 11 July 2000 -- BusyBox 0.46 released
    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 changelog for complete details.

  • 21 June 2000 -- BusyBox 0.45 released
    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 changelog for details).

    Also, some exciting infrastructure news! Busybox now has its own mailing list, publically browsable CVS tree, anonymous CVS access, and for those that are actively contributing there is even CVS write access. I think this will be a huge help to the ongoing development of BusyBox.

    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.

    Many thanks go out to the many people that have contributed to this release of BusyBox (esp. Pavel Roskin)!

  • 19 April 2000 -- syslogd bugfix
    Turns out that there was still a bug in busybox syslogd. For example, with the following test app:
    #include <syslog.h>
    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);
    int main(void)
        if (fork()==0)
    	do_log("A", 2);
        do_log("B", 3);
    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).

    Karl M. Hegbloom has created a fix for the problem. Thanks Karl!

  • 18 April 2000 -- BusyBox 0.43 released (finally!)
    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 changelog. Oh, and as a special bonus, I wrote some fairly comprehensive documentation, complete with examples and full usage information.

    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.

    You can grab BusyBox 0.43 tarballs here.

  • 9 April 2000 -- BusyBox 0.43 pre release
    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.

    The pre-release can be found here. Please let me know ASAP if you find any bugs.

  • 28 March 2000 -- Andersen Baby Boy release
    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).

    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.

    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.

  • 11 February 2000 -- BusyBox 0.42 released
    This is the most solid BusyBox release so far. Many, many bugs have been fixed. See the changelog 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.

  • 19 January 2000 -- BusyBox 0.41 released
    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 here.

  • 7 January 2000 -- BusyBox 0.40 released
    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 here.

  • 11 December 1999 -- BusyBox Website
    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.

  • 10 December 1999 -- BusyBox 0.39 released
    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 here.

  • 5 December 1999 -- BusyBox 0.38 released
    This release includes fixes to tar, cat, ls, dd, rm, umount, find, df, and make install, and includes new apps syslogd/klogd and logger.

Copyright © 1999-2008 Erik Andersen
Mail all comments, insults, suggestions and bribes to
Denys Vlasenko vda.linux@googlemail.com
This site created with the vi editor This site is kindly hosted by OSL