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