I am working on the Linux C library 6 based on the GNU C library 2.
As I expected, I have encountered many problems. I want to share
some ideas with the Linux/GNU C library developers from the viewpoint
of someone who has been maintaining a production C library for many
years now. I am open to any suggestions although I believe I am
right most of time. I have learned it the hard way :-(.

1. From the very beginning of the GNU C library development, it assumes
   that it is a replacement of an existing library. It has reflected
   in many aspects of the the GNU C library. Although it has improved
   A LOT, it still leaves many to be desired.

   a. With shared libraries and dynamic linker, it has become very
      tricky to install library binaries. We have to assume any
      existing shared libraries and dynamic linker may run forever
      until reboot which may be out of our control. Although libc.so
      installation is ok, the dynamic linker doesn't have a unique
      version number for each release. It will be a problem for binary
      releases. We may fix it by adding a minor version number for
      the dynamic linker and making a symbolic link for the major
      version number. We also need to provide a way to update the
      symbolic link for binary releases.

2. There are still many namespace pollutions in glibc. They should be
   fixed.

3. I still haven't figured out what Mcrt1.o is used for and why we
   need to install it.

For the Linux C library 6, I want the followings:

1. It should be able to be installed as a native library under Linux.
   It should be 100% compliant with the Linux filesystem standard.

2. It should be as close to 100% compatible at the source level
   with libc 5 as possible.

3. I'd also like to be able to generate consistent binary releases
   for Linux/x86 or any other architectures Linux supports. 

4. I want to add the missing ones which are in libc 5.

5. I want to get rid of <rpcsvc/rnusers.h> which doesn't exist under
   Solaris 2.5. <rpcsvc/rusers.h> in libc 5 covers both the old
   <rpcsvc/rnusers.h> and <rpcsvc/rusers.h> in Solaris 2.5. It also
   has one less bug. I want <rpcsvc/mount.x> in libc 5 which has a
   new version of mount protocol.

6. I want a different malloc as an option under Linux, which will
   be as good as the one from Doug Lea in libc 5 and also thread-safe.
   I will use the new thread safe malloc from Wolfram Gloger
   <Wolfram.Gloger@dent.med.uni-muenchen.de>. I was told Wolfram's
   would be used in glibc 2 when it was ready. I am running the
   new malloc from Wolfram now. If it is not in glibc 2.0, I will
   release the Linux C library 6.0 with it.

Before I call glibc 2 as libc 6, I will try to build a complete Linux
system from source code myself with it. I am starting with a Debian
Linux system 1.1. I moved all libraries and header files related to
libc 5 under /usr/libc5. I left /lib alone. I tried to keep the same
relative directory structure in /usr/libc5. I added

/usr/libc5/lib
/usr/libc5/X11R6/lib/Xaw3d
/usr/libc5/local/lib
/usr/libc5/X11R6/lib
/usr/libc5/X11R5/lib
/usr/libc5/lib/mesa

to /etc/ld.so.conf so that all the existing binaries run just fine.
I am still not too sure how to deal the major version numbers for
different shared libraries. I added a 'g' to the major version numbers
in XFree86 3.2. I don't know how it will work out for other packages.

Then I installed the new libc. I make sure ld-linux.so.2 and libc.so.6
are in /lib. I changed /usr/lib/libc.so to reflect it.

I first compiled gcc, binutils and bin86 with the new libc. Using
them, I am building a whole Linux system from the source code. Until
I finish most of it, I won't call it libc 6. BTW, a Pentium Pro will
help me a lot achieve it :-). I hope I can afford a Pentium Pro and
a MB soon.

Thanks.


H.J. Lu
hjl@gnu.ai.mit.edu
11/27/96
