Busybox TODO

Stuff that needs to be done

tr - missing SuS3 features in busybox 1.0pre10

tr doesnt support [:blank:], [:digit:] or other predefined classes, [=equiv=]
support is also missing.
----
find
  doesn't understand () or -exec, and these are actually used out in the real
  world.  The "make uninstall" of lots of things (including busybox itself)
  breaks because of this, and sometimes even "make install" (like udev).
----
sh
  The command shell situation is a big mess.  We have three or four different
  shells that don't really share any code, and the "standalone shell" doesn't
  work all that well (especially not in a chroot environment), due to apps not
  being reentrant.  Unifying the various shells and figuring out a configurable
  way of adding the minimal set of bash features a given script uses is a big
  job, but it be a big improvement.

  Note: Rob Landley (rob@landley.net) is working on this one, but very slowly...
---
gzip
  Can't handle compressing multiple files at once.  (I don't mean making a
  multiple file archive, I mean compressing more than one file at a time.)
  Some global variables aren't re-initialized between runs.
---
gunzip
  same problem as gzip.  "gunzip one.gz two.gz three.gz" doesn't work for
  two.gz and three.gz due to global variables not getting reset.
---
diff
  We should have a diff -u command.  We have patch, we should have diff
  (we only need to support unified diffs though).
---
fuser
  Would be nice.  The basic susv3 options, plus fuser -k.
---
patch
  should have simple fuzz factor support to apply patches at an offset which
  shouldn't take up too much space.
---
man
  It would be nice to have a man command.  Not one that handles troff or
  anything, just one that can handle preformatted ascii man pages, possibly
  compressed.  This could probably be a script in the extras directory that
  calls cat/zcatbzcat | more
---
less
  More sucks if you're used to less.  A tiny less implementation would be
  very nice.
---
bzip2
  Compression-side support.


Architectural issues:

Do a SUSv3 audit
  Look at the full Single Unix Specification version 3 (available online at
  "http://www.opengroup.org/onlinepubs/009695399/nfindex.html") and
  figure out which of our apps are compliant, and what we're missing that
  we might actually care about.

  Even better would be some kind of automated compliance test harness that
  exercises each command line option and the various corner cases.
--
Unify archivers
  Lots of archivers have the same general infrastructure.  The directory
  traversal code should be factored out, and the guts of each archiver could
  be some setup code and a series of callbacks for "add this file",
  "add this directory", "add this symlink" and so on.

  This could clean up tar and zip, and make it cheaper to add cpio and ar
  write support, and possibly even cheaply add things like mkisofs someday,
  if it becomes relevant.
---
Text buffer support.
  Several existing applets and potential additions (sort, vi, less...) read
  a whole file into memory and act on it.  There might be an opportunity
  for shared code in there that could be moved into libbb...
---
Individual compilation of applets.
  It would be nice if busybox had the option to compile to individual applets,
  for people who want an alternate implementation less bloated than the gnu
  utils (or simply with less political baggage), but without it being one big
  executable.

  Turning libbb into a real dll is another possibility, especially if libbb
  could export some of the other library interfaces we've already more or less
  got the code for (like zlib).
---
buildroot - Make a "dogfood" option
  Busybox is now capable of replacing most gnu packages for real world use,
  such as developing software or in a live CD.  A system built from busybox
  (1.00 with updated sort.c), uclibc 0.9.27, gcc, binutils, make, and a few
  other development tools (http://www.landley.net/code/firmware has an example
  system using autoconf, automake, bison, flex, libtools, m4, zlib,
  and groff: dunno what subset of that is actually necessary) is capable of
  rebuilding itself, from scratch, under itself.

  It would be a good "eating our own dogfood" test if buildroot had the option
  of using busybox instead of bzip2, coreutils, file, findutils, gawk, grep,
  inetutils, modutils, net-tools, procps, sed, shadow, sysklogd, sysvinit, tar,
  util-linux, and vim.  Anything that's wrong with the resulting system, we
  can fix.  (It would be nice to be able to upgrade busybox to be able to
  replace bash, diffutils, gzip, less, and patch as well.)
---
Memory Allocation
  We have a CONFIG_BUFFER mechanism that lets us select whether to do memory
  allocation on the stack or the heap.  Unfortunately, we're not using it much.
  We need to audit our memory allocations and turn a lot of malloc/free calls
  into RESERVE_CONFIG_BUFFER/RELEASE_CONFIG_BUFFER.
  
  And while we're at it, many of the CONFIG_FEATURE_CLEAN_UP #ifdefs will be
  optimized out by the compiler in the stack allocation case (since there's no
  free for an alloca()), and this means that various cleanup loops that just
  call free might also be optimized out by the compiler if written right, so
  we can yank those #ifdefs too, and generally clean up the code.
