Gabriel Sheeley

2024-01-29

Read Time: 5 mins

Working with Open Source Software

open source

There is a classic cartoon by the artist and author Randall Munroe that describes modern digital infrastructure. It shows a large stack of blocks of varying sizes, reminiscent of the towers we built as children. However, the foundation of the monolith is built in part upon a very small piece, which, if it were removed, would cause the entire structure to collapse. This small piece is the project that some random person in Nebraska has been thanklessly maintaining for free since 2003.

While this is a comical take on the digital industry it is painfully poignant. An excellent real world example of this would be a small software library called ‘cURL’ (commonly referred to as “curl”). While most non-developers have never heard of curl it is one of the most widely used libraries in the world. According to the curl website there are more than 20 billion installations of curl worldwide, with some of most widely used applications on the internet using it. Even outside of the web you can find curl being used everywhere.

According to Daniel Stenberg (the author and maintainer of curl) 8 of the top 10 car brands in the world use curl in their vehicles. You would think that for a tool that is so widely used that the creator would be rolling in cash. However, curl is a type of software referred to as open source. This means that the code which defines curl is open to the public.

It can be used for free. It can be modified without needing express permission. It can be used in a money generating application (like YouTube) without the authors of curl being entitled to a portion of that income. Daniel himself talks about his motivation behind doing this in this Stack Overflow post.

In fact, a lot of open source software is itself dependent on other open source software. The Node Package Manager site reports 2.1 million packages in its registry, all of which are open source, and apply only to the JavaScript/TypeScript languages. Software development is full of really tricky problems, and when one developer finds a clever or quality solution to that problem they often post it on the internet as open source so that other developers who face similar problems do not need to invest the same time and effort into solving it. This practice has rapidly advanced the speed at which developers can implement business solutions and has created a collaborative culture in tech which is unique among industries.

But as a business who utilizes open source software (and you all do), how should we approach our relationship with those tools and the real people who maintain them? What should our approach be when we find a bug in that software or it is missing a piece of functionality that our application requires?

Unfortunately the internet is full of horror stories of open source developers who are harassed to make changes to their software based on the needs of large companies, without those companies contributing in any way, financially or otherwise, to the project. This is unfortunate, not only because it is greedy, but because behind all those lines of code are real people with full time jobs, families, friends and feelings. So as developers who utilize open source software, which is all of us, the first rule of using open source software is to treat people with decency and respect, even if their communications do not follow this same rule. The second rule is to do our due diligence. Rather than just contacting the maintainer directly with our first question, look through the documentation. Read the source code carefully. Look through Stack Overflow or blog posts associated with the software. If you have found a legitimate problem, open an issue on the project with a clear description of the problem (following their guidelines for issues as described in the project) and a potential solution. If appropriate, create a pull request which solves the problem, thus lessening the burden on the maintainers to solve your problem for you.

I recently encountered this situation on a client project. We are building out an application which uses open source mapping software, and when we wanted to add print functionality to our application we found several issues which needed to be resolved in order for our application to meet the standards we demanded. So after following the steps outlined above we were able to identify the underlying issues, present potential solutions to the project maintainers, and create pull requests which solved those issues, not only for our project, but for everyone else in the community who uses the same software (about 6000 weekly downloads). We have repeated this process several times as we have either discovered issues or encountered missing functionality which we desired. We could have forked the project and kept these changes internal, but it is this collaboration within the community that makes open source software so great.

Companies are by their nature profit driven entities and the thought of them paying you, the developer, to spend your time and their money contributing to a piece of software which others can use for free may seem to them outrageous. But I encourage all of us developers to sit down with our management and walk them through the world of open source software that contributes to their company’s success. Help them to understand that as users and beneficiaries of open source software it is honorable and right that we either sponsor those projects or at the very least contribute to them in meaningful ways. Capitalism will consume all for the sake of profit, but as those on the front lines of developing software we should ensure that those real people helping make it all possible are well supported in the work they do.

As a final note: what are the open source projects that you rely on heavily, either at work or in some personal project? I encourage you to take a few minutes and figure out how to message the maintainers and thank them for their work, telling them how much you appreciate them. Perhaps even pick a project you particularly value and figure out small ways in which you can contribute and support the community.