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