Category Archives: cURL and libcurl

curl and/or libcurl related

ABI Breakage

Domenico Andreoli, the Debian curl and libcurl maintainer posted to the curl-library list about the recent libcurl soname bump and the related issue of ABI breakage.

I responded, explaining my view on why the soname bump from 3 to 4 was valid, but I’ve also gone back in my mail archives and checked out a private discussion I had with Bjorn Reese over this subject a long time ago and I feel it is about time it hits the air.

An ABI breakage occurs when one or more of the following changes are made

Functions:

  • Change function names
  • Remove existing functions
  • Change parameters
  • Change behavior
  • Change undefined behavior
  • Add dependence on other functions (e.g. A() must be called before B())

Data structures:

  • Change the order of elements
  • Add elements
  • Remove elements
  • Change the data type or size
  • Change alignment
  • Change element values (e.g. change bits in flag variables)

Global variables:

  • Change variable names or types
  • Remove variables

Update: Dan Fandrich posted on the curl-library list and mentioned Mike Hearn’s great related page: Writing shared libraries.

curl on Fedora uses NSS

I noticed curl on Fedora suddenly started using NSS for TLS/SSL, as I believe the first distro out there.

I’ve been under the impression that Debian is the only distro shipping it built with GnuTLS.

I must admit I enjoy seeing more use of curl’s wide support of various underlying technologies, and it also makes it more certain that they will remain working and even get improved as we go. When we add support for things and they never really end up getting used those features just risk serious bitrotting and slowly dying away when the code changes but nobody uses them.

curl plans autumn 2007

curl
We enter feature-freeze on August 31 and we then fix remaining known issues for a week or two in September before we release 7.17.0.

The version number bump is this time mostly due to the new way of dealing with LDAP (being linked properly build-time instead of dlopening run-time like before) and the new LDAPS support. 7.17.0 also brings a brand new port to OS/400, it treats strings sent to curl_easy_setopt() differently and it builds and runs with recent libssh2 versions – that lib changed so much recently so that libcurl 7.16.4 can’t be built with libssh2 0.16 or later.

I am starting my paternity leave on October 1st to take care of Rex full-time, and I’m not sure at this point in time how much that’ll affect how much time and energy I’ll have for curl hacking, at least initially, so getting the curl release done before this seems like a good idea to me.

Edit: I should clarify that the “treats strings differently” means that libcurl will copy the strings passed to it, so that applications no longer need to keep them around until libcurl is done with them like they have been forced to up until < 7.17.0.