Even if you do not use the curl command daily, the chances are high that you are still using curl and don’t know. IoT and tons of other services on the Internet depend upon libcurl for network operations. Daniel Stenberg is a Swedish software developer, recipient of the Polhem Prize 2017, on cURL. Recently I did a quick Q and A with Daniel about starting the curl project and his daily workflow.
Who are you, and what do you do?
I’m Daniel Stenberg. A software developer who lives and works just outside Stockholm, Sweden. People might primarily recognize me as the founder and lead developer of the curl project. The open source project I started that makes a command line tool and library for doing client-side Internet transfers. Even if I of course have participated in many other open source projects as well and done things like participate in the IETF to produce internet protocol specifications.
How did you first get into software development?
In the first half of the 1980s, when I was in my early teens, a few of my class mates and friends started with computers and I was immediately intrigued and interested. We could spend hours entering DATA-lines from the first computer magazines of the times to get a silly little game or something appear. It was the age of Commodore 64 and in the spring of 1985 I was eventually able to finally buy my own together with my younger brother, Björn. We immediately learned Basic on the thing and after a while we dove into assembler programming and learned how to write demos and games and really squeeze as much as possible out of the little thing (google “Horizon C64 demos“). From that age I’ve enjoyed software development.
Why did you choose an open-source model for curl?
There was never any alternative or doubt in my mind that it would be open source already when I first started working on the code in the projects that used other names before they would become curl. The term “open source” wasn’t coined until early 1998, just before the first curl release. Before that it was just… code.
At that time, I had already for several been impressed by the amount of freely available code out there, I had worked on open source already a bit and I wanted to become part of the cool community of people that contribute to the wealth of freely available software. There was also no doubt in my head that in order to succeed in making a good software project out of a hobby project done by just me, it would have to be made open so that others could help out. To make it run on platforms I don’t have access to. To test it in environments I can’t reach.
After all, it was just a little Internet transfer tool. Nothing special or particularly advanced…
Can you please share any interesting and lesser know facts about the curl project?
Lots of people think of the curl project as “the command line tool” or perhaps even as “the http command line tool” and I think that leads to questions on how curl can be 170K lines of code or how we can still be fixing bugs daily in the project after 23 years. The reality is of course that the command line tool curl is powered by the transfer library libcurl, that supports 26 different transport protocols, has run on 86 different operating systems on 22 different CPU architectures and it can be built to use 14 different TLS libraries etc. It has a versatile and powerful API and it has been installed in ten billion installations world-wide. And all protocols evolve all the time with new versions and new practices and doing network transfers over the Internet means communicating with many strange server implementations in the other end – and curl needs to do well with all and any of them!
The relative simplicity of the command line tool and the fact that we don’t break behavior help give users the impression that curl works the same way today as it did ten years ago – because in many ways it does. The command lines you could run ten or fifteen years ago certainly still works with curl. It doesn’t mean we didn’t rewrite almost everything internally in the meantime to make sure it could do it and still work with the modern Internet’s way of doing things.
What does a “day in the life” look like when your run a critical project like curl?
Since 2019 I work for wolfSSL. At wolfSSL we offer commercial curl support to companies. This means that when I have customers with needs or paid-for projects I spend part of my day on those to make sure they’re happy. But I always make sure that I also can take care of the most pressing support issues. Paying customers allows me to work on curl all day long, for everyone’s benefit.
I start my work day around 8 in the morning, after breakfast and having chased off the kids to their school duties (which of course has been mostly from home lately). I reply to curl emails, I answer curl support questions, I deal with curl issues, review pull requests and proposed changes and I work on new features and fix curl bugs. I live in curl/curl on GitHub, I browse and edit a lot of curl code with Emacs.
I work from home full time since many years and I don’t have any colleagues nearby physically (I’m the only Swedish employee of wolfSSL) so my social interactions are primarily done on Slack, Twitter, mailing lists and in the #curl IRC channel. And the occasional video meeting with customers or wolfSSL team mates.
At night, when the rest of my family goes to bed I spend a couple of more hours on curl development. It’s perfect, as a few new things have often landed in the mean time and the CI jobs for my pull-requests have gotten time to produce some feedback to react to and give another spin.
Not everything I do is curl related, by almost everything is at least related to curl one way or another.
Describe your computer hardware and software setup. What hardware do you use? And what software/Linux (Unix) distro do you use daily?
My most trusted and main development desktop machine for my daily churn is a Debian Linux (sid/unstable) installation and dual 27” 4K screens. I run KDE/plasma and I spent a lot of time in Emacs, terminals and gdb. curl is still a fairly lightweight project in terms of source code volumes so my compile and rebuild times are short even though my machine is actually quite old by now. A core-i7 with 8 cores from several years back with 32GB ram. After configure, building curl from clean takes less than 20 seconds on it. A typical invocation of curl’s configure script takes less than 30 seconds for me. I of course do both of those things fairly often though.
In addition, I have a dedicated “video meeting laptop” (that runs Windows), a “bring with me on travel/conferences laptop” (Debian again) and a mac mini for when I can’t avoid debugging macOS issues.
I have my home connected with fiber and 1000/1000 mbit connection.
What open-source apps/software/tools can’t you live without?
Emacs and gdb I guess. Emacs because I learned it already back in 1991 at my first job at IBM and I’ve used it daily for about three decades now. gdb because there’s nothing like it and I can’t get over how lldb had to not be gdb compatible in their commands.
But really. I’ve lived through several big main computer architecture changes in my life and as long as I can do software development I’m good and I can always adapt to new tools and ways when I have to.
What’s the best advice you have ever received?
I honestly can’t say. I wish I could. I think in general my way of doing things are guided by what I see successful projects do and succeed with and what I read and hear successful leaders and open source developers share with the world – as a collective rather than individual geniuses – but I can’t extract or identify any stand-alone or quotable advice that has stuck with me.
What advice would you give to someone starting fresh with the open-source software development world?
Figure out what’s fun, do it and continue doing it.
It has to be fun in order to make you better face challenges and obstacles along the way and to find the motivation to climb the mountains that might at first seem too steep. You need to actually do it and not wait or just think about it as a theoretical challenge because it will never be the same thing. And you you must not think that whatever you do will have an instant gratification or success story. You might need to keep doing those things for a long time before others see their greatness.
- Do you listen to background music?
I do. Music works great for me to help isolate me from the rest of the world and builds up a good bubble. It helps me focus on what I read and work on and shut out the rest of the world and surrounding. While I’m not alone in the house I use good noise-canceling headphones.
- Best time to write code for you? Daytime or nighttime?
I don’t think it matters to me. If I just have a clear target or mission, I can get laser focused and super driven no matter which time of the day it is.
- Tea or coffee?
Coffee. Black with no sugar.
- IDE/text editor?
- Favorite shell tip?
My best shell tip is to show the current git branch in the shell prompt!
I also noticed that I was building curl so often in my terminal I’ve ended up making an alias for ‘b‘ that runs “make -sj7” in my curl directory. Saves me many key strokes every day! (and before anyone asks, I use -j7 to spare a core, which I’ve noticed helps when I for example do live-streaming while rebuilding curl)
What do you do when you’re not hacking curl?
I love spending time with my family (wife and two kids) – for example going skiing in the winter. I also enjoy playing floorball – which is my preferred recreational sporting activity I do regularly or in the warmer half of the year I like kayaking.