ABI 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. _ _ ____ _
  2. ___| | | | _ \| |
  3. / __| | | | |_) | |
  4. | (__| |_| | _ <| |___
  5. \___|\___/|_| \_\_____|
  6. libcurl's binary interface
  7. ABI - Application Binary Interface
  8. First, allow me to define the word for this context: ABI describes the
  9. low-level interface between an application program and a library. Calling
  10. conventions, function arguments, return values, struct sizes/defines and
  11. more.
  12. For a longer description, see
  13. http://en.wikipedia.org/wiki/Application_binary_interface
  14. Upgrades
  15. In the vast majority of all cases, a typical libcurl upgrade does not break
  16. the ABI at all. Your application can remain using libcurl just as before,
  17. only with less bugs and possibly with added new features. You need to read
  18. the release notes, and if they mention an ABI break/soname bump, you may
  19. have to verify that your application still builds fine and uses libcurl as
  20. it now is defined to work.
  21. Version Numbers
  22. In libcurl land, you really can't tell by the libcurl version number if that
  23. libcurl is binary compatible or not with another libcurl version.
  24. Soname Bumps
  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. During the first seven years of libcurl releases, there have only been four
  33. ABI breakages.
  34. Downgrades
  35. Going to an older libcurl version from one you're currently using can be a
  36. tricky thing. Mostly we add features and options to newer libcurls as that
  37. won't break ABI or hamper existing applications. This has the implication
  38. that going backwards may get you in a situation where you pick a libcurl
  39. that doesn't support the options your application needs. Or possibly you
  40. even downgrade so far so you cross an ABI break border and thus a different
  41. soname, and then your application may need to adapt to the modified ABI.
  42. History
  43. The previous major library soname number bumps (breaking backwards
  44. compatibility) have happened the following times:
  45. 0 - libcurl 7.1, August 2000
  46. 1 - libcurl 7.5 December 2000
  47. 2 - libcurl 7.7 March 2001
  48. 3 - libcurl 7.12.0 June 2004
  49. 4 - libcurl 7.16.0 October 2006