Busybox TODO
+Harvest patches from
+http://git.openembedded.org/cgit.cgi/openembedded/tree/recipes/busybox/
+
Stuff that needs to be done. This is organized by who plans to get around to
doing it eventually, but that doesn't mean they "own" the item. If you want to
do one of these bounce an email off the person it's listed under to see if they
Rob Landley suggested this:
Implement bb_realpath() that can handle NULL on non-glibc.
- Remove obsolete _() wrapper crud for internationalization we don't do.
- Figure out where we need utf8 support, and add it.
-
sh
The command shell situation is a mess. We have two different
shells that don't really share any code, and the "standalone shell" doesn't
How much internationalization should we do?
The low hanging fruit is UTF-8 character set support. We should do this.
- (Vodz pointed out the shell's cmdedit as needing work here. What else?)
+ See TODO_unicode file.
We also have lots of hardwired english text messages. Consolidating this
into some kind of message table not only makes translation easier, but
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 1.1 will be capable of replacing most gnu packages for real world
use, such as developing software or in a live CD. It needs wider testing.
One example of an existing system that does this already is Firmware Linux:
http://www.landley.net/code/firmware
+
initramfs
Busybox should have a sample initramfs build script. This depends on
bbsh, mdev, and switch_root.
+
mkdep
Write a mkdep that doesn't segfault if there's a directory it doesn't
have permission to read, isn't based on manually editing the output of
lexx and yacc, doesn't make such a mess under include/config, etc.
+
Group globals into unions of structures.
Go through and turn all the global and static variables into structures,
and have all those structures be in a big union shared between processes,
so busybox uses less bss. (This is a big win on nommu machines.) See
sed.c and mdev.c for examples.
+
Go through bugs.busybox.net and close out all of that somehow.
This one's open to everybody, but I'll wind up doing it...
-
Bernhard Reutner-Fischer <busybox@busybox.net> suggests to look at these:
New debug options:
-Wlarger-than-127
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.
---
-Switch CONFIG_SYMBOLS to ENABLE_SYMBOLS
-
- In busybox 1.0 and earlier, configuration was done by CONFIG_SYMBOLS
- that were either defined or undefined to indicate whether the symbol was
- selected in the .config file. They were used with #ifdefs, ala:
-
- #ifdef CONFIG_SYMBOL
- if (other_test) {
- do_code();
- }
- #endif
-
- In 1.1, we have new ENABLE_SYMBOLS which are always defined (as 0 or 1),
- meaning you can still use them for preprocessor tests by replacing
- "#ifdef CONFIG_SYMBOL" with "#if ENABLE_SYMBOL". But more importantly, we
- can use them as a true or false test in normal C code:
-
- if (ENABLE_SYMBOL && other_test) {
- do_code();
- }
-
- (Optimizing away if() statements that resolve to a constant value
- is known as "dead code elimination", an optimization so old and simple that
- Turbo Pascal for DOS did it twenty years ago. Even modern mini-compilers
- like the Tiny C Compiler (tcc) and the Small Device C Compiler (SDCC)
- perform dead code elimination.)
-
- Right now, busybox.h is #including both "config.h" (defining the
- CONFIG_SYMBOLS) and "bb_config.h" (defining the ENABLE_SYMBOLS). At some
- point in the future, it would be nice to wean ourselves off of the
- CONFIG versions. (Among other things, some defective build environments
- leak the Linux kernel's CONFIG_SYMBOLS into the system's standard #include
- files. We've experienced collisions before.)
----
FEATURE_CLEAN_UP
This is more an unresolved issue than a to-do item. More thought is needed.
---
unify progress_meter. wget, flash_eraseall, pipe_progress, fbsplash, setfiles.
---
- support start-stop-daemon -d <chdir-path>
-
-Code cleanup:
-
-Replace deprecated functions.
-
+ support start-stop-daemon -d <chdir-path>
---
vdprintf() -> similar sized functionality
---
The first step would to generate a file/matrix what is already archived
(also IPV6)
-* ntpdate/ntpd (see ntpclient and openntp for examples)
-
* implement 'at'
* rpcbind (former portmap) or equivalent
most likely there is more
* even more support for statistics: mpstat, iostat, powertop....
-
-
-Unicode work needed:
-
-Unicode support uses libc multibyte functions if LOCALE_SUPPORT is on
-(in this case, the code will also support many more encodings),
-or uses a limited subset of re-implemented multibyte functions
-which only understand "one byte == one char" and unicode.
-This is useful if you build against uclibc with locale support disabled.
-
-Unicode-dependent applets must call check_unicode_in_env() when they
-begin executing.
-
-Applet code may conditionalize on UNICODE_SUPPORT in order to use
-more efficient code if unicode support is not requested.
-
-Available functions (if you need more, implement them in libbb/unicode.c
-so that they work without LOCALE_SUPPORT too):
-
-int bb_mbstrlen(str) - multibyte-aware strlen
-size_t mbstowcs(wdest, src, n)
-size_t wcstombs(dest, wsrc, n)
-size_t wcrtomb(str, wc, wstate)
-int iswspace(wc)
-int iswalnum(wc)
-int iswpunct(wc)
-
-Applets which only need to align columns on screen correctly:
-
-ls - already done, use source as an example
-df
-dumpleases
-lsmod
-
-Applets which need to account for Unicode chars
-while processing the output:
-
-[un]expand
-fold
-man
-watch
-cut (-b and -c are currently the same, needs fixing)
-
-These applets need to ensure that unicode input
-is handled correctly (say, <unicode><backspace> sequence):
-
-getty, login
-rm -i
-unzip (overwrite prompt)
-
-Viewers/editors are more difficult (many cases to get right).
-libbb/lineedit.c is an example how to do it:
-
-less, most, ed, vi
-awk
-[ef]grep
-sed
-
-Probably needs some specialized work:
-
-loadkeys