OSDN Git Service

Update licensing discussion
[uclinux-h8/uClibc.git] / docs / uclibc.org / FAQ.html
1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd"> 
2
3 <HTML>
4 <HEAD>
5     <TITLE>uClibc FAQ-- a C library for embedded systems</TITLE>
6 </HEAD>
7
8 <body text="#000000" alink="#660000" link="#660000" bgcolor="#dee2de" vlink="#660000">
9
10 <basefont face="lucida, helvetica, arial" size="3">
11
12
13 <CENTER>
14 <p>
15
16 <TABLE BORDER=0 CELLSPACING=1 CELLPADDING=2>
17     <TR>
18         <td bgcolor="#000000">
19           <FONT FACE="lucida, helvetica" COLOR="#ccccc0">
20               <B>µ&nbsp;C&nbsp;l&nbsp;i&nbsp;b&nbsp;c</B>
21           </FONT>
22         </TD>
23     </TR>
24 </TABLE>
25 <p>
26
27
28 <!-- Begin NOT Working List -->
29
30
31 <TABLE WIDTH=95% CELLSPACING=1 CELLPADDING=4 BORDER=1>
32 <TR><TD BGCOLOR="#ccccc0" ALIGN=center>
33     <A NAME="notworking"> <BIG><B>
34                 uClibc Frequently Asked Questions (FAQ)
35     </font>
36     </A></B></BIG>
37 </TD></TR>
38 <TR><TD BGCOLOR="#eeeee0">
39
40 <p> 
41 This is a collection of some of the frequently asked questions
42 about uClibc.  Some of the questions even have answers. If you
43 have additions to this FAQ document, we would love to add them,
44 <br>
45 When you are done, <a href="http://uclibc.org/">you can click here to return 
46 to the uClibc home page.</a>
47
48 <p>
49 <TR><TD BGCOLOR="#ccccc0" ALIGN=left>
50     <B>
51     What platforms does uClibc run on?
52     </B>
53 </TD></TR>
54 <TR><TD BGCOLOR="#eeeee0">
55
56     Currently uClibc runs on alpha, ARM, i386, i960, h8300, m68k, mips/mipsel,
57     PowerPC, SH, SPARC, and v850 processors.
58     
59
60 <p>
61 <TR><TD BGCOLOR="#ccccc0" ALIGN=left>
62     <B>
63     Why is it called uClibc?
64     </B>
65 </TD></TR>
66 <TR><TD BGCOLOR="#eeeee0">
67
68     The letter 'u' is short for µ (the greek letter "mu").  µ is commonly used
69     as the abbreviation for the word "micro".  The capital "C" is short for
70     "controller".  So the name uClibc is sortof an abbreviation for "the
71     microcontroller C library".  For simplicity, uClibc is pronounced
72     "yew-see-lib-see".  
73     <p>
74     The name is partly historical, since uClibc was originally
75     created to support <a href="http://www.uclinux.org">µClinux</a>, a port of
76     Linux for MMU-less microcontrollers such as the Dragonball, Coldfire, and
77     ARM7TDMI.  These days, uClibc also works just fine on normal Linux systems
78     (such as i386, ARM, and PowerPC), but we couldn't think of a better name.
79
80 <p>
81 <TR><TD BGCOLOR="#ccccc0" ALIGN=left>
82     <B>
83     Why are you doing this?  What's wrong with glibc?
84     </B>
85 </TD></TR>
86 <TR><TD BGCOLOR="#eeeee0">
87
88     Initially, the project began since the GNU C library lacks support for
89     MMU-less systems, and because glibc is very large.  The GNU C library is
90     designed with a very different set of goals then uClibc.  The GNU C library
91     is a great piece of software, make no mistake.  It is compliant with just
92     about every standard ever created, and runs on just about every operating
93     system and architecture -- no small task!  But there is a price to be paid
94     for that.  It is quite a large library, and keeps getting larger with each
95     release.  It does not even pretend to target embedded systems.  To quote
96     from Ulrich Drepper, the maintainer of GNU libc: "...glibc is not the right
97     thing for [an embedded OS]. It is designed as a native library (as opposed
98     to embedded).  Many functions (e.g., printf) contain functionality which is
99     not wanted in embedded systems." 24 May 1999
100
101
102
103 <p>
104 <TR><TD BGCOLOR="#ccccc0" ALIGN=left>
105     <B>
106     So uClibc is smaller then glibc?  Doesn't that mean it completely sucks?
107     How could it be smaller and not suck?
108     </B>
109 </TD></TR>
110 <TR><TD BGCOLOR="#eeeee0">
111
112     uClibc has been designed from the ground up to be a C library for
113     embedded Linux.  We don't need to worry about things like MS-DOS
114     support, or BeOS, or AmigaOs any other system.  This lets us cut out
115     a lot of complexity and very carefully optimize for Linux.  By very
116     careful design, we can also take a few shortcuts.  For example, glibc
117     contains an implementation of the wordexp() function, in compliance
118     with the Single Unix Specification, version 3.  Well, standards are
119     important.  But so is pragmatism.  The wordexp function is huge, yet I
120     am not aware of even one Linux application that uses it!  So uClibc
121     doesn't provide wordexp().  There are many similar examples.  In other
122     cases, uClibc leaves certain features (such as full C99 Math library
123     support, IPV6, and RPC support) disabled by default.  Those features
124     can be enabled for people that need them, but are otherwise disabled to
125     save space.
126
127     <p>
128
129     Glibc is a general purpose C library, and so as policy things are optimized
130     for speed.  Most of uClibc's routines have been very carefully written to
131     optimize them for size instead.
132
133     <p>
134
135     The end result is a C library that will compile just about everything you
136     throw at it, that looks like glibc to application programs when you
137     compile, but is many times smaller.
138
139     
140
141 <p>
142 <TR><TD BGCOLOR="#ccccc0" ALIGN=left>
143     <B>
144     Why should I use uClibc?
145     </B>
146 </TD></TR>
147 <TR><TD BGCOLOR="#eeeee0">
148
149     I don't know if you should use uClibc or not.  It depends on your needs.
150     If you are building an embedded Linux system and you are tight on space, then
151     using uClibc instead if glibc may be a very good idea.
152
153     If you are trying to build a huge fileserver for your company that will
154     have 12 Terabytes of storage, then using glibc may make more sense.  
155     Unless, for example, that 12 Terabytes will be Network Attached Storage 
156     and you plan to burn Linux into the system's firmware...
157
158
159
160 <p>
161 <TR><TD BGCOLOR="#ccccc0" ALIGN=left>
162     <B>
163     If I use uClibc, do I have to release all my source code to the world for
164     free?  I want to create a closed source commercial application and I want
165     to protect my intellectual property.  
166     </B>
167 </TD></TR>
168 <TR><TD BGCOLOR="#eeeee0">
169
170     No, you do not need to give away your application source code just because
171     you use uClibc and/or run on Linux.  uClibc is licensed under the <a
172     href="http://www.gnu.org/copyleft/lesser.html">Lesser GPL</a> licence, just
173     like the GNU C library (glibc).  Please read this licence, or have a lawyer
174     read this licence if you have any questions.  Here is my brief summary...
175     Using shared libraries makes complying with the license easy.  You can
176     distribute a closed source application which is linked with an unmodified
177     uClibc shared library.  In this case, you do not need to give away any
178     source code for your application or for the uClibc library.  Please
179     consider sharing some of the money you make with us!  :-)
180     <p>
181
182     If you make any changes to uClibc, and distribute uClibc or distribute any
183     applications using your modified version, you must also distribute the
184     source code for uClibc containing all of your changes.
185     <p>
186
187     If you distribute an application which has uClibc statically linked, you
188     must also make your application available as an object file which can later
189     be re-linked against updated versions of uClibc.  This will (in theory)
190     allow your customers to apply uClibc bug fixes to your application.  You do
191     not need to make the application object file available to everyone, just to
192     those you gave the fully linked application.
193
194
195 <p>
196 <TR><TD BGCOLOR="#ccccc0" ALIGN=left>
197     <B>
198     Can I use it on my desktop i386 system?
199     </B>
200 </TD></TR>
201 <TR><TD BGCOLOR="#eeeee0">
202
203     Sure!  In fact, this can be very nice during development.  By
204     installing uClibc on your development system, you can be sure that
205     the code you are working on will actually run when you deploy it
206     your target system.
207
208
209
210 <p>
211 <TR><TD BGCOLOR="#ccccc0" ALIGN=left>
212     <B>
213     Does uClibc support shared libraries?
214     </B>
215 </TD></TR>
216 <TR><TD BGCOLOR="#eeeee0">
217     
218     Yes.  uClibc has native shared library support on i386, ARM, mips/mipsel, 
219     SH, CRIS, and PowerPC processors.  Other architectures can use shared libraries
220     but will need to use the GNU libc shared library loader.
221     <p>
222     Shared Libraries are not currently supported by uClibc on MMU-less systems.  
223     <a href="http://www.snapgear.com/">SnapGear</a> has implemented
224     shared library support for MMU-less systems, however, so if you need MMU-less 
225     shared library support they may be able to help.
226
227
228 <p>
229 <TR><TD BGCOLOR="#ccccc0" ALIGN=left>
230     <B>
231     How do I compile programs with uClibc?
232     </B>
233 </TD></TR>
234 <TR><TD BGCOLOR="#eeeee0">
235
236     The easiest way is to use the compiler wrapper built by uClibc.  Instead of
237     using your usual compiler or cross compiler, you can use i386-uclibc-gcc,
238     (or whatever is appropriate for your target architecture) and your
239     applications will auto-magically link against uClibc.  You can also 
240     build your own native uClibc toolchain.  Just download the uClibc toolchain
241     builder from 
242     <a href="/cgi-bin/cvsweb/toolchain/">uClibc toolchain builder</a>,
243     or the uClibc buildroot system from
244     <a href="/cgi-bin/cvsweb/buildroot/">uClibc buildroot system</a>,
245     adjust the Makefile settings to match your target system, and then run 'make'.
246     <p>
247     If you want to be <em>really</em> lazy and start using uClibc right
248     away without needing to compile your own toolchain or anything, you can
249     grab a copy of the uClibc development systems, currently available for
250     <a href="http://www.uclibc.org/downloads/root_fs-i386.bz2">i386</a>,
251     <a href="http://www.uclibc.org/downloads/root_fs-powerpc.bz2">powerpc</a>,
252     and
253     <a href="http://www.uclibc.org/downloads/root_fs-arm.bz2">arm</a>.
254     These are pre-built uClibc only development systems (created using 
255     <a href="/cgi-bin/cvsweb/buildroot/">buildroot</a>), and provide a 
256     really really easy way to get started.  These are about 20 MB bzip2 
257     compressed ext2 filesystems containing all the development software you 
258     need to build your own uClibc applications.  With bash, awk, make, gcc, g++,
259     autoconf, automake, ncurses, zlib, openssl, openssh, gdb, strace, busybox, 
260     GNU coreutils, GNU tar, GNU grep, etc, these should have pretty much everything
261     you need to get started building your own applications linked against
262     uClibc.  You can boot into them, loop mount them, dd them to a spare drive
263     and use resize2fs to make them fill a partition...  Whatever works best
264     for you.
265
266 <p>
267 <TR><TD BGCOLOR="#ccccc0" ALIGN=left>
268     <B>
269     Why do I keep getting "sh: can't access tty; job control turned off" errors?
270     Why doesn't Control-C work within my shell?
271     </B>
272 </TD></TR>
273 <TR><TD BGCOLOR="#eeeee0">
274
275     This isn't really a uClibc question, but I'll answer it here anyways.  Job
276     control will be turned off since your shell can not obtain a controlling
277     terminal.  This typically happens when you run your shell on /dev/console.
278     The kernel will not provide a controlling terminal on the /dev/console
279     device.  Your should run your shell on a normal tty such as tty1 or ttyS0
280     and everything will work perfectly.  If you <em>REALLY</em> want your shell
281     to run on /dev/console, then you can hack your kernel (if you are into that
282     sortof thing) by changing drivers/char/tty_io.c to change the lines where
283     it sets "noctty = 1;" to instead set it to "0".  I recommend you instead
284     run your shell on a real console...
285
286
287 <p>
288 <TR><TD BGCOLOR="#ccccc0" ALIGN=left>
289     <B>
290     How do I make autoconf and automake behave?
291     </B>
292 </TD></TR>
293 <TR><TD BGCOLOR="#eeeee0">
294
295     First run
296     <pre>export PATH=/usr/i386-linux-uclibc/bin:$PATH</pre>
297     (or similar adjusted for your target architecture) then run you can simply
298     run autoconf/automake and it should _just work_.  Unfortunately, a large
299     number of configure scripts (such as the one from openssh) try to execute
300     test applications using your target C library, even if you are cross-
301     compiling.  This is bad, since it will prevent these programs from compiling.
302     You need to complain to the authors of these programs and ask them to fix
303     their broken configure scripts.
304
305
306
307
308 <p>
309 <TR><TD BGCOLOR="#ccccc0" ALIGN=left>
310     <B>
311     When I run 'ldd' to get a list of the library dependencies for a uClibc
312     binary, ldd segfaults!  What should I do?
313     </B>
314 </TD></TR>
315 <TR><TD BGCOLOR="#eeeee0">
316
317     Use the ldd that is built by uClibc, not your system's one.  When your
318     system's ldd looks for library dependencies, it actually _runs_ that
319     program.  This works fine -- usually.  It generally will not work at all 
320     when you have been cross compiling (which is why ldd segfaults).  The ldd
321     program created by uClibc is cross platform and doesn't even try to run
322     the target program (like your system one does).  So use the uClibc one
323     and it will do the right thing, and it won't segfault even when you are
324     cross compiling.
325
326
327 <p>
328 <TR><TD BGCOLOR="#ccccc0" ALIGN=left>
329     <B>
330     Why does localtime() return times in UTC even when I have my timezone set?
331     </B>
332 </TD></TR>
333 <TR><TD BGCOLOR="#eeeee0">
334
335
336     The uClibc time functions get timezone information from the TZ environment
337     variable, as described in the Single Unix Specification Version 3.  See
338      <a href="http://www.opengroup.org/onlinepubs/007904975/basedefs/xbd_chap08.html">
339     http://www.opengroup.org/onlinepubs/007904975/basedefs/xbd_chap08.html</a>
340     for details on valid settings of TZ.  For some additional examples, read
341     <a href="http://www.uclibc.org/lists/uclibc/2002-August/006261.html">
342     http://www.uclibc.org/lists/uclibc/2002-August/006261.html</a> in the uClibc
343     mailing list archive.
344     You can store the value of TZ in the file '/etc/TZ' and uClibc will then
345     automagically use the specified setting.
346
347
348 <p>
349 <TR><TD BGCOLOR="#ccccc0" ALIGN=left>
350     <B>
351     What is the history of uClibc?  Where did it come from?
352     </B>
353 </TD></TR>
354 <TR><TD BGCOLOR="#eeeee0">
355
356     The history and origin of uClibc is long and twisty.
357     In the beginning, there was <a href="http://www.gnu.org/software/libc/libc.html">GNU libc</a>.  Then, libc4
358     (which later became linux libc 5) forked from GNU libc version 1.07.4, with
359     additions from 4.4BSD, in order to support Linux.  Later, the <a
360     href="http://www.cix.co.uk/~mayday/">Linux-8086 C library</a>, which is part of
361     the <a href="http://www.elks.ecs.soton.ac.uk/">elks project</a>, was created,
362     which was, apparently, largely written from scratch but also borrowed code from
363     libc4, glibc, some Atari library code, with bits and pieces from about 20 other
364     places.  Then uClibc forked off from the Linux-8086 C library in order to run
365     on <a href="http://www.uclinux.org">µClinux</a>.
366     <p>
367
368     I had for some time been despairing over the state of C libraries in Linux.
369     GNU libc, the standard, is very poorly suited to embedded systems and
370     has been getting bigger with every release.  I spent quite a bit of time looking over the
371     available Open Source C libraries that I knew of (listed below), and none of them really
372     impressed me.  I felt there was a real vacancy in the embedded Linux ecology.
373     The closest library to what I imagined an embedded C library should be was
374     uClibc.  But it had a lot of problems too -- not the least of which was that,
375     traditionally, uClibc had a complete source tree fork in order to support each
376     and every new platform.  This resulted in a big mess of twisty versions, all
377     different.  I decided to fix it and the result is what you see here.
378     My source tree has now become the official uClibc source tree and it now lives
379     on cvs.uclinux.org and www.uclibc.org.
380
381     <p>
382
383     To start with, (with some initial help from <a
384     href="http://www.uclinux.org/developers/">D. Jeff Dionne</a>), I
385     ported it to run on i386.  I then grafted in the header files from glibc 2.1.3
386     and cleaned up the resulting breakage.  This (plus some additional work) has
387     made it almost completely independent of kernel headers, a large departure from
388     its traditional tightly-coupled-to-the-kernel origins.  I have written and/or
389     rewritten a number of things that were missing or broken, and sometimes grafted
390     in bits of code from the current glibc and libc5.  I have also built a proper
391     platform abstraction layer, so now you can simply edit the file "Config" and
392     use that to decide which architecture you will be compiling for, and whether or
393     not your target has an MMU, and FPU, etc.  I have also added a test suite,
394     which, though incomplete, is a good start.  Several people have helped by
395     contributing ports to new architectures, and a lot of work has been done on
396     adding support for missing features.
397
398     <p>
399
400     These days, uClibc is being developed and enhanced by Erik Andersen of
401     <a href="http://codepoet-consulting.com/">CodePoet Consulting</a> along
402     with the rest of the embedded Linux community.
403
404
405
406 <p>
407 <TR><TD BGCOLOR="#ccccc0" ALIGN=left>
408     <B>
409     I demand that you to add &lt;favorite feature&gt; right now!   How come 
410     you don't answer all my questions on the mailing list instantly?  I demand 
411     that you help me with all of my problems <em>Right Now</em>!
412     </B>
413 </TD></TR>
414 <TR><TD BGCOLOR="#eeeee0">
415
416     You have not paid us a single cent and yet you still have the
417     product of nearly two years of work from Erik and Manuel and
418     many other people.  We are not your slaves!  We work on uClibc
419     because we find it interesting.  If you go off flaming us, we will
420     ignore you.
421
422
423 <p>
424 <TR><TD BGCOLOR="#ccccc0" ALIGN=left>
425     <B>
426     I need you to add &lt;favorite feature&gt;!  Are the uClibc developers willing to 
427     be paid in order to fix bugs or add in &lt;favorite feature&gt;?  Are you willing to provide
428     support contracts?  
429     </B>
430 </TD></TR>
431 <TR><TD BGCOLOR="#eeeee0">
432
433     Sure!  Now you have our attention!  What you should do is contact <a
434         href="mailto:andersen@codepoet.org">Erik Andersen</a> of <a
435         href="http://codepoet-consulting.com/">CodePoet Consulting</a> to bid
436     on your project.  If Erik is too busy to personally add your feature, there
437     are several other active uClibc contributors who will almost certainly be able 
438     to help you out.  Erik can contact them and ask them about their availability.
439     
440     
441 <p>
442 <TR><TD BGCOLOR="#ccccc0" ALIGN=left>
443     <B>
444     I think you guys are great and I want to help support your work!
445     </B>
446 </TD></TR>
447 <TR><TD BGCOLOR="#eeeee0">
448
449     Wow, that would be great!  You can click here to help support uClibc and/or request features.
450     
451     <!-- Begin PayPal Logo -->
452     <center>
453     <form action="https://www.paypal.com/cgi-bin/webscr" method="post">
454         <input type="hidden" name="cmd" value="_xclick">
455         <input type="hidden" name="business" value="andersen@codepoet.org">
456         <input type="hidden" name="item_name" value="Support uClibc and/or request features">
457         <input type="hidden" name="image_url" value="https://codepoet-consulting.com/images/codepoet.png">
458         <input type="hidden" name="no_shipping" value="1">
459         <input type="image" src="images/donate.png" border="0" name="submit" alt="Make donation using PayPal">
460     </form>
461     </center>
462     <!-- End PayPal Logo -->
463
464     If you prefer to contact us directly for payments, hardware donations, 
465     support requests, etc., you can contact 
466     <a href="http://codepoet-consulting.com/">CodePoet Consulting</a> here.
467
468 <p>
469 <TR><TD BGCOLOR="#ccccc0" ALIGN=left>
470     <B>
471         Ok, I'm done reading all these questions.
472     </B>
473 </TD></TR>
474 <TR><TD BGCOLOR="#eeeee0">
475
476 <a href="http://uclibc.org/">Well then, click here to return to the uClibc home page.</a>
477
478
479
480 <!-- End things -->
481
482 </TD></TR>
483 </TABLE>
484 </P>
485
486
487
488 <!-- Footer -->
489 <HR>
490 <TABLE WIDTH="100%">
491     <TR>
492         <TD>
493             <font size="-1" face="arial, helvetica, sans-serif">
494             Mail all comments, insults, suggestions and bribes to 
495             <a href="mailto:andersen@codepoet.org">Erik Andersen</a><BR>
496             </font>
497         </TD>
498
499         <TD>
500             <a href="http://www.vim.org"><img border=0 width=90 height=36
501             src="images/written.in.vi.png" 
502             alt="This site created with the vi editor"></a>
503         </TD>
504
505         <TD>
506             <a href="http://www.gimp.org/"><img border=0 width=90 height=36
507             src="images/gfx_by_gimp.png" alt="Graphics by GIMP"></a>
508         </TD>
509
510         <TD>
511             <a href="http://www.linuxtoday.com"><img width=90 height=36
512             src="images/ltbutton2.png" alt="Linux Today"></a>
513         </TD>
514
515         <TD>
516             <p><a href="http://slashdot.org"><img width=90 height=36
517             src="images/sdsmall.png" alt="Slashdot"></a>
518         </TD>
519
520         <TD>
521             <a href="http://freshmeat.net"><img width=90 height=36
522             src="images/fm.mini.png" alt="Freshmeat"></a>
523         </TD>
524
525     </TR>
526 </TABLE>
527
528
529 </CENTER>
530 </BODY>
531 </HTML>
532
533  
534