O que significa "6" em glibc.so.6?

O que significa "6" em glibc.so.6?

Ao explorar o binário C++, descobri que ele libstdc++.so.6está vinculado a libm.so.6e 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)

Minhas perguntas são:

  1. O que 6significa no nome? Originalmente pensei que fosse a versão do glibc, mas a versão é 2.35, o que não é relevante para 6.

    $ strings /lib/x86_64-linux-gnu/libc.so.6  | grep GLIBC_2.3
    GLIBC_2.3
    ...
    GLIBC_2.35
    
  2. Por que o sufixo é 6tão popular?

  3. Existe uma programação de quando libc.so.7será lançado?

Responder1

O sufixo 6 é usado por razões históricas, detalhadas emman libcno Linux. Essencialmente, um fork da biblioteca GNU C foi usado no Linux; este lançou as versões principais 2 a 5. A versão 5 usou ELF e foi publicada com uma biblioteca compartilhada soname de libc.so.5. Quando a versão 2 da biblioteca GNU C foi lançada no Linux, ela usou a biblioteca compartilhada soname libc.so.6para evitar confusão com bibliotecas anteriores.

Bibliotecas relacionadas usam o mesmo sufixo. Algumas arquiteturas usam um sufixo ligeiramente diferente; por exemplo, a biblioteca GNU C em Alpha e Itanium é libc.so.6.1.

A biblioteca GNU C tem um forte histórico de compatibilidade com versões anteriores e usa muitos mecanismos diferentes para suportar a introdução de mudanças significativas sem quebrar binários antigos (incluindo símbolos versionados). Um novo soname ( libc.so.7) só seria usado se uma alteração significativa que não pudesse ser mitigada fosse absolutamente necessária, então é improvável que vejamos uma em breve.

Responder2

É o ABI (Interface binária do aplicativo) versão.

Ele só é incrementado quando uma alteração significativa é feita, o que agora é fortemente evitado para libc, portanto, a maioria das distribuições já está ativa libc.so.6há algum tempo.

Em geral, permite que múltiplas versões incompatíveis de uma biblioteca existam em um sistema ao mesmo tempo, suportando diferentes aplicações que foram construídas para diferentes versões.

Por exemplo, o Ubuntu 18.04 forneceu libcurl.so.3(via package libcurl3) e libcurl.so.4(via package libcurl4), ambos construídos a partir do cURL versão 7.58.0.

informação relacionada