File: versions.txt
base-0 patch-1
Line 4Line 4
exposed to programs. Version 2.2 of glibc was the last one which used
unversioned symbols. The new glibc, version 2.3, uses versioned
symbols. As a result, glibc 2.2's dynamic linker is unable to load
exposed to programs. Version 2.2 of glibc was the last one which used
unversioned symbols. The new glibc, version 2.3, uses versioned
symbols. As a result, glibc 2.2's dynamic linker is unable to load
glibc 2.3's libc and vice versa.
glibc 2.3's libc because it can't resolve the library's versioned
symbols and 2.3's linker can't load the 2.2 library because it expects
to find versioned symbols in the library. This is a specific example
of a class of problem that has come up before, which we've been
calling /version skew/.
The LNX-BBC build system as it existed in March 2003 (and is still the
case today in the STABLE branch) relied on the dynamic linker in /lib
to perform symbol resolution for all shared libraries as binaries were
built. This meant that we could not expect our build system,
gargoyle.lnx-bbc.org, to build glibc 2.3 and then successfully link
binaries against it. We created the STABLE branch at that time which
retains the older version of glibc (and also gcc, for similar
reasons). This has freed us to try out whatever changes might
eventually solve the problem in the HEAD branch.
Version skew with GNU libc is a major problem for us because we don't
use the LNX-BBC to build LNX-BBC ISOs. That is to say, the LNX-BBC
platform is not self-hosting. Most systems, such as the Debian or Red
Hat distributions, can tolerate temporary differences because the new
libc is installed before anything is compiled against it. The LNX-BBC
is built all in one pass, without installing anything.
The solution we have settled on is to cross-compile the entire
LNX-BBC, allowing us to treat the LNX-BBC ISO as an embedded system.
Our build system as it existed in March 2003 (and is still the case
today in the STABLE branch) relied on the dynamic linker in /lib to
perform symbol resolution for all shared libraries as binaries were
built. Because the LNX-BBC libc is never installed on the build
system, we cannot expect our build system, gargoyle.lnx-bbc.org, to
build glibc 2.3 and then successfully link binaries against it without
employing significant tricks. We created the STABLE branch at that
time which retains the older version of glibc (and also gcc, for
similar reasons). The tight coupling that exists between the STABLE
branch and the system that's used to build it is a problem related to
version skew which we've called /version lock/, and the build system
in the STABLE branch has that problem.

With the creation of the STABLE branch to continue producing working
nightly builds, we are free to try out whatever changes might
eventually solve the version lock problem in the HEAD branch. The
solution we have settled on is to cross-compile the entire LNX-BBC,
allowing us to properly treat the LNX-BBC ISO as an embedded system.
Using this cross-compilation scheme, we have been able to build and
Using this cross-compilation scheme, we have been able to build and
link *some* binaries against glibc 2.3 on systems using glibc 2.2.
However, many other packages use faulty mechanisms to determine
whether or not they are being cross-compiled, or simply don't support
cross-compilation, and so it will probably be a while before we can
resolve this issue.
link *most* binaries against glibc 2.3 on systems using glibc 2.2.
However, certain major components (XFree86 and Perl, among others)
have proven very resistant to cross-compilation. These packages use
faulty mechanisms to determine whether or not they are being
cross-compiled, or simply don't support cross-compilation. These few
stubborn packages are the sole reason the HEAD branch does not
currently build on any system running GNU libc 2.2. It will be some
time before these issues are fully resolved.
Until then, be aware that if you are attempting to build an LNX-BBC
ISO on a system which uses glibc 2.2.x, a cvs checkout from the HEAD
branch will *definitely not work*. A checkout from STABLE may or may
not work, but we can as least provide reasonable suggestions that
might make it work. If you are building on a system running glibc
2.3.x, please use the HEAD branch but be aware that certain packages
are currently failing, and you will not get an ISO.
Until then, if you are attempting to build an LNX-BBC ISO, there are
two avenues by which you can do it. If you are trying to build on a
system which uses glibc 2.2.x, you must use the STABLE branch. STABLE
is known to succeed on Debian 3.0 in particular, and if you have
problems building STABLE on other glibc 2.2.x systems, we can provide
reasonable suggestions that might make it work. If you are building
on a system running GNU libc 2.3.x, use HEAD. In recent weeks, HEAD
has consistently succeeded in producing working ISOs on Debian sarge,
and sometimes on Debian sid. Building HEAD on other distributions
probably won't work, but if you're willing to try, we would really
like your feedback.