xref: /aosp_15_r20/external/curl/docs/libcurl/ABI.md (revision 6236dae45794135f37c4eb022389c904c8b0090d)
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