Table of Contents
Why Alpha Has libc.so.6.1
Every other currently supported Linux architecture that uses glibc 2.x has libc.so.6. Alpha has libc.so.6.1, and libm.so.6.1 with it. The dynamic linker, ld-linux.so.2, was not renamed.
Consequences for portable code
Code that names the C library by its file name breaks on Alpha. Typical cases are a dlopen("libc.so.6", …) call, a language runtime or foreign function interface that loads libc.so.6 by name, and a test suite or build script that looks for libc.so.6 to find the C library or decide that it is glibc. All of them fail on Alpha, where no file of that name exists. 1) The same applies to libm.so.6.
Portable code should not hard-code the name. In C, glibc's <gnu/lib-names.h> defines LIBC_SO and LIBM_SO as the correct names for the target, "libc.so.6.1" and "libm.so.6.1" on Alpha. Alternatively, dlopen(NULL, …) returns a handle for the main program, through which the C library's symbols can be found without naming it. Python's ctypes.util.find_library("c") also returns the right name.
Debian names its packages after the soname, so on Alpha the C library is libc6.1 and its development files libc6.1-dev, not libc6 and libc6-dev. 2) Build dependencies and packaging scripts that name libc6-dev directly fail on Alpha.
Why
The reason is an ABI break in January 1997, in glibc 2.0.1. dev_t became 64 bits wide and glibc's sigset_t changed from an array of unsigned int to an array of unsigned long (1024 bits in either case). 3) 4) Alpha binaries had already been built against libc.so.6, and to keep them from loading the incompatible library, Alpha's soname was changed to 6.1. 5) 6) Binaries built against one library do not work with the other. 7)
Nothing in current Alpha glibc requires the .1. It is a remnant of the 1997 ABI change, kept because changing it back would break every existing Alpha binary.
IA-64
IA-64 also used libc.so.6.1 and libm.so.6.1, for undocumented reasons. It entered glibc at GLIBC_2.2 already using 6.1, so it never shipped a libc.so.6 and had no break to signal. IA-64 has since been removed from glibc, leaving Alpha as the only architecture using 6.1.
