<!--#include file="header.html" -->


<h3>Frequently Asked Questions</h3>

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,

<ol>
<li><a href="#kernel">Which Linux kernel versions are supported?</a>
<li><a href="#arch">Which architectures does BusyBox run on?</a>
<li><a href="#libc">Which C libraries are supported?</a>
<li><a href="#commercial">Can I include BusyBox as part of the software on my device?</a>
<li><a href="#bugs">I think I found a bug in BusyBox!  What should I do?!</a>
<li><a href="#job_control">Why do I keep getting "sh: can't access tty; job control
	turned off" errors?  Why doesn't Control-C work within my shell?</a>
<li><a href="#demanding">I demand that you to add &lt;favorite feature&gt; 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 <em>Right Now</em>!</a>
<li><a href="#getting_started">How can I get started using BusyBox?</a>
<li><a href="#helpme">I need help with BusyBox!  What should I do?</a>
<li><a href="#contracts">I need you to add &lt;favorite feature&gt;!  Are the BusyBox developers willing to
	be paid in order to fix bugs or add in &lt;favorite feature&gt;?  Are you willing to provide
	support contracts?</a>
<li><a href="#support">I think you guys are great and I want to help support your work!</a>


</ol>


<hr />
<p>
<h2><a name="kernel">Which Linux kernel versions are supported?</a></h2>
<p>


    Full functionality requires Linux 2.2.x or better.  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).


<hr />
<p>
<h2><a name="arch">Which architectures does BusyBox run on?</a></h2>
<p>


    BusyBox in general will build on any architecture supported by gcc.
    Kernel module loading for 2.2 and 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.


<hr />
<p>
<h2><a name="libc">Which C libraries are supported?</a></h2>
<p>


    uClibc and glibc are supported.  People have been looking at newlib and
    dietlibc, but they are currently considered unsupported, untested, or
    worse.  Linux-libc5 is no longer supported.  If you require a small C
    library, you should probably use uClibc.


<hr />
<p>
<h2><a name="commercial">Can I include BusyBox as part of the software on my device?</h2>

    Yes.  As long as you <a href="http://busybox.net/license.html">fully comply
    with the generous terms of the GPL BusyBox license</a> you can ship BusyBox
    as part of the software on your device.

    <a href="#support">Please consider sharing some of the money you make.</a>


<hr />
<p>
<h2><a name="bugs">I think I found a bug in BusyBox!  What should I do?</h2>
<p>

    If you find a problem with BusyBox, please submit a detailed bug report to
    the BusyBox mailing list at <a href="mailto:busybox@mail.busybox.net">
    busybox@mail.busybox.net</a>.  Please do not send private email to Erik
    (the maintainer of BusyBox) 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...

    <p>

    If you find bugs, please submit a detailed bug report to the BusyBox mailing
    list at busybox@mail.busybox.net.  A well-written bug report should include a
    transcript of a shell session that demonstrates the bad behavior and enables
    anyone else to duplicate the bug on their own machine. The following is such
    an example:

<pre>
	To: busybox@mail.busybox.net
	From: diligent@testing.linux.org
	Subject: /bin/date doesn't work

	Package: BusyBox
	Version: 1.00

	When I execute BusyBox 'date' it produces unexpected results.
	With GNU date I get the following output:

		$ date
		Fri Oct  8 14:19:41 MDT 2004

	But when I use BusyBox date I get this instead:

		$ date
		illegal instruction

	I am using Debian unstable, kernel version 2.4.27 on a x86 system,
	and the latest uClibc from CVS.  Thanks for the wonderful program!

	  -Diligent
</pre>

    Note the careful description and use of examples showing not only what BusyBox
    does, but also a counter example showing what an equivalent GNU app does.  Bug
    reports lacking proper detail may never be fixed...  Thanks for understanding.

<hr />
<p>
<h2><a name="job_control">Why do I keep getting "sh: can't access tty; job control
	turned off" errors?  Why doesn't Control-C work within my shell?</a></h2>
<p>

    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 <em>REALLY</em> 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...


<hr />
<p>
<h2><a name="getting_started">How can I get started using BusyBox?</a></h2>
<p>

    An easy method to build your own basic BusyBox based system, is to
    follow these simple steps:
    <ul>
	<li> Point your web browser <a href="/cgi-bin/cvsweb/buildroot/">here</a>
	<li> Click on "Download tarball"
	<li> Unpack the tarball on your Linux system somewhere
	<li> run 'make' and configure things to taste.
	<li> run 'unset CC'.   Some Linux systems (i.e. Gentoo) set 'CC'
	    in the system environment which messes up cross compiles.
	<li> run 'make'
	<li> go have lunch, drink a pop, call a friend, play a video game, etc
		till it finishes downloading software and compiling things.
	<li> You should now have a shiny new BusyBox based system.
    </ul>


<hr />
<p>
<h2><a name="demanding">I demand that you to add &lt;favorite feature&gt; 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 <em>Right Now</em>!</a></h2>
<p>

    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.


<hr />
<p>
<h2><a name="helpme">I need help with BusyBox!  What should I do?</a></h2>
<p>

    If you find that you need help with BusyBox, you can ask for help on the
    BusyBox mailing list at busybox@mail.busybox.net.  In addition to the BusyBox
    mailing list, Erik (andersee), Manuel (mjn3) and others are known to hang out
    on the uClibc IRC channel: #uclibc on irc.freenode.net.

    <p>

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

    <p>

    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.

    <p>



<hr />
<p>
<h2><a name="contracts">I need you to add &lt;favorite feature&gt;!  Are the BusyBox
	developers willing to be paid in order to fix bugs or add in &lt;favorite feature&gt;?
	Are you willing to provide support contracts?</a></h2>
<p>

    Sure!  Now you have our attention!  What you should do is contact <a
	href="mailto:andersen@codepoet.org">Erik Andersen</a> of <a
	href="http://codepoet-consulting.com/">CodePoet Consulting</a> to bid
    on your project.  If Erik is too busy to personally add your feature, there
    are many other active BusyBox contributors who will almost certainly be able
    to help you out.  Erik can contact them privately, and may even let you to
    post your request for services on the mailing list.


<hr />
<p>
<h2><a name="support">I think you guys are great and I want to help support your work!</a></h2>
<p>

    Wow, that would be great!  Erik personally pays for all the bandwidth, and
    all servers used for busybox.net out of his own pocket.  If you would like
    to make a donation to help support BusyBox, and/or request features, you
    can click here:

    <!-- Begin PayPal Logo -->
    <center>
    <form action="https://www.paypal.com/cgi-bin/webscr" method="post">
	<input type="hidden" name="cmd" value="_xclick">
	<input type="hidden" name="business" value="andersen@codepoet.org">
	<input type="hidden" name="item_name" value="Support BusyBox">
	<input type="hidden" name="image_url" value="http://codepoet-consulting.com/images/codepoet.png">
	<input type="hidden" name="no_shipping" value="1">
	<input type="image" src="images/donate.png" name="submit" alt="Make donation using PayPal">
    </form>
    </center>
    <!-- End PayPal Logo -->

    If you prefer to contact Erik directly to make a donation, donate hardware,
    request support, etc, you can contact
    <a href="http://codepoet-consulting.com/">CodePoet Consulting</a> here.
    CodePoet Consulting can accept both Visa and MasterCard for those that do not
    trust PayPal...

<hr />

<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>

<!--#include file="footer.html" -->

