Busybox replacement

This page has information about the commands and features desired for a busybox replacement program.

See Busybox replacement project for the project proposal for this work.

Command List
We have several potential use cases for a busybox replacement, and are using those to determine a consensus on which commands to target for a 1.0 release of an unencumbered busybox replacement package.

Our current candidate list combines the commands toybox already implements, the development environment command list, the toolbox standard commands, and the Sony configuration of busybox.

Thus the first release of a busybox replacement should include the following commands:

awk basename bunzip2 bzcat bzip2 cal cat catv chgrp chmod chown chroot chvt cksum cmp comm count cp cpio cut date dd df diff dirname dmesg dnsdomainname echo egrep env expr false fgrep find freeramdisk ftpd ftpget ftpput getty grep gunzip gzip halt hd head help hostname id ifconfig iftop init insmod install ioctl ionice kill killall klogd less link ln logger login logname losetup ls lsmod lsof man md5sum mdev mkdir mkfifo mknod mkswap mktemp modprobe mount mountpoint mv nc netcat netstat newfs_msdos nice nohup notify od oneit patch pgrep pidof ping ping6 pivot_root pkill poweroff printenv ps pwd readlink reboot renice rm rmdir rmmod route sed seq setsid sfdisk sh sha1sum sleep sort split start stat stop stty swapoff swapon switch_root sync syslogd tac tail tar taskset tee telnet telnetd test time top touch tr true truncate tty umount uname uniq unlink unshare uptime usleep vconfig vi vmstat wc wget which whoami xargs yes zcat

Plus additional to-be-determined shell functionality.

Toybox currently implements
The triaged toybox (2 clause BSD license) is currently implementing usable versions of:

bzcat cal cat catv chroot chvt cksum count cp df dirname dmesg echo false help link mkswap nc netcat nice nohup oneit patch pwd rmdir seq setsid sha1sum sleep sort sync tee true truncate tty uname unlink unshare wc which yes

And contains partial implementations of: mdev sh

See the Toybox todo list for the most up to date status.

Use case: provide a self-hosting development environment
The following commands are enough to build the Aboriginal Linux development environment, boot it to a shell prompt, and build Linux From Scratch 6.8 under it. (Aboriginal Linux currently uses BusyBox for this, thus provides a corresponding test environment for toybox.)

This use case includes running init scripts and other shell scripts, running configure, make, and install in each package, and providing basic command line facilities such as a text editor. (It does not include a compiler toolchain or C library, those are outside the scope of this project.)

Already in toybox
bzcat cat cp dirname echo patch rmdir sha1sum sleep sort sync true uname wc which yes env

Additional commands for development environment
zcat awk basename bzip2 chmod chown cmp cut date dd diff egrep expr find grep gzip head hostname id install ln ls mkdir mktemp mv od readlink rm sed sh tail tar touch tr uniq wget whoami xargs chgrp comm gunzip less logname man split tee test time bunzip2 chgrp chroot comm cpio dmesg dnsdomainname ftpd ftpget ftpput gunzip ifconfig init less logname losetup man mdev mount mountpoint nc pgrep pkill pwd route split stat switch_root tac tee test time umount vi

Note: Aboriginal Linux installs bash 2.05b as #!/bin/sh and its scripts require bash extensions not present in busybox ash.

Standard commands
Toolbox in Android (what version?) implements the following standard commands:

date id uptime ifconfig start stop newfs_msdos ls route netstat ioctl reboot cmp insmod chmod cat lsmod chown df top printenv ionice rmmod sleep notify iftop rmdir dd vmstat hd rm mount ln lsof ps dmesg renice kill mkdir mv sync umount

Android-specific commands
Toolbox also provides the following nonstandard commands, which are unique to Android (or at least do not appear in Ubuntu or SUSv4):

alarm schedtop getprop log setprop watchprops notify wipe getevent sendevent nandread smd setconsole r ioctl

default 1.10 build
A default build of Busybox 1.10 has the following commands:

[, [[, addgroup, adduser, adjtimex, ar, arp, arping, ash,	awk, basename, bunzip2, bzcat, bzip2, cal, cat, catv,	chattr, chgrp, chmod, chown, chpasswd, chpst, chroot,	chrt, chvt, cksum, clear, cmp, comm, cp, cpio, crond,	crontab, cryptpw, cut, date, dc, dd, deallocvt, delgroup,	deluser, df, dhcprelay, diff, dirname, dmesg, dos2unix,	du, dumpkmap, dumpleases, echo, ed, egrep, eject, env,	envdir, envuidgid, expand, expr, false, fbset, fdflush,	fdformat, fdisk, fgrep, find, fold, free, freeramdisk,	fsck, fsck.minix, fuser, getopt, getty, grep, gunzip,	gzip, halt, hdparm, head, hexdump, hostid, hostname, hwclock,	id, ifconfig, ifdown, ifup, inetd, init, insmod, install,	ip, ipaddr, ipcalc, ipcrm, ipcs, iplink, iproute, iprule,	iptunnel, kbd_mode, kill, killall, killall5, klogd, last,	length, less, linux32, linux64, linuxrc, ln, loadfont,	loadkmap, logger, login, logname, logread, losetup, lpd,	lpq, lpr, ls, lsattr, lsmod, lzmacat, makedevs, md5sum,	mdev, mesg, microcom, mkdir, mkfifo, mkfs.minix, mknod,	mkswap, mktemp, modprobe, more, mount, mountpoint, mt,	mv, nameif, netstat, nice, nmeter, nohup, nslookup, od,	openvt, passwd, patch, pgrep, pidof, ping, pipe_progress,	pivot_root, pkill, poweroff, printenv, printf, ps, pscan,	pwd, raidautorun, rdate, readlink, readprofile, realpath,	reboot, renice, reset, resize, rm, rmdir, rmmod, route,	rpm, rpm2cpio, run-parts, runlevel, runsv, runsvdir, rx,	script, sed, sendmail, seq, setarch, setconsole, setkeycodes,	setlogcons, setsid, setuidgid, sh, sha1sum, sleep, softlimit,	sort, split, start-stop-daemon, stat, strings, stty, su,	sulogin, sum, sv, svlogd, swapoff, swapon, switch_root,	sync, sysctl, syslogd, tac, tail, tar, taskset, tee, telnetd,	test, time, top, touch, tr, true, tty, ttysize, udhcpc,	udhcpd, umount, uname, uncompress, unexpand, uniq, unix2dos,	unlzma, unzip, uptime, usleep, uudecode, uuencode, vi,	vlock, watch, watchdog, wc, wget, which, who, whoami,	xargs, yes, zcat

Sony CE Linux (internal distribution) 1.13.4 build
This is from a version of busybox used in lots of Sony products: Currently defined functions: [, [[, ash, basename, bunzip2, bzcat, cat, chgrp, chmod, chown,       chroot, cmp, cp, cpio, cut, date, dd, dirname, dmesg, echo, egrep,        env, expr, false, fgrep, freeramdisk, ftpget, ftpput, getty, grep,        gunzip, gzip, halt, ifconfig, insmod, kill, killall, klogd, ln,        logger, login, ls, lsmod, md5sum, mkdir, mkfifo, mknod, mktemp,        modprobe, mount, mv, pidof, ping, ping6, pivot_root, poweroff,        pwd, readlink, reboot, rm, rmdir, rmmod, route, sed, sfdisk, sh,        sha1sum, sleep, sort, stty, swapoff, swapon, switch_root, sync,        syslogd, tail, tar, taskset, telnet, telnetd, test, touch, true,        umount, uname, uniq, usleep, vconfig, wc, xargs, zcat

Can implement incrementally
Rob wrote:

One nice thing about busybox/toybox/toolbox is you can install multiple implementations side by side, and have what symlinks you create (or what comes first in the $PATH) determine who is implementing what.

This allows gradual transitions. Each release, we replace a couple more commands from the old one, until the old one finally isn't being used for anything anymore and we can uninstall it...