Category Archives: cURL and libcurl

curl and/or libcurl related

Backwards Compatibility Efforts Gone Broke?

An example from the wild about how hard it can be to satisfy everyone when you’re writing and offering a library to the world: with the recent libcurl release suddenly open office doesn’t link fine with it.

It turns out these guys have enabled our help-define (CURL_NO_OLDIES) always. The define disables all our backwards compatibility defines/fix and let you check that your application still builds with the latest and doesn’t rely on anything that might be removed in the future.

CURL_NO_OLDIES is a convenient define that really suits a purpose. But not really well suited to unconditionally define for all builds since then you of course get these problems when we (in libcurl) rearrange our defines. This problem came to no surprise to us, since we did quite a large rearrangement before this particular release, and I actually expect that these support-defines will be present for a long time ahead.

So not only did they file a Debian bug report on open office, but also on libcurl.

The conclusion: use CURL_NO_OLDIES when you test-build your application against libcurl. Don’t leave it in the Makefile unconditionally for future builds.

curl and libcurl 7.17.0

Just a short while ago I uploaded the 7.17.0 packages to the curl site, updated the front page, mailed the announcement and submitted an update on freshmeat.

The previous release (7.16.4) was done in haste due to the security issue we got reported, but this time we took our time and I think we’ve done a pretty good job. The upcoming weeks will tell for sure…

cURLChanges this time include the new OS/400 port, the fact that curl_easy_setopt() now will copy all strings passed to it (previously it referred to the strings the application still had to keep around), SCP and SFTP support now requires libssh2 0.16 or later, the LDAP libraries are now build-time linked like all other third part libs and no longer run-time dlopen() like before and LDAPS is now supported. We also have at least 27 mentioned bug fixes, and possibly a few more actually done but not detailed in the release notes.

There’s no soname bump this time, although there have been a fair amount of return code name changes (with backwards compatible #defines added to make older programs still possible to compile), but we have started to add stuff in the TODO that we want to do the next time we actually decide to bump again. The previous bump did cause some havoc so I’ve learned to not use that card too often…

Unless something bad creeps up, I’m hoping for a good two months or so until 7.17.1 is due. With my autumn plans it might just take a little while longer as well. Time will have to tell.

Enjoy!

I am Rude and Mean

I’m the maintainer and admin of a few different open source packages, perhaps most notable in the curl project but I also poke on c-ares and libssh2 and I do a fair amount of work on Rockbox and hang around in a few other projects as well.

I write around 400-500 emails a month, the majority of them to the mailing lists of the projects I’m involved in. I try to respond to questions I know the answer to.

A stop signI’m not sure if I’ve grown even more grumpy recently or if the world is going downwards, but I’ve recently been called rude and a scammer in public mailing lists after having answered to mails with a meaning that the guys asking the question isn’t exactly trying hard to read up on this, understand the area nor are they reading my answers very good. So what if I’m not always the perfect gentleman or say the right “social” words, I am a hard core tech guy and I answer and talk technical stuff and specific details all day long. That’s what I do and that’s who I am.

So, I just wanted to let the rest of you know: I am rude and mean and you should know better than to ask anything in a forum I frequent. Or then you can of course stand up against the whiners and help educate the world on how to ask questions and why spoon-feeding users on mailing lists isn’t a good idea.

Sticking out your chin in the harsh internet reality, one should expect to get hit like this every now and then and you need to grow pretty thick skin to not let the bad guys get to you. Nonetheless, people in general are nice but it is just too easy for people to get upset and send away very rude mails without any kind of aftermath.

(But I must admit I found the threat to discuss me at a future Zend conference hilarious!)

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.