glibc에 동일한 기능의 두 가지 버전이 있는 이유는 무엇입니까? [폐쇄]

glibc에 동일한 기능의 두 가지 버전이 있는 이유는 무엇입니까? [폐쇄]

나는 glibc의 버전 제어 메커니즘을 잘 이해하지 못합니다.

개발자는 어떤 시점에서 함수의 새 버전이 필요하고 해당 함수가 glibc에서 더 이상 "역호환"되지 않으며 GLIBC_2.X새 버전을 도입해야 한다고 결정합니까?

함수 프로토타입 변경이나 API 변경의 경우는 이해하지만, 또 어떤 이유가 있나요?

즉, fnmatch:

readelfglibc 2.19의 출력을 보고 있는데 fnmatch의 두 가지 버전이 표시됩니다.

151: 000bff40   892 FUNC    GLOBAL DEFAULT   12 fnmatch@GLIBC_2.0
152: 000bff40   892 FUNC    GLOBAL DEFAULT   12 fnmatch@@GLIBC_2.2.3

하지만 glibc 코드를 보면 정확히 동일한 기능임을 알 수 있습니다.

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

그렇다면 fnmatch에는 왜 두 가지 버전이 있습니까? 개발자가 기능의 "새 버전"을 출시하는 다른 이유는 무엇입니까?

관련 정보