As APIs do kernel do Linux são muito estáveis. (Estou falando sobre as chamadas do sistema, não as APIs dentro do kernel.) Um executável vinculado estaticamente produzido desde 1997 ou por aí (a mudança para ELF como o formato executável) deve funcionar em qualquer sistema Linux atual. No entanto, os executáveis estaticamente vinculados têm muitas desvantagens: são volumosos, não podem ser atualizados facilmente quando há bugs em códigos de terceiros e tendem a viver em suas próprias bolhas, pois têm problemas para interagir com alguns recursos do sistema. para o qual a biblioteca padrão fornece suporte configurável (por exemplo, DNS, localidades, contas de usuário, etc.).
Para bibliotecas, uma convenção comum é que a alteração no primeiro número da versão indica uma alteração de ABI incompatível, e o restante da versão aumenta em alterações compatíveis com versões anteriores. Por exemplo, se o seu programa estiver vinculado à versão 2.3, ele funcionará com a versão 2.3 ou 2.4 da biblioteca, mas não com o 2.2 ou 3. Algumas bibliotecas usam diferentes convenções. O vinculador dinâmico usa o soname gravado na biblioteca para decidir se sua versão é adequada.
A biblioteca padrão no Linux não incorporado é Glibc . A versão principal do Glibc é 6 no Linux (por isso é conhecido como libc6) desde 1998; a versão principal do upstream é 2, o que explica porque a versão do libc6 é 2. MINOR e não 6. MINOR . Em princípio, os programas vinculados à versão mais antiga da libc6 devem funcionar com versões mais recentes, embora isso nem sempre seja verdade no início. Qualquer programa vinculado ao Glibc 2.3 ou superior deve funcionar nas versões atuais.
A biblioteca C ++ padrão é usada para mudar mais rapidamente, mas a versão principal atual (6) é atual desde 2005.
Se você compilar um programa em um sistema mais antigo, ele deverá funcionar em sistemas mais novos, desde que as versões necessárias da biblioteca estejam disponíveis. Pegue a versão mais antiga do CentOS (atualmente 5) e o