Eu não entendo completamente o mecanismo de controle de versão da glibc.
Em que casos os desenvolvedores decidem que uma função precisa de uma nova versão, e essa função não é mais "compatível com versões anteriores" na glibc e uma nova versão GLIBC_2.X
precisa ser introduzida?
No caso de uma mudança de protótipo de função, ou uma mudança de API, eu entendo, mas que mais causas existem?
i.e. fnmatch:
Estou vendo uma saída readelf
no meu glibc 2.19 e vejo duas versões do fnmatch:
151: 000bff40 892 FUNC GLOBAL DEFAULT 12 fnmatch@GLIBC_2.0
152: 000bff40 892 FUNC GLOBAL DEFAULT 12 fnmatch@@GLIBC_2.2.3
Mas quando vejo o código da glibc, vejo que são exatamente a mesma função:
versioned_symbol (libc, __fnmatch, fnmatch, GLIBC_2_2_3);
# if SHLIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_2_3)
strong_alias (__fnmatch, __fnmatch_old)
compat_symbol (libc, __fnmatch_old, fnmatch, GLIBC_2_0);
# endif
Então, por que o fnmatch tem até duas versões? Quais outras causas existem para os desenvolvedores iniciarem uma "nova versão" de uma função?
Tags glibc