The Changelog: Software Development, Open Source - 17 Years of curl (Interview)

Episode Date: May 1, 2015

Daniel Stenberg joined the show to talk about curl and libcurl and how he has spent at least 2 hours every day for the past 17 years working on and maintaining curl. That's over 13k hours! We covered ...the origins of curl, how he chooses projects to work on, why he has remained so dedicated to curl all these years, the various version control systems curl has used, licensing, and more.

Transcript
Discussion (0)
Starting point is 00:00:00 welcome back everyone this is the change log and i'm your host adams d'acobiak this is episode 153 and on today's show we're talking to daniel stenberg daniel is the creator and maintainer of curl deep show today. Huge topic. 17 years of Curl we're going through with Daniel. That's how long he's been doing this. 17 years. Daniel works at Mozilla. He's also an internet protocol geek, as he says himself.
Starting point is 00:00:38 He's an open source person and also a hacker. Now on the show, you'll hear us mention that he's an OG or OH to be more specific for original hacker because he's just been doing this for so long. We had some awesome sponsors for today's show, CodeShip and TopTile. We'll tell you a bit more about TopTile later in the show, but our friends at CodeShip had this cool new feature called wildcard deployments. Now you can get more flexible deployment workflows with wildcard deployment pipelines that trigger if a branch starts with a certain prefix you can use one deployment configuration for multiple branches and automatically deploy that feature release qa branch to the corresponding environments as you've
Starting point is 00:01:22 set up it's super easy Let me break it down for you. When you add a new branch in CodeShip to be deployed to, you can choose whether you're going to specify the exact branch name or if it's a wildcard deployment. And for the latter, you get an option to choose from a dropdown, which is branch starts with, and then you can specify the common part of the branches you want to deploy. So if, for example, you want to deploy all your branches that start with feature slash to a staging environment, for example, you can add this as the branch name and the deployment will be triggered for any of the following branch names. So if you've got feature slash foo, feature slash bar, those will all be automatically pointed and deployed to your staging environment. Super easy to set up.
Starting point is 00:02:06 Love CodeShip. Get started today if you haven't yet already for free with our free plan. It includes 100 builds a month and five private projects. Or use the offer code we have, TheChangeLawPodcast, to get 20% off any plan you choose for three months. Head to CodeShip.com slash TheChangeLaw to get started. And months head to codeship.com slash the change law to get started and now on to the show all right everybody we're back we got daniel stenberg on the line 17 years of curl and more we'll talk about more jared you're on the call what's going on man hey man how are we doing we are excellent daniel how are man? It's good to have you on the call. I'm good. It's a bit late here, but I'm relaxed sitting here, leaning back in my sofa in my living room.
Starting point is 00:02:52 There you go. So you're in Stockholm, or not too far from Stockholm, Sweden, right? Right. Just outside of Stockholm. What time is it there then? It's 10 p.m. 10 p.m. So it's 3 p.m. here. And that's not bad. Small difference. Seven hours.
Starting point is 00:03:10 Yeah. So, Daniel, we, you know, not too long back, you posted this awesome post, 17 years of curl. And for those who are catching up, if you haven't used curl before, maybe you haven't been on the command line enough. But this is a big deal, right? This is 17 years of a tried and true tool that's been a part of Linux forever. And you got this whole history that we thought would be really enjoyable to go down. But before we kick that off, maybe introduce yourself to the audience, those who may not know who you are, where you work at, what you do, what some of your flavors are, and we'll go from there. Sure.
Starting point is 00:03:47 I'm Daniel. I'm in Sweden. I've been working on curl and with curl for a very long time, 17 years. And I basically started that when I didn't, I wasn't really aware of any alternatives. So I picked, I started writing on my own tool and of course it was a small thing back then and only did a little a few protocols and a few things and then it just moved on from there and since then i've been it's been a fun project i've been working on it and expanded it expanded and gotten more users over time, of course. I mean, it's just a little project.
Starting point is 00:04:26 And we've been, I would say, a few core contributors over the years that have kind of stuck with the project and been around for a long time. But it has remained a fairly small project, developer-wise and so on. So it's low-key, no big, I mean, it's not that much of a bureaucracy or big processes or anything. We're just hacking around and improving the stuff that we like. And that's what I've been doing on Curl them for a very long time. And I've been working here in Stockholm, Sweden, as a consultant and doing embedded programming, basically, through my career, mostly.
Starting point is 00:05:12 And just a couple of years ago, actually, more slightly over a year ago, I was looking around for a new gig here in Stockholm, and then I was offered a job for Mozilla. So right now, then, I a job for Mozilla. So right now then I'm employed by Mozilla and I work on Firefox and networking stuff during
Starting point is 00:05:32 the day. So when Ilya Grigorov was on the show, Ilya works at Google and he works, I guess, what does he work at? Does he work on Chrome directly, Jared? Is that where Ilya works at? Works on? He's an internet plumber. That's what I was getting at. His job is to make the internet faster. I'm not sure if that's just on Chrome or what else
Starting point is 00:05:51 it all entails, but sure. Would you say that's a fair assumption of what you might call yourself as well, Daniel? Internet plumber? Maybe. I would rather call like a network hacker or whatever. Ah, that sounds cooler. Because I work on network stacks. I work on Firefox networking stack and I work on curl mostly. I work on a bunch of other projects too,
Starting point is 00:06:22 but those are my kind of two primary projects I work on. This kind of takes us back to 1998. Now I have to admit something, this will share my age a bit, but I graduated in 1997 and you released Curl the spring of 1998. So I was about 18, barely 18. How old were you then? And take us back to spring of 1998, if you can. Yeah. And spring of 1998, I released Curl and I then renamed the former project that I was working on and called it Curl because the project I had been working on before that, I called, originally I called it HTTP Get. And I started that in 1996. And then I added support for FTP as well, and then it supported both HTTP and FTP, and it kind of became odd to call it HTTP GET
Starting point is 00:07:16 when it also could speak FTP. So I renamed the project to URL GET. And then after a while, I added support for uploads as well. So it wasn't a get anymore. It wasn't only get. So URL get turned out to be a weird name. Yeah, that too. So then I renamed it again a third time,
Starting point is 00:07:38 and I called it curl then in 1998. And so since 1998, it's been curl ever since? Yes. So I first got into computers around 2000. And I first got into Linux and the command line in 2003. And Curl is one of those tools for me personally, you know when certain things predate you, it's almost like they always existed. Yeah.
Starting point is 00:08:07 You know, similar to the core utils. You don't even think about who wrote LS and who wrote CD, and I'm sure there's people who know exactly who wrote those things. So, of course, you can man LS and find out. But your program, Curl, is so ubiquitous and was even back when I got started that I didn't even realize for a very long time that it was not just part of, you know, a standard Linux stack when you were writing it, when it was called, you know,
Starting point is 00:08:32 HTTP get and URL get, did you have any clue that it would be deployed so broadly? No, no, no, of course not. It was just, I mean, it was just a small project. I did it for my own sake originally. And then of course, I found out that there were some other guys who also enjoyed it and wanted some features. But, of course, I mean, there's no point in time when you suddenly realize that it's just a constant evolution. So it's just one of these days when I look around and I just suddenly noticed that oh it's getting used all over and so no I never realized it I never intended it it just became like that and I think I mean of course
Starting point is 00:09:15 I think I did a lot of looking back I think I did a lot of correct decisions and perhaps I was also kind of right in time. So it was the right thing in the right time and so on, but it wasn't really on purpose. It just happened. What were some of those right decisions? Well, I would say that I was, the whole HTTP and internet and the web was kind of on the rise at that time
Starting point is 00:09:45 so it made sense to come at that point with a good HTTP tool that could help with a tool that is more low-level HTTP stuff than, for example, Wget which is more
Starting point is 00:10:00 getting stuff and curl is more a tool to do more weird things with HTTP. Do you get like your nemesis? Yeah, at least. I like to give that impression at least. It's more fun to think of it that way, right? Yeah, it is. It's fun to think that the curl person and the Wget people can't get along.
Starting point is 00:10:31 Exactly. I kind of like that image too nice and i also think that i did i think one of the best decisions i did i did early 2001 i think when when we created the the library the lib curl which is kind of the core of curl which then is a way for programs to get to curl abilities programming-wise. Yeah, so the command line tool started off just as a command line tool, and then you said, well, let's make the core of it a C library, and then the command line tool will use libcurl, and then other people can use libcurl, and that was a huge thing. What were some programs or some languages that integrated libcurl. And that was a huge thing. What were some programs or some languages that integrated libcurl throughout the years?
Starting point is 00:11:10 Well, early on, PHP is one of those, really, the first ones. And I think that helped us to get really far because PHP had adopted curl as the default way to do HTTP really early. So it kind of got some widespread adoption early on. And I think that was one of the big ones. It got me really excited when I realized that they wanted to do that. And from that point on, it just kind of spread really wide i don't remember exactly now but but in which order everything but i mean over over the years of course more and more
Starting point is 00:11:54 programs and more and more projects have adopted to use lib curl for for the transfer parts and i would say that today lib curl isl is the bigger part of the curl project because curl, the command line tool, is more like Linux users or command line people. And the number of those are much more limited than the number of programs or projects that would use Libcurl. So it started off HTTP focused, and it's still known for that today. But if you go to the homepage, you find out how many protocols this thing supports. It's kind of mind-numbing.
Starting point is 00:12:36 Dict, which I don't even know what that is. File protocol, FTP, FTPS, Gopher, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMB, SMTP, should I keep going? SMTP, TELNET, TFTP, SSL certificates, HTTP post, PUT,
Starting point is 00:12:58 FTP uploading, HTTP form-based upload, proxies, HTTP2, HTTP2, cookies, user plus password authentication. Man, I'm not done yet. I'm going to stop. This,
Starting point is 00:13:10 I mean, shows what productivity can do over a sustained 17 year time span, right? Nobody thought you'd just be building all of these things in. It's all this stuff in Libcurl.
Starting point is 00:13:22 Yeah. Yeah. What was the, what was the growth of these protocols? Just kind of organic over time and based on people requesting them or people submitting them themselves? How did all this come into it? Most of the features are just kind of creeping in. Like over time, people contribute different patches and have ideas and I wanted to
Starting point is 00:13:47 do things by myself of course so it is mostly organic we're adding things all the time and people are contributing things and then of course we I've had a couple of friendly companies over the years that have actually paid me to spend more work time, more focused time on developing curls. So, for example, I did the SSCP and SFTP pretty much paid sponsorships. And I did a bunch of the others like that. I did the POP3 IMAP,TP support also with the help of companies paying my time to implement this. That's something you hear about a at some point along the way,
Starting point is 00:14:46 you were able to at least financially benefit from the time you put into it. Not so much to get rich off of making Curl, but just so you're not totally giving your time to get nothing back in terms of finances for you or your family or whatever. Right. And it is actually, especially when adding new stuff, that is kind of the easy part to get financing for. Since then, companies who want to do things with Curl, they can easily kind of find room to pay me to do something that it doesn't do already and that they want in their product or whatever. How do you make the decision to put something in there?
Starting point is 00:15:26 Let's say Jared and I wanted to pay to put something in there that was obscure just for us. Do you say yes because you're getting paid? Do you say no? What defines the line there for you? Since I've kind of been fortunate that I haven't been – I've been able to kind of pick my projects. I mean my pay projects, like pretty much cherry-picked them
Starting point is 00:15:47 and only picked those that have matched what I think is fine for the project. I've never agreed to merge anything into the mainline that I think isn't in line with what the project should do. So I've only accepted features and I've only done things to Curl that I think is fine for Curl as a project and whatever the companies that pay me think. So if I've done things that I don't think fits mainline, I haven't merged it to mainline. I've just done it for some company and allowed them to keep it outside of everything. You've also had a whole lot of contributors over the years.
Starting point is 00:16:25 It looks like on your thanks page, there's a massive 1,265 people that have provided code feedback, advice, etc. over the years. That's just an astounding number, right? It's a totally insane number. But it's also a result of me keeping very close track of contributors.
Starting point is 00:16:45 So I'm trying to, since Amini is open source, the only thing I can do to people, the only way I can pay them is by thanking them and showing gratitude and clearly marking and saying thanks. And this, whatever, was done by whoever. And I'm trying to make a really good effort to make sure that I mark everything as reported by or contributed by or written by.
Starting point is 00:17:13 So over the years, of course, I collect a lot of names by people who have helped me out with all sorts of things. Yeah, I was noticing in a comment on your blog, somebody is actually impressed that they found their name in the thank you list, even though they'd only submitted a single bug once, and looked at that as a very minor contribution, and yet you documented that, and you added them to your list, and here they are appreciative of that fact and felt like part of the project even if just a little all these years later. Right and I tried to do that I tried
Starting point is 00:17:51 I'd still try to do that so of course if someone submits a bug report that person's name will end up in the thanks list and of course that might be a bit weird and if I also add someone who who then contributes a very large piece of code or whatever. But on the other hand, I mean, it becomes a really hard thing to draw the line. Who am I to say who's helped or who hasn't helped? Everyone who contributes anything, they actually help the project. So I try to just keep the names and say thanks. And you've seen the adoption. We'll probably talk a little bit more about adoption later, but just thinking about all the work that's gone into
Starting point is 00:18:32 it, all the people that have contributed, of course yourself. If you go to the GitHub, you have thousands and thousands of commits over the years, and I'm not even sure if that backports all the previous history before you switch to Git. And yet you see curl being used on the NASDAQ tower, as you posted to your website as well, which is a nice screen grab of some sort of dump on the NASDAQ screen up there of a curl command going out, which I'm sure they weren't hoping that would go public. I'm not sure what that is, actually.
Starting point is 00:19:02 Yeah, it's like they just printed the source of a script they're running. I'm not sure what that is, actually. Yeah, it's like they just printed the source of a script they're running. I'm not sure what that is either. I actually think it's an ad for that company. Oh, really? That's interesting. So they're showing how hacker they are, or what? Yeah, it's an API. It's a post back to APIallthethings.com with the flag of D and getting a free shirt at Apogee.
Starting point is 00:19:25 So that's advertising there. See, I didn't zoom in. I just looked at it from far away and thought, you know, when people accidentally blue screen in public, I thought it was one of those. Yeah. So it might be on purpose. I, I, I just got that. I just saw the picture. I thought it was fun. That is awesome. That's a cool ad though. I mean, it's the way, you know, sidebar on that,
Starting point is 00:19:47 but, you know, a way to target your audience, right? Like, no one gets that except for someone who understands Curl. Right. Yeah, it's actually a good ad. I thought it was the NASDAQ people messing up, but interesting. Well, it's still cool to see your command line, you know, program, like, blast it up on some big board somewhere.
Starting point is 00:20:04 Which makes me think of all of the, you can go through the list of companies that have used and projects that have used Curl as part of their product and all the people that have benefited over the years from your work. And it makes me think, how much work do you actually have into this thing? 17 years, you got all these contributors,
Starting point is 00:20:22 so obviously you're not the only one committing code. But if you had to think back and say, well, how many man hours do I have in curl? Whether it be coding or maintaining the mailing list or talking to people about bugs and troubleshooting. Could you even estimate that? How many man hours do you think you have into it? Yeah, I can do a rough estimate. Okay, let's hear it. I would say that over the years, I spend almost every day,
Starting point is 00:20:52 I spend about two hours on Curve. Wow. So that makes it around 15 hours a week for about 17 years. Wow. So 15 times 52 times 17, roughly? 13,260? Something like that. Somewhere around there, maybe you take a vacation.
Starting point is 00:21:14 Hopefully you take a vacation. Yeah, sometimes I take vacations, of course. But I've also done periods with more intense. Yeah, that's just the average. 13,260 hours, just based on the estimation. So what keeps you going? There's got to be more. There's got to be something.
Starting point is 00:21:32 We struggle with burnout. We talk about burnout with many people, especially when their project gets to become more successful than they ever planned. And it just becomes too much. How do you sustain it for 17 years? What drives that? I actually have a hard time
Starting point is 00:21:45 to really explain that. I mean, because I know a lot of people who get into the projects and work on them for a while and then drop out after a while. And of course, I have a lot of other projects that I've worked on and I haven't kept up going on those. So no, I think this has just become sort of my baby. I just really like where it's gone, and I like to see it go further, and I like to see it become better, and I want to fix the problems that I get reported and so on. So it just feels like this is kind of the hobby of my life. I'm stuck with this. I really enjoy it.
Starting point is 00:22:25 Do you still enjoy it today? Like you did back when it was first getting going? Oh yeah, I do. I enjoy, I enjoy working on it every day. So, yeah.
Starting point is 00:22:35 And I actually, without mentioning details, like now, for example, I've just today finished a conversation. So I'm going to do full-time curl development now for probably for a couple of months going forward. Yeah.
Starting point is 00:22:49 And I'm, I'm just thrilled about that. So yeah. That's interesting. Congrats on that. That's awesome. So what does full-time curl look like? Like what,
Starting point is 00:22:58 what's on your list of things to get done or to do? Is it, is it a list of bugs that have been driving you crazy or is it new features that, you know, what is it? Right now, it's mostly about getting all my remaining HTTP2 stuff done for curl. Nice.
Starting point is 00:23:14 Since HTTP2 is new and hot and everything, and I've implemented it, HTTP2 supporting curl, and it's there, but it's not completed, and it's not really there API-wise and libcurl-wise the way I want it to be, and the way I think a lot of users want it to be. So, man, just think about maintaining a project of this size, looking at contributors, and letting GitHub crunch your data, it looks like you have 481,000 lines added,
Starting point is 00:23:49 302,000 lines removed. What's the overall size of the code base now, roughly? It's not that terribly big. I think we're around 200k lines of code in the actual project, and there's a lot of tests and infrastructure around it. But the code in the actual tool and the library, it isn't that big a project.
Starting point is 00:24:19 So it doesn't feel unwieldy. It seems like projects as they grow, especially with how many protocols you support, over the years it seems like things tend to get unwieldy. Maybe the big rewrite starts becoming a thought. Have you ever had those kind of issues where you hit a wall and think about a rewrite or a different language and nowadays is it pretty easy to maintain and to add to? Well, of course, there have been some obstacles and points in time
Starting point is 00:24:44 when I've kind of ripped out a lot of junk and redone things internally. But I would say that I've never considered to change language. And of course, that's me being old and grumpy and doing things, coding C. But also, I think that actually a big explanation for curl's success is that it's massively portable. It builds and runs on just everything. That also helps everyone to use it on anything. I mean, I don't mean just Linux and Windows and Mac or whatever,
Starting point is 00:25:19 but every manageable RTOS or weird gaming systems or embedded systems and everything. So I kind of like that. And that's also why I've never considered to change programming language. And when it comes to things like
Starting point is 00:25:39 architectural decisions and how I made things work internally, we've actually been able to change that to a pretty large degree internally over the years without any significant rewrites, just ordinary development and just changing things over time. Let's get a little meta here real quick because I'm noticing that you actually have a link to a changelog on the site for Curl.
Starting point is 00:26:10 What has it been like, I guess, maintaining such a drastically long changelog? It would take me 25, 30 scrolls to scroll this entire changelog. I mean, I guess, is this manual? Since it's such a labor of love anyways and such a legacy project for you, meaning in terms of how important it is to this hobby of your whole life, what is it like to maintain such a long changelog? Well, I'd say that it's – that is part of what you sometimes forget what maintaining a project is. That is everything that isn't code, like the website and just putting things up and maintaining the change log or maintaining things like security, advisories or whatever. It's just making sure that the documentation looks good on the website or whatever.
Starting point is 00:27:03 So yeah, in terms of the specifics around the changelog, I do that not only manually. I have a lot of scripts, but I basically add the chunk for every new release at the time of every new release. So I did a release this Wednesday, and then I added the 7.42.0 details. So I inserted it on this Wednesday.
Starting point is 00:27:25 I'm going to do another release on this coming Wednesday, and then I'm going to add the blurb for the next release then. So it's all about that. And then I have a lot of scripts kind of gathering that information and kind of webifying it. You also have a pretty epic man page. Yes. It's actually kind of insane.
Starting point is 00:27:49 That's one of our problems, that we've added so much features and so much things that it gets hard to find your way around. So it's hard to write documentation when you have so much functionality. What about modularizing? Taking lib curl and breaking it up into smaller bits that maybe are protocol specific or some other arrangement that makes sense and then having a wrapper library that kind of pulls those all in. Have you considered architectural things like that?
Starting point is 00:28:23 I have, but I've never really found the motivation to really go there. So I've tried to ask my audience or users sometimes what users think and what they want from the library in terms of protocols and everything. And it turns out that a lot of users use a lot of protocols. So it's not only that we're supporting all those protocols just in vain, but there seems to be a lot of users using a lot of these protocols. So I'm not sure that it is a benefit for the project or the design to split it up either.
Starting point is 00:29:05 And also, a lot of the protocols are using shared code. So it's not, each single protocol aren't really that separated from the rest of them. Gotcha. This makes me think of another question, which is, how do you talk to your users? I mean, you have, I think you even said a billion users, and probably you don't even know all your users, especially when it's embedded in systems and whatnot. What's your tools and your communication channel
Starting point is 00:29:35 between you and your users? Yeah, it's really crappy. It's not good at all. That's how you really feel. No, but kind of the usual kind of open source problem that I release source code, and then it goes out in the world, and somebody gets the code and builds it
Starting point is 00:29:56 and builds a product and runs with it. And I have no idea who will do it and what will do with it and if they're happy or not. And maybe they'll never come back and ask me anything or say anything, and I wouldn't know about them. Actually, I mean, I have that list on the website called companies, that list, companies that I know about that use curl or lib curling commercial projects. And I would say that the majority of all those companies, I found out that by myself, just by Googling or kind of, I have a friend that find a screenshot somewhere and emails me a picture or whatever. So it's not that users tell me about it. So I don't really have a good channel to talk with most of my users. The ones I talk to, they are the ones who are on the mailing list
Starting point is 00:30:46 or those who ask me questions or those who come to me and have questions or to the project. Yeah, so it's kind of the squeaky wheel gets the oil type of a thing. Yeah, and of course that's a subset of the users and probably a particular subset that aren't all representative of the kind of... Yeah, that's the hard part, right? It's like, is this request serving my users or just this one particular, you know, loud user?
Starting point is 00:31:11 Exactly. Things you got to ask yourself. Yeah, so then I just have to kind of always try to sense that somehow and get a feel for, is this a good idea for the project or just for this user or or whatever but but often it all comes down to who's willing to do the work anyway so if if there's someone who brings code and thinks it's a good idea and it seems to match with a project in kind of conceptual wise and design wise then sure why not then it doesn't really matter if it's that user alone or an entire world as long as
Starting point is 00:31:47 it seems fine with the project. Let's take a pause here. We'll do a quick sponsor break when we come back. Considering the fact that you've been in the game so long with this project, we've got to imagine that you've been through several different version control systems. So we want to talk deeply about
Starting point is 00:32:03 your love-hate for version control systems. So we want to talk deeply about your, your love hate for a vertical control systems over the years. So let's, let's break real quick. We'll come back. We'll talk about that. You've heard me talk about top towel several times in this podcast and top towel is by far the best place to work as a freelance software developer. Well,
Starting point is 00:32:21 they have this term elite engineer, and that defines the kind of software developer that works at TopTile. I had a chance to sit down and talk to Brendan Benesha, the co-founder and COO of TopTile, and I asked him, Brendan, what is an elite engineer? Take a listen.
Starting point is 00:32:38 An elite engineer for us is somebody who satisfies all the technical requirements that you would need in a great developer if you're working at like a Google or Facebook. But then at TopTel, you have to add this extra layer on top of it to make sure that people are mature enough and professional enough to be totally self-directed. And so making sure that they take a tremendous amount of pride in their work and that they're accountable and very, very communicative because in remote freelancing, that's sometimes just as important as being technically competent. All right. If
Starting point is 00:33:11 Brendan got you excited about being an elite engineer at TopTile, head to toptile.com slash developers. That's T-O-P-T-A-L.com slash developers to learn more and tell them the cheese load sent you. All right, Daniel, we're back. Like I said before the break, 17 years at this, you must have been through pretty much every one, and now you're on GitHub, so you're obviously using Git now. You've been using Git for, I think, about a year now, right? Is that right, since you've been on GitHub?
Starting point is 00:33:45 No, it's like four years or three years or whatever. Where have I been at? Four years on GitHub? No, it's like four years or three years or whatever. Where have I been at? Four years on GitHub? Yeah, I think so. I don't remember exactly. We've been through a couple of different version control systems and we've switched to we actually switched to Git pretty late, actually.
Starting point is 00:34:01 So we stayed with CVS for forever. But that kind of also goes back to the fact that we're a small project and we're doing things very simple. We have a linear development, just a single branch basically all the time. So we don't have a lot of requirements on the virtual control system either. So it worked pretty good with CVS too. I mean, Git is way better and way more fancy,
Starting point is 00:34:28 and I really like it. So it's not that I regret it, but that's also an explanation why we could kind of stick with the old for so long. You mentioned... Sorry, go ahead, Jared. I was going to say, you started even back on RCS, which predated CVS,
Starting point is 00:34:44 and then you switched from CVS straight to Git. So you seem to have skipped the subversion time, which a lot of people want CVS subversion Git. You must have liked CVS OK. Speak to the migration process, and if you've been able to maintain your commit history over time, or if you just said, screw it, we're just going to switch. What was the migration between these different systems like? I could mention that I joined the Subversion Project immediately when it started. And I was part of the core contributor team in the Subversion Project for a couple of years. So I have a bunch of commits in that project too.
Starting point is 00:35:20 So I was kind of eager to see a good replacement to CVS back in those days. But you never got curl onto it, huh? No, I didn't. Pretty much for those reasons I mentioned, but it worked out pretty good the way it did. So I never... And then came those distributed version control systems.
Starting point is 00:35:39 I mean, after a couple of years, after Subversion was going, and then I kind of noticed that the distributed approach really seemed to be the way to go. So I kind of just waited out a little bit more and then switched to Git. And then I converted the entire CVS history I had to Git. And that was fairly easy too, also because we had that simple approach to development, mostly in a single branch.
Starting point is 00:36:12 So when I load up your guys' contribution history on GitHub, your 11,347 commits, that's probably going all the way back to the beginning, right? To the beginning of CVS. Or actually, I believe it might even be the beginning of SourceForge. Because we created the SourceForge project page in, I believe, late 99.
Starting point is 00:36:36 So I actually don't remember exactly why, but I don't have the commits before, I believe it's August 99 or something like that so those are the first commits I still have which is a bit unfortunate because I would really want to even know the ones but yeah
Starting point is 00:36:54 So you're happy with Git and I was wondering if you had one thing we've noticed especially I think with Rails specifically when it switched to Git and GitHub, there was a massive influx of contributors at that time. It looks like you have 202 code contributors over the years.
Starting point is 00:37:14 Curious if in the last, I guess it's been four years now, if it's been more than it was in the CVS days, or if it's kind of been the same, or what? I think we're gradually increasing all the time. But also Git, especially in comparison to CVS, it keeps track of authors much better. So it's also kind of a lie, because when we did it in CVS days,
Starting point is 00:37:40 you had to basically write it in the commit comments that you got this patch from whoever. But with Git, it keeps perfect track of who's writing it. So I think it's both. It's easier to keep track of who's providing it, and it's easier for users to contribute using Git. And I would say that it gets even easier when doing
Starting point is 00:38:06 it kind of GitHub style. I mean, with pull requests and even more automated systems. Yeah, and yet on your issues, your GitHub issues, you got 10 open issues, 36 closed. Do you have a different bug tracker
Starting point is 00:38:24 or is your code just incredibly awesome? No, we had a difference. We used the SourceForge bug tracker, and we used that all the way since 99, actually. And we only just very recently decided to stop using that. So we have like 1,400, 1,500 bugs there. But since we're kind of so much in GitHub... That sounds more like it. Yeah. But since we're kind of so much in GitHub. That sounds more like it.
Starting point is 00:38:46 Yeah. But since we switched to GitHub so much now, it's easier to also handle the issues on GitHub, issues, pull requests, and the code on GitHub. Also, the bug tracker on SourceForge isn't that very good either. I was going to say that at least gives you, I mean, having GitHub in comparison to SourceForge
Starting point is 00:39:04 from back in the day, it's got to give you at least, when you talked before about how you talk to your users, it's got to give you at least a better window than you've had before. Yes. SourceForge was really kind of the big thing back in the day, but of course it has kind of gradually kind of faded away somehow. And GitHub is now really where everyone is and where things are happening. So of course it's much better to be in GitHub in comparison to SourceForge, because nowadays everyone has a GitHub account and has presence in GitHub and comparison to SourceForge because nowadays everyone has a GitHub account
Starting point is 00:39:45 and has presence in GitHub and not on SourceForge. So it's also kind of a matter of the least resistance. People are already there, so it's easier for people to contribute when we allow everything on GitHub. This may be an insignificant thing to most people, but I like to have a little fun on projects like yours on GitHub. And I like to go through the page history and I try to hack the URL to
Starting point is 00:40:09 figure out how far back I can go. And I was able to take us back 554 pages, I guess, of commit history. So I don't know what the commit count is per page, maybe like 30 or 40, maybe 25 potentially. I don't know if it commit count is per page, maybe like 30 or 40, maybe 25 potentially. I don't know if it's time-based or not, like how many commits go on each page, but 554 pages of commit history you have.
Starting point is 00:40:36 That's crazy, man. Yeah, there's a lot. The initial commit message was initial revision, December 29th, 1999. And the next one after that was remove junk files. I'm glad you got rid of those junk files. Almost immediately. Yeah, but that was kind of an import into CVS. I guess I imported a lot of junk then, so I had to remove a lot of junk.
Starting point is 00:41:03 So version control has changed over the years. Another thing that's changed, it seems, in the Curl project is your guys' license. Can you take us through the different license variations and maybe some of the reasons for the transitions away from and to other licenses? Yeah, we've kind of transitioned through a lot of licenses. We started out GPL from from the start i believe and i don't
Starting point is 00:41:29 think i paid a lot of attention to licenses then i basically just picked one that i thought a lot of others used or i don't remember exactly what kind of process i had when i picked the license but anyway um after a couple of years i kind of of felt that I'm not really a GPL guy. I'm not convinced that the copyleft idea is a good idea in general, especially not for libraries. And I also got some pressure from users who were kind of saying that they were, I mean, contemplating to use curl in their products, but they couldn't do it because of the GPL and they wanted to have a more liberal license. So, and I kind of, after a couple of years, then I kind of,
Starting point is 00:42:16 yeah, I realized that it might not really be the guy I am. So I changed the license and then, and then we picked the Mozilla public license, the MPL, because I thought that was kind of a middle ground. It's not really cop left, but it's cop left
Starting point is 00:42:36 for the specific files that are included in the project. So it would mean that if you change actual files, you have to provide the source code for those. And I thought it kind of matched more. It was more in line with what I think is reasonable.
Starting point is 00:42:54 But it didn't go very far or long until I realized that it wasn't a good choice either because MPL isn't even considered GPL compliant. So then suddenly I got kind of the reverse problem that people who were using GPL in the projects, they couldn't use Libcurl anymore because it wasn't compliant license-wise. So then I was kind of in another annoying position.
Starting point is 00:43:24 And then for a while I added a license, I added dual licensed. I don't even remember which licenses. What's the license now? Now it's MIT. MIT. Yeah. So you kind of took a windy road
Starting point is 00:43:40 to what is one of the most liberal licenses. Exactly, yeah. What kind of a man you are. Then I dropped that dual license thing and just, yeah, we're going MIT license here completely as liberal as possible. Do whatever you want. Just don't say that you made it. I like that personal identification with't say that you made it. I like that personal identification with the license that you're picking.
Starting point is 00:44:08 You're thinking, I don't think I'm a GPL man. Yeah, I like that too. It's a nice way of thinking about it. And do you think that the MIT, since that change, has helped or hurt? Are you happy with it? I'm happy with it. and I think it's helped.
Starting point is 00:44:26 And I don't think it has hurt us at all. I think I've managed pretty good, and I don't think I've been... I actually don't think we've been... We would have been able to manage a lot better than we have
Starting point is 00:44:40 if we'd have picked another license. I think this license has made it possible for all sorts of companies to adopt and use Libcurl all over. And of course, there's been companies and whoever have used Libcurl and done changes and who never contributed back. But we've been keeping a pretty high development pace over the years. So I know for a fact that a lot of companies, they want to contribute back so that they can follow the development and they don't have to maintain anything on their own or do their own forks or branches or patch sets or whatever.
Starting point is 00:45:17 So I think the LibreLicense has helped companies to not be afraid to use Libcurl. And then in the end, they usually contribute back anyway, if they do any substantial changes. And at the same time, all those, I mean, the GNU projects and everything, those who are then GPL or whoever, they can still use Libcurl perfectly fine, and they are all happy to use it, since it's perfectly free and open source still. You'd mentioned that in the past you've been, I think, I don't know if you use the word bounty or not, but you've been paid to implement certain features
Starting point is 00:45:55 either in a particular branch for a certain company or even if it made it into mainline. But over the years, you've had several employments that have either helped or hurt you maintaining Curl. Can you walk us through some of that and then ultimately bring us to where you're at today at Mozilla in terms of their support for Curl and your work for it? I've been employed by four different companies while working on Curl, I think.
Starting point is 00:46:23 But I've pretty much successfully been able to to not have that influence my work on curl too much so i basically always had curl as my spare time project and done my work stuff separately from curl right so i don't think that has influenced me a lot and then over the years of course when i've got i started working for my own company and when was that like five six years ago then it turned much easier to do contracts for for i mean for money to actually implement features for companies to that one of that so then i've actually i've done a i don't remember how many but perhaps five seven different projects for companies that have paid
Starting point is 00:47:14 me to do things for curl and usually actually those companies they don't want it they don't want it even to be known that they're paying for it. So usually it has never been that obvious to the outside that someone else has paid me to do it. This is an odd question, I guess, to ask, but I've asked this to myself sometimes because I'm self-employed. And Jared, you are too, uh you might like this question but if you it's earlier we got the average out potentially 13 000 plus hours uh that you've invested in this do you think that you made minimum wage for those hours or at least i mean are you the money that you've been able to make as part of taking care of curl or being paid to work on it for a couple hours a day like you are now at mozilla have you been able to at least make minimum wage or well above that do you think
Starting point is 00:48:09 you've been compensated well for for the time that's been invested i guess um i'm not sure i mean partly it is my hobby so i mean you don't really care people are people have hobbies so they don't expect to get paid to have a hobby. I don't mean so that we could justify, oh, you got paid or not. But I think of it like for myself, like the time I invest in something, I just wonder have I at least – am I plus or minus? I'm in the red or am I in the black? And it's not so much to say justified in making money, but just as like, oh, I'm in the red on this one. I didn't make that much.
Starting point is 00:48:42 I just love this thing so much. Yeah, but I just wanted to say that about hobbies since I do it for fun. So it's not really about getting paid for it. But then on the other hand, I think it's been, as I said, it's my big hobby since a lot of years. And I think it has influenced my life and my career and everything I do pretty much.
Starting point is 00:49:01 So where I am today is a lot because of what I've done. So I think in the end, I think it's been really helpful. I mean, I got this since I work for Mozilla now. So it was really, I mean, the hiring process at Mozilla has been a lot of talking about, yeah, I have a lot of code in public and I do know a lot about protocols. And I didn't have to explain have a lot of code in public and I do know a lot about protocols and I didn't have to explain that a lot.
Starting point is 00:49:30 Everything is there. Everything is public. Well, Jerry read the list earlier, so. Yeah, exactly. So I think, for example, then I'm here, I'm working for Mozilla today, a lot thanks to my work with Curl, of course.
Starting point is 00:49:43 So it kind of, it has, what started a long time ago is now at this point. And I would say that, I mean, I've done so much fun and I think I've managed so well in so many areas. So yeah, I would say that I'm definitely a net win with everything of this, taking all those 13,000 hours into account. It's like the ultimate hacker credential. It's like I wrote curl and then they just hire you, right? Yeah, pretty much.
Starting point is 00:50:17 That's funny you say that because I guess it's okay to say it on air. But before we got on the call, we were joking. So before we actually heard everyone's list of this before you heard that i was like dan you're like the you know the og and then we said the the oh for the original hacker because like you know you've been there since essentially the dawn of the internet almost and you've wrote this library that billions of people use so you can't get much more OG or OH than that. Unless you're Linus Torvalds. Tim Berners-Lee. Yeah, Tim Berners-Lee. Yeah, well, of course, you can't think of a lot of people.
Starting point is 00:50:54 There's been a lot that's changed over the years. We talked about the name changing. We talked about your version control systems changing, your license changing. You had four different jobs. If there was anything that stayed the same over the 17-year lifespan of this project, what would that be? I think there's a lot of things that are still the same.
Starting point is 00:51:18 Working open source, you work with people, and I think that people are mostly the same still. So there are, I would say that there are still the same, the same whiners, the same people who are doing things, the same, the same type of criticism and the same type of, so yeah, I think that no matter, no matter what you do and no matter how much success or, or how many users we get in the code project, I don't think there's, it doesn't really change the human mind or the mental state in people.
Starting point is 00:51:54 So there's always that, I shouldn't say always, but I keep getting those annoying emails that I have to kind of resist and really keep back when I respond to them and so on. So that is kind of a... And you know how things can be in open source projects. It can be really rough and you have to have a really thick skin at times because people don't hold back on what they say and write in emails or whatever. But of course, it's also the opposite. So it's a lot of good stuff too.
Starting point is 00:52:29 Well, for those who... Sorry, go ahead. No, no, go ahead. I was going to say, for those who listen to the show, they know we have some awesome closing questions we tail off the call with. But I'm kind of curious what your favorite moment over the last 17 years might have been.
Starting point is 00:52:49 Like, if there's something that just clearly stands out to you as like, that was the day or that was the thing or this is the favorite feature or what in the last 17 years was maybe one of your most favorite moments? I think there's been a lot of good moments, in particular when I realized who have been using curl. Like, wow, suddenly I realized that Facebook uses curl. And then I suddenly realized, wow, that's quite a lot of users or stuff like that. But I especially remember one moment. That is when I saw that the billboard outside somewhere in Silicon Valley,
Starting point is 00:53:26 there was a billboard with the curl command line on. Pretty much like this new one. It was NASDAQ. NASDAQ. Yeah. It was a bunch of years ago when it was an ad for some... I don't remember really what it was. But it was a big freaking curl command line
Starting point is 00:53:45 on a billboard in Silicon Valley. That was a good moment. I think one thing that really resonated with Jim Ryrick, I can't say his name, Ryrick, who's a Ruby developer and one who passed away recently, but it touched a lot of people. One of his favorite things to do was to go to the apple store and fire up a terminal and do man rake um yeah rake
Starting point is 00:54:13 was kind of his bait his baby uh he had many libraries but that was one of his his bigger ones and have his name there of course you you could do man curl as well i wonder you're kind of a Linux hacker. I wonder if being included in different distributions, maybe the one that you use, was a shining moment for you, or if being included in Apple's operating system or anything like that was something that resonated with you. Well, of course.
Starting point is 00:54:43 It's really satisfying and kind of an ego boost thing but but also it's um it's also kind of a i mean as i said they don't tell you about it it wasn't that uh they someone called me and said hey we're using your stuff it's more like suddenly one day someone mentioned it to me oh you know that it's included here. Oh, look, they've been doing it for years. And I had no idea. So in a lot of these cases, I don't know it. Exactly. I don't know it when it happens.
Starting point is 00:55:13 I just realized at some point in time that, oh, they've been doing this for how long they've been doing it. Like the Apple case, for example. I have no idea when I realized Apple was including curl all the time. I have no idea. Sneaky, sneaky Apple. But of course, it's a huge ego boost. And I mean, these days, so many things are network connected. So there are an enormous amount of things that are using curl just to download things.
Starting point is 00:55:46 And these days, there are so many different things like cars or TVs or printers or routers or whatever. And it's fascinating. We have a couple questions for you. I know we shared them earlier. So you may have been thinking about a couple of these, but one favorite we love to ask, and I'm really curious to hear what yours is, but who is your programming hero?
Starting point is 00:56:15 Yeah, I've been thinking about that question. I think it's a good question. I don't know. I would say that the one who immediately came to mind is Richard Stallman. And then because that's kind of one of those original guys who managed to do so much. The guy who made GCC, Emacs, GDB, and a lot of those early days tools that are still around. Even if I would say that he's not possibly my hero these days.
Starting point is 00:56:48 You can say he may not care too much since you switched off the GPL. You probably quit listening right about then. Yeah, he's an interesting character in general, actually. Then I would say that also like people like Linus Torvalds for example is also
Starting point is 00:57:08 someone who managed who has managed to get to a point and do what he likes in a
Starting point is 00:57:14 way with kind of keep integrity and stuff in a very successful way but yeah
Starting point is 00:57:22 I'm impressed by that and I would I would like to get into a position like that but i mean i shouldn't complain i'm in a excellent position myself right now you asked before i didn't mention it but these days and when i'm employed by Mozilla, I'm getting paid to actually work on curl part-time. So I do part-time curl on work hours these days. Well, I would say that Mozilla is pretty interested in security and just the general ability for the internet. So I would say that it's nice to see them to say, yeah, go ahead, Daniel.
Starting point is 00:58:02 Work on curl when you get a chance during your workday. Yeah, it matches with what Mozilla stands for and wants to do. I know that this is using some of your language you've written elsewhere on the curl site or on your own site. You mentioned you got a long list of things to do. You mentioned you got this upcoming two-month span of working full-time. But while you're doing that or maybe in the future when somebody picks up this podcast and listens to it and says, heck, I think Curl's pretty neat. I'd like to hack on some C. Maybe
Starting point is 00:58:35 Daniel's got a little to-do list somewhere. What's a call to arms? What's something that the community listening to this show could pick up and help you on to help Cur curl be a better curl for tomorrow in general for an open source project where all open source projects really not all but most of them are undermanned in terms of people who are actually doing things so so for for me for example i would appreciate if people would just help with bug reports and just help reproduce bug reports or just help try out patches. There's just an endless amount of things that could be done.
Starting point is 00:59:14 Then there's, of course, also this. I have, for example, a to-do list that lists, I believe, like 20, 40, 60 things that we could add to curl if somebody wanted to do it and somebody just spent the time and energy to do it. So there's really, there's both highs and lows depending on what you can do and what you feel for. Let's talk about your open source radar then.
Starting point is 00:59:44 Since this is your labor of love it seems like it might be the only thing you get to play with but if you had a weekend is there any project out there that that's in the open source world that like man if i only didn't have all these bugs for curl to take care of i would totally hack on that this weekend what might that project be or even technology not so much as a project like uh could be vms for better testing you know could be docker for better testing or something like that i'm a library foundation kind of person so whatever i do is usually kind of around those is networking its libraries it's doing things like that so if i would do it i mean if i if i have a weekend off some at some point i don't do a new project i spend time on my existing project but if i would
Starting point is 01:00:33 do a new project i would it would be around networking and doing things improving things that i'm already kind of working on i'm trying most of my things, most of the new things I do, they usually kind of are related to what I'm already doing. So like I started on a speedy library previously to do the speedy protocol and stuff like that, because then I could use that in the existing projects that I do.
Starting point is 01:01:01 So I'm kind of narrow and I kind of, I don't experiment. I don't go very, very far from So I'm kind of narrow and I kind of, I don't experiment. I don't go very, very far from what I'm doing. You got your safe trail and you like to hang out there. Yeah. I kind of, I like my little cozy corner here. So I'm, I don't know that at all. Right. That's good stuff. Well, uh, you know, with such history and such you know og behind you i can't help but just be uh excited to have this conversation with you i know that it's been a long road but it seems like you've been having fun along the way somehow you've stayed motivated
Starting point is 01:01:36 somehow you've stayed uh excited about it and you keep caring for this labor of love you've had your code on billboards and billions of people using it, and you've got some of the most highest accolades with Facebook and many, many other people using your code every day in their projects. It's got to be a good feeling for you to sort of sit back and look at the last 17 years and say, that was time put to good use. Oh, yeah.
Starting point is 01:02:07 When I actually just do that i mean stop stay and and consider all that all those users all those products all those companies using it yeah that that makes it feels really good and as i said before it's an ego boost and of course i I contributed or even had a big part of that. And it's an awesome feeling. But then, yeah, that's about it. And then I go back to do the work. Take a moment, enjoy it, and then you go back to work. I know at the end of your 17-year birthday post, you were like,
Starting point is 01:02:42 have a beer with me, but only have one because we got work work to do and there's bugs to take care of and test. Right. So I know it's been an honor for me and Jared to have you on this call. It definitely was great getting to know you in here about, about all the things you're working on a couple for listeners listening. We've got a couple of shows coming up. We still have to schedule the roots and bedrock show. So if you're interested in WordPress and the
Starting point is 01:03:06 Bedrock way of doing things for WordPress, can't wait to have the conversation, but we haven't put it back on the book yet. However, we do have May 1st scheduled. That's next Friday. We're talking to Steve Newcomb about the famous interface
Starting point is 01:03:22 library framework. Super cool conversation there. We're hoping to see where that's... I'm not really sure where that's fitting, Jared, especially with all this React news. And we talked a little bit about that on that show, I believe. So I'm really curious to see where Steve's sitting with Famous. I'm going to find out next week. Way off the path of Curl, of course.
Starting point is 01:03:38 But nonetheless, still a fun conversation. Daniel, is there anything else that you want to cover before we taper off? I'm good. else that you want to cover before we, before we taper off? I'm good. Anything else you want to say to the audience, you know, where can they find you? Where can they follow you?
Starting point is 01:03:50 Well, everything I do and everything I play with is on my website at daniel.hacks.se, H-A-X-S dot S-E. And I'm back there on Twitter. That's about it. Gotcha. And we'll link that up in the show notes.
Starting point is 01:04:06 So if you're listening to this, head to the show notes, changelog.com. That's right, changelog.com, not the changelog. Jared, we just changed from the changelog.com to changelog.com. How cool is that? We shed a few pounds. We did. You know, three characters. And we're HTTPS now, too.
Starting point is 01:04:22 So we're ready for the future. Totally secure. Now we've got to get HTTP2 rolled out. That's true. and we're HTTPS now too so we're ready for the future totally secure now we gotta get HTTP2 rolled out maybe we can get Daniel offline to help us out any day soon so for those wanting to show notes to this show it's changelog.com
Starting point is 01:04:38 slash 153 because this is episode 153 but Daniel thank you so much for taking the time to talk to us and with that everybody let's say goodbye bye bye see ya I love you.

There aren't comments yet for this episode. Click on any sentence in the transcript to leave a comment.