¿Qué significa "6" en glibc.so.6?

¿Qué significa "6" en glibc.so.6?

Al explorar el binario de C++, encuentro que libstdc++.so.6está vinculado dyn a libm.so.6y libc.so.6:

$ ldd /lib/x86_64-linux-gnu/libstdc++.so.6 
        linux-vdso.so.1 (0x00007ffcb737b000)
        libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fd3b2295000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fd3b1c00000)
        /lib64/ld-linux-x86-64.so.2 (0x00007fd3b2396000)
        libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fd3b2275000)

Mis preguntas son:

  1. ¿Qué 6significa en el nombre? Originalmente pensé que era la versión de glibc, pero la versión es 2.35, lo cual no es relevante para 6.

    $ strings /lib/x86_64-linux-gnu/libc.so.6  | grep GLIBC_2.3
    GLIBC_2.3
    ...
    GLIBC_2.35
    
  2. ¿Por qué el sufijo es 6tan popular?

  3. ¿Hay un cronograma de cuándo libc.so.7se lanzará?

Respuesta1

El sufijo 6 se utiliza por razones históricas, detalladas enman libcen Linux. Básicamente, se utilizó una bifurcación de la biblioteca GNU C en Linux; esto lanzó las versiones principales 2 a 5. La versión 5 usó ELF y se publicó con una biblioteca compartida con el nombre de libc.so.5. Cuando se lanzó la versión 2 de la biblioteca GNU C en Linux, utilizó el nombre de biblioteca compartida libc.so.6para evitar confusiones con bibliotecas anteriores.

Las bibliotecas relacionadas utilizan el mismo sufijo. Algunas arquitecturas utilizan un sufijo ligeramente diferente; por ejemplo, la biblioteca GNU C en Alpha e Itanium es libc.so.6.1.

La biblioteca GNU C tiene una sólida historia de compatibilidad con versiones anteriores y utiliza muchos mecanismos diferentes para admitir la introducción de cambios significativos sin romper archivos binarios antiguos (incluidos los símbolos versionados). Un nuevo soname ( libc.so.7) solo se usaría si fuera absolutamente necesario un cambio importante que no pudiera mitigarse, por lo que es poco probable que veamos uno pronto.

Respuesta2

Es el ABI (Interfaz binaria de la aplicación) versión.

Solo se incrementa cuando se realiza un cambio importante, lo que ahora se evita enfáticamente libc, por lo que la mayoría de las distribuciones han estado activas libc.so.6durante algún tiempo.

En general, permite que existan múltiples versiones incompatibles de una biblioteca en un sistema al mismo tiempo, admitiendo diferentes aplicaciones creadas para las diferentes versiones.

Por ejemplo, Ubuntu 18.04 proporcionó libcurl.so.3(a través del paquete libcurl3) y libcurl.so.4(a través del paquete libcurl4), ambos creados a partir de la versión 7.58.0 de cURL.

información relacionada