1*6236dae4SAndroid Build Coastguard Worker<!-- 2*6236dae4SAndroid Build Coastguard WorkerCopyright (C) Daniel Stenberg, <[email protected]>, et al. 3*6236dae4SAndroid Build Coastguard Worker 4*6236dae4SAndroid Build Coastguard WorkerSPDX-License-Identifier: curl 5*6236dae4SAndroid Build Coastguard Worker--> 6*6236dae4SAndroid Build Coastguard Worker 7*6236dae4SAndroid Build Coastguard WorkerABI - Application Binary Interface 8*6236dae4SAndroid Build Coastguard Worker================================== 9*6236dae4SAndroid Build Coastguard Worker 10*6236dae4SAndroid Build Coastguard Worker "ABI" describes the low-level interface between an application program and a 11*6236dae4SAndroid Build Coastguard Worker library. Calling conventions, function arguments, return values, struct 12*6236dae4SAndroid Build Coastguard Worker sizes/defines and more. 13*6236dae4SAndroid Build Coastguard Worker 14*6236dae4SAndroid Build Coastguard Worker [Wikipedia has a longer description](https://en.wikipedia.org/wiki/Application_binary_interface) 15*6236dae4SAndroid Build Coastguard Worker 16*6236dae4SAndroid Build Coastguard Worker## Upgrades 17*6236dae4SAndroid Build Coastguard Worker 18*6236dae4SAndroid Build Coastguard Worker A libcurl upgrade does not break the ABI or change established and documented 19*6236dae4SAndroid Build Coastguard Worker behavior. Your application can remain using libcurl just as before, only with 20*6236dae4SAndroid Build Coastguard Worker fewer bugs and possibly with added new features. 21*6236dae4SAndroid Build Coastguard Worker 22*6236dae4SAndroid Build Coastguard Worker## Version Numbers 23*6236dae4SAndroid Build Coastguard Worker 24*6236dae4SAndroid Build Coastguard Worker In libcurl land, you cannot tell by the libcurl version number if that 25*6236dae4SAndroid Build Coastguard Worker libcurl is binary compatible or not with another libcurl version. As a rule, 26*6236dae4SAndroid Build Coastguard Worker we do not break the ABI so you can *always* upgrade to a later version without 27*6236dae4SAndroid Build Coastguard Worker any loss or change in functionality. 28*6236dae4SAndroid Build Coastguard Worker 29*6236dae4SAndroid Build Coastguard Worker## SONAME Bumps 30*6236dae4SAndroid Build Coastguard Worker 31*6236dae4SAndroid Build Coastguard Worker Whenever there are changes done to the library that causes an ABI breakage, 32*6236dae4SAndroid Build Coastguard Worker that may require your application to get attention or possibly be changed to 33*6236dae4SAndroid Build Coastguard Worker adhere to new things, we bump the SONAME. Then the library gets a different 34*6236dae4SAndroid Build Coastguard Worker output name and thus can in fact be installed in parallel with an older 35*6236dae4SAndroid Build Coastguard Worker installed lib (on most systems). Thus, old applications built against the 36*6236dae4SAndroid Build Coastguard Worker previous ABI version remains working and using the older lib, while newer 37*6236dae4SAndroid Build Coastguard Worker applications build and use the newer one. 38*6236dae4SAndroid Build Coastguard Worker 39*6236dae4SAndroid Build Coastguard Worker During the first seven years of libcurl releases, there have only been four 40*6236dae4SAndroid Build Coastguard Worker ABI breakages. 41*6236dae4SAndroid Build Coastguard Worker 42*6236dae4SAndroid Build Coastguard Worker We are determined to bump the SONAME as rarely as possible. Ideally, we never 43*6236dae4SAndroid Build Coastguard Worker do it again. 44*6236dae4SAndroid Build Coastguard Worker 45*6236dae4SAndroid Build Coastguard Worker## Downgrades 46*6236dae4SAndroid Build Coastguard Worker 47*6236dae4SAndroid Build Coastguard Worker Going to an older libcurl version from one you are currently using can be a 48*6236dae4SAndroid Build Coastguard Worker tricky thing. Mostly we add features and options to newer libcurls as that 49*6236dae4SAndroid Build Coastguard Worker does not break ABI or hamper existing applications. This has the implication 50*6236dae4SAndroid Build Coastguard Worker that going backwards may get you in a situation where you pick a libcurl that 51*6236dae4SAndroid Build Coastguard Worker does not support the options your application needs. Or possibly you even 52*6236dae4SAndroid Build Coastguard Worker downgrade so far so you cross an ABI break border and thus a different 53*6236dae4SAndroid Build Coastguard Worker SONAME, and then your application may need to adapt to the modified ABI. 54*6236dae4SAndroid Build Coastguard Worker 55*6236dae4SAndroid Build Coastguard Worker## History 56*6236dae4SAndroid Build Coastguard Worker 57*6236dae4SAndroid Build Coastguard Worker The previous major library SONAME number bumps (breaking backwards 58*6236dae4SAndroid Build Coastguard Worker compatibility) happened the following times: 59*6236dae4SAndroid Build Coastguard Worker 60*6236dae4SAndroid Build Coastguard Worker 0 - libcurl 7.1, August 2000 61*6236dae4SAndroid Build Coastguard Worker 62*6236dae4SAndroid Build Coastguard Worker 1 - libcurl 7.5 December 2000 63*6236dae4SAndroid Build Coastguard Worker 64*6236dae4SAndroid Build Coastguard Worker 2 - libcurl 7.7 March 2001 65*6236dae4SAndroid Build Coastguard Worker 66*6236dae4SAndroid Build Coastguard Worker 3 - libcurl 7.12.0 June 2004 67*6236dae4SAndroid Build Coastguard Worker 68*6236dae4SAndroid Build Coastguard Worker 4 - libcurl 7.16.0 October 2006 69