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 In the vast majority of all cases, a typical libcurl upgrade does not break 13 the ABI at all. Your application can remain using libcurl just as before, 14 only with less bugs and possibly with added new features. You need to read 15 the release notes, and if they mention an ABI break/soname bump, you may have 16 to verify that your application still builds fine and uses libcurl as it now 17 is defined to work. 18 19## Version Numbers 20 21 In libcurl land, you really can't tell by the libcurl version number if that 22 libcurl is binary compatible or not with another libcurl version. 23 24## Soname Bumps 25 26 Whenever there are changes done to the library that will cause an ABI 27 breakage, that may require your application to get attention or possibly be 28 changed to adhere to new things, we will bump the soname. Then the library 29 will get a different output name and thus can in fact be installed in 30 parallel with an older installed lib (on most systems). Thus, old 31 applications built against the previous ABI version will remain working and 32 using the older lib, while newer applications build and use the newer one. 33 34 During the first seven years of libcurl releases, there have only been four 35 ABI breakages. 36 37 We are determined to bump the SONAME as rarely as possible. Ideally, we 38 never do it again. 39 40## Downgrades 41 42 Going to an older libcurl version from one you're currently using can be a 43 tricky thing. Mostly we add features and options to newer libcurls as that 44 won't break ABI or hamper existing applications. This has the implication 45 that going backwards may get you in a situation where you pick a libcurl that 46 doesn't support the options your application needs. Or possibly you even 47 downgrade so far so you cross an ABI break border and thus a different 48 soname, and then your application may need to adapt to the modified ABI. 49 50## History 51 52 The previous major library soname number bumps (breaking backwards 53 compatibility) have happened the following times: 54 55 0 - libcurl 7.1, August 2000 56 57 1 - libcurl 7.5 December 2000 58 59 2 - libcurl 7.7 March 2001 60 61 3 - libcurl 7.12.0 June 2004 62 63 4 - libcurl 7.16.0 October 2006 64