RFC: policy supplement for library packages
Hi Folks!
The late discussion here on migration to libc6 indicates that a
statement on the requirements of library run time and development
packages is to be included in the policy manual. This is how I recall
the discussion we had about this topic some weeks ago. It might be
that I am a little biased, so feel free to correct me if you recall it
differently. Neither is this meant to be a fixed thing but we
definitely _need_ something so I started writing.
As I am taking over libc5 and libc6 from David Engel I will be heavily
involved in this anyway.
Helmut
-=-=-=-=-=-=-=-=-=-=-= SNIP -=-=-=-=-=-=-=-=-=-=-=-=-=-
Debian library policy supplement draft for libc5->libc6 migration
This document is meant to tell what a Debian package providing a
library should do to support both libc6 (glibc2) and libc5.
Note that these requirements are for Debian 2.0 (codename hamm).
Contents
1. Run time packages
2. Development packages
3. Requirements on libraries for Debian 2.0
4. Requirements on compiler packages
1. Run time packages
A package providing a shared library has to support both C library
packages, libc5 and libc6 based libraries. This must be done using
two Debian packages, each depending on the correct C library
package.
The package naming convention currently suggests to name these
packages as follows. Some packages (mostly from base) may use
locations in /lib.
based on | package name | library location
--------------------------------------------
libc6 | libfoo | /usr/lib/libfoo.so.<ver>
libc5 | libfoo-libc5 | /usr/lib/libc5-compat/libfoo.so.<ver>
If a library runtime package contains files that are needed by
both versions of the library, a new package should be made for
just these files that both other packages depend on.
There are two exceptions from this rule. The shared linker
ld-linux.so.1 and the C library files libc.so.5 and libm.so.5
should still be located in /lib, not in /lib/libc5-compat.
Packages based on X have to use /usr/X11R6 as prefix, not /usr.
2. Development packages
The Debian policy requires that all files needed for compiling/linking
other packages with the library are in a separate package, the
development package. Up to now this package simply was called
libfoo-dev. As packages based on libc5 and libc6 usually cannot
use the same development files there has to be a clear statement
how to separate these. So for now the following packages are
required:
based on | package name | hierarchy locations
---------------------------------------------------------------
libc6 | libfoo-dev | /usr/{lib,include}
libc5 | libfoo-libc5-altdev | /usr/i486-linuxlibc1/{lib,include}
For the transition time there may be packages based on libc5 which
use the standard location. These have to conflict with libc6-dev,
however.
libc5 | libfoo-libc5-dev | /usr/{lib,include}
No such packages may be part of Debian 2.0.
Note that the choice to base Debian 2.0 on libc6 fixed the fact
that the main locations will be used for libc6 packages. The
alternate locations are used for libc5 based packages.
This decision does not necessarily mean that by default the
compiler uses the libc6 packages, please read section 4 for more
information. Using a four-way approach for library locations
(standard and alternate locations for libc6 and libc5 based
packages) will make Debian systems inconsistent with each other,
something we should avoid at (nearly) all costs.
3. Requirements on libraries for Debian 2.0
<this needs work still, here some keywords> make libraries
thread-safe,
There will be a list available that lists all libraries part of
Debian and their current status regarding compliance with these
standard requirements. This list will be posted regularly to
debian-devel by Helmut Geyer <Helmut.Geyer@iwr.uni-heidelberg.de>.
4. Requirements on compiler packages
The compiler and binutil packages have to provide working
development environments for both C libraries. Basically (that is
from the compiler standpoint) there is no real difference between
the two environments, only some paths and automatic definitions
have to be changed. All this can be done (and is in fact done) by
supplying a different specs file in a different location.
The compiler package has to supply a way to make one of the two
environments the default one.
Two ways this can be done are:
- using /usr/i486-linuxlibc1/bin for the libc5 based gcc. Just by
prepending this to the path this can be made the default.
This is the standard way such things are handled for
cross-compilers but has the disadvantage that each user has to
do this in order to make this change. As this has better
flexibility this may be considered a feature, however.
- use an update-alternatives scheme to make one the default. This
could be done by the system administrator once and no user would
have to make changes to his environment.
This does, however, not allow a single user to change the
system-wide default easily for himself.
<remark>
As this is a disadvantage of the update-alternatives scheme
that should be fixed anyway, I do not consider this to be a
major problem.
This could be changed by adding support for a private alternative
directory to update-alternatives if not called by root -- I know
it is already possible when using --altdir and link names the
user has permission to modify but it is a little hard to use for a
non-initiate. By making update-alternatives automagically change
the default links to links in $HOME/bin and $HOME/man and using
a directory $HOME/.alternatives as altdir would make it much
easier to use.
Having this, the second scheme is much better IMO.
</remark>
Currently gcc uses none of these schemes.
--
Helmut Geyer Helmut.Geyer@iwr.uni-heidelberg.de
public PGP key available : finger geyer@saturn.iwr.uni-heidelberg.de
--
TO UNSUBSCRIBE FROM THIS MAILING LIST: e-mail the word "unsubscribe" to
debian-devel-request@lists.debian.org .
Trouble? e-mail to templin@bucknell.edu .
Reply to: