Use case: Replacing BusyBox

This is not a priority: BusyBox has become somewhat unwieldy and contains many commands toybox should _not_ implement. Nevertheless, for reference:

A defconfig 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 a version of busybox used in lots of Sony products, containing a more realistic command subset:

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

Tim Bird's notes

Tim Bird (head of the Consumer Electronic Linux Forum) made a lot of priority lists on the old elinux wiki, based on his own experience with embedded systems. These are kept here for reference:

Must-have:

cat chgrp chmod chown chroot cp date df dmesg echo env expr false find grep head id kill ln ls mkdir more mv nice ps pwd rm rmdir sh sleep sort sync tail test touch true uname uniq wc xargs

Nice-to-have:

basename cut dd diff dirname du mkfifo printf sed tee time vi who zcat

Not-that-important:

at awk bc cal cksum cmp comm csplit expand file fold fuser getconf link logger logname man newgrp nl nohup od paste patch pathchk renice split stty tabs tput tr tty unexpand unlink uudecode uuencode

Must-have unimplemented: The following list has Tim's must-have commands, which are currently (as of Jan, 2012) not implemented in toybox:

chgrp chmod chown date dd expr find grep head id kill ln ls mkdir more mv nice ps rm tail test touch uniq xargs

prioritized, must-have, unimplemented list

Prioritized top 13: ls mkdir rm ln mv ps kill chmod chown date grep find xargs

Second prioritized group: chgrp id nice expr head tail test touch uniq dd more

ls needs to support -ladR at first

toolbox complement

If we omit toolbox supported commands from the must-have, unimplemented list, we get:

chgrp expr false find grep head more nice tail test touch true uname xargs

I would add tab completion and globbing for toysh to the list.

This would be for a toolbox complement.

Other random Notes

Other companies:

Sigh. Everybody wants to be anonymous...

Jay's list: mount mknod insmod telnetd hwclock ifconfig route vconfig syslogd mkfs.ext3 tune2fs fsck modprobe tar gunzip ash grep ash mknod cp telnetd hwclock vi ps daemonize top nc bzip2 showlease fsck_msdos ping run-as gzip e2fsck sh ntpd cat chmod chown cmp date dd df dmesg getevent getprop hd id ifconfig iftop insmod ioctl kill ln log ls lsmod mkdir mount mv netstat newfs_msdos notify printenv ps r reboot renice rm rmdir rmmod route schedtop sendevent setconsole setprop sleep smd start stop sync top umount vmstat watchprops wipe

Armijn's list:

arp brctl chmod date depmod fsync grep hexdump *ifconfig *init insmod ip ipcs *kill killall *ln *ls lsmod lspci md5sum *mkdir *mknod mount *mv netstat ping *ps reboot *rm *rmmod route *sysctl test tftp time top touch umount *uptime *vconfig

Can implement incrementally

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