POSIX conformance documentation for busybox
authorDavid Krakov <krakov@gmail.org>
Tue, 26 May 2009 23:42:34 +0000 (19:42 -0400)
committerMike Frysinger <vapier@gentoo.org>
Tue, 26 May 2009 23:42:34 +0000 (19:42 -0400)
Attached a start for POSIX conformance documentation for busybox (see
TODO file and discussion last week).
A table of all options as defined by POSIX and as implemented by
busybox (see for a FreeBSD example
http://people.freebsd.org/~schweikh/posix-utilities.html).

Only the tools that are stand-alone applets are documented (not ash
built-ins as 'read'), as there are multiple shells.
When there are two versions (echo) the stand-alone version was
checked. I think this may be the wrong way to go, as most users will
probably use the built-in version - but which shell?

The table was auto-generated by running, for each POSIX utility,
latest git allyesconfig* "busybox <tool> --help" and parsing the
output, and comparing that to tool options extracted from its man page
at http://www.opengroup.org/onlinepubs/9699919799/.
This means that it the usage string is not correct, the table is also
wrong. I noticed that for 'kill', for example, the usage string does
not mention the -s, -q, -o options.
For each option is set whether it exists in busybox and if it is, is
it compliant to the standard. Of course, checking compliance can only
be done manually - a process which will probably take some time (see
'cat' for example).

I didn't post the auto-generation script (python, ugly) because the
table will now change manually; I can post it if there is anyone
interested.

As for the tools not implemented by busybox at all, I think most of
them are indeed fairly esotetic. Some I was suprised to see missing
are link, file, newgrp, unlink.

* Well, almost allyesconfig - but nothing very POSIX-y was disabled.

Signed-off-by: David Krakov <krakov@gmail.org>
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
docs/posix_conformance.txt [new file with mode: 0644]

diff --git a/docs/posix_conformance.txt b/docs/posix_conformance.txt
new file mode 100644 (file)
index 0000000..5f16809
--- /dev/null
@@ -0,0 +1,698 @@
+
+Busybox POSIX conformance table
+
+See POSIX documentation (1003.1-2008) here:
+http://www.opengroup.org/onlinepubs/9699919799/
+And the complete list of all utilities that POSIX covers:
+http://www.opengroup.org/onlinepubs/9699919799/utilities/utilities.html
+
+This listing is a work in progress, and currently only covers 
+tool options (not operands, enviroment variables, return codes, etc..).
+For each option it is set if it (a) exists and (b) compliant to POSIX 2008.
+Some options exist but there is no value in the 'compliant' column: that
+means no one has yet bothered to make sure that the option does what it is 
+required to do.
+
+-----------------------------------------------
+
+POSIX Tools supported only as shell built-ins (ash shell):
+  alias, bg, cd, fg, getopts, hash, jobs, read, type, umask, ulimit, 
+  unalias, wait, write
+
+POSIX Tools not supported:
+  asa, at, batch, bc, c99, command, compress, csplit, ex, fc, file, 
+  gencat, getconf, iconv, join, link, locale, localedef, lp, m4, 
+  mailx, newgrp, nl, paste, pathchk, pax, pr, qalter, qdel, qhold, qmove, 
+  qmsg, qrerun, qrls, qselect, qsig, qstat, qsub, tabs, talk, tput, 
+  tsort, unlink, uucp, uustat, uux
+
+POSIX Tools not supported (DEVELOPMENT):
+  admin, cflow, ctags, cxref, delta, fort77, get, lex, make, nm, prs, rmdel, 
+  sact, sccs, strip, unget, val, what, yacc
+
+
+POSIX Tools supported:
+
+Note: echo, printf, kill, pwd documented here as stand-alone applets, 
+      not as ash built-ins.
+
+
+ar POSIX options
+ option           | exists | compliant | remarks
+  -C              |  no    | no        |  
+  -T              |  no    | no        |  
+  -a              |  no    | no        |  
+  -b              |  no    | no        |  
+  -c              |  no    | no        |  
+  -d              |  no    | no        |  
+  -i              |  no    | no        |  
+  -m              |  no    | no        |  
+  -p              |  yes   |           |  
+  -q              |  no    | no        |  
+  -r              |  no    | no        |  
+  -s              |  no    | no        |  
+  -t              |  yes   |           |  
+  -u              |  no    | no        |  
+  -v              |  yes   |           |  
+  -x              |  yes   |           |  
+ar Busybox specific options: 
+  -o
+
+awk POSIX options
+ option           | exists | compliant | remarks
+  -F ERE          |  yes   |           |  
+  -f progfile     |  yes   |           |  
+  -v assignment   |  yes   |           |  
+awk Busybox specific options: None
+
+basename POSIX options: None
+basename Busybox specific options: None
+
+cal POSIX options: None
+cal Busybox specific options: 
+  -y, -j
+
+cat POSIX options
+ option           | exists | compliant | remarks
+  -u              |  yes   | no        | option is ignored
+cat Busybox specific options: None
+
+chgrp POSIX options
+ option           | exists | compliant | remarks
+  -H              |  yes   |           |  
+  -L              |  yes   |           |  
+  -P              |  yes   |           |  
+  -R              |  yes   |           |  
+  -h              |  yes   |           |  
+chgrp Busybox specific options: 
+  -f, -c, -v
+
+chmod POSIX options
+ option           | exists | compliant | remarks
+  -R              |  yes   | yes       |  
+chmod Busybox specific options: 
+  -f, -v, -c
+
+chown POSIX options
+ option           | exists | compliant | remarks
+  -H              |  yes   |           |  
+  -L              |  yes   |           |  
+  -P              |  yes   |           |  
+  -R              |  yes   |           |  
+  -h              |  yes   |           |  
+chown Busybox specific options: 
+  -f, -c, -v
+
+cksum POSIX options: None
+cksum Busybox specific options: None
+
+cmp POSIX options
+ option           | exists | compliant | remarks
+  -l              |  yes   | yes       |  
+  -s              |  yes   | yes       |  
+cmp Busybox specific options: 
+  
+
+comm POSIX options
+ option           | exists | compliant | remarks
+  -1              |  yes   |           |  
+  -2              |  yes   |           |  
+  -3              |  yes   |           |  
+comm Busybox specific options: None
+
+cp POSIX options
+ option           | exists | compliant | remarks
+  -H              |  yes   |           |  
+  -L              |  yes   |           |  
+  -P              |  yes   |           |  
+  -R              |  yes   |           |  
+  -f              |  yes   |           |  
+  -i              |  yes   |           |  
+  -p              |  yes   |           |  
+cp Busybox specific options: 
+  -d, -a, -s, -c, -r, -l
+
+crontab POSIX options
+ option           | exists | compliant | remarks
+  -e              |  yes   |           |  
+  -l              |  yes   |           |  
+  -r              |  yes   |           |  
+crontab Busybox specific options: 
+  -u, -c
+
+cut POSIX options
+ option           | exists | compliant | remarks
+  -b list         |  yes   |           |  
+  -c list         |  yes   |           |  
+  -d delim        |  yes   |           |  
+  -f list         |  yes   |           |  
+  -n              |  yes   |           |  
+  -s              |  yes   |           |  
+cut Busybox specific options: None
+
+date POSIX options
+ option           | exists | compliant | remarks
+  -u              |  yes   | yes       |  
+date Busybox specific options: 
+  -I[SPEC], -d TIME, -r FILE, -R, -D FMT
+
+dd POSIX options: None
+dd Busybox specific options: 
+  
+
+df POSIX options
+ option           | exists | compliant | remarks
+  -P              |  yes   |           |  
+  -k              |  yes   |           |  
+  -t              |  no    | no        |  
+df Busybox specific options: 
+  -a, -m, -B SIZE, -i, -h
+
+diff POSIX options
+ option           | exists | compliant | remarks
+  -C n            |  no    | no        |  
+  -U n            |  yes   |           |  
+  -b              |  yes   |           |  
+  -c              |  no    | no        |  
+  -e              |  no    | no        |  
+  -f              |  no    | no        |  
+  -r              |  yes   |           |  
+  -u              |  no    | no        |  
+diff Busybox specific options: 
+  -d, -a, -s, -t, -L, -N, -i, -T, -w, -q, -S
+
+dirname POSIX options: None
+dirname Busybox specific options: None
+
+du POSIX options
+ option           | exists | compliant | remarks
+  -H              |  yes   |           |  
+  -L              |  yes   |           |  
+  -a              |  yes   |           |  
+  -k              |  yes   |           |  
+  -s              |  yes   |           |  
+  -x              |  yes   |           |  
+du Busybox specific options: 
+  -c, -m, -h, -d N, -l
+
+echo POSIX options: None
+echo Busybox specific options: 
+  -e, -E, -n
+
+ed POSIX options
+ option           | exists | compliant | remarks
+  -p string       |  no    | no        |  
+  -s              |  no    | no        |  
+ed Busybox specific options: None
+
+env POSIX options
+ option           | exists | compliant | remarks
+  -i              |  no    | no        |  
+env Busybox specific options: 
+  -u, -,  -i
+
+expand POSIX options
+ option           | exists | compliant | remarks
+  -t tablist      |  yes   |           |  
+expand Busybox specific options: 
+  --tabs=N, -i, --initial
+
+expr POSIX options: None
+expr Busybox specific options: 
+  
+
+false POSIX options: None
+false Busybox specific options: None
+
+find POSIX options
+ option           | exists | compliant | remarks
+  -H              |  no    | no        |  
+  -L              |  no    | no        |  
+find Busybox specific options: 
+  -group NAME, -mtime DAYS, -print, -maxdepth N, -exec CMD ARG ;, -newer FILE, -context, -iname PATTERN, -follow, -depth, -xdev, -inum N, -type X, -print0, -mindepth N, -mmin MINS, -regex PATTERN, -prune, -path PATTERN, -user NAME, -delete, -perm NNN, -name PATTERN, -size N[bck]
+
+fold POSIX options
+ option           | exists | compliant | remarks
+  -b              |  yes   |           |  
+  -s              |  yes   |           |  
+  -w width        |  yes   |           |  
+fold Busybox specific options: None
+
+fuser POSIX options
+ option           | exists | compliant | remarks
+  -c              |  no    | no        |  
+  -f              |  no    | no        |  
+  -u              |  no    | no        |  
+fuser Busybox specific options: 
+  -m, -k, -4, -SIGNAL, -6, -s
+
+grep POSIX options
+ option           | exists | compliant | remarks
+  -E              |  yes   |           |  
+  -F              |  yes   |           |  
+  -c              |  yes   |           |  
+  -e pattern_list |  yes   |           |  
+  -f pattern_file |  yes   |           |  
+  -i              |  yes   |           |  
+  -l              |  yes   |           |  
+  -n              |  yes   |           |  
+  -q              |  yes   |           |  
+  -s              |  yes   |           |  
+  -v              |  yes   |           |  
+  -x              |  no    | no        |  
+grep Busybox specific options: 
+  -A, -C, -B, -L, -H, -o, -h, -w, -r, -z, -m MAX
+
+head POSIX options
+ option           | exists | compliant | remarks
+  -n number       |  yes   | yes       |  
+head Busybox specific options: 
+  -v, -c NUM, -q
+
+id POSIX options
+ option           | exists | compliant | remarks
+  -G              |  yes   |           |  
+  -g              |  yes   |           |  
+  -n              |  yes   |           |  
+  -r              |  yes   |           |  
+  -u              |  yes   |           |  
+id Busybox specific options: 
+  -Z
+
+ipcrm POSIX options
+ option           | exists | compliant | remarks
+  -M shmkey       |  no    | no        |  
+  -Q msgkey       |  no    | no        |  
+  -S semkey       |  no    | no        |  
+  -m shmid        |  no    | no        |  
+  -q msgid        |  no    | no        |  
+  -s semid        |  no    | no        |  
+ipcrm Busybox specific options: 
+  -mM, -qQ, -sS
+
+ipcs POSIX options
+ option           | exists | compliant | remarks
+  -a              |  yes   |           |  
+  -b              |  no    | no        |  
+  -c              |  yes   |           |  
+  -m              |  yes   |           |  
+  -o              |  no    | no        |  
+  -p              |  yes   |           |  
+  -q              |  yes   |           |  
+  -s              |  yes   |           |  
+  -t              |  yes   |           |  
+ipcs Busybox specific options: 
+  -l, -i, -u
+
+kill POSIX options
+ option           | exists | compliant | remarks
+  -l              |  yes   | yes       |  
+  -s signal_name  |  yes   | yes       |  
+  -signal_name    |  yes   | yes       |  
+  -signal_number  |  yes   | yes       |  
+kill Busybox specific options: 
+   -q, -o
+
+ln POSIX options
+ option           | exists | compliant | remarks
+  -L              |  no    | no        |  
+  -P              |  no    | no        |  
+  -f              |  yes   |           |  
+  -s              |  yes   |           |  
+ln Busybox specific options: 
+  -S suf, -n, -b
+
+logger POSIX options: None
+logger Busybox specific options: 
+  -p PRIO, -t TAG, -s
+
+logname POSIX options: None
+logname Busybox specific options: None
+
+ls POSIX options
+ option           | exists | compliant | remarks
+  -1              |  yes   |           |  
+  -A              |  yes   |           |  
+  -C              |  yes   |           |  
+  -F              |  yes   |           |  
+  -H              |  no    | no        |  
+  -L              |  yes   |           |  
+  -R              |  yes   |           |  
+  -S              |  yes   |           |  
+  -a              |  yes   |           |  
+  -c              |  yes   |           |  
+  -d              |  yes   |           |  
+  -f              |  no    | no        |  
+  -g              |  no    | no        |  
+  -i              |  yes   |           |  
+  -k              |  yes   |           |  
+  -l              |  yes   |           |  
+  -m              |  no    | no        |  
+  -n              |  yes   |           |  
+  -o              |  no    | no        |  
+  -p              |  yes   |           |  
+  -q              |  no    | no        |  
+  -r              |  yes   |           |  
+  -s              |  yes   |           |  
+  -t              |  yes   |           |  
+  -u              |  yes   |           |  
+  -x              |  yes   |           |  
+ls Busybox specific options: 
+  --color, -T NUM, -K, -X, -Z, -e, -h, -v, -w NUM
+
+man POSIX options
+ option           | exists | compliant | remarks
+  -k              |  no    | no        |  
+man Busybox specific options: 
+  -a      Display all pages
+
+
+mesg POSIX options: None
+mesg Busybox specific options: None
+
+mkdir POSIX options
+ option           | exists | compliant | remarks
+  -m mode         |  yes   |           |  
+  -p              |  yes   |           |  
+mkdir Busybox specific options: 
+  -Z
+
+mkfifo POSIX options
+ option           | exists | compliant | remarks
+  -m mode         |  yes   | yes       |  
+mkfifo Busybox specific options: 
+  -Z
+
+more POSIX options
+ option           | exists | compliant | remarks
+  -c              |  no    | no        |  
+  -e              |  no    | no        |  
+  -i              |  no    | no        |  
+  -n number       |  no    | no        |  
+  -p command      |  no    | no        |  
+  -s              |  no    | no        |  
+  -t tagstring    |  no    | no        |  
+  -u              |  no    | no        |  
+more Busybox specific options: None
+
+mv POSIX options
+ option           | exists | compliant | remarks
+  -f              |  yes   |           |  
+  -i              |  yes   |           |  
+mv Busybox specific options: None
+
+nice POSIX options
+ option           | exists | compliant | remarks
+  -n increment    |  yes   |           |  
+nice Busybox specific options: None
+
+nohup POSIX options: None
+nohup Busybox specific options: None
+
+od POSIX options
+ option           | exists | compliant | remarks
+  -A address_base |  no    | no        |  
+  -N count        |  no    | no        |  
+  -b              |  no    | no        |  
+  -c              |  no    | no        |  
+  -d              |  no    | no        |  
+  -j skip         |  no    | no        |  
+  -o              |  no    | no        |  
+  -s              |  no    | no        |  
+  -t type_string  |  no    | no        |  
+  -v              |  no    | no        |  
+  -x              |  no    | no        |  
+od Busybox specific options: None
+
+patch POSIX options
+ option           | exists | compliant | remarks
+  -D define       |  no    | no        |  
+  -N              |  no    | no        |  
+  -R              |  yes   |           |  
+  -b              |  no    | no        |  
+  -c              |  no    | no        |  
+  -d dir          |  no    | no        |  
+  -e              |  no    | no        |  
+  -i patchfile    |  yes   |           |  
+  -l              |  no    | no        |  
+  -n              |  no    | no        |  
+  -o outfile      |  no    | no        |  
+  -p num          |  yes   |           |  
+  -r rejectfile   |  no    | no        |  
+  -u              |  no    | no        |  
+patch Busybox specific options: None
+
+printf POSIX options: None
+printf Busybox specific options: None
+
+ps POSIX options
+ option           | exists | compliant | remarks
+  -A              |  no    | no        |  
+  -G grouplist    |  no    | no        |  
+  -U userlist     |  no    | no        |  
+  -a              |  no    | no        |  
+  -d              |  no    | no        |  
+  -e              |  no    | no        |  
+  -f              |  no    | no        |  
+  -g grouplist    |  no    | no        |  
+  -l              |  no    | no        |  
+  -n namelist     |  no    | no        |  
+  -o format       |  yes   | no        | not supported: ruser, group, rgroup, pcpu
+  -p proclist     |  no    | no        | 
+  -t termlist     |  no    | no        |  
+  -u userlist     |  no    | no        |  
+ps Busybox specific options: None
+
+pwd POSIX options
+ option           | exists | compliant | remarks
+  -L              |  no    | no        |  
+  -P              |  no    | no        |  
+pwd Busybox specific options: None
+
+renice POSIX options
+ option           | exists | compliant | remarks
+  -g              |  yes   |           |  
+  -n increment    |  yes   |           |  
+  -p              |  yes   |           |  
+  -u              |  yes   |           |  
+renice Busybox specific options: None
+
+rm POSIX options
+ option           | exists | compliant | remarks
+  -R              |  yes   |           |  
+  -f              |  yes   |           |  
+  -i              |  yes   |           |  
+  -r              |  yes   |           |  
+rm Busybox specific options: None
+
+rmdir POSIX options
+ option           | exists | compliant | remarks
+  -p              |  yes   |           |  
+rmdir Busybox specific options: 
+  --parents
+
+sed POSIX options
+ option           | exists | compliant | remarks
+  -e script       |  yes   |           |  
+  -f script_file  |  yes   |           |  
+  -n              |  yes   |           |  
+sed Busybox specific options: 
+  -i, -r
+
+sh POSIX options
+ option           | exists | compliant | remarks
+  -c              |  no    | no        |  
+  -i              |  no    | no        |  
+  -s              |  no    | no        |  
+sh Busybox specific options: None
+
+sleep POSIX options: None
+sleep Busybox specific options: None
+
+sort POSIX options
+ option           | exists | compliant | remarks
+  -C              |  no    | no        |  
+  -b              |  yes   |           |  
+  -c              |  yes   |           |  
+  -d              |  yes   |           |  
+  -f              |  yes   |           |  
+  -i              |  yes   |           |  
+  -k keydef       |  yes   |           |  
+  -m              |  no    | no        |  
+  -n              |  yes   |           |  
+  -o output       |  yes   |           |  
+  -r              |  yes   |           |  
+  -t char         |  yes   |           |  
+  -u              |  yes   |           |  
+sort Busybox specific options: 
+  -mST, -g, -M, -s, -z
+
+split POSIX options
+ option           | exists | compliant | remarks
+  -a suffix_length |  yes   |           |  
+  -b n            |  yes   |           |  
+  -b nk           |  yes   |           |  
+  -b nm           |  yes   |           |  
+  -l line_count   |  yes   |           |  
+split Busybox specific options: None
+
+strings POSIX options
+ option           | exists | compliant | remarks
+  -a              |  yes   |           |  
+  -n number       |  yes   |           |  
+  -t format       |  no    | no        |  
+strings Busybox specific options: 
+  -o, -f
+
+stty POSIX options
+ option           | exists | compliant | remarks
+  -a              |  yes   |           |  
+  -g              |  yes   |           |  
+stty Busybox specific options: 
+  -F DEVICE
+
+tail POSIX options
+ option           | exists | compliant | remarks
+  -c number       |  yes   | yes       |  
+  -f              |  yes   | yes       |  
+  -n number       |  yes   | yes       |  
+tail Busybox specific options: 
+  -v, -q, -s SEC
+
+tee POSIX options
+ option           | exists | compliant | remarks
+  -a              |  yes   |           |  
+  -i              |  yes   |           |  
+tee Busybox specific options: None
+
+test POSIX options: None
+test Busybox specific options: None
+
+time POSIX options
+ option           | exists | compliant | remarks
+  -p              |  no    | no        |  
+time Busybox specific options: 
+  -v
+
+touch POSIX options
+ option           | exists | compliant | remarks
+  -a              |  no    | no        |  
+  -c              |  yes   |           |  
+  -d date_time    |  no    | no        |  
+  -m              |  no    | no        |  
+  -r ref_file     |  no    | no        |  
+  -t time         |  no    | no        |  
+touch Busybox specific options: None
+
+tr POSIX options
+ option           | exists | compliant | remarks
+  -C              |  no    | no        |  
+  -c              |  yes   |           |  
+  -d              |  yes   |           |  
+  -s              |  yes   |           |  
+tr Busybox specific options: None
+
+true POSIX options: None
+true Busybox specific options: None
+
+tty POSIX options: None
+tty Busybox specific options: 
+  -s
+
+uname POSIX options
+ option           | exists | compliant | remarks
+  -a              |  yes   |           |  
+  -m              |  yes   |           |  
+  -n              |  yes   |           |  
+  -r              |  yes   |           |  
+  -s              |  yes   |           |  
+  -v              |  yes   |           |  
+uname Busybox specific options: 
+  -p
+
+uncompress POSIX options
+ option           | exists | compliant | remarks
+  -c              |  yes   |           |  
+  -f              |  yes   |           |  
+  -v              |  no    | no        |  
+uncompress Busybox specific options: None
+
+unexpand POSIX options
+ option           | exists | compliant | remarks
+  -a              |  yes   |           |  
+  -t tablist      |  yes   |           |  
+unexpand Busybox specific options: 
+  --tabs=N, -f, --first-only, --all
+
+uniq POSIX options
+ option           | exists | compliant | remarks
+  -c              |  yes   |           |  
+  -d              |  yes   |           |  
+  -f fields       |  yes   |           |  
+  -s chars        |  yes   |           |  
+  -u              |  yes   |           |  
+uniq Busybox specific options: 
+  -w N
+
+uudecode POSIX options
+ option           | exists | compliant | remarks
+  -o outfile      |  no    | no        |  
+uudecode Busybox specific options: None
+
+uuencode POSIX options
+ option           | exists | compliant | remarks
+  -m              |  yes   |           |  
+uuencode Busybox specific options: None
+
+vi POSIX options
+ option           | exists | compliant | remarks
+  -R              |  yes   |           |  
+  -c command      |  yes   |           |  
+  -r              |  no    | no        |  
+  -t tagstring    |  no    | no        |  
+  -w size         |  no    | no        |  
+vi Busybox specific options: 
+  -H
+
+wc POSIX options
+ option           | exists | compliant | remarks
+  -c              |  yes   |           |  
+  -l              |  yes   |           |  
+  -m              |  no    | no        |  
+  -w              |  yes   |           |  
+wc Busybox specific options: 
+  -L
+
+who POSIX options
+ option           | exists | compliant | remarks
+  -H              |  no    | no        |  
+  -T              |  no    | no        |  
+  -a              |  yes   |           |  
+  -b              |  no    | no        |  
+  -d              |  no    | no        |  
+  -l              |  no    | no        |  
+  -m              |  no    | no        |  
+  -p              |  no    | no        |  
+  -q              |  no    | no        |  
+  -r              |  no    | no        |  
+  -s              |  no    | no        |  
+  -t              |  no    | no        |  
+  -u              |  no    | no        |  
+who Busybox specific options: None
+
+xargs POSIX options
+ option           | exists | compliant | remarks
+  -E eofstr       |  no    | no        |  
+  -I replstr      |  no    | no        |  
+  -L number       |  no    | no        |  
+  -n number       |  yes   |           |  
+  -p              |  yes   |           |  
+  -s size         |  yes   |           |  
+  -t              |  yes   |           |  
+  -x              |  yes   |           |  
+xargs Busybox specific options: 
+  -e[STR], -0, -r
+
+zcat POSIX options: None
+zcat Busybox specific options: None
+