BUSYBOX
BusyBox
About Documentation Get BusyBox Development

Links

Developer Pages

  • The Software Freedom Conservancy acts as the GPL enforcement agent for various BusyBox copyright holders. If you wish to report a GPL violation on BusyBox, please write to gpl@busybox.net.

  • Life without systemd.

  • 19 May 2023 -- BusyBox 1.36.1 (stable)

    BusyBox 1.36.1. (git)

    Bug fix release. 1.36.1 has fixes for line editing, detection of hardware sha1/sha256 support, unzip (do not create suid/sgid files unless -K), shell (printf and sleep with no args, handing of SIGINT in sleep), ed.

  • 3 January 2023 -- BusyBox 1.36.0 (unstable)

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

    Note: udhcpc6 now uses a different helper script by default (/usr/share/udhcpc/default6.script).

    Sizes of busybox-1.35.0 and busybox-1.36.0 (with equivalent config, static uclibc build):

       text	   data	    bss	    dec	    hex	filename
    1044070	    908	  14328	1059306	 1029ea	busybox-1.35.0
    1046317	    908	  14328	1061553	 1032b1	busybox-1.36.0
    

    Changes since previous release:

    Aaro Koskinen:
          devmem: add 128-bit width
    
    Bernhard Reutner-Fischer (3):
          kbuild: fix building sha256
          kbuild: Prefer -Oz over -Os
          seedrng: manually inline seed_rng
    
    Brandon Maier:
          xxd: fix typo in trivial usage
    
    Dario Binacchi (2):
          fbset: abort on not handled options
          fbset: support setting pixel clock rate
    
    David Leonard:
          tsort: new applet
    
    Denys Vlasenko:
          Makefile.flags: add resolv to LDLIBS for linux compilers too (not only gnu ones)
          build system: detect if build host has no bzip2
          scripts/echo.c: fix NUL handling in "abc\0 def"
          libbb/loop: fix compile failure (name collision)
          libbb/loop: optionally use ioctl(LOOP_CONFIGURE) to set up loopdevs
          libbb/loop: restore the correct return value of set_loop()
          libbb/sha1: add config-selectable fully unrolled version, closes 14391
          libbb/sha1: add config-selectable partially unrolled version
          libbb/sha1: assembly versions for x86
          libbb/sha1: optional x86 hardware accelerated hashing
          libbb/sha256: optional x86 hardware accelerated hashing
          libbb: change xstrndup, xmemdup to take size_t as size parameter
          libbb: factor out fflush_stdout_and_exit(EXIT_SUCCESS)
          libbb: fflush_stdout_and_exit(0) still exits with _error_ (not 0!) if fflush fails
          libbb: fix fallout from nth_string() robustification, closes 14726
          libbb: introduce and use chdir_or_warn()
          libbb: invert the meaning of SETUP_ENV_NO_CHDIR -> SETUP_ENV_CHDIR
          tls: P256: remove NOP macro sp_256_norm_8()
          tls: include signature_algorithms extension in client hello message
          examples/var_service/dhcp_if: make helper scripts more talkative
          testsuite/mount.tests: accomodate umount failure seen on 5.18.0
          testsuite/sha1sum.tests: fix false positive failure
          shell: add comments about SIGINT-related problems
          shell: fix compile failures in some configs
          ash,hush: fix handling of SIGINT while waiting for interactive input
          ash: ^C with SIG_INGed SIGINT should not exit the shell
          ash: do not truncate failed tilde expansion on unknown user names
          ash: fix ifs cleanup on error paths
          ash: fix unsafe use of mempcpy
          ash: fix use-after-free in pattern substitution code
          awk: input numbers are never octal or hex (only program consts can be)
          bc: hopefully fix bug 14956 (use-after-free)
          cut: build fix for FEATURE_CUT_REGEX
          ifplugd: split -a into -a and -A, latter disables upping in iface creation
          init: do not set HOME
          ls: implement ls -sh (human-readable allocated blocks)
          md5/shaXsum: use FEATURE_COPYBUF_KB to size the buffer instead of fixed 4k
          mv: fix error in !VERBOSE configs
          nmeter: %[md] %[mw] - dirty file-backed pages, writeback pages
          powertop: fix cpuid asm: ebx saving/restoring is properly done by gcc
          sed: correctly handle 'w FILE' commands writing to the same file
          sed: fix double-free in FEATURE_CLEAN_UP=y configs
          sed: fix handling of escaped delimiters in s/// replacement
          sed: fix handling of escaped delimiters in s/// search pattern, closes 14541
          seedrng: chdir to the SEED_DIRECTORY - avoid concat_path_file's
          seedrng: do not hash in a constant string, it's not adding entropy
          seedrng: do not hash lengths, they are very predictable
          seedrng: do not try to continue on unexpected errors (just exit)
          seedrng: explain why we need locking and fsync'ing
          seedrng: include file/dir names in error messages
          seedrng: re-add fsync after unlink, and explain its purpose
          seedrng: reduce MAX_SEED_LEN from 512 to 256
          seedrng: remove redundant assignment
          seedrng: remove unnecessary zero-filling of local variables
          seedrng: restore error check on fsync
          seedrng: simplify read_new_seed() to not have error return
          seedrng: use more xfuncs where appropriate
          shaNNNsum: accept one-space "HASH FILENAME" format for -c, closes 14866
          sort: fix -k2M (wasn't skipping leading whitespace)
          sort: fix -s -r interaction: 'stable' order is not affected by -r
          sort: fix sort -s -u, closes 14871
          sort: support -h
          sulogin: increase util-linux compatibility
          sulogin: start _login_ shell only with -p
          sulogin: util-linux does not say "normal startup" on Ctrl-D
          taskset: fix printf format mismatch in !FEATURE_TASKSET_FANCY config. closes 14616
          top: fix display of large PID/PPID
          top: improve large PID display in memory ('s') mode
          tree: make it unicode-aware
          tree: unicode tweak (use normal space char, 0x20)
          udhcpc6: add missed big-endian conversions
          udhcpc6: align FF02__1_2[]
          udhcpc6: downgrade "opening listen socket" log level to 2
          udhcpc6: fix binding to network aliases
          udhcpc6: fix sending of renew messages
          udhcpc6: use a different default config script
          xargs: implement -o, closes 15146
          xxd -r: handle offsets
          xxd -r: without -p, stop at more than one whitespace, closes 14786
          xxd: fix use of non-initialized data
          xxd: use bb_simple_perror_msg... where appropriate
    
    Emanuele Giacomelli:
          XXXsum: handle binary sums with " " in the path
    
    Grob Grobmann:
          vi: add 'ZQ' quitting command
    
    Henrique Rodrigues:
          ping: fix typo in --help text
    
    Jason A. Donenfeld (10):
          seedrng: import SeedRNG utility for kernel RNG seed files
          seedrng: use libbb functions
          seedrng: hoist bb_strtoul out of min/max
          seedrng: remove some global variables
          seedrng: further reduce size
          seedrng: use predefined strings where possible
          seedrng: avoid needless runtime strlen() call
          seedrng: compress format strings with %s arguments
          seedrng: code-golf even smaller
          seedrng: prune header includes
    
    Khem Raj:
          apply const trick to ptr_to_globals
    
    Louis Sautier:
          pkill: add -e to display the name and PID of the process being killed
    
    Ludwig Nussel:
          libbb: mark stack in assembly files read-only
    
    Natanael Copa (2):
          awk: fix use after free (CVE-2022-30065)
          more: accept and ignore -e
    
    Paul Fox:
          crond: implement support for setting PATH in crontab files
    
    Peter Kaestle:
          unzip -l: add missed big-endian conversions date and time
    
    Roger Knecht:
          tree: new applet
    
    Ron Yorston (8):
          libbb: restore special handling of nomsg errors
          libbb: make '--help' handling more consistent
          lineedit: get PWD from ash
          ash,hush: use HOME for tab completion and prompts
          vi: fix regression in autoindent handling
          vi: handle autoindent in 'cc' command
          vi: improved handling of backspace in replace mode
          vi: fix backspace over tab in commands
    
    Samuel Thibault:
          Fix non-Linux builds
    
    Shawn Landden:
          ash: optional sleep builtin
    
    Sören Tempel (3):
          ed: add support for -s command-line option as mandated by POSIX
          ash: don't read past end of var in subvareval for bash substitutions
          ash: fix use-after-free in bash pattern substitution
    
    Timo Teräs:
          mkfs.vfat: fix volume label to be padded with space
    
    Vincent Stehlé:
          fdisk: recognize EBBR protective partitions
    
    Walter Lozano:
          Add support for long options to cmp
    
    Xiaoming Ni (4):
          loop: fix a race when a free loop device is snatched
          loop: refactor: extract subfunction get_next_free_loop()
          loop: simplify code of LOOP_SET_FD failure
          loop: refactor: extract subfunction set_loopdev_params()
    

  • 26 December 2021 -- BusyBox 1.35.0 (unstable)

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

    Sizes of busybox-1.34.0 and busybox-1.35.0 (with equivalent config, static uclibc build):

       text	   data	    bss	    dec	    hex	filename
    1042344	    908	  14336	1057588	 102334	busybox-1.34.0
    1044070	    908	  14328	1059306	 1029ea	busybox-1.35.0
    

    Changes since previous release:

    Aaro Koskinen:
          find: implement -samefile
    
    Alin Mr:
          ash.c: speedup ${s:} substring (no quotes)
    
    Andrej Valek:
          mktemp: add --tmpdir option
    
    Ariadne Conill:
          cpio: add support for --ignore-devno like GNU cpio
          cpio: add support for --renumber-inodes like GNU cpio
    
    Bernhard Reutner-Fischer:
          chrt: silence analyzer warning
          libarchive: remove duplicate forward declaration
    
    Daniel Thau:
          awk: fix printf %%
    
    Denys Vlasenko:
          config system: move some options closer to relevalnt tool subdirectories
          libbb.h: fix logic selecting incorrect BB_STRTOOFF for !LFS configs
          libbb/lineedit: do not escape %^=+}]:, escape ~? in tab completion
          libbb: clarify what bb_mode_string() generates
          libbb: code shrink bb_parse_mode
          libbb: code shrink in des encryption, in setup_salt()
          libbb: code shrink in main() and scripted_main()
          libbb: eliminate a static data array in bb_mode_string()
          libbb: make bb_lookup_port() abort on bad port names
          libbb: reuse "bad port" error message string
          shell/ash_test/run-all: unset locale/language variables
          shell: do not read user database for every prompt - only for those which need it
          shell: enable more tests which are passing now
          shell: fix arithmentic evaluation of "++7" and such (it is + + 7, i.e. 7)
          shell: fix parsing of $(( (v)++ + NUM ))
          shell: fix script's comm field if ENABLE_FEATURE_PREFER_APPLETS=y
          shell: use more compact SHELL_ASH / HUSH config defines. no code changes
          ash: LINENO starts from 0 in -c SCRIPT mode
          ash: eval: Check nflag in evaltree instead of cmdloop
          ash: eval: Do not cache value of eflag in evaltree
          ash: eval: Prevent recursive PS4 expansion
          ash: fix LINENO in functions
          ash: fix compile breakage in !ENABLE_ASH_ALIAS config
          ash: introduce bash-like $FUNCNAME
          ash: parser: Fix alias expansion after heredoc or newlines
          ash: parser: Fix handling of empty aliases
          ash: parser: Get rid of PEOA
          ash: parser: Save and restore heredoclist in expandstr
          ash: speed up ${x//\*/|} too, make it independent of ASH_OPTIMIZE_FOR_SIZE
          ash: support testsuite for !FEATURE_SUID_CONFIG_QUIET configs
          ash: use pgetc_eatbnl() in more places, take 3
          hush: fix set -n to act immediately, not just after run_list()
          hush: fix var_LINENO3.tests failure
          hush: speed up ${x//\*/|} too
          awk: code shrink: avoid duplicate NUL checks and strlen()
          awk: never return NULL from awk_printf()
          basename: implement -a and -s SUFFIX
          blkdiscard: accept -f (force) as no-op
          bzip: make ftab[] and crc32table[] member arrays of EState, do not allocate
          chat: hopefully fix infinite spinning on input EOF
          chmod: correctly report changed modes
          df: "support" -H as an alias of -h
          dhcprelay: change two more variables to unsigned
          find: code shrink -{m,a,c}{time,min}
          httpd: do not send Last-Modified / ETag / Content-Length for error pages
          httpd: fix config deps
          httpd: if range is not specified, correctly fall back to read/write loop
          httpd: fix compile failure if !FEATURE_HTTPD_RANGES
          mount: "mount -o rw ...." should not fall back to RO mount
          mount: with -w, do not fall back to read-only mounts
          ps: fix -o pid=PID,args interpreting entire "PID,args" as header
          resize: use tcgetattr(TCSAFLUSH) instead of TCSANOW, closes 13811
          shuf: in -i RANGE, accept numbers up to width of pointers
          shuf: make -i 99999999990-100000000000 work even on 32 bits
          shuf: with -i LOW-HIGH, do not allow any argv's
          tar,smemcap: commonalyze checksumming code for tar header
          tar: prevent malicious archives with enormous long name sizes OOMing the machine
          tls: "server cert is not RSA" is a fatal error
          tls: replace "26-bit" P256 code with 32-bit one
          tls: x25519: code shrink by factoring out common code
          udhcp: fix build breakage on MIPS
          udhcpc6: fix udhcp_find_option to actually find DHCP6 options
          udhcpd: check config file for bad IP ranges (start > end)
          uudecode: special-case "/dev/stdout", closes 14241
          xxd: fix -p -r, closes 13881
    
    Dominique Martinet:
          sed: do not ignore 'g' modifier when match starts with ^
    
    Ildar Shaimordanov:
          wget: allow end-users to customize Content-Type for --post-data and --post-file
    
    Ismael Luceno:
          less: Ignore -X
          config: find: Fix mtime/mmin description
          find: Unify time comparisons
          find: implement -amin, -atime, -cmin, and -ctime
    
    Martin Kaiser:
          Makefile.flags: use all cflags for crypt and rt checks
    
    Matthew Slowe:
          timeout: add support for "timeout -k KILL_SECS"
    
    Nicholas Niro:
          ip: added support for setting netns on devices
    
    Peter Korsgaard:
          libarchive/get_header_ar.c: fix extraction of archives from binutils in deterministic mode
    
    Roberto A. Foglietta:
          ash: add bash-like ERR trap and set -E
    
    Ron Yorston:
          libbb: better coreutils compatibility for realpath
          libbb: code shrink parse_datestr
          libbb: ensure mode_string is NUL terminated
          ash: fix ignoreeof option
          ash: let ignoreeof only affect interactive shells
          ash: regressions in process substitution
          ash: stopped jobs should only prevent exit from interactive shell
          awk: fix read beyond end of buffer
          cal: implement -m
          date,touch: allow timezone offsets in dates
          getopt: code shrink
          printf: allow 0 as a flag and allow multiple flags
          rev: correct output for long input lines
          shuf: speed-up when limited output is requested
          tar,smemcap: silence compiler warning
          vi: changes to handling of -c and EXINIT
          vi: code shrink print_literal()
          vi: don't right shift empty lines
          vi: further changes to colon addresses
          vi: searches in colon commands should wrap
          vi: support ~/.exrc
          wget: implement --post-file
    
    Sergey Ponomarev:
          httpd,telnetd: make default port configurable
    
    Sören Tempel:
          ed: align output of read/write commands with POSIX-1.2008
          ed: add support for -p command-line option as mandated by POSIX
          ed: fix current line number for file passed via the command-line
          ed: align output of read command with POSIX.1-2008
    
    Walter Lozano:
          cmp: add support for -n
    
    YU Jincheng:
          *: generalize "const trick"
          Make const ptr assign as function call in clang
    

  • 30 November 2021 -- BusyBox 1.33.2 (stable)

    BusyBox 1.33.2. (git)

    Bug fix release. 1.33.2 has fixes for hush and ash (parsing fixes) and unlzma (fix a case where we could read before beginning of buffer).

  • 30 September 2021 -- BusyBox 1.34.1 (stable)

    BusyBox 1.34.1. (git)

    Bug fix release. 1.34.1 has build fix for MIPS, fixes for ash (regression in process substitution), awk (printf fix), chat (fix infinite spinning on input EOF).

  • 19 August 2021 -- BusyBox 1.34.0 (unstable)

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

    Please note that awk had a number of changes. Report any breakage to the mailing list.

    Sizes of busybox-1.33.0 and busybox-1.34.0 (with equivalent config, static uclibc build):

       text	   data	    bss	    dec	    hex	filename
    1032724	    908	  14344	1047976	  ffda8	busybox-1.33.0
    1042344	    908	  14336	1057588	 102334	busybox-1.34.0
    

    Changes since previous release:

    Alex Samorukov:
          Do not add -lresolv on non-Linux systems
          Fix bb_setpgrp weapper on the FreeBSD
          Fix httpd compilation on the FreeBSD
          Fix klogd applet compilation on the FreeBSD
          Fix missing "crypt.h" compilation error on the FreeBSD
          Fix mknod compilation on the FreeBSD
          Fix ntpd compilcation on the FreeBSD
          Fix ping build on the FreeBSD
          Fix traceroute applet on the FreeBSD
          Fix mail compilation on the FreeBSD
          Fix for the FEATURE_UTMP on the FreeBSD
    
    Alexander Sack:
          httpd: cgi-bin support for DELETE, PUT, OPTIONS etc methods
    
    Alison Winters:
          vi: restore 0 offset after :set noXXX command
          vi: allow writing to another file if this one is readonly
    
    Andre Kalb:
          udhcpc: Add support to change default interface name
    
    Bernd Kuhls:
          update_passwd: fix context variable
    
    Chris Renshaw:
          gcc-version.sh: fix for "invalid number" message during Android NDK builds
    
    Denys Vlasenko:
          Makefile.flags: add a test for -lrt availability
          gcc-version.sh: Cygwin fix
          trylink: do not drop libs from CONFIG_EXTRA_LDLIBS
          platform.h: fix for Bionic >= 21 not having wait3()
          libbb.h: inline byteswaps
          libbb/procps: smaller global data for username/groupname cache
          libbb: correct the name of is_TERM_dumb()
          libbb: do not check closedir() in remove_file()
          libbb: fix '--help' handling in FEATURE_SH_NOFORK=y
          libbb: introduce and use xgettimeofday(), do not truncate 64-bit time_t in shells
          decompress_gunzip: simplify ERR_RET bit clearing
          e2fsprogs/*: remove ioctl calling obfuscation
          move iterate_on_dir() from e2fsprogs to libbb
          tls: implement secp256r1 elliptic curve (aka P256)
          tls: "server did not provide EC key" is fatal
          tls: get rid of constant-time add/sub operations
          tls: make constant basepoint9[32] array 8-byte aligned
          tls: make x25519 key generation code more similar to P256
          tls: reduce register pressure in i386 assembly (helps Android to compile)
          ascii: new applet
          crc32: new applet
          shells: do not allow bare "read" in non-bash compat configs
          ash: fix ${unset_var/pattern/repl}
          ash: make a strdup copy of $HISTFILE for line editing
          ash: match bash behavior for ${empty_var/*/repl}
          ash: parser: Fix VSLENGTH parsing with trailing garbage
          ash: placate -Werror=format-security
          ash: save Ron's patch from oblivion
          ash: speed up ${v//pattern/repl} if !ASH_OPTIMIZE_FOR_SIZE
          hush: beautify ^D handling to match ash / bash
          hush: fix bkslash+newline handling and number validation in ${NN} and ${#NN}
          hush: fix handling of "cmd && &"
          hush: fix handling of \^C and "^C"
          hush: implement $'str' bashism
          hush: make LINENO selectable without BASH-COMPAT
          hush: optimize ${var/pattern/repl} for trivial patterns
          awk: after preinc/dec, only allow variable, field ref, array ref, or another preinc/dec
          awk: allow empty functions with no arguments, disallow function redefinitions
          awk: disallow break/continue outside of loops
          awk: do not special-case "delete"
          awk: do not use a copy of g_progname for node->l.new_progname
          awk: document which hashes are used at what state (parse/execute)
          awk: enforce simple builtins' argument number
          awk: evaluate all, even superfluous function args
          awk: fix beavior of "exit" without parameter
          awk: fix corner case in awk_printf
          awk: fix detection of VAR=VAL arguments
          awk: fix parsing of expressions such as "v (a)"
          awk: fix printf "%-10c", 0
          awk: fix printf buffer overflow
          awk: fix use-after-free in "$BIGNUM1 $BIGGERNUM2" concat op
          awk: free unused parsing structures after parse is done
          awk: g_buf[] does not need a separate allocation
          awk: get rid of "move name one char back" trick in next_token()
          awk: in parsing, remove superfluous NEWLINE check; optimize builtin arg evaluation
          awk: make ltclass ("last token class") local to next_token()
          awk: more efficient -f FILE
          awk: move locals deeper into scopes where they are used, no logic changes
          awk: move match() code out-of-line
          awk: rand() could return 1.0, fix this - should be in [0,1)
          awk: remove custom pool allocator for temporary awk variables
          awk: remove redundant check
          awk: replace incorrect use of union in undefined function check (no code changes)
          awk: restore strdup elision optimization in assignment
          awk: rewrite "print" logic a bit to make it clearer
          awk: rollback_token() + chain_group() == chain_until_rbrace()
          awk: shuffle globals for smaller offsets
          awk: simplify parsing of function declaration
          awk: simplify tests for operation class
          awk: support %F %a %A in printf
          awk: tighten parsing - disallow extra semicolons
          awk: tighten rules in action parsing
          awk: unbreak "cmd" | getline
          awk: unbreak "printf('%c') can output NUL" testcase
          awk: undo TI_PRINT, it introduced a bug (print with any redirect acting as printf)
          awk: use static tmpvars in main and exit
          awk: use smaller regmatch_t arrays, they had 2 elements for no apparent reason
          awk: use static tmpvars instead of nvalloc(1)ed ones
          awk: when parsing TC_FUNCTION token, eat its opening '('
          awk: when parsing length(), simplify eating of LPAREN
          base32/64: accept -i "skip bad chars" option (currently in effect unconditionally)
          bc,dc: make BC_LINE_LENGTH/DC_LINE_LENGTH more compatible with GNU
          bc,dc: fix length(0) and length(0.000nnn) result
          bc: ^C on input line exits (unlike ^C during calculations, which does not)
          bc: code shrink: combine init() and copy() where we can
          bc: fix for mul overflow in scale calculation in a^b
          blockdev: support --get/setra
          chattr: fix "chattr =ae -R FILE"
          chattr: if IOC_FSGETXATTR fails, do not try IOC_FSSETXATTR
          chattr,lsattr: share stat error message
          chattr,lsattr: do not open e.g. device files unless asked directly; do not follow links
          chattr,lsattr: support -p
          lsattr: support more ext2 flags
          cksum: fix handling of read errors
          cp: implement -n
          cp: implement -t DIR
          cpio: fix "cpio -d -p A/B/C"
          df: POSIXLY_CORRECT sets _default_ scale, -m/-h overrides it
          df: support -t TYPE
          dnsd: check that we don't read past packet
          du: support -b "apparent size"
          echo: fix !ENABLE_FEATURE_FANCY_ECHO build
          echo: special case "echo --help": it should not show help text
          env: implement -0
          free: implement -h
          hexdump: fix error message
          httpd: avoid extra stat() calls for "GET /dirname/" case
          httpd: avoid one stat() call for "GET /dirname" case
          httpd: if no request was given at all, close the socket without generating error page
          httpd: move proxy check before URL duplication and request type check
          httpd: no need to strcpy() when we only need to copy one byte
          httpd: support HEAD requests even in !CGI config
          inetd: deinline machtime() - gcc gets it wrong
          ionice: implement -t
          login: implement LOGIN_TIMEOUT
          lsof: print fd# too
          man: fix segfault in "man 1"
          modprobe: when reading modules.builtin, use basenames of files from it
          mv: implement -t and -T
          nslookup: do not print "No answer" for NODATA replies, closes 13006
          ntpd: decrease INITIAL_SAMPLES from 4 to 3
          ntpd: increase loglevel to 3 for "poll:32s sockets:0 interval:64s" message
          ntpd: log responses to clients at log level 3
          ntpd: remove unused USING_INITIAL_FREQ_ESTIMATION code
          ntpd: tweak comments
          ntpd: without INITIAL_FREQ_ESTIMATION code, state variable is not needed too
          nuke: default to N
          pmap: fix column width, closes 13431
          resume: write offset in /sys/power/resume_offset
          runsv: code shrink: use single handler function for SIGTERM and SIGCHLD
          runsv: robustify signal handling - SIGTERM to child between vfork and exec could mess things up
          shred: implement -s SIZE
          shred: with -u, unlink file even if it is zero length
          shuf: simplify check that we have at least one FILE
          start-stop-daemon: explain -x + -a test
          svlogd: if processor's stdin can not be opened, do not try ad infinitum
          switch_root: code shrink - use iterate_on_dir()
          tail: do not lose the tail of old file if new file (-F) is detected
          tail: fix typo in variable name
          tar: simplify addition of --exclude=GLOB to the expansion of -X EXCLFILE
          taskset: disallow "taskset -p 0"
          taskset: fix for PID longer than 12 chars
          taskset: implement -a
          taskset: use iterate_on_dir()
          tc: fix for parsing of "dev IFACE" and printing of "class list"
          tcp/udpsvd: robustify SIGCHLD handling
          telnetd: give inetd.conf example in --help
          timeout,top,watch,ping: parse NN.N fractional duration in locales with other separators
          touch: fix -am
          touch: fix SEGV if !ENABLE_FEATURE_TOUCH_SUSV3
          touch: make FEATURE_TOUCH_NODEREF unconditional
          touch: switch to using utimensat() and futimens()
          touch: unbreak -h
          traceroute: fix compile error due to FreeBSD compat
          traceroute: fix option parsing
          udhcp: convert log1s() macro to function
          udhcp: shrink arpping()
          udhcpc: clarify bcast/unicast sends in logs, include server ID
          udhcpc: do not use inet_addr() to parse -r REQ_IP, it's deprecated
          udhcpc: get rid of client_data.fqdn field
          udhcpc: ignore zero-length DHCP options
          udhcpc: improve logs - show offer as it is received
          udhcpc: include client-id option in DECLINEs, even if it's a custom -x 61:HEX option
          udhcpc: remove deprecated -H/-h HOSTNAME options (9 years)
          udhcpc: rename server_addr to server_id, fix id comparison if it's not specified
          udhcpc: send client-id option in DHCPDECLINE
          udhcpc[6]: close listening socket more eagerly (e.g. across script runs)
          udhcpc[6]: do not pass xid around, keep it in client_data.xid
          udhcpc[6]: fold perform_renew() into its only caller
          udhcpc[6]: on SIGUSR1, do not go from rebind to renew state
          udhcpc[6]: remove superfluous "created raw socket" log message
          udhcpc[6]: untangle "timeout" and "remaining lease"; reduce min lease to 30 seconds
          udhcpc[6]: when renewing, send 1 packet (not 3), on failure go back to BOUND
          uniq: support -z
          unlzma: fix a case where we could read before beginning of buffer
          unzip: add -t
          unzip: fix for .zip archives with >4GB file
          vi: allow regular expressions in ':s' commands
          vi: move undo_queue_state in globals to other byte-sized members
          xxd: do not try reading from closed stdin when non-existent file is given
          xxd: implement -i "C style output"
          xxd: implement -o DISPLAYOFFSET
    
    Eicke Herbertz:
          shell: also do word splitting when -d DELIM is used
    
    Harald van Dijk:
          tar: exclude files before updating hardlink info list
    
    Jeremy Lin:
          wget: allow HTTP 307/308 redirects
    
    Ján Sáreník:
          run-parts: permit dot later in file name
    
    Khem Raj:
          gen_build_files: Use C locale when calling sed on globbed files
    
    Mario Abajo:
          login: permit change expired password wit PAM
    
    Martin Kaiser:
          Makefile.flags: fix the OS detection for libresolv
    
    Maxim Storchak:
          httpd: fix offset for sendfile
    
    Natanael Copa:
          echo: do not assume that free() leaves errno unmodified
          lineedit: fix tab completion with equal sign
    
    Paul Spooren:
          nslookup: mention QUERY_TYPE SRV
          build system: use SOURCE_DATE_EPOCH for timestamp if available
    
    Rafał Miłecki:
          dd: support iflag=count_bytes
    
    Rasmus Villemoes:
          watchdog: make open-write-close-open functionality a config knob
    
    Rob Landley:
          cut: add toybox-compatible options -O OUTSEP, -D, -F LIST
    
    Ron Yorston:
          bloat-o-meter: avoid double counting
          build system: avoid build failure during bisection
          libbb: code shrink and speed up find_applet_by_name()
          libbb: code shrink and speed up index_in_strings()
          libbb: code shrink fgets_str
          libbb: introduce and use fputs_stdout
          lineedit: support empty PATH entries in tab completion
          ash: add process substitution in bash-compatibility mode
          awk: allow printf('%c') to output NUL, closes 13486
          cp,mv: fix -t DIR option
          cp: fix build failure with long options disabled
          cryptpw: typo in usage message
          diff: code shrink
          nl: ensure '-b n' option displays file content
          uniq: really support -z
          vi: ':r' should insert text after current line
          vi: 'G'/'M' commands move to first visible character
          vi: 'ZZ' should warn if there are more files to edit
          vi: :wq/:x should warn if there are more files to edit
          vi: add expandtab option
          vi: adjust conditional compilation of modifying_cmds
          vi: allow 'gg' to specify a range
          vi: allow 'r' command to be aborted, repeated
          vi: allow backward search to specify line address
          vi: allow ctrl-D to reduce indentation
          vi: allow delimiter in ':s' to be escaped
          vi: allow line addresses to have an offset
          vi: allow motion count for change/delete/yank/shift
          vi: allow repetition count for paragraph motion
          vi: allow the '.' command to have a repetition count
          vi: changes to line addresses for colon commands
          vi: changes to option handling
          vi: code shrink colon line addresses
          vi: code shrink motion by paragraph
          vi: code shrink search commands
          vi: correct autoindent for 'O' command
          vi: correctly record deleted characters
          vi: cursor positioning after whole-line 'y'
          vi: deal with invalid movements in shift commands
          vi: detect and warn about invalid line addresses
          vi: don't move cursor when yanking whole lines
          vi: don't overwrite existing file
          vi: expand '%' and '#' in colon commands
          vi: fix backward search with GNU regex
          vi: fix buffer overrun; code shrink
          vi: fix empty line range regression
          vi: fix range selection by forward character motion
          vi: fix regex search compilation error
          vi: fix word operations across line boundaries
          vi: improve handling of anchored searches
          vi: improve motion by paragraph
          vi: improve operations involving paragraph movement
          vi: improvements to ':read' command
          vi: improvements to character search within line
          vi: improvements to range selection
          vi: improvements to reporting of changes
          vi: improvements to undo
          vi: initialise tabstop once not for each file
          vi: issue a warning on failure to find a character
          vi: keep autoindent if line isn't empty
          vi: make autoindent respect expandtab setting
          vi: make buffer handling more vi-like
          vi: make context marks more like vi
          vi: make cursor positioning more vi compatible
          vi: make de-indentation with ctrl-D more like vim
          vi: make put commands more like vi
          vi: make the substitute command more like vi
          vi: more fixes to range selection by word
          vi: position cursor on last column of tab
          vi: preserve state when switching file
          vi: reject change command when motion fails
          vi: remember cursor column during vertical motion
          vi: remove autoindent from otherwise empty lines
          vi: reset command count when specifying '0' range
          vi: saving unnamed file in readonly mode
          vi: stored search pattern applies to ':s'
          vi: support more commands for range selection
          vi: up/down motion beyond end of file should fail
          vi: use basic regular expressions for search
    
    Russell Senior:
          udhcpc: ignore zero-length DHCP options
    
    S Harris:
          cpio: fix sscanf on unterminated buffer
          vi: fix read outside of text buffer during insert
    
    Samuel Sapalski:
          decompress_gunzip: Fix DoS if gzip is corrupt
    
    Sergey Ponomarev:
          wget: new option FEATURE_WGET_FTP to enable/disable FTP
          httpd_post_upload.cgi: use mktemp to avoid $RANDOM
    
    Seth David Schoen:
          udhcpd: don't hardcode treating .0 and .255 specially
    
    Sören Tempel:
          ls: don't output any colors with TERM=dumb
    
    Xabier Oneca:
          touch: add SUSv3 options -a and -m
          touch: fix atime set from reference file
          touch: remove unneeded GETOPT32 defines
          touch: prevent usage of -r and -t at once
    

  • 3 May 2021 -- BusyBox 1.33.1 (stable)

    BusyBox 1.33.1. (git)

    Bug fix release. 1.33.1 has fixes for httpd (sendfile now works), ash (HISTFILE corruption, unset variable pattern expansion), passwd (SELinux fix), traceroute (option parsing fix), gunzip (fix for corrupted archive).

  • 1 January 2021 -- BusyBox 1.32.1 (stable)

    BusyBox 1.32.1. (git)

    Bug fix release. 1.32.1 fixes a case where in ash, "wait" never finishes.

  • 29 December 2020 -- BusyBox 1.33.0 (unstable)

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

    Sizes of busybox-1.32.0 and busybox-1.33.0 (with equivalent config, static uclibc build):

       text	   data	    bss	    dec	    hex	filename
    1020219	    481	   7460	1028160	  fb040	busybox-1.32.0
    1021980	    481	   7456	1029917	  fb71d	busybox-1.33.0
    

    Changes since previous release:

    Andy Shevchenko
          modprobe: add support for modprobe.blacklist=module1,module2,...
    
    Audun-Marius Gangstø:
          lineedit: fix unicode characters in prompt
    
    Christian Eggers:
          shell: fix "read -d ''" behavior
          ip: add support for "noprefixroute" option
          ip address: add support for "valid_lft" and "preferred_lft" options
          chrt: support for musl C library
    
    Cristian Ionescu-Idbohrn:
          fix warning: label 'out1' defined but not used
    
    Denys Vlasenko:
          avoid using strtok - eliminates use of hidden global variable
          use write_str() functions where appropriate
          fixes for Hurd build
          move ADJTIME_PATH define to header files
          examples: remove /sbin/ prefixes, system should be configured with $PATH to find utilities
          build system: combat gcc zealotry in data alignment
          build system: make -static-libgcc selectable in config
          libbb: add and use infrastructure for fixed page size optimization
          libbb: bb_do_delay(3) -> pause_after_failed_login(), and stop looping there
          libbb: change decode_base32/64 API to return the end of _dst_, not _src_
          libbb: create and use mmap() helpers
          libbb: do not compile selinux_or_die() if !SELINUX
          libbb: do not open-code __errno_location() call
          libbb: exec_login_shell() - new function
          libbb: extend "errno pointer" trick to other than __GLIBC__
          libbb: fold common64_hash() into its only user
          libbb: in @SECONDS date format, use 64-bit time if libc allows
          libbb: introduce and use msleep()
          libbb: introduce and use sleep1()
          libbb: introduce and use xsettimeofday()
          libbb: make msleep() result in only one syscall instead of looping
          libbb: make pw_encrypt() die if supplied salt is bad (e.g. emply)
          libbb: rename run_shell() to exec_shell()
          libbb: shrink last_char_is(), no longer allow NULL string argument
          libbb: shrink recursive_action() by reducing memory pressure
          libbb: smaller and faster decode_base64()
          libbb: trim base32/64 tables
          unicode: fix handling of short 1-4 char tables
          unicode: relax array alignment for tables
          lineedit: disable completion and fancy prompts if no shells are selected
          lineedit: remove ->path_lookup if ash is not configured
          lineedit: use strncmp instead of is_prefixed_with (we know the length)
          networking: support ftp PASV responses not ending with ')'
          ash: clear ungetc counter on syntax errors
          ash: jobs: Fix infinite loop in waitproc
          ash: jobs: Fix waitcmd busy loop
          ash: make interactive ^C break out of PS2 mode
          ash: reset SIGHUP earlier: allows HUP traps in .profile, closes 13371
          hush: NOMMU fix for hush-psubst/tick6.tests
          hush: deal with FIXMEs for corner cases in parameter expansion
          hush: do not print killing signal name in `cmd_which_dies_on_signal`
          hush: fix -c SCRIPT handling
          hush: fix PS1 prompth in !EDITING config
          hush: fix ^C in INTERACTIVE, !EDITING config
          hush: fix this case: echo "SCRIPT" | hush
          hush: if !EDITING, do not regenerate prompt for every input char
          hush: if login shell, also source ~/.profile
          hush: output bash-compat killing signal names
          hush: remove one redundant getpid() on every startup
          shell: better support of [[ ]] bashism
          shell: for signal exitcode, use 128 | sig, not 128 + sig - MIPS has signal 128
          shell: remove FAST_FUNC from a static function
          shell: a fix for systems without RLIMIT_NICE
          awk: FS regex matches only non-empty separators (gawk compat)
          awk: add a test that $NF is empty
          awk: fix dodgy multi-char separators splitting logic
          base32: new applet
          base32/64: decode in-place
          base32/64: implement -w COL
          bc: do not allocate line editing state until needed
          date: for -uR and -uIh, timezone still has to be shown as +hhmm, not as abbreviation
          date: remove non-standard special-casing of date '+%f'
          date: support -Ins, more compatible timezone display in -I
          dd: support for O_DIRECT i/o
          factor: 30% faster trial division (better sieve)
          factor: detect squares
          grep: for -L, exitcode 0 means files *without* matches were found, closes 13151
          hexdump: fix duplicate block comparison
          hwclock: fix musl breakage of settimeofday(tz)
          login: log to syslog every bad password, not only 3rd
          mail: commonalize send_r_n()
          mail: deobfuscate launch_helper()
          mail: launch_helper(): flush stdio before vfork, set G.helper_pid only in parent
          mail: move "opts" from globals
          man: implement SECTION parameters
          mdev: clear LOGMODE_STDIO only directly before daemonizing
          mount: add -o nostrictatime and -o [no]lazytime
          mount: implement -o nosymfollow, remove bogus -o union
          mount: do not guess bind mounts as NFS
          mount: do not guess mount as NFS if "hostname:" contains slashes
          mount: fix a race when a free loop device is snatched under us by another mount
          mount: fix incorrect "success" exitcode if loop device setup fails
          nsenter: stop option parsing on 1st non-option
          ntpd: allow non-root to run it (e.g. with -w option)
          ntpd: fix refid reported in server mode, closes 13056
          ntpd: fix the case where two replies received at once and first one causes a step
          ping: fix -wN to not think that one packet is always lost
          tar: fix fallout of last_char_is(NULL) no longer being allowed
          traceroute: avoid collecting target local address if !VERBOSE
          traceroute: commonalize verbose printing
          traceroute: don't set SO_DONTROUTE on recv socket, it only affects send
          traceroute: even with -v, don't show other ping processes replies
          traceroute: fix traceroute6 -I (icmp mode)
          traceroute: make "ipv4 or ipv6?" cheaper to find out
          traceroute: set IP_PKTINFO to see correct local IP of received pkt (fixes -v display)
          traceroute: simpler hexdump()
          traceroute: untangle main loop
          udhcp: remove struct packing attribute, eliminates gcc-9.x warning
          udhcpc6: code shrink - sending functions do not need ifindex parameter
          uevent: increase netlink buffer sizes
          uevent: make it survive ENOBUFS
          uudecode: fix possible signed char bug
          volume_id: improve struct layout (smaller offesets, smaller insns on x86)
          wget: do not ftruncate if -O- is used, closes 13351
          xargs: fix -I SUBSTR behaviour
          xxd: fix printing of trailing spaces
          xxd: compat: move hexdump -R functionality to xxd -r
    
    Eddie James:
          hwclock: fix settimeofday for glibc v2.31+
    
    Gray Wolf:
          crontab: fix -e with editors saving using renaming strategy
    
    Jan Klötzke:
          libbb: set netlink socket revbuf size before binding
          mdev: increase netlink buffer sizes
          mdev: move daemon setup to dedicated function
          mdev: re-initialize if uevent messages were lost
          mdev: add syslog logging mode
          mdev: add -v to increase log verbosity
    
    Joachim Nilsson:
          login: update UTMP before forking
          syslogd: delay PID file creation until syslogd is ready
          archival: avoid std namespace for local includes
    
    Lauri Kasanen:
          mount: surround syslog.h with the config check
    
    Martin Lewis:
          udhcp: add option scanner
          udhcpc: fix a TODO in fill_envp using option scanner
          procps: code shrink
          compare_string_array: code shrink
          domain_codec: optimize dname_dec and convert_dname
          udhcpc: add support for long options
    
    Michal Kazior:
          udhcp: bind to device even for ucast packets
    
    Norbert Lange:
          nc_bloaty: support udp broadcast ports
          dpkg: prevent important directories from being removed
          dhcpd: remove hardcoded pidfile path
          acpid: only display -p if supported in usage
          util-linux: support erofs filesystem
    
    Ron Yorston:
          build system: drop PLATFORM_LINUX
          lineedit: omit directories when tab-completing from PATH
          lineedit: match local directories when searching PATH
    
    Rui Salvaterra:
          ip rule: add support for fwmark/fwmask for policy routing
    
    Scott Court:
          wget: fix openssl options for cert verification
    
    Sergey Ponomarev:
          httpd_indexcgi.c: minimize style CSS
          httpd_indexcgi.c: use CSS for odd/even rows
          httpd: update to HTTP/1.1
          httpd: don't add Date header to response
          httpd: don't add Last-Modified header to response
          httpd: support caching via ETag header
          httpd: make Deny/Allow by IP config support optional
    
    Steffen Trumtrar:
          mount: support the sizelimit and offset option for loop devices
    
    Xabier Oneca:
          httpd: code shrink
          mkdtemp: proper error detection on mktemp
    

  • 26 June 2020 -- BusyBox 1.32.0 (unstable)

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

    Sizes of busybox-1.31.1 and busybox-1.32.0 (with equivalent config, static uclibc build):

       text	   data	    bss	    dec	    hex	filename
    1011750	    483	   7468	1019701	  f8f35	busybox-1.31.1
    1015340	    482	   7460	1023282	  f9d32	busybox-1.32.0
    

    Changes since previous release:

    Aaro Koskinen:
          find: implement -empty
    
    Alistair Francis (4):
          date: Use 64 prefix syscall if we have to
          time: Use 64 prefix syscall if we have to
          runsv: Use 64 prefix syscall if we have to
          Remove stime() function calls
    
    Biswapriyo Nath:
          Makefile.flags: restrict Wno-constant-logical-operand and Wno-string-plus-int options for clang
    
    Brian Foley (3):
          dc: execute shouldn't pop if stack head is not a string
          dc: Fix segfault when executing strings generated using asciify
          dc: Parse error & fix out of bounds read in xc_program_printString
    
    Daniel Edgecumbe (3):
          gzip: default level with ENABLE_FEATURE_GZIP_LEVELS should be 6
          gzip: set compression flags correctly as per standard
          gzip: set default compression level to 6 when CONFIG_FEATURE_GZIP_LEVELS=n
    
    David Demelier:
          wget: increase redirections limit
    
    Denys Vlasenko:
          build system: suppress some clang-9 warnings
          examples/udhcp/simple.script: up interface on deconfig event
          libbb: remove syscall wrappers around clock_gettime, closes 12091
          libbb: clang/llvm 9 fix - do not eliminate a store to a fake "const"
          libbb: deal with "declaration of 'link' shadows a global declaration" warning
          libbb: include <crypt.h> only if necessary
          ash,hush: add comment about masked SIGCHLD, handle SIG_IGNed SIGHUP as in bash
          ash,hush: testcase for "exit" without arguments in a trap
          ash: Expand here-documents in the current shell environment
          ash: Return without arguments in a trap should use status outside traps
          ash: [BUILTIN] Exit without arguments in a trap should use status outside traps
          ash: builtin: Mark more regular built-ins
          ash: eval: Add assignment built-in support again
          ash: eval: Always set localvar_stop
          ash: eval: Fail immediately with redirections errors for simple command
          ash: eval: Only restore exit status on exit/return
          ash: eval: Reap zombies after built-in commands and functions
          ash: eval: Replace with listsetvar with mklocal/setvareq
          ash: eval: Use the correct expansion mode for fd redirection
          ash: exec: Do not allocate stack string in padvance
          ash: exec: Never rehash regular built-ins
          ash: exec: Stricter pathopt parsing
          ash: expand: Do not reprocess data when expanding words
          ash: expand: Ensure result is escaped in cvtnum
          ash: expand: Fix multiple issues with EXP_DISCARD in evalvar
          ash: expand: Fix skipping of command substitution when trimming in evalvar
          ash: expand: Fix trailing newlines processing in backquote expanding
          ash: expand: Merge syntax/quotes in memtodest with flags
          ash: expand: Use HOME in tilde expansion when it is empty
          ash: fix BASE###nn bashism for bases 36..64
          ash: fix BASE###nn bashism to accept letter 'digits' for bases > 9
          ash: fix set -o to not show "nameless" options
          ash: jobs - Do not block when waiting on SIGCHLD
          ash: jobs: Only clear gotsigchld when waiting for everything
          ash: jobs: Replace some uses of fmtstr with stpcpy/stpncpy
          ash: main: Only set savestatus in exitcmd
          ash: main: Print \n upon EOF (CTRL-D) when run interactively
          ash: memalloc: Add growstackto helper
          ash: memalloc: Avoid looping in growstackto
          ash: mkinit: Split reset into exitreset and reset
          ash: output: Fix fmtstr return value
          ash: parser: Do not push token back before parseheredoc
          ash: parser: Fix incorrect eating of backslash newlines
          ash: parser: Fix old-style command substitution here-document crash
          ash: parser: Only accept single-digit parameter expansion outside of braces
          ash: parser: Save/restore here-documents in command substitution
          ash: rename some function parameters to match dash
          ash: rename stack_nputstr() back to stnputs() to match dash
          ash: shell: Fix clang warnings about "string plus integer"
          ash: use pgetc_eatbnl() in more places, take 2
          hush: fix "set -o INVALID" affecting -e flag state
          hush: fix negative_arith.tests: glob-protect dash in "$((arith))"
          hush: fix preprocessor directives indentation
          hush: implement "return NUM in trap sets $? after trap"
          hush: make "exit" in trap use pre-trap exitcode
          hush: make "exit" in trap use pre-trap exitcode - fix for nested trap
          hush: restore redirected stdin
          awk: disallow "str"++, closes bug 12981
          awk: fix more "length" cases, closes 12486
          bc: fix comparison bug, closes 12336
          brctl: fold show_bridge_ports into its caller
          dpkg-deb: work around bogus error message when working with XZ compressed packages
          fdisk: add HFS / HFS+ partition type
          fdisk: avoid overflow in "mega/gigabytes" calculation, code shrink
          gunzip: code shrink by using int-, not short-sized struct member
          gunzip: fix incorrect decoding of "fixed" inflate blocks
          gzip: -d with zcat enabled but gunzip disabled was misbehaving
          init: if tcgetattr() fails, don't even try to tcsetattr()
          init: improve handling of signals racing with each other
          nmeter: add %T (zero-based timestamp) format
          nmeter: do not clamp down %Nc to minimum of 10 (think nmeter "%`nproc`c")
          nologin: make it possible to build it as single applet
          ntpd: abort if argvs are (unexpectedly) given
          ntpd: abs(tmx.offset) was truncating a "long" typed value
          ntpd: add comment about mode6, no code changes
          ntpd: commonalize message strings
          ntpd: decrease MIN_FREQHOLD by 2, increase "penalty" for largish offset x2
          pidof: support "pidof /path/to/binary" case
          readlink,realpath: fix a case with a symplink, closes 11021
          stat: print nanosecond times, fix printing of empty lines
          sysctl: do report EACCES errors on write
          tar: change -a from meaning "lzma" to mean "autodetect by extension"
          taskset: add support for taking/printing CPU list (-c option)
          taskset: implement stride argument
          taskset: tighten the check for stride values
          tc: array address is never NULL
          tee: do not intercept SIGPIPE
          telnet: add disabled code to emit EC and IP
          telnet: fix uninitialized variable bug
          tftp: on download, open local file only when first bit of data arrived
          tftpd: show requested file name in open error message
          top: do not use previous collected data wheh "h" toggles threads display
          udhcp: comment out unused domain compression code
          udhcpc6: add ELAPSED_TIME option to outgoing packets
          udhcpc6: s/iphdr/ip6_hdr/
          udhcpd: mangle hostnames starting with dash ("-option")
          whois: limit total length of response to 32+2 kb
    
    Dimitri John Ledkov:
          wget: implement TLS verification with ENABLE_FEATURE_WGET_OPENSSL
    
    Eivind Versvik:
          udhcpc6: support stateless DHCPv6
    
    Gray Wolf:
          grep: Fix -f FILE when FILE is empty and -x provided
    
    James Byrne (2):
          libbb: reduce the overhead of single parameter bb_error_msg() calls
          config: PID_FILE_PATH required for FEATURE_CROND_SPECIAL_TIMES
    
    Jean-Philippe Brucker:
          build system: remove KBUILD_STR()
    
    Jo-Philipp Wich (2):
          nslookup: handle replies without RRs
          nslookup: implement support for SRV records
    
    Kaarle Ritvanen:
          ln: --no-target-directory implies --no-dereference
    
    Kang-Che Sung:
          bc: Add 'U' suffix in UINT_MAX preprocessor check
    
    Lauri Kasanen:
          unzip: -d should create the dir
    
    Liu, Shuang (ADITG/ESM):
          chgrp: correct the usage for non-desktop chgrp calls
    
    Lukas Rusak:
          free: include SReclaimable in cached value
    
    Mark Edgar:
          unexpand: correct behavior for --first-only --tabs=4
    
    Martin Lewis (8):
          libbb: Converted safe_read to safe_write format
          replace: count_strstr - Handle an edge case where sub is empty
          xstrndup: Use strndup instead of implementing it
          brctl: add support for showmacs command
          brctl: add support for showstp command
          dhcpc.c: Added support for relay server parameter
          dhcpc: code shrink in good_hostname
          dhcpc: refactor xmalloc_optname_optval to shrink binary size
    
    Michal Kazior:
          udhcpc: fix segmentation fault on empty bin opt
    
    Peter Korsgaard:
          syslogd: add config option to include milliseconds in timestamps
    
    Rolf Eike Beer:
          examples/udhcp/simple.script: print the filename actually changed
    
    Ron Yorston (13):
          mim: new applet: run scripts from a specification file
          ash,hush: allow builtins to be tab-completed, closes 7532
          ash,hush: drop pointer check before calls to show_history
          ash: fix build failure when command built-in is disabled
          ash: only catch unexpected exceptions in PS1 expansion
          ash: improve expandstr()
          ash: return exit status of nofork applets (again)
          ash: move TRACE statement in evalcommand()
          httpd: permit non-default home directory with NOMMU enabled
          httpd: allow '-h' to work when daemonized with NOMMU enabled
          vi: fixes to string search in colon commands, closes 10321
          xargs: fix handling of quoted arguments, closes 11441
          xargs: restore correct behaviour of -n option
    
    Stefan Agner:
          examples/udhcp/simple.script: fix IPv6 support when using udhcpc
    
    Sören Tempel (2):
          grep: add proper support for pattern_list
          deluser: check if specified home is a directory before removing it
    
    Tomas Paukrt:
          route: fix output of "route -n -A inet6"
    
    Tomi Leppanen:
          grep: add -R
    
    Uwe Glaeser:
          udhcpc6: use correct multicast MAC
    

  • 25 October 2019 -- BusyBox 1.31.1 (stable)

    BusyBox 1.31.1. (git)

    Bug fix release. 1.31.1 has fixes for dc, ash (PS1 expansion fix), hush, dpkg-deb, telnet and wget.

  • 10 June 2019 -- BusyBox 1.31.0 (unstable)

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

    Sizes of busybox-1.30.1 and busybox-1.31.0 (with equivalent config, static uclibc build):

       text	   data	    bss	    dec	    hex	filename
    1008478	    487	   7436	1016401	  f8251	busybox-1.30.1
    1008392	    482	   7428	1016302	  f81ee	busybox-1.31.0

    Changes since previous release:

    Aaro Koskinen:
          sysctl: fix compatibility with procps sysctl
    
    Aitor Esteve Alvarado:
          start-stop-daemon: change priority before dropping privileges
    
    Alexander Vickberg (3):
          httpd: when sending gzipped content use content-length header
          httpd: pass authorization header to CGI if not Basic
          start-stop-daemon: fix -x is not required for -K
    
    Andrey Mazo:
          udhcpc: don't exit after backgrounding on -n -b
    
    Antoine Girard-Vallée:
          udhcp: add 100 and 101 dhcp options for ipv4
    
    Ari Sundholm (2):
          grep: fix -x -v with certain pattern orders
          grep: short-circuit -v to bail out on first match
    
    Bernhard Reutner-Fischer (5):
          checkstack.pl: fix arch autodetection
          checkstack: pull from upstream
          checkstack.pl: tweak bfin re
          ip link: Fix vlan proto, closes 8261 and 11638
          ipaddress: remove unused variable no_link
    
    Brian Foley (4):
          awk: Guard pointer chasing when parsing ternary expressions.
          awk: Syntax error if delete isn't given an arg.
          awk: Fix overly permissive func arg list parsing
          sed: Fix backslash parsing for 'w' command arg
    
    Chen Qi:
          dc.tests: fix two test case to also depend on DC_BIG
    
    Danijel Tasov:
          telnet: provide feedback after successful connect
    
    Denys Vlasenko:
          make_single_applets.sh: fix for BSS trick
          examples/var_service: use "exec sleep 5" instead of "{ sleep 5; exit; }"
          dhcp service example: cater for servers not giving subnet and/or router
          service examples: do not respawn supplicant too often
          service examples: if iface do not exist, retry upping it
          service examples: ifplugd -M to prevents frequent respawning
          libarchive: treat one "FIXME: avoid seek"
          libbb: move netlink socket binding to the utility function
          libbb: find_mount_point() too eager to stat mounted devices
          lineedit: fix SEGV in fdisk, hexedit, ed, closes 11661
          ash,hush: implement optional "BASE#nnnn" numeric literals
          ash,hush: move all definitions of strto_arith_t() together
          ash,hush: add tests for backslashes in export VAR=VAL
          ash,hush: bash compat for ulimit: -w => -x, -p => -u
          ash,hush: bash compat for ulimit: reorder to match
          ash,hush: fix ulimit to be more bash-compat, closes 11791
          ash,hush: show 'c' in $- if run in "sh -c CMD"
          ash,hush: ulimit: add -i RLIMIT_SIGPENDING, -q RLIMIT_MSGQUEUE
          ash: add "wait -n" bashism
          ash: allocate line editing structure only if needed
          hush: add "wait -n" bashism
          hush: allocate line edit buffer only for interactive shell
          hush: fix "export PS1=xyz" and "local PS1=xyz" messing up prompt
          hush: fix "wait -n" to wait for a _job_, not a _process_
          hush: fix quoted "${notexist-}" expansion to not disappear
          hush: handle LINENO the same way as RANDOM: variable is "ephemeral"
          hush: implement $-, set default PATH if it is not set on startup
          hush: remove code to track PS1/2 values dynamically - it's too much work
          hush: remove test for "echo ${-}" errorring out - now it works
          hush: set default PS1/2 only if we are interactive
          hush: show 's' in $-
          adduser: fix a bug of getpwnam() overwriting shell name, closes 8586
          awk: fix testsuite
          bc: disallow invalid syntax like "{ print 1 print 2 }"
          bc: fix "...; return}" to work, disallow "return ()"
          bc: implement pass-by-reference code from upstream
          bc: in xc_read_line(), check ^C on NUL input bytes too
          bc: make error line number also size_t, like everything else
          bc: remove "empty expression" check/message, parsing fails in these cases anyway
          bc: remove extra div/0 test, remove test for string function parameter
          bc: shorten "limits" output
          bc: speed up string printing, fix print ""
          bc: support ibase up to 36 (GNU compat)
          bc: support void functions (GNU compat)
          bc: upstream fixes
          dc: fix returning of string
          dc: fix '?'
          dc: make 4 % 0 emit error messgaes and set result to 0
          brctl: convert all commands to work via /sys
          brctl: simplify str_to_jiffies()
          bunzip2: the correct condition is "n < groupCount", not "n <= groupCount". Closes 11896
          chrt: do not segfault if policy number is unknown
          chrt: fix for SCHED_RESET_ON_FORK bit
          dd: fix handling of short result of full_write(), closes 11711
          expand,unexpand: drop broken test, add FIXME comment
          expand: add commented-out code to handle NULs
          find: handle leading -- argument
          fsync,sync: merge into one source module
          httpd: add js to built in MIME types list
          httpd: add missing {}
          httpd: check denied IPs even before reading 1st query line
          httpd: do disable header reading timeout even if proxying
          httpd: do not decode URL and headers if proxying - send all verbatim
          httpd: do not percent-decode URI if proxying
          httpd: do not set alarm() timeout if we read cached header
          httpd: extract query string only after proxying check
          httpd: fix handling of EOF in get_line()
          httpd: fix proxy headers passing - full_write() instead of write()
          httpd: if remote IP is denied, send FORBIDDEN reply earlier
          httpd: make rmt_ip variable local
          httpd: put all headers into environment as HTTP_UPPERCASED_HEADER=val
          httpd: require "HTTP/xyz" at the end of request line
          httpd: use full size of iobuf[] when piping CGI data
          ifupdown: close memory leak
          ip link: fix mismatched enums in vlan_parse_opt(), closes 11631
          ip: use rtnl_send_check() on flush commands, closes 6962
          login: close PAM session on errors as well, not only on success
          login: remove extra IF(), no code changes
          losetup: implement -c
          lpd: avoid SEGVing on immediate EOF from peer
          ls: fix SEGV when --color is used and ENABLE_LS_COLOR=n
          man: add "/usr/share/man" as another default MANPATH, fix col override
          mount,losetup: use /dev/loop-control is it exists
          nslookup: return exitcode 1 on resolution errors
          ntpd: do not create pid file if not backgrounded
          ntpd: increase SLEW_THRESHOLD from 0.125 to 0.5
          passwd: do not set 0 as date of last password change, closes 11951
          pmap: make 32-bit version work better on 64-bit kernels
          ps: ensure fields are separated by at least one space, closes 11826
          sed: fix /regex/,+N match triggering only once, closes 11871
          sleep: support "inf"
          start-stop-daemon: create pidfile before parent exits, closes 8596
          start-stop-daemon: do try to close fds > 2
          start-stop-daemon: fix "both -x and -a" case: -a does override argv[0]
          sysctl: allow setting empty values
          sysctl: avoid stat() on every item if in -w mode
          sysctl: do slash/dot conversions only on name, not value part
          sysctl: on EIO ("sysctl net.ipv6.conf.all.stable_secret") set nonzero exitcode
          telnet: speed up processing of network input
          telnetd: better AYT handling
          telnetd: fix bad interaction with vhangup() from login
          tftp: optional tftp-hpa compat
          tls: add comment about dl.fedoraproject.org needing secp256r1 ECC curve
          tls: pstm code shrink
          ts: new applet
          udhcp: downgrade "got raw socket fd" message to log3, make log2 default max
          udhcp: get rid of last global data
          udhcp: get rid of static data signal_pipe
          udhcp: rename client_config to client_data, server_config to server_data
          udhcpc6: add a few comments, no code changes.
          udhcpc6: make it enabled in defconfig
          udhcpc: when decoding DHCP_SUBNET, ensure it is 4 bytes long
          udhcpd: code shrink - do not fetch requested IP twice
          udhcpd: fix printing of static leases
          udhcpd: support per-client hostnames in static leases
          vi: code shrink, proper printf formatting for strlen()
          vi: fix ^Z not always working as intended
          vi: install SIGINT handler _after_ restart setjmp is initialized
          vi: rearrange functions, no logic changes
          vi: rename save_argc -> cmdline_filecnt
          vi: restore capability to remember insertion cmds for "."
          vi: revert change in how "end of file list" is detected - fixes 'q' in bare "vi"
          vi: use vsnprintf to format status line
          watch: support fractional -n SEC
          wget: detect when the length of received file is less than advertised
          wget: remove empty if/endif preprocessor directive pair
          xargs: mention -E STR in --help
    
    Einar Jón:
          passwd: initialize pointers correctly
    
    Jack O'Sullivan:
          losetup: Add partition scanning option
    
    James Byrne:
          Optionally re-introduce bb_info_msg()
    
    Jan Klötzke (3):
          mdev: move action processing into separate functions
          mdev: use option parser helper
          mdev: add support to run as daemon
    
    John L. Hammond:
          ln: correct 'ln -T' usage message
    
    Kaarle Ritvanen:
          ip: print dadfailed flag
    
    Khem Raj:
          networking: cc is not a register
    
    Mark Marshall:
          capability: fix string comparison in cap_name_to_number
    
    Martijn Dekker:
          ls: make -i compatible with coreutils: don't follow symlink by default
    
    Martin Lewis (5):
          wget: add -o flag
          wget: notify on download begin and end
          wget: don't notify on download begin and end if quiet
          telnetd: Added support for AYT IAC command.
          udhcpc6: Fixed aliasing compilation error
    
    Nicolas Hüppelshäuser:
          scripts/echo.c: resolve implicit declaration of function 'dup2'
    
    Nikolaus Voss (2):
          i2ctransfer: new applet
          i2c_tools.c: i2ctransfer
    
    Rolf Eike Beer:
          examples/udhcp/simple.script: fix resolv.conf update if it is a dangling symlink
    
    Ron Yorston (18):
          libbb: mark scripted_main() as externally visible
          ash: eval: avoid leaking memory associated with redirections. Closes 7748
          ash: distinguish 'wait -n' from other bashisms
          ash: an unset dynamic variable should not be dynamic
          ash: add bash-compatible EPOCH variables
          ash: prevent error in backquotes in PS1 from exiting shell
          ash: catch error in arithmetic expansion in PS1
          hush: add bash-compatible EPOCH variables
          du: don't count duplicate arguments. Closes 5288
          man: don't skip default path which appears in config file
          stat: reduce storage for human-readable filesystem names
          vi: fix faulty undo after autoinsert
          vi: fix replacement of single character with CR
          vi: further fixes to undo after autoindent
          vi: allow manual screen update if SIGWINCH isn't supported
          vi: avoid build failure in non-default case
          vi: fix changes to word at end of line. Closes 11796
          vi: enable 'dG' command. Closes 11801
    
    Rostislav Skudnov (2):
          chcon: Fix typo in ACTION_RECURSE
          dd: add 'oflag=append'
    
    Stefan Sørensen:
          ip: Fix ip -o link
    
    Thomas De Schampheleire:
          top: provide cmdline argument '-H' to enable thread scanning by default
    
    Thomas Frauendorfer:
          Fix off by one error in FAT16 <=> FAT32 detection
    
    Vicente Jimenez Aguilar:
          httpd: add svg to built in MIME types list
    

  • 14 February 2019 -- BusyBox 1.30.1 (stable)

    BusyBox 1.30.1. (git)

    Bug fix release. 1.30.1 has fixes for bc/dc, sed (backslash parsing for 'w' command), ip (vlan fixes), grep (fixes for -x -v), ls (-i compat).

  • 31 December 2018 -- BusyBox 1.30.0 (unstable)

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

    Sizes of busybox-1.29.3 and busybox-1.30.0 (with equivalent config, static uclibc build):

       text	   data	    bss	    dec	    hex	filename
     941070	    477	   7296	 948843	  e7a6b	busybox-1.29.3
     948463	    477	   7296	 956236	  e974c	busybox-1.30.0

    Changes since previous release:

    Andre Goddard Rosa:
          smemcap: keep outputting by ignoring transient processes
    
    Baruch Siach:
          install.sh: don't clobber dangling symlinks
    
    Bernhard Reutner-Fischer:
          brctl: use a single buffer for brname and ifname
          printf: fix printing +-prefixed numbers
    
    Brandon Maier:
          ifupdown: support "source-directory" stanza
    
    Brandon P. Enochs:
          ntpd: add support for MD5/SHA1 message authentication
    
    Chen Qi:
          testsuite: check CONFIG_DESKTOP before using 'od -t'
    
    Chen Yu:
          remove_file: don't call rmdir if remove_file return failure
    
    Christoph Schulz:
          ash: reset tokpushback before prompting while parsing heredoc
    
    Denys Vlasenko:
          libbb: @ in "\x3@" is not a valid hex digit
          libbb: do not misinterpret 0x10-0x19 chars in "\xNNN" too
          libbb: fix potential NULL pointer use
          libbb: fix use-after-free in copy_file
          libbb: in xmalloc_fgets(), use size_t for bb_get_chunk_from_file()
          tls: add support for ECDHE-ECDSA-AES-128-CBC-SHA and x25519 curve
          tls: add support for TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 cipher
          tls: add support for TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 cipher
          tls: add support for 8 more cipher ids - all tested to work
          tls: in AES-CBC code, do not set key for every record - do it once
          tls: introduce FEATURE_TLS_SHA1 to make SHA1 code optional
          tls: simplify hmac_begin(), speed up prf_hmac_sha256()
          extend fractional duration support to "top -d N.N" and "timeout"
          Revert "libbb: remove unnecessary variable in xmalloc_fgets"
          ash: allow shell scripts to be embedded in the binary
          ash: eval: Restore input files in evalcommand
          ash: eval: Variable assignments on functions are no longer persistent
          ash: exec: Return 126 on most errors in shellexec
          ash: expand: Do not quote backslashes in unquoted parameter expansion
          ash: expand: Fix ghost fields with unquoted $@/$*
          ash: parser: Fix parsing of ${}
          ash: var: Set IFS to fixed value at start time
          ash,hush: fold shell_builtin_read() way-too-many params into a struct param
          ash,hush: properly handle ${v//pattern/repl} if pattern starts with /
          hush: expand_vars_to_list() should not assume it starts new word
          hush: faster/smaller code to check for presense of multiple chars in string
          hush: fix another case where empty "for" wasn't setting exitcode to 0
          hush: fix/explain corner cases of redirection colliding with script fd
          hush: fix handling of heredocs not enclosed in groups where they are "declared"
          hush: fix handling of heredocs starting with empty lines
          hush: fix handling of '' in ${var:+ARG}
          hush: fix heredoc handling in the "cmd <<EOF ;<newline>" case
          hush: fix nested redirects colliding with script fds
          hush: fix "set -x" output prefix overlapping for v="..`cmd`.." case
          hush: fix word splitting in ${v:+ARG} - dollar_altvalue1 test
          hush: fix 'x=; echo ${x:-"$@"}' producing 'BUG in varexp2' message
          hush: handle backslash-newline in heredoc terminators
          hush: improve set -x: make "+++" indent level increase in `cmd` and eval.
          hush: improve ${var#...}, ${var:+...} and ${var/.../...} - handle quoting
          hush: in some cases, expand_on_ifs() relied of uninitialized memory
          hush: make "set -x" output closer to bash
          hush: make "set -x" output non-redirectable when fd#2 redirected
          hush: never glob result of dquoted "${v:+/bin/c*}"
          hush: set IFS to default on startup
          hush: speed up ${var:+ARG} for literal ARGs
          awk: abort if NF set to negative value
          cat,nl: fix handling of open errors
          cpio: if longopts are enabled, accept --null (synonym for -0)
          cp: optional --reflink support
          date: do not allow "month #20" and such, closes 11356
          fdisk: sync up with some util-linux 2.31 behavior
          fdisk: use strtoul[l] instead of atoi, closes 11176
          find: implement -executable and -quit
          free: ensure there is a least one space between numbers
          grep: accept and ignore --color[=anything]
          gzip: unbreak FEATURE_GZIP_LEVELS, closes 11171
          hexdump: fix short file of zero bytes treated as dup
          hexedit: fixes for redraw and down movement causing SEGV on attempt to access
          init: hopefully fix "rebooting" in containers
          nbd-client: support newstyle protocol, -b, -d, -p, -N
          nslookup: add support for search domains, closes 11161
          ntpd: default to FEATURE_NTP_AUTH=y
          ntpd: do not SEGV on "-p keyno:192.168.1.1", show --help instead
          ntpd: increase minimum G.FREQHOLD_cnt from 8 to 12
          ntpd: more verbose message for "root distance too high" case
          ntpd: show real, unclamped delays on low-latency networks
          ping: implement -i SEC
          ping: use setitimer() instead of ualarm()
          printf: fix printf "%u\n" +18446744073709551614
          sed: fix double-free in FEATURE_CLEAN_UP code
          sendmail: use on-stack buffer for AUTH PLAIN
          smemcap: keep outputting by ignoring transient processes, take two
          sort: add -V "sort version"
          svlogd: fix pattern matching when using timestamps
          tar: fix too eager autodetection, closes 11531
          tar: handle the case when opened created tarball happens to have fd#0
          tar: skip 'V' headers (GNU volume label), closes 11526
          timeout: fix arguments to match coreutils
          udhcpc: check that 4-byte options are indeed 4-byte, closes 11506
          udhcpc: do in fact not allow hostname components which start with dash
          udhcpc: ensure at least one unicast renew attempt
          udhcpc: give SIGUSR1-induced renew one chance of unicast renew
          unlzma: fix too-eager corruption check
          unzip: use printable_string() for printing filenames
          uptime: add -s support
          vi: fix FEATURE_VI_REGEX_SEARCH to respect LIMITED (one-line) search
          wget: fix fetching of https URLs without http proxy
          wget: print the final newline only for non-tty output
          wget: print "TLS certificate validation not implemented" only once on redirects
          whois: fix a possible out-of-bounds stack access
          xargs: fix exit code if command exits nonzero, closes 11381
    
    Gavin Howard:
          bc: new applet
          dc: a much fuller version which uses bc codebase
    
    Guillermo Rodriguez:
          free: add 'available' memory if provided by the kernel
    
    Jeremy Kerr:
          udhcp: add option 211, "reboot time"
    
    Jiří Prchal:
          examples/udhcp/simple.script: add possibility to use modern "ip"
    
    Jon Kolb:
          Add chroot support to chpasswd
    
    Lauri Kasanen:
          ls: When -h is passed, the total should also be in human units
    
    Martin Kaiser:
          mdev.txt: explain the meaning of a leading "-"
          .gitignore: add ctags output files
    
    Peter Korsgaard:
          sysklogd: add timestamp option to ignore message timestamps
    
    Raffaello D. Di Napoli:
          sendmail: fix parsing of addresses in angle brackets
          sendmail: support AUTH PLAIN in addition to AUTH LOGIN
    
    Rasmus Villemoes:
          libbb: optionally honour libc provided SIGRTMIN/SIGRTMAX in get_signum()
          libbb/u_signal_names.c: don't check errno after bb_strtou
    
    Ron Yorston:
          Ensure build works when KBUILD_OUTPUT is set, closes 11511
          Tweaks to build process for embedded scripts
          build system: prevent duplicate applet names
          docs: add embedded-scripts.txt
          ash: recognize embedded scripts in SH_STANDALONE mode
          ash: in tryexec(), ensure we don't try to run embedded scripts as applets
          ash: ensure variables are fully initialised when unset
          ash: minor fixes
          hush: allow hush to run embedded scripts
          hush: correct description for HUSH_TICK config option
          lineedit: autocompletion for embedded scripts
          libarchive: add a function to unpack embedded data
          Treat custom and applet scripts as applets
          busybox: add '--show SCRIPT' option to display scripts
          vi: remove duplicated code
          vi: correctly detect when a deletion empties the buffer
    
    Rostislav Skudnov:
          dd: add 'oflag=seek_bytes'
    
    Thomas De Schampheleire:
          head: add test case for negative -n invocation
          head: convert existing tests to new-style
    
    haroon maqsood:
          nproc: implement --all --ignore=N
    
    sagivd:
          chcon: fix issues with recurse and retval for retained files
    

  • 9 September 2018 -- BusyBox 1.29.3 (stable)

    BusyBox 1.29.3. (git)

    Bug fix release. 1.29.3 has a fix in libbb for xmalloc_fgets().

  • 31 July 2018 -- BusyBox 1.29.2 (stable)

    BusyBox 1.29.2. (git)

    Bug fix release. 1.29.2 has fixes for fdisk (compat fixes, allow 2TB+ sizes), gzip (FEATURE_GZIP_LEVELS was producing badly-compressed .gz), hexedit (segfault fix).

  • 15 July 2018 -- BusyBox 1.29.1 (stable)

    BusyBox 1.29.1. (git)

    Bug fix release. 1.29.1 has fixes for wget (http->https redirect) and sendmail (angle bracket parsing).

  • 1 July 2018 -- BusyBox 1.29.0 (unstable)

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

    Sizes of busybox-1.28.4 and busybox-1.29.0 (with equivalent config, static uclibc build):

       text	   data	    bss	    dec	    hex	filename
     968029	    483	   7008	 975520	  ee2a0	busybox-1.28.4
     969154	    475	   6972	 976601	  ee6d9	busybox-1.29.0

    Changes since previous release:

    Aaro Koskinen:
          cp: implement -T
          less: implement -F
    
    Andy Shevchenko:
          libbb: Use return value from is_prefixed_with()
    
    Codarren Velvindron:
          ntpd: deprecate IPTOS_LOWDELAY in favor of IPTOS_DSCP_AF21
    
    David Decotigny:
          udhcpc6: ignore invalid OPTION_IAADDR
          udhcpc6: carry along length of packet when parsing it
    
    Denys Vlasenko:
          libarchive: move bbunpack constants to bb_archive.h
          libbb.h: always include sys/resource.h
          libbb: commonalize a bit of little-endian CRC32 table generation code
          libbb: compile capability code only if FEATURE_SETPRIV_CAPABILITIES or RUN_INIT
          libbb: compile obscure() only if FEATURE_PASSWD_WEAK_CHECK=y
          libbb: crypt() in newer glibc requires include <crypt.h>
          libbb: introduce and use bb_getsockname()
          libbb: new function bb_die_memory_exhausted()
          libbb: new option FEATURE_ETC_SERVICES: if off, /etc/services reads often avoided
          libbb: rename bb_ask -> bb_ask_noecho, bb_ask_confirmation -> bb_ask_y_confirmation
          libbb: shrink wget/tftp progress indicator code
          libbb: switch bb_ask_noecho() to "mallocing" string return API
          libbb: use BUILD_BUG_ON in utoa_to_buf()
          networking/interface.c: get rid of global data
          i386: make stack size optimization selectable, and allow i486 insns (bswap)
          NOFORK_NOEXEC.sh: a script to find "interesting" applets
          size_single_applets.sh: fix a bug which mishandles e.g. "udhcpc6" name
          config: add size estimations for a few applets
          use gmtime_r() instead of gmtime()
          ioctl(SIOCGIFINDEX) does not require clearing of entire ifr
          fix install with hardlinks and a custom PREFIX. Closes 10801
          examples/shutdown-1.0: an example of reboot which does not signal init
          examples: update /var/service/getty for Unicode ttys
          examples/var_service: new example: dnsmasq service
          cal: make it NOEXEC
          mv: make it NOEXEC
          ash: add LINENO support
          ash: parser: fix backquote support in here-document EOF mark
          ash: a bit of NOFORK code should only be active if FEATURE_SH_STANDALONE=y
          ash: ALWAYS_INLINE grabstackblock()
          ash: expand: Fix buffer overflow in expandmeta
          ash: expand: Fix bugs with words connected to the right of $@
          ash: fix "char == CTLfoo" comparison signedness bug
          ash: fix double-quoted "\z" handling
          ash: fix var_bash5.tests - ${VAR/pattern/repl} construct
          ash,hush: fix "saved" redirected fds still visible in children
          ash,hush: handle a few more bkslash-newline cases
          ash: if "[[" bashism is not supported, do not handle it anywhere
          ash: introduce a config option to search current directory for sourced files
          ash: make it possible to disable "const global ptr" optimization
          ash: make ${v:N:M} more robust for very large M by clamping to MIN/MAX_INT
          ash: parser: Add syntax stack for recursive parsing
          ash: parser: Allow newlines within parameter substitution
          ash: parser: Fix parameter expansion inside inner double quotes
          ash: parser: Fix single-quoted patterns in here-documents
          ash: redir: Fix typo in noclobber code
          ash: use F_DUPFD_CLOEXEC and O_CLOEXEC
          ash: use pgetc_eatbnl() in more places
          hush: implement $LINENO bashism
          hush: add HUSH_BASH_SOURCE_CURDIR config option, to be on par with ash
          hush: consolidate handling of setting/unsetting of PSn, LINENO, OPTIND
          hush: do not drop backslash from eval 'echo ok\'
          hush: fix a='a\\'; echo "${a%\\\\}"
          hush: fix a backslash-removal bug in case
          hush: fix a bug where we don't properly handle f() { a=A; b=B; }; a= f
          hush: fix a case where EXIT trap may modify its code mid-flight
          hush: fix a few more corner cases with empty-expanding `cmds`
          hush: fix a signedness bug
          hush: fix build if !BASH_LINENO_VAR
          hush: fix corner cases with exec in empty expansions
          hush: fix dot builtin to not search current directory
          hush: fix dup_CLOEXEC() call without "avoid_fd" parameter
          hush: fix eval 'echo ok\'
          hush: fix for !ENABLE_HUSH_MODE_X configuration
          hush: fix for readonly vars in "ro=A ro=B cmd" case
          hush: fix func_return2.tests on NOMMU
          hush: fix handling of ^C in eval
          hush: fix handling of \<eof> in double-quoted strings
          hush: fix handling of raw ^C in scripts: "echo ^C"
          hush: fix handling of $_ (so far it's an ordinary variable, no special meaning)
          hush: fix heredoc_bkslash_newline1.tests failure
          hush: fix IFS handling in read
          hush: fix mishandling of "true | f() { echo QWE; }"
          hush: fix prompt in multi-line $(())
          hush: fix raw ^C handling in single-quoted strings
          hush: fix recent breakage from parse_stream() changes
          hush: fix "set -e; false || x=1; echo OK"
          hush: fix two corner cases in ${v/pattern/repl}. Closes 10686
          hush: fix "unset PS1/PS2", and put them into initial variable set
          hush: fix var_leaks.tests and var_preserved.tests on NOMMU
          hush: fix "$v" expansion in case patterns when v='[a]'
          hush: IFS fixes
          hush: if we did match "LINENO" or "OPTIND", stop further comparisons
          hush: implement "command" builtin
          hush: implement "hush -s"
          hush: less mind-bending set_vars_and_save_old()
          hush: make var nesting code independent of "local" support
          hush: one-word, no-globbing handling of local/export/readonly args
          hush: optimize parse_stream()
          hush: protect against self-modifying trap code
          hush: put "current word" structure into parsing context
          hush: simplify \<newline> code
          hush: simplify process_command_subs()
          hush: support "f() (cmd)" functions
          shell: add 6856 $IFS tests to testsuites
          shell: echo ${?:0} was fixed sometime ago, enable it in tests
          shell: handle $((NUM++...) like bash does. Closes 10706
          ar: hopefully fix out-of-bounds read in get_header_ar()
          arping: change a few message strings to be closer to iputils arping
          arping: fix the case when inherited signal mask masks out ALRM
          arping: move packet buffer, sigset and struct ifreq to malloced "globals"
          ar: stop using static data
          awk: do not allow $(-1)
          awk: fix 'delete array[var--]' decrementing var twice
          bgip2: fewer specifically-sized [u]int32_t's locals in sendMTFValues
          bzip2: ~1% speedup by special-casing "store 1 bit" function
          bzip2: a few more locals converted to generic types
          bzip2: code shrink, stop using global data variable
          bzip2: convert some locals to unsigned's
          bzip2: delete write-only fave[] array
          bzip2: eliminate write-only local numQSorted
          bzip2: eliminate one parameter to mainQSort3()
          bzip2: expose tuning knob for faster/smaller code
          bzip2: fix two crashes on corrupted archives
          bzip2: have two separate "store bit 0" and "store bit 1" functions
          bzip2: make locals in mainSort() saner, convert one of them from uint16 to unsigned
          bzip2: move ->origPtr out of struct EState, make a few members smaller
          bzip2: move runningOrder[] back to stack - 256 bytes is not much
          bzip2: optimize zPend variable code
          bzip2: pass sorting params through EState* pointer
          bzip2: remove redundant clearing of an alredy unset bit
          bzip2: remove redundant loop termination check in mainSort()
          bzip2: reuse zPend processing code
          bzip2: rewrite bit of code which depends on integer overflow
          bzip2: runningOrder[] values are always 0..255, make it uint8
          bzip2: small simplification in mainSimpleSort()
          bzip2: shrink makeMaps_e()
          bzip2: work around bad compiler optimization
          cat: fix cat -e and cat -v erroneously numbering 1st line
          chrt: use correct min/max priorities
          cp: fix option handling in non-longopt config
          dd: exit with 1 if last write was incomplete
          dd: fixed partial count logic
          df: 4TB+ support on 32 bits arch
          df: do "rootfs" check sooner
          dpkg: fix symlink creation, closes 10941
          fdisk: remove "Partition N does not end on cylinder boundary" message
          fsck: fix incorrect handling of child exit
          fstrim: do not check that specified file is on a block device
          ftpd: add -A option to disable all authentication, closes 10921
          ftpd: handle restarts past 2147483647 bytes. closes 10741
          ftpd: switch to mallaced "globals"
          ftpgetput: add EPSV support (PASV-like thing for IPv6)
          ftpgetput: preparations for ESPV support, no code changes
          grep: fix echo "aa" | busybox grep -F -w "a" (should not match)
          gunzip: fix from gzip-1.3.12 for gzip file with all zero length codes
          gzip: "compressed_len" is unused, stop wasting code and time calculating it
          gzip: fix debug code. Closes 10681
          gzip: flush output buffer after stored blocks, they are not 32-bit aligned
          gzip: optionally faster put_32bit()
          gzip: speed up send_bits()
          gzip: use unsigned type for bit fields and bit counts
          gzip: use wider (32-bit, not 16) bi_buf
          httpd: do not default to Content-type: application/octet-stream
          ifplugd: close signal race
          ifplugd service example: always run up/down script on startup
          inetd,mount: add comment with example of flags to build with libtirpc
          init: stop using static data
          install: fix "-D -t DIR1/DIR2/DIR3" creating only DIR1/DIR2, closes 11106
          ip: fix crash in "ip neigh show"
          ip: fix "ip -oneline a"
          less,microcom,lineedit: use common routine to set raw termios
          less: accept -R option. Closes 10816
          less: fix help text conditional for -R
          less: optional support of -R
          less: remove unnecessary message
          lzop: buffer several 32-bit writes when we start a new compressed block
          lzop: checksum reads do not need to be checksummed
          lzop: code shrink by using header_t matching on-disk layout
          lzop: don't support ancient versions < 0.94 (15 Oct 1997)
          lzop: remove method checks which are always true/false
          md5sum: use config help text similar to other "sum" tools
          mkfs_ext2,mkfs_vfat: fix warnings in STORE_LE on big-endian platforms
          mknod: better --help, much clearer code
          nandwrite: cope with old headers which have no MTD_FILE_MODE_RAW
          nc: fix the !NC_SERVER configuration
          nslookup: add openwrt / lede version
          ntpd: suppress in-kernel frequency correction in first 8+n adjtimex calls
          od: move address_fmt[] from data to globals. 8 less bytes in data section
          patch: implement --dry-run
          ping: don't call monotonic_us twice per sending the ping
          ping: implement -A "adaptive ping"
          poweroff: add a config option for people needing VERY early poweroff
          realpath,readlink -f: coreutils compat, closes 11021
          renice: add comment about getpwnam/NOFORK interaction
          renice: use BUILD_BUG_ON()
          setlogcons: open /dev/ttyN for "setlogcons N", not /dev/tty1
          sort: FEATURE_SORT_OPTIMIZE_MEMORY
          sort: fix potentially buggy use of OPT_STR
          sort: fix -s. Closes 10671
          sort: in -s handling, return 1/-1, not 1/0 compare result
          start_stop_daemon: fix normally disabled OLDER_VERSION_OF_X code
          stat: fix a typo: s/romfs/ramfs/, closes 10876
          svok: new applet (daemontools compat)
          tar: accomodate non-terminated tar.chksum fields as seen from github.com
          tar: add -k and -o to --help
          tar: add -o and -k to short --help too
          tar,unzip: postpone creation of symlinks with "suspicious" targets
          tc: enable this applet
          tcpsvd: fix fallout from opt_complementary removal
          tcpudp: shrink per-host rate-limiting code
          telnet: move winsize detection closer to I/O loop, delete non-functioning debug code
          tls: fix hash calculations if client cert is requested and sent
          tls: remove redundant floor prevention
          top: do unsigned rather than signed division in do_stats()
          top: fix "warning: unused variable new_mask"
          top: handle much larger VSZ values
          top: much faster cursor key navigation by avoiding process rescan
          udhcpc6: additional fix for ppp interface type
          udhcpc6: add support of prefix delegation
          udhcpc6: fix for ppp interface type
          udhcpc6: fix ipv6prefix[_lease] envvar value in script invocation
          udhcpc6: fix lease time staying very small because -d was not specified
          udhcpc6: set -x options in request
          udhcpc[6]: remove overzealous timeout clamping code
          udhcpc: remove code which requires server ID to be on local network
          udhcpd: clamp down huge auto_times to ~2M seconds, better EINTR poll handling
          udhcpd: fix "not dying on SIGTERM"
          udhcpd: use ptr_to_globals for its lone global data (g_leases)
          udhcp: do not setlinebuf(stdout), we don't print to stdout anymore
          udhcp: support string user options, closes 10946
          umount: fix "umount -t FSTYPE MNTPOINT" acting as if -a is specified
          unlzma: do emit the error message on bad input, when we exit with 1
          unlzma: fix three SEGV cases
          unlzop: fix --help: it has -U instead of -k
          unzip: do not set directory mode to 0777
          wget,ftpd: shorten and reuse strings
          wget: add EPSV support
          wget: check chunk length for overflowing off_t
          wget: emit a message that certificate verification is not implemented
          wget: handle URLs with @ or hash differently
          wget: support for ftps://
          wget: more thorough sanitization of other side's data
          which: fix TODO with NOFORK+malloc_failure misbehaving
          xargs: use bb_ask_y_confirmation_FILE() instead of homegrown copy
    
    Eli Schwartz:
          Update release script to generate detached signatures and checksum files
    
    Euan Harris:
          nsenter: Rename --network option to --net
          nsenter: fix parsing of -t, -S and -G options
    
    Harald van Dijk:
          tar: fix interaction of delayed symlink and hardlink creation
    
    Ingo van Lil:
          ash: fail if 'shift' operand is out of range
    
    Ivan Abrea:
          tls: fix to handle X.509 v1 certificates correctly
    
    Jan Luebbe:
          ip link: support "add TYPE vrf", improve --help
          iplink: implement support for selecting a master interface
    
    Kaarle Ritvanen:
          ifupdown: do not fail if interface disappears during ifdown
    
    Kartik Agaram:
          restore documentation on the build config language
    
    Mark Marshall:
          netstat: produce numeric-ip output for non-resolved names
    
    Martijn Dekker:
          ash: 'nolog' and 'debug' options cause "$-" to wreak havoc
    
    Michael Olbrich:
          build system: fix parallel building issue
    
    Natanael Copa:
          cpio: extract "unsafe" symlinks the same way tar/unzip does
    
    Nicholas Clark:
          dd: add 'fullblock' iflag
    
    Peter Korsgaard:
          fbsplash: support configurable image position
    
    Peter Lloyd:
          wget: fix fetching of https URLs with http proxy
    
    Povilas Kanapickas:
          chrt: add support for SCHED_BATCH
          chrt: add support for SCHED_IDLE
    
    Quentin Rameau:
          libbb: remove unnecessary variable in xmalloc_fgets
          sed: prevent overflow of length from bb_get_chunk_from_file
    
    Ron Yorston:
          testsuite: update busybox and bzcat tests
          lineedit: allow window size tracking to be disabled
          ssl_client: fix option parsing
          testsuite: allow tests to work in paths containing spaces
    
    Samuel Mendoza-Jonas:
          udhcp: fix use of trim() in udhcp_str2optset()
          udhcpc6: add DHCPv6 env helper
          udhcpc6: add DHCPv6 boot options
          udhcpc6: add PXELINUX options
    
    Sean MacLennan:
          make busybox more portable
    
    Shawn Landden:
          umount: ignore -c
    
    Stefan Agner:
          ifplugd: if SIOCSIFFLAGS fails with EADDRNOTAVAIL, don't die
    
    Sven-Göran Bergh:
          volume_id: add LittleFS detection
    
    William Pitcock:
          ash: add support for command_not_found_handle hook function (bashism)
    
    Yann E. MORIN:
          applets/install: respect noclobber for script wrappers too
          applets/install: accept more than one install option
          build system: add rule to install without cloberring existing utilities
          applets/install: don't try to install nothing
    

  • 22 May 2018 -- BusyBox 1.28.4 (stable)

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

    Bug fix release. 1.28.4 has fixes for nsenter option parsing and dpkg symlink extraction.

  • 3 April 2018 -- BusyBox 1.28.3 (stable)

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

    Bug fix release. 1.28.3 has fixes for ash and hush (do not leave stray open file destriptors in children), cpio (fix for symlink extraction), grep ("grep -Fw a" was matching "aa").

  • 26 March 2018 -- BusyBox 1.28.2 (stable)

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

    Bug fix release. 1.28.2 has fixes for tcpsvd (fixed fallout from opt_complementary removal), udhcpd (do not ignore SIGTERM), tar and unzip (reverted to previous, more permissive symlink handling), ssl_client (fixed option parsing),

  • 15 February 2018 -- BusyBox 1.28.1 (stable)

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

    Bug fix release. 1.28.1 has fixes for cp (fix option handling in non-longopt config, implement -T), ip (crash in "ip neigh show"), tls (fix hash calculations if client cert is requested), tar (accomodate non-terminated tar.chksum fields as seen from github.com), udhcpc6 (fix ipv6prefix[_lease] environment value in script invocation).

  • 2 January 2018 -- BusyBox 1.28.0 (unstable)

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

    Sizes of busybox-1.27.0 and busybox-1.28.0 (with equivalent config, static uclibc build):

       text	   data	    bss	    dec	    hex	filename
     959831	    491	   7536	 967858	  ec4b2	busybox-1.27.0
     961456	    487	   7512	 969455	  ecaef	busybox-1.28.0

    Changes since previous release:

    Avi Fishman:
          i2cset: fix 'i' & 's' modes (3 extra bytes were sent)
    
    Avi Halachmi:
          lineedit: improve multiline PS1 - redraw using last PS1 line. Closes 10381
    
    Bartosz Golaszewski:
          i2c-tools: remove unneeded include
          i2c-tools: don't include linux/i2c-dev.h
    
    Denys Vlasenko:
          stop using atexit in non-debug build: saves ~260 bytes in bss with musl
          use %m printf specifier where appropriate
          standalone shell / prefer_applets: fix "exe" in comm fields
          change BB_EXTRA_VERSION: now it needs to contain any spaces/parenthesis
          regularize format of source file headers, no code changes
          move get_unaligned_le32() macros to platform.h
          sparc: needs -fPIC
          config: deindent all help texts
          config: FEDORA_COMPAT option (so far only tweaks uname)
          config: merge "Busybox Settings" and "Busybox Library Tuning" into one menu
          config: more tweaking of help texts
          config: reorder items in "Busybox Settings", improve help
          config: trim/improve item names and help texts
          build system: FEATURE_LIBBUSYBOX_STATIC - try to pull libc/libm into libbusybox
          build system: fix "allnoconfig" to clear all options. Closes 10296
          build system: remove unused CONFIG_FEATURE_HAVE_RPC
          libarchive: do not extract unsafe symlinks unless $EXTRACT_UNSAFE_SYMLINKS=1
          libarchive: FEATURE_LZMA_FAST should be visible if FEATURE_SEAMLESS_LZMA
          libbb: avoid malloc/free in bb_unsetenv()
          libbb: do not die if setgid/setuid(real_id) on startup fails
          libbb/dump: allow skipping over stdin too
          libbb/dump: fix a few broken commits and shrink code
          libbb: hide getnetbyaddr() inside "#if ENABLE_FEATURE_ETC_NETWORKS" block
          libbb: make trim() return pointer to terminating NUL
          libbb: move capability names code to libbb
          libbb: new function bb_getgroups() - allocating wrapper around getgroups()
          libbb: safe_write should not return EINTR
          libbb: use _exit, not exit, in bb_daemonize_or_rexec()
          libbb: rearrange NOFORK/NOEXEC code, logic is not changed
          libbb: simplify NOFORK/NOEXEC defines, move set_task_comm to libbb
          lineedit: do not tab-complete any strings which have control characters
          lineedit: get terminal width before printing prompt
          lineedit: make read_line_input() not take timeout param
          main: fix the case where user has "halt" as login shell. Closes 9986
          networking/interface.c: remove superfluous "& 0377"
          noexec: consolidate code
          noexec: do GETOPT_RESET() before entering APPLET_main()
          noexec: set comm field for noexecs
          nofork: fix a bug uncovered by hush testsuite (forgotten fflush)
          adjtimex,blkdiscard,free: make it NOFORK
          clear,nproc,tty,uname,arch,unlink,which: make them NOFORK
          pwdx,pivot_root,kill[all5],ttysize,realpath,readlink: make them NOFORK
          add/remove-shell,add/deluser,add/delgroup: make them NOEXEC
          make 17 state-changing execing applets (ex: "nice PROG ARGS") NOEXEC
          blkid: make it NOEXEC, make FEATURE_BLKID_TYPE=y default
          blockdev,fsfreeze,fstrim,mountpoint: make them NOEXEC
          brctl,chattr,lsattr,tune2fs: make them NOEXEC
          chvt,deallocvt,dumpkmap,fgconsole,loadkmap: make them NOEXEC
          cryptpw,mkpasswd: make them NOEXEC
          df,dnsdomainname,hostname,dumpleases,expr,fatattr: make them NOEXEC
          freeramdisk,free,stat,getopt,ifenslave,ipcalc,rdev,ipcrm,ipcs: make them NOEXEC
          ip,ip*: make them NOEXEC
          kbd_more: make it NOEXEC, remove redundant opt clearing
          loadfont,setfont,losetup,lspci,lsscsi,lsusb: make them NOEXEC
          makedevs,mesg,mktemp,nameif: make ithem NOEXEC
          modutils: make them NOEXEC except depmod
          nbd-client: make it NOEXEC, stop using argc
          date,resize,partprobe,ps,pstree,raidautorun,runlevel,setconsole: make them NOEXEC
          setkeycodes: make it NOEXEC, better --help text
          setlogcons: make it NOEXEC, better --help text
          setserial,stty,sv,svc,sysctl,tunctl,umount: make them NOEXEC
          users,w,who,uptime,renice,vconfig: make them NOEXEC
          adjtimex: zero-fill whole structure, to be on the safe side
          arch: new applet (same as uname -m). ~30 bytes
          ash: align --login code with dash
          ash: alloc slightly smaller buffer in cvtnum(); faster unsetvar()
          ash: allow "trap NUM [SIG]..." syntax
          ash: implement BASH_XTRACEFD bashism
          ash: do not set a signal to SIG_DFL if it already is
          ash: fix display of ">&-" redirect in job strings
          ash: fix matching of unicode greek letter rho (cf 81) and similar cases
          ash: note which versions of glibc exhibit "rho bug"
          ash: fix nofork bug where environment is not properly passed to a command
          ash: fix redir_leak.tests if STANDALONE=y
          ash: fix "unset OPTIND" throwing an error message
          ash: force inlining of a trivial function
          ash: if !ENABLE_ASH_EXPAND_PRMT, disable PSSYNTAX code
          ash: improve set -x to quote strings as necessary
          ash: INT_OFF/INT_ON around run_nofork_applet()
          ash: less hackish implementation of evaltreenr()
          ash: make tryexec(cmd) parameter const char
          ash: more general format ${var:EXPR:EXPR}
          ash: more s/error/perror/ for better error reporting
          ash: one "current line = 1" might be missing, fix that
          ash: [PARSER] Add FAKEEOFMARK for expandstr
          ash: [PARSER] Catch variable length expansions on non-existant specials
          ash: [PARSER] Removed noexpand/length check on eofmark
          ash: [REDIR] Fix popredir on abnormal exit from built-in
          ash: [REDIR] Replace GPL noclobberopen code with the FreeBSD version
          ash: remove REDIR_SAVEFD2
          ash: retain envvars with bad names in initial environment. Closes 10231
          ash: revert previous implementation of "A=1 A=2 B=$A cmd" code
          ash: [SHELL] Optimize dash -c "command" to avoid a fork
          ash: significant overhaul of redirect saving logic
          ash: stage backported LINENO support as a separate patch
          ash: survive failures in $PS1 expansion. Closes 10371
          ash: sync up with dash with respect to redirection escaping
          ash: unset OPTARG if getopts exits 1, support OPTERR=0 behavior
          ash: use mempcpy() where appropriate
          ash: [VAR] Add localvars nesting
          ash: [VAR] Do not poplocalvars prematurely on regular utilities
          ash: [VAR] Fix loss of variables when hash collides
          ash: [VAR] Fix poplocalvar leak
          ash: [VAR] Fix poplocalvar on abnormal exit from function
          ash: [VAR] Move unsetvar functionality into setvareq
          ash: [VAR] Replace cmdenviron with localvars
          ash,hush: ">&10" redirects to script/tty fds should not work
          hush: add a test which fails due to uclibc bug in getopt()
          hush: add support for "set -e"
          hush: add TODO for "set -e"
          hush: convert exp/ro/local parameters to bitfields in one flag param
          hush: correctly handle quoting in "case" even if !BASH_PATTERN_SUBST
          hush: do not accept "if() { echo; }" function def
          hush: do not assign to readonly VAR in "VAR=VAL CMD" syntax too
          hush: explain why wait5.tests is failing
          hush: fix a case when redirect to a closed fd #1 is not restoring (closing) it
          hush: fix and_or_and_backgrounding.tests failure
          hush: fix "cmd1 && cmd2 &" handling on NOMMU
          hush: fix comment parsing in `cmd`, closes 10421
          hush: fix ${##}, ${#?}, ${#!} handling
          hush: fix handling of empty heredoc EOF marker
          hush: fix quoted_punct.tests failure
          hush: fix readonly2.tests failure
          hush: fix redirect code (was using uninitialized variables)
          hush: fix "(sleep 1; exit 3) & sleep 2; echo $?; wait $!; echo $?"
          hush: fix "true | func_with_return" not allowing return
          hush: fix two redirection testcase failures
          hush: forgot to emit error on (failing) second "readonly VAR=VAL"
          hush: functions have priority over builtins (!)
          hush: implement "getopts" builtin
          hush: implement "readonly" builtin
          hush: implement "times" builtin
          hush: implement -d DELIM option for "read"
          hush: make SIGINT handling visually less confusing
          hush: make "wait %1" work even if the job is dead
          hush: massage redirect code to be slightly more like ash
          hush: print error messages on "shift -1"
          hush: remove redundant "G_flag_return_in_progress = -1"
          hush: remove superfluous comparison
          hush: rename a few functions
          hush: simplify insert_job_into_table() a bit
          hush: support ${VAR:N:-M}
          hush: treat ${#?} as "length of $?"
          hush: use mempcpy where useful
          hush: if STANDALONE, close interactive fd for NOEXECed children
          msh: delete this applet
          shell: improve comments on signal handling
          shell: add OPTARG poisoning to getopt_optarg.tests
          shell: and_or_and_backgrounding.tests is no longer "UNFIXED BUG"
          shell: make standalone shell tab-complete "busybox"
          shell: more efficient check for EOL in read
          shell: optional support for read -t N.NNN, closes 10101
          awk: stop on first non-option, closes 9861
          basename: do not use argc
          beep: disallow FEATURE_BEEP_FREQ = 0 in configuration
          blkdiscard: provide our own BLK[SEC]DISCARD if necessary
          bunzip2: fix runCnt overflow from bug 10431
          bzcat: compile bunzip2_main() if BZCAT
          bzcat,zcat: simplify code if gunzip/bunzip2 is not selected
          cat: fix "cat -An" ignoring -n; make numbering go througn all files
          chat: do not die when HANGUP param is missing. Closes 10016
          chattr: fix option parsing to accept more cryptic option combos
          chown: fix a mistake in opt_complementary change
          crond: allow $SHELL and starting user's shell override DEFAULT_SHELL. Closes 6458
          crond: do not assume setenv() does not leak
          crond: support @daily etc
          date: maybe_set_utc only once
          dd: fix status=none. Closes 10066
          ed: fix --help and reorder functions, no code changes
          ed: fix "\n" removal in command line; make "w" set "dirty = 0"
          free: no longer include common_bufsiz.h
          getopt32: factor out code to treat all args as options
          getopt32: move support for "always treat first arg as option" to users (tar/ar)
          getopt32: remove applet_long_options
          getopt32: remove opt_complementary
          hexedit: new applet
          httpd: fix handling of range requests
          httpd: skip "Status: " from CGI, including space. Closes 10291
          inetd: fix for running by non-root
          inetd,mount: do not die if uclibc without RPC is detected
          init: reduce the window when init can lose reboot/poweroff signals
          ipcalc: trim help text
          ipcs: tweak output orer to match util-linux 2.28
          kbd_mode: show "off" mode too
          kbd_mode: try harder to find console device if -C TTY is not given
          klibc-utils: add ipconfig.c work-in-progress
          klibc-utils: new applets: resume, nuke, minips
          makedevs: allow much longer filenames
          microcom: require exactly one non-option
          netcat: net applet (alias to nc)
          ntpd: do run the script at least once in 11 minutes
          ntpd: improve treatment of DNS resolution failures
          ntpd: mention in help text that -d can be repeated
          ntpd: perform DNS resolution out of send/receive loop. Closes 10466
          ntpd: skip over setting next DNS resolution attempt if it is not needed
          pgrep: fix "pgrep -v -P1"; also allow matching of comm. Closes 10086
          ping: better config help text for FEATURE_FANCY_PING
          ping: fix help text to show what parameter -p takes
          pmap: tweak help text, show usage if no params are given
          ps: implement -o sid
          ps: improve TIME column for large times: showing "14453:50" is not good
          ps: stop using AT_CLKTCK, there are more standard ways
          readprofile: do not close/free just before exiting
          rpm2cpio: handle LZMA compressed rpms. closes 10166
          rpm2cpio: use rpm_gettags
          rpm: prepare rpm_gettags for reuse in rpm2cpio
          rpm,rpm2cpio: do not compile not-configured parts of rpm.c
          rpm,rpm2cpio: INIT_G() was missing (it is a nop here so far)
          rpm,rpm2cpio: put both sources into one file, no code changes
          run-init: new applet
          script: -f means "flush", not "fsync"
          script: make -t[FILE] compatible with util-linux
          script: make -t independent of scriptreplay
          sed: in '/regexp/cmd1;//cmd2', cmd2 should use the same regexp as cmd1
          sendmail allow "=" symbol in recipient, closes 10241
          sendmail: fix segfault if "To: email1,email2" is used
          setconsole: much better help text
          setconsole: since SUSE version has no -r, nuke our --reset longopt
          setfattr: new applet
          setpriv: accept any case in capability names
          setpriv: code shrink, and grouping capability code together
          setpriv: dump user and group info
          setpriv: factor out capability name printing
          setpriv: placate "declaration of 'index' shadows a global declaration" warning
          setpriv: remove dependency on libcap headers
          shuf: fix random line selection. Closes 9971
          stty: add cmspar, flusho, extproc attributes
          stty: fix bb_common_bufsiz1 use in NOEXEC
          svc: fix a case where with more than one option, getopt() state is not reset
          svc: remove superfluout INIT_G()
          swapon: do not use FEATURE_MOUNT_LABEL, have your own FEATURE_SWAPONOFF_LABEL
          sysctl: fix file parsing, do not require -w for VAR=VAL
          sysctl: recognize ";comment" and "<whitespace>#comment" lines
          syslogd,logger: code shrink for musl
          tar: postpone creation of symlinks with "suspicious" targets. Closes 8411
          telnet: "-a" + "-l USER" should respect USER
          test: fix 4-argument case
          time: fix build for toolchains without O_CLOEXEC
          tls: fix build problem on non-static i386
          tls: fix pstm asm constraint problem
          tls: remove last int16 local variables in pstm code
          tls: use capped SNI len everywhere
          top: switch to malloced "globals"
          ttysize: if stdin is not tty, try stdout, then stderr
          ubi_tools: a bit smaller applet resolution code
          ubi_tools: ubiupdatevol supports "-" input and actually respects -s SIZE
          ubiupdatevol: fix bug with -sSIZE: was ignoring IMAGE_FILE
          udhcpc[6]: downgrade "adapter index N" messages to log2 level
          udhcpc[6]: fix messages referring to select() while we use poll()
          udhcpc[6]: initialize entire sockaddr_ll
          udhcpc[6]: make log2 messages for chaddr field indented like the rest
          udhcpc[6]: on log level 1, three messages about raw socket is overkill
          udhcpc: downgrade "MAC X:X:X:X:X:X" message to log2 level
          udhcpc: paranoia when using kernel UDP mode for sending renew: server ID may be bogus
          unlzma: fix SEGV, closes 10436
          unshare: -r implies -U, not -u
          unshare: -r should map root to user, not the other way around
          unxz: get_le32 macro is obviously wrong
          unzip: implement -j, closes 9126
          unzip: robustify overwrite checks
          unzip: sanitize filename length: malloc(1234mb) is not funny
          unzip: support symlinks. Closes 10031
          uuencode: allow space instead of "`" as padding char. Closes 10046
          volume_id: enable minix detection
          watchdog: do not use argc, other cleanups
          xargs: optional support for -P NUM. Closes 9511
          xxd: allow "-" as file name meaning stdin
          zcip: fix slow environment leak
    
    Eugene Rudoy (3):
          iproute/iprule: support toolchains without RTA_TABLE routing attribute
          unzip: fix content listing and filtering when -j is used
          unzip: add missing -j to trivial usage
    
    James Clarke (6):
          networking: Fall back on IPPROTO_RAW when SOL_RAW is not defined
          blkdiscard: Only build on Linux
          xfuncs: Handle missing non-POSIX termios constants
          df: Use statvfs instead of non-standard statfs
          udp_io, traceroute: Standardise IPv6 PKTINFO handling to be portable
          grep: skip grepping symlinks to directories
    
    Johannes Schindelin (7):
          ash: protect WIFSTOPPED use with #if JOBS
          copyfd: guard use of munmap() with #if (windows builds need this)
          ash: remove no-longer-used variable
          ash: implement -d DELIM option for read
          ash: report reason when a script file could not be opened
          ash: when cd fails, say why
          xargs: support -a FILE
    
    Kang-Che Sung (3):
          cat: allow compiling out -n and -b
          make_single_applets: fix ": $((fail++))" expansion error
          ps: allow ps config options if minips is enabled
    
    Markus Gothe:
          lsscsi: fix xchdir("..") from symlink in /sys/bus/scsi/devices
    
    Matt Spinler:
          watchdog: stop watchdog first on startup
    
    Natanael Copa:
          unzip: fix regression on big-endian machines
    
    Patrick Steinhardt (8):
          setpriv: do not process remaining args
          setpriv: prepare option parsing logic for additional opts
          setpriv: dump no-new-privs info
          setpriv: dump inheritable capability set
          setpriv: dump capability bounding set
          setpriv: dump ambient capabilities
          setpriv: allow modifying inheritable caps
          setpriv: allow modifying ambient capabilities
    
    Peter Korsgaard:
          dpkg: fix CONFIG_FEATURE_CLEAN_UP handling
    
    Ron Yorston (9):
          printf: fix format string sanity check
          od_bloaty: fix floating point output
          ash: support platforms that don't have '%m' printf specifier
          libbb: remove vdprintf
          ps: fix build failure if FEATURE_PS_TIME is disabled
          libarchive: fix build failure on NOMMU systems
          tar: fix handling of first argument without '-'
          kill: add '--' option to separate options from arguments
          env: -u option fails due to typo
    
    Thomas Petazzoni:
          Makefile: include per-arch Makefile before Makefile.flags
    
    Timo Teräs:
          add-remove-shell: fix crash when shell is already added
    
    Uwe Geuder:
          bootchartd: prevent premature stop by device mapper
    
    Xabier Oneca:
          chcon: show '--reference' in help text only if LONG_OPTS=y
    

  • 17 August 2017 -- BusyBox 1.27.2 (stable)

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

    Bug fix release. 1.27.2 has fixes for svc (work correctly with more than one option specified), unzip (big-endian fix), shuf (was always moving 1st line elsewhere), tls code (asm compilation problem on x86), NOFORK ("rm -i" and "yes" could not be interrupted), a bit of support for Fedora build.

  • 18 July 2017 -- BusyBox 1.27.1 (stable)

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

    Bug fix release. 1.27.1 has fixes for uuencode (allow space instead of "`" as padding char), dd (fixed status=none), setpriv (option parsing should not eat options in PROG ARGS), fix for "applet (for example halt) as login shell" use case, a few fixes for less typical build environments.

  • 3 July 2017 -- BusyBox 1.27.0 (unstable)

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

    Sizes of busybox-1.26.0 and busybox-1.27.0 (with equivalent config, static uclibc build):

       text	   data	    bss	    dec	    hex	filename
     925769	    489	   7352	 933610	  e3eea	busybox-1.26.0
     927115	    489	   7352	 934956	  e442c busybox-1.27.0

    Changes since previous release:

    Andrei Gherzan:
          switch_root: don't bail out when console doesn't exist
    
    Andrey Mozzhuhin:
          ftpd: new option -a ANON_USER to allow anonymous logins
    
    André Draszik:
          iproute: support for filtering by and printing of scope
    
    Assaf Gordon:
          setpriv: new applet
    
    Ben Hutchings:
          modprobe: read modules.builtin
    
    Cristian Ionescu-Idbohrn:
          appletlib: avoid warning on unused function ingroup
          unzip: remove now-pointless lseek which returns current position
    
    Denys Vlasenko:
          fix "ifdef ENABLE_foo": should always be "#if ENABLE_foo"
          fix "loginutils/Config.in:319 error: Overlong line"
          make DPKG=y and DPKG_DEB=y by default
          make FEATURE_USERNAME_COMPLETION=y by default
          make INSMOD=y by default
          make RMMOD=y by default
          move FEATURE_AUTOWIDTH config option to two applets which use it
          move FEATURE_USE_TERMIOS config option to two applets which use it
          make_single_applets.sh: a tool to check single-applet builds
          qemu_multiarch_testing: small improvements
          archival: add option -k "keep" to gzip/bzip2/lzop, add -U "nokeep" to lzop
          libbb: consolidate the code to set termios unbuffered mode
          libbb: eliminate redundant variable in sha_crypt
          libbb: fix "error: redefinition of 'is_tty_secure'"
          libbb: make check_password() also return CHECKPASS_PW_HAS_EMPTY_PASSWORD
          libbb: match_fstype() is unreadable in the extreme, fixing it
          libbb: move isqrt from factor, use it in diff too
          libbb: shrink dump.c
          libbb: spawn_and_wait() fflushes before forking NOEXEC; child reinits logmode
          libiproute: FACT_FUNCization
          add/remove-shell: copy /etc/shells mode to new file
          ash: 16-bit nprocs field is a pain for many CPUs
          ash: add INT_OFF/ON around allocations
          ash: commented-out possible fix for 7694
          ash: error out if ASH_INTERNAL_GLOB is not selected on uClibc
          ash: fix a bug in argv restoration after sourcing a file
          ash: fix $HOME/.profile reading if !ASH_EXPAND_PRMT
          ash: fix open fds leaking in redirects. Closes 9561
          ash: fix 'trap - 65'
          ash: implement "exec -a ARGV0 CMD ARGV1..."
          ash: revert "make dot command search current directory first"
          hush: conditionalize print_escaped() on EXPORT || TRAP
          hush: correct exitcode for unterminated ')' - exitcode2.tests testcase
          hush: fix a bug in argv restoration after sourcing a file
          hush: fix 'defined but not used' warning
          hush: fix kill builtin without jobs support
          hush: global_args_malloced is used only if set builtin is enabled
          hush: kill builtin and kill %jobspec support
          hush: make echo builtin optional
          hush: make export builtin optional
          hush: make memleak builtin optional
          hush: make read and trap builtins optional
          hush: make set/unset builtins optional
          hush: make umask builtin optional
          hush: reinstate [[ builtin
          hush: remove redundand test for ENABLE_HUSH_JOB
          hush: reorder builtins (cd and pwd ought to be close, etc), no code changes
          hush: support %%, %+ and % jobspec (meaning "current job")
          ash,hush: fix SIGCHLD interrupting read builtin
          ash,hush: move "config" blocks above their use in coditional includes
          ash,hush: make hush test optional, rename ASH_BUILTIN_foo to ASH_foo
          ash,hush: make it possible to select "sh" and "bash" aliases without selecting ash or hush
          busybox: stop depending on FEATURE_AUTOWIDTH for applet list
          catv: convert this bbox-specific applet into "cat -v"
          cryptpw: support "rounds=NNNNNNN$" thing in salts
          depmod: don't build it if MODPROBE_SMALL=y
          diff: fix -N and nonexistent files. Closes 7454
          factor: new applet
          fallocate: new applet
          fsfreeze: new applet
          ftpd/ls: show directories first
          grep: FEATURE_GREP_CONTEXT should be available for "fgrep only" too
          httpd: defend against attempts to OOM us. Closes 9611
          httpd: use "Content-Length", not "-length"
          init: dont send "Sent SIGTERM to all" msg to syslog: we just TERMed it!
          init: rename FEATURE_EXTRA_QUIET to FEATURE_INIT_QUIET
          iplink: implement "set promisc on|off". Closes 4682
          ip: make ip aliases individually selectable
          iproute: add "a" command as a synonym to "add"
          iproute: support advmss option
          link: new applet
          ls: -1 should be ignored by -l (and options which imply -l)
          ls: convert DISP_DIRNAME to a bool variable
          ls: get rid of opt_flags[], handle -l1c through option_mask32
          ls: handle -a and -A through option_mask32
          ls: handle all sort options through option_mask32
          ls: handle -d and -R through option_mask32
          ls: handle -i through option_mask32
          ls: handle -p and -F through option_mask32
          ls: handle -s through option_mask32
          ls: handle -x through option_mask32, remove default -C from --help
          ls: LIST_ID_NAME/ID_NUMERIC/LOPT/LONG are the same, merge as LONG
          ls: LIST_NLINKS/SIZE/DATE_TIME/SYMLINK are always the same, merge as LIST_LOPT
          ls: make -Z output compatible with GNU coreutils 8.25
          ls: more correct handling of -c, -u
          ls: replace -e with --full-time, add --group-directories-first, delete -K
          modprobe: do not descend into /etc/modprobe.d/DIR/. Closes 8686
          modprobe-small: fix "modprobe non-existing-module" exitcode (should be 1)
          modprobe_small: if only MODPROBE and DEPMOD are selected, no need to test for them
          modprobe-small: make applets individually selectable
          more: hardcode FEATURE_USE_TERMIOS=y in this applet; code shrink
          mount: create loop devices with LO_FLAGS_AUTOCLEAR flag
          nc_bloaty: use poll() instead of select()
          nc: use poll() instead of select()
          nl: new applet; also implement cat -nb (similar functionality to nl)
          nproc: new applet
          ntpd: print result of hostname resolution
          partprobe: new applet
          paste: delimiter list use should restart for each new output line
          pgrep: fix pgrep -flx "sleep 11" - saw "sleep 11" processes as "sleep 11 "
          pgrep: implement -a
          ps: avoid -o stat to contain spaces. Closes 9631
          rdate: make it do something remotely sane, facing 32-bit time overflow
          rdate: time(NULL) is shorter than time(&var)
          runit: fix chpst -n -N -u USER
          runsv: update to match version 2.1.2 of runit
          sendmail: allow "+" symbol in recipient. Closes 9646
          sha512: use larger constant table only if sha512 is in fact selected
          shred: new applet
          su: FEATURE_SU_BLANK_PW_NEEDS_SECURE_TTY
          svlogd: support -ttt (dateTtime instead of date_time)
          taskset: rewrite to be task size-agnostic
          taskset: separate "current" and "new" strings
          tcpudp: define SO_ORIGINAL_DST directly, not via include
          time: inplement -f FMT
          top: FEATURE_USE_TERMIOS shouldn't control reading of screen size
          udhcpc6: fix problems found running against dnsmasq
          udhcpc6: fix releasing
          udhcpc6: move misplaced comment
          udhcpc6: read_interface should save link-local ipv6 address
          udhcpc6: add comments about option 39, no code changes
          udhcpc6: add support for timezones
          udhcpc6: make -O OPT work
          udhcpc: do not accept --background on NOMMU (same as -b)
          udhcpc: fix "udhcpc -x hostname:NAME" not working on nommu
          udhcpc: make sure we do not overflow poll timeout
          udhcp: do not clobber errno by signal handler
          udhcp: use poll() instead of select()
          unlzma: fix erroneous "while" instead of "if". Closes 4682
          unzip: do not use CDF.extra_len, read local file header. Closes 9536
          unzip: optional support for bzip2, lzma, xz
          unzip: properly use CDF to find compressed files. Closes 9536
          umount: revert "umount: make -d always active, add -D to suppress it"
          vi: don't touch file with :x when modified_count == 0
          vi: survive if stdin is nonblocking. closes 9851
          vi,fsck: do not use build timestamp unconditionally. Closes 9626
          tls: a tiny TLS1.2 code, wire it up for wget
          ssl_client: TLStest applet
          wget: add a big explanation what TLS code implements and what does not
          wget: add support for -S --server-response
          wget: fix for brain-damaged HTTP servers. Closes 9471
          wget/tls: session_id of zero length is ok (arxiv.org responds with such)
          w: new applet, alias to "who -H"
          xxd: new applet
    
    Explorer09:
          modprobe-small: optimizations for single applet build
    
    Felix Fietkau:
          ash: improve / fix glob expansion
    
    Glenn Matthews:
          reset: before calling execvp(), reset needs to flush stdout
    
    James Byrne:
          sv: update to match version 2.1.2 of runit
    
    Jody Bruchon:
          uniq: add -i option to ignore case
          Add help text for 'uniq -i'
    
    Jörg Krause:
          Fix dependency for IFUPDOWN_UDHCPC_CMD_OPTIONS
    
    Kaarle Ritvanen:
          libbb: GETOPT_RESET macro
          login: move check_securetty to libbb
    
    Kang-Che Sung:
          Allow FAST_FUNC to be overridden at build time
          build system: no longer prompt for PLATFORM_LINUX option
          bunzip2: fix code bloat caused by zcat's seamless magic
          Fix FEATURE_{GZIP,BZIP2}_DECOMPRESS link error
          Allow 'gzip -d' and 'bzip2 -d' without gunzip or bunzip2
          shell: clarify help text of CONFIG_{SH,BASH}_IS_* options
          ash: explicitly group ash options
          ash: fix "kill %1" not working if CONFIG_ASH is disabled
          hush: split bash compatible extensions into separate defines. No code changes
          kill: need not build kill.c when ash's job control is off
          kill: optimizations for single-applet build
          modutils: fix config options dependency
          modprobe-small: move lsmod code out of modprobe_main()
          modutils: remove redundant "select PLATFORM_LINUX" configs
          cmdline module options can be disabled on "big" modutils
          Reorder modutils config options & fix yet more dependency
          modprobe-small: document '-n' in depmod usage
          modprobe-small: define and use DEPMOD_OPT_n (option mask)
          Update depmod & modprobe upstream help text in comments
    
    Laurent Bercot:
          httpd: fix address family for reverse proxy client socket
          ls: fix support for long options when FEATURE_LS_COLOR is deselected
    
    Markus Gothe:
          lsscsi: new applet
    
    Maxime Coste:
          paste: new applet
    
    Ming Liu:
          tar: add IF_FEATURE_* checks
    
    Natanael Copa:
          ntpd: improve postponed hostname resolution
    
    Ron Yorston:
          ash: fix error code regression
    
    Rostislav Skudnov:
          Replace int by uint to avoid signed integer overflow
          dd: call fsync() only once before exiting if conv=fsync is specified
    
    Stefan Tomanek:
          ip rule: add suppress_{prefixlength,ifgroup} options
    
    Tito Ragusa:
          README_distro_proposal.txt: typo fixes
    
    Tommi Rantala:
          time: document -p in usage
          time: implement -a, -o FILE
    
    Waldemar Brodkorb:
          modutils: remove special handling of uClibc
    
    Youfu Zhang:
          ash: fix incorrect path in describe_command
    
    Yousong Zhou:
          vi: avoid touching a new file with ZZ when no editing has been done
    

  • 31 March 2017 -- Note for users of Linux kernels older than 2.6.27

    If you are stuck with a kernel from July 2008 or earlier (2.6.26 or less), and you are using mdev, device scan wouldn't work correctly due to an incompatibility in /sys structure. You can work around it by reverting this patch in 1.26.x BusyBox sources. (You also probably need to plan migration to a less ancient kernel).

  • 10 January 2017 -- BusyBox 1.26.2 (stable)

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

    Bug fix release. 1.26.2 has fixes for ash (redirect fds sometimes were not closed), module utilities and tcpsvd (build fixes), build system (IFUPDOWN_UDHCPC_CMD_OPTIONS option was not settable).

  • 2 January 2017 -- BusyBox 1.26.1 (stable)

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

    Bug fix release. 1.26.1 has fixes for single-applet builds (all applets are verified to successfully build when individually selected), a few tweaks to defconfig were made.

    Static binaries are available for downloads, with each individual applet enabled separately, as well as the binary with almost all applets selected, and helper binaries (ssl_helper for HTTPS wget support, index.cgi, post_upload.cgi and httpd_ssi for HTTP server).

  • 20 December 2016 -- BusyBox 1.26.0 (unstable)

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

    Sizes of busybox-1.25.0 and busybox-1.26.0 (with equivalent config, static uclibc build):

       text	   data	    bss	    dec	    hex	filename
     942170	    491	   7496	 950157	  e7f8d	busybox-1.25.0
     944982	    491	   7504	 952977	  e8a91	busybox-1.26.0

    Changes since previous release:

    Aaro Koskinen (3):
          cpio: add ownership (-R) test cases
          patch: fix debug log failure
          patch: fix matching failure
    
    Bartosz Golaszewski (1):
          i2cdump: don't use common_bufsiz1
    
    Brian Foley (2):
          awk: fix segfault on for loop syntax error
          udhcpc: check read of option length byte to be within packet
    
    Denys Vlasenko:
          build system: fix a few warnings for allnoconfig build
          build system: fix include/NUM_APPLETS.h generation
          build system: make CONFIG_FEATURE_USE_BSS_TAIL less funky
          examples/var_service/fw: optionally flush all netdevs; optionally prefer one 0/0 routing
          examples/var_service/fw do not ruin $if[], use different name
          examples/var_service/supplicant_if: new service example
          examples: add a useful "see abridged log" script for ntpd service example
          examples: add example of a DHCP server
          examples: update var_service/README
          config: disentangle PREFER_APPLETS from SH_STANDALONE and SH_NOFORK
          trylink: use "mktemp tmp.XXXXXXXXXX" to placate OS X
          getopt32: add new syntax of 'o:+' and 'o:*' for -o NUM and -o LIST
          libbb/speed_table.c: survive B115200 and B230400 not fitting into 16 bits
          libbb/xwrite: print errno on "short write" errors
          libbb: do not use fflush_unlocked, musl does not like fflush_unlocked(NULL)
          libbb: handle \S in /etc/issue
          libbb: make xmalloc_sockaddr2dotted use NI_NUMERICSCOPE
          libbb: send_to_from: do not require that "to" should have the same AF. Closes 9146
          lineedit: fix completion with applet names. Closes 9361
          lineedit: fix two bugs in SIGWINCH signal handling
          libiproute: eliminate some redundant zero stores
          ash: [EXPAND] Do not split quoted VSLENGTH and VSTRIM
          ash: [EXPAND] Fix ifsfirst/ifslastp leak
          ash: [EXPAND] Optimise nulonly away and just use quoted as before
          ash: [EXPAND] Removed herefd hack
          ash: [EXPAND] Split unquoted $@/$* correctly when IFS is set but empty
          ash: [JOBS] Fix dowait signal race
          ash: [MEMALLOC] Add pushstackmark
          ash: [MEMALLOC] Made grabstackblock an inline wrapper for stalloc
          ash: [PARSER] Add nlprompt/nlnoprompt helpers
          ash: [PARSER] Do not show prompts in expandstr
          ash: [PARSER] Fix parsing of ${##1}
          ash: [PARSER] Handle backslash newlines properly after dollar sign
          ash: [PARSER] Recognise here-doc delimiters terminated by EOF
          ash: [PARSER] Report substition errors at expansion time
          ash: [PARSER] Size optimisations in parameter expansion parser
          ash: [REDIR] Move null redirect checks into caller
          ash: [REDIR] Remove EMFILE special case
          ash: [REDIR] Remove redundant CLOEXEC calls
          ash: [REDIR] Replace copyfd by savefd and use dup2 elsewhere
          ash: [SHELL] Expand ENV before using it
          ash: [SHELL] Move flushall to the point just before _exit
          ash: [SIGNAL] Remove EXSIG
          ash: [VAR] Initialise OPTIND after importing environment
          ash: [VAR] Remove setvarsafe
          ash: [VAR] Sanitise environment variable names on entry
          ash: add a FIXME for bug 9246
          ash: add comment explaining "set -e; $(cmd)" discrepancy
          ash: all blocks in function node copying must be SHELL_ALIGNed
          ash: comment out free(p) just before _exit, tweak some outdated comments
          ash: delete leftovers from "simplify EOF/newline handling in list parser" commit
          ash: do not leave SIGQUIT ignored on "exec CMD"
          ash: eval: Return status in eval functions
          ash: expand: Fixed "$@" expansion when EXP_FULL is false
          ash: explain EXP_REDIR and why we (dont) glob redir filenames
          ash: fix "duplicate local" code (forgot to re-enable interrupts)
          ash: fix "return N" not setting $? in loop conditionals
          ash: fix arithmetic closing )) split by backslash-newline
          ash: fix globbing bugs when using glibc glob()
          ash: fix handling of ${VAR: -2}
          ash: fix handling of NULs in $'abc\000def\x00asd'. Closes 9286
          ash: fix handling of bashism $'xxx' with high-bit chars. Closes 9236
          ash: fix interactive "command eval STRING" exiting on errors
          ash: fix return_in_trap1.tests failure
          ash: get rid of two global data variables
          ash: if using libc glob(), skip it if no metachars are in word
          ash: in heredoc code, fix access past the end of allocated memory. Closes 9276
          ash: input: Allow two consecutive calls to pungetc
          ash: jobs: Don't attempt to access job table for job %0
          ash: make internal globbing code selectable from config
          ash: make popfile() anfter popallfiles() safe
          ash: move ifsbreakup() and ifsfree() up
          ash: open-code blocking_dowait_with_raise_on_sig()
          ash: optimize tryexec(): avoid one allocation
          ash: partially sync with dash on "fork if traps are set" logic
          ash: placate gcc: "warning: ! is only applied to the left hand side of =="
          ash: reduce code differences from upstream
          ash: remove dead stores and unused variables
          ash: remove unused EXSHELLPROC
          ash: return to DOWAIT_* constants similar to dash, no logic changes
          ash: support "--" in "source" builtin
          ash: undo "tokname hack"
          ash: use glob() from libc
          ash: use pause(), not sigsuspend(), in wait builtin
          ash: use shellparam.optind/optoff in getopts() directly, not through pointers
          ash: while (!got_sig) pause() is not reliable, use sigsuspend()
          hush: "wait $!; echo $?" should return 127 if $! already exited
          hush: 'return' should have effect earlier
          hush: G.user_input_buf[] is needed only if line editing is enabled
          hush: `cmd` and arithmetic also need the fix for FILE rewind
          hush: add commented-out debug printouts in "memleak" built-in
          hush: add func6.tests
          hush: add var4.tests, var5.tests
          hush: allow { cmd } to not be terminated by semicolon in some cases
          hush: do not allow sh -c '{ echo boo }'
          hush: do not leak script fds into NOEXEC children
          hush: document better where bad redirect syntax is detected
          hush: enable "msh is deprecated" message in msh stub
          hush: factor out %jobspec parsing
          hush: fix "(sleep 1; exit 3) & sleep 2; echo $?; wait $!; echo $?"
          hush: fix ". EMPTY_LINE" not setting $? to 0
          hush: fix "redirects can close script fd" bug
          hush: fix "wait PID"
          hush: fix 'eval ""' handling
          hush: fix a bug in FEATURE_SH_STANDALONE=y config. Closes 9186
          hush: fix a memory corruption when exported variable is modified
          hush: fix exitcode on exec failure with EACCES - should be 126
          hush: fix handling of by backslash-newline in $((arith)) and $(cmd)
          hush: fix interactive input handling of backslash+newline
          hush: fix var3.tests
          hush: implement "wait %jobspec"
          hush: make "wait %1" less likely to play with signal mask
          hush: make getch/peek functions directly called
          hush: non-matching "case" statement sets $? to 0
          hush: rework "wait %jobspec" to work in non-interactive shells too
          hush: rework input char buffering to allow more than one-deep peek
          hush: simplify insert_bg_jobs
          cp: fix -i for POSIX mode. Closes 9106
          cp: make verbose cp show symlink copies too
          cpio: fix restoration of file ownership, closes 9306
          df: implement -B n<suff> and -B <suff> formats of -B option
          dhcp: merge files.c into dhcpd.c
          dhcp: merge leases.c and static_leases.c into dhcpd.c
          dhcp: merge most of static_leases.c into dhcpd.c
          dnsdomainname: split it from "hostname", make it independently selectable
          dpkg-deb: remove unused FEATURE_DPKG_DEB_EXTRACT_ONLY config option
          fdisk: fix CONFIG_FEATURE_SUN_LABEL=y build
          fdisk: print much less cryptic partition table
          fdisk: sanitize partition name printing; drop "Code" column; get rid of one static var
          fdisk_gpt: simplify GPT partition name printing
          find: fix handling of trailing slashes in -name PATTERN comparisons
          hexdump: fix numerous bugs in handling of backslashes
          httpd: explain why we use sprintf and why it should be fine
          ifplugd: if SIOCSIFFLAGS fails with ENODEV, don't die
          ifupdown: rewrite state file atomically
          ifupdown: when flushing addresses with "ip", add label %label%
          init: fix for FreeBSD console opening. Closes 9031
          install: fix musl problem with dirname
          ip: fix an improper optimization: req.r.rtm_scope may be nonzero here
          ipneigh: add this shortcur similar to other "ip <CMD>" shortcuts
          less: fall back to using fd #1 for keyboard reading. Closes 9231
          less: fix SEGV
          less: fix bracket search to match behavior of less 481
          less: switch off nonblock on kbd_fd before exit
          loadfont: 32k size limit is not enough
          makedevs: make special node creation idempotent
          man: allow nroff and tbl commands be overridden; unmangle writing to files
          man: fix parsing of "DEFINE pager xyz". Closes 8976
          man: make width selection more thorough; explain how to override it
          man: remove -Tascii from nroff invocation
          mdev: create devices from /sys/dev
          more: accept and ignore a bunch of options
          mount: for cifs, dont insert "ip=ADDR" option if user gave it explicitly
          mount: tweak "IPv6 scoped addr" commit
          ntpd: daemonize before DNS resolution
          sed: fix "sed n (flushes pattern space, terminates early)" testcase failure
          sendmail: make it possible to pause after connection helper is started
          sha3: fix to conform to final SHA3 padding standard, add -a BITS option
          su: expand help; simplify passing of -c CMD to run_shell()
          svc: new applet (daemontools-compatible version of "sv")
          tar: handle pax-encoded utf8 filenames and link names. Closes 9406
          tc: consolidate its disabled bits
          tcpsvd: don't keep shared fd open if fd limit is reached. Closes 9331
          telnetd: fix a corner case where CRLF->CR translation can misbehave
          telnetd: fix corner case of input processing of 0xff bytes
          telnetd: fix handling of short writes to pty
          telnetd: ifdef out a buggy error handling code path
          telnetd: treat all 2-byte IACs in 240..249 range as NOPs
          test: make [ and [[ forms individually selectable
          test: memory leak: free group id list
          top: move free(prev_hist) out of signal path
          traceroute: cleanup and fixes for packet size calculations
          udhcpc: check read of overload option data byte to be within packet
          udhcpc: run "deconfig" script in manual renew state too. Closes 9061
          unshare: --network should be --net. Closes 9116
          vi: fix '' command (goto to prev context)
          vi: make "g<key>" error message less likely to show garbage
          wget/ssl_helper: update to wolfssl-3.9.8
          wget/ssl_helper: strip was invoked incorrectly
          wget: run s_client helper with -servername HOST
          wget: there is no -s option in GNU Wget 1.18, we should be compatible
          wget: treat 201,202,203 as success codes too. Closes 9211
          whois: implement -i
          whois: make it actually work
          {md5,shaN}sum: make -c EMPTY fail
    
    Francis Rounds (1):
          svlogd: strip leading '!' from processor lines
    
    Hauke Mehrtens (1):
          libnetlink: fix alignment of netlink messages
    
    Jonas Danielsson (1):
          ping: populate icmp_id field for "simple" ping too
    
    Kang-Che Sung (1):
          docs: Update filenames in keep_data_small.txt
    
    Linus Walleij (1):
          AUTHORS: Add myself to AUTHORS
    
    Lukasz Nowak (1):
          libiproute: handle table ids larger than 255
    
    Mike Frysinger (4):
          modutils: support finit_module syscall
          mdev.conf: rename hw_random to hwrng
          setfiles: fix build failure after common_bufsiz change
          selinux: drop deprecated headers
    
    Miroslav Lichvar (1):
          ntpd: respond only to client and symmetric active packets
    
    Natanael Copa (4):
          df: use f_frsize instead of f_bsize for correct sizes
          lineedit: trivial codeshrink for vi-mode
          gzip: fix compression level bug. Closes 9131
          gzip: add test that checks that -9 compresses better than -1
    
    Peter Korsgaard (1):
          udhcpc: Unconditionally call deconfig script, not only if lease is active
    
    Ron Yorston (2):
          libbb: suppress warning about run_applet_and_exit
          ash: return exit status of nofork applets
    
    Rostislav Skudnov (2):
          ash: exit after subshell error when errexit option is set
          lineedit: fix handling of repeating Alt-b, Alt-f, Alt-d, Alt-Backspace
    
    Serj Kalichev (1):
          volume_id: Add support for UBIFS
    
    Tito Ragusa (1):
          strings: implement -t radix
    

  • 7 October 2016 -- BusyBox 1.25.1 (stable)

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

    Bug fix release. 1.25.1 has fixes for hush (newer glibc has different behavior on fflush; fix use-after-free for exported variables), gunzip (incorrect handling of -N "compression level" options), ip route (scope "Universe", numerical value zero, wasn't always set properly), ntpd (check type of incoming packet, respond only to client requests).

  • 22 June 2016 -- BusyBox 1.25.0 (unstable)

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

    Sizes of busybox-1.24.2 and busybox-1.25.0 (with equivalent config, static uclibc build):

       text    data     bss     dec     hex filename
     894406     494    7420  902320   dc4b0 busybox-1.24.2
     893717     489    7304  901510   dc186 busybox-1.25.0

    Changes since previous release:

    Aaro Koskinen (5):
          cpio: implement -R/--owner
          xargs: make -I imply -r
          gunzip: add support for long options
          gzip: add support for --no-name long option
          nandwrite: implement -n (read/write without ecc)
    
    Ari Sundholm (2):
          blkdiscard: new applet
          truncate: always set mode when opening file to avoid fortify errors
    
    Arnout Vandecappelle (Essensium/Mind) (1):
          taskset: fix non-fancy cpuset printing on big-endian
    
    Bartosz Golaszewski (7):
          i2cdetect: fix address skipping in auto mode
          i2cdump: don't read block data in non-block modes
          i2cdump: use I2C block mode for the 'i' mode parameter
          i2cdump: bail-out if block read fails
          i2cdump: display the numeric value for block read ioctl() errors
          unshare: new applet
          nsenter: new applet
    
    Bjørn Forsman (1):
          kconfig/lxdialog: get ncurses CFLAGS with pkg-config
    
    Chris Renshaw (1):
          Resolve linker issues with Android API 21 (dprintf, tcdrain)
    
    Christian Lindeberg (1):
          udhcpd: keep expired leases at startup
    
    Curt Brune (1):
          networking: add 'ip neigh' command
    
    Denys Vlasenko:
          make MKPASSWD a separate config option, not an automatic alias to cryptpw
          rename FEATURE_INITRD to LINUXRC and make it separate, not an alias to init
          fixes for problems found by bionic build
          build system: finer-grained selection of search speedup table
          build system: fix generate_BUFSIZ.sh to not alternate 1k and malloc builds
          scripts/trylink: fix bit-rotted linker option verification
          scripts/trylink: libbusybox fix
          scripts/trylink: remove $CPPFLAGS
          scripts/trylink: on failure, print a hint about CONFIG_EXTRA_LDLIBS
          generate_BUFSIZ.sh: catch BUFSIZE < 1024 also on "big" builds
          libbb: constify *bb_common_bufsiz1 (if it is compiled to be a pointer)
          libbb: factor out code which queries screen width
          libbb: get_uidgid() always called with allow_numeric=1
          libbb: make "COMMON_BUFSIZE = 1024 bytes, the buffer will be malloced" work
          libbb: make bb_common_bufsiz1 1 kbyte, add capability to use bss tail for it
          libbb: make parse_chown_usergroup_or_die() set unspecified uid/gid to -1
          libbb: speed up error_msg functions
          libbb: two new functions: wait_for_exitstatus(pid), xfchdir(fd)
          libarchive: fix open_zipped()
          libarchive: fix xmalloc_open_zipped_read_close()
          networking: allow dot at the end of the domain name in dhcp response
          arping: avoid use of ether_ntoa(). Closes 8926
          ash: fix command -- crash
          cp: add -u/--update and --remove-destination
          dos2unix: try to preserve ownership. Closes 8311
          du: extra compat: with -k and -m, round sizes up
          dumpleases: make host names sanitized to shell-friendly condition
          find_applet_by_name: add an example of faster linear search code
          flock: fix -c; improve error handling of fork+exec
          flock: merge spawn_and_wait() code patchs for -c and sans-c uses
          fsck: do not use statics
          fsck: use printf for message, not bb_info_msg
          ftpd: make DIR parameter work for non-root too: chdir to it instead of chroot
          grep: make errors other than "not found" result in exit code 2. Closes 8796
          httpd: fix heap buffer overflow. Closes 8426
          i2c_tools: suppress "'blen' may be used uninitialized in this function"
          ifupdowm: fix "warning: unused variable 'iface_list'"
          inotifyd: swap meaning of 'y' and 'm' events in help text. Closes 8726
          iproute: support "scope". Closes 8561
          libiproute: make rt_addr_n2a() and format_host() return auto strings
          libiproute: rename invarg(a,b) to invarg_1_to_2(a,b)
          login: add commented-out PAM double password avoidance from BZ 4003
          ls: fix columnar output. Closes 8731
          lzop: eliminate variable, use "int" as return type
          mkfs_vfat: use bb_error_msg for logging, not bb_info_msg
          modinfo: fix "-F firmware", add "intree" field display
          modprobe-small: fix bogus handling of unpack errors
          modprobe: skip non-.conf files only in subdirectories
          modutils: fix build error with !DEPMOD
          mount: support "nofail" option. Closes 8551
          nmeter: convert field list to bit list
          nmeter: fix a bug with unterminated varargs
          nmeter: reinstate and document -d-1
          nmeter: remove undocumented %NNNd specifier
          ntpd: do not use a peer more than once (say, if two peers resolve to the same IP)
          ntpd: if peer does not reply anymore, try re-resolving its hostname
          ntpd: more informative poll lowering message
          ntpd: print packet delay in clock update message
          ntpd: retry initial DNS resolution (forever, no timeout for now)
          ntpd: step when |offset| > 1 sec, not 0.125 sec
          od: get rid of (almost all) statics
          patch: correctly handle "patch FILE_TO_PATCH" form. Closes 7736
          pmap: fix bogus {no such process} comm field text
          rmmod: fix bad error message
          sed: fix append command to match GNU sed 4.2.1
          sed: make 's///w FILE' actually write to FILE. Closes 8251
          sed: support "-f -" idiom
          sed: understand \n, \r and \t in i and a commands. Closes 8871
          setarch: add support for '-R' (disable randomization)
          setfiles: switch bb_info_msg to printf
          setsid: implement -c
          sort: fix ENDCHAR handling in "-kSTART,N.ENDCHAR"
          sort: fix key with delimiters breakage
          stat: make -f optional. This allows to build stat for non-linux systems
          sulogin: drop incorrect comment about suid-ness
          sulogin: remove suid paranoia code, explain why it's not necessary
          sulogin: use bb_error_msg instead of bb_info_msg; better message
          tar: add a test that we don't write into symlinks
          tar: add support for --strip-components=N
          tar: fix files skipped with --strip_components not resetting selinux context
          tar: implement --version for buildroot
          tar: shrink hardlink name handling code
          top: make sort field for 's' mode less confusing
          udhcp: add setup_common_bufsiz() as needed
          udhcp: fix a SEGV on malformed RFC1035-encoded domain name
          udhcp: get rid of bb_info_msg()
          udhcpc: do not use -t NUM for counting "select" packets, use 3
          udhcpc: fix OPTION_6RD parsing (could overflow its malloced buffer)
          umount: build fix for older glibc
          unzip: better match for "standard" unzip's output; string shrinkage
          unzip: fix a case where we find wrong CDE. Closes 8821
          unzip: fix percent overflow; show "stored" files properly
          unzip: shorter code for date/time generation
          unzip: test for bad archive SEGVing
          wget: if stderr is not a tty, progress bar shouldn't use tty-tricks
          wget: make -T timeout work on header reads too. Closes 8636
          wget: make Bartosz's "wget --passive-ftp -nd -t 3" work
          zcip: do not query current time if we won't use the result
          zcip: use bb_error_msg for logging, not bb_info_msg
    
    Felix Fietkau (1):
          busybox: fix uninitialized memory when displaying IPv6 addresses
    
    Hans Dedecker (1):
          dhcpc: Use client IP address as source address for DHCP renew/rebind messages
    
    Isaac Dunham (1):
          dumpleases: new option -d to show time in seconds
    
    Jean Delvare (1):
          kbuild: Fix gcc -x syntax
    
    Junio C Hamano (1):
          kconfig: fix menuconfig on debian lenny
    
    Justin Lecher (1):
          menuconfig: optionally use pkg-config to detect ncurses libs
    
    Krzysztof Mazur (1):
          menuconfig: fix extended colors ncurses support
    
    Kylie McClain (1):
          Fix compiling with musl's utmp stubs
    
    Michal Marek (1):
          kbuild: Make scripts executable
    
    Mike Frysinger (12):
          trylink: include LDFLAGS when checking linkage
          swapon/swapoff: refine the -e (ifexists) option
          blkid: add bcache support
          truncate: use O_WRONLY|O_NONBLOCK
          build: add a sanitizer debug option
          modprobe: only parse files that end in .conf
          ash_test: printenv: fix missing includes
          ash_test: ignore generated files
          Revert "lxdialog: fix ncursesw include detection"
          syslogd: minor tweaks to text
          undeb: clean up
          unrpm: clean up
    
    Natanael Copa (2):
          ifupdown: use -x hostname:NAME with udhcpc
          libbb: fix time parsing of [[CC]YY]MMDDhhmm[.SS]. Closes 8951
    
    Nicolas Carrier (1):
          init: make the command-line rewrite optional
    
    Nicolas Cavallari (1):
          ifupdown: allow duplicate interface definitions
    
    Pascal Bach (1):
          chpasswd: support -c argument and respect DEFAULT_PASSWD_ALGO
    
    Rafał Miłecki (1):
          dd: support iflag=skip_bytes
    
    Richard Genoud (1):
          tr: support octal ranges
    
    Ron Yorston (26):
          Rewrite iteration through applet names to save a few bytes
          libbb: move common code into run_applet_and_exit
          lineedit: search applets as well as PATH for tab completion
          ash: add tests for failures of the exec and command builtins
          ash: fix EXEXEC status clobbering
          ash: allow popredir to be called if the stack is empty
          ash: copy function tests from hush testsuite
          ash: add support for bash 'function' keyword
          ash: add test for issue with here document
          ash: allow newline after variable name in for loop
          ash: save a few bytes in code to parse case statements
          ash: respect -p flag when command builtin is run with -v/-V
          ash: only allow local variables in functions
          ash: fix error during recursive processing of here document
          ash: simplify EOF/newline handling in list parser
          ash: fix corruption of ${#var} if $var contains UTF-8 characters
          ash: bash-compatible $'...' shouldn't expand in double quotes
          busybox: alter help message in standalone shell mode
          busybox: make busybox an optional applet
          Allow "busybox APPLET" to work when busybox is disabled
          wget: shrink code if https isn't supported
          libiproute: use if_nametoindex
          printf: short-circuit output when argument to %b includes \c
          applet_tables: save space by removing applet name offsets
          find_applet_by_name: loop index should be signed
    
    Sven Eisenberg (2):
          ubirename: new applet
          ubirmvol: implement -N switch for ubirmvol
    
    Szabolcs Nagy (1):
          ip: fix problem on mips64 n64 big endian musl systems
    
    Timo Teräs (4):
          ifupdown: pass interface device name for ipv6 route commands
          fbsplash: use virtual y size in mmap size calculations
          modutils: merge module_entry and module_info to common
          networking: properly initialize ipv6 scope id for printing it
    
    Yaakov Selkowitz (2):
          kconfig: check ncursesw headers first in check-lxdialog
          kconfig: fix check-lxdialog for DLL platforms
    
    Yann E. MORIN (1):
          kconfig/lxdialog: rationalise the include paths where to find {.n}curses{,w}.h
    

  • 25 March 2016 -- Building on an Android tablet.

    Android is based on Linux kernel, but sadly and unexplicably, Android userspace is not Unix-friendly: in many cases, things are done differently than in "usual" Unix systems. For example, there is no /bin directory (and therefore ubiquitous #!/bin/sh scripts won't work). Instead, there is /system/bin.

    I have a Samsung Galaxy Tab S (SM-T700 model) and I made it compile Busybox as follows:

    • "Rooted" the tablet (acquired root access). This step is device-specific.
    • Installed the SuperSU application.
    • Installed the Termux application - it provides a small repository of essential tools: gcc-based toolchain, git, ncurses, etc.
    • Ran its terminal, installed packages I needed, pulled Busybox git tree.
    • Created a /bin symlink to /system/bin, to make #!/bin/sh scripts work (the build fails otherwise).
    • Now the usual "make defconfig", "make menuconfig", "make" work.

    Some parts won't compile (not all kernel headers are present, libc API different or incomplete, etc). The maximal config which did compile is now in the git tree, in configs/android_502_defconfig. The toolchain provided by Termux is based on Android's Bionic libc and Bionic has some design problems. An annoying one is that off_t is 32-bit, struct_stat::st_size is not off_t (this violates standard expectations), therefore CONFIG_LFS=y does not build, and CONFIG_LFS=n builds with warnings (printf'ing st->st_size with wrong specifier).

  • 24 March 2016 -- BusyBox 1.24.2 (stable)

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

    Bug fix release. 1.24.2 has fixes for build system (static build with glibc fixed), truncate, gunzip and unzip.

  • 24 October 2015 -- BusyBox 1.24.1 (stable)

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

    Bug fix release. 1.24.1 has fixes for ftpd (DIR parameter works for non-root too), httpd (heap overflow fix), sort (fix for a a problem affecting glibc build). Build system has a fix for the lost link-time optimizations. In 1.24.0 announcement, you might have noticed that sizes unexpectedly grew relative to 1.23.2. Now it is fixed:

       text    data     bss     dec     hex filename
     860126     486    7272  867884   d3e2c busybox-1.23.2
     869074     516    7364  876954   d619a busybox-1.24.0 (buggy link script)
     858906     486    7180  866572   d390c busybox-1.24.0 (fixed link script)
     858941     486    7180  866607   d392f busybox-1.24.1

    Check out a new applet, "uevent". It is a netlink listener. It provides alternative to having mdev as kernel hotplug helper. Instead of setting up the former via "echo /sbin/mdev >/proc/sys/kernel/hotplug", start "uevent mdev" early during boot. "uevent" will run "mdev" for each hotplug event, waiting for each child to terminate before starting a next one.

    The former method does not require a long-lived listener process, but it is racy: many copies of mdev can run in parallel.

  • 12 October 2015 -- BusyBox 1.24.0 (unstable)

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

    Sizes of busybox-1.23.2 and busybox-1.24.0 (with equivalent config, static uclibc build):

       text    data     bss     dec     hex filename
     860126     486    7272  867884   d3e2c busybox-1.23.2
     869074     516    7364  876954   d619a busybox-1.24.0

    I would like to feature some less-known useful tools in Busybox. Let me talk about "nmeter" applet. I find myself using it surprisingly often. For example, it helped me to correctly parallelize a very large multiple kernel build job (~30000 kernel builds) so that all CPUs are loaded, but machine isn't evicting file cache because it has too many jobs for installed RAM.

    When dealing with a machine which seems to be sluggish, it takes some time to pinpoint the cause. It can be lack of free memory. It can be excessive CPU load. It can be misbehaving (slow) storage or network. nmeter allows to monitor many such parameters and presents them in a compact one-line form. This lets you see the time evolution as well. Here is an example:

    # nmeter '%t %c x %x m %[mf] f%p p %[pn] b %b net%[neth0]'
    20:51:22 .......... x  837 m 2.2g f   0 p  377 b    0    0 net    0    0
    20:51:23 .......... x 1195 m 2.2g f   0 p  377 b    0    0 net  128    0
    20:51:24 .......... x 1687 m 2.2g f   0 p  377 b    0    0 net   64    0
    20:51:25 .......... x 1829 m 2.2g f   0 p  377 b    0    0 net  875   70
    20:51:26 U......... x 1567 m 2.2g f   6 p  377 b    0    0 net   64    0
    20:51:27 U......... x 1451 m 2.2g f   0 p  377 b    0    0 net   64    0
    20:51:28 .......... x 1332 m 2.2g f   0 p  377 b    0    0 net   64    0
    20:51:29 .......... x 1698 m 2.2g f   0 p  377 b    0    0 net   64    0
    20:51:30 .......... x 1640 m 2.2g f   0 p  377 b    0    0 net   64    0
    20:51:31 .......... x 1397 m 2.2g f   0 p  377 b    0    0 net   64    0
    20:51:32 .......... x 1244 m 2.2g f   0 p  377 b    0 4096 net   64    0
    20:51:33 U......... x 1660 m 2.2g f   0 p  377 b    0    0 net  128    0
    20:51:34 U......... x 1793 m 2.2g f   0 p  377 b    0    0 net   64    0
    20:51:35 .......... x 1583 m 2.2g f   0 p  377 b    0    0 net   64    0
    20:51:36 .......... x 1308 m 2.2g f   0 p  377 b    0    0 net   64    0

    If CPU load is high, the CPU bar will immediately show this. %x column shows context switches per second, allowing to detect cases where processes are waking and waiting on each other excessively. %[mf] is free memory, and it is smart enough to show actual usable memory: unlike many other tools, it considers buffer cache as free memory. %p and %[pn] columns show forks and number of processes, they let you detect a case where a daemon is respawning continuously. Two %b numbers are block IO read and write rates. %[neth0] is network IO rate on the specified interface. More specifiers exist - please read "nmeter --help" output.

    With -d MSEC option and small values of MSEC, this tool allows to see a detailed view of bursty activity. Sometimes you can literally see every network packet arriving. To make this possible, this tool is written so that it reads the minimum of informaion it needs from /proc. In this example, we can see how a packet arrived to eth0, complete with its IRQ#30 firing:

    # nmeter -d10 '%4t irq%30i net%[neth0]'
    21:07:58.2301 irq   0 net    0    0
    21:07:58.2401 irq   0 net    0    0
    21:07:58.2502 irq   0 net    0    0
    21:07:58.2601 irq   1 net   64    0
    21:07:58.2701 irq   0 net    0    0
    21:07:58.2802 irq   0 net    0    0
    21:07:58.2902 irq   0 net    0    0

    As you see, each update takes about 0.2 millisecond of processing time. You can run even -d1, if you want. -d0 also works, it is a mode where updates are continuous.

    On the other hand, with large update interval, you can run this tool continuously on a server machine and save its output, to be able to investigate mysterious drops in performance at a time when there was no operator present. If you have an oopsing server, it is useful to have another nmeter instance's output to be constantly printed to its console, if you want to see what was going on just before oops. "Is my server occasionally dies in an IRQ storm?" situation.

    Changes since previous release:

    Aaro Koskinen (3):
          gzip: add support for compression levels 4-9
          diff: fix -B with single line changes
          diff.tests: add testcases for -B and single line changes
    
    Adam Tkac (1):
          ntpd: relicense ntpd applet to ISC-style license
    
    Alex Dowad (1):
          ifupdown: 'prio' should have been 'metric' in static_up and static_up6
    
    Alexander Korolkov (1):
          arping: fix iface name in error messages
    
    Alfonso Ranieri (1):
          volume_id: fix a buglet introduced by is_prefixed_with() conversion
    
    Andrew Fuller (1):
          vi: basic undo feature shouldn't depend on yankmark
    
    Ari Sundholm (3):
          dd: add optional support for status=noxfer/none
          dd: move suffix struct to xatonum.c
          truncate: new applet
    
    Arthur Gautier (1):
          udhcpc: dns labels can actually start with a number
    
    Bartosz Golaszewski:
          Makefile: fix cscope target
          i2cget, i2cset, i2cdetect, i2cdump: new applets
          i2c-tools: fix 'i2cdetect -l'
          i2c-tools: only try /dev/i2c/* if opening /dev/i2c-* fails with ENOENT
          unit-tests: remove unnecesary field from struct bbunit_listelem
          unit-tests: remove code depending on WANT_TIMING
          Makefile: add missing libraries to LDLIBS
          libbb: add unit tests for is_prefixed_with()
          libbb: add a comment describing the way is_prefixed_with() works
          libbb: add is_suffixed_with() function
          i2c-tools: remove duplicate definitions
          i2c-tools: rename remaining defines
    
    Bernhard Reutner-Fischer (5):
          dc: tweak parsing
          wget: fix --header to not append duplicate headers
          *: Switch to POSIX utmpx API
          include: Fallback to UTMP unless there is UTMPX support
          adduser: Add -k /path/to/skel
    
    Christoph J. Thompson (1):
          iproute: don't hardcode the path to config files
    
    Clayton Shotwell (1):
          applets: add installation of individual binaries
    
    Daniel Thompson (1):
          libbb: enable support for !CONFIG_MULTIUSER
    
    Denys Vlasenko:
          truncate: new applet
          uevent: new applet
          build system: -fno-builtin-printf
          build system: make CONFIG_EXTRA_LDFLAGS go to LDFLAGS, not EXTRA_LDFLAGS
          build system: remove special-casing for extra libs
          examples/mdev_fat.conf: document that newer mdev exposes path
          update example ntp.script
          updated android_ndk_defconfig
          platform.h: add compat mempcpy
          platform.h: enable mempcpy for FreeBSD
          platform.h: mempcpy needs <string.h>
          libbb: add setsockopt_foo helpers
          libbb: auto_string() for efficient handling of temporary malloced stirngs
          libbb: code shrink by factoring out common update_utmp_DEAD_PROCESS
          libbb: introduce and use is_prefixed_with()
          libbb: make INET[6]_rresolve use sockaddr2{host,dotted}_noport
          libbb: make is_suffixed_with() return pointer inside string, not key.
          libbb: more compact API for bb_parse_mode()
          libiproute: use itoa() where appropriate
          libpwdgrp: fix a memory leak in getXXnam (we did not save address of string buf)
          libpwdgrp: fix counting of commas in group list
          libpwdgrp: getgrXXX: empty string is not a member name, do not store it
          libpwdgrp: reinstate Tito's optional atexit freeing
          libpwdgrp: store getXXnam result in a single malloc block
          libpwdgrp: use FAST_FUNC to make "matching ABI" optimization more likely to succeed
          libpwdgrp: use a better estimate of max struct size
          libpwdgrp: use getpwent() instead of getpwent_r()
          ash: a bunch of trivial simplifications
          ash: add tests adapted from hush glob tests. glob2.tests currently fails
          ash: explain what "local -" does
          ash: fix a SEGV case in an invalid heredoc
          ash: fix a SEGV in ${#1}
          ash: fix handling of duplicate "local"
          ash: make dowait() a bit more readable. Logic is unchanged
          ash: simplify "you have mail" code
          hush: add recent ash tests to hush testsuite too (they all pass for hush)
          hush: document buggy handling of duplicate "local"
          hush: fix a nommu bug where a part of function body is lost if run in a pipe
          hush: fix umask: umask(022) was setting umask(755)
          awk: support "length" form of "length()". Closes 8371
          dc: fix "dc p" printing bogus data
          deluser: also remove user from /etc/group
          deluser: implement --remove-home
          depmod: fix recent breakage in modules.dep generation
          dhcpd: fix an improper widening conversion
          diff: fix a bug in diffing against stdin. Closes 7784
          dpkg: update supported compression methods
          find: support "find . -delete" idiom - do not try rmdir(".")
          ftpd: change_identity() must be after chroot()
          ftpd: prevent zombies. Closes 7832
          gzip: speed up and shrink put_16bit()
          ifconfig: fix double free fatal error in INET_sprint
          ifplugd: discovered why it needed net/ethernet.h: just for ETH_ALEN
          inetd: fix order of array index check and array access
          ip: increased max ID for /etc/iproute2/rt_tables to 1023
          ipaddress: better formatting, no code changes
          less: improve regular file detection in line counting code
          ls: fix year 9999 bug :)
          mdev: if a "future" mdev.seq is seen, do not overwrite it with ours
          mdev: improve logging
          modinfo: fix fallout from basename removal
          modprobe-small: fix and simplify rmmod
          modprobe-small: fix recent breakage: modprobe -r was using full path
          modprobe-small: if concurrent module load did not succeed, wait
          modprobe: fix "modprobe devname:snd/timer" case (alias with a slash)
          modprobe: fix recent breakage: modules.dep reading code needs to strip dirname
          modprobe: revert checking for /, stop doing basename() on modprobe args
          ntpd: change help text about -l to say that it doesn't disable client code
          ntpd: get rid of G.initial_poll_complete
          patch: segfault fix. Closes 7916
          ping: fix recently introduced build breakage for non-optimizing builds
          ps: fix SEGV on narrow screens. Closes 8176
          remove global "jmp_buf die_jmp" from !FEATURE_PREFER_APPLETS builds
          route: fix bogus read error when route table is empty
          route: improve -A inet6
          runsvdir: (almost) close a signal race
          runsvdir: do not block SIGCHLD around poll/sleep
          runsvdir: if pid==1, also intercept SIGINT for -s SCRIPT
          sed: implement ",+N" range end
          sort: fix -kN,M handling (was including last separator into the comparison)
          ssl_helper: tweaks discovered while building 32-bit version
          sync: add support for -d -f FILE
          tar: do not try to decode GNU extended headers as pax headers
          tc: fix print_rate
          trim extra newlines in help texts
          udhcpc: fix for some Android toolchain breakage
          umount: always use umount2 syscall with specified flags
          unzip: prevent attacks via malicious filenames
          uudecode: tolerate text input with CR+LF line ends
          vi: make BACKSPACE and DELETE join lines at start/end of line
          wget: make openssl/ssl_helper choice configurable
    
    Eugene Rudoy (1):
          ash: consider "local -" case while iterating over local variables in mklocal.
    
    Felix Fietkau (1):
          find: fix regression in status processing for path arguments
    
    Frank Bergmann (1):
          ifupdown: correct ifstate update during 'ifup -a'. Closes 6212
    
    Guillermo Rodriguez (1):
          free: handle "cached" value too
    
    Isaac Dunham (1):
          mount: -T OTHERTAB support
    
    John Schroeder (1):
          udhcpd: account for script delay in lease
    
    Junling Zheng (1):
          chown: fix help text
    
    Kevin Wallace (1):
          libbb/loop: don't try to re-use existing loop device
    
    Linus Walleij (1):
          fbset: fix rgba parsing
    
    Maninder Singh (4):
          typo fixes
          fix if(p)/free(p) construct
          fix whitespaces
          Removes stray empty line from code
    
    Martin Kaiser (1):
          telnetd: we only need CONFIG_UNIX98_PTYS from the Linux kernel
    
    Matt Whitlock (4):
          Bionic lacks ttyname_r; provide a workaround
          Bionic lacks tcdrain; provide a workaround
          Bionic lacks mempcpy; enable existing workaround
          Conditionalize Bionic workarounds on __ANDROID_API__
    
    Michael Tokarev (1):
          ip addr: support change and replace commands
    
    Micke Prag (1):
          ubiattach: add option -O
    
    Mike Frysinger (3):
          trylink: use mktemp instead of hardcoding paths
          trylink: respect compiler settings when probing features
          echo: make escape sequences depend on fancy mode
    
    Natanael Copa (1):
          modprobe: fix modprobe -r and parsing of /etc/modprobe.d
    
    Peter Korsgaard (2):
          dmesg: add -r option to print raw format even when FEATURE_DMESG_PRETTY is enabled
          modprobe: handle module arguments containing spaces
    
    Phil Sutter (1):
          logread: implement dumpfollow mode of operation
    
    René Rhéaume (1):
          swaponoff: add support for -e
    
    Rich Felker (1):
          gzip: do not store timestamp in gzip header
    
    Ron Yorston:
          libbb: remove unnecessary argument to nonblock_immune_read
          libbb: add a function to make a copy of a region of memory
          ash: do not split the result of tilde expansion
          ash: code shrink around varvalue
          ash: perform tilde expansion in all parameter expansion words
          ash: do not expand tilde in parameter expansion within quotes
          ash: remove superfluous code in arithmetic mode
          ash: remove arithmetic expansion collapsing at parse time
          ash: move parse-time quote flag detection to run-time
          ash: fix breakage of ${v/pat/str}
          ash: remove parsebackquote flag
          ash: use alloca to get rid of setjmp
          ash: fix slash treatment in expmeta
          less: document -S flag and make it independently configurable
          less: fix display of line numbers
          less: correctly account for tabs when rewrapping lines
          less: improvements to verbose status messages
          less: fix numeric input
          less: move code to count lines into a separate function
          less: rearrange detection of non-regular files
          less: add a function to detect when display is at end of file
          less: fix line number confusion
          less: allow use of last column of terminal
          less: further tweaks to regular file detection
          less: fix botched attempt to use last column
          vi: failure to open file is not an error when initialising buffer
          vi: fix reading of file after last line
          od: fix printing of high-bit chars
          uname: make OS name configurable
          ipcalc: fix trivial usage message
    
    Serj Kalichev (1):
          acpid: fix logging
    
    Sören Tempel (1):
          login: don't print motd if .hushlogin exists in users home
    
    Thiago Jung Bauermann (2):
          libarchive: auto-detect .Z files as well
          bzcat.tests: Run both .gz and .bz2 tests, and add .Z tests
    
    Tito Ragusa (4):
          libpwdgrp: rewritten to use malloced implementation
          libpwdgrp: line counting in error meesages is broken, remove it
          libpwdgrp: fix thinko in getpwnam
          libbb: another unit test for is_suffixed_with
    
    Vladislav Grishenko (1):
          zcip: fix wrong comparison of source IP with our IP
    

  • 23 March 2015 -- BusyBox 1.23.2 (stable)

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

    Bug fix release. 1.23.2 has fixes for dc (more tolerant to lack of whitespace), modinfo (was not ignoring directory component of path names in a few places), modprobe (better compatibility for "rmmod" alias), wget (--header now overrides built-in headers, not appends to).

  • 27 January 2015 -- BusyBox 1.23.1 (stable)

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

    Bug fix release. 1.23.1 has fixes for ash (fixed a problem with ${#N} expansion), ftpd (fixed "zombie apocalypse"), modprobe (was not ignoring directory component of path names in a few places), vi.

  • 23 December 2014 -- BusyBox 1.23.0 (unstable)

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

    Sizes of busybox-1.22.1 and busybox-1.23.0 (with equivalent config, static uclibc build):

       text	   data	    bss	    dec	    hex	filename
     873357	    489	   7072	 880918	  d7116	busybox-1.22.1
     876323	    490	   7072	 883885	  d7cad	busybox-1.23.0

    Changes since previous release:

    Aaro Koskinen (2):
          less: make -E work
          install: implement -t DIR
    
    Ari Sundholm (2):
          df: implement -T option
          df: fix -T option when ENABLE_FEATURE_HUMAN_READABLE=0
    
    Bartosz Golaszewski (17):
          gitignore: ignore files generated by 'make test'
          sort: remove a magic number from compare_keys()
          sort: check global flags on fallback sort
          ntpd: fix compilation warnings
          top: fix compilation warnings
          grep: properly handle grep -w "^str" in !EXTRA_COMPAT case too
          Kbuild: move CONFIG_PAM to general configuration
          shuf: fix a segfault on 'shuf -e'
          shuf: improve help text
          docs: update new-applet-HOWTO.txt
          find: add optional support for '-exec ... {} +'
          libbb: use a wrapper around sysconf(_SC_CLK_TCK) to save a few bytes
          unit-tests: implement the unit-testing framework
          Rename INIT_LAST to INIT_FUNC to avoid confusion
          gitignore: add testsuite/echo-ne
          libbb: use sendfile() to copy data between file descriptors
          Config: select PLATFORM_LINUX if using sendfile()
    
    Baruch Siach (2):
          nandwrite: fix build when long options are disabled
          nanddump: don't show --bb in usage when disabled
    
    Bernhard Reutner-Fischer (1):
          libbb: provide usleep() fallback implementation
    
    Cristian Ionescu-Idbohrn (1):
          tail: adjust help/usage texts
    
    David Marchand (1):
          modinfo: fix module parsing with kernel >= 2.6.37
    
    Denys Vlasenko:
          *: add conditional support for -v / --verbose
          *: exit with 127 if applet name wasn't found - it's more POSIXy
          ash,hush: do not segfault on $((2**63 / -1))
          ash,hush: fix a thinko about 2^64-1 factorization
          ash,hush: improve randomness of $RANDOM, add easy-ish way to test it
          ash,hush: run reinit_unicode() only if makes sense
          ash,hush: set $HOSTNAME is bash compat. Closes 7028
          ash: factor out ASH_HELP config option
          ash: fix handling of negative start value in ${v:start:len}
          ash: fix off-by-one in "jobs %4" handling. Closes 7310
          ash: in bash compat mode, always export $SHLVL
          ash: make "local VAR" unset VAR (bash does that)
          ash: make ${#var} unicode-aware
          awk: fix handling of "if ... break ; else ..." - closes 7226
          crond: implement "SHELL=prog" in crontab. Export LOGNAME as POSIX wants
          crond: simplify logging code
          du, copy_file: fix file matching on cramfs. Closes 5456
          fakeidentd: simplify ndelay manipulations
          false: make "false --help" exit with 1
          find: exit code fixes for find -exec
          find: fix a regression introduced with -HLP support
          find: support -perm /BITS. Closes 7340
          find: use sysconf(_SC_ARG_MAX) to determine the command-line size limit
          ftpd: do not use root_fd if we are not in chroot
          ftpd: escape chroot prior to re-executing ls helper
          ftpd: for LIST, open current directory *in the child*
          ftpd: make LIST command show dotfiles too
          ftpd: support deprecated XPWD command
          getty: set tty attrs so that control chars are shown as ^c
          grep: fix "grep -r PATTRN SYMLINK_TO_DIR"
          grep: fix -w match if first match isn't a word, but second is. Closes 4520
          grep: fix two bugs with -w
          hush: make "true" built-in
          hush: make ${#var} unicode-aware
          hwclock: fix setting of tz_minuteswest. Closes 5414
          init: do not run shutdown/reexec actions from signal handler
          init: if libc-based Unicode support is on, run setlocale(LC_ALL, "") at startup
          ip link: add support for "address ETHADDR". Closes 4862
          less: accept and ignore -s
          less: disable "suppress empty wraparound" optimization
          less: fix bugs discovered with "git log -p | less -m" on kernel tree
          less: move "retry-on-EAGAIN" logic closer to read ops
          libarchive: add capability to unpack to mem.buffer
          libarchive: open_zipped() does not need to check extensions for e.g. gzip
          libbb/obscure.c: code shrink. Suggested by Tito.
          libbb: FreeBSD fix for B<num> baud rate constants not fitting into a short
          libbb: don't die if crypt() returns NULL
          libbb: fix a bad check for uclibc >= 0.9.31
          libbb: fix bb_ask() to flush input before prompt, not after. Closes 7190
          libbb: fix compile failure if both ARG_MAX and _SC_ARG_MAX are defined
          libbb: fix empty PATH components handling
          libbb: fix parsing of "10101010" date/time form
          libbb: fix thinko in rtc_xopen()
          libbb: if opening /dev/loopN returns ENXIO, don't try N++
          libbb: make rtc_xopen try harder on EBUSY
          libbb: make syslog level for bb_error_msg's configurable. use it in crond
          libbb: open_zipped() should not fail on non-compressed files
          libbb: use ARG_MAX for bb_arg_max() only if it's 60k+
          lineedit: don't fall back to simple line input if tty is in raw mode
          ls: make "ls -s DIR" show total too. Closes 4946
          lzop: add overflow check
          make xmalloc_open_zipped_read_close result NUL terminated
          man: accept a list of dirs in $MANPATH
          man: default to ascii
          man: do not mangle $MANPATH in memory
          mdev: treat zero-length /dev/mdev.seq the same as "\n" one. Closes 7334
          modprobe,rmmod: reject module names with slashes
          modprobe-small: (un)load all modules which match the alias, not only first one
          modprobe-small: fix help messages for aliased module-related applets
          modprobe-small: fix safe_strncpy truncating last char of module name
          modprobe-small: remove redundant aliases from modules.dep.bb
          nc: fix option bit positions. Closes 6926
          networking/ssl_helper: experimental matrixssl-based ssl helper
          networking: explain isrv_run() API
          ntpd: add optional support for /etc/ntp.conf
          ntpd: add support for -I IFACE
          ntpd: adjust last packet's recv time after a step
          ntpd: be less eager to use shorter poll intervals
          ntpd: fix wrong delay value in one of the printed messages
          ntpd: remove now unnecessary check for IP_PKTINFO definition
          ntpd: truly ignore high delay packet
          ping: revert "try SOCK_DGRAM if no root privileges"
          platform.h: undef HAVE_STRCHRNUL only on correct versions of FreeBSD
          rtcwake: fix incorrect (reversed) rtc/sys adjuestment; code shrink
          script: make it work even if fd 0 is closed
          sed: fix "sed CMD -i nonexistent_file". Closes 7484
          sed: fix a buglet in s///NUM handling
          sendmail: make -f optional, document its default value
          sha3: add 32-bit optimized bit-sliced implementation
          sha3: code shrink (and speedup for SHA3_SMALL=0)
          shuf: new applet
          sysctl: do not error out showing write-only data. Closes 6386
          syslogd: make "-O -" log to stdout
          tar: fix "tar -cJ" ignoring -J option. Closes 7706
          tar: tighten up pax header validity check
          taskset: fix logic error in "if it doesn't start with 0x..."
          taskset: support CPU masks for more than 64 CPUs
          test: fix mishandling of "test '(' = '('" and similar
          tftpd: support full 512-byte requests
          tftpd: tweak HP PA-RISC firmware bug compatibility
          top: fix memset length (sizeof(ptr) vs sizeof(array) problem)
          trylink: emit names of linked executables
          ubiupdatevol: fix -t to not require an option. Closes 7466
          udhcpc: account for script run time
          udhcpc: don't use BPF filter, users report problems (bugs 4598, 6746)
          udhcpc: fix BPF filter. Hopefully fixes the root cause of 4598 and 6746
          udhcpc: ignore NAKs from "wrong" servers. Closes 4267
          udhcpc: in comments, explain the kind of raw socket we create
          udhcpc: make hostname sanitization optional. Closes 3979
          udhcpd: if a lease from lease file coincides with a static one, ignore it
          vi: clear undo buffer when we change to another file
          vi: fix incorrect memory access on brace matching. Closes 7256
          wget: add commented-out code to use ssl_helper instead of openssl
          wget: add support for https using "openssl s_client" as a helper
          wget: fix a case where progress bar isn't updated if writes are very slow
          wget: fix use-after-free of ->user. Closes 6836
          xargs: add support for -I and -i. Closes 493
          zcat: complain if input is not compressed
    
    Drew Moseley (1):
          build system: specify '-nostldlib' when linking to .o files
    
    Eugene Rudoy (1):
          iplink: fix build with kernel versions prior to 2.6.23
    
    Florian Fainelli (1):
          ping: add -p to specify data pattern
    
    Isaac Dunham (1):
          unlink: new applet
    
    Jacob Kjaergaard (1):
          flashcp: change BUFSIZE to 4k
    
    Jeremy Kerr (1):
          udhcp: add PXELINUX path prefix option (code 210) definition
    
    Jody Bruchon (1):
          vi: undo support for vi with intermediate queuing
    
    John Spencer (1):
          man: parse "DEFINE pager" in config
    
    Joshua Judson Rosen (5):
          syslogd: avoid spurious ftrunctate() calls for "-b 0"
          syslogd: remember to un-writelock log-files even when called with "-b 0"
          syslogd: Unify unlink/truncate + unlock log-rotation logic
          syslogd: syslogd: don't *decrement* log_file->size on write failures
          syslogd: make "reopen log file every second" logic work for multiple logs
    
    Kaarle Ritvanen (2):
          ifupdown: support 'link' address family
          sendmail: use FQDN in default envelope sender
    
    Ken Sharp (1):
          zcip: fix link-local IP conflict detection
    
    Matt Whitlock (3):
          avoid calling bb_strtou twice in MIN macro expansion
          fix interaction of -a and -p options in swapon
          add discard option -d to swapon
    
    Matthias Andree (1):
          build system: fix non-portable sed constructs.
    
    Michael Gernoth (1):
          stat: fix printing selinux context and null-dereference
    
    Michael Tokarev (3):
          testsuite: fix last "which" change
          init: do not fail build if SIGPWR is not defined
          iproute: support onelink route option and print route flags
    
    Michel Stam (3):
          udhcpd: add option for tweaking arpping
          zcip: allow our own class B range to be used for ZeroConf
          zcip: Add environment variable for overriding log functionality
    
    Mike Frysinger (2):
          uname: fix up usage documentation
          appletlib: fix set-but-unused warning
    
    Miroslav Lichvar (4):
          ntpd: don't wait for good offset before disabling burst mode
          ntpd: split out poll adjusting code
          ntpd: don't stay at short polling interval
          ntpd: calculate offset to jitter ratio before updating jitter
    
    Morten Kvistgaard (1):
          ftpd: add optional support for authentication
    
    Pascal Bellard (1):
          fatattr: new applet
    
    Peter Kümmel (1):
          Make it possible to override LOGIN_FAIL_DELAY in CONFIG_EXTRA_CFLAGS
    
    Richard Genoud (4):
          nanddump: correct rounding to next page (lead to infinite loop)
          nanddump: add options --bb=skipbad and padbad
          nanddump: kill -b Omit bad block
          nanddump: change default to --bb=skipbad
    
    Romain Naour (1):
          su: add a delay if the password is incorrect
    
    Ron Yorston (1):
          lineedit: don't block when looking for escape sequence in vi-mode
    
    Ryan Mallon (1):
          fakeidentd: fix use-after-free
    
    Timo Teräs (1):
          top: fix and merge code to parse /proc/meminfo
    
    Tito Ragusa (4):
          adduser,addgroup: introduce and use CONFIG_LAST_ID
          swapon/swapoff: size reduction, cleanup, fixes, improvements
          swapon/swapoff: -a returns 0 on ignored errors
          which: rewrite
    

  • 20 January 2014 -- BusyBox 1.22.1 (stable)

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

    Bug fix release. 1.22.1 has fixes for find (was requiring the path argument in some cases, unlike GNU find), grep (fixes for -w handling), ntpd (wasn't slewing time after large negative step), compile fixes for some configurations.

  • 1 January 2014 -- BusyBox 1.22.0 (unstable)

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

    Sizes of busybox-1.21.1 and busybox-1.22.0 (with equivalent config, static uclibc build):

       text    data     bss     dec     hex filename
     891522     497    7584  899603   dba13 busybox-1.21.1
     893754     497    7568  901819   dc2bb busybox-1.22.0

    Changes since previous release:

    Aaro Koskinen (9):
          fdisk_sun: fix corrupted partition data with blank disk
          fdisk_sun: fix partition alignment
          sendmail: avoid sending mail to wrong addresses
          sendmail: don't mangle e-mail headers
          sendmail: support addresses inside angle brackets
          sendmail: support address lists
          sendmail: support long header fields for recipients
          sendmail: don't add To: header if it already exists
          sendmail: don't add multiple To: headers
    
    Alexander Shiyan (2):
          nanddump: fix build if nandwrite isn't enabled
          flash_eraseall: implement -N
    
    Bartosz Golaszewski (6):
          grep: don't bail out on first mismatch if '-w' option is set
          networking: code shrink
          date: accept 'yyyy-mm-dd HH' and 'yyyy-mm-dd' date formats
          Refactor catv. Move visible() from stty to libbb.
          tail compat: fix header printing for tail -f
          bloat-o-meter: add usage info
    
    Bernhard Reutner-Fischer (11):
          awk: Fix handling of functions with empty body
          setserial: Fix typo: s/baund_rate/baud_rate/g
          chrt: remove warning for _POSIX_PRIORITY_SCHEDULING
          buildsys: Add helper to list suid applets
          awk: Fix handling of functions with empty body
          swaponoff: shrink
          ash: Use setvar2 some more
          ash: Set SHLVL in ASH_BASH_COMPAT
          fstrim: -17b
          fstrim: Indicate failure on error
          fstrim: Needs to fire at the mp, not bd
    
    Bernhard Walle:
          pgrep: fix -x option
    
    Bogdan Purcareata:
          init: halt on SIGPWR too
    
    Cristian Ionescu-Idbohrn:
          foo*sum: Correct syntax error
    
    Cédric Cabessa:
          syslogd: use _PATH_LOG when available
    
    Daniel Borca (4):
          platform: strchrnul is missing if __APPLE__
          dpkg-deb: cosmetic correction to usage text
          ping: try SOCK_DGRAM if no root privileges
          build system: fix make gconfig
    
    David A. Wheeler (2):
          sed: accept -E as a synonym for -r
          sed: accept s///i as a synonym for s///I ("ignore case")
    
    Denys Vlasenko:
          Call setlocale("") , not "C", if we want to set the default one
          Commonalize typical [b,]k,m suffix struct
          Make smart_ulltoa return pointer to end (allows for code shrink in callers)
          Makefile.custom: make "make release" delete .gitignore files too
          Move create_icmp[6]_socket to its only user, and simplify it
          Use unsigned printf/scanf conversion where more appropriate
          adduser: check whether run with no USERNAME. Closes 6728
          awk: fix a bug in argc counting in recent change
          awk: fix length(array)
          awk: use "long long" as integer type, not "int"
          bootchartd: warn if .config looks wrong
          build system: use od -b instead of od -t x1
          bunzip2: fix off-by-one check
          chpst: fix a bug where -U USER was using wrong USER (one from -u USER)
          cryptpw: do not segfault on EOF. Closes 6350
          dd: do not reuse local variables for unrelated values
          dd: fail if swab is attempted on odd-sized block
          dd: support conv=swab
          decompress_unlzma: 10% speedup in "small" code
          decompress_unlzma: make "fast" version a bit smaller
          devfsd: remove static variable
          ether-wake: shorten help text, reduce packet buffer size
          find: support -HLP
          find: get rid of nested function (it's a gcc-ism)
          fix assorted unused code and wrong format specs found by cppcheck (bug 6716)
          fix build error with musl libc due to if_slip.h
          fix error message on failure to open /dev/null; fix zcat's help text
          flashcp: pad output to BUFSIZE. Hopefully closes 5882
          foo*sum: report I/O errors, don't merely exit with 1
          head,tail: use common suffix struct. simplify help text
          head: support -n -NUM and -c -NUM
          hexdump: don't unconditionally limit the usable address range
          hexdump: need to use xstrtoull for off_t
          hostid: do not output sign-extended host id. Closes 6056
          httpd: don't allow tabs and multiple spaces in request string
          httpd: make sure pfd[TO_CGI].revents is cleared before poll()
          httpd: treat errors from stdin correctly.
          hush: fix build failure if FEATURE_EDITING=y && !HUSH_INTERACTIVE
          hush: fix for "while false && true; do echo BUG; break; done". Closes 6170
          hush: source builtin should override $N only if it has args
          hush: typo fixes in comments
          ifplugd: make -k send SIGINT, not SIGQUIT
          ifupdown: support "source" stanza in /etc/network/interfaces
          init: don't use fixed size buffer for command
          init: remove special-case code for machines with less tham 1 MB of RAM
          iplink: comment out include <net/if_packet.h>
          iplink: fix build error (IFLA_VLAN_PROTOCOL defined before include)
          less: support "less 1<>TTY"
          libbb: introduce and use strftime_[YYYYMMDD]HHMMSS()
          lineedit: \W on "/bin" should show "bin", not "/bin"
          lineedit: add handling of \H in prompt
          lineedit: fix multi-line PS1 handling: calculate PS1 length from last \n
          lineedit: implement \T \t \A \@ prompts escapes, fix \W escape, drop \!
          lineedit: improve Unicode handling (still buggy though)
          lineedit: use unicode_strwidth instead of unicode_strlen
          loadkmap: explain what happens with K_ALLOCATED key value
          logread: don't call shmdt() before exit, kernel does it for us
          logread: flush output. Closes 6710
          logread: intercept all fatal signals, not just SIGINT
          losetup: assorted fixes. Closes 6314
          lzop: fiq -q and OPTION_DECOMPRESS mismatch
          make --help return exitcode 0. Closes 5612
          man: install to /usr/bin, not /sbin
          md5/sha512: a better fix for strict aliasing warnings
          mdev: add environment variable match
          mdev: call index_in_strings on $ACTION only after we checked it for NULL
          mdev: chdir back to /dev after trying to read firmware
          mdev: extend debug logging output
          mdev: improve $SEQ handling; improve debug logging
          mkfs_minix: use get_volume_size_in_bytes instead of local version
          nc: don't redirect stderr to network in -e PROG mode
          nc: exit when both stdin and network are closed
          nc: fix build failure ("subscripted value is neither array nor pointer")
          nc: remove some dead code
          nc: remove unnecessary "errno = 0"
          nc: use symbolic SHUT_WR instead of literal 1
          nc_bloaty: support -ll and -lk. Closes 2245
          nslookup: set default DNS server again. Hopefully helps with 675
          ntpd: do not invalidate datapoints after step
          ntpd: drop delay outliers; run "unsync" handler if no replies for some time
          ntpd: let user know if spike was detected
          ntpd: make "unsync" code actually work
          ntpd: promote log level 3 to production
          ntpd: set G.last_script_run even if script isn't configured
          ntpd: set offset to 0.0 in "unsync" event
          ntpd: speed up resyncing if our clock is seriously off
          ping[6]: accept and ignore -n. Code shrink
          ps: fix sscanf format specifier (%l); make uptime unsigned
          ps: seconds_since_boot: uint64_t -> ulong
          pstree: fix theoretically unsafe code
          rfkill: use new-style config/kbuild/applet
          rpm: make -ql display more compatible; improve help text
          rpm: stop using statics; move main() to the end of the source file
          rpm: unmap rpm file before working with next one
          rpm: use "create+rename" method of replacing existing files
          run-parts: stop providing incompatible short options
          sed: document where we are more liberal then GNU
          sed: fix "sed clusternewline" testcase
          sed: fix matching of newlines by $
          sed: fix memory leak in 'r FILE' command
          sed: open input files sequentially to avoid EMFILE
          sed: remove now-redundant backslash-newline handling
          stty: disable CIBAUD leak check - it is not necessary on Linux
          sulogin: use common password-checking routine
          tail: track file size only in -f mode
          tar: add a testcase for previous commit
          tar: fix exitcode check for MMU-spawned unpacking helpers
          tar: prevent empty file to be treated as valid tarball
          testsuite: fix false positives for du
          touch: add conditional support for -h
          ubi_tools: add forgotten argv++
          ubi_tools: enhance -s option to allow size multiplier to match mtd-utils
          ubi_tools: extend supported volume size to 64 bits; shrink code
          udhcpc6: fix port numbers used if !FEATURE_UDHCP_PORT
          udhcpc: allow zero server-id. Closes 6614
          udhcpc: fix a problem with binary-encoded options #2
          udhcpd: add -I LOCAL_ADDR option
          unicode: check $LC_ALL to detect Unicode mode, not only $LANG
          unicode: check $LC_CTYPE too to detect Unicode mode
          unpackers: by users' request, print compression percentage if -v and DESKTOP
          unzip: increase PEEK_FROM_END from 16k to 64k
          unzip: survive lack of CDF on non-streaming zip files
          vasprintf: do not use xmalloc, it will deadlock on OOM
          vasprintf: return -1 on strdup failure
          vi: make regexp search case-insensitive if ":set ignorecase" is active
          volume_id_internal.h: drop unoptimized byteswap routines
          wall: access FILE under real user's credentials
          wget: do not abort if "_" is encountered in a HTTP header
          zcat: fix "zcat FILE" trying to do detection twice
          zcat: if seamless uncompressors are defined, autodetect file's format
    
    Flemming Madsen:
          ash,hush: history builtin
    
    Guilherme Maciel Ferreira (2):
          traceroute: free some memory allocated by xzalloc()
          wget: if FEATURE_CLEAN_UP, free(ptr_to_globals)
    
    James Hogan:
          grep: fix grep -x to not set REG_NOSUB
    
    Jeremy Kerr:
          udhcp: add PXELINUX config file option (code 209) definition
    
    Jody Bruchon:
          fdisk: fix GPT size math errors
    
    Johannes Stezenbach:
          udhcpc: make DHCP packets to have at least 300 DHCP bytes
    
    John Spencer:
          man: find posix man pages
    
    Jonathan Liu:
          sulogin: allow system maintenance login if root password is empty
    
    Kang Kai:
          testsuite/du/du-k-works: fix false positive
    
    Kuleshov Aleksey:
          arp: fix -H/-t handling.
    
    Lasse Collin (11):
          xz: omit explicit \0 from HEADER_MAGIC
          xz: update README
          xz: avoid "NOTE:" in xz.h
          xz: add a comment about using uint32_t as vli_type
          xz: make bcj_x86_test_msbyte() an inline function
          xz: remove an empty line from xz_dec_lzma2.c
          xz: add C++ support to xz.h
          xz: fix decoding of LZMA2 streams having no uncompressed data.
          xz: fix incorrect XZ_BUF_ERROR
          xz: mention xzminidec.c in README
          xz: support concatenated .xz streams
    
    Lauri Kasanen (2):
          wget: add support for connect timeout
          wget: user-friendly fallback to http
    
    Leonid Lisovskiy:
          xz: fix put_unaligned_{l,b}e32
    
    Malek Degachi:
          fstrim: New applet
    
    Mandeep Singh Baines:
          losetup: fix util-linux compatibility
    
    Michael Tokarev (4):
          fix bashisms in testsuite/
          expand: use printable_string instead of hard-coding implementation
          do not fail build if MAXSYMLINKS isn't defined
          hostname: do not use gethostbyname() for "hostname -s"
    
    Mike Frysinger (12):
          udhcpc: support resolv.conf symlinks
          udhcpc: tweak math shell style with the metric var
          bbunzip: ignore the -q flag with the decompressors
          bbunzip: fix order of flags vs bit defines
          archival: note implicit dependencies between lzop & bbunzip
          udhcpc: use readlink rather than realpath
          platform: use KERNEL_VERSION to simplify uClibc version checking
          readlink: uClibc supports automatic allocation too now
          readlink: note that our -f is really -e
          pstree: stop truncating thread names
          md5/sha512: fix strict aliasing warnings
          trylink: only prefix libs with -l
    
    Nicolas Dichtel:
          networking: fix potential overflow in ife_print6()
    
    Nikolaus Voss:
          mdev: use $DEVNAME in uevent sysfs file for device node name
    
    Oliver Metz:
          volume_id: fix ntfs attribute search
    
    Patrick McHardy:
          ip link: add VLAN support
    
    Paul B. Henson (2):
          ubimkvol: add -m option to create volume of maximum size
          ubi_tools: fix typo in strcpy
    
    Paulius Zaleckas:
          init: don't srop unterminated processes' entries during inittab reload
    
    Peter Korsgaard (3):
          run-parts: add --exit-on-error | -e support
          run-parts: fix unicode creep in --help
          ar: read_num(): fix reading fields using the entire width
    
    Rich Felker:
          *: change execl sentinels from NULL to (char*)0
    
    Ron Yorston:
          vi: fix adjustment of buffer on partial file read
    
    Ryan Mallon (2):
          libbb: Add xsetegid(), xseteuid(), xopen_as_uid_gid() functions
          wall,crontab: use xopen_as_uid_gid()
    
    SASAKI Suguru:
          tar: fix tar -T to add entries in the exact order as the input list
    
    Shawn J. Goff:
          lineedit: initialize delptr
    
    Stefan Hellermann (2):
          ash: move code to allow setting $HOME in /etc/profile
          ash: read $HOME/.profile instead of $(pwd)/.profile
    
    Sven-Göran Bergh (5):
          volume_id: Adopt to new kbuild style.
          volume_id: Adopt to new config style.
          volume_id: nilfs config description.
          volume_id: add f2fs detection
          awk: optionally support -e AWK_PROG
    
    Thomas De Schampheleire (2):
          nameif: fix use-after-free in ENABLE_FEATURE_CLEAN_UP code
          lsof: correct check for symbolic link
    
    Thomas Petazzoni:
          libbb: use <poll.h> instead of <sys/poll.h>
    
    Tito Ragusa (2):
          ifplugd: use a larger netlink buffer
          swapon: support "pri=NNN" in fstab
    
    Uros Vampl:
          killall5: return 2 if no processes got killed
    
    Yuan-Hsiang Lee:
          init: fix illegal memory access when max message length is reached
    

  • 29 June 2013 -- BusyBox 1.21.1 (stable)

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

    Bug fix release. 1.21.1 has fixes for ntfs detection (big-endian fix), xz decompression of concatenated streams, mdev acquired a [ENV=regex;] extension instead of undocumented subsystem match hack it used to have prior to 1.21.x.

  • 21 January 2013 -- BusyBox 1.21.0 (unstable)

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

    Sizes of busybox-1.20.2 and busybox-1.21.0 (with equivalent config, static uclibc build):

       text    data     bss     dec     hex filename
     895377     497    7584  903458   dc922 busybox-1.20.2
     897317     497    7584  905398   dd0b6 busybox-1.21.0

    Changes since previous release:

    Alexey Froloff (1):
          udhcpc: gracefully handle packets with CHECKSUM_PARTIAL
    
    Andreas Oberritter (2):
          ifupdown: improve compatibility with Debian
          get_linux_version_code: don't fail on Linux version strings like "3.0-foo"
    
    Anthony G. Basile (2):
          build system: fix build failure when only gunzip is selected
          CONFIG_PID_FILE_PATH: new configuration option for pidfile paths
    
    Aurelien Jarno (1):
          *: declare strings with ALIGN1, as appropriate
    
    Baruch Siach (3):
          nanddump: use the right operator of logic AND
          nanddump: skip bad blocks when instructed to do so
          nanddump: invert the meaning of the -o parameter to match upstream
    
    Bernhard Reutner-Fischer (1):
          mount: fix -o user=foo mishandling, fix unc= generation, add prefixpath=
    
    Bernhard Walle (1):
          build system: fix build of kconfig on Darwin
    
    Boris Reisig (1):
          tar: support -J, --xz explicit compression option
    
    Bradley M. Kuhn (1):
          Simplify copyright/license notice that appears in the binary
    
    Christoph Lohmann (1):
          mdev: tell kernel that we didn't find the firmware
    
    Cliff Frey (1):
          lineedit: fix Alt-D when cursor==0
    
    Dennis Groenen (1):
          lineedit: histfile can get emptied when CONFIG_FEATURE_EDITING_SAVE_ON_EXIT=y
    
    Denys Vlasenko:
          build system: stop .eh_frame generation
          build system: fix build failure when compressed help is selected, but bz2 compression is not
          scripts/kconfig/mconf: work on systems w/o SIGWINCH
          platform.h: disable ALIGNn macros for s390[x]
          adduser: install to /usr, not /, like all other similar tools
          ash: fix "read -s" + ^C. Closes 5504
          ash: fix a bug in >${varexp} handling. Closes 5282
          ash: implement export -n
          ash: revert wrong "fix" for an apparent memory leak. Closes 5822
          awk: fix FS assignment behavior. Closes 5108
          awk: make -F STR interpret escape sequences. Closes 5126
          brctl: fix build failure by s/strtotimeval/bb_strtotimeval/ (android has strtotimeval)
          busybox: tweak help text and copyright year
          decompress_uncompress: comment out debug printout on corrupted data
          decompress_uncompress: move 'code' variable into loop - sole user
          dhcpd: write lease file on exit
          dpkg: fix creation of .list files (were empty since b768aeb). Closes 5324
          du: document incompatibility with standard tool
          examples/mdev_fat.conf: small addition
          find: if DESKTOP=y, support -wholename (synonym for -path)
          find: make -mindepth N -xdev correctly stop on mountpoints
          ftpd: fix MDTM's month value. Closes 5336
          ftpd: free allocated string on error path
          getty: fix for NOCTTY killing us with SIGHUP
          grep: fix grep -Fw not respecting the -w option. Closes 5792
          ifconfig: do not accept "ifconfig eth0 up 1.2.3.4/17" (ip with mask). Closes 5786
          libbb: correctness/size tweaks in signal-related helpers
          lineedit: in !EDITING config, return -1 on fgets error
          login: increase login name size limit from 32 to 64
          lpr: don't send 0-byte print jobs (compat)
          man: fix handling of gzipped manpages
          mdev: add support for $DEVNAME and /dev/mdev.log debug aid
          mdev: fix mode of dir1 in =dir1/dir2/file rule
          mdev: remove undocumented subsystem/devname matching hack
          mdev: when found, print major,minor into mdev.log
          modprobe_small: make rmmod to NOT remove dependencies. Closes 5162
          mount: do not pass "comment=ANYTHING" option to kernel. Closes 5240
          mount: fix the wrongly stored fs creation time
          mount: set up RO loop device if mount -o ro. Closes 4784
          mount: support strictatime option. Closes 5240
          ntpd: on time step, kill all outstanding replies from other peers
          sed: fix handling of s/// which has empty matches
          sed: fix zero chars match/replace
          sha3: make size/speed optimization decision configurable
          syslogd: do not segfault on parse error when using default config. Closes 5762
          telnet: convert CR -> CR LF, not CR -> CR NUL when sending data to server
          telnet: convert Enter -> CR LF in line mode too
          tftpd: fix -u USER to work with chroot. Closes 5348
          top/ps: argv0:"gdm-session-worker [pam/gdm-password]" == comm:"gdm-session-wor"
          top: do not touch stdin if -b
          top: fix "last CPU" parsing
          top: implement scrolling up/down (_very_ useful)
          udhcp[cd]: fix binding to network aliases. Closes 5432, 5438
          udhcpc: make -O <numeric_opt> work. Closes 5402
          udhcpc[6]: show select timeout in log
          unzip: make options parsing more robust on getopt w/o gnu extensions
          vi: do not set autoindent by default
          vi: nuke FEATURE_VI_OPTIMIZE_CURSOR
          vi: save/restore screen upon invocation
          volume_id/ext: detect ext4 too
          wget: correctly handle failure to -c (continue)
          wget: make -c _not_ truncate the file
          wget: reorder fread and poll: poll only if fread returns EAGAIN. Closes 5426
          wget: try reading after poll timeout - stdio may have buffered data. Closes 5426
    
    Eric Martin (1):
          acpid: add missing lid switch definition
    
    Etienne Le Sueur (1):
          tar: fix 256-bit encoded number decoding
    
    Felix Fietkau (1):
          udhcpc[6]: allow discover_retries == 0 (infinite)
    
    Jon Tollefson (1):
          ash: fix a memory leak
    
    Joshua Kahlenberg (1):
          sysctl: implement -q
    
    Lauri Hintsala (1):
          powertop: fix error message
    
    Lauri Kasanen (1):
          sha3sum: new applet
    
    Linus Walleij (2):
          fbset: respect rgba configuration lines in fb.modes
          fbsplash: support non-RGB565 pixels in 16-bit mode
    
    Manuel Zerpies (1):
          flashcp: remove unused variable opts
    
    Martin Santesson (1):
          mount: add unc option to CIFS mount (needed for Linux 3.4+)
    
    Matt Reimer (1):
          nanddump: make dumping read-only partitions work
    
    Michael Tokarev (2):
          ps: use separate get_uptime() and make it work on non-linux too
          *: declare strings with ALIGN1, as appropriate
    
    Mike Frysinger (5):
          udhcpc6: depend on ipv6
          include sys/resource.h where needed
          disable format security warnings
          build system: use pkg-config to look up selinux libs
          ifenslave: fix missing close paren
    
    Mimi Li (1):
          sed: allow 'w' cmd to use two address form
    
    Natanael Copa (2):
          tar: implement --no-recursion
          unzip: ignore chmod errors
    
    Nicolas Thill (1):
          brctl: fix description and usage
    
    Pascal Bellard (1):
          su: do not change to home dir unless -l
    
    Paul Marks (1):
          ntpd: fix incorrect m_status field in outgoing packets. Closes 5120
    
    Peter Korsgaard (4):
          dmesg: handle multi-char log levels
          klogd: handle multi-char log levels
          syslogd: add option to log to Linux kernel printk buffer
          syslogd: convert dummy functions to statics and get rid of IF_FEATURE_* checks
    
    Pierre Carrier (1):
          config: do not refer to HTTPS for wget
    
    Ron Yorston (2):
          sendmail: use host rather than NIS domain name for HELO
          mktemp: fix mktemp -u temp.XXXXXX returning garbage when TMPDIR is set
    
    S-G Bergh (2):
          blkid: show filesystem when both label and UUID are missing, but type is known
          volume_id: add exFAT detection
    
    Simon B (4):
          ln: support -T and -v
          sed: support long opts and -iSFX
          mkdir,rmdir: accept and ignore -v, --verbose
          mv: accept but ignore -v
    
    Sven-Göran Bergh (6):
          blkid: add type display for btrfs
          blkid: add support for nilfs2
          blkid: add type display for hfsplus
          volume_id: display hfs[+] 128-bit UUID properly
          volume_id: uuid_format small code shrink
          volume_id: add squashfs detection
    
    Tanguy Pruvot (2):
          testsuite: some more awk tests related to conditions
          modinfo: match more standard module fields and fix version field
    
    Tias Guns (5):
          inetd: fix build failure in Android
          android: fix 'stat', ifdef S_TYPEIS* in coreutiles/stat.c
          platform.h: Android tweaks: ioprio defines, BB_ADDITIONAL_PATH
          android: some sensible defconfig changes
          libbb: add missing_syscalls.c: for now, only Android syscalls
    
    Timo Teräs (1):
          fbsplash: fix regression from e4fa7b7
    
    Tito Ragusa (1):
          adduser: make it accept "adduser USER GROUP" form
    
    Vladimir Dronnikov (1):
          wget: add dummy --no-cache
    
    Yao Zhao (1):
          testsuite: make mkfs.minix test not fail spuriously on big endian
    
    walter harms (1):
          refactor correct_password.c to avoid one if
    

  • 2 July 2012 -- BusyBox 1.20.2 (stable)

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

    Bug fix release. 1.20.2 has fixes for ash (fix for variable expansion in redirection), ifup/down (fix for "pre-up" and "pre-down" handling), man (fixes for compressed man pages handling), mke2fs (important fix! due to misplaced s_mkfs_time field, ext4 driver couldn't mount our images), ps (fix for getting uptime on non-Linux platforms), tar (fix base-256 decoding).

  • Old News

    Click here to read older news


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