From 7a5814c74c875d1d4ce80c8d24b0573a8fd51ab5 Mon Sep 17 00:00:00 2001 From: Mike Frysinger Date: Wed, 13 May 2009 01:48:00 -0400 Subject: [PATCH] split website off into dedicated git repo Signed-off-by: Mike Frysinger --- docs/busybox.net/FAQ.html | 1146 ----------- docs/busybox.net/about.html | 24 - docs/busybox.net/busybox-growth.ps | 404 ---- docs/busybox.net/copyright.txt | 30 - docs/busybox.net/developer.html | 92 - docs/busybox.net/download.html | 60 - docs/busybox.net/fix.html | 15 - docs/busybox.net/footer.html | 51 - docs/busybox.net/header.html | 92 - docs/busybox.net/images/back.png | Bin 322 -> 0 bytes docs/busybox.net/images/busybox.jpeg | Bin 9023 -> 0 bytes docs/busybox.net/images/busybox.png | Bin 34014 -> 0 bytes docs/busybox.net/images/busybox1.png | Bin 10913 -> 0 bytes docs/busybox.net/images/busybox2.jpg | Bin 8204 -> 0 bytes docs/busybox.net/images/busybox2.png | Bin 71850 -> 0 bytes docs/busybox.net/images/busybox3.jpg | Bin 3292 -> 0 bytes docs/busybox.net/images/dir.png | Bin 309 -> 0 bytes docs/busybox.net/images/donate.png | Bin 807 -> 0 bytes docs/busybox.net/images/fm.mini.png | Bin 7708 -> 0 bytes docs/busybox.net/images/gfx_by_gimp.png | Bin 3955 -> 0 bytes docs/busybox.net/images/ltbutton2.png | Bin 6798 -> 0 bytes docs/busybox.net/images/osuosl.png | Bin 8683 -> 0 bytes docs/busybox.net/images/sdsmall.png | Bin 1593 -> 0 bytes docs/busybox.net/images/text.png | Bin 307 -> 0 bytes docs/busybox.net/images/valid-html401.png | Bin 1950 -> 0 bytes docs/busybox.net/images/vh40.gif | Bin 906 -> 0 bytes docs/busybox.net/images/written.in.vi.png | Bin 4394 -> 0 bytes docs/busybox.net/index.html | 1 - docs/busybox.net/license.html | 99 - docs/busybox.net/links.html | 19 - docs/busybox.net/lists.html | 46 - docs/busybox.net/news.html | 504 ----- docs/busybox.net/oldnews.html | 2214 --------------------- docs/busybox.net/products.html | 165 -- docs/busybox.net/screenshot.html | 75 - docs/busybox.net/shame.html | 82 - docs/busybox.net/sponsors.html | 56 - docs/busybox.net/subversion.html | 51 - docs/busybox.net/svnindex.css | 92 - docs/busybox.net/svnindex.xsl | 108 - docs/busybox.net/tinyutils.html | 86 - 41 files changed, 5512 deletions(-) delete mode 100644 docs/busybox.net/FAQ.html delete mode 100644 docs/busybox.net/about.html delete mode 100644 docs/busybox.net/busybox-growth.ps delete mode 100644 docs/busybox.net/copyright.txt delete mode 100644 docs/busybox.net/developer.html delete mode 100644 docs/busybox.net/download.html delete mode 100644 docs/busybox.net/fix.html delete mode 100644 docs/busybox.net/footer.html delete mode 100644 docs/busybox.net/header.html delete mode 100644 docs/busybox.net/images/back.png delete mode 100644 docs/busybox.net/images/busybox.jpeg delete mode 100644 docs/busybox.net/images/busybox.png delete mode 100644 docs/busybox.net/images/busybox1.png delete mode 100644 docs/busybox.net/images/busybox2.jpg delete mode 100644 docs/busybox.net/images/busybox2.png delete mode 100644 docs/busybox.net/images/busybox3.jpg delete mode 100644 docs/busybox.net/images/dir.png delete mode 100644 docs/busybox.net/images/donate.png delete mode 100644 docs/busybox.net/images/fm.mini.png delete mode 100644 docs/busybox.net/images/gfx_by_gimp.png delete mode 100644 docs/busybox.net/images/ltbutton2.png delete mode 100644 docs/busybox.net/images/osuosl.png delete mode 100644 docs/busybox.net/images/sdsmall.png delete mode 100644 docs/busybox.net/images/text.png delete mode 100644 docs/busybox.net/images/valid-html401.png delete mode 100644 docs/busybox.net/images/vh40.gif delete mode 100644 docs/busybox.net/images/written.in.vi.png delete mode 100644 docs/busybox.net/index.html delete mode 100644 docs/busybox.net/license.html delete mode 100644 docs/busybox.net/links.html delete mode 100644 docs/busybox.net/lists.html delete mode 100644 docs/busybox.net/news.html delete mode 100644 docs/busybox.net/oldnews.html delete mode 100644 docs/busybox.net/products.html delete mode 100644 docs/busybox.net/screenshot.html delete mode 100644 docs/busybox.net/shame.html delete mode 100644 docs/busybox.net/sponsors.html delete mode 100644 docs/busybox.net/subversion.html delete mode 100644 docs/busybox.net/svnindex.css delete mode 100644 docs/busybox.net/svnindex.xsl delete mode 100644 docs/busybox.net/tinyutils.html diff --git a/docs/busybox.net/FAQ.html b/docs/busybox.net/FAQ.html deleted file mode 100644 index 7ed1394ce..000000000 --- a/docs/busybox.net/FAQ.html +++ /dev/null @@ -1,1146 +0,0 @@ - - -

Frequently Asked Questions

- -This is a collection of some of the more frequently asked questions -about BusyBox. Some of the questions even have answers. If you -have additions to this FAQ document, we would love to add them, - -

General questions

-
    -
  1. How can I get started using BusyBox?
  2. -
  3. How do I configure busybox?
  4. -
  5. How do I build BusyBox with a cross-compiler?
  6. -
  7. How do I build a BusyBox-based system?
  8. -
  9. Which Linux kernel versions are supported?
  10. -
  11. Which architectures does BusyBox run on?
  12. -
  13. Which C libraries are supported?
  14. -
  15. Can I include BusyBox as part of the software on my device?
  16. -
  17. Where can I find other small utilities since busybox does not include the features I want?
  18. -
  19. I demand that you to add <favorite feature> right now! How come you don't answer all my questions on the mailing list instantly? I demand that you help me with all of my problems Right Now!
  20. -
  21. I need help with BusyBox! What should I do?
  22. -
  23. I need you to add <favorite feature>! Are the BusyBox developers willing to be paid in order to fix bugs or add in <favorite feature>? Are you willing to provide support contracts?
  24. -
- -

Troubleshooting

-
    -
  1. I think I found a bug in BusyBox! What should I do?!
  2. -
  3. I'm using an ancient version from the dawn of time and something's broken. Can you backport fixes for free?
  4. -
  5. Busybox init isn't working!
  6. -
  7. I can't configure busybox on my system.
  8. -
  9. Why do I keep getting "sh: can't access tty; job control turned off" errors? Why doesn't Control-C work within my shell?
  10. -
- -

Misc. questions

-
    -
  1. How do I change the time zone in busybox?
  2. -
- -

Programming questions

-
    -
  1. What are the goals of busybox?
  2. -
  3. What is the design of busybox?
  4. -
  5. How is the source code organized? - -
  6. -
  7. I want to make busybox even smaller, how do I go about it?
  8. -
  9. Adding an applet to busybox
  10. -
  11. What standards does busybox adhere to?
  12. -
  13. Portability.
  14. -
  15. Tips and tricks. - -
  16. -
  17. Who are the BusyBox developers?
  18. -
- - -
-

General questions

- -
-

How can I get started using BusyBox?

- -

If you just want to try out busybox without installing it, download the - tarball, extract it, run "make defconfig", and then run "make". -

-

- This will create a busybox binary with almost all features enabled. To try - out a busybox applet, type "./busybox [appletname] [options]", for - example "./busybox ls -l" or "./busybox cat LICENSE". Type "./busybox" - to see a command list, and "busybox appletname --help" to see a brief - usage message for a given applet. -

-

- BusyBox uses the name it was invoked under to determine which applet is - being invoked. (Try "mv busybox ls" and then "./ls -l".) Installing - busybox consists of creating symlinks (or hardlinks) to the busybox - binary for each applet in busybox, and making sure these links are in - the shell's command $PATH. The special applet name "busybox" (or with - any optional suffix, such as "busybox-static") uses the first argument - to determine which applet to run, as shown above. -

-

- BusyBox also has a feature called the - "standalone shell", where the busybox - shell runs any built-in applets before checking the command path. This - feature is also enabled by "make allyesconfig", and to try it out run - the command line "PATH= ./busybox ash". This will blank your command path - and run busybox as your command shell, so the only commands it can find - (without an explicit path such as /bin/ls) are the built-in busybox ones. - This is another good way to see what's built into busybox. - Note that the standalone shell requires CONFIG_BUSYBOX_EXEC_PATH - to be set appropriately, depending on whether or not /proc/self/exe is - available or not. If you do not have /proc, then point that config option - to the location of your busybox binary, usually /bin/busybox. - (So if you set it to /proc/self/exe, and happen to be able to chroot into - your rootfs, you must mount /proc beforehand.) -

-

- A typical indication that you set CONFIG_BUSYBOX_EXEC_PATH to proc but - forgot to mount proc is: -

-$ /bin/echo $PATH
-/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/bin/X11
-$ echo $PATH
-/bin/sh: echo: not found
-
- -
-

How do I configure busybox?

- -

Busybox is configured similarly to the linux kernel. Create a default - configuration and then run "make menuconfig" to modify it. The end - result is a .config file that tells the busybox build process what features - to include. So instead of "./configure; make; make install" the equivalent - busybox build would be "make defconfig; make; make install". -

- -

Busybox configured with all features enabled is a little under a megabyte - dynamically linked on x86. To create a smaller busybox, configure it with - fewer features. Individual busybox applets cost anywhere from a few - hundred bytes to tens of kilobytes. Disable unneeded applets to save, - space, using menuconfig. -

- -

The most important busybox configurators are:

- - - -

Some other configuration options are:

- - -

Menuconfig modifies your .config file through an interactive menu where you can enable or disable - busybox features, and get help about each feature. - -

- To build a smaller busybox binary, run "make menuconfig" and disable the - features you don't need. (Or run "make allnoconfig" and then use - menuconfig to add just the features you need. Don't forget to recompile - with "make" once you've finished configuring.) -

- -
-

How do I build BusyBox with a cross-compiler?

- -

- To build busybox with a cross-compiler, specify CROSS_COMPILE=<prefix>. -

-

- CROSS_COMPILE specifies the prefix used for all executables used - during compilation. Only gcc and related binutils executables - are prefixed with $(CROSS_COMPILE) in the makefiles. - CROSS_COMPILE can be set on the command line: -

-
-   make CROSS_COMPILE=arm-linux-uclibcgnueabi-
-
-

- Alternatively CROSS_COMPILE can be set in the environment. - Default value for CROSS_COMPILE is not to prefix executables. -

-

- To store the cross-compiler in your .config, set the variable - CONFIG_CROSS_COMPILER_PREFIX accordingly in menuconfig or by - editing the .config file. -

- -
-

How do I build a BusyBox-based system?

- -

- BusyBox is a package that replaces a dozen standard packages, but it is - not by itself a complete bootable system. Building an entire Linux - distribution from source is a bit beyond the scope of this FAQ, but it - understandably keeps cropping up on the mailing list, so here are some - pointers. -

-

- Start by learning how to strip a working system down to the bare essentials - needed to run one or two commands, so you know what it is you actually - need. An excellent practical place to do - this is the Linux - BootDisk Howto, or for a more theoretical approach try - From - PowerUp to Bash Prompt. -

-

- To learn how to build a working Linux system entirely from source code, - the place to go is the Linux - From Scratch project. They have an entire book of step-by-step - instructions you can - read online - or - download. - Be sure to check out the other sections of their main page, including - Beyond Linux From Scratch, Hardened Linux From Scratch, their Hints - directory, and their LiveCD project. (They also have mailing lists which - are better sources of answers to Linux-system building questions than - the busybox list.) -

-

- If you want an automated yet customizable system builder which produces - a BusyBox and uClibc based system, try - buildroot, which is - another project by the maintainer of the uClibc (Erik Andersen). - Download the tarball, extract it, unset CC, make. - For more instructions, see the website. -

- -
-

Which Linux kernel versions are supported?

- -

- Full functionality requires Linux 2.4.x or better. (Earlier versions may - still work, but are no longer regularly tested.) A large fraction of the - code should run on just about anything. While the current code is fairly - Linux specific, it should be fairly easy to port the majority of the code - to support, say, FreeBSD or Solaris, or Mac OS X, or even Windows (if you - are into that sort of thing). -

- -
-

Which architectures does BusyBox run on?

- -

- BusyBox in general will build on any architecture supported by gcc. - Kernel module loading for 2.4 Linux kernels is currently - limited to ARM, CRIS, H8/300, x86, ia64, x86_64, m68k, MIPS, PowerPC, - S390, SH3/4/5, Sparc, v850e, and x86_64 for 2.4.x kernels. -

-

- With 2.6.x kernels, module loading support should work on all architectures. -

- -
-

Which C libraries are supported?

- -

- On Linux, BusyBox releases are tested against uClibc (0.9.27 or later) and - glibc (2.2 or later). Both should provide full functionality with busybox, - and if you find a bug we want to hear about it. -

-

- Linux-libc5 is no longer maintained (and has no known advantages over - uClibc), dietlibc is known to have numerous unfixed bugs, and klibc is - missing too many features to build BusyBox. If you require a small C - library for Linux, the busybox developers recommend uClibc. -

-

- Some BusyBox applets have been built and run under a combination - of newlib and libgloss (see - this thread). - This is still experimental, but may be supported in a future release. -

- -
-

Can I include BusyBox as part of the software on my device?

- -

- Yes. As long as you fully comply - with the generous terms of the GPL BusyBox license you can ship BusyBox - as part of the software on your device. -

- -
-

Where can I find other small utilities since busybox - does not include the features i want?

- -

- we maintain such a list on this site! -

- -
-

I demand that you to add <favorite feature> right now! How come you don't answer all my questions on the mailing list instantly? I demand that you help me with all of my problems Right Now!

- -

- You have not paid us a single cent and yet you still have the product of - many years of our work. We are not your slaves! We work on BusyBox - because we find it useful and interesting. If you go off flaming us, we - will ignore you. - -


-

I need help with BusyBox! What should I do?

- -

- If you find that you need help with BusyBox, you can ask for help on the - BusyBox mailing list at busybox@busybox.net.

- -

In addition to the mailing list, Erik Andersen (andersee), Manuel Nova - (mjn3), Rob Landley (landley), Mike Frysinger (SpanKY), - Bernhard Reutner-Fischer (blindvt), and other long-time BusyBox developers - are known to hang out on the uClibc IRC channel: #uclibc on - irc.freenode.net. There is a - web archive of - daily logs of the #uclibc IRC channel going back to 2002. -

- -

- Please do not send private email to Rob, Erik, Manuel, or the other - BusyBox contributors asking for private help unless you are planning on - paying for consulting services. -

- -

- When we answer questions on the BusyBox mailing list, it helps everyone - since people with similar problems in the future will be able to get help - by searching the mailing list archives. Private help is reserved as a paid - service. If you need to use private communication, or if you are serious - about getting timely assistance with BusyBox, you should seriously consider - paying for consulting services. -

- -
-

I need you to add <favorite feature>! Are the BusyBox developers willing to be paid in order to fix bugs or add in <favorite feature>? Are you willing to provide support contracts?

- -

- Yes we are. The easy way to sponsor a new feature is to post an offer on - the mailing list to see who's interested. You can also email the project's - maintainer and ask them to recommend someone. -

- -
-

Troubleshooting

- -
-

I think I found a bug in BusyBox! What should I do?

- -

- If you simply need help with using or configuring BusyBox, please submit a - detailed description of your problem to the BusyBox mailing list at busybox@busybox.net. - Please do not send email to individual developers asking - for private help unless you are planning on paying for consulting services. - When we answer questions on the BusyBox mailing list, it helps everyone, - while private answers help only you... -

- -

- Bug reports and new feature patches sometimes get lost when posted to the - mailing list, because the developers of BusyBox are busy people and have - only so much they can keep in their brains at a time. You can post a - polite reminder after 2-3 days without offending anybody. If that doesn't - result in a solution, please use the - BusyBox Bug - and Patch Tracking System to submit a detailed explanation and we'll - get to it as soon as we can. -

- -

- Note that bugs entered into the bug system without being mentioned on the - mailing list first may languish there for months before anyone even notices - them. We generally go through the bug system when preparing for new - development releases, to see what fell through the cracks while we were - off writing new features. (It's a fast/unreliable vs slow/reliable thing. - Saves retransits, but the latency sucks.) -

- -
-

I'm using an ancient version from the dawn of time and something's broken. Can you backport fixes for free?

- -

Variants of this one get asked a lot.

- -

The purpose of the BusyBox mailing list is to develop and improve BusyBox, -and we're happy to respond to our users' needs. But if you're coming to the -list for free tech support we're going to ask you to upgrade to a current -version before we try to diagnose your problem.

- -

If you're building BusyBox 0.50 with uClibc 0.9.19 and gcc 1.27 there's a -fairly large chance that whatever problem you're seeing has already been fixed. -To get that fix, all you have to do is upgrade to a newer version. If you -don't at least _try_ that, you're wasting our time.

- -

The volunteers are happy to fix any bugs you point out in the current -versions because doing so helps everybody and makes the project better. We -want to make the current version work for you. But diagnosing, debugging, and -backporting fixes to old versions isn't something we do for free, because it -doesn't help anybody but you. The cost of volunteer tech support is using a -reasonably current version of the project.

- -

If you don't want to upgrade, you have the complete source code and thus -the ability to fix it yourself, or hire a consultant to do it for you. If you -got your version from a vendor who still supports the older version, they can -help you. But there are limits as to what the volunteers will feel obliged to -do for you.

- -

As a rule of thumb, volunteers will generally answer polite questions about -a given version for about three years after its release before it's so old -we don't remember the answer off the top of our head. And if you want us to -put any _effort_ into tracking it down, we want you to put in a little effort -of your own by confirming it's still a problem with the current version. It's -also hard for us to fix a problem of yours if we can't reproduce it because -we don't have any systems running an environment that old.

- -

A consultant will happily set up a special environment just to reproduce -your problem, and you can always ask on the list if any of the developers -have consulting rates.

- -
-

Busybox init isn't working!

- -

- Init is the first program that runs, so it might be that no programs are - working on your new system because of a problem with your cross-compiler, - kernel, console settings, shared libraries, root filesystem... To rule all - that out, first build a statically linked version of the following "hello - world" program with your cross compiler toolchain: -

-
-#include <stdio.h>
-
-int main(int argc, char *argv)
-{
-  printf("Hello world!\n");
-  sleep(999999999);
-}
-
- -

- Now try to boot your device with an "init=" argument pointing to your - hello world program. Did you see the hello world message? Until you - do, don't bother messing with busybox init. -

- -

- Once you've got it working statically linked, try getting it to work - dynamically linked. Then read the FAQ entry How - do I build a BusyBox-based system?, and the - documentation for BusyBox - init. -

- -
-

I can't configure busybox on my system.

- -

- Configuring Busybox depends on a recent version of sed. Older - distributions (Red Hat 7.2, Debian 3.0) may not come with a - usable version. Luckily BusyBox can use its own sed to configure itself, - although this leads to a bit of a chicken and egg problem. - You can work around this by hand-configuring busybox to build with just - sed, then putting that sed in your path to configure the rest of busybox - with, like so: -

- -
-  tar xvjf sources/busybox-x.x.x.tar.bz2
-  cd busybox-x.x.x
-  make allnoconfig
-  make include/bb_config.h
-  echo "CONFIG_SED=y" >> .config
-  echo "#undef ENABLE_SED" >> include/bb_config.h
-  echo "#define ENABLE_SED 1" >> include/bb_config.h
-  make
-  mv busybox sed
-  export PATH=`pwd`:"$PATH"
-
- -

Then you can run "make defconfig" or "make menuconfig" normally.

- -
-

Why do I keep getting "sh: can't access tty; job control turned off" errors? Why doesn't Control-C work within my shell?

- -

- Job control will be turned off since your shell can not obtain a controlling - terminal. This typically happens when you run your shell on /dev/console. - The kernel will not provide a controlling terminal on the /dev/console - device. Your should run your shell on a normal tty such as tty1 or ttyS0 - and everything will work perfectly. If you REALLY want your shell - to run on /dev/console, then you can hack your kernel (if you are into that - sortof thing) by changing drivers/char/tty_io.c to change the lines where - it sets "noctty = 1;" to instead set it to "0". I recommend you instead - run your shell on a real console... -

- -
-

Misc. questions

- -
-

How do I change the time zone in busybox?

- -

Busybox has nothing to do with the timezone. Please consult your libc -documentation. (http://google.com/search?q=uclibc+glibc+timezone).

- -
-

Development

- -
-

What are the goals of busybox?

- -

Busybox aims to be the smallest and simplest correct implementation of the -standard Linux command line tools. First and foremost, this means the -smallest executable size we can manage. We also want to have the simplest -and cleanest implementation we can manage, be standards -compliant, minimize run-time memory usage (heap and stack), run fast, and -take over the world.

- -
-

What is the design of busybox?

- -

Busybox is like a swiss army knife: one thing with many functions. -The busybox executable can act like many different programs depending on -the name used to invoke it. Normal practice is to create a bunch of symlinks -pointing to the busybox binary, each of which triggers a different busybox -function. (See getting started in the -FAQ for more information on usage, and the -busybox documentation for a list of symlink names and what they do.) - -

The "one binary to rule them all" approach is primarily for size reasons: a -single multi-purpose executable is smaller then many small files could be. -This way busybox only has one set of ELF headers, it can easily share code -between different apps even when statically linked, it has better packing -efficiency by avoding gaps between files or compression dictionary resets, -and so on.

- -

Work is underway on new options such as "make standalone" to build separate -binaries for each applet, and a "libbb.so" to make the busybox common code -available as a shared library. Neither is ready yet at the time of this -writing.

- - - -
-

The applet directories

- -

The directory "applets" contains the busybox startup code (applets.c and -busybox.c), and several subdirectories containing the code for the individual -applets.

- -

Busybox execution starts with the main() function in applets/busybox.c, -which sets the global variable applet_name to argv[0] and calls -run_applet_and_exit() in applets/applets.c. That uses the applets[] array -(defined in include/busybox.h and filled out in include/applets.h) to -transfer control to the appropriate APPLET_main() function (such as -cat_main() or sed_main()). The individual applet takes it from there.

- -

This is why calling busybox under a different name triggers different -functionality: main() looks up argv[0] in applets[] to get a function pointer -to APPLET_main().

- -

Busybox applets may also be invoked through the multiplexor applet -"busybox" (see busybox_main() in libbb/appletlib.c), and through the -standalone shell (grep for STANDALONE_SHELL in applets/shell/*.c). -See getting started in the -FAQ for more information on these alternate usage mechanisms, which are -just different ways to reach the relevant APPLET_main() function.

- -

The applet subdirectories (archival, console-tools, coreutils, -debianutils, e2fsprogs, editors, findutils, init, loginutils, miscutils, -modutils, networking, procps, shell, sysklogd, and util-linux) correspond -to the configuration sub-menus in menuconfig. Each subdirectory contains the -code to implement the applets in that sub-menu, as well as a Config.in -file defining that configuration sub-menu (with dependencies and help text -for each applet), and the makefile segment (Makefile.in) for that -subdirectory.

- -

The run-time --help is stored in usage_messages[], which is initialized at -the start of applets/applets.c and gets its help text from usage.h. During the -build this help text is also used to generate the BusyBox documentation (in -html, txt, and man page formats) in the docs directory. See -adding an applet to busybox for more -information.

- -
-

libbb

- -

Most non-setup code shared between busybox applets lives in the libbb -directory. It's a mess that evolved over the years without much auditing -or cleanup. For anybody looking for a great project to break into busybox -development with, documenting libbb would be both incredibly useful and good -experience.

- -

Common themes in libbb include allocation functions that test -for failure and abort the program with an error message so the caller doesn't -have to test the return value (xmalloc(), xstrdup(), etc), wrapped versions -of open(), close(), read(), and write() that test for their own failures -and/or retry automatically, linked list management functions (llist.c), -command line argument parsing (getopt32.c), and a whole lot more.

- -
-

I want to make busybox even smaller, how do I go about it?

- -

- To conserve bytes it's good to know where they're being used, and the - size of the final executable isn't always a reliable indicator of - the size of the components (since various structures are rounded up, - so a small change may not even be visible by itself, but many small - savings add up). -

- -

The busybox Makefile builds two versions of busybox, one of which - (busybox_unstripped) has extra information that various analysis tools - can use. (This has nothing to do with CONFIG_DEBUG, leave that off - when trying to optimize for size.) -

- -

The "make bloatcheck" option uses Matt Mackall's bloat-o-meter - script to compare two versions of busybox (busybox_unstripped vs - busybox_old), and report which symbols changed size and by how much. - To use it, first build a base version with "make baseline". - (This creates busybox_old, which should have the original sizes for - comparison purposes.) Then build the new version with your changes - and run "make bloatcheck" to see the size differences from the old - version. -

-

- The first line of output has totals: how many symbols were added or - removed, how many symbols grew or shrank, the number of bytes added - and number of bytes removed by these changes, and finally the total - number of bytes difference between the two files. The remaining - lines show each individual symbol, the old and new sizes, and the - increase or decrease in size (which results are sorted by). -

-

- The "make sizes" option produces raw symbol size information for - busybox_unstripped. This is the output from the "nm --size-sort" - command (see "man nm" for more information), and is the information - bloat-o-meter parses to produce the comparison report above. For - defconfig, this is a good way to find the largest symbols in the tree - (which is a good place to start when trying to shrink the code). To - take a closer look at individual applets, configure busybox with just - one applet (run "make allnoconfig" and then switch on a single applet - with menuconfig), and then use "make sizes" to see the size of that - applet's components. -

-

- The "showasm" command (in the scripts directory) produces an assembly - dump of a function, providing a closer look at what changed. Try - "scripts/showasm busybox_unstripped" to list available symbols, and - "scripts/showasm busybox_unstripped symbolname" to see the assembly - for a sepecific symbol. -

- -
-

Adding an applet to busybox

- -

To add a new applet to busybox, first pick a name for the applet and -a corresponding CONFIG_NAME. Then do this:

- - - -
-

What standards does busybox adhere to?

- -

The standard we're paying attention to is the "Shell and Utilities" -portion of the Open -Group Base Standards (also known as the Single Unix Specification version -3 or SUSv3). Note that paying attention isn't necessarily the same thing as -following it.

- -

SUSv3 doesn't even mention things like init, mount, tar, or losetup, nor -commonly used options like echo's '-e' and '-n', or sed's '-i'. Busybox is -driven by what real users actually need, not the fact the standard believes -we should implement ed or sccs. For size reasons, we're unlikely to include -much internationalization support beyond UTF-8, and on top of all that, our -configuration menu lets developers chop out features to produce smaller but -very non-standard utilities.

- -

Also, Busybox is aimed primarily at Linux. Unix standards are interesting -because Linux tries to adhere to them, but portability to dozens of platforms -is only interesting in terms of offering a restricted feature set that works -everywhere, not growing dozens of platform-specific extensions. Busybox -should be portable to all hardware platforms Linux supports, and any other -similar operating systems that are easy to do and won't require much -maintenance.

- -

In practice, standards compliance tends to be a clean-up step once an -applet is otherwise finished. When polishing and testing a busybox applet, -we ensure we have at least the option of full standards compliance, or else -document where we (intentionally) fall short.

- -
-

Portability.

- -

Busybox is a Linux project, but that doesn't mean we don't have to worry -about portability. First of all, there are different hardware platforms, -different C library implementations, different versions of the kernel and -build toolchain... The file "include/platform.h" exists to centralize and -encapsulate various platform-specific things in one place, so most busybox -code doesn't have to care where it's running.

- -

To start with, Linux runs on dozens of hardware platforms. We try to test -each release on x86, x86-64, arm, power pc, and mips. (Since qemu can handle -all of these, this isn't that hard.) This means we have to care about a number -of portability issues like endianness, word size, and alignment, all of which -belong in platform.h. That header handles conditional #includes and gives -us macros we can use in the rest of our code. At some point in the future -we might grow a platform.c, possibly even a platform subdirectory. As long -as the applets themselves don't have to care.

- -

On a related note, we made the "default signedness of char varies" problem -go away by feeding the compiler -funsigned-char. This gives us consistent -behavior on all platforms, and defaults to 8-bit clean text processing (which -gets us halfway to UTF-8 support). NOMMU support is less easily separated -(see the tips section later in this document), but we're working on it.

- -

Another type of portability is build environments: we unapologetically use -a number of gcc and glibc extensions (as does the Linux kernel), but these have -been picked up by packages like uClibc, TCC, and Intel's C Compiler. As for -gcc, we take advantage of newer compiler optimizations to get the smallest -possible size, but we also regression test against an older build environment -using the Red Hat 9 image at "http://busybox.net/downloads/qemu". This has a -2.4 kernel, gcc 3.2, make 3.79.1, and glibc 2.3, and is the oldest -build/deployment environment we still put any effort into maintaining. (If -anyone takes an interest in older kernels you're welcome to submit patches, -but the effort would probably be better spent -trimming -down the 2.6 kernel.) Older gcc versions than that are uninteresting since -we now use c99 features, although -tcc might be worth a -look.

- -

We also test busybox against the current release of uClibc. Older versions -of uClibc aren't very interesting (they were buggy, and uClibc wasn't really -usable as a general-purpose C library before version 0.9.26 anyway).

- -

Other unix implementations are mostly uninteresting, since Linux binaries -have become the new standard for portable Unix programs. Specifically, -the ubiquity of Linux was cited as the main reason the Intel Binary -Compatability Standard 2 died, by the standards group organized to name a -successor to ibcs2: the 86open -project. That project disbanded in 1999 with the endorsement of an -existing standard: Linux ELF binaries. Since then, the major players at the -time (such as AIX, Solaris, and -FreeBSD) -have all either grown Linux support or folded.

- -

The major exceptions are newcomer MacOS X, some embedded environments -(such as newlib+libgloss) which provide a posix environment but not a full -Linux environment, and environments like Cygwin that provide only partial Linux -emulation. Also, some embedded Linux systems run a Linux kernel but amputate -things like the /proc directory to save space.

- -

Supporting these systems is largely a question of providing a clean subset -of BusyBox's functionality -- whichever applets can easily be made to -work in that environment. Annotating the configuration system to -indicate which applets require which prerequisites (such as procfs) is -also welcome. Other efforts to support these systems (swapping #include -files to build in different environments, adding adapter code to platform.h, -adding more extensive special-case supporting infrastructure such as mount's -legacy mtab support) are handled on a case-by-case basis. Support that can be -cleanly hidden in platform.h is reasonably attractive, and failing that -support that can be cleanly separated into a separate conditionally compiled -file is at least worth a look. Special-case code in the body of an applet is -something we're trying to avoid.

- -
-

Programming tips and tricks.

- -

Various things busybox uses that aren't particularly well documented -elsewhere.

- -
-

Encrypted Passwords

- -

Password fields in /etc/passwd and /etc/shadow are in a special format. -If the first character isn't '$', then it's an old DES style password. If -the first character is '$' then the password is actually three fields -separated by '$' characters:

-
-  $type$salt$encrypted_password
-
- -

The "type" indicates which encryption algorithm to use: 1 for MD5 and 2 for SHA1.

- -

The "salt" is a bunch of ramdom characters (generally 8) the encryption -algorithm uses to perturb the password in a known and reproducible way (such -as by appending the random data to the unencrypted password, or combining -them with exclusive or). Salt is randomly generated when setting a password, -and then the same salt value is re-used when checking the password. (Salt is -thus stored unencrypted.)

- -

The advantage of using salt is that the same cleartext password encrypted -with a different salt value produces a different encrypted value. -If each encrypted password uses a different salt value, an attacker is forced -to do the cryptographic math all over again for each password they want to -check. Without salt, they could simply produce a big dictionary of commonly -used passwords ahead of time, and look up each password in a stolen password -file to see if it's a known value. (Even if there are billions of possible -passwords in the dictionary, checking each one is just a binary search against -a file only a few gigabytes long.) With salt they can't even tell if two -different users share the same password without guessing what that password -is and decrypting it. They also can't precompute the attack dictionary for -a specific password until they know what the salt value is.

- -

The third field is the encrypted password (plus the salt). For md5 this -is 22 bytes.

- -

The busybox function to handle all this is pw_encrypt(clear, salt) in -"libbb/pw_encrypt.c". The first argument is the clear text password to be -encrypted, and the second is a string in "$type$salt$password" format, from -which the "type" and "salt" fields will be extracted to produce an encrypted -value. (Only the first two fields are needed, the third $ is equivalent to -the end of the string.) The return value is an encrypted password in -/etc/passwd format, with all three $ separated fields. It's stored in -a static buffer, 128 bytes long.

- -

So when checking an existing password, if pw_encrypt(text, -old_encrypted_password) returns a string that compares identical to -old_encrypted_password, you've got the right password. When setting a new -password, generate a random 8 character salt string, put it in the right -format with sprintf(buffer, "$%c$%s", type, salt), and feed buffer as the -second argument to pw_encrypt(text,buffer).

- -
-

Fork and vfork

- -

On systems that haven't got a Memory Management Unit, fork() is unreasonably -expensive to implement (and sometimes even impossible), so a less capable -function called vfork() is used instead. (Using vfork() on a system with an -MMU is like pounding a nail with a wrench. Not the best tool for the job, but -it works.)

- -

Busybox hides the difference between fork() and vfork() in -libbb/bb_fork_exec.c. If you ever want to fork and exec, use bb_fork_exec() -(which returns a pid and takes the same arguments as execve(), although in -this case envp can be NULL) and don't worry about it. This description is -here in case you want to know why that does what it does.

- -

Implementing fork() depends on having a Memory Management Unit. With an -MMU then you can simply set up a second set of page tables and share the -physical memory via copy-on-write. So a fork() followed quickly by exec() -only copies a few pages of the parent's memory, just the ones it changes -before freeing them.

- -

With a very primitive MMU (using a base pointer plus length instead of page -tables, which can provide virtual addresses and protect processes from each -other, but no copy on write) you can still implement fork. But it's -unreasonably expensive, because you have to copy all the parent process' -memory into the new process (which could easily be several megabytes per fork). -And you have to do this even though that memory gets freed again as soon as the -exec happens. (This is not just slow and a waste of space but causes memory -usage spikes that can easily cause the system to run out of memory.)

- -

Without even a primitive MMU, you have no virtual addresses. Every process -can reach out and touch any other process' memory, because all pointers are to -physical addresses with no protection. Even if you copy a process' memory to -new physical addresses, all of its pointers point to the old objects in the -old process. (Searching through the new copy's memory for pointers and -redirect them to the new locations is not an easy problem.)

- -

So with a primitive or missing MMU, fork() is just not a good idea.

- -

In theory, vfork() is just a fork() that writeably shares the heap and stack -rather than copying it (so what one process writes the other one sees). In -practice, vfork() has to suspend the parent process until the child does exec, -at which point the parent wakes up and resumes by returning from the call to -vfork(). All modern kernel/libc combinations implement vfork() to put the -parent to sleep until the child does its exec. There's just no other way to -make it work: the parent has to know the child has done its exec() or exit() -before it's safe to return from the function it's in, so it has to block -until that happens. In fact without suspending the parent there's no way to -even store separate copies of the return value (the pid) from the vfork() call -itself: both assignments write into the same memory location.

- -

One way to understand (and in fact implement) vfork() is this: imagine -the parent does a setjmp and then continues on (pretending to be the child) -until the exec() comes around, then the _exec_ does the actual fork, and the -parent does a longjmp back to the original vfork call and continues on from -there. (It thus becomes obvious why the child can't return, or modify -local variables it doesn't want the parent to see changed when it resumes.) - -

Note a common mistake: the need for vfork doesn't mean you can't have two -processes running at the same time. It means you can't have two processes -sharing the same memory without stomping all over each other. As soon as -the child calls exec(), the parent resumes.

- -

If the child's attempt to call exec() fails, the child should call _exit() -rather than a normal exit(). This avoids any atexit() code that might confuse -the parent. (The parent should never call _exit(), only a vforked child that -failed to exec.)

- -

(Now in theory, a nommu system could just copy the _stack_ when it forks -(which presumably is much shorter than the heap), and leave the heap shared. -Even with no MMU at all -In practice, you've just wound up in a multi-threaded situation and you can't -do a malloc() or free() on your heap without freeing the other process' memory -(and if you don't have the proper locking for being threaded, corrupting the -heap if both of you try to do it at the same time and wind up stomping on -each other while traversing the free memory lists). The thing about vfork is -that it's a big red flag warning "there be dragons here" rather than -something subtle and thus even more dangerous.)

- -
-

Short reads and writes

- -

Busybox has special functions, bb_full_read() and bb_full_write(), to -check that all the data we asked for got read or written. Is this a real -world consideration? Try the following:

- -
while true; do echo hello; sleep 1; done | tee out.txt
- -

If tee is implemented with bb_full_read(), tee doesn't display output -in real time but blocks until its entire input buffer (generally a couple -kilobytes) is read, then displays it all at once. In that case, we _want_ -the short read, for user interface reasons. (Note that read() should never -return 0 unless it has hit the end of input, and an attempt to write 0 -bytes should be ignored by the OS.)

- -

As for short writes, play around with two processes piping data to each -other on the command line (cat bigfile | gzip > out.gz) and suspend and -resume a few times (ctrl-z to suspend, "fg" to resume). The writer can -experience short writes, which are especially dangerous because if you don't -notice them you'll discard data. They can also happen when a system is under -load and a fast process is piping to a slower one. (Such as an xterm waiting -on x11 when the scheduler decides X is being a CPU hog with all that -text console scrolling...)

- -

So will data always be read from the far end of a pipe at the -same chunk sizes it was written in? Nope. Don't rely on that. For one -counterexample, see rfc 896 -for Nagle's algorithm, which waits a fraction of a second or so before -sending out small amounts of data through a TCP/IP connection in case more -data comes in that can be merged into the same packet. (In case you were -wondering why action games that use TCP/IP set TCP_NODELAY to lower the latency -on their their sockets, now you know.)

- -
-

Memory used by relocatable code, PIC, and static linking.

- -

The downside of standard dynamic linking is that it results in self-modifying -code. Although each executable's pages are mmaped() into a process' address -space from the executable file and are thus naturally shared between processes -out of the page cache, the library loader (ld-linux.so.2 or ld-uClibc.so.0) -writes to these pages to supply addresses for relocatable symbols. This -dirties the pages, triggering copy-on-write allocation of new memory for each -processes' dirtied pages.

- -

One solution to this is Position Independent Code (PIC), a way of linking -a file so all the relocations are grouped together. This dirties fewer -pages (often just a single page) for each process' relocations. The down -side is this results in larger executables, which take up more space on disk -(and a correspondingly larger space in memory). But when many copies of the -same program are running, PIC dynamic linking trades a larger disk footprint -for a smaller memory footprint, by sharing more pages.

- -

A third solution is static linking. A statically linked program has no -relocations, and thus the entire executable is shared between all running -instances. This tends to have a significantly larger disk footprint, but -on a system with only one or two executables, shared libraries aren't much -of a win anyway.

- -

You can tell the glibc linker to display debugging information about its -relocations with the environment variable "LD_DEBUG". Try -"LD_DEBUG=help /bin/true" for a list of commands. Learning to interpret -"LD_DEBUG=statistics cat /proc/self/statm" could be interesting.

- -

For more on this topic, here's Rich Felker:

-
-

Dynamic linking (without fixed load addresses) fundamentally requires -at least one dirty page per dso that uses symbols. Making calls (but -never taking the address explicitly) to functions within the same dso -does not require a dirty page by itself, but will with ELF unless you -use -Bsymbolic or hidden symbols when linking.

- -

ELF uses significant additional stack space for the kernel to pass all -the ELF data structures to the newly created process image. These are -located above the argument list and environment. This normally adds 1 -dirty page to the process size.

- -

The ELF dynamic linker has its own data segment, adding one or more -dirty pages. I believe it also performs relocations on itself.

- -

The ELF dynamic linker makes significant dynamic allocations to manage -the global symbol table and the loaded dso's. This data is never -freed. It will be needed again if libdl is used, so unconditionally -freeing it is not possible, but normal programs do not use libdl. Of -course with glibc all programs use libdl (due to nsswitch) so the -issue was never addressed.

- -

ELF also has the issue that segments are not page-aligned on disk. -This saves up to 4k on disk, but at the expense of using an additional -dirty page in most cases, due to a large portion of the first data -page being filled with a duplicate copy of the last text page.

- -

The above is just a partial list of the tiny memory penalties of ELF -dynamic linking, which eventually add up to quite a bit. The smallest -I've been able to get a process down to is 8 dirty pages, and the -above factors seem to mostly account for it (but some were difficult -to measure).

-
- -
-

Including kernel headers

- -

The "linux" or "asm" directories of /usr/include -contain Linux kernel -headers, so that the C library can talk directly to the Linux kernel. In -a perfect world, applications shouldn't include these headers directly, but -we don't live in a perfect world.

- -

For example, Busybox's losetup code wants linux/loop.c because nothing else -#defines the structures to call the kernel's loopback device setup ioctls. -Attempts to cut and paste the information into a local busybox header file -proved incredibly painful, because portions of the loop_info structure vary by -architecture, namely the type __kernel_dev_t has different sizes on alpha, -arm, x86, and so on. Meaning we either #include <linux/posix_types.h> or -we hardwire #ifdefs to check what platform we're building on and define this -type appropriately for every single hardware architecture supported by -Linux, which is simply unworkable.

- -

This is aside from the fact that the relevant type defined in -posix_types.h was renamed to __kernel_old_dev_t during the 2.5 series, so -to cut and paste the structure into our header we have to #include -<linux/version.h> to figure out which name to use. (What we actually -do is -check if we're building on 2.6, and if so just use the new 64 bit structure -instead to avoid the rename entirely.) But we still need the version -check, since 2.4 didn't have the 64 bit structure.

- -

The BusyBox developers spent two years trying to figure -out a clean way to do all this. There isn't one. The losetup in the -util-linux package from kernel.org isn't doing it cleanly either, they just -hide the ugliness by nesting #include files. Their mount/loop.h -#includes "my_dev_t.h", which #includes <linux/posix_types.h> -and <linux/version.h> just like we do. There simply is no alternative. -

- -

Just because directly #including kernel headers is sometimes -unavoidable doesn't me we should include them when there's a better -way to do it. However, block copying information out of the kernel headers -is not a better way.

- -
-

Who are the BusyBox developers?

- -

The following login accounts currently exist on busybox.net. (I.E. these -people can commit patches -into subversion for the BusyBox, uClibc, and buildroot projects.)

- -
-aldot     :Bernhard Reutner-Fischer
-andersen  :Erik Andersen      - uClibc and BuildRoot maintainer.
-bug1      :Glenn McGrath
-davidm    :David McCullough
-gkajmowi  :Garrett Kajmowicz  - uClibc++ maintainer
-jbglaw    :Jan-Benedict Glaw
-jocke     :Joakim Tjernlund
-landley   :Rob Landley
-lethal    :Paul Mundt
-mjn3      :Manuel Novoa III
-osuadmin  :osuadmin
-pgf       :Paul Fox
-pkj       :Peter Kjellerstedt
-prpplague :David Anders
-psm       :Peter S. Mazinger
-russ      :Russ Dill
-sandman   :Robert Griebl
-sjhill    :Steven J. Hill
-solar     :Ned Ludd
-timr      :Tim Riker
-tobiasa   :Tobias Anderberg
-vapier    :Mike Frysinger
-vda       :Denys Vlasenko     - BusyBox maintainer
-
- -

The following accounts used to exist on busybox.net, but don't anymore so -I can't ask /etc/passwd for their names. Rob Wentworth -<robwen at gmail.com> asked Google and recovered the names:

- -
-aaronl   :Aaron Lehmann
-beppu    :John Beppu
-dwhedon  :David Whedon
-erik     :Erik Andersen
-gfeldman :Gennady Feldman
-jimg     :Jim Gleason
-kraai    :Matt Kraai
-markw    :Mark Whitley
-miles    :Miles Bader
-proski   :Pavel Roskin
-rjune    :Richard June
-tausq    :Randolph Chung
-vodz     :Vladimir N. Oleynik
-
- - -
-
-
- - diff --git a/docs/busybox.net/about.html b/docs/busybox.net/about.html deleted file mode 100644 index 35809c315..000000000 --- a/docs/busybox.net/about.html +++ /dev/null @@ -1,24 +0,0 @@ - - -

BusyBox: The Swiss Army Knife of Embedded Linux

- -

BusyBox combines tiny versions of many common UNIX utilities into a single -small executable. It provides replacements for most of the utilities you -usually find in GNU fileutils, shellutils, etc. The utilities in BusyBox -generally have fewer options than their full-featured GNU cousins; however, -the options that are included provide the expected functionality and behave -very much like their GNU counterparts. BusyBox provides a fairly complete -environment for any small or embedded system.

- -

BusyBox has been written with size-optimization and limited resources in -mind. It is also extremely modular so you can easily include or exclude -commands (or features) at compile time. This makes it easy to customize -your embedded systems. To create a working system, just add some device -nodes in /dev, a few configuration files in /etc, and a Linux kernel.

- -

BusyBox is maintained by -Denys Vlasenko, -and licensed under the GNU GENERAL PUBLIC LICENSE -version 2.

- - diff --git a/docs/busybox.net/busybox-growth.ps b/docs/busybox.net/busybox-growth.ps deleted file mode 100644 index 2379defa4..000000000 --- a/docs/busybox.net/busybox-growth.ps +++ /dev/null @@ -1,404 +0,0 @@ -%!PS-Adobe-2.0 -%%Title: busybox-growth.ps -%%Creator: gnuplot 3.5 (pre 3.6) patchlevel beta 347 -%%CreationDate: Tue Apr 10 14:03:36 2001 -%%DocumentFonts: (atend) -%%BoundingBox: 50 40 554 770 -%%Orientation: Landscape -%%Pages: (atend) -%%EndComments -/gnudict 120 dict def -gnudict begin -/Color true def -/Solid true def -/gnulinewidth 5.000 def -/userlinewidth gnulinewidth def -/vshift -46 def -/dl {10 mul} def -/hpt_ 31.5 def -/vpt_ 31.5 def -/hpt hpt_ def -/vpt vpt_ def -/M {moveto} bind def -/L {lineto} bind def -/R {rmoveto} bind def -/V {rlineto} bind def -/vpt2 vpt 2 mul def -/hpt2 hpt 2 mul def -/Lshow { currentpoint stroke M - 0 vshift R show } def -/Rshow { currentpoint stroke M - dup stringwidth pop neg vshift R show } def -/Cshow { currentpoint stroke M - dup stringwidth pop -2 div vshift R show } def -/UP { dup vpt_ mul /vpt exch def hpt_ mul /hpt exch def - /hpt2 hpt 2 mul def /vpt2 vpt 2 mul def } def -/DL { Color {setrgbcolor Solid {pop []} if 0 setdash } - {pop pop pop Solid {pop []} if 0 setdash} ifelse } def -/BL { stroke gnulinewidth 2 mul setlinewidth } def -/AL { stroke gnulinewidth 2 div setlinewidth } def -/UL { gnulinewidth mul /userlinewidth exch def } def -/PL { stroke userlinewidth setlinewidth } def -/LTb { BL [] 0 0 0 DL } def -/LTa { AL [1 dl 2 dl] 0 setdash 0 0 0 setrgbcolor } def -/LT0 { PL [] 1 0 0 DL } def -/LT1 { PL [4 dl 2 dl] 0 1 0 DL } def -/LT2 { PL [2 dl 3 dl] 0 0 1 DL } def -/LT3 { PL [1 dl 1.5 dl] 1 0 1 DL } def -/LT4 { PL [5 dl 2 dl 1 dl 2 dl] 0 1 1 DL } def -/LT5 { PL [4 dl 3 dl 1 dl 3 dl] 1 1 0 DL } def -/LT6 { PL [2 dl 2 dl 2 dl 4 dl] 0 0 0 DL } def -/LT7 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 1 0.3 0 DL } def -/LT8 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 0.5 0.5 0.5 DL } def -/Pnt { stroke [] 0 setdash - gsave 1 setlinecap M 0 0 V stroke grestore } def -/Dia { stroke [] 0 setdash 2 copy vpt add M - hpt neg vpt neg V hpt vpt neg V - hpt vpt V hpt neg vpt V closepath stroke - Pnt } def -/Pls { stroke [] 0 setdash vpt sub M 0 vpt2 V - currentpoint stroke M - hpt neg vpt neg R hpt2 0 V stroke - } def -/Box { stroke [] 0 setdash 2 copy exch hpt sub exch vpt add M - 0 vpt2 neg V hpt2 0 V 0 vpt2 V - hpt2 neg 0 V closepath stroke - Pnt } def -/Crs { stroke [] 0 setdash exch hpt sub exch vpt add M - hpt2 vpt2 neg V currentpoint stroke M - hpt2 neg 0 R hpt2 vpt2 V stroke } def -/TriU { stroke [] 0 setdash 2 copy vpt 1.12 mul add M - hpt neg vpt -1.62 mul V - hpt 2 mul 0 V - hpt neg vpt 1.62 mul V closepath stroke - Pnt } def -/Star { 2 copy Pls Crs } def -/BoxF { stroke [] 0 setdash exch hpt sub exch vpt add M - 0 vpt2 neg V hpt2 0 V 0 vpt2 V - hpt2 neg 0 V closepath fill } def -/TriUF { stroke [] 0 setdash vpt 1.12 mul add M - hpt neg vpt -1.62 mul V - hpt 2 mul 0 V - hpt neg vpt 1.62 mul V closepath fill } def -/TriD { stroke [] 0 setdash 2 copy vpt 1.12 mul sub M - hpt neg vpt 1.62 mul V - hpt 2 mul 0 V - hpt neg vpt -1.62 mul V closepath stroke - Pnt } def -/TriDF { stroke [] 0 setdash vpt 1.12 mul sub M - hpt neg vpt 1.62 mul V - hpt 2 mul 0 V - hpt neg vpt -1.62 mul V closepath fill} def -/DiaF { stroke [] 0 setdash vpt add M - hpt neg vpt neg V hpt vpt neg V - hpt vpt V hpt neg vpt V closepath fill } def -/Pent { stroke [] 0 setdash 2 copy gsave - translate 0 hpt M 4 {72 rotate 0 hpt L} repeat - closepath stroke grestore Pnt } def -/PentF { stroke [] 0 setdash gsave - translate 0 hpt M 4 {72 rotate 0 hpt L} repeat - closepath fill grestore } def -/Circle { stroke [] 0 setdash 2 copy - hpt 0 360 arc stroke Pnt } def -/CircleF { stroke [] 0 setdash hpt 0 360 arc fill } def -/C0 { BL [] 0 setdash 2 copy moveto vpt 90 450 arc } bind def -/C1 { BL [] 0 setdash 2 copy moveto - 2 copy vpt 0 90 arc closepath fill - vpt 0 360 arc closepath } bind def -/C2 { BL [] 0 setdash 2 copy moveto - 2 copy vpt 90 180 arc closepath fill - vpt 0 360 arc closepath } bind def -/C3 { BL [] 0 setdash 2 copy moveto - 2 copy vpt 0 180 arc closepath fill - vpt 0 360 arc closepath } bind def -/C4 { BL [] 0 setdash 2 copy moveto - 2 copy vpt 180 270 arc closepath fill - vpt 0 360 arc closepath } bind def -/C5 { BL [] 0 setdash 2 copy moveto - 2 copy vpt 0 90 arc - 2 copy moveto - 2 copy vpt 180 270 arc closepath fill - vpt 0 360 arc } bind def -/C6 { BL [] 0 setdash 2 copy moveto - 2 copy vpt 90 270 arc closepath fill - vpt 0 360 arc closepath } bind def -/C7 { BL [] 0 setdash 2 copy moveto - 2 copy vpt 0 270 arc closepath fill - vpt 0 360 arc closepath } bind def -/C8 { BL [] 0 setdash 2 copy moveto - 2 copy vpt 270 360 arc closepath fill - vpt 0 360 arc closepath } bind def -/C9 { BL [] 0 setdash 2 copy moveto - 2 copy vpt 270 450 arc closepath fill - vpt 0 360 arc closepath } bind def -/C10 { BL [] 0 setdash 2 copy 2 copy moveto vpt 270 360 arc closepath fill - 2 copy moveto - 2 copy vpt 90 180 arc closepath fill - vpt 0 360 arc closepath } bind def -/C11 { BL [] 0 setdash 2 copy moveto - 2 copy vpt 0 180 arc closepath fill - 2 copy moveto - 2 copy vpt 270 360 arc closepath fill - vpt 0 360 arc closepath } bind def -/C12 { BL [] 0 setdash 2 copy moveto - 2 copy vpt 180 360 arc closepath fill - vpt 0 360 arc closepath } bind def -/C13 { BL [] 0 setdash 2 copy moveto - 2 copy vpt 0 90 arc closepath fill - 2 copy moveto - 2 copy vpt 180 360 arc closepath fill - vpt 0 360 arc closepath } bind def -/C14 { BL [] 0 setdash 2 copy moveto - 2 copy vpt 90 360 arc closepath fill - vpt 0 360 arc } bind def -/C15 { BL [] 0 setdash 2 copy vpt 0 360 arc closepath fill - vpt 0 360 arc closepath } bind def -/Rec { newpath 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto - neg 0 rlineto closepath } bind def -/Square { dup Rec } bind def -/Bsquare { vpt sub exch vpt sub exch vpt2 Square } bind def -/S0 { BL [] 0 setdash 2 copy moveto 0 vpt rlineto BL Bsquare } bind def -/S1 { BL [] 0 setdash 2 copy vpt Square fill Bsquare } bind def -/S2 { BL [] 0 setdash 2 copy exch vpt sub exch vpt Square fill Bsquare } bind def -/S3 { BL [] 0 setdash 2 copy exch vpt sub exch vpt2 vpt Rec fill Bsquare } bind def -/S4 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt Square fill Bsquare } bind def -/S5 { BL [] 0 setdash 2 copy 2 copy vpt Square fill - exch vpt sub exch vpt sub vpt Square fill Bsquare } bind def -/S6 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill Bsquare } bind def -/S7 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill - 2 copy vpt Square fill - Bsquare } bind def -/S8 { BL [] 0 setdash 2 copy vpt sub vpt Square fill Bsquare } bind def -/S9 { BL [] 0 setdash 2 copy vpt sub vpt vpt2 Rec fill Bsquare } bind def -/S10 { BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt Square fill - Bsquare } bind def -/S11 { BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt2 vpt Rec fill - Bsquare } bind def -/S12 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill Bsquare } bind def -/S13 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill - 2 copy vpt Square fill Bsquare } bind def -/S14 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill - 2 copy exch vpt sub exch vpt Square fill Bsquare } bind def -/S15 { BL [] 0 setdash 2 copy Bsquare fill Bsquare } bind def -/D0 { gsave translate 45 rotate 0 0 S0 stroke grestore } bind def -/D1 { gsave translate 45 rotate 0 0 S1 stroke grestore } bind def -/D2 { gsave translate 45 rotate 0 0 S2 stroke grestore } bind def -/D3 { gsave translate 45 rotate 0 0 S3 stroke grestore } bind def -/D4 { gsave translate 45 rotate 0 0 S4 stroke grestore } bind def -/D5 { gsave translate 45 rotate 0 0 S5 stroke grestore } bind def -/D6 { gsave translate 45 rotate 0 0 S6 stroke grestore } bind def -/D7 { gsave translate 45 rotate 0 0 S7 stroke grestore } bind def -/D8 { gsave translate 45 rotate 0 0 S8 stroke grestore } bind def -/D9 { gsave translate 45 rotate 0 0 S9 stroke grestore } bind def -/D10 { gsave translate 45 rotate 0 0 S10 stroke grestore } bind def -/D11 { gsave translate 45 rotate 0 0 S11 stroke grestore } bind def -/D12 { gsave translate 45 rotate 0 0 S12 stroke grestore } bind def -/D13 { gsave translate 45 rotate 0 0 S13 stroke grestore } bind def -/D14 { gsave translate 45 rotate 0 0 S14 stroke grestore } bind def -/D15 { gsave translate 45 rotate 0 0 S15 stroke grestore } bind def -/DiaE { stroke [] 0 setdash vpt add M - hpt neg vpt neg V hpt vpt neg V - hpt vpt V hpt neg vpt V closepath stroke } def -/BoxE { stroke [] 0 setdash exch hpt sub exch vpt add M - 0 vpt2 neg V hpt2 0 V 0 vpt2 V - hpt2 neg 0 V closepath stroke } def -/TriUE { stroke [] 0 setdash vpt 1.12 mul add M - hpt neg vpt -1.62 mul V - hpt 2 mul 0 V - hpt neg vpt 1.62 mul V closepath stroke } def -/TriDE { stroke [] 0 setdash vpt 1.12 mul sub M - hpt neg vpt 1.62 mul V - hpt 2 mul 0 V - hpt neg vpt -1.62 mul V closepath stroke } def -/PentE { stroke [] 0 setdash gsave - translate 0 hpt M 4 {72 rotate 0 hpt L} repeat - closepath stroke grestore } def -/CircE { stroke [] 0 setdash - hpt 0 360 arc stroke } def -/Opaque { gsave closepath 1 setgray fill grestore 0 setgray closepath } def -/DiaW { stroke [] 0 setdash vpt add M - hpt neg vpt neg V hpt vpt neg V - hpt vpt V hpt neg vpt V Opaque stroke } def -/BoxW { stroke [] 0 setdash exch hpt sub exch vpt add M - 0 vpt2 neg V hpt2 0 V 0 vpt2 V - hpt2 neg 0 V Opaque stroke } def -/TriUW { stroke [] 0 setdash vpt 1.12 mul add M - hpt neg vpt -1.62 mul V - hpt 2 mul 0 V - hpt neg vpt 1.62 mul V Opaque stroke } def -/TriDW { stroke [] 0 setdash vpt 1.12 mul sub M - hpt neg vpt 1.62 mul V - hpt 2 mul 0 V - hpt neg vpt -1.62 mul V Opaque stroke } def -/PentW { stroke [] 0 setdash gsave - translate 0 hpt M 4 {72 rotate 0 hpt L} repeat - Opaque stroke grestore } def -/CircW { stroke [] 0 setdash - hpt 0 360 arc Opaque stroke } def -/BoxFill { gsave Rec 1 setgray fill grestore } def -end -%%EndProlog -%%Page: 1 1 -gnudict begin -gsave -50 50 translate -0.100 0.100 scale -90 rotate -0 -5040 translate -0 setgray -newpath -(Helvetica) findfont 140 scalefont setfont -1.000 UL -LTb -560 420 M -63 0 V -6409 0 R --63 0 V -476 420 M -(0) Rshow -560 1056 M -63 0 V -6409 0 R --63 0 V --6493 0 R -(100) Rshow -560 1692 M -63 0 V -6409 0 R --63 0 V --6493 0 R -(200) Rshow -560 2328 M -63 0 V -6409 0 R --63 0 V --6493 0 R -(300) Rshow -560 2964 M -63 0 V -6409 0 R --63 0 V --6493 0 R -(400) Rshow -560 3600 M -63 0 V -6409 0 R --63 0 V --6493 0 R -(500) Rshow -560 4236 M -63 0 V -6409 0 R --63 0 V --6493 0 R -(600) Rshow -560 4872 M -63 0 V -6409 0 R --63 0 V --6493 0 R -(700) Rshow -1531 420 M -0 63 V -0 4389 R -0 -63 V -0 -4529 R -(400) Cshow -2825 420 M -0 63 V -0 4389 R -0 -63 V -0 -4529 R -(600) Cshow -4120 420 M -0 63 V -0 4389 R -0 -63 V -0 -4529 R -(800) Cshow -5414 420 M -0 63 V -0 4389 R -0 -63 V -0 -4529 R -(1000) Cshow -6708 420 M -0 63 V -0 4389 R -0 -63 V -0 -4529 R -(1200) Cshow -1.000 UL -LTb -560 420 M -6472 0 V -0 4452 V --6472 0 V -560 420 L -0 2646 M -currentpoint gsave translate 90 rotate 0 0 M -(tar.gz size \(Kb\)) Cshow -grestore -3796 140 M -(time \(days since Jan 1, 1998\)) Cshow -1.000 UL -LT0 -696 420 M -0 593 V -1255 0 V -0 15 V -214 0 V -0 6 V -958 0 V -0 1 V --84 0 V -0 37 V -168 0 V -0 262 V -13 0 V -0 56 V -91 0 V -0 33 V -6 0 V -0 1 V -19 0 V -0 11 V -20 0 V -0 13 V -32 0 V -0 104 V -52 0 V -0 27 V -65 0 V -0 15 V -39 0 V -0 126 V -174 0 V -0 103 V -52 0 V -0 49 V -175 0 V -0 56 V -433 0 V -0 661 V -415 0 V -0 857 V -123 0 V -0 -291 V -498 0 V -0 208 V -505 0 V -0 66 V -291 0 V -0 115 V -311 0 V -0 449 V -162 0 V -0 309 V -stroke -grestore -end -showpage -%%Trailer -%%DocumentFonts: Helvetica -%%Pages: 1 diff --git a/docs/busybox.net/copyright.txt b/docs/busybox.net/copyright.txt deleted file mode 100644 index 397475632..000000000 --- a/docs/busybox.net/copyright.txt +++ /dev/null @@ -1,30 +0,0 @@ - -The code and graphics on this website (and it's mirror sites, if any) are -Copyright (c) 1999-2004 by Erik Andersen. All rights reserved. -Copyright (c) 2005-2006 Rob Landley. - -Documents on this Web site including their graphical elements, design, and -layout are protected by trade dress and other laws and MAY BE COPIED OR -IMITATED IN WHOLE OR IN PART. THIS WEBSITE IS LICENSED FREE OF CHARGE, THERE -IS NO WARRANTY FOR THE WEBSITE TO THE EXTENT PERMITTED BY APPLICABLE LAW. -SHOULD THIS WEBSITE PROVE DEFECTIVE, YOU MAY ASSUME THAT SOMEONE MIGHT GET -AROUND TO SERVICING, REPAIRING OR CORRECTING IT SOMETIME WHEN THEY HAVE NOTHING -BETTER TO DO. REGARDLESS, YOU GET TO KEEP BOTH PIECES. - -IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY -COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THIS -WEBSITE AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR -INABILITY TO USE THIS WEBSITE (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR -LOSS OF HAIR, LOSS OF LIFE, LOSS OF MEMORY, LOSS OF YOUR CARKEYS, MISPLACEMENT -OF YOUR PAYCHECK, OR COMMANDER DATA BEING RENDERED UNABLE TO ASSIST THE -STARFLEET OFFICERS ABORD THE STARSHIP ENTERPRISE TO RECALIBRATE THE MAIN -DEFLECTOR ARRAY, LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE -WEBSITE TO OPERATE WITH YOUR WEBBROWSER), EVEN IF SUCH HOLDER OR OTHER PARTY -HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - -You have been warned. - -You can contact the webmaster at if you have some sort -of problem with this. - diff --git a/docs/busybox.net/developer.html b/docs/busybox.net/developer.html deleted file mode 100644 index ce50555ae..000000000 --- a/docs/busybox.net/developer.html +++ /dev/null @@ -1,92 +0,0 @@ - - -

Prerequisites

-

-

    -
  • Send several sensible patches to the Mailing list.
  • -
  • Help users, answer their questions, guide them, be helpful and friendly.
  • -
  • Repeat above. -
-

-

-If you feel comfortable with the above and have proven to continually -fulfill these requirements, or somebody asks you to apply for write-access -to the repository who itself is maintainer of a project, then please apply -for an account (if needed). -

-

Morris Dancing

- -

Subversion commit access requires an account on Morris. The server -behind busybox.net and uclibc.org. If you want to be able to commit things to -Subversion, first contribute some stuff to show you are serious, can handle -some responsibility, and that your patches don't generally need a lot of -cleanup. Then, very nicely ask one of us -(Denys Vlasenko for primarily BusyBox, or -Bernhard Reutner-Fischer primarily for uClibc) -for an account.

- -

If you're approved for an account, you'll need to send an email from your -preferred contact email address with the username you'd like to use when -committing changes to GIT, and attach a public ssh key to access your account -with.

- -

If you don't currently have an ssh version 2 DSA key at least 4096 bits -long, you can generate a key using the command -ssh-keygen -b 4096 -t dsa -and hitting enter at the prompts. -This will create the files ~/.ssh/id_dsa and ~/.ssh/id_dsa.pub -You must then send the content of 'id_dsa.pub' to me so I can set up your -account. (The content of 'id_dsa' should of course be kept secret, anyone -who has that can access any account that's installed your public key in -its .ssh/authorized_keys file.)

- -

Note that if you would prefer to keep your communications with us -private, you can encrypt your email using -Denys' public key or -Bernhard's public key. -

- -

Once you are setup with an account, you will need to use your account to -checkout a copy of BusyBox from GIT:

- -

git+ssh://username@git.busybox.net/git/busybox busybox.mine

-

or

-

git+ssh://username@git.uClibc.org/git/uClibc uClibc.tmp

- -

You must change username to your own username, or omit -it if it's the same as your local username.

- -

You can then enter the newly checked out project directory, make changes, -check your changes, diff your changes, revert your changes, and and commit your -changes using commands such as:

- -
-git diff
-git format-patch -s
-git status
-git revert 
-EDITOR=vi git commit -s
-git log
-git push -v --thin
-git help
-
- -

For additional detail on how to use -GIT, please visit the -GIT overview site. -You might also want to read online the manpages -or -tutorial. -

- -

A morris account also gives you a personal web page -(http://busybox.net/~username comes from ~/public_html on morris), and of -course a shell prompt you can ssh into (as a regular user, root access is -reserved for folks doing maintenancy stuff only). But keep in mind an -account on Morris is a -priviledge, not a requirement. Most contributors to busybox and uClibc -haven't got one, and accounts are handed out to make the project maintainers' -lives easier, not because "you deserve it".

- - diff --git a/docs/busybox.net/download.html b/docs/busybox.net/download.html deleted file mode 100644 index 34195b6f1..000000000 --- a/docs/busybox.net/download.html +++ /dev/null @@ -1,60 +0,0 @@ - - - - -

Download

- -

-Source for the latest release can always be -downloaded from http://www.busybox.net/downloads/. - -

-Each 1.x branch has bug fix releases after initial 1.x.0 release. -Also there are patches on top of latest bug fix release. -

-Latest releases and patch directories for each branch: -
-1.10.1, -patches, -
-1.9.2, -patches, -
-1.8.3, -patches, -
-1.7.5, -patches, -
-1.6.2, -patches, -
-1.5.2, -patches, -
-1.4.2, -patches, -
-1.3.2, -patches. - -

-You can also obtain Daily Snapshots of -the latest development source tree for those wishing to follow BusyBox development, -but cannot or do not wish to use Subversion (svn). - -

- - - diff --git a/docs/busybox.net/fix.html b/docs/busybox.net/fix.html deleted file mode 100644 index 7bd7fe0f4..000000000 --- a/docs/busybox.net/fix.html +++ /dev/null @@ -1,15 +0,0 @@ - - -

How to get your patch added to "hot fixes"

- -

If you found a regression or severe bug in busybox, and you have a patch - for it, and you want to see it added to "hot fixes", please rediff your - patch against corresponding unmodified busybox source and send it to - the mailing list. -

- -
-
-
- - diff --git a/docs/busybox.net/footer.html b/docs/busybox.net/footer.html deleted file mode 100644 index 066709237..000000000 --- a/docs/busybox.net/footer.html +++ /dev/null @@ -1,51 +0,0 @@ - - - - - - - -
- - - - - - - - - - - -
- - - Copyright © 1999-2008 Erik Andersen -
- Mail all comments, insults, suggestions and bribes to -
- Denys Vlasenko vda.linux@googlemail.com
-
- -
- This site created with the vi editor - - This site is kindly hosted by OSL -
- - - - diff --git a/docs/busybox.net/header.html b/docs/busybox.net/header.html deleted file mode 100644 index 16f3d7aea..000000000 --- a/docs/busybox.net/header.html +++ /dev/null @@ -1,92 +0,0 @@ - - - - - - BusyBox - - - - - - - - - - - - - - - -R&>bG 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 diff --git a/docs/busybox.net/images/busybox2.png b/docs/busybox.net/images/busybox2.png deleted file mode 100644 index a7460b672c9a02850daba7ecf5287d0193bd8516..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 71850 zcmV)=K!m@EP)000W>0fLJSS^xk52XskIMF-ge5)?BL{J~{i0000PbVXQn zLvL+uWo~o;Lvm$dbY)~9cWHEJAV*0}P*;Ht7XSbt07*naRCwC#y;-v)$8{$7o#PRa znRl&QRVdT~fLIHpD3PK-wKT16BQ$N(V>Sak%@gng$R7Z_3wkGiK=TJsWAjRy&De~M zHD%T_%^8s+HPzw*k|4IK0t$8OZkZX2yPq=;?y+X(U25SX-GE(7)V-OJ5gzWxzjMxa zzC*wI@I9O#=g0YR^0B|KxW8-h{0kWX;1@rwHk>P8+1eie?Tu&B^8xy2cqHdTaDMzt zJ*rZ{hA^Kh4)!Y)MTMfMzFri?*Q=^}#d?CP3`7&C66UiKW#RE(|H~#)9^>HP03bn{ z39h|=5&!C6?@*c$6z+U*&kf}Haen-M9rLNdy}KT>+3aicdHzmSx>u*uIlNam=U^*` zs&cT_!#M}>jLF(1%w{E22>`=c!jZ8UB^jKXU}t9sAHM$!eDK~cFq=N7|K0y^k$^P- z^Ya1!XK>KDi+z6lJ|E5zs)A6=3Hb~V0iXSdc)8LCOh~2qXljf`pP__y7n9 ztbh>5R{;^ABp^s*NI?dKF`x!jDRAoGbqc5Vaq)`cOJ8~Ft6%)X%^y9E@hRp8AHC;Z zx%b)84-fZq-23bRd2TVE&*8mAni@>j#>lb+oLD5IDJE--otRbrF&CEHoR9@Yf+Vgs#G|qu$71R3h@jTh6qDNL2y7!qNt2O zWMGJqW@#{aDqsc-F~9`%fT%)6VE_;a3oc05MbzR2T|^51m z$?X~5fA8+m&wjFn&8-n$eCav5bcHcqlkvJb{j)k8%gA|O%-CxCaYaU?8xWk4822~-j4uHkfjr-7>EeG_wZt2n2@F^jM>0^ zI)_QtV0aA#k1Ee`ca~%K-V`PQ?%ckwn_FXCx^w}TE^lAIdVT%Q<^?*R)aM5B{5b33 zoMJxpIM^#;t-w3Iwzqfiu5+?sD}l8Z&IxQ4kfE~%<=jA}YbY4dad-v8y6|c=2@bCi zpaulMM3L4je0a*{{B84zO>Y*`94x}I$WJv<&3orpGGiFDEd!JOVUAdBd?@^BZ!NK15L#&bD zox)ZXoCCyb91jTwp91=Y61>Ymnt@YBY7~iChnEu0=kT_~uYPeGYwIbtws*08VeR$@ z?{DJbrLFH@x^(F;Z#@RM zMUhu1OAF^bR0ygB?={k62&xM4fOsG^n*gPK14-PW(h!&v5KKs}h`>2*CuqU}DS`lI zBn$`uRtrajacZC(%$0`+i8ikSkFs(g3FjjsFatzMG$_;>MdiM6tjB~9Igkd3?tHL7 z!NnI5nAE^|h8KqM362hCIM}n_Wn3b`?jw0Nw?E7=pShdP5}+AG6lG~462^_8ND>2M z5�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

4cA0cz^b@ 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 Rk^g|X{%slljbvx=zX8;`0igf@ diff --git a/docs/busybox.net/images/dir.png b/docs/busybox.net/images/dir.png deleted file mode 100644 index 1d633ce4a673207a08d856acdfacb1933c98c3b5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 309 zcmeAS@N?(olHy`uVBq!ia0vp^B0wz0!VDyh@)w!{DWL$L5Z5#R|NlQT6G+TVGX?^n zu*ETTF(AcQ666=m;PC858jvGa;u=vBoS#-wo>-L1ke-=lRFIdhV5DcFXW$#4rUX^ZoU~&Ke diff --git a/docs/busybox.net/images/donate.png b/docs/busybox.net/images/donate.png deleted file mode 100644 index b55621bb90d526b26582d40f3d8aaf103582cc7f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 807 zcmV+?1K9kDP)Fn_U1Uvqp6ZP`)p|HaL`rPBXx7pz4`>i#u!PkeCuGpB9_Tw%FXKO>4SiP#smYUq@@0h0s8v-0~SsZ5D@?W|JBvl%v2FX00001bW%=J z06^y0W&i*H0b)x>L>_VqAS(a>02XvbSaefwW^{L9a%BK#X=XBTZf77eE;KGMO;9Ex z0006;NklSMr|Nj40)iTSf&_JL0qoG43k(4-}PB8-B8U`b>}lcdtt+}Y9@UTbA}W66WWJZ`<7 zJix3V07EDlX$9~}k_$a$WX(ADw$y8X`FnN)ZZX58ZHON*kRw;jOVUnCq)9y1Ipk+c z+4Iod@?LSh)w&2J8Ydbmu4k?F3^YhoJj}QW3n7@Rh;eI)(p?azZjOBb6J5Z%8A3=m zqx5j+?$Vi0Jx(v3$+|hMjr6oy#`$PWh_0*U7m`ztsPOSFRqhg#H{WR)_P1RHrgxQB zb~>Xl7G`si5XhuJa5XxkUN-MJ6wYcbtP?o5hTCTY3G z^lo;iBtMefsZ?*15_9*1^jdcB>xpD?gounJt;11D<%r0pUrBQD#LFyA!y?ziZ?Wi1 l6-%)l$frJ6(?|bl`~kM`8TbW^4#5Bb002ovPDHLkV1fogcE$hz diff --git a/docs/busybox.net/images/fm.mini.png b/docs/busybox.net/images/fm.mini.png deleted file mode 100644 index c0883cd34c35133634e52808ba6dcbf0a047361f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7708 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 R+)6HBY;faRG4lTN{{e4=7E=HK diff --git a/docs/busybox.net/images/gfx_by_gimp.png b/docs/busybox.net/images/gfx_by_gimp.png deleted file mode 100644 index d583140348966d345f223c002abb7efb899f071e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3955 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 N002ovPDHLkV1iRUmPr5r diff --git a/docs/busybox.net/images/ltbutton2.png b/docs/busybox.net/images/ltbutton2.png deleted file mode 100644 index 9bad9496aef8c100b351397bdc6f52785a195bb6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6798 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 Bj@$qM diff --git a/docs/busybox.net/images/sdsmall.png b/docs/busybox.net/images/sdsmall.png deleted file mode 100644 index b1024501b624641e42d6e9d1e0b3d597da84d93b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1593 zcmV-92FCe`P)RZwdy$XI-reo)?=(zKEi^NPhln(j zl98jMB0N2OuCH2$hckwTIcsWQqNA6=z`nx5M5Cf|qoKCg*L}LV{r&qVOigCGyc%3w zLRwm-rluZxd1QHcM0j_$(9vmXX-!X0B$Jb(wX{Z&ksKu?8-|4%Yii!#-(Fu}M$5SU z00009a7bBm000XT000XT0n*)m`~Uy|2XskIMF-IZ0uVO?Vs~&a000F1Nkll@j_YVZm zGejV=aPahYAGEVuBmf1Rddl+(|RVF8LX(}gC??i$kwyRc3wLXDe3A@v}SsF zKqQqT6%HDjuG?j6u9*=@GDN@ntxcW{Y+9M}~7(KM6xt^D2Fn(=*6F}ZN{S(be zpaXi?8fj)GDR0n70gHJDecf*%=B2F%oNRnwjg_N$YUg^{N8bV-<3j zw@j@6b2NMQjVO-e=vv;<$14tuj_xAkAG>iJk9U(AopPE`sSdG>&}oZkLPig-@O8uk ziJ0JlLR%lj&>Jox{Yb3io9Kka}DmKBAiybc#Qc=I?Wulzibr4d)BEF+{Go&0#6%m3b$=5+E9ubmfbq$F$ zR|#&TURORCfLt;MOFQH03shfEL=%XK!)~-rYq&CnveKGc3}siLMYX9*ITlrLD(dQv zWUNHpq6$v-4J$2#c^}i<)~Q<{c!p@^xT;Tp5w-%X4vPE<ZKY=`on)7pQ%&>?w~s(uly=8t+u{Eimj@>qMgTE91X9khZcl5izL zq*Jxe7|WruBkFuTn;@PQ4<6s9(`lCs2PLcj2aRtxpes3FU`6Pu``|+licM$J%TUv! zeYB!C68}Um(6okU&}CQL+pD?}dGht<`&WwF_g?+@YBC?PC=aS{qQ{-bUX8`X_tttK z)v~{VcIKF^&0VU~-t!hZJP7Nf{stN@+KQj_x5Xk&*J+wA7EsOj{YHET-6qHiDbP0l+XkKRKIJp diff --git a/docs/busybox.net/images/valid-html401.png b/docs/busybox.net/images/valid-html401.png deleted file mode 100644 index ec9bc0ce00eb9159f5ae8adfe5551bf889c81684..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1950 zcmW+%3slqw77ag%Q0w?xM^SWGt)!xo?)n)(&LSH?#;G|l0JLOSyfmHdB907eslFbIOO z0HD`_4w(R8T2)n=fHk`vKuiuB1reOXN`fe3mkGPwZbVQ5$50d{3Ct?uya};scFu%o zGNIZuiA4dFQ3S%E2XP#yX&OOMBgGRKq*6u>0AP~0D}>$QK#h8t$9V>4C?kfUG$(7C zCdgLKgky+-msCB@lB^`FHlq=xNlcbylonVTV+2KHQHjGv76)Jx0_znXR}=-qFij$C zBH>U8t4*_t1cior#wjhQUz-#Yr|6#Z02ip_*n_1wvpDBdmAA zXfz5ePUA3wAXb}AvD#P)mLy51)7d55YPG5Y4jFW;sK^{OBo4*ATfxcF^651DN4d|mB%QGat^@==_Qdf86i$oWgMa@5(EJb1XPA0F@q`+ zxJe{XgOgFAX_KHBNghWGENxV1qYh^&9D)p>4rLe!RGh7_v|!K)46dj)7=~GfA{a?R z4Wd(wdaLk1uncXJaD{|f5^`viCSU?da13sf2rJK%I3#j7k3pK`q;?jl5|6V{OP4x# z&NUZ{iSq+~Hk9cB!2Nb~_|o|N6tR*x91yMBvoVfuZn@H&-ThW{>iX{H?BR*o>1%qs zp3#|k^G)Uh>ZHy}+T8Kl;%E-D^v`)Fx2)cI@0(E_J6`?l zaLvr|IiDQzE+w{D=T@@f$ls5}b*}E&^XvF^+d~(>ySQLDHS>XYiD_->=E*^mPMa%U zPXFczSOy%L*;R;O=cI8}m8Y}1)K^{U)BI-rkhL(G$9>?L%l%V|ax1Zd{!Oz>W(>4^ zH9ziA*pYk7vLEL|Q9hxAU+}3kmIlSFTDkICo0+Ysg`11WD=*yVB>kIj2;Q~GFC$Jl zJY#KTb#+B@n|@(N&6s_0&rkHG?0-79zdgbiskwp&wd5~pA9iUiJNp&+8y7!1r#1x4 zQG;r^HETN3j<{0lucth}6`=9%Kw=QmsxzH{>Y z&<~xRnJpRDujWcmrud$i6=ci${Cs?LgJW6u{T<9FKfWD%u5NbC+4FwE{&VL%dX-S? zH#)bYrN3-VNXYvUX?yym0}mVK^|;*fCHX;RdseW}wB|NMZm!AUAR)pPc`*>@%)VdWqaI<1)c8MUIyE^UdKNd7F-ItQhSNYbE38#k{%yKx+#s>v? zH6{!U9y~VGKHg`=!agAIyR?to_wJ$+EZ#lAeNgl^)pB@7{r04RlIr&Q_63Hr>3Mkp zogQ@`4tCG{eahpJP)Sm7i zt^J?z0hV<)hH9i<3%IKMq?Ys9(d%(-qb2?MmchKjk6@oFA#=*P=4}tRZW%lJ<3hv5 z($+JVGeun^zxc$d$f@X=GZCvbt*u%dtUA=EbJa$fg6oRQu+xn>T#s zd1xq=TKDdG6#aE$l1pHkTL*e}=ey#yS<5cOLla-WaeF^G_CdjLzWcl9XWjZs7amn< zzKgp3c*33LM`-4VXFQUV=U+L;JAPN1yQX)0K#Y2NId00P8OOrLrJKz~Lz@Ri_WMtK z6EM&8?Y7_yd&22$$Zk(t0f>8h2Y`i5gaJ<(WdT7~kgWT5o-Z#3^^SbY* v^MM?5JbC`-MTeTAYL7M)z8dNB!8>NvU$=eYQunR%)&bEGG2y3?)Z+gFn-;kV diff --git a/docs/busybox.net/images/vh40.gif b/docs/busybox.net/images/vh40.gif deleted file mode 100644 index c5e9402e73780c2174188f521bdadaf1f5d86e2a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 906 zcmV;519kjINk%w1VORhk0Q3L=|Ns9pGc!3kIZ8@OW@cuDgoK%ynas@0nE(K0GXSNG zW_xpHduB7|y<`8(X3Uv0y_`xI7zq0R|1pfU5L$b+*5_lT##)@c7<;Wsl)V6EnS{00 z=kNEuy~dd{W&i*HA^8LW000sIEC2ui09XJY000I5;31A=X`X1Ru52m2?*YtoZQpqA z?0oP4z+mu^fW>miBvQz1I(I~)M5e4(pV%z4Xrx-dI3EPUYm6P^^tgdum(vb2+ZXME z?>67(!-ISR4ts)o41t6^0(*cAABA*WFkX0fdVD*6fMbjiZXXezI}M(H4vdaHb&)h0 z7!@-W8WS8e92gq6xEC`W0Rsmd1vQmvjDVM+t}`3A7~Qwl z9iJZq3lYLSgM!9r$UA?20uB)Yn5B)-kkSC#88jEwG%RSaz=6ZR2>>_@_&}h*rvc}Z zeIVAZUNS(RmeqUqNQxH@tY!fas4L+F4X$ecp#;!@;fwBj{M&06AALj?=fO~{B~$@_94wjH1ccRa009HoNEHtY z)G1w^>KRC20T5ufAbmx8Ak>j%PEy_v?FChUdpn%Rs1Vz!wuMKA;voce*--~+nDI@z zVx?awmIY&-dI}+^hl=V1gQyUSYN)DWA!tXRz6xEeiIE9F3%sK6z^}jtE9|hu7Hce_ g0VJ#JvdlK??6V0(EA6z@R%`7Cwb&_?;CY zBztGX|Lb+H=bqQ|JfG+JKA-U(cX1ZxhD;ZEFG3&?CSxN#ORz_RO_ZJ%d|wEcBZ3`` zla84V1X7XAaQyH*IHt9~X{ZM|J^Q?AB;d~iJ&o@BKp+fkXB$-*29*L%()k*j>C=(V zQ?s#4lXfgY94or6?rOG+E8jiN&M@M-?Rt+(aHC!Ds@Z=XWpl7x>7<;iI%ZNA zgwG3|*RuE^yeTBfE}SPl<^qVhar4+^O4;1Km0brn zCjq8YdSbXcF=lGWx-QoeRAp$}X5;ltz3e@|Nl3Agf2+UGo=+K1%iwB>KeyP<4-~kXT}qwrsc@YBlYd82a&lsP%y=Ww@6M`vg||NwiAdgWzhgA_{V@bD#&cyUclW^1dCUEs|5!^6YB8*MBHYXQwY9--TpeXm}DfQW@Z zBPD#=p}GD2=3G$d0f@-T&BfT;M`Dyo8ykud@bK5K`8zVgc1uuV{K-QjBTZ)4#!8+r&xb~F3{wa6;W1t z3tQWyR`kz*`_mHKjFy&`k%IJTX=xT#R#C{(Z&+gf$m2Ti`HS1z+ZwOTX=!N#*Bke_ zd3f>(gcu{yNMz~4LSGIeBjXDr(KO8td!@spBOU<(Cmb#t%RlRAG$yA(UcXzk;hkInJAh<0$ znij^-g2&_A?Ug_s`}+D|M=L~d8N3evZyd4|!F=UvJGs!1yyQDs=i^jDLDEqvp3}l? zJ?MINb*qX~^1hF4tw+y((6ds~R0d_nQ)43##>m7ZWXzs?eUBTopncAZnI9&}FzCF2 zYh+0ii7%M-`&d>cY|LKc{=;(Z%LDlx+;s@;(};qC0=K#tWGPppT{2ks&;v@1hBS0N zzjw1vIg6CS}qiv{KlqoommsBw2iLrt(q?7>m<1f^E+NA zslB;4=3ATM=Iz)d|Cyq-Ox+!RB)451TWu|S2AP@(P0ybY=9qJN1Dz4)=&DziHv>P7 zxgO6#n*~|vzYh=V+1OleY;4TE>K6|eY{^n_`ny{m);Bph>0iA4{ml*W%J?KvXj$pO zVz0}%OWysGe|}vF#S<9W{1>wnA(O0z%q=Ej*c%)#X*A%3fXEV%&xxrw!VMI z&hGiplHMhKfE~}e2Wc4@?DRB7grSx3ssv|M6H)foCEo(Fvo#VaoNgkuCekuHE6mBs z$<0XXm|Iz?+>r>{u&}V8m}Tl*h5S16X;A&r#fNG+0>5X?OieuxcODIQi92Xls^MrN zW)(uHm@1>8^eV~E3rJYwm2rIog6@qy<;s@7!l=mm++2e&3$o2Xi(*jwJ#PD*b%(=1uiPD+Ho? zN#p#>KI~%`7xgDokE`7G(=9~8wh-_l@~6{-#rH5T>KE!TDkE`r4AQ2;*B5=*%JO1z z%}<%Hf_t#er@hQpB*O@8=+AaW*);${qN zw4>2!S>Fe&1!fa4!rc!8>Ryt99F~y{K|FV*5iI=eNAn8jB<-FXq@q1pXP&Z1;Ij!A^1#it8`K*8;OwG)|sJEhDfVHP^%W@eR z8DQv(h(tUflJSWN%0YV`l%^$i#Va=a{w1C-{z-v`bej`3BuAq6)`uFXk0AUiUZ=r3 zYQ!SeRqZB>->L3P4m$W684mH2j#5$>>M~$D8PjxKeL6NkZ(AE~UZ_(}!3VDX zZ|y-{5q>W+YJq=#@rXTD%Z`jR$n?Br*PB7ghCHTmV z3x~5{VkzvG=t>RJe5^*RaIKmwBO{ae{5inxyAL0}+E=)a5m@UuC+ix6_oai_!VeCD zK*bfg8Sf$xl>j|p>XD@x@$naXu`1!SuU1qg#~58MG*Nu=c)8K_&3PGwJnY`aL+^vS zL;j#=9Sy1E|7aN)J_-g4oaf$N-MOwD@R6L5kkGKzEpxnA)9e@;YRBcSIygMsjylW}Z4wD)vTDT+kOkItpkS*rNG zTwEOVxW!p@3owR?re>TuVU8q`hrwc_LC!$*fzAQgf+0#^ zBPq?>qBRY@zp7k%c`siE&F)^r{X6vIW2Q?=O3I0~KFgx$ zX6E-L-{T#Eb_bTYIVW)XGFj^|HX?#b)OdDpbpi~2=oUWj=PvGGh9%6%$!W28iKA&RJ z%2AmZa`Q%ip3~l}{sE14rbwzezV8(Aj^XWq(8OZjrwHeSj>v&U-I9^5so?dB;C*)> znwo(dZz{8XutcGCQ$^<=u>9()C@W(w8TmjX{kRGlv{^-&&=K-vqoGPSDcX?>yykN5 za+1N*G1t(ar`nb97fHNw5ScMq%sQ@HIH392S0Q-BFHW^vhi&3|B_odkjz>mD{{9Os zAWH%V3X0%n94<(IiIY=mmqDQc0>5_;3fy2Pf3PX}@B8;sgOA2aS!kawtF@J))pC?_ z`t*d^fRnMdwbd`Otf;N+0>bBBW1|U|l>LS70rnIy)w9`Idtkk#6cjq`D>hD!)&U-YwH$apSakklcGJUeA9v>ec+c|f}U4@3p1t66rUtob8*CupC zQBdm4uQt5fdI?=Qw#v75u$QN?wdFHg2O%NLHq*lV$>rB7E3IW!)z$GNjM@{bQbdVf zgu44Adp}g=1qE8{N)Z`d^#_{d z|K(Li1{Yw@8BcEDWps7Vx!2@?5=6(uu<56qqhsFaRT;2Ap>DzW3H9~abDd!MPowe~ zTSc)+LGd&br*o!M6I$Je9$$BMRGkK1|Lg74^jTnxfTNuZ@1L3hdobIlK7HKVdHelc z8fq$Z(vn8l39R{eUO{`i^_0TO95c^gocfl63bXxCUXIH7-*H$_?fm>HgkRaIFr}&Z RIrtX?VythjS9Sv(`F~ZGgO~sS diff --git a/docs/busybox.net/index.html b/docs/busybox.net/index.html deleted file mode 100644 index 1bab6b069..000000000 --- a/docs/busybox.net/index.html +++ /dev/null @@ -1 +0,0 @@ - diff --git a/docs/busybox.net/license.html b/docs/busybox.net/license.html deleted file mode 100644 index 2a4c51d10..000000000 --- a/docs/busybox.net/license.html +++ /dev/null @@ -1,99 +0,0 @@ - - -

-

BusyBox is licensed under the GNU General Public License, version 2

- -

BusyBox is licensed under the -GNU General Public License version 2, which is often abbreviated as GPLv2. -(This is the same license the Linux kernel is under, so you may be somewhat -familiar with it by now.)

- -

A complete copy of the license text is included in the file LICENSE in -the BusyBox source code.

- -

Anyone thinking of shipping BusyBox as part of a -product should be familiar with the licensing terms under which they are -allowed to use and distribute BusyBox. Read the full test of the GPL (either -through the above link, or in the file LICENSE in the busybox tarball), and -also read the Frequently -Asked Questions about the GPL.

- -

Basically, if you distribute GPL software the license requires that you also -distribute the source code to that GPL-licensed software. So if you distribute -BusyBox without making the source code to the version you distribute available, -you violate the license terms, and thus infringe on the copyrights of BusyBox. -(This requirement applies whether or not you modified BusyBox; either way the -license terms still apply to you.) Read the license text for the details.

- -

A note on GPL versions

- -

Version 2 of the GPL is the only version of the GPL which current versions -of BusyBox may be distributed under. New code added to the tree is licensed -GPL version 2, and the project's license is GPL version 2.

- -

Older versions of BusyBox (versions 1.2.2 and earlier, up through about svn -16112) included variants of the recommended -"GPL version 2 or (at your option) later versions" boilerplate -permission grant. Ancient versions of BusyBox -(before svn 49) did not specify any version at all, and section 9 of GPLv2 -(the most recent version at that time) says those old versions may be -redistributed under any version of GPL (including the obsolete V1). This was -conceptually similar to a dual license, except that the different licenses were -different versions of the GPL.

- -

However, BusyBox has apparently always contained chunks of code that were -licensed under GPL version 2 only. Examples include applets written by Linus -Torvalds (util-linux/mkfs_minix.c and util_linux/mkswap.c) which stated they -"may be redistributed as per the Linux copyright" (which Linus -clarified in the -2.4.0-pre8 release announcement in 2000 was GPLv2 only), and Linux kernel code -copied into libbb/loop.c (after Linus's announcement). There are probably -more, because all we used to check was that the code was GPL, not which -version. (Before the GPLv3 draft proceedings in 2006, it was a purely -theoretical issue that didn't come up much.)

- -

To summarize: every version of BusyBox may be distributed under the terms of -GPL version 2. New versions (after 1.2.2) may only be distributed under -GPLv2, not under other versions of the GPL. Older versions of BusyBox might -(or might not) be distributable under other versions of the GPL. If you -want to use a GPL version other than 2, you should start with one of the old -versions such as release 1.2.2 or SVN 16112, and do your own homework to -identify and remove any code that can't be licensed under the GPL version you -want to use. New development is all GPLv2.

- -

License enforcement

- -

BusyBox's copyrights are enforced by the Software Freedom Law Center -(you can contact them at gpl@busybox.net), which -"accepts primary responsibility for enforcement of US copyrights on the -software... and coordinates international copyright enforcement efforts for -such works as necessary." If you distribute BusyBox in a way that doesn't -comply with the terms of the license BusyBox is distributed under, expect to -hear from these guys. Their entire reason for existing is to do pro-bono -legal work for free/open source software projects. (We used to list people who -violate the BusyBox license in The Hall of Shame, -but these days we find it much more effective to hand them over to the -lawyers.)

- -

Our enforcement efforts are aimed at bringing people into compliance with -the BusyBox license. Open source software is under a different license from -proprietary software, but if you violate that license you're still a software -pirate and the law gives the vendor (us) some big sticks to play with. We -don't want monetary awards, injunctions, or to generate bad PR for a company, -unless that's the only way to get somebody that repeatedly ignores us to comply -with the license on our code.

- -

A Good Example

- -

These days, Linksys is -doing a good job at complying with the GPL, they get to be an -example of how to do things right. Please take a moment and -check out what they do with - -distributing the firmware for their WRT54G Router. -Following their example would be a fine way to ensure that you -have also fulfilled your licensing obligations.

- - - diff --git a/docs/busybox.net/links.html b/docs/busybox.net/links.html deleted file mode 100644 index 14ad8d12a..000000000 --- a/docs/busybox.net/links.html +++ /dev/null @@ -1,19 +0,0 @@ - - -

Related Sites

- -
uClibc.org -
uClibc++ - -
buildroot -
Scratchbox -
OpenEmbedded -
uCdot -
LinuxDevices -
Slashdot -
Freshmeat -
Linux Today -
Linux Weekly News -
Linux HOWTOs - - diff --git a/docs/busybox.net/lists.html b/docs/busybox.net/lists.html deleted file mode 100644 index 29c2f7472..000000000 --- a/docs/busybox.net/lists.html +++ /dev/null @@ -1,46 +0,0 @@ - - - - - -

Mailing List Information

-BusyBox has a mailing list for discussion and -development. You can subscribe by visiting -this page. -Only subscribers to the BusyBox mailing list are allowed to post -to this list. - -

-There is also a mailing list for active developers -wishing to read the complete diff of each and every change to busybox -- not for the -faint of heart. Active developers can subscribe by visiting -this page. -The Subversion server is the only one permtted to post to this list. And yes, -this list name uses the word 'cvs' even though we don't use that anymore... - -

- - -

Search the List Archives

-Please search the mailing list archives before asking questions on the mailing -list, since there is a good chance someone else has asked the same question -before. Checking the archives is a great way to avoid annoying everyone on the -list with frequently asked questions... -

- -

-
- - - -
- -
-Google -
- -
- - - - diff --git a/docs/busybox.net/news.html b/docs/busybox.net/news.html deleted file mode 100644 index e0a8138b6..000000000 --- a/docs/busybox.net/news.html +++ /dev/null @@ -1,504 +0,0 @@ - - -
    - -
  • -

    We want to thank the following companies which are providing support for the BusyBox project: -

    -

    -
  • - -
  • 15 April 2009 -- BusyBox 1.14.0 (unstable), BusyBox 1.13.4 (stable) -

    BusyBox 1.14.0. - (svn, - patches, - how to add a patch)

    -

    BusyBox 1.13.4. - (svn, - patches, - how to add a patch)

    - -

    Sizes of busybox-1.13.4 and busybox-1.14.0 (with equivalent config, static uclibc build):

    -   text    data     bss     dec     hex filename
    - 785501     483    7036  793020   c19bc busybox.1.13.4/busybox
    - 788380     467    6960  795807   c249f busybox.1.14.0/busybox
    -  15361       0       0   15361    3c01 busybox.1.13.4/shell/hush.o
    -  20724       0       0   20724    50f4 busybox.1.14.0/shell/hush.o
    -
    -

    Most of growth is in hush. The rest shrank a bit. - -

    New applets: -

      -
    • flash_eraseall: by Sebastian Andrzej Siewior (bigeasy AT linutronix.de)
    • -
    • acpid, mkdosfs, tunctl: by Vladimir
    • -
    • ftpd: by Adam Tkac (vonsch AT gmail.com)
    • -
    • timeout: by Roberto Foglietta
    • -
    • ionice: adapted from Linux kernel example by Walter Harms
    • -
    • mkpasswd: synonym to cryptpw. mkpasswd is in Debian, OTOH cryptpw was added to busybox earlier. Trying to make both camps happy by making those two applets just aliases. They are command-line compatible
    • -
    - -

    Changes since previous release: - -

    lash and msh are deprecated, please migrate to hush. - -

    hush had many, many fixes and features added: here documents, arithmetic evaluation, function support, and all this works on NOMMU too, safely, including 100kb-sized `command` and here documents. Here document support, arithmetic evaluation, improved ${var} operations, other fixes are by Mike Frysinger (vapier AT gentoo.org). - -

    Other changes: -

      -
    • libbb: unify concurrent-safe update of /etc/{passwd,group,[g]shadow}. By Tito (farmatito AT tiscali.it)
    • -
    • libbb/sha{1,256,512}: major code shrink
    • -
    • libbb/lineedit: make history saving/loading concurrent-safe
    • -
    • libbb: shrink linked list ops. By xmaks AT email.cz
    • -
    • libbb: str2sockaddr should accept [IPv6] addr without port - wget 'ftp://[::1]/file' needs that to work
    • -
    • libbb: make bb_info_msg do atomic, unbuffered writes
    • -
    • util-linux/volumeid: abort early on read failures. Should help with probing missing fdd's
    • -
    • util-linux/volumeid: fix bug 249 "findfs finds the wrong partition"
    • -
    • adduser: allow adding to group 0; don't _create_ /etc/shadow, only append data if it exists
    • -
    • ash: fix mishandled ^C and SIGINT (several cases)
    • -
    • ash: fix "ash -c 'exec 1>&0'" complaining that fd 0 is busy
    • -
    • ash: fix $IFS handling in read. Closes bug 235
    • -
    • ash: fix a case where we were closing wrong descriptor
    • -
    • ash: fix bad interaction between ash -c '....&' and bash compat
    • -
    • ash: fix miscalculation of memory needed for eval tree. Found by Timo Teras (timo.teras AT iki.fi)
    • -
    • ash: make dot command search current directory first, as bash does
    • -
    • ash: printf builtin with no arguments should not exit
    • -
    • awk: fix long field separators case. By Ian Wienand (ianw AT vmware.com)
    • -
    • awk: in BEGIN section $0 should be "", not "0"
    • -
    • awk: make "struct global" hack more robust wrt alignment. Closes bug 131
    • -
    • brctl: fix compilation on 2.4.x kernels
    • -
    • chat: treat timeout more correctly
    • -
    • chat: recognize RECORD directive
    • -
    • cksum, head, printenv: report errors via exitcode
    • -
    • cpio: add -p, -0 and -L options
    • -
    • crond, crontab: make cron directory location configurable
    • -
    • crond: correct more of logfile to 0666 (as usual, umask allows user to remove unwanted bits)
    • -
    • crond: put tasks in separate process groups
    • -
    • dc: fix the "base 2" patch omission of base not being set
    • -
    • depmod: accept and ignore -r. Linux kernel build needs this
    • -
    • depmod: fix -b option. By timo.teras AT iki.fi
    • -
    • udhcpc: fix a problem where we don't open listening socket fast enough
    • -
    • udhcpc: stop filtering environment passed to the script
    • -
    • udhcpd: disable option to have absolute lease times in lease file (that does not work with dumpleases)
    • -
    • udhcpd: write 64-bit current time in lease file. Without it, determination of remaining lease time is unreliable
    • -
    • udhcpd: remember hostnames of clients
    • -
    • dumpleases: fix -a option, use recorded current time in lease file, show hostnames
    • -
    • dnsd: fix a number of bugs. Ideas by Ming-Ching Tiew (mctiew AT yahoo.com)
    • -
    • dpkg: better and shorter code to compare versions. Taken from "official" dpkg by Eugene T. Bordenkircher (eugebo AT gmail.com)
    • -
    • du: fix "du /dir /dir" case
    • -
    • env: support -uVAR=VAL
    • -
    • expand, unexpand: fix incorrect expansion in some cases
    • -
    • expr: a bit more robust handling of regexps with groups. Closes bug 87
    • -
    • find: support --mindepth
    • -
    • getty: make speed 0 mean "don't change speed", stop using non-portable way of setting speeds
    • -
    • grep: support -z
    • -
    • gzip: fix gzip -dc bug caused by using stale getopt state
    • -
    • httpd: set $HOST to Host: header value. By Tobias Poschwatta (tp AT fonz.de)
    • -
    • ifupdown: allow options to udhcpc to be configurable from .config
    • -
    • init: do not eat last char in messages; do not print duplicate "init:" prefix to syslog
    • -
    • init: fix a bug where on reload order of entries might be wrong
    • -
    • init: major improvement in documentation and signal handling. Lots of nasty, but hard to trip, races are fixed
    • -
    • init: reinstate proper handling of !ENABLE_FEATURE_USE_INITTAB
    • -
    • init: remove wait loop on restart, it may be dangerous
    • -
    • init: test for vt terminal with VT_OPENQRY, assume that anything else is TERM=vt102, not TERM=linux. Closes bug 195
    • -
    • inotifyd: add x, o, and u events
    • -
    • inotifyd: fix buffer overflow and "unreaped zombies" problem
    • -
    • inotifyd: conserve resourses by closing unused inotify descriptors
    • -
    • insmod/modprobe: do not pass NULL to kernel as module parameter
    • -
    • ip: in "ip rule add from all table 1", "all" is taken as 0.0.0.0/32, whereas "any" and "default" would be 0.0.0.0/0. They must be all 0.0.0.0/0. Closes bug 57
    • -
    • iproute: fix ipXXX utilities trying to parse their applet name as their 1st parameter
    • -
    • klogctl: fix a problem where we don't terminate read data with '\0' and then misinterpret it
    • -
    • ls: do not follow links with -s. Closes bug 33
    • -
    • ls: implement -Q and -g (-g was accepted but ignored)
    • -
    • ls: make readlink error to not disrupt output (try ls -l /proc/self/fd)
    • -
    • man: better check for duplicated MANPATH
    • -
    • mdev: add support for - ("dont stop here") char
    • -
    • mdev: if /sys/class/block exists, don't scan /sys/block
    • -
    • mdev: ignore events with "$SUBSYSTEM" == "firmware" && "$ACTION" == "remove"
    • -
    • mdev: provide $SUBSYSTEM. By Vladimir
    • -
    • modprobe/insmod for 2.4: support compressed modules. By Guenter (lists AT gknw.net)
    • -
    • modprobe: rework/speedup by Timo Teras (timo.teras AT iki.fi)
    • -
    • modutils-24: fix bad interaction of xzalloc with xrealloc_vector
    • -
    • mount: support "-O option", stop trying to mount swap partitions, fix CIFS support
    • -
    • mountpoint: add -n option. By Vladimir
    • -
    • nslookup: allow usage of IPv6 addresses or hostnames for DNS server name; allow for port specification. Tested to work on uclibc svn: "nslookup google.com [::1]:5353". glibc + IPv6 address of DNS server still does not work
    • -
    • popmaildir: fix several grave bugs with using memory past end of malloc block
    • -
    • printf: fix 1.12.0 breakage (from %*d fix), it was misinterpreting "*"
    • -
    • printf: make integer format strings print long long-sized values
    • -
    • rmmod: fix bug 263 "modutils/rmmod can't remove modules with dash in name on 2.4 kernels"
    • -
    • sendmail: document and fix usage of fd #4, fix check for helper failure
    • -
    • sendmail: update by Vladimir
    • -
    • seq: add -w support. By Natanael Copa
    • -
    • seq: add support for "-s separator"
    • -
    • stat: make stat -f show filesystem "ID:" as coreutils does
    • -
    • sysctl: fix another corner case with "dots and slashes"
    • -
    • sysctl: fix broken -p [file]. Closes bug 231
    • -
    • sysctl: support recursing if name is a directory: "sysctl net.ipv4.conf". Patch by xmaks AT email.cz
    • -
    • syslogd: make signal handling syncronous
    • -
    • syslogd: create logfile with 0666 (affected by umask as usual), not 0600
    • -
    • tail: fix tail +N syntax not working. Closes bug 221
    • -
    • tar: do not change new tarfile's mode, GNU tar doesn't do it
    • -
    • tar: support GNU tar's "base256" encoding
    • -
    • telnetd: correctly output 0xff char
    • -
    • telnetd: do not advertise TELNET_LFLOW, we do not support it properly
    • -
    • tftp: when we infer local name from remote (-r [/]path/path/file), strip path. This mimics wget and is generally more intuitive
    • -
    • timeout: fix parsing of -t NUM on MMU
    • -
    • top: make it work again on 2.4 kernels. Closes bug 125
    • -
    • tr: fix overflow in expand and complement, fix stop after [:class:], fix handling of ranges and [x]'s
    • -
    • tr: support -C as synonym to -c, support [:xdigit:]
    • -
    • traceroute: rewrite. Do not emit raw IP packets, instead send UDP or ICMP packets and rely on the kernel to form IP headers, select source IP and interface
    • -
    • uname: add support for -i and -o, fix printing of unknown -p value with -a option, support long options
    • -
    • unzip: fix thinko with le/be conv and size. Closes bug 129
    • -
    • vi: fix several instances of major goof: when text grows, text[] might get reallocated! We were keeping around pointers to old place
    • -
    • vi: speedup and code shrink. By Walter Harms
    • -
    • wget: --post-data support. By Harald Kuthe (harald-tuxbox AT arcor.de)
    • -
    • wget: fix --header handling, more robust EINTR detection
    • -
    -

    - -
  • 8 March 2009 -- BusyBox 1.13.3 (stable) -

    BusyBox 1.13.3. - (svn, - patches, - how to add a patch)

    - -

    1.13.3 is a bug fix release. It has fixes for awk, depmod, init, killall, mdev, - modprobe, printf, syslogd, tar, top, unzip, wget. -

    -
  • - -
  • 31 December 2008 -- BusyBox 1.13.2 (stable), BusyBox 1.12.4 (stable) -

    BusyBox 1.13.2. - (svn, - patches, - how to add a patch)

    -

    BusyBox 1.12.4. - (svn, - patches, - how to add a patch)

    - -

    Bug fix releases. 1.13.2 has fixes for crond, dc, init, ip, printf. - 1.12.4 has fixes for ip and printf. -

    -
  • - -
  • 29 November 2008 -- BusyBox 1.13.1 (stable), BusyBox 1.12.3 (stable) -

    BusyBox 1.13.1. - (svn, - patches, - how to add a patch)

    -

    BusyBox 1.12.3. - (svn, - patches, - how to add a patch)

    - -

    Bug fix releases. 1.13.1 has fixes for ash, option parsing, id, init, - inotifyd, klogd, line editing and modprobe. 1.12.3 has fixes - for option parsing and line editing. -

    -
  • - -
  • 10 November 2008 -- BusyBox 1.13.0 (unstable), BusyBox 1.12.2 (stable) -

    BusyBox 1.13.0. - (svn, - patches, - how to add a patch)

    -

    BusyBox 1.12.2. - (svn, - patches, - how to add a patch)

    - -

    Sizes of busybox-1.12.2 and busybox-1.13.0 (with equivalent config, static uclibc build):

    -   text    data     bss     dec     hex filename
    - 778291     551    7856  786698   c010a busybox-1.12.2/busybox
    - 778981     551    7852  787384   c03b8 busybox-1.13.0/busybox
    -
    - -

    New applets: blkid, devmem - -

    Changes since previous release: -

      -
    • mail applets: total overhaul. Vladimir as usual
    • -
    • ash: fix "while kill -0 $child; do true; done" looping forever
    • -
    • ash: fix NOEXEC mode - we were forgetting to pass environment
    • -
    • ash: fix a bug in standalone mode (corrupted getopt state)
    • -
    • ash: optionally support ">&file" and "&>file" redirections
    • -
    • awk: bitwise ops cast oprands and results to unsigned long, not signed. closes bug 4774
    • -
    • awk: fix typo in atan2 code. closes bug 5594
    • -
    • awk: improve handling of negative numbers in bitwise ops; fix handling of octal costants
    • -
    • awk: support hex constants
    • -
    • basename: fix error code (again)
    • -
    • cpio: emit TRAILER even when hard links were found. By Pascal Bellard (pascal.bellard AT ads-lu.com)
    • -
    • crontab: do not destroy STDIN_FILENO, editor may need it (crontab -e)
    • -
    • dc: support for bases 2 and 8, by Nate Case (ncase AT xes-inc.com)
    • -
    • dhcpc: treat "discover...select...discover..." loop the same way as "discover...discover...discover..."
    • -
    • dpkg: add dpkg -l PACKAGE_PATTERN. By Peter Korsgaard
    • -
    • fbset: fix mode matching code: original code may trigger false positive.
    • -
    • findfs: fix LUKS and FAT detection routines; do not exit if corrupted FAT fs makes us try to seek past the end
    • -
    • grep: fix 'echo aaa | grep -o a' + ENABLE_EXTRA_COMPAT case. By Natanael Copa
    • -
    • grep: fix EXTRA_COMPAT grep to honor -E and -i
    • -
    • gunzip: restore mtime
    • -
    • halt: reinstate -w even if !FEATURE_WTMP
    • -
    • hexdump: fix SEGV in hexdump -e ""
    • -
    • httpd: pass "Accept:" and "Accept-Language:" header to CGI scripts (Alina Friedrichsen)
    • -
    • hush: fix environment and memory leaks
    • -
    • hush: fix trashing of environment by local env vars: a=a; a=b cmd; - a was unset
    • -
    • id: improve compatibility with coreutils. By Tito Ragusa
    • -
    • inetd: fix a case when we have zero services
    • -
    • inetd: use config parser. by Vladimir
    • -
    • init: set stderr to NONBLOCK
    • -
    • insmod: fix detection of open failure
    • -
    • install: support -D
    • -
    • ip: fix ip route rejecting dotted quads as prefix
    • -
    • ip: route metric support (Natanael Copa)
    • -
    • iplink: accept shorthands for "address" keyword: "ip link set address 00:11:22:33:44:55"
    • -
    • kbd_mode: support -C TTY
    • -
    • kill[all[5]]: accept -s SIG too. By Steve Bennett (steveb AT workware.net.au)
    • -
    • klogd: handle many lines at once. By Steve Bennett (steveb AT workware.net.au)
    • -
    • less: support -I to be able to search case-insensitively
    • -
    • less: add optional line number toggle and resizing on window resize
    • -
    • libbb: do not reject floating point strings like ".15"
    • -
    • lineedit: fix bug 5824 "since rev 23530 fdisk and ed don't work any more"
    • -
    • lineedit: fix problems with empty commands in history
    • -
    • login: fix /etc/nologin handling
    • -
    • man: fix inconsistencies in handling $MANPATH
    • -
    • mdev: support match by major,minor. See bug 4714
    • -
    • modprobe-small: make insmod command line compatible
    • -
    • modprobe-small: support "blacklist" keyword in /etc/modules/MODULE_NAME
    • -
    • modprobe: fix a segfault when modprobe is called with no arguments at all
    • -
    • modutils/*: rewrite by Timo Teras (timo.teras AT iki.fi)
    • -
    • mount: fix "-o parm1 -o parm2" not accumulating
    • -
    • nmeter: 4k buffers are too small for /proc files, make them dynamically sized with 16k upper limit
    • -
    • ping: SO_RCVBUF must be bigger than packet size, otherwise large ping packets might fail to be received
    • -
    • route: fix for 64-bit BE machines by Seonghun Lim (wariua AT gmail.com)
    • -
    • rpm: fix incompatibilities which prevented rpm -i foo.src.rpm
    • -
    • runsvdir: support runsvdir-as-init
    • -
    • setarch: do not try to use non-existent data in argv[]
    • -
    • setfont: support -m and -C, support -m TEXTUAL_MAP (by Vladimir)
    • -
    • setup_environment: cd $HOME regardless of clear_env value
    • -
    • slattach: preserve speed in non-raw mode. By Matthieu Castet (matthieu.castet AT parrot.com)
    • -
    • start_stop_daemon: accept (and ignore) -R PARAM
    • -
    • sv: make default service dir configurable (Vladimir wants it)
    • -
    • sysctl: fix bug 3894 (by Kryzhanovskyy Maksym)
    • -
    • tar: fix bug 3844: non-root tar does not preserve perms
    • -
    • telnetd: handle emacs M-DEL and IAC-NOP. by Jim Cathey (jcathey AT ciena.com)
    • -
    • top: fix "top -d 1" (bug 5144)
    • -
    • top: optional SMP support by Vineet Gupta (vineetg76 AT gmail.com)
    • -
    • trylink: make messages less confusing
    • -
    • unzip: handle "central directory". needed for OpenOffice, gmail attachment .zips etc
    • -
    • vi: Rob's algorithm of reading and matching ESC sequences (nice work btw!)
    • -
    • vi: deal with EOF/error on stdin and with input NULs
    • -
    • vi: fix uninitialized last_search_pattern (bug 5794)
    • -
    • vi: handle chars 0x80, 0x81 etc correctly
    • -
    • volume identification: abolish /proc/partitions and /proc/cdroms scanning. It does not catch volume managers and such. Simply scan /dev/* for any block devices
    • -
    • watchdog: WDIOC_SETTIMEOUT accepts seconds, not milliseconds
    • -
    • watchdog: add -T option
    • -
    -

    - The email address gpl@busybox.net is the recommended way to contact - the Software Freedom Law Center to report BusyBox license violations. -

    -
  • - -
  • 28 September 2008 -- BusyBox 1.12.1 (stable), BusyBox 1.11.3 (stable) -

    BusyBox 1.12.1. - (svn, - patches, - how to add a patch)

    -

    BusyBox 1.11.3. - (svn, - patches, - how to add a patch)

    -

    - Bugfix-only releases for 1.11.x and 1.12.x branches. -

    -
  • - -
  • 21 August 2008 -- BusyBox 1.12.0 (unstable), BusyBox 1.11.2 (stable) -

    BusyBox 1.12.0. - (svn, - patches, - how to add a patch)

    -

    BusyBox 1.11.2. - (svn, - patches, - how to add a patch)

    - -

    Sizes of busybox-1.11.2 and busybox-1.12.0 (with equivalent config, static uclibc build):

    -   text    data     bss     dec     hex filename
    - 829687     617    7052  837356   cc6ec busybox-1.11.2/busybox
    - 822961     594    6832  830387   cabb3 busybox-1.12.0/busybox
    -
    - -

    New applets: rdev (Grant Erickson), setfont, showkey (both by Vladimir) - -

    Most significant changes since previous release (please report any regression): -

      -
    • ash: bash compat: "shift $BIGNUM" is equivalent to "shift 1"
    • -
    • ash: dont allow e.g. exec <&10 to attach to script's fd!
    • -
    • ash: fix a bug where redirection fds were not closed afterwards. optimize close+fcntl(DUPFD) into dup2
    • -
    • ash: fix segfault in "command -v"
    • -
    • ash: fix very weak $RANDOM generator
    • -
    • ash: prevent exec NN>&- from closing fd used for script reading
    • -
    • ash: teach ash about 123>file. It could take only 0..9 before
    • -
    • hush: fix a case where "$@" must expand to no word at all
    • -
    • hush: fix mishandling of a'b'c=fff as assignments. They are not
    • -
    • hush: fix non-detection of builtins and applets in "v=break; ...; $v; ..." case
    • -
    • hush: fix "while false; ..." exitcode; add testsuites
    • -
    • hush: support "case...esac" statements (~350 bytes of code)
    • -
    • hush: support "break [N]" and "continue [N]" statements
    • -
    • hush: support "for if in do done then; do echo $if; done" case
    • -
    • hush: support "for v; do ... done" syntax (implied 'in "$@"')
    • -
    • hush: support $_NUMBERS variable names
    • -
    • libbb: unified config parser (by Vladimir). This change affected many applets
    • -
    - -

    Other changes: -

      -
    • libbb: dump: do not use uninitialized memory (closes bug 4364)
    • -
    • libbb: fix bb_strtol[l]'s check for "-" (closes bug 4174)
    • -
    • libbb: fix --help to not affect "test --help"
    • -
    • libbb: fix mishandling of "all argv are opts" in getopt32()
    • -
    • libbb: getopt32() should not ever touch argv[0] (even read)
    • -
    • libbb: introduce and use xrealloc_vector
    • -
    • libbb: [x]fopen_for_{read,write} introduced and used (by Vladimir)
    • -
    • lineedit: fix use-after-free
    • -
    • libunarchive: refactor handling of archived files. "tar f file.tar.lzma" now works too
    • -
    • bb_strtoXXX: close bug 4174 (potential use of buf[-1])
    • -
    • open_transformer: don't leak file descriptor
    • -
    • open_transformer: fix bug of calling exit instead of _exit
    • -
    • arp: without -H type, assume "ether" (closes bug 4564)
    • -
    • ar: reuse existing ar unpacking code
    • -
    • awk: fix a case with multiple -f options. Simplify -f file reading.
    • -
    • build system: introduce and use FAST_FUNC: regparm on i386, otherwise no-op
    • -
    • bunzip2: fix an uncompression error (by Rob Landley rob AT landley.net)
    • -
    • b[un]zip2, g[un]zip: unlink destination if -f is given (closes bug 3854)
    • -
    • comm: almost total rewrite
    • -
    • cpio: fix -m to actually work as expected (by Pascal Bellard)
    • -
    • cpio: internalize archive_xread_all_eof, add a few paranoia checks for corrupted cpio files
    • -
    • cpio: make long opts depend only on ENABLE_GETOPT_LONG
    • -
    • cpio: on unpack, limit filename length to 8k
    • -
    • cpio: support some long options
    • -
    • crond: use execlp instead of execl
    • -
    • cut: fix buffer overflow (closes bug 4544)
    • -
    • envdir: fix "envdir" (no params at all) and "envdir dir" cases
    • -
    • findfs: make it use setuid-ness of busybox binary
    • -
    • fsck: use getmntent_r instead of open-coded parsing (by Vladimir)
    • -
    • fuser: a bit of safety in scanf
    • -
    • grep: option to use GNU regex matching instead of POSIX one. This fixes problems with NULs in files being scanned, but costs +800 bytes
    • -
    • halt: signal init regardless of ENABLE_INIT
    • -
    • httpd: add homedir directive specially for (and by) Walter Harms wharms AT bfs.de
    • -
    • ifupdown: /etc/network/interfaces can have comments with leading blanks
    • -
    • ifupdown: fixes for custom MAC address (by Wade Berrier wberrier AT gmail.com)
    • -
    • ifupdown: fixes for shutdown of DHCP-managed interfaces (by Wade Berrier wberrier AT gmail.com)
    • -
    • inetd: do not trash errno in signal handlers; in CHLD handler, stop looping through services when pid is found
    • -
    • insmod: users report that "|| defined(__powerpc__)" is missing
    • -
    • install: do not chown intermediate directories with install -d (by Natanael Copa)
    • -
    • install: fix long option not taking params (closes bug 4584)
    • -
    • lpd,lpr: send/receive ACKs after filenames, not only after file bodies
    • -
    • ls: fix a bug where we may use uninintialized variable
    • -
    • man: add handling of "man links", by Ivana Varekova varekova AT redhat.com
    • -
    • man: fix a case when a full pathname to manpage is given
    • -
    • man: fix inverted cat/man bool variable
    • -
    • man: fix missed NULL termination of an array
    • -
    • man: mimic "no manual entry for 'bogus'" message and exitcode
    • -
    • man: support cat pages too (by Jason Curl jcurlnews AT arcor.de)
    • -
    • man: teach it to use .lzma if requested by .config
    • -
    • mdev: check for "/block/" substring for block dev detection
    • -
    • mdev: do not complain if mdev.conf does not exist
    • -
    • mdev: if device was moved at creation, at removal correctly remove it from moved location and also remove symlinks to it
    • -
    • mdev: support for serializing hotplug
    • -
    • mdev, init: use shared code for fd sanitization
    • -
    • mkdir: fix "uname 0222; mkdir -p foo/bar" case (by Doug Graham dgraham AT nortel.com)
    • -
    • modprobe: support for /etc/modprobe.d (by Timo Teras)
    • -
    • modprobe: use buffering line reads (fgets()) instead of reads()
    • -
    • modutils: optional modprobe-small (by Vladimir), 15kb smaller than standard one
    • -
    • mount: support for "-o mand" and "[no]relatime"
    • -
    • mount: support nfs mount option "nordiplus" (by Octavian Purdila opurdila AT ixiacom.com)
    • -
    • mount: support "relatime" / "norelatime"
    • -
    • mount: testsuite for "-o mand"
    • -
    • msh: fix "while... continue; ..." (closes bug 3884)
    • -
    • mv: fix a case when we move dangling symlink across mountpoints
    • -
    • netstat: optional -p support (by L. Gabriel Somlo somlo AT cmu.edu)
    • -
    • nmeter: fix read past the end of a buffer (closes bug 4594)
    • -
    • od, hexdump: fix bug where xrealloc may move pointer, leaving other pointers dangling (closes bug 4104)
    • -
    • pidof/killall: allow find_pid_by_name to find running processes started as scripts_with_name_longer_than_15_bytes.sh (closes bug 4054)
    • -
    • printf: do not print garbage on "%Ld" (closes bug 4214)
    • -
    • printf: fix %b, fix several bugs in %*.*, fix compat issues with aborting too early, support %zd; expand testsuite
    • -
    • printf: protect against bogus format specifiers (closes bug 4184)
    • -
    • sendmail: updates from Vladimir:
    • -
    • sendmail: do not discard all headers
    • -
    • sendmail: do not ignore CC; accept to: and cc: case-insensitively. +20 bytes
    • -
    • sendmail: fixed mail recipient address
    • -
    • sendmail: fixed SEGV if sender address is missed
    • -
    • sendmail: use HOSTNAME instead of HOST when no server is explicitly specified
    • -
    • sleep: if FANCY && DESKTOP, support fractional seconds, minutes, hours and so on (coreutils compat)
    • -
    • ssd: CLOSE_EXTRA_FDS in MMU case too
    • -
    • ssd: do not stat -x EXECUTABLE, it is not needed anymore
    • -
    • ssd: fix -a without -x case
    • -
    • ssd: use $PATH
    • -
    • tar: fix handling of tarballs with symlinks with size field != 0
    • -
    • tar: handle autodetection for tiny .tar.gz files too, simplify autodetection
    • -
    • taskset: fix some careless code in both fancy and non-fancy cases. -5 bytes for fancy, +5 for non-fancy
    • -
    • tee: fix infinite looping on open error (echo asd | tee "")
    • -
    • tee: "-" is a name for stdout, handle it that way
    • -
    • telnetd: fix issue file printing
    • -
    • test: fix parser to prefer binop over unop, as coreutils does
    • -
    • testsuite: uniformly use $ECHO with -n -e
    • -
    • time: don't segfault with no arguments
    • -
    • touch: support -r REF_FILE if ENABLE_DESKTOP (needed for blackfin compile)
    • -
    • tr: fix "access past the end of a string" bug 4354
    • -
    • tr: fix "tr [=" case (closes bug 4374)
    • -
    • tr: fix yet another access past the end of a string (closes bug 4374)
    • -
    • unlzma: fix memory leak (by Pascal Bellard)
    • -
    • vi: fix reversed checks for underflow
    • -
    • vi: using array data after it fell out of scope is stupid
    • -
    • xargs: fix -e default to match newer GNU xargs, add SUS mandated -E (closes bug 4414)
    • -
    • other fixes and code size reductions in many applets
    • -
    -

    - -
  • 12 July 2008 -- BusyBox 1.11.1 (stable) -

    BusyBox 1.11.1. - (svn, - patches, - how to add a patch)

    -

    - Bugfix-only release for 1.11.x branch. It contains fixes for awk, - bunzip2, cpio, ifupdown, ip, man, start-stop-daemon, uname and vi. -

    -
  • - -
  • 11 July 2008 -- HOWTO is updated -

    - - "How to build static busybox for i486-linux-uclibc" is updated - and tested on a fresh Fedora 9 install. Please report if it doesn't - work for you. -

    -
  • - - - -
  • Old News

    - Click here to read older news -

    -
  • - -
- - - diff --git a/docs/busybox.net/oldnews.html b/docs/busybox.net/oldnews.html deleted file mode 100644 index 444af74a4..000000000 --- a/docs/busybox.net/oldnews.html +++ /dev/null @@ -1,2214 +0,0 @@ - - -

News archive

- -
    - -
  • 25 June 2008 -- BusyBox 1.11.0 (unstable), BusyBox 1.10.4 (stable) -

    BusyBox 1.11.0. - (svn, - patches, - how to add a patch)

    -

    BusyBox 1.10.4. - (svn, - patches, - how to add a patch)

    -

    Sizes of busybox-1.10.4 and busybox-1.11.0 (with equivalent config, static uclibc build):

    -   text    data     bss     dec     hex filename
    - 800675     636    7080  808391   c55c7 busybox-1.10.4
    - 798392     611    6900  805903   c4c0f busybox-1.11.0
    -
    - -

    New applets: inotify (Vladimir Dronnikov), man (Ivana Varekova), - fbsplash (Michele Sanges), depmod (Bernhard Reutner-Fischer) - -

    Changes since previous release: -

      -
    • build system: reinstate CONFIG_CROSS_COMPILE_PREFIX
    • -
    • ash: optional bash compatibility features added; other fixes
    • -
    • hush: lots and lots of fixes
    • -
    • msh: fix the case where the file has exec bit but can't be run directly (runs "$SHELL file" instead)
    • -
    • msh: fix exit codes when command is not found or can't be execed
    • -
    • udhcpc: added workaround for buggy kernels
    • -
    • mount: fix mishandling of proto=tcp/udp
    • -
    • diff: make it work on non-seekable streams
    • -
    • openvt: made more compatible with "standard" one
    • -
    • mdev: fix block/char device detection
    • -
    • ping: add -w, -W support (James Simmons)
    • -
    • crond: add handling of "MAILTO=user" lines
    • -
    • start-stop-daemon: make --exec follow symlinks (Joakim Tjernlund)
    • -
    • date: make it accept ISO date format
    • -
    • echo: fix echo -e -n "msg\n\0" (David Pinedo)
    • -
    • httpd: fix several bugs triggered by relative path in -h DIR
    • -
    • printf: fix printf -%s- foo, printf -- -%s- foo
    • -
    • syslogd: do not error out on missing files to rotate
    • -
    • ls: support Unicode in names
    • -
    • ip: support for the LOWER_UP flag (Natanael Copa)
    • -
    • mktemp: make argument optional (coreutil 6.12 compat)
    • -
    • libiproute: fix option parsing, so that "ip -o link" works again
    • -
    • other fixes and code size reductions in many applets
    • -
    -

    - The email address gpl@busybox.net is the recommended way to contact - the Software Freedom Law Center to report BusyBox license violations. -

    -
  • - -
  • 12 June 2008 -- Sponsors! -

    We want to thank the following companies which are providing support - for the BusyBox project: -

    - -
  • - -
  • 5 June 2008 -- BusyBox 1.10.3 (stable) -

    BusyBox 1.10.3. - (svn, - patches, - how to add a patch)

    -

    - Bugfix-only release for 1.10.x branch. It contains fixes for dnsd, fuser, hush, - ip, mdev and syslogd. -

    -
  • - -
  • 8 May 2008 -- BusyBox 1.10.2 (stable) -

    BusyBox 1.10.2. - (svn, - patches, - how to add a patch)

    -

    - Bugfix-only release for 1.10.x branch. It contains fixes for echo, httpd, pidof, - start-stop-daemon, tar, taskset, tab completion in shells, build system. -

    Please note that mdev was backported from current svn trunk. Please - report if you encounter any problems with it. -

    -
  • - -
  • 19 April 2008 -- BusyBox 1.10.1 (stable) -

    BusyBox 1.10.1. - (svn, - patches, - how to add a patch)

    -

    - Bugfix-only release for 1.10.x branch. It contains fixes for - fuser, init, less, nameif, tail, taskset, tcpudp, top, udhcp. -

  • - -
  • 21 March 2008 -- BusyBox 1.10.0 (unstable) -

    BusyBox 1.10.0. - (svn, - patches, - how to add a patch)

    - -

    Sizes of busybox-1.9.2 and busybox-1.10.0 (with almost full config, static uclibc build):

    -   text    data     bss     dec     hex filename
    - 781405     679    7500  789584   c0c50 busybox-1.9.2
    - 773551     640    7372  781563   becfb busybox-1.10.0
    -
    -

    Top 10 stack users:

    -busybox-1.9.2:               busybox-1.10.0:
    -echo_dg                 4116 bb_full_fd_action       4112
    -bb_full_fd_action       4112 find_list_entry2        4096
    -discard_dg              4108 readlink_main           4096
    -discard_dg              4096 ipaddr_list_or_flush    3900
    -echo_stream             4096 iproute_list_or_flush   3680
    -discard_stream          4096 insmod_main             3152
    -find_list_entry2        4096 fallbackSort            2952
    -readlink_main           4096 do_iproute              2492
    -ipaddr_list_or_flush    3900 cal_main                2464
    -iproute_list_or_flush   3680 readhere                2308
    -
    - -

    New applets: brctl, chat (by Vladimir Dronnikov <dronnikov AT gmail.com>), - findfs, ifenslave (closes bug 115), lpd (by Vladimir Dronnikov <dronnikov AT gmail.com>), - lpr+lpq (by Walter Harms), script (by Pascal Bellard <pascal.bellard AT ads-lu.com>), - sendmail (Vladimir Dronnikov <dronnikov AT gmail.com>), tac, tftpd. -

    -

    Made NOMMU-compatible: crond, crontab, ifupdown, inetd, init, runsv, svlogd, tcpsvd, udpsvd. -

    -

    Changes since previous release: -

    -
      -
    • globally: add -Wunused-parameter
    • -
    • globally: add optimization barrier to all "G trick" locations
    • -
    • adduser/addgroup: check username for invalid chars (by Tito <farmatito AT tiscali.it>)
    • -
    • adduser: optional support for long options. Closes bug 2134
    • -
    • ash: handle "A=1 A=2 B=$A; echo $B". Closes bug 947
    • -
    • ash: make ash -c "if set -o barfoo 2>/dev/null; then echo foo; else echo bar; fi" work. Closes bug 1142
    • -
    • build system: don't use "gcc -o /dev/null", old gcc can delete /dev/null in this case
    • -
    • build system: fixes for cross-compiling on an OS X host
    • -
    • build system: make it do without "od -t"
    • -
    • build system: pass CFLAGS to link stage too. Closes bug 1376
    • -
    • build system: add CONFIG_NOMMU
    • -
    • cp: add ENABLE_FEATURE_VERBOSE_CP_MESSAGE. Closes bug 1470
    • -
    • crontab: almost complete rewrite
    • -
    • dnsd: properly set _src_ IP:port on outgoing UDP packets
    • -
    • dpkg: fix bug where existence check was reversed
    • -
    • eject: add -s for SCSI- and USB-devices (Nico Erfurth)
    • -
    • fdisk: fix a case where break was reached only for DOS labels
    • -
    • fsck: don't kill pid -1! (Roy Marples <roy at marples.name>)
    • -
    • fsck_minix: fix bug in map_block2: s/(blknr >= 256 * 256)/(blknr < 256 * 256)/
    • -
    • fuser: substantial rewrite
    • -
    • getopt: add support for "a+" specifier for nonnegative int parameters. By Vladimir Dronnikov <dronnikov at gmail.com>
    • -
    • getty: don't try to detect parity on local lines (Joakim Tjernlund <Joakim.Tjernlund at transmode.se>)
    • -
    • halt: write wtmp entry if wtmp support is enabled
    • -
    • httpd: "HEAD" support. Closes bug 1530
    • -
    • httpd: fix bug 2004: wrong argv when interpreter is invoked
    • -
    • httpd: fix bug where we did chdir("") if CGI path had only one "/"
    • -
    • httpd: fix for POST upload
    • -
    • httpd: support for "I:index.xml" syntax (Peter Korsgaard <jacmet AT uclibc.org>)
    • -
    • hush: fix a case where none of pipe members could be started because of fork failure
    • -
    • hush: more correct handling of piping
    • -
    • hush: reinstate `cmd` handling for NOMMU
    • -
    • hush: report [v]fork failures
    • -
    • hush: set CLOEXEC on script file being executed
    • -
    • hush: try to add a bit more of vfork-friendliness
    • -
    • inetd: make "udp nowait" work
    • -
    • inetd: make inetd IPv6-capable
    • -
    • init: add FEATURE_KILL_REMOVED (Eugene Bordenkircher <eugebo AT gmail.com>)
    • -
    • init: allow last line of config file to be not terminated by "\n"
    • -
    • init: do not die if "/dev/null" is missing
    • -
    • init: fix bug 1111: restart actions were not splitting words
    • -
    • init: wait for orphaned children too while waiting for sysinit-like processes (harald-tuxbox AT arcor.de)
    • -
    • ip route: "ip route" was misbehaving (extra argv+1 ate 1st env var)
    • -
    • last: do not go into endless loop on read error
    • -
    • less,klogd,syslogd,nc,tcpudp: exit on signal by killing itself, not exit(1)
    • -
    • less: "examine" command will not bomb out on bad file name now
    • -
    • less: fix bug where backspace wasn't actually deleting chars
    • -
    • less: make it a bit more resistant against status line corruption
    • -
    • less: improve search when data is not supplied fast enough by stdin - now will try reading for 1-2 seconds before declaring that there is no match. This fixes a very common annoyance with long manpages
    • -
    • less: update line input so that it doesn't interfere with screen update. Makes "man bash", [enter], [/], <enter search pattern>, [enter] more usable - manpage now draws even as you enter the pattern!
    • -
    • libbb: filename completion matches dangling symlinks too
    • -
    • libbb: fix getopt state corruption for NOFORK applets
    • -
    • libbb: full_read/write now will report partial data counts prior to error
    • -
    • libbb: intrduce and use safe_gethostname. By Tito <farmatito AT tiscali.it>
    • -
    • libbb: introduce and use nonblock_safe_read(). Yay! Our shells are immune from this nasty O_NONBLOCK now!
    • -
    • login,su: avoid clearing environment with some options, as was intended
    • -
    • microcom: read more than 1 byte from device, if possible
    • -
    • microcom: split -d (delay) option away from -t
    • -
    • mktemp: support -p DIR (Timo Teras <timo.teras at iki.fi>)
    • -
    • mount: #ifdef out MOUNT_LABEL code parts if it is not selected
    • -
    • mount: add another mount helper call method
    • -
    • mount: allow and ignore _netdev option
    • -
    • mount: make -f work even without mtab support (Cristian Ionescu-Idbohrn <cristian.ionescu-idbohrn at axis.com>)
    • -
    • mount: optional support for -vv verbosity
    • -
    • mount: plug a hole where FEATURE_MOUNT_HELPERS could allow execution of arbitrary command
    • -
    • mount: recognize "dirsync" (closes bug 835)
    • -
    • mount: sanitize environment if called by non-root
    • -
    • mount: support for mount by label. Closes bug 1143
    • -
    • mount: with -vv -f, say what mount() calls we were going to make
    • -
    • msh: create testsuite (based on hush one)
    • -
    • msh: don't use floating point in "times" builtin
    • -
    • msh: fix Ctrl-C handling with line editing
    • -
    • msh: fix for bug 846 ("break" didn't work second time)
    • -
    • msh: glob0/glob1/glob2/glob3 were just a sorting routine, removed
    • -
    • msh: instead of fixing "ls | cd", "cd | ls" etc disallow builtins in pipes. They make no sense there anyway
    • -
    • msh: stop trying to parse variables in "msh SCRIPT VAR=val param". They are passed as ordinary parameters
    • -
    • netstat: print control chars as "^C" etc
    • -
    • nmeter: fix bug where %[mf] behaves as %[mt]
    • -
    • nohup: compat patch by Christoph Gysin <mailinglist.cache at gmail.com>
    • -
    • od: handle /proc files (which have filesize 0) correctly
    • -
    • patch: don't trash permissions of patched file
    • -
    • ps: add conditional support for -o [e]time
    • -
    • ps: fix COMMAND column adjustment; overflow in USER and VSZ columns
    • -
    • reset: call "stty sane". Closes bug 1414
    • -
    • rmdir: optional long options support for Debian users. By Roberto Gordo Saez <roberto.gordo AT gmail.com>
    • -
    • run-parts: add --reverse
    • -
    • script: correctly handle buffered "tail" of output
    • -
    • sed: "n" command must reset "we had successful subst" flag. Closes bug 1214
    • -
    • sort: -z outputs NUL terminated lines. Closes bug 1591
    • -
    • stty: fix mishandling of control keywords (Ralf Friedl <Ralf.Friedl AT online.de>)
    • -
    • switch_root: stop at first non-option. Closes bug 1425
    • -
    • syslogd: avoid excessive time() system calls
    • -
    • syslogd: don't die if remote host's IP cannot be resolved. Retry resolutions every two minutes instead
    • -
    • syslogd: fix shmat error check
    • -
    • syslogd: optional support for dropping dups. Closes bug 436
    • -
    • syslogd: send "\n"-terminated messages over the network. Fully closes bug 1574
    • -
    • syslogd: tighten up hostname handling
    • -
    • tail: fix "tail -c 20 /dev/huge_disk" (was taking ages)
    • -
    • tar: compat: handle tarballs with only one zero block at the end
    • -
    • tar: autodetection of gz/bz2 compressed tarballs. Closes bug 992
    • -
    • tar: real support for -p. By Natanael Copa <natanael.copa at gmail.com>
    • -
    • tcpudp: narrow down time window where we have no wildcard socket
    • -
    • telnetd: use login always, not "sometimes login, sometimes shell"
    • -
    • test: fix mishandling of "test ! arg1 op arg2 more args"
    • -
    • trylink: instead of build error, disable --gc-sections if GLIBC and STATIC are selected
    • -
    • udhcp: make file paths configurable
    • -
    • udhcp: optional support for non-standard DHCP ports
    • -
    • udhcp: set correct op byte in the packet for DHCPDECLINE
    • -
    • udhcpc: filter unwanted packets in kernel (Cristian Ionescu-Idbohrn <cristian.ionescu-idbohrn AT axis.com>)
    • -
    • udhcpc: fix wrong options in decline and release packets (Jonas Danielsson <jonas.danielsson AT axis.com>)
    • -
    • umount: do not complain several times about the same mountpoint
    • -
    • umount: do not try to free loop device or erase mtab if remounted ro
    • -
    • umount: instead of non-standard -D, use -d with opposite meaning. Closes bug 1604
    • -
    • unlzma: shrink by Pascal Bellard <pascal.bellard AT ads-lu.com>
    • -
    • unzip: do not try to read entire compressed stream at once (it can be huge)
    • -
    • unzip: handle short reads correctly
    • -
    • vi: many fixes
    • -
    • zcip: don't chdir to root
    • -
    • zcip: open ARP socket before openlog (else we can trash syslog socket)
    • -
    -
  • - -
  • 21 March 2008 -- BusyBox old stable releases -

    - Bugfix-only releases for four past branches. Links to locations - for future hot patches are in parentheses. -

    - 1.9.2 - (patches), - 1.8.3 - (patches), - 1.7.5 - (patches), - 1.5.2 - (patches). -

    - How to add a patch. -

    - - -
  • 12 February 2008 -- BusyBox 1.9.1 (stable) -

    BusyBox 1.9.1. - (svn, - patches, - how to add a patch)

    - -

    This is a bugfix-only release, with fixes to fsck, - iproute, mdev, mkswap, msh, nameif, stty, test, zcip.

    -

    hush has `command` expansion re-enabled for NOMMU, although it is - inherently unsafe (by virtue of NOMMU's use of vfork instead of fork). - The plan is to make this less likely to bite people in future versions.

    -
  • - -
  • 24 December 2007 -- BusyBox 1.9.0 (unstable) -

    BusyBox 1.9.0. - (svn, - patches, - how to add a patch)

    - -

    Sizes of busybox-1.8.2 and busybox-1.9.0 (with almost full config, static uclibc build):

    -   text    data     bss     dec     hex filename
    - 792796     978    9724  803498   c42aa busybox-1.8.2
    - 783803     683    7508  791994   c15ba busybox-1.9.0
    -
    -

    Top 10 stack users:

    -busybox-1.8.2:               busybox-1.9.0:
    -input_tab             10428  echo_dg                4116
    -umount_main            8252  bb_full_fd_action      4112
    -rtnl_talk              8240  discard_dg             4096
    -xrtnl_dump_filter      8240  echo_stream            4096
    -sendMTFValues          5316  discard_stream         4096
    -mainSort               4700  find_list_entry2       4096
    -mkfs_minix_main        4288  readlink_main          4096
    -grave                  4260  ipaddr_list_or_flush   3900
    -unix_do_one            4156  iproute_list_or_flush  3680
    -parse_prompt           4132  insmod_main            3152
    -
    - -

    lash is deleted from this release. hush can be configured down to almost - the same size, but it is significantly less buggy. It even works - on NOMMU machines (interactive mode and backticks are not working on NOMMU, - though). "lash" applet is still available, but it runs hush. - -

    init has some changes in this release, please report if it causes - problems for you. - -

    Changes since previous release: -

      -
    • Build system improvements -
    • Testsuite additions -
    • Stack size reductions, code size reductions, data/bss reductions -
    • An option to prefer IPv4 address if host has both -
    • New applets: hd, sestatus -
    • Removed applets: lash -
    • hush: fixed a few bugs, wired up echo and test to be builtins -
    • init: simplify forking of children -
    • getty: special handling of '#' and '@' is removed -
    • [su]login: sanitize environment if called by non-root -
    • udhcpc: support "bad" servers which send oversized packets - (Cristian Ionescu-Idbohrn <cristian.ionescu-idbohrn at axis.com>) -
    • udhcpc: -O option allows to specify which options to ask for - (Stefan Hellermann <stefan at the2masters.de>) -
    • udhcpc: optionally check whether given IP is really free (by ARP ping) - (Jonas Danielsson <jonas.danielsson at axis.com>) -
    • vi: now handles files with unlimited line length -
    • vi: speedup for huge line lengths -
    • vi: Del key works -
    • sed: support GNUism '\t' -
    • cp/mv/install: optionally use bigger buffer for bulk copying -
    • line editing: don't eat stack like crazy -
    • passwd: follows symlinked /etc/passwd -
    • renice: accepts priority with +N too -
    • netstat: wide output mode -
    • nameif: extended matching (Nico Erfurth <masta at perlgolf.de>) -
    • test: become NOFORK applet -
    • find: -iname (Alexander Griesser <alexander.griesser at lkh-vil.or.at>) -
    • df: -i option (show inode info) (Pascal Bellard <pascal.bellard at ads-lu.com>) -
    • hexdump: -R option (Pascal Bellard <pascal.bellard at ads-lu.com>) -
    -
  • - -
  • 23 November 2007 -- BusyBox 1.8.2 (stable), BusyBox 1.7.4 (stable) -

    BusyBox 1.8.2. - (svn, - patches, - how to add a patch)

    -

    BusyBox 1.7.4. - (svn, - patches, - how to add a patch)

    - -

    These are bugfix-only releases. - 1.8.2 contains fixes for inetd, lash, tar, tr, and build system. - 1.7.4 contains a fix for inetd.

    -
  • - -
  • 9 November 2007 -- BusyBox 1.8.1 (stable) -

    BusyBox 1.8.1. - (svn, - patches, - how to add a patch)

    - -

    This is a bugfix-only release, with fixes to login (PAM), modprobe, syslogd, telnetd, unzip.

    -
  • - -
  • 4 November 2007 -- BusyBox 1.8.0 (unstable) -

    BusyBox 1.8.0. - (svn, - patches, - how to add a patch)

    - -

    Note: this is probably the very last release with lash. It will be dropped. Please migrate to hush. - -

    Applets which had many changes since 1.7.x: -

    httpd: -

      -
    • does not clear environment, CGIs will see all environment variables which were set for httpd -
    • fix bug where we were trying to read more POSTDATA than content-length -
    • fix trivial bug (spotted by Alex Landau) -
    • optional support for partial downloads -
    • simplified CGI i/o loop (now it looks good to me) -
    • small auth and IPv6 fixes (Kim B. Heino <Kim.Heino at bluegiga.com>) -
    • support for proxying connection to other http server (by Alex Landau <landau_alex at yahoo.com>) -
    - -

    top: -

      -
    • TOPMEM feature - 's(how sizes)' command -
    • don't wait before final bailout (try top -b -n1) -
    • fix for command line wrapping -
    - -

    Build system improvements: libbusybox mode restored (it was lost in transition to new makefiles). - -

    Code and data size in comparison with 1.7.3:

    -Equivalent .config, i386 uclibc static builds:
    -   text    data     bss     dec     hex filename
    - 768123	   1055	  10768	 779946	  be6aa	busybox-1.7.3/busybox
    - 759693	    974	   9420	 770087	  bc027	busybox-1.8.0/busybox
    - -

    New applets: -

      -
    • microcom: new applet by Vladimir Dronnikov <dronnikov at gmail.ru> -
    • kbd_mode: new applet by Loic Grenie <loic.grenie at gmail.com> -
    • bzip2: port bzip2 1.0.4 to busybox, 9 kb of code -
    • pgrep, pkill: new applets by Loic Grenie <loic.grenie at gmail.com> -
    • setsebool: new applet (Yuichi Nakamura <ynakam at hitachisoft.jp>) -
    - -

    Other changes since previous release (abridged): -

      -
    • cp: -r and -R imply -d (coreutils compat) -
    • cp: detect and prevent infinite recursion -
    • cp: make it a bit closer to POSIX, but still refuse to open and overwrite symbolic link -
    • hdparm: reduce possibility of numeric overflow in -T -
    • hdparm: simplify timing measurement -
    • wget: -O FILE is allowed to overwrite existing file (compat) -
    • wget: allow dots in header field names -
    • telnetd: add -K option to close sessions as soon as child exits -
    • telnetd: don't SIGKILL child when closing the session, kernel will send SIGHUP for us -
    • ed: large cleanup, add line editing -
    • hush: feeble attempt at making it more NOMMU-friendly -
    • hush: fix glob() -
    • hush: stop doing manual accounting of open fd's, kernel can do it for us -
    • adduser: implement -S and fix uid selection -
    • ash: fix prompt expansion (Natanael Copa <natanael.copa at gmail.com>) -
    • ash: revert "cat | jobs" fix, it causes more problems than good -
    • find: fix -xdev behavior in the presence of two or more nested mount points -
    • grep: fix grep -F -e str1 -e str2 (was matching str2 only) -
    • grep: optimization: stop on first -e match -
    • gunzip: support concatenated gz files -
    • inetd: fix bug 1562 "inetd does not set argv[0] properly" (fix by Ilya Panfilov) -
    • install: 'support' (by ignoring) -v and -b -
    • install: fix bug in "install -c file dir" (tried to copy dir into dir too) -
    • ip: tunnel parameter parsing fix by Jean Wolter <jw5 at os.inf.tu-dresden.de> -
    • isrv: use monotonic_sec -
    • less: make 'f' key page forward -
    • libiproute: add missing break statements -
    • load_policy: update (Yuichi Nakamura <ynakam at hitachisoft.jp>) -
    • logger: fix a problem of losing all argv except first -
    • login: do reject wrong passwords with PAM auth -
    • losetup: support -f (Loic Grenie <loic.grenie at gmail.com>) -
    • fdisk: make fdisk compile on libc without llseek64 -
    • libbb: by popular request allow PATH to be customized at build time -
    • mkswap: selinux support by KaiGai Kohei <kaigai at ak.jp.nec.com> -
    • mount: allow (and ignore) -i -
    • mount: ignore NFS bg option on NOMMU machines -
    • mount: mount helpers support (by Vladimir Dronnikov <dronnikov at gmail.ru>) -
    • passwd: handle Ctrl-C, restore termios on Ctrl-C -
    • passwd: SELinux support by KaiGai Kohei <kaigai at ak.jp.nec.com> -
    • ping: make -I ethN work too (-I addr already worked) -
    • ps: fix RSS parsing (rss field in /proc/PID/stat is in pages, not bytes) -
    • read_line_input: fix it to not do any fancy editing if echoing is disabled -
    • run_parts: make it sort executables by name (required by API) -
    • runsv: do not use clock_gettime if !MONOTONIC_CLOCK -
    • runsvdir: fix "linear wait time" bug -
    • sulogin: remove alarm handling, it is redundant there -
    • svlogd: compat: svlogd -tt should timestamp stderr too -
    • syslogd: bail out if you see null read from Unix socket -
    • syslogd: do not need to poll(), we can just block in read() -
    • tail: work correctly on /proc files (Kazuo TAKADA <kztakada at sm.sony.co.jp>) -
    • tar + gzip/bzip2/etc: support NOMMU machines (by Alex Landau <landau_alex at yahoo.com>) -
    • tar: strip leading '/' BEFORE memorizing hardlink's name -
    • tftp: fix infinite retry bug -
    • umount: support (by ignoring) -i; style fixes -
    • unzip: fix endianness bugs -
    • vi: don't wait 50 ms before reading ESC sequences -
    • watchdog: allow millisecond spec (-t 250ms) -
    • zcip: fix unaligned trap on ARM -
    -
  • - -
  • 4 November 2007 -- BusyBox 1.7.3 (stable) -

    BusyBox 1.7.3. - (svn, - patches, - how to add a patch)

    - -

    This is a bugfix-only release, with fixes to ash, httpd, inetd, iptun, logger, login, tail.

    -
  • - -
  • 30 September 2007 -- BusyBox 1.7.2 (stable) -

    BusyBox 1.7.2. - (svn, - patches, - how to add a patch)

    - -

    This is a bugfix-only release, with fixes to install, find, login, httpd, runsvdir, chcon, setfiles, fdisk and line editing.

    -
  • - -
  • 16 September 2007 -- BusyBox 1.7.1 (stable) -

    BusyBox 1.7.1. - (svn, - patches, - how to add a patch)

    - -

    This is a bugfix-only release, with fixes to cp, runsv, tar, busybox --install and build system.

    -
  • - -
  • 24 August 2007 -- BusyBox 1.7.0 (unstable) -

    BusyBox 1.7.0. - (svn, - patches, - how to add a patch)

    - -

    Applets which had many changes since 1.6.x: -

    httpd: -

      -
    • works in standalone mode on NOMMU machines now (partly by Alex Landau <landau_alex at yahoo.com>) -
    • indexer example is rewritten in C -
    • optional support for error pages (by Pierre Metras <genepi at sympatico.ca>) -
    • stop reading headers using 1-byte reads -
    • new option -v[v]: prints client addresses, HTTP codes returned, URLs -
    • extended -p PORT to -p [IP[v6]:]PORT -
    • sendfile support (by Pierre Metras <genepi at sympatico.ca>) -
    • add support for Status: CGI header -
    • fix CGI handling bug (we were closing wrong fd) -
    • CGI I/O loop still doesn't look 100% ok to me... -
    - -

    udhcp[cd]: -

      -
    • add -f "foreground" and -S "syslog" options -
    • fixed "ifupdown + udhcpc_without_pidfile_creation" bug -
    • new config option "Rewrite the lease file at every new acknowledge" (Mats Erik Andersson <mats at blue2net.com> (Blue2Net AB)) -
    • consistently treat server_config.start/end IPs as host-order -
    • fix IP parsing for 64bit machines -
    • fix unsafe hton macro usage in read_opt() -
    • do not chdir to / when daemonizing -
    - -

    top, ps, killall, pidof: -

      -
    • simpler loadavg processing -
    • truncate usernames to 8 chars -
    • fix non-CONFIG_DESKTOP ps -ww (by rockeychu) -
    • improve /proc/PID/cmdinfo reading code -
    • use cmdline, not comm field (fixes problems with re-execed applets showing as processes with name "exe", and not being found by pidof/killall by applet name) -
    • reduce CPU usage in decimal conversion (optional) (corresponding speedup on kernel side is accepted in mainline Linux kernel, yay!) -
    • make percentile (0.1%) calculations configurable -
    • add config option and code for global CPU% display -
    • reorder columns, so that [P]PIDs are together and VSZ/%MEM are together - makes more sense -
    - -

    Build system improvements: doesn't link against libraries we don't need, - generates verbose link output and map file, allows for custom link - scripts (useful for removing extra padding, among other things). - -

    Code and data size in comparison with 1.6.1:

    -Equivalent .config, i386 glibc dynamic builds:
    -   text    data     bss     dec     hex filename
    - 672671    2768   16808  692247   a9017 busybox-1.6.1/busybox
    - 662948    2660   13528  679136   a5ce0 busybox-1.7.0/busybox
    - 662783    2631   13416  678830   a5bae busybox-1.7.0/busybox.customld
    -
    -Same .config built against static uclibc:
    - 765021    1059   11020  777100   bdb8c busybox-1.7.0/busybox_uc
    - -

    Code/data shrink done in applets: crond, hdparm, dd, cal, od, nc, expr, uuencode, - test, slattach, diff, ping, tr, syslogd, hwclock, zcip, find, pidof, ash, uudecode, - runit/*, in libbb. - -

    New applets: -

      -
    • pscan, expand, unexpand (from Tito <farmatito at tiscali.it>) -
    • setfiles, restorecon (by Yuichi Nakamura <ynakam at hitachisoft.jp>) -
    • chpasswd (by Alexander Shishkin <virtuoso at slind.org>) -
    • slattach, ttysize -
    - -

    Unfortunately, not much work is done on shells. This was mostly stalled - by lack of time (read: laziness) on my part to learn how to adapt existing - qemu-runnable image for a NOMMU architechture (available on qemu website) - for local testing of cross-compiled busybox on my machine. - -

    Other changes since previous release (abridged): -

      -
    • addgroup: disallow addgroup -g num user group; make -g 0 work (Tito <farmatito at tiscali.it>) -
    • adduser: close /etc/{passwd,shadow} before calling passwd etc. Spotted by Natanael Copa <natanael.copa at gmail.com> -
    • arping: -i should be -I, fixed -
    • ash: make "jobs | cat" work like in bash (was giving empty output) -
    • ash: recognize -l as --login equivalent; do not recognize +-login -
    • ash: fix buglet in DEBUG code (Nguyen Thai Ngoc Duy <pclouds at gmail.com>) -
    • ash: fix SEGV if type has zero parameters -
    • awk: fix -F 'regex' bug (miscounted fields if last field is empty) -
    • catv: catv without arguments was trying to use environ as argv (Alex Landau <landau_alex at yahoo.com>) -
    • catv: don't die on open error (emit warning) -
    • chown/chgrp: completely match coreutils 6.8 wrt symlink handling -
    • correct_password: do not print "no shadow passwd..." message -
    • crond: don't start sendmail with absolute path, don't report obsolete version (report true bbox version) -
    • dd: fix bug where we assume count=INT_MAX when count is unspecified -
    • devfsd: sanitization by Tito <farmatito at tiscali.it> -
    • echo: fix non-fancy echo -
    • fdisk: make it work with big disks (read: typical today's disks) even if CONFIG_LFS is unset -
    • find: -context support for SELinux (KaiGai Kohei <kaigai at kaigai.gr.jp>) -
    • find: add conditional support for -maxdepth and -regex, make -size match GNU find -
    • find: fix build failure on certain configs (found by Cristian Ionescu-Idbohrn <cristian.ionescu-idbohrn at axis.com>) -
    • fsck_minix: make it print bb version, not it's own (outdated/irrelevant) one -
    • grep: implement -m MAX_MATCHES, fix buglets with context printing -
    • grep: fix selection done by FEATURE_GREP_EGREP_ALIAS (Maxime Bizon <mbizon at freebox.fr> (Freebox)) -
    • hush: add missing dependencies (Maxime Bizon <mbizon at freebox.fr> (Freebox)) -
    • hush: fix read builtin to not read ahead past EOL and to not use insane amounts of stack -
    • ifconfig: make it work with ifaces with interface no. > 255 -
    • ifup/ifdown: make location of ifstate configurable -
    • ifupdown: make netmask parsing smaller and more strict (was accepting 255.0.255.0, 255.1234.0.0 etc...) -
    • install: fix -s (strip) option, fix install a b /a/link/to/dir -
    • libbb: consolidate ARRAY_SIZE macro (Walter Harms <wharms at bfs.de>) -
    • libbb: make /etc/network parsing configurable. -200 bytes when off -
    • libbb: nuke BB_GETOPT_ERROR, always die if there are mutually exclusive options -
    • libbb: xioctl and friends by Tito <farmatito at tiscali.it> -
    • login: optional support for PAM -
    • login: make /etc/nologin support configurable (-240 bytes) -
    • login: ask passwords even for wrong usernames -
    • md5_sha1_sum: fix mishandling when run as /bin/md5sum -
    • mdev: add support for firmware loading -
    • mdev: work even when CONFIG_SYSFS_DEPRECATED in kernel is off -
    • modprobe: add scanning of /lib/modules/`uname -r`/modules.symbols (by Yann E. MORIN <yann.morin.1998 at anciens.enib.fr>) -
    • more: fixes by Tristan Schmelcher <tpkschme at engmail.uwaterloo.ca> -
    • nc: make connecting to IPv4 from IPv6-enabled hosts easier (was requiring -s local_addr) -
    • passwd: fix bug "updating shadow even if user's record is in passwd" -
    • patch: fix -p -1 handling -
    • patch: fix bad line ending handling (Nguyen Thai Ngoc Duy <pclouds at gmail.com>) -
    • ping: display roundtrip times with 1/1000th of ms, not 1/10 ms precision. -
    • ping: fix incorrect handling of -I (Iouri Kharon <bc-info at styx.cabel.net>) -
    • ping: fix non-fancy ping6 -
    • printenv: fix "printenv VAR1 VAR2" bug (spotted by Kalyanatejaswi Balabhadrapatruni <kalyanatejaswi at yahoo.co.in>) -
    • ps: fix -Z (by Yuichi Nakamura <ynakam at hitachisoft.jp>) -
    • rpm: add optional support for bz2 data. +50 bytes of code -
    • rpm: fix bogus "package is not installed" case -
    • sed: fix 'q' command handling (by Nguyen Thai Ngoc Duy <pclouds at gmail.com>) -
    • start_stop_daemon: NOMMU fixes by Alex Landau <landau_alex at yahoo.com> -
    • stat: fix option -Z SEGV -
    • strings: strings a b was processing a twice, fix that -
    • svlogd: fix timestamping, do not warn if config is missing -
    • syslogd, logread: get rid of head pointer, fix logread bug in the process -
    • syslogd: do not convert tabs to ^I, set syslog IPC buffer to mode 0644 -
    • tar: improve OLDGNU compat, make old SUN compat configurable -
    • test: fix testing primary expressions like '"-u" = "-u"' -
    • uudecode: fix to base64 decode by Jorgen Cederlof <jcz at google.com> -
    • vi: multiple fixes by Natanael Copa <natanael.copa at gmail.com> -
    • wget: fix bug in base64 encoding (bug 1404). +10 bytes -
    • wget: lift 256 chars limitation on terminal width -
    • wget, zcip: use monotonic_sec instead of gettimeofday -
    -
  • - -
  • 30 June 2007 -- BusyBox 1.6.1 (stable) -

    BusyBox 1.6.1. - (svn, - patches, - how to add a patch)

    - -

    This is a bugfix-only release, with fixes to echo, hush, and wget.

    -
  • - -
  • 1 June 2007 -- BusyBox 1.6.0 (unstable) -

    BusyBox 1.6.0. - (svn, - patches, - how to add a patch)

    - -

    Since this is a x.x.0 release, it probably does not deserve "stable" - label. Please help making 1.6.1 stable by testing 1.6.0.

    -

    Note that hush shell had many changes and (hopefully) is much improved now, - but there is a possibility that it regressed in some obscure cases. Please - report any such cases.

    -

    lash users please note: lash is going to be deprecated in busybox 1.7.0 - and removed in the more distant future. Please migrate to hush.

    -

    Memory usage has decreased, but we can do better still

    -

    Other changes since previous release: -

      -
    • NOFORK: audit small applets and mark some of them as NOFORK. Put big scary warnings in relevant places -
    • NOFORK: factor out NOFORK/NOEXEC code from find. Use NOFORK/NOEXEC in find and xargs -
    • NOFORK: remove potential xmalloc from NOFORK path in bb_full_fd_action -
    • NOMMU: random fixes; compressed --help now works for NOMMU -
    • SELinux: load_policy applet -
    • [u]mount: extend -t option (Roy Marples <uberlord at gentoo.org>) -
    • addgroup: clean up, fix adding users to existing groups and make it optional (Tito) -
    • adduser: don't bomb out if shadow password file doesn't exist (from Tito <farmatito at tiscali.it>) -
    • applet.c: do not even try to read config if run by real root; fix suid config handling -
    • ash: fix infinite loop on exit if tty is not there anymore -
    • ash: fix kill -l (by Mats Erik Andersson <mats.andersson64 at comhem.se>) -
    • ash: implement type -p, costs less than 10 bytes (patch by Mats Erik Andersson <mats.andersson64 at comhem.se>) -
    • awk: don't segfault on printf(%*s). Closes bug 1337 -
    • awk: guard against empty environment -
    • awk: some 'lineno' vars were shorts, made them ints (code got smaller) -
    • cat: stop using stdio.h opens -
    • config system: clarify PREFER_APPLETS/SH_STANDALONE effects in help text -
    • cryptpw: new applet (by Thomas Lundquist <lists at zelow.no>) -
    • cttyhack: new applet -
    • dd: NOEXEC fix; fix skip= parse error (spotted by Dirk Clemens <develop at cle-mens.de>) -
    • deluser: add optional support for removing users from groups (by Tito <farmatito at tiscali.it>) -
    • diff: fix SEGV (NULL deref) in diff -N -
    • diff: fix segfault on empty dirs (Peter Korsgaard <peter.korsgaard at barco.com>) -
    • dnsd: fix several buglets, make smaller; openlog(), so that applet's name is logged -
    • dpkg: run_package_script() returns 0 if all ok and non-zero if failure. The result code was checked incorrectly in two places. (from Kim B. Heino <Kim.Heino at bluegiga.com>) -
    • dpkg: use bitfields which are a bit closer to typical short/char. Code size -800 bytes -
    • dumpleases: getopt32()-ization (from Mats Erik Andersson <mats.andersson64 at comhem.se>) -
    • e2fsprogs: stop using statics in chattr. Minor code shrinkage (-130 bytes) -
    • ether-wake: close bug 1317. Reorder fuctions to avoid forward refs while at it -
    • ether-wake: save a few more bytes of code -
    • find: -group, -depth (Natanael Copa <natanael.copa at gmail.com>) -
    • find: add support for -delete, -path (by Natanael Copa) -
    • find: fix -prune. Add big comment about it -
    • find: improve usage text (Natanael Copa <natanael.copa at gmail.com>) -
    • find: missed 'static' on const data; size and prune were mixed up; use index_in_str_array -
    • find: un-DESKTOPize (Kai Schwenzfeier <niteblade at gmx.net>) -
    • find_root_device: teach to deal with /dev/ subdirs (by Kirill K. Smirnov <lich at math.spbu.ru>) -
    • find_root_device: use lstat - don't follow links -
    • getopt32: fix llist_t options ordering. llist_rev is now unused -
    • getopt: use getopt32 for option parsing - inspired by patch by Mats Erik Andersson <mats.andersson64 at comhem.se> -
    • hdparm: fix multisector mode setting (from Toni Mirabete <amirabete at catix.cat>) -
    • hdparm: make -T -t code smaller (-194 bytes), and output prettier -
    • ifupdown: make it possible to use DHCP clients different from udhcp -
    • ifupdown: reread state file before rewriting it. Fixes "ifup started another ifup" state corruption bug. Patch by Natanael Copa <natanael.copa at gmail.com> -
    • ifupdown: small optimization (avoid doing useless work if we are not going to update state file) -
    • ip: fix compilation if FEATURE_TR_CLASSES is off -
    • ip: mv ip*_main into ip.c; use a dispatcher to save on needless duplication. Saves a minor 12b -
    • ip: rewrite the ip applet to be less bloaty. Convert to index_in_(sub)str_array() -
    • ip: set the scope properly. Thanks to Jean Wolter -
    • iplink: shrink iplink; sanitize libiproute a bit (-916 bytes) -
    • iproute: shrink a bit (-200 bytes) -
    • kill: know much more signals; make code smaller; use common code for kill applet and ash kill builtin -
    • klogd: remove dependency on syslogd -
    • lash: "forking" applets are actually can be treated the same way as "non-forked". Also save a bit of space on trailing NULL array elements. -
    • lash: fix kill buglet (didn't properly recognize ESRCH) -
    • lash: make -c work; crush buffer overrun and free of non-malloced ptr (from Mats Erik Andersson <mats.andersson64 at comhem.se>) -
    • lash: recognize and use NOFORK applets -
    • less: fix case when regex search finds nothing; fix very obscure memory corruption bug; fix less <HUGEFILE + [End] busy loop -
    • libbb: add xsendto, xunlink, xpipe -
    • libbb: fix segfault in reset_ino_dev_hashtable() when *hashtable was NULL -
    • libbb: make pidfile writing configurable -
    • libbb: make xsocket die with address family printed (if VERBOSE_RESOLUTION_ERRORS=y) -
    • libbb: rework NOMMU helper API so that it makes more sense and easier to use -
    • libiproute: audit callgraph, shortcut error paths into die() functions -
    • lineedit: do not try to open NULL history file -
    • lineedit: nuke two unused variables and code which sets them -
    • login: remove setpgrp call (makes it work from shell prompt again); sanitize stdio descriptors (we are suid, need to be careful!) -
    • login: shrink login and set_environment by ~100 bytes -
    • mount: fix incorrect usage of strtok (inadvertently used NULL sometimes) -
    • mount: fix mounting of symlinks (mount from util-linux allows that) -
    • msh: data/bss reduction (more than 9k of it); fix "underscore bug" (a_b=1111 didn't work); fix obscure case with backticks and closed fd 1 -
    • nc: port nc 1.10 to busybox -
    • netstat: fix for bogus state value for raw sockets -
    • netstat: introduce -W: wide, ipv6-friendly output; shrink by ~500 bytes -
    • nmeter: should die if stdout doesn't like him anymore -
    • patch: do not try to delete same file twice -
    • ping: fix wrong sign extension of packet id (bug 1373) -
    • ps: add -o tty and -o rss support; make a bit smaller; work around libc bug: printf("%.*s\n", MAX_INT, buffer) -
    • run_parts: rewrite -
    • run_parts: do not check path portion of a name for "bad chars". Needed for ifupdown. Patch by Gabriel L. Somlo <somlo at cmu.edu> -
    • sed: fix escaped newlines in -f -
    • split: new applet -
    • stat: remove superfluous bss user (flags) and manually unswitch some areas -
    • stty: fix option parsing bug (spotted by Sascha Hauer <s.hauer at pengutronix.de>) -
    • svlogd: fix 'SEGV on uninitialized data' and make it honor TERM -
    • tail: fix SEGV on "tail -N" -
    • ipsvd: tcpsvd,udpsvd are new applets, GPL-ed 'clones' of Dan Bernstein's tcpserver. Author: Gerrit Pape <pape at smarden.org>, http://smarden.sunsite.dk/ipsvd/ -
    • test: close bug 1371; plug a memory leak; code size reduction -
    • tftp: code diet, and I think retransmits were broken -
    • tr: fix bug where we did not reject invalid classes like '[[:alpha'. debloat while at it -
    • udhcp: MAC_BCAST_ADDR and blank_chaddr are in fact constant, move to rodata; use pipe instead of socketpair -
    • udhcp[cd]: stop using atexit magic fir pidfile removal; stop deleting our own pidfile if we daemonize -
    • xargs: shrink code, ~80 bytes; simplify word list management -
    • zcip: make it work on NOMMU (+ improve NOMMU support machinery) -
    -
  • - -
  • 20 May 2007 -- BusyBox 1.5.1 (stable) -

    BusyBox 1.5.1. - (patches, - how to add a patch)

    - -

    This is a bugfix-only release, with fixes to hdparm, hush, ifupdown, ps - and sed.

    -
  • - -
  • 23 March 2007 -- BusyBox 1.5.0 (unstable) -

    BusyBox 1.5.0. - (patches, - how to add a patch)

    - -

    Since this is a x.x.0 release, it probably does not deserve "stable" - label. Please help making 1.5.1 stable by testing 1.5.0.

    -

    Notable changes since previous release: -

      -
    • find: added support for -user, -not, fixed -mtime, -mmin, -perm -
    • [de]archivers: merge common logic into one module -
    • ping[6]: unified code for both -
    • less: regex search improved -
    • ash: more readable code, testsuite added -
    • sed: several very obscure bugs fixed -
    • chown: -H, -L, -P support (required by POSIX) -
    • tar: handle (broken) checksums a-la Sun; tar restores mode again -
    • grep: implement -w, "implement" -a and -I by ignoring them -
    • cp: more sane behavior when overwriting existing files -
    • init: stop doing silly things with the console (-400 bytes) -
    • httpd: make httpd usable for NOMMU CPUs; fix POSTDATA handling bugs -
    • httpd: run interpreter for configured file extensions in any dir, - not only in /cgi-bin/ -
    • chrt: new applet -
    • SELinux: SELinux-related code and -Z option added to several applets, - new SELinux-specific applets: chcon, runcon. -
    • Build system: produces link map, uses -Wwrite-strings to catch - improper usage of string constants. -
    • Data and bss section usage audited and reduced - should help NOMMU - targets. -
    • Applets with bug fixes: gunzip, vi, syslogd, dpkg, ls, adjtimex, resize, - sv, printf, diff, awk, sort, dpkg, diff, tftp -
    • Applets with usability improvements: swapon, more, ifup/ifdown, hwclock, - udhcpd, start_stop_daemon, cmp -
    • Applets with code cleaned up: telnet, fdisk, fsck_minix, mkfs_minix, - syslogd, swapon, runsv, svlogd, klogd -
    -
  • - -
  • 18 March 2007 -- BusyBox 1.4.2 (stable) -

    BusyBox 1.4.2. -

    - -

    This release includes only trivial fixes accumulated since 1.4.1. -

    -
  • - -
  • 25 January 2007 -- BusyBox 1.4.1 (stable) -

    BusyBox 1.4.1. - (patches)

    - -

    This release includes only trivial fixes accumulated since 1.4.0. -

    -
  • - -
  • 20 January 2007 -- BusyBox 1.4.0 (stable) -

    BusyBox 1.4.0. - (patches)

    - -

    Since this is a x.x.0 release, it probably is a bit less "stable" - than usual.

    -

    Changes since previous release: -

      -
    • e2fsprogs are mostly removed from busybox. Some smaller parts remain, - the rest of it sits disabled in e2fsprogs/old_e2fsprogs/*, because - it's too bloated. Really. I'm afraid it's about the only way we can - ever get e2fsprogs cleaned up. -
    • less: many improvements. Now can display binary files - (although I expect it to have trouble with displays where 8bit chars - don't have 1-to-1 char/glyph relationship). Regexp search is not buggy - anymore. Less does not read entire input up-front. Reads input - as it appears (yay!). Works rather nice as man pager. I recommend it - for general use now. -
    • IPv6: generic support is in place, many networking applets are - upgraded to be IPv6 capable. Probably some work remains, but it is - already much better than what we had previously. -
    • arp: new applet (thanks to Eric Spakman). -
    • fakeidentd: non-forking standalone server part was taking ~90% - of the applet. Factored it out (in fact, rewrote it). -
    • syslogd: mostly rewritten. -
    • decompress_unzip, gzip: sanitized a bit. -
    • sed: better hadling of NULs -
    • httpd: stop adding our own "Content-type:" to CGI output -
    • chown: user.grp works again. -
    • minor bugfixes to: passwd, date, tftp, start_stop_daemon, tar, - ps, ifupdown, time, su, stty, awk, ping[6], sort,... -
    -
  • - -
  • 20 January 2007 -- BusyBox 1.3.2 (stable) -

    BusyBox 1.3.2.

    - -

    This release includes only one trivial fix accumulated since 1.3.1 -

    -
  • - -
  • 27 December 2006 -- BusyBox 1.3.1 (stable) -

    BusyBox 1.3.1. - (patches)

    - -

    Closing 2006 with new release. It includes only trivial fixes accumulated since 1.3.0 -

    -
  • - -
  • 14 December 2006 -- BusyBox 1.3.0 (stable) -

    BusyBox 1.3.0. - (patches)

    - -

    This release has CONFIG_DESKTOP option which enables features - needed for busybox usage on desktop machine. For example, find, chmod - and chown get several less frequently used options, od is significantly - bigger but matches GNU coreutils, etc. Intended to eventually make - busybox a viable alternative for "standard" utilities for slightly - adventurous desktop users. -

    Changes since previous release: -

      -
    • find: taking many more of standard options -
    • ps: POSIX-compliant -o implemented -
    • cp: added -s, -l -
    • grep: added -r, fixed -h -
    • watch: make it exec child like standard one does (was totally - incompatible) -
    • tar: fix limitations which were preventing bbox tar usage - on big directories: long names and linknames, pax headers - (Linux kernel tarballs have that). Fixed a number of obscure bugs. - Raised max file limit (now 64Gb). Security fixes (/../ attacks). -
    • httpd: added -i (inetd), -f (foreground), support for - directory indexer CGI (example is included), bugfixes. -
    • telnetd: fixed/improved IPv6 support, inetd+standalone support, - other fixes. Useful IPv6 stuff factored out into libbb. -
    • runit/*: new applets adapted from http://smarden.sunsite.dk/runit/ - (these are my personal favorite small-and-beautiful toys) -
    • minor bugfixes to: login, dd, mount, umount, chmod, chown, ln, udhcp, - fdisk, ifconfig, sort, tee, mkswap, wget, insmod. -
    -

    Note that GnuPG key used to sign this release is different. - 1.2.2.1 is also signed post-factum now. Sorry for the mess. -

    -
  • - -
  • 29 October 2006 -- BusyBox 1.2.2.1 (fix) -

    BusyBox 1.2.2.1.

    - -

    Added compile-time warning that static linking against glibc - produces buggy executables. -

  • - -
  • 24 October 2006 -- BusyBox 1.2.2 (stable) -

    It's a bit overdue, but - here is - BusyBox 1.2.2.

    - -

    This release has dozens of fixes backported from the ongoing development - branch. There are a couple of bugfixes to sed, two fixes to documentation - generation (BusyBox.html shouldn't have USE() macros in it anymore), fix - umount to report the right errno on failure and to umount block devices by - name with newer kernels, fix mount to handle symlinks properly, make mdev - delete device nodes when called for hotplug remove, fix a segfault - in traceroute, a minor portability fix to md5sum option parsing, a build - fix for httpd with old gccs, an options parsing tweak to hdparm, make test - fail gracefully when getgroups() returns -1, fix a race condition in - modprobe when two instances run at once (hotplug does this), make "tar xf - foo.tar dir/dir" extract all subdirectories, make our getty initialize the - terminal more like mingetty, an selinux build fix, an endianness fix in - ping6, fix for zcip defending addresses, clean up some global variables in - gzip to save memory, fix sulogin -tNNN, a help text tweak, several warning - fixes and build fixes, fixup dnsd a bit, and a partridge in a pear tree.

    - -

    As Linux Weekly News noted, - this is my (Rob's) last release of BusyBox. The new maintainer is Denis - Vlasenko, I'm off to do other things. -

    -
  • - -
  • 29 September 2006 -- New license email address. -

    The email address gpl@busybox.net is now the recommended way to contact - the Software Freedom Law Center to report BusyBox license violations.

    - -
  • 31 July 2006 -- BusyBox 1.2.1 (stable) -

    Since nobody seems to have objected too loudly over the weekend, I - might as well point you all at - Busybox - 1.2.1, a bugfix-only release with no new features.

    - -

    It has three shell fixes (two to lash: going "var=value" without - saying "export" should now work, plus a missing null pointer check, and - one to ash when redirecting output to a file that fills up.) Fix three - embarassing thinkos in the new dmesg command. Two build tweaks - (dependencies for the compressed usage messages and running make in the - libbb subdirectory). One fix to tar so it can extract git-generated - tarballs (rather than barfing on the pax extensions). And a partridge - in a pear... Ahem.

    - -

    But wait, there's more! A passwd changing fix so an empty - gecos field doesn't trigger a false objection that the new passwd contains - the gecos field. Make all our setuid() and setgid() calls check the return - value in case somebody's using per-process resource limits that prevent - a user from having too many processes (and thus prevent a process from - switching away from root, in which case the process will now _die_ rather - than continue with root privileges). A fix to adduser to make sure that - /etc/group gets updated. And a fix to modprobe to look for modules.conf - in the right place on 2.6 kernels.

    - -
  • 30 June 2006 -- BusyBox 1.2.0 -

    The -devel branch has been stabilized and the result is - Busybox - 1.2.0. Lots of stuff changed, I need to work up a decent changelog - over the weekend.

    - -

    I'm still experimenting with how long is best for the development - cycle, and since we've got some largeish projects queued up I'm going to - try a longer one. Expect 1.3.0 in December. (Expect 1.2.1 any time - we fix enough bugs. :)

    - -

    Update: Here are the first few bug fixes that will go into 1.2.1.

    - -
  • 17 May 2006 -- BusyBox 1.1.3 (stable) -

    BusyBox - 1.1.3 is another bugfix release. It makes passwd use salt, fixes a - memory freeing bug in ls, fixes "build all sources at once" mode, makes - mount -a not abort on the first failure, fixes msh so ctrl-c doesn't kill - background processes, makes patch work with patch hunks that don't have a - timestamp, make less's text search a lot more robust (the old one could - segfault), and fixes readlink -f when built against uClibc.

    - -

    Expect 1.2.0 sometime next month, which won't be a bugfix release.

    - -
  • 10 April 2006 -- BusyBox 1.1.2 (stable) -

    You can now download BusyBox 1.1.2, a bug fix release consisting of 11 patches - backported from the development branch: Some build fixes, several fixes - for mount and nfsmount, a fix for insmod on big endian systems, a fix for - find -xdev, and a fix for comm. Check the file "changelog" in the tarball - for more info.

    - -

    The next new development release (1.2.0) is slated for June. A 1.1.3 - will be released before then if more bug fixes crop up. (The new plan is - to have a 1.x.0 new development release every 3 months, with 1.x.y stable - bugfix only releases based on that as appropriate.)

    - -
  • 27 March 2006 -- Software Freedom Law Center representing BusyBox and uClibc -

    One issue Erik Andersen wanted to resolve when handing off BusyBox - maintainership to Rob Landley was license enforcement. BusyBox and - uClibc's existing license enforcement efforts (pro-bono representation - by Erik's father's law firm, and the - Hall of Shame), haven't - scaled to match the popularity of the projects. So we put our heads - together and did the obvious thing: ask Pamela Jones of - Groklaw for suggestions. She - referred us to the fine folks at softwarefreedom.org.

    - -

    As a result, we're pleased to announce that the - Software Freedom Law Center - has agreed to represent BusyBox and uClibc. We join a number of other - free and open source software projects (such as - X.org, - Wine, and - Plone - in being represented by a fairly cool bunch of lawyers, which is not a - phrase you get to use every day.

    - -
  • 22 March 2006 -- BusyBox 1.1.1 -

    The new maintainer is Rob Landley, and the new release is BusyBox 1.1.1. Expect a "what's new" document in a few days. (Also, Erik and I have have another announcement pending...)

    -

    Update: Rather than put out an endless stream of 1.1.1.x releases, - the various small fixes have been collected together into a - patch, - and new fixes will be appended to that as needed. Expect 1.1.2 around - June.

    -
  • -
  • 11 January 2006 -- 1.1.0 is out -

    The new stable release is - BusyBox - 1.1.0. It has a number of improvements, including several new applets. - (It also has a few rough spots, - but we're trying out a "release early, release often" strategy to see how - that works. Expect 1.1.1 sometime in March.)

    - -
  • 31 October 2005 -- 1.1.0-pre1 -

    The development branch of busybox is stable enough for wider testing, so - you can now - download, - the first prerelease of 1.1.0. This prerelease includes a lot of - new - functionality: new applets, new features, and extensive rewrites of - several existing applets. This prerelease should be noticeably more - standards - compliant than earlier versions of busybox, although we're - still working out the bugs.

    - -
  • 16 August 2005 -- 1.01 is out - -

    A new stable release (BusyBox - 1.01) is now available for download, containing over a hundred - small - fixes that have cropped up since the 1.00 release.

    - -
  • 13 January 2005 -- Bug and Patch Tracking

    - - Bug reports sometimes get lost when posted to the mailing list. The - developers of BusyBox are busy people, and have only so much they can keep - in their brains at a time. In my case, I'm lucky if I can remember my own - name, much less a bug report posted last week... To prevent your bug report - from getting lost, if you find a bug in BusyBox, please use the - shiny new Bug and Patch Tracking System - to post all the gory details. - -

    - - The same applies to patches... Regardless of whether your patch - is a bug fix or adds spiffy new features, please post your patch - to the Bug and Patch Tracking System to make certain it is - properly considered. - - -

    -

  • 13 October 2004 -- BusyBox 1.00 released

    - - When you take a careful look at nearly every embedded Linux device or - software distribution shipping today, you will find a copy of BusyBox. - With countless routers, set top boxes, wireless access points, PDAs, and - who knows what else, the future for Linux and BusyBox on embedded devices - is looking very bright. - -

    - - It is therefore with great satisfaction that I declare each and every - device already shipping with BusyBox is now officially out of date. - The highly anticipated release of BusyBox 1.00 has arrived! - -

    - - Over three years in development, BusyBox 1.00 represents a tremendous - improvement over the old 0.60.x stable series. Now featuring a Linux - KernelConf based configuration system (as used by the Linux kernel), - Linux 2.6 kernel support, many many new applets, and the development - work and testing of thousands of people from around the world. - -

    - - If you are already using BusyBox, you are strongly encouraged to upgrade to - BusyBox 1.00. If you are considering developing an embedded Linux device - or software distribution, you may wish to investigate if using BusyBox is - right for your application. If you need help getting started using - BusyBox, if you wish to donate to help cover expenses, or if you find a bug - and need help reporting it, you are invited to visit the BusyBox FAQ. - -

    - - As usual you can download busybox here. - -

    Have Fun! - -

    -

  • Old News

    - Click here to read older news - - -

  • 16 August 2004 -- BusyBox 1.0.0-rc3 released

    - - Here goes release candidate 3... -

    - The changelog has all the details. - And as usual you can download busybox here. - -

    Have Fun! - -

    -

  • 26 July 2004 -- BusyBox 1.0.0-rc2 released

    - - Here goes release candidate 2... -

    - The changelog has all the details. - And as usual you can download busybox here. - -

    Have Fun! - -

    -

  • 20 July 2004 -- BusyBox 1.0.0-rc1 released

    - - Here goes release candidate 1... This fixes all (most?) of the problems - that have turned up since -pre10. In particular, loading and unloading of - kernel modules with 2.6.x kernels should be working much better. -

    - - I really want to get BusyBox 1.0.0 released soon and I see no real - reason why the 1.0.0 release shouldn't happen with things pretty much as - is. BusyBox is in good shape at the moment, and it works nicely for - everything that I'm doing with it. And from the reports I've been getting, - it works nicely for what most everyone else is doing with it as well. - There will eventually be a 1.0.1 anyway, so we might as well get on with - it. No, BusyBox is not perfect. No piece of software ever is. And while - there is still plenty that can be done to improve things, most of that work - is waiting till we can get a solid 1.0.0 release out the door.... -

    - - Please do not bother to send in patches adding cool new features at this - time. Only bug-fix patches will be accepted. If you have submitted a - bug-fixing patch to the busybox mailing list and no one has emailed you - explaining why your patch was rejected, it is safe to say that your patch - has been lost or forgotten. That happens sometimes. Please re-submit your - bug-fixing patch to the BusyBox mailing list, and be sure to put "[PATCH]" - at the beginning of the email subject line! - -

    - The changelog has all the details. - And as usual you can download busybox here. - -

    Have Fun! - -

    - On a less happy note, My 92 year old grandmother (my dad's mom) passed away - yesterday (June 19th). The funeral will be Thursday in a little town about - 2 hours south of my home. I've checked and there is absolutely no way I - could be back in time for the funeral if I attend OLS and give my presentation - as scheduled. -

    - As such, it is with great reluctance and sadness that I have come - to the conclusion I will have to make my appologies and skip OLS - this year. -

    - - -

    -

  • 13 April 2004 -- BusyBox 1.0.0-pre10 released

    - - Ok, I lied. It turns out that -pre9 will not be the final BusyBox - pre-release. With any luck however -pre10 will be, since I really - want to get BusyBox 1.0.0 released very soon. As usual, please do not - bother to send in patches adding cool new features at this time. Only - bug-fix patches will be accepted. It would also be very helpful if - people could continue to review the BusyBox documentation and submit - improvements. - -

    - The changelog has all the details. - And as usual you can download busybox here. - -

    Have Fun! -

    - - -

    -

  • 6 April 2004 -- BusyBox 1.0.0-pre9 released

    - - Here goes the final BusyBox pre-release... This is your last chance for - bug fixes. With luck this will be released as BusyBox 1.0.0 later this - week. Please do not bother to send in patches adding cool new features at - this time. Only bug-fix patches will be accepted. It would also be - very helpful if people could help review the BusyBox documentation - and submit improvements. I've spent a lot of time updating the - documentation to make it better match reality, but I could really use some - assistance in checking that the features supported by the various applets - match the features listed in the documentation. - -

    - I had hoped to get this released a month ago, but - - another release on 1 March 2004 has kept me busy... - -

    - The changelog has all the details. - And as usual you can download busybox here. - -

    Have Fun! -

    - - -

    -

  • 23 February 2004 -- BusyBox 1.0.0-pre8 released

    - - Here goes yet another BusyBox pre-release... Please do not bother to send - in patches supplying new features at this time. Only bug-fix patches will - be accepted. If you have a cool new feature you would like to see - supported, or if you have an amazing new applet you would like to submit, - please wait and submit such things later. We really want to get a release - out we can all be proud of. We are still aiming to finish off the -pre - series in February and move on to the final 1.0.0 release... So if you - spot any bugs, now would be an excellent time to send in a fix to the - busybox mailing list. It would also be very helpful if people could - help review the BusyBox documentation and submit improvements. It would be - especially helpful if people could check that the features supported by the - various applets match the features listed in the documentation. - -

    - - The changelog has all the details. - And as usual you can download busybox here. - -

    Have Fun! -

    - - -

  • 4 February 2004 -- BusyBox 1.0.0-pre7 released

    - - There was a bug in -pre6 that broke argument parsing for a - number of applets, since a variable was not being zeroed out - properly. This release is primarily intended to fix that one - problem. In addition, this release fixes several other - problems, including a rewrite by mjn3 of the code for parsing - the busybox.conf file used for suid handling, some shell updates - from vodz, and a scattering of other small fixes. We are still - aiming to finish off the -pre series in February and move on to - the final 1.0.0 release... If you see any problems, of have - suggestions to make, as always, please feel free to email the - busybox mailing list. - -

    - - The changelog has all - the details. And as usual you can - download busybox here. - -

    Have Fun! -

    - - -

    -

  • 30 January 2004 -- BusyBox 1.0.0-pre6 released

    - - Here goes the next pre-release for the new BusyBox stable - series. This release adds a number of size optimizations, - updates udhcp, fixes up 2.6 modutils support, updates ash - and the shell command line editing, and the usual pile of - bug fixes both large and small. Things appear to be - settling down now, so with a bit of luck and some testing - perhaps we can finish off the -pre series in February and - move on to the final 1.0.0 release... If you see any - problems, of have suggestions to make, as always, please - feel free to email the busybox mailing list. - -

    - - People who rely on the daily BusyBox snapshots - should be aware that snapshots of the old busybox 0.60.x - series are no longer available. Daily snapshots are now - only available for the BusyBox 1.0.0 series and now use - the naming scheme "busybox-<date>.tar.bz2". Please - adjust any build scripts using the old naming scheme accordingly. - -

    - - The changelog has all - the details. And as usual you can - download busybox here. - -

    Have Fun! -

    - - -

    -

  • 23 December 2003 -- BusyBox 1.0.0-pre5 released

    - - Here goes the next pre-release for the new BusyBox stable - series. The most obvious thing in this release is a fix for - a terribly stupid bug in mount that prevented it from working - properly unless you specified the filesystem type. This - release also fixes a few compile problems, updates udhcp, - fixes a silly bug in fdisk, fixes ifup/ifdown to behave like - the Debian version, updates devfsd, updates the 2.6.x - modutils support, add a new 'rx' applet, removes the obsolete - 'loadacm' applet, fixes a few tar bugs, fixes a sed bug, and - a few other odd fixes. - -

    - - If you see any problems, of have suggestions to make, as - always, please feel free to send an email to the busybox - mailing list. - -

    - - The changelog has all - the details. And as usual you can - download busybox here. - -

    Have Fun! -

    - - - -

  • 10 December 2003 -- BusyBox 1.0.0-pre4 released

    - - Here goes the fourth pre-release for the new BusyBox stable - series. This release includes major rework to sed, lots of - rework on tar, a new tiny implementation of bunzip2, a new - devfsd applet, support for 2.6.x kernel modules, updates to - the ash shell, sha1sum and md5sum have been merged into a - common applet, the dpkg applets has been cleaned up, and tons - of random bugs have been fixed. Thanks everyone for all the - testing, bug reports, and patches! Once again, a big - thank-you goes to Glenn McGrath (bug1) for stepping in and - helping get patches merged! - -

    - - And of course, if you are reading this, you might have noticed - the busybox website has been completely reworked. Hopefully - things are now somewhat easier to navigate... If you see any - problems, of have suggestions to make, as always, please feel - free to send an email to the busybox mailing list. - -

    - - The changelog has all - the details. And as usual you can - download busybox here. - -

    Have Fun! - - - -

    -

  • 12 Sept 2003 -- BusyBox 1.0.0-pre3 released

    - - Here goes the third pre-release for the new BusyBox stable - series. The last prerelease has held up quite well under - testing, but a number of problems have turned up as the number - of people using it has increased. Thanks everyone for all - the testing, bug reports, and patches! - -

    - - If you have submitted a patch or a bug report to the busybox - mailing list and no one has emailed you explaining why your - patch was rejected, it is safe to say that your patch has - somehow gotten lost or forgotten. That happens sometimes. - Please re-submit your patch or bug report to the BusyBox - mailing list! - -

    - - The point of the "-preX" versions is to get a larger group of - people and vendors testing, so any problems that turn up can be - fixed prior to the final 1.0.0 release. The main feature - (besides additional testing) that is still still on the TODO - list before the final BusyBox 1.0.0 release is sorting out the - modutils issues. For the new 2.6.x kernels, we already have - patches adding insmod and rmmod support and those need to be - integrated. For 2.4.x kernels, for which busybox only supports - a limited number of architectures, we may want to invest a bit - more work before we cut 1.0.0. Or we may just leave 2.4.x - module loading alone. - -

    - - I had hoped this release would be out a month ago. And of - course, it wasn't since Erik became busy getting a release of - uClibc - out the door. Many thanks to Glenn McGrath (bug1) for - stepping in and helping get a bunch of patches merged! I am - not even going to state a date for releasing BusyBox 1.0.0 - -pre4 (or the final 1.0.0). We're aiming for late September... - But if this release proves as to be exceptionally stable (or - exceptionally unstable!), the next release may be very soon - indeed. - -

    - - The changelog has all - the details. And as usual you can - download busybox here. - -

    Have Fun! - - -

    -

  • 30 July 2003 -- BusyBox 1.0.0-pre2 released

    - - Here goes another pre release for the new BusyBox stable - series. The last prerelease (pre1) was given quite a lot of - testing (thanks everyone!) which has helped turn up a number of - bugs, and these problems have now been fixed. - -

    - - Highlights of -pre2 include updating the 'ash' shell to sync up - with the Debian 'dash' shell, a new 'hdparm' applet was added, - init again supports pivot_root, The 'reboot' 'halt' and - 'poweroff' applets can now be used without using busybox init. - an ifconfig buffer overflow was fixed, losetup now allows - read-write loop devices, uClinux daemon support was added, the - 'watchdog', 'fdisk', and 'kill' applets were rewritten, there were - tons of doc updates, and there were many other bugs fixed. -

    - - If you have submitted a patch and it is not included in this - release and Erik has not emailed you explaining why your patch - was rejected, it is safe to say that he has lost your patch. - That happens sometimes. Please re-submit your patch to the - BusyBox mailing list. -

    - - The point of the "-preX" versions is to get a larger group of - people and vendors testing, so any problems that turn up can be - fixed prior to the final 1.0.0 release. The main feature that - is still still on the TODO list before the final BusyBox 1.0.0 - release is adding module support for the new 2.6.x kernels. If - necessary, a -pre3 BusyBox release will happen on August 6th. - Hopefully (i.e. unless some horrible catastrophic problem - turns up) the final BusyBox 1.0.0 release will be ready by - then... -

    - - The changelog has all - the details. As usual you can download busybox here. - -

    Have Fun! -

    - -

    -

  • 15 July 2003 -- BusyBox 1.0.0-pre1 released

    - - The busybox development series has been under construction for - nearly two years now. Which is just entirely too long... So - it is with great pleasure that I announce the imminent release - of a new stable series. Due to the huge number of changes - since the last stable release (and the usual mindless version - number inflation) I am branding this new stable series verison - 1.0.x... -

    - - The point of "-preX" versions is to get a larger group of - people and vendors testing, so any problems that turn up can be - fixed prior to the magic 1.0.0 release (which should happen - later this month)... I plan to release BusyBox 1.0.0-pre2 next - Monday (July 21st), and, if necessary, -pre3 on July 28th. - Hopefully (i.e. unless some horrible catastrophic problem turns - up) the final BusyBox 1.0.0 release should be ready by the end - of July. -

    - - If you have submitted patches, and they are not in this release - and I have not emailed you explaining why your patch was - rejected, it is safe to say that I have lost your patch. That - happens sometimes. Please do NOT send all your patches, - support questions, etc, directly to Erik. I get hundreds of - emails every day (which is why I end up losing patches - sometimes in the flood)... The busybox mailing list is the - right place to send your patches, support questions, etc. -

    - - I would like to especially thank Vladimir Oleynik (vodz), Glenn - McGrath (bug1), Robert Griebl (sandman), and Manuel Novoa III - (mjn3) for their significant efforts and contributions that - have made this release possible. -

    - - As usual you can download busybox here. - You don't really need to bother with the - changelog, as the changes - vs the stable version are way too extensive to easily enumerate. - But you can take a look if you really want too. - -

    Have Fun! -

    - - - -

    -

  • 26 October 2002 -- BusyBox 0.60.5 released

    - - I am very pleased to announce that the BusyBox 0.60.5 (stable) - is now available for download. This is a bugfix release for - the stable series to address all the problems that have turned - up since the last release. Unfortunately, the previous release - had a few nasty bugs (i.e. init could deadlock, gunzip -c tried - to delete source files, cp -a wouldn't copy symlinks, and init - was not always providing controlling ttys when it should have). - I know I said that the previous release would be the end of the - 0.60.x series. Well, it turns out I'm a liar. But this time I - mean it (just like last time ;-). This will be the last - release for the 0.60.x series -- all further development work - will be done for the development busybox tree. Expect the development - version to have its first real release very very soon now... - -

    - The changelog has all - the details. As usual you can download busybox here. -

    Have Fun! -

    - -

    -

  • 18 September 2002 -- BusyBox 0.60.4 released

    - - I am very pleased to announce that the BusyBox 0.60.4 - (stable) is now available for download. This is primarily - a bugfix release for the stable series to address all - the problems that have turned up since the last - release. This will be the last release for the 0.60.x series. - I mean it this time -- all further development work will be done - on the development busybox tree, which is quite solid now and - should soon be getting its first real release. - -

    - The changelog has all - the details. As usual you can download busybox here. -

    Have Fun! -

    - - -

    -

  • 27 April 2002 -- BusyBox 0.60.3 released

    - - I am very pleased to announce that the BusyBox 0.60.3 (stable) is - now available for download. This is primarily a bugfix release - for the stable series. A number of problems have turned up since - the last release, and this should address most of those problems. - This should be the last release for the 0.60.x series. The - development busybox tree has been progressing nicely, and will - hopefully be ready to become the next stable release. - -

    - The changelog has all - the details. As usual you can download busybox here. -

    Have Fun! -

    - - -

    -

  • 6 March 2002 -- busybox.net now has mirrors!

    - - Busybox.net is now much more available, thanks to - the fine folks at http://i-netinnovations.com/ - who are providing hosting for busybox.net and - uclibc.org. In addition, we now have two mirrors: - http://busybox.linuxmagic.com/ - in Canada and - http://busybox.csservers.de/ - in Germany. I hope this makes things much more - accessible for everyone! - - -

  • -3 January 2002 -- Welcome to busybox.net! - -

    Thanks to the generosity of a number of busybox -users, we have been able to purchase busybox.net -(which is where you are probably reading this). -Right now, busybox.net and uclibc.org are both -living on my home system (at the end of my DSL -line). I apologize for the abrupt move off of -busybox.lineo.com. Unfortunately, I no longer have -the access needed to keep that system updated (for -example, you might notice the daily snapshots there -stopped some time ago).

    - -

    Busybox.net is currently hosted on my home -server, at the end of a DSL line. Unfortunately, -the load on them is quite heavy. To address this, -I'm trying to make arrangements to get busybox.net -co-located directly at an ISP. To assist in the -co-location effort, Mark Whitley -(author of busybox sed, cut, and grep) has donated -his NetWinder computer -for hosting busybox.net and uclibc.org. Once this -system is co-located, the current speed problems -should be completely eliminated. Hopefully, too, -some of you will volunteer to set up some mirror -sites, to help to distribute the load a bit.

    - -

    - Since some people expressed concern over BusyBox -donations, let me assure you that no one is getting -rich here. All BusyBox and uClibc donations will be -spent paying for bandwidth and needed hardware -upgrades. For example, Mark's NetWinder currently -has just 64Meg of memory. As demonstrated when -google spidered the site the other day, 64 Megs in -not enough, so I'm going to be ordering 256Megs of -ram and a larger hard drive for the box today. So -far, donations received have been sufficient to -cover almost all expenses. In the future, we may -have co-location fees to worry about, but for now -we are ok. A HUGE thank-you goes out to -everyone that has contributed!
    - -Erik

    -
  • - -
  • -20 November 2001 -- BusyBox 0.60.2 released - -

    We am very pleased to announce that the BusyBox -0.60.2 (stable) is now released to the world. This -one is primarily a bugfix release for the stable -series, and it should take care of most everyone's -needs till we can get the nice new stuff we have -been working on in CVS ready to release (with the -wonderful new buildsystem). The biggest change in -this release (beyond bugfixes) is the fact that msh -(the minix shell) has been re-worked by Vladimir N. -Oleynik (vodz) and so it no longer crashes when -told to do complex things with backticks.

    - -

    This release has been tested on x86, ARM, and -powerpc using glibc 2.2.4, libc5, and uClibc, so it -should work with just about any Linux system you -throw it at. See the changelog for most -of the details. The last release was -very solid for people, and this one should -be even better.

    - -

    As usual BusyBox 0.60.2 can be downloaded from -http://www.busybox.net/downloads.

    - -

    Have Fun.
    - -Erik

    -
  • - -
  • 18 November 2001 -- Help us buy busybox.net! - - -
    -Click here to help buy busybox.net! -
    - - - - - - - -
    - - -I've contacted the current owner of busybox.net and he is willing -to sell the domain name -- for $250. He also owns busybox.org but -will not part with it... I will then need to pay the registry fee -for a couple of years and start paying for bandwidth, so this will -initially cost about $300. I would like to host busybox.net on my -home machine (codepoet.org) so I have full control over the system, -but to do that would require that I increase the level of bandwidth -I am paying for. Did you know that so far this month, there -have been over 1.4 Gigabytes of busybox ftp downloads? I don't -even know how much CVS bandwidth it requires. For the -time being, Lineo has continued to graciously provide this -bandwidth, despite the fact that I no longer work for them. If I -start running this all on my home machine, paying for the needed bandwidth -will start costing some money. -

    - -I was going to pay it all myself, but my wife didn't like that -idea at all (big surprise). It turns out <insert argument -where she wins and I don't> she has better ideas -about what we should spend our money on that don't involve -busybox. She suggested I should ask for contributions on the -mailing list and web page. So... -

    - -I am hoping that if everyone could contribute a bit, we could pick -up the busybox.net domain name and cover the bandwidth costs. I -know that busybox is being used by a lot of companies as well as -individuals -- hopefully people and companies that are willing to -contribute back a bit. So if everyone could please help out, that -would be wonderful! -

    - - -

  • 23 August 2001 -- BusyBox 0.60.1 released -
    - - This is a relatively minor bug fixing release that fixes - up the bugs that have shown up in the stable release in - the last few weeks. Fortunately, nothing too - serious has shown up. This release only fixes bugs -- no - new features, no new applets. So without further ado, - here it is. Come and get it. -

    - The - changelog has all - the details. As usual BusyBox 0.60.1 can be downloaded from - http://busybox.net/downloads. -

    Have Fun! -

    - - -

  • 2 August 2001 -- BusyBox 0.60.0 released -
    - I am very pleased to announce the immediate availability of - BusyBox 0.60.0. I have personally tested this release with libc5, glibc, - and uClibc on - x86, ARM, and powerpc using linux 2.2 and 2.4, and I know a number - of people using it on everything from ia64 to m68k with great success. - Everything seems to be working very nicely now, so getting a nice - stable bug-free(tm) release out seems to be in order. This releases fixes - a memory leak in syslogd, a number of bugs in the ash and msh shells, and - cleans up a number of things. - -

    - - Those wanting an easy way to test the 0.60.0 release with uClibc can - use User-Mode Linux - to give it a try by downloading and compiling - buildroot.tar.gz. - You don't have to be root or reboot your machine to run test this way. - Preconfigured User-Mode Linux kernel source is also on busybox.net. -

    - Another cool thing is the nifty - BusyBox Tutorial contributed by K Computing. This requires - a ShockWave plugin (or standalone viewer), so you may want to grab the - the GPLed shockwave viewer from here - to view the tutorial. -

    - - Finally, In case you didn't notice anything odd about the - version number of this release, let me point out that this release - is not 0.53, because I bumped the version number up a - bit. This reflects the fact that this release is intended to form - a new stable BusyBox release series. If you need to rely on a - stable version of BusyBox, you should plan on using the stable - 0.60.x series. If bugs show up then I will release 0.60.1, then - 0.60.2, etc... This is also intended to deal with the fact that - the BusyBox build system will be getting a major overhaul for the - next release and I don't want that to break products that people - are shipping. To avoid that, the new build system will be - released as part of a new BusyBox development series that will - have some not-yet-decided-on odd version number. Once things - stabilize and the new build system is working for everyone, then - I will release that as a new stable release series. - -

    - The - changelog has all - the details. As usual BusyBox 0.60.0 can be downloaded from - http://busybox.net/downloads. -

    Have Fun! -

    - - -

  • 7 July 2001 -- BusyBox 0.52 released -
    - - I am very pleased to announce the immediate availability of - BusyBox 0.52 (the "new-and-improved rock-solid release"). This - release is the result of many hours of work and has tons - of bugfixes, optimizations, and cleanups. This release adds - several new applets, including several new shells (such as hush, msh, - and ash). - -

    - The - changelog covers - some of the more obvious details, but there are many many things that - are not mentioned, but have been improved in subtle ways. As usual, - BusyBox 0.52 can be downloaded from - http://busybox.net/downloads. -

    Have Fun! -

    - - -

  • 10 April 2001 - Graph of Busybox Growth -
    -The illustrious Larry Doolittle has made a PostScript chart of the growth -of the Busybox tarball size over time. It is available for downloading / -viewing right here. - -

    (Note that while the number of applets in Busybox has increased, you -can still configure Busybox to be as small as you want by selectively -turning off whichever applets you don't need.) -

    - - -

  • 10 April 2001 -- BusyBox 0.51 released -
    - - BusyBox 0.51 (the "rock-solid release") is now out there. This - release adds only 2 new applets: env and vi. The vi applet, - contributed by Sterling Huxley, is very functional, and is only - 22k. This release fixes 3 critical bugs in the 0.50 release. - There were 2 potential segfaults in lash (the busybox shell) in - the 0.50 release which are now fixed. Another critical bug in - 0.50 which is now fixed: syslogd from 0.50 could potentially - deadlock the init process and thereby break your entire system. -

    - - There are a number of improvements in this release as well. For - one thing, the wget applet is greatly improved. Dmitry Zakharov - added FTP support, and Laurence Anderson make wget fully RFC - compliant for HTTP 1.1. The mechanism for including utility - functions in previous releases was clumsy and error prone. Now - all utility functions are part of a new libbb library, which makes - maintaining utility functions much simpler. And BusyBox now - compiles on itanium systems (thanks to the Debian itanium porters - for letting me use their system!). -

    - You can read the - changelog for - complete details. BusyBox 0.51 can be downloaded from - http://busybox.net/downloads. -

    Have Fun! -

    - -

  • Busybox Boot-Floppy Image - -

    Because you asked for it, we have made available a Busybox boot floppy -image. Here's how you use it: - -

      - -
    1. - Download the image - -
    2. dd it onto a floppy like so: dd if=busybox.floppy.img - of=/dev/fd0 ; sync - -
    3. Pop it in a machine and boot up. - -
    - -

    If you want to look at the contents of the initrd image, do this: - -

    -    mount ./busybox.floppy.img /mnt -o loop -t msdos
    -    cp /mnt/initrd.gz /tmp
    -    umount /mnt
    -    gunzip /tmp/initrd.gz
    -    mount /tmp/initrd /mnt -o loop -t minix
    -
    - - -
  • 15 March 2001 -- BusyBox 0.50 released -
    - - This release adds several new applets including ifconfig, route, pivot_root, stty, - and tftp, and also fixes tons of bugs. Tab completion in the - shell is now working very well, and the shell's environment variable - expansion was fixed. Tons of other things were fixed or made - smaller. For a fairly complete overview, see the - changelog. -

    - lash (the busybox shell) is still with us, fixed up a bit so it - now behaves itself quite nicely. It really is quite usable as - long as you don't expect it to provide Bourne shell grammer. - Standard things like pipes, redirects, command line editing, and - environment variable expansion work great. But we have found that - this shell, while very usable, does not provide an extensible - framework for adding in full Bourne shell behavior. So the first order of - business as we begin working on the next BusyBox release will be to merge in the new shell - currently in progress at - Larry Doolittle's website. -

    - - -

  • 27 January 2001 -- BusyBox 0.49 released -
    - - Several new applets, lots of bug fixes, cleanups, and many smaller - things made nicer. Several cleanups and improvements to the shell. - For a list of the most interesting changes - you might want to look at the changelog. -

    - Special thanks go out to Matt Kraai and Larry Doolittle for all their - work on this release, and for keeping on top of things while I've been - out of town. -

    - Special Note
    - - BusyBox 0.49 was supposed to have replaced lash, the BusyBox - shell, with a new shell that understands full Bourne shell/Posix shell grammer. - Well, that simply didn't happen in time for this release. A new - shell that will eventually replace lash is already under - construction. This new shell is being developed by Larry - Doolittle, and could use all of our help. Please see the work in - progress on Larry's website - and help out if you can. This shell will be included in the next - release of BusyBox. -

    - -

  • 13 December 2000 -- BusyBox 0.48 released -
    - - This release fixes lots and lots of bugs. This has had some very - rigorous testing, and looks very, very clean. The usual tar - update of course: tar no longer breaks hardlinks, tar -xzf is - optionally supported, and the LRP folks will be pleased to know - that 'tar -X' and 'tar --exclude' are both now in. Applets are - now looked up using a binary search making lash (the busybox - shell) much faster. For the new debian-installer (for Debian - woody) a .udeb can now be generated. -

    - The curious can get a list of some of the more interesting changes by reading - the changelog. -

    - Many thanks go out to the many many people that have contributed to - this release, especially Matt Kraai, Larry Doolittle, and Kent Robotti. -

    -

  • 26 September 2000 -- BusyBox 0.47 released -
    - - This release fixes lots of bugs (including an ugly bug in 0.46 - syslogd that could fork-bomb your system). Added several new - apps: rdate, wget, getopt, dos2unix, unix2dos, reset, unrpm, - renice, xargs, and expr. syslogd now supports network logging. - There are the usual tar updates. Most apps now use getopt for - more correct option parsing. - See the changelog - for complete details. - - -

  • 11 July 2000 -- BusyBox 0.46 released -
    - - This release fixes several bugs (including a ugly bug in tar, - and fixes for NFSv3 mount support). Added a dumpkmap to allow - people to dump a binary keymaps for use with 'loadkmap', and a - completely reworked 'grep' and 'sed' which should behave better. - BusyBox shell can now also be used as a login shell. - See the changelog - for complete details. - - -

  • 21 June 2000 -- BusyBox 0.45 released -
    - - This release has been slow in coming, but is very solid at this - point. BusyBox now supports libc5 as well as GNU libc. This - release provides the following new apps: cut, tr, insmod, ar, - mktemp, setkeycodes, md5sum, uuencode, uudecode, which, and - telnet. There are bug fixes for just about every app as well (see - the changelog for - details). -

    - Also, some exciting infrastructure news! Busybox now has its own - mailing list, - publically browsable - CVS tree, - anonymous - CVS access, and - for those that are actively contributing there is even - CVS write access. - I think this will be a huge help to the ongoing development of BusyBox. -

    - Also, for the curious, there is no 0.44 release. Somehow 0.44 got announced - a few weeks ago prior to its actually being released. To avoid any confusion - we are just skipping 0.44. -

    - Many thanks go out to the many people that have contributed to this release - of BusyBox (esp. Pavel Roskin)! - - -

  • 19 April 2000 -- syslogd bugfix -
    -Turns out that there was still a bug in busybox syslogd. -For example, with the following test app: -
    -#include <syslog.h>
    -
    -int do_log(char* msg, int delay)
    -{
    -    openlog("testlog", LOG_PID, LOG_DAEMON);
    -    while(1) {
    -	syslog(LOG_ERR, "%s: testing one, two, three\n", msg);
    -	sleep(delay);
    -    }
    -    closelog();
    -    return(0);
    -};
    -
    -int main(void)
    -{
    -    if (fork()==0)
    -	do_log("A", 2);
    -    do_log("B", 3);
    -}
    -
    -it should be logging stuff from both "A" and "B". As released in 0.43 only stuff -from "A" would have been logged. This means that if init tries to log something -while say ppp has the syslog open, init would block (which is bad, bad, bad). -

    -Karl M. Hegbloom has created a fix for the problem. -Thanks Karl! - - -

  • 18 April 2000 -- BusyBox 0.43 released (finally!) -
    -I have finally gotten everything into a state where I feel pretty -good about things. This is definitely the most stable, solid release -so far. A lot of bugs have been fixed, and the following new apps -have been added: sh, basename, dirname, killall, uptime, -freeramdisk, tr, echo, test, and usleep. Tar has been completely -rewritten from scratch. Bss size has also been greatly reduced. -More details are available in the -changelog. -Oh, and as a special bonus, I wrote some fairly comprehensive -documentation, complete with examples and full usage information. - -

    -Many thanks go out to the fine people that have helped by submitting patches -and bug reports; particularly instrumental in helping for this release were -Karl Hegbloom, Pavel Roskin, Friedrich Vedder, Emanuele Caratti, -Bob Tinsley, Nicolas Pitre, Avery Pennarun, Arne Bernin, John Beppu, and Jim Gleason. -There were others so if I somehow forgot to mention you, I'm very sorry. -

    - -You can grab BusyBox 0.43 tarballs here. - -

  • 9 April 2000 -- BusyBox 0.43 pre release -
    -Unfortunately, I have not yet finished all the things I want to -do for BusyBox 0.43, so I am posting this pre-release for people -to poke at. This contains my complete rewrite of tar, which now weighs in at -5k (7k with all options turned on) and works for reading and writing -tarballs (which it does correctly for everything I have been able to throw -at it). Tar also (optionally) supports the "--exclude" option (mainly because -the Linux Router Project folks asked for it). This also has a pre-release -of the micro shell I have been writing. This pre-release should be stable -enough for production use -- it just isn't a release since I have some structural -changes I still want to make. -

    -The pre-release can be found here. -Please let me know ASAP if you find any bugs. - -

  • 28 March 2000 -- Andersen Baby Boy release -
    -I am pleased to announce that on Tuesday March 28th at 5:48pm, weighing in at 7 -lbs. 12 oz, Micah Erik Andersen was born at LDS Hospital here in Salt Lake City. -He was born in the emergency room less then 5 minutes after we arrived -- and -it was such a relief that we even made it to the hospital at all. Despite the -fact that I was driving at an amazingly unlawful speed and honking at everybody -and thinking decidedly unkind thoughts about the people in our way, my wife -(inconsiderate of my feelings and complete lack of medical training) was lying -down in the back seat saying things like "I think I need to start pushing now" -(which she then proceeded to do despite my best encouraging statements to the -contrary). -

    -Anyway, I'm glad to note that despite the much-faster-than-we-were-expecting -labor, both Shaunalei and our new baby boy are doing wonderfully. -

    -So now that I am done with my excuse for the slow release cycle... -Progress on the next release of BusyBox has been slow but steady. I expect -to have a release sometime during the first week of April. This release will -include a number of important changes, including the addition of a shell, a -re-write of tar (to accommodate the Linux Router Project), and syslogd can now -accept multiple concurrent connections, fixing lots of unexpected blocking -problems. - - -

  • 11 February 2000 -- BusyBox 0.42 released -
    - - This is the most solid BusyBox release so far. Many, many - bugs have been fixed. See the - changelog for details. - - Of particular interest, init will now cleanly unmount - filesystems on reboot, cp and mv have been rewritten and - behave much better, and mount and umount no longer leak - loop devices. Many thanks go out to Randolph Chung, - Karl M. Hegbloom, Taketoshi Sano, and Pavel Roskin for - their hard work on this release of BusyBox. Please pound - on it and let me know if you find any bugs. - -

  • 19 January 2000 -- BusyBox 0.41 released -
    - - This release includes bugfixes to cp, mv, logger, true, false, - mkdir, syslogd, and init. New apps include wc, hostid, - logname, tty, whoami, and yes. New features include loop device - support in mount and umount, and better TERM handling by init. - The changelog can be found here. - -

  • 7 January 2000 -- BusyBox 0.40 released -
    - - This release includes bugfixes to init (now includes inittab support), - syslogd, head, logger, du, grep, cp, mv, sed, dmesg, ls, kill, gunzip, and mknod. - New apps include sort, uniq, lsmod, rmmod, fbset, and loadacm. - In particular, this release fixes an important bug in tar which - in some cases produced serious security problems. - As always, the changelog can be found here. - -

  • 11 December 1999 -- BusyBox Website -
    - I have received permission from Bruce Perens (the original author of BusyBox) - to set up this site as the new primary website for BusyBox. This website - will always contain pointers to the latest and greatest, and will also - contain the latest documentation on how to use BusyBox, what it can do, - what arguments its apps support, etc. - -

  • 10 December 1999 -- BusyBox 0.39 released -
    - This release includes fixes to init, reboot, halt, kill, and ls, and contains - the new apps ping, hostname, mkfifo, free, tail, du, tee, and head. A full - changelog can be found here. -

  • 5 December 1999 -- BusyBox 0.38 released -
    - This release includes fixes to tar, cat, ls, dd, rm, umount, find, df, - and make install, and includes new apps syslogd/klogd and logger. - - -
- - - - diff --git a/docs/busybox.net/products.html b/docs/busybox.net/products.html deleted file mode 100644 index 7bb07f71d..000000000 --- a/docs/busybox.net/products.html +++ /dev/null @@ -1,165 +0,0 @@ - - - -

Products/Projects Using BusyBox

- -Do you use BusyBox? I'd love to know about it and -I'd be happy to link to you. - -

-I know of the following projects that use BusyBox -- -listed in the order I happen to add them to the web page: - -

- -

-And here are products that use BusyBox -- - -

- - diff --git a/docs/busybox.net/screenshot.html b/docs/busybox.net/screenshot.html deleted file mode 100644 index c5ef18bc7..000000000 --- a/docs/busybox.net/screenshot.html +++ /dev/null @@ -1,75 +0,0 @@ - - - - - -

Busybox Screenshot!

- - -Everybody loves to look at screenshots, so here is a live action screenshot of BusyBox. - -
-
-$ busybox
-BusyBox v1.10.1 (2008-04-24 11:30:07 CEST) multi-call binary
-Copyright (C) 1998-2007 Erik Andersen, Rob Landley, Denys Vlasenko
-and others. Licensed under GPLv2.
-See source distribution for full notice.
-
-Usage: busybox [function] [arguments]...
-   or: function [arguments]...
-
-	BusyBox is a multi-call binary that combines many common Unix
-	utilities into a single executable.  Most people will create a
-	link to busybox for each function they wish to use and BusyBox
-	will act like whatever it was invoked as!
-
-Currently defined functions:
-	[, [[, addgroup, adduser, adjtimex, ar, arp, arping, ash,
-	awk, basename, bbconfig, brctl, bunzip2, bzcat, bzip2,
-	cal, cat, catv, chat, chattr, chcon, chgrp, chmod, chown,
-	chpasswd, chpst, chroot, chrt, chvt, cksum, clear, cmp,
-	comm, cp, cpio, crond, crontab, cryptpw, cttyhack, cut,
-	date, dc, dd, deallocvt, delgroup, deluser, devfsd, df,
-	dhcprelay, diff, dirname, dmesg, dnsd, dos2unix, dpkg,
-	dpkg-deb, du, dumpkmap, dumpleases, echo, ed, egrep, eject,
-	env, envdir, envuidgid, ether-wake, expand, expr, fakeidentd,
-	false, fbset, fdflush, fdformat, fdisk, fetchmail, fgrep,
-	find, findfs, fold, free, freeramdisk, fsck, fsck.minix,
-	ftpget, ftpput, fuser, getenforce, getopt, getsebool,
-	getty, grep, gunzip, gzip, halt, hd, hdparm, head, hexdump,
-	hostid, hostname, httpd, hush, hwclock, id, ifconfig,
-	ifdown, ifenslave, ifup, inetd, init, insmod, install,
-	ip, ipaddr, ipcalc, ipcrm, ipcs, iplink, iproute, iprule,
-	iptunnel, kbd_mode, kill, killall, killall5, klogd, lash,
-	last, length, less, linux32, linux64, linuxrc, ln, load_policy,
-	loadfont, loadkmap, logger, login, logname, logread, losetup,
-	lpd, lpq, lpr, ls, lsattr, lsmod, lzmacat, makedevs, matchpathcon,
-	md5sum, mdev, mesg, microcom, mkdir, mkfifo, mkfs.minix,
-	mknod, mkswap, mktemp, modprobe, more, mount, mountpoint,
-	msh, mt, mv, nameif, nc, netstat, nice, nmeter, nohup,
-	nslookup, od, openvt, passwd, patch, pgrep, pidof, ping,
-	ping6, pipe_progress, pivot_root, pkill, poweroff, printenv,
-	printf, ps, pscan, pwd, raidautorun, rdate, readahead,
-	readlink, readprofile, realpath, reboot, renice, reset,
-	resize, restorecon, rm, rmdir, rmmod, route, rpm, rpm2cpio,
-	rtcwake, run-parts, runcon, runlevel, runsv, runsvdir,
-	rx, script, sed, selinuxenabled, sendmail, seq, sestatus,
-	setarch, setconsole, setenforce, setfiles, setkeycodes,
-	setlogcons, setsebool, setsid, setuidgid, sha1sum, slattach,
-	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, tcpsvd, tee, telnet, telnetd, test, tftp,
-	tftpd, time, top, touch, tr, traceroute, true, tty, ttysize,
-	udhcpc, udhcpd, udpsvd, umount, uname, uncompress, unexpand,
-	uniq, unix2dos, unlzma, unzip, uptime, usleep, uudecode,
-	uuencode, vconfig, vi, vlock, watch, watchdog, wc, wget,
-	which, who, whoami, xargs, yes, zcat, zcip
-
-$ _
-
-
- - diff --git a/docs/busybox.net/shame.html b/docs/busybox.net/shame.html deleted file mode 100644 index d9da44b69..000000000 --- a/docs/busybox.net/shame.html +++ /dev/null @@ -1,82 +0,0 @@ - - - -

Hall of Shame!!!

- -

This page is no longer updated, these days we forward this sort of -thing to the Software Freedom Law -Center instead.

- -

The following products and/or projects appear to use BusyBox, but do not -appear to release source code as required by the BusyBox license. This is a violation of the law! -The distributors of these products are invited to contact Erik Andersen if they have any confusion -as to what is needed to bring their products into compliance, or if they have -already brought their product into compliance and wish to be removed from the -Hall of Shame. - -

- -Here are the details of exactly how to comply -with the BusyBox license, so there should be no question as to -exactly what is expected. -Complying with the Busybox license is easy and completely free, so the -companies listed below should be ashamed of themselves. Furthermore, each -product listed here is subject to being legally ordered to cease and desist -distribution for violation of copyright law, and the distributor of each -product is subject to being sued for statutory copyright infringement damages -of up to $150,000 per work plus legal fees. Nobody wants to be sued, and Erik certainly would prefer to spend -his time doing better things than sue people. But he will sue if forced to -do so to maintain compliance. - -

- -Do everyone a favor and don't break the law -- if you use busybox, comply with -the busybox license by releasing the source code with your product. - -

- -

- - - - diff --git a/docs/busybox.net/sponsors.html b/docs/busybox.net/sponsors.html deleted file mode 100644 index e52adfc8e..000000000 --- a/docs/busybox.net/sponsors.html +++ /dev/null @@ -1,56 +0,0 @@ - - -

Sponsors

- -

Please visit our sponsors and thank them for their support! They have -provided money for equipment and bandwidth. Next time you need help with a -project, consider these fine companies!

- - - - -

If you wish to be a sponsor, or if you have already contributed and would -like your name added here, email Denys.

- - diff --git a/docs/busybox.net/subversion.html b/docs/busybox.net/subversion.html deleted file mode 100644 index 2c4517a35..000000000 --- a/docs/busybox.net/subversion.html +++ /dev/null @@ -1,51 +0,0 @@ - - -

Accessing Source

- - - -

Patches

- -

You can download fixes for particular releases -of busybox, e.g. downloads/fixes-major-minor-patch/ - -

Anonymous Subversion Access

- -We allow anonymous (read-only) Subversion (svn) access to everyone. To -grab a copy of the latest version of BusyBox using anonymous svn access: - -
-svn co svn://busybox.net/trunk/busybox
- -

-The stable branches can be obtained with -

-svn co svn://busybox.net/branches/busybox_1_NN_stable
-
- -

- -If you are not already familiar with using Subversion, I recommend you visit the Subversion website. You might -also want to read online or buy a copy of the Subversion Book. If you are -already comfortable with using CVS, you may want to skip ahead to the Subversion for CVS Users -part of the Subversion Book. - -

- -Once you've checked out a copy of the source tree, you can update your source -tree at any time so it is in sync with the latest and greatest by entering your -BusyBox directory and running the command: - -

-svn update
- -Because you've only been granted anonymous access to the tree, you won't be -able to commit any changes. Changes can be submitted for inclusion by posting -them to the BusyBox mailing list. For those that are actively contributing -Subversion commit access can be made available. - - - diff --git a/docs/busybox.net/svnindex.css b/docs/busybox.net/svnindex.css deleted file mode 100644 index b1ca24a05..000000000 --- a/docs/busybox.net/svnindex.css +++ /dev/null @@ -1,92 +0,0 @@ -/* A sample style sheet for displaying the Subversion directory listing - that is generated by mod_dav_svn and "svnindex.xsl". */ - -body{ - margin: 0; - padding: 0; -} - -a { - color: navy; -} - -.header { - padding-top: 5px; - text-align: center; -} - -.footer { - margin-top: 8em; - padding: 0.5em 1em 0.5em; - border: 1px solid; - border-width: 1px 0; - clear: both; - border-color: rgb(30%,30%,50%) navy rgb(75%,80%,85%) navy; - background: rgb(88%,90%,92%); - font-size: 80%; -} - -.svn { - margin: 3em; -} - -.rev { - margin-right: 3px; - padding-left: 3px; - text-align: left; - font-size: 120%; -} - -.dir a { - text-decoration: none; - color: black; -} - -.file a { - text-decoration: none; - color: black; -} - -.path { - margin: 3px; - padding: 3px; - background: #FFCC66; - font-size: 120%; -} - -.updir { - margin: 3px; - padding: 3px; - margin-left: 3em; - background: #FFEEAA; -} - -.file { - margin: 3px; - padding: 3px; - margin-left: 3em; - background: rgb(95%,95%,95%); -} - -.file:hover { - margin: 3px; - padding: 3px; - margin-left: 3em; - background: rgb(100%,100%,90%); -/* border: 1px black solid; */ -} - -.dir { - margin: 3px; - padding: 3px; - margin-left: 3em; - background: rgb(90%,90%,90%); -} - -.dir:hover { - margin: 3px; - padding: 3px; - margin-left: 3em; - background: rgb(100%,100%,80%); -/* border: 1px black solid; */ -} diff --git a/docs/busybox.net/svnindex.xsl b/docs/busybox.net/svnindex.xsl deleted file mode 100644 index 2d3297c4c..000000000 --- a/docs/busybox.net/svnindex.xsl +++ /dev/null @@ -1,108 +0,0 @@ - - - - - - - - - - - - - - <xsl:if test="string-length(index/@name) != 0"> - <xsl:value-of select="index/@name"/> - <xsl:text>: </xsl:text> - </xsl:if> - <xsl:value-of select="index/@path"/> - - - - -
- BUSYBOX -
-
- -
-
- -
- - - -
- - -
- - - - - - - - - - - - Revision - - -
-
- -
- - - -
- - -
- [ - - .. - Parent Directory - - ] -
-
- - -
- - - - - - / - -
-
- - -
- - - - - - -
-
- -
diff --git a/docs/busybox.net/tinyutils.html b/docs/busybox.net/tinyutils.html deleted file mode 100644 index 18313460c..000000000 --- a/docs/busybox.net/tinyutils.html +++ /dev/null @@ -1,86 +0,0 @@ - - - -

External Tiny Utilities

- -This is a list of tiny utilities whose functionality is not provided by -busybox. If you have additional suggestions, please send an e-mail to our -dev mailing list. - -

- -
-
- - - - -
BUSYBOX
-
- - BusyBox
-
- About - - Documentation - - Get BusyBox - - Development - -

Links -

-

Developer Pages -

-
- diff --git a/docs/busybox.net/images/back.png b/docs/busybox.net/images/back.png deleted file mode 100644 index 79923869bf32cfee14ad6a1d8abaee3e9f231cab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 322 zcmeAS@N?(olHy`uVBq!ia0vp^B0wz0!VDyh@)w!{DWL$L5Z5#RL15<0nQ3Wh#>U1# z;af%-tU!vfB*-tA!Qt7BG$2Q;#5JNMI6tkVJh3R1Aw4tAs30$0!AQ?U&%if8O$n$X z45Y$2KQ}iuuY@5aBePf`v8Y4=NM+_Jlw_nT6qF|AWF{-5LrY6jpBG<_0Bwl!ba4!+n3HjE z56cCG6n=Xv2X~DkJ%zLXR^K>M;kal0W7Rn)%w^Z`N`!n{>X2Ea;q~=r!R9*>w_je> zKYM2N$we!&X130ZtPorq%zyI!&fmNCsg_AjjnA7eB(KAlGItix76wmOKbLh*2~7ZK CHF7rq diff --git a/docs/busybox.net/images/busybox.jpeg b/docs/busybox.net/images/busybox.jpeg deleted file mode 100644 index 37edc9614648070b96a748a08368c168eb5195f5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9023 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 diff --git a/docs/busybox.net/images/busybox.png b/docs/busybox.net/images/busybox.png deleted file mode 100644 index b1eb92f3811c3fc8a029248bf95f61ad8a53d67c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 34014 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
- - - - - - - - - - - - - - - - - - -
FeatureUtilities
SSHDropbear has both an ssh server and an ssh client that together come in around 100k. It has no external -dependencies (I.E. it does not depend on OpenSSL, using a built-in copy of -LibTomCrypt instead). It's actively maintained, with a quiet but responsive -mailing list.
SMTPssmtp is an extremely simple Mail Transfer Agent.
ntpntpclient is a -tiny ntp client. BusyBox has rdate to set the date from a remote server, but -if you want a daemon to repeatedly adjust the clock over time, try that.
- -

In a gui environment, you'll probably want a web browser. -Konqueror Embedded requires QT -(or QT Embedded), but not KDE. The Dillo -requires GTK+, but not Gnome. Or you can try the graphical -version of links.

- -

SCRIPTING LANGUAGES

-

Although busybox has built-in support for shell scripts, plenty of other -small scripting languages are available on the net. A few examples:

- - - - - - - - - - - - - - - - - - - - - - - - -
languagedescription
microperl A small standalone perl interpreter that can be built from the perl source -s via "make -f Makefile.micro". If you really feel the need for perl on an embe -dded system, this is where to start. -
LuaIf you just want a small embedded scripting language to write new -code in, this Brazilian import is lightweight, fairly popular, and has -a complete book about it online.
rcThe PLAN9 shell. Not compatible with conventional bourne shell syntax, -but fairly lightweight and small.
forthA well known language for fast and small programs, decades old but still -in use for everything from OpenBIOS to computer controlled engine timing.
- -

For more information, you probably want to look at -buildroot and -TinyGentoo, which -build and use tiny utilities for all sorts of things.

- - - -- 2.25.1