[FFmpeg-devel] ABI break in 4.3

James Almer jamrial at gmail.com
Sun Jul 5 19:18:42 EEST 2020


On 7/5/2020 12:46 PM, Jan Engelhardt wrote:
> 
> On Sunday 2020-07-05 16:43, Timo Rothenpieler wrote:
>>> LIBAVCODEC_58 {
>>>    global:
>>>    av_foo;
>>>    av_bar;
>>>    av_whatever_else_there_is;...
>>>    local:
>>>    *;
>>> };
>>> LIBAVCODEC_58.91 {
>>>    global:
>>>    avpriv_mpeg4audio_get_config2;
>>> } LIBAVCODEC_58;
>>> LIBAVCODEC_58.123 { /* future example */
>>>    global:
>>>    avblahblah;
>>> } LIBAVCODEC_58.91;
>>
>> Won't that break the entire ABI of anything currently linked, and thus would
>> require a major bump?
> 
> Since 4.3 was sort of a break over 4.2.3 already

No, it wasn't. No field offsets were changed, no public structs where
their size is part of the ABI were altered, and no public symbols were
removed. The situation is exactly the same as when 4.2 was released
after 4.1, and every other release before those.

If you can run 4.3 at runtime on a program that linked to 4.2, then it's
working as intended. Attempting the inverse is not and will never be
allowed or considered a valid scenario.

And i want to stress the fact that the reported Chromium breakage and
most assuredly also the Blender breakage are unrelated to what you're
arguing about in this thread.

> , the situation is that:
> 
>  * $nextrelease can be compatible with 4.2.3's idea of the ABI, in which case
>    avpriv_mpeg4audio_get_config2 should be placed inside LIBAVCODEC_58.91, or
> 
>  * $nextrelease can be compatible with 4.3's idea of the ABI, in which case
>    avpriv_mpeg4audio_get_config2 should be placed inside LIBAVCODEC_58.
> 
> Each of the two prior options is equally non-compelling. "58" is tarnished
> already.

As "tarnished" as every previous soname was, if we go by your definition
of breakage. I don't recall it ever being an issue for anyone until now.

This nonetheless is a good proposal and can be considered for the next
soname bump, if it can help prevent people using the wrong release at
runtime.

> What software generally does at this point — ffmpeg is not the first
> project to have these issues — is to bump and start fresh.
> 
> 
>> Generally, this seems incredibly hard to maintain and will very likely cause
>> confusion every time someone adds stuff in the future.
> 
> How often do exported functions get added? Between 4.2.3 and 4.3,
> that was _just one_, and that one was even an avpriv_* (which
> probably shouldn't have been exported given its "priv" nature?!).

avpriv_* are inter library communication functions. An unfortunate
consequence of having the project split across half a dozen libraries.
They need to be exported, but not exposed in the installed headers.


More information about the ffmpeg-devel mailing list