[FFmpeg-devel] ABI break in 4.3

Timo Rothenpieler timo at rothenpieler.org
Sun Jul 5 19:07:46 EEST 2020


On 05.07.2020 17:46, 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, the situation is that:

It wasn't. Structs expanding at the end have occurred multiple times in 
the past already, and are documented as not having their size be part of 
the ABI/API.
Also, no functions were removed.

>   * $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. 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?!).

Sometimes the libraries have functions they access from each other that 
are not meant to be public, but still need to be exported.


More information about the ffmpeg-devel mailing list