Debian 2.0 Hamm and the Transition to Libc6
Debian 2.0, codenamed "Hamm" and released in July 1998, represents a watershed milestone in the history of the Debian operating system due to its comprehensive transition from the older Linux libc5 to the modern GNU C Library 2, packaged as libc6. This article explores why this foundational transition was necessary, the technical hurdles Debian developers overcame to recompile the distribution without breaking existing installations, and how this architectural shift established modern standards for Debian's stability and multi-architecture capabilities.
The Need to Move from libc5 to libc6
During the mid-1990s, the Linux ecosystem relied primarily on Linux libc5, an independent fork of an earlier GNU C Library release tailored specifically for the Linux kernel. While libc5 served Linux well during its early growth, it faced significant limitations:
- Standards Compliance: It drifted away from emerging POSIX, ISO C, and Single UNIX Specification standards.
- Architecture Limitations: It was heavily tied to the x86 architecture and lacked clean support for 64-bit processors, such as the DEC Alpha.
- Threading and Localization: It provided limited internationalization (NLA/locales) and lacked robust threading implementations.
The Free Software Foundation resolved these issues with GNU C Library
2 (glibc 2). Because glibc 2 was a major revision, Debian packaged it
under the soname libc6. However, libc6 altered application
binary interfaces (ABIs), meaning dynamic binaries compiled against
libc5 could not run against libc6 libraries without causing application
crashes.
Engineering the Migration in Hamm
Transitioning an entire operating system to an incompatible core C library required recompiling thousands of packages and ensuring existing user systems remained bootable and functional throughout the upgrade. Debian 2.0 achieved this through several deliberate engineering steps:
- Parallel Library Support: To prevent installed
proprietary software and un-migrated packages from breaking, Debian
maintained compatibility packages. The runtime linker
(
ld.so) was updated to manage paths for both libc5 (/lib/libc.so.5) and libc6 (/lib/libc.so.6) simultaneously. - Coordinated Recompilation: Developers had to
bootstrap the compiler toolchain (
gcc,binutils, andmake) against libc6, then recompile packages in strict dependency order. Core utilities likedpkg,bash, andtarhad to be transitioned first. - Upgrade Path Solutions: Because the package manager
(
dpkg) itself relied on the C library, standard upgrade paths risked circular dependency failure. The development community created a standalone shell utility known asautoup.sh, which manually unpacked base libc6 packages in a fail-safe order. Debian 2.0 also marked the initial, experimental introduction of the Advanced Package Tool (apt), laying the groundwork for automated upgrades in future releases.
Lasting Impact on the Debian Ecosystem
Debian 2.0 Hamm proved that a decentralized, community-driven distribution could execute a deep architectural overhaul across an entire software archive.
The move to libc6 enabled Debian to officially support multiple
hardware architectures. Hamm was the first release to officially include
the Motorola 68000 (m68k) architecture alongside
i386, with ports to Alpha, Sparc, and PowerPC rapidly
following. By standardizing on glibc, Debian established an
enterprise-grade foundation that streamlined long-term binary stability,
international localization, and the modern packaging workflows still
used today.