Bozhidar Batsov

Sustainable OSS Development

Bozhidar is the author of RuboCop, Cider, Prelude, Projectile, and many other popular open-source projects. He has been doing open-source development for more than a decade, sustainably. Not an easy task!

In this talk, Bozhidar walks us through what it is to maintain, and sustain, open-source projects for the long term.

Balkan Ruby 2024

00:00:06.080 Thank you, everybody. So here we go with sustainable open source software development—whatever that means.
00:00:11.840 First, I have to say that today is a very special moment for me to be here and see you all. I see a lot of old friends in the audience, and I hope to make a few new friends before the conference is over.
00:00:17.320 I haven't been present much in the past few years. This is actually the very first time I am speaking in Bulgaria since 2019.
00:00:20.039 I wonder why that is, and before the conference, I was told that a close friend of mine was circulating the rumor that this is the very last talk I'll ever give, so I better do it well.
00:00:26.480 You might have noticed that my profile picture across social media is from the last conference in Bulgaria, so I really need a good new profile picture.
00:01:06.759 What has happened in those five years? One thing you know, but there are many things that you might not know. Let's start with the good stuff: Ruby 3 is finally real. I long traveled around the world claiming this would never happen, so I guess I was wrong.
00:01:11.159 Some even more improbable things have occurred, like Manchester City surprisingly winning the Champions League and Argentina winning the World Cup. I didn't see that coming. Napoli also won Serie A without Don Diego.
00:01:19.720 And here's where it gets really crazy: this is the man who has been in charge of saving Bulgarian football. So I don't know, in Bulgaria, impossible is truly nothing.
00:01:26.480 But still, on the other hand, a lot of things remain more or less the same, like my name and my handle on most social media platforms. However, Elon Musk made it more interesting this time because he compelled me to embrace some new things.
00:01:35.640 I now have different handles here and there. I'm not sure if this is the right logo I'm looking at, but it certainly is a Mastodon logo.
00:01:44.000 Absolutely, I am older today, allegedly wiser, but not really. If I were wiser, would I inflict four hours of this upon myself? It gets worse.
00:01:48.560 I recently decided to reread the Wheel of Time. It is just as bad as I remembered, and it has been taking me about two years to get through it. It's quite hard, but I’m glad June is solid.
00:02:01.640 Third time's the charm! Finally, a good Dune movie, and the books are still worth rereading.
00:02:06.040 Now, do I have something about programming in this talk?
00:02:08.960 This is important. My talk was supposed to be excellent, but I discovered Fallout, and I didn't work on the presentation at all. I can tell you that Fallout is really great, though.
00:02:14.399 Also, another thing that has changed is this: I used to be able to drink like Nick, but now I am older, not wiser. I drink only wine because I'm a weak man. But I drink only German wine.
00:02:19.600 This part is especially dedicated to my friend Chavier because absolutely nobody in their right mind is going to appreciate it. We share a passion for mechanical watches. This is how my Instagram looks right now.
00:02:26.760 Oh yes, obviously I like watches. I'm not sure who this guy is, so somebody should tell me after my presentation.
00:02:30.640 But I'm the kind of weirdo who watches Apocalypse Now and notes that Martin Sheen wears a lovely Seiko 6105, and Marlon Brando wears a Rolex GMT Master.
00:02:37.760 The filmmakers really had something to say about watches because you can see the tension—the competition between Japan and the old world. Good stuff.
00:02:41.839 This is actually the watch I am wearing right now, the watch from Apocalypse Now.
00:02:43.839 And, I realized one thing: if you have a Seiko watch on your left arm, this makes you a 30% better Ruby programmer.
00:02:49.760 If you have Casio, 40%. If you have Citizen, it has no effect even though it's made in Japan.
00:02:52.560 If you are Nick and you only believe in... well, this is the only word in German that I know other than Prost.
00:02:56.480 Nick approves. Yes, there is something about programming in this talk as well.
00:03:02.080 I'm still doing a lot of open-source work, even though this slide hasn’t been updated since October 2013.
00:03:06.080 I haven’t updated it because I know it is going to look a lot worse right now.
00:03:10.000 I've done some things in the Ruby community that you might hate. I will mention that RuboCop, since very recently, supports the new super modern, super fast parser.
00:03:13.000 In other words, it's even faster. It had a small birthday on the 21st of April.
00:03:19.040 For open-source projects, I think years should be multiplied by 10 or 20, so RuboCop is like a 120-year-old person. This means something.
00:03:25.600 We achieve some small milestones here and there.
00:03:28.720 I noticed that RuboCop is the 68th most downloaded gem in Ruby's history.
00:03:32.080 Interestingly, some other gems like Ruby Progress Bar and Rainbow are dependencies of RuboCop.
00:03:35.120 So when you become a dependency of RuboCop, you immediately get 400 million downloads for free, which is nice.
00:03:39.920 As our MC alluded to at the beginning, I have done some other open-source work as well, mostly in the Clojure community with the Cider IDE.
00:03:43.760 Are there any Clojure developers here? One? That's underwhelming.
00:03:47.160 Any IMO users here? I should just leave the stage.
00:03:49.680 But I'm not saying this to boast. I'm saying this because I feel I'm kind of qualified to speak on today's subject.
00:03:52.160 Namely, sustainable open-source development.
00:03:54.160 I know what you're wondering right now: sustainable open-source development? I thought this is something fun.
00:03:59.360 You know, you have some free time and you create a project? Well, I think it's not as simple as that.
00:04:01.200 First of all, there are broadly two types of open-source projects.
00:04:04.160 Number one is enterprise open-source. You all know it—hopefully, you hate it as much as RuboCop does.
00:04:09.040 Enterprise software always seems like such an exciting term, something that maybe came out of Star Wars.
00:04:12.000 But in reality, the main thing that enterprise software has going for it is that it's sustainable out of the box, which makes it boring.
00:04:15.120 We are going to talk today more about the other category: hobby or hacker open-source.
00:04:20.960 I call it H because I want to invent new abbreviations. Some people call it TROS or TOSS, but I think H is better.
00:04:27.360 This is the type of project that you start and keep going for a reason that you're not completely aware of.
00:04:31.760 I'm going to tell you the story of an open-source developer named Nick Sutterer.
00:04:34.960 Nick had a problem he was passionate about. Do you have any ideas what it might be?
00:04:39.560 No? Okay, he didn't have plans for world domination, even though Germans typically do.
00:04:42.760 Others found his brilliant work. They felt it was useful and improved upon the Ruby on Rails experience.
00:04:47.640 Nick achieved world fame, whatever that means, but now he was kind of sad.
00:04:51.360 He had to do work he never envisioned or wanted to do.
00:04:54.360 He had to attend many conferences and meet people, which made him feel miserable.
00:04:58.080 Nick doesn’t like people, and he doesn't like drinks. Most importantly, he doesn’t like working on tasks he doesn't care about.
00:05:02.600 Like many feature requests he receives for Trailblazer, at some point, his hobby project became more about work with no pay.
00:05:09.640 As you can see, Nick is miserable; he feels the pressure of countless responsibilities.
00:05:13.040 When he started with open source, he felt he would only try to write beautiful code.
00:05:16.560 But the responsibilities of open-source maintainers stretch far and wide, going beyond just writing code.
00:05:20.080 You do get to write some code, but you have to review a lot more if you maintain a successful project.
00:05:24.000 Everything I’m saying today revolves around successful projects because if you don’t have users, you don’t have problems.
00:05:29.760 You're lucky if your projects are sustainable, but success brings problems.
00:05:34.000 So don't become successful, like, ever.
00:05:36.720 You also have to write documentation because now you have users demanding to know how your project works.
00:05:40.080 You have to manage the project because people want to know what's the five-year roadmap.
00:05:43.920 You have to provide world-class support for free across multiple channels: chat platforms, GitHub, mailing lists.
00:05:48.080 You have to engage in community activities and promote what's happening.
00:05:52.760 Sometimes even engage in friendly wars with adjacent projects in your drive for world domination.
00:05:57.560 You have to explain how their projects are inferior and yours is the one true solution.
00:06:01.040 In reality, this applies mostly to IMX and every other community.
00:06:04.760 You also have to deal with a lot of unhappy users and random attacks.
00:06:08.079 Anyone who has been in the open-source community for a while understands this.
00:06:12.239 I have experienced a few of these, and the Ruby community can be more vicious than others.
00:06:16.239 There used to be a fun website called Ruby Dramas, which would keep a countdown of days since the last drama.
00:06:19.599 I think they shut it down because it was so depressing.
00:06:25.680 I can share many stories about the weird things I have experienced.
00:06:28.160 I remember once I was accused of endorsing totalitarian regimes just because I named my project RuboCop.
00:06:32.160 That was an interesting accusation, and I have to tell you nothing has been more demotivating in my open-source work.
00:06:36.040 The countless dramas and every little storm in a teacup make me say 'I am done,' because there's only so much pain a sane person can endure for something fundamentally meaningless like software.
00:06:40.160 So can we make this better? Can we make open-source sustainability more achievable?
00:06:43.440 Let's start with the most obvious. In recent years, there has been a proliferation of funding platforms.
00:06:48.960 You all know them; they have some differences, but fundamentally the core idea is the same: print money out of thin air.
00:06:51.520 As it is commonly called, donations. You sign up for every donation platform and receive a lot of donations.
00:06:55.840 Then you quit your job and become a full-time open-source developer. Fantastic, right?
00:07:01.440 But has this actually happened to many people? I don't think so. I know a lot of individuals in various communities, and I know of fewer than three who have made it work in this way.
00:07:08.000 They all had to make significant sacrifices in their lives. So, it's safe to say that donations are not a viable business model.
00:07:13.200 Interestingly, even tipping in restaurants and bars is a more viable model than donations.
00:07:18.080 Why? Because we have this social contract with tipping. You go to a restaurant, you're happy with the service, you leave a tip.
00:07:24.560 You go to a bar, you're happy with the service, you leave a tip. But if you work with something nonstop, are you going to leave a tip?
00:07:30.040 No, because that's not what society expects. Society has decided that if it has 'free' in the name, it is free.
00:07:34.959 Also, donations are very vulnerable to economic cycles. This is how the donations for all of my projects have looked in the last three years.
00:07:40.639 Irena mentioned that her company hasn't had layoffs. That's fantastic, but a lot of companies have had layoffs.
00:07:44.160 And they have cut whatever budget they allocated for open source, so they stop supporting it.
00:07:49.760 On average, across platforms and projects, all of my projects are down by 30% to 50% in terms of donations.
00:07:55.040 If this was my livelihood, I would be having a very tough time right now.
00:07:59.840 Do you know what the email I receive most often these days is? "Can you please fix this?'"
00:08:05.040 Luckily for me, I have a real job, so I don't need the money.
00:08:08.720 Everything I do in open source, I do because I enjoy it.
00:08:11.520 But this shows how unsustainable the entire community is; some people find themselves in tough situations.
00:08:15.920 A key contributor of Cider lost his job last year, and I made the hard decision to allocate all the money raised to support him.
00:08:20.520 He needed to support a family, and he was very knowledgeable, so he got a lot done.
00:08:23.480 But he has made more money out of my project than I have, which is always a little funny.
00:08:30.400 So okay, relying on donations doesn't work. What else can we do?
00:08:34.240 Next, we can try crowdfunded focused campaigns. For example, I say that if you give me €20,000 in two months, I'll make RuboCop five times faster.
00:08:39.200 Maybe I can pull this off once, but can I pull it off two times or three times? That's not sustainable.
00:08:44.240 I can give you examples outside the realm of programming. Remember how much money went to donations for Ukraine two years ago?
00:08:48.320 Compare it to the donations they are receiving today, and the war is just as bad. People cannot commit that way; it’s human nature.
00:08:54.960 Okay, let’s try something else. Let’s apply for funding at a community foundation.
00:08:58.160 In the Ruby community, we have Rubies Together. In the Clojure community, we have Closures Together.
00:09:02.720 But unless you have a huge project, in the Ruby community, you're not getting funding.
00:09:06.560 Even RuboCop is not considered important enough to get funding.
00:09:10.840 In the Clojure community, you might be more successful; sadly, the reality is that unless your project is critical, you’re unlikely to receive money.
00:09:15.520 Let's try something else: dual licensing. This is the holy grail!
00:09:20.199 I’ll make it open-source and enterprise at the same time, charging for feature support.
00:09:24.000 I shoot for the moon or even beyond it, but I can only think of two projects in the Ruby community that have attempted this.
00:09:27.600 They did transition to this model, but why is this the case? Because the open-source community is brutal.
00:09:33.760 Every time a project tries to monetize in some way, they're immediately accused of all sorts of evils.
00:09:40.960 Literally, people chase after them with torches and pitchforks. So I’d rather avoid that and stay unsustainable.
00:09:49.040 I think the key to sustainability lies elsewhere. First, adopt the EOS principle: keep calm and don't give a...
00:09:55.040 I’m not sure if I can say it, but I have said it so many times. Don't give a damn about the haters because they don’t deserve it.
00:09:59.999 We continue. In another dream scenario, you get hired by a big user of your project.
00:10:05.840 We've seen this a few times with key members of the Ruby community who got hired by GitHub or Red Hat.
00:10:10.000 But all of them were super famous, realizing that the community is a lot bigger.
00:10:12.200 The chances of something like this happening are slim to none.
00:10:18.000 Okay, let's try something else. Maybe we don’t need money at all. Maybe the key to happiness is in the mindset.
00:10:23.600 One of the most important things is to become a worse person. You have to say no when you receive requests that create significant maintenance overhead.
00:10:28.799 This happens because many features in bigger projects are things I never needed and never use.
00:10:33.600 But I have to fix and explain them to users, and provide support for them.
00:10:37.250 This can be really demotivating. This is the reason why RuboCop has 342 open issues.
00:10:40.000 These are not problems for me; they are for someone else. I’m not getting paid to fix them, and unless someone wants to fix them, they won’t be fixed.
00:10:45.200 To keep my passion and not lose my mind, I’ve realized I need to keep things simple.
00:10:49.200 I have to focus on what I am passionate about and not what users are passionate about.
00:10:53.960 If users want to come and maintain it forever, that’s one thing.
00:10:56.560 But usually, when you ask them about forever, they run away.
00:10:59.040 Instead, I want to keep the magic alive by sticking to what I value and cherish.
00:11:03.240 It’s also crucial to decrease the bus factor for every project.
00:11:06.960 Not everything should rely upon me, and I shouldn’t be paged constantly for random critical problems.
00:11:10.720 It’s important to find other maintainers, especially if you happen to be the steward of a bigger project.
00:11:13.520 In RuboCop, I’ve achieved this to a great extent, and the good news is that if something were to happen to me, RuboCop would continue.
00:11:17.200 It might not be as fun, but it would get the job done.
00:11:20.720 Having a larger community helps avoid issues like the infamous Exif fiasco.
00:11:26.160 Many have discussed what happened, but fundamentally, the problem was that an overworked maintainer needed help.
00:11:29.280 Some malicious person volunteered to help, and that led to significant mishaps.
00:11:32.640 I don’t blame the maintainer; I blame the entire community for allowing it to reach that tipping or breaking point.
00:11:38.560 So my recipe for success and sustainability is very simple.
00:11:41.520 Open-source software is sustainable when it is fun.
00:11:45.600 Ideally, it should also be funded, combining fun and funding.
00:11:49.920 When I was working on this talk, I kept flashing back to a very infamous rant.
00:11:52.840 It was about how open source is not about you, voiced by Rich Hickey, the author of Clojure years ago.
00:11:57.760 I didn’t agree with everything he said at the time, but now it feels like something I would have written myself.
00:12:02.160 At the end of the day, the only people entitled to say how open source ought to work are the people who run the projects.
00:12:06.560 And their entitlement extends only to their own projects.
00:12:10.240 Just because someone open-sources something doesn't mean they owe the world a change in their status or effort.
00:12:14.880 As a user of something open source, you aren’t entitled to anything.
00:12:17.520 You aren’t entitled to contribute, features, or the attention of maintainers.
00:12:20.400 You are not entitled to have your complaints valued.
00:12:23.440 I dedicate this talk to the deepest and most profound open-source maintainer I’ve met: Nick.
00:12:28.800 Thank you! It was my honor to be here.