[FFmpeg-devel] ABI break in 5.1
Jan Engelhardt
jengelh at inai.de
Sat Jul 23 20:36:03 EEST 2022
On Saturday 2022-07-23 16:32, Nicolas George wrote:
>
>No, the ELF symbol version system cannot prevent you from replacing a
>file with an older version.
The information in ELF helps package managers prevent such
replacement. If I even try as much as propose a glibc downgrade to
rpm, this will happen:
# rpm -Uhv glibc-2.31-7.30.x86_64.rpm --oldpackage
error: Failed dependencies:
libc.so.6(GLIBC_2.32)(64bit) is needed by (installed) coreutils-9.0-7.1.x86_64
libc.so.6(GLIBC_2.33)(64bit) is needed by (installed) libpmem1-1.11.1-1.5.x86_64
libc.so.6(GLIBC_2.34)(64bit) is needed by (installed) libvpx7-1.11.0-3.4.x86_64
libm.so.6(GLIBC_2.35)(64bit) is needed by (installed) perl-base-5.36.0-2.1.x86_64
Of course, you can always mv/rm behind the manager's back or use rpm
--force, but that's not the point!
At the time vpx was built, it engrained the symvers of the functions
it uses into itself, therefore e.g. `readelf -aW
/usr/lib64/libvpx.so.7`:
Version symbols section '.gnu.version' contains 93 entries:
Addr: 0x0000000000001576 Offset: 0x001576 Link: 4 (.dynsym)
000: 0 (*local*) 2 (GLIBC_2.2.5) 3 (GLIBC_2.34) 4 (GLIBC_2.3.2)
004: 5 (GLIBC_2.2.5) 6 (GLIBC_2.11) 5 (GLIBC_2.2.5) 7 (GLIBC_2.29)
008: 8 (GLIBC_2.3.4) 1 (*global*) 5 (GLIBC_2.2.5) 4 (GLIBC_2.3.2)
00c: 8 (GLIBC_2.3.4) 5 (GLIBC_2.2.5) 3 (GLIBC_2.34) 5 (GLIBC_2.2.5)
010: 3 (GLIBC_2.34) 9 (GLIBC_2.27) 8 (GLIBC_2.3.4) 5 (GLIBC_2.2.5)
014: 3 (GLIBC_2.34) 5 (GLIBC_2.2.5) 8 (GLIBC_2.3.4) 1 (*global*)
018: 3 (GLIBC_2.34) 7 (GLIBC_2.29) 5 (GLIBC_2.2.5) 1 (*global*)
01c: 4 (GLIBC_2.3.2) 5 (GLIBC_2.2.5) 3 (GLIBC_2.34) 5 (GLIBC_2.2.5)
020: 5 (GLIBC_2.2.5) 5 (GLIBC_2.2.5) 3 (GLIBC_2.34) 5 (GLIBC_2.2.5)
024: a (GLIBC_2.4) 8 (GLIBC_2.3.4) 4 (GLIBC_2.3.2) 5 (GLIBC_2.2.5)
028: 5 (GLIBC_2.2.5) 2 (GLIBC_2.2.5) 5 (GLIBC_2.2.5) 5 (GLIBC_2.2.5)
02c: 5 (GLIBC_2.2.5) 4 (GLIBC_2.3.2) 3 (GLIBC_2.34) 7 (GLIBC_2.29)
030: 2 (GLIBC_2.2.5) 5 (GLIBC_2.2.5) 5 (GLIBC_2.2.5) b (GLIBC_2.14)
034: 1 (*global*) 1 (*global*) 1 (*global*) 1 (*global*)
Managers can and do evaluate that and turn that into a dependency
*without any person having to manually add "Requires: glibc >= 2.34"
to the libvpx description*. This of course requires that the project
followed the procedures to create the symvers definitions, which
glibc did.
Seriously, why do I have to explain this all the time.
More information about the ffmpeg-devel
mailing list