Suponha que eu tenha um programa que depende de uma versão glibc mais recente que não está disponível no sistema por meio de pacotes. E dá:
version `GLIBC_2.xxx' not found
Uma solução é compilar o binário com glibc estaticamente.
A outra solução que é descartada por muitas pessoas como "não segura" é colocar mais recente libc.so.6
em vez da fornecida pelo sistema operacional.
Como exatamente essa segunda solução não é segura ou uma má ideia, desde que libc.so.6
inclua endpoints ABI anteriores?
Por exemplo, se eu executar strings /usr/lib/libc.so.6 | grep --perl-regexp "^GLIBC_"
, posso ver muitas dessas versões da ABI como:
...
GLIBC_2.10
GLIBC_2.11
GLIBC_2.12
GLIBC_2.13
GLIBC_2.14
GLIBC_2.15
GLIBC_2.16
GLIBC_2.17
...
Portanto, se estou substituindo por um mais recente libc.so.6
com versões glibc ABI adicionais dentro dele, como ele quebra aplicativos mais antigos ou leva o sistema à quebra?
Ou não...? :)