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