The world is full of gaps, missing opportunities, unfinished projects, and unfulfilled potential. We walk around every day complaining about the problems we see in the world. We don't like the height of a shelf, the color of a wall, the shape of a doorknob, the line at the DMV, the length of the traffic light, the taste of our morning coffee, the feed our our social media, on, and on, and on. Much of the world is set in stone, or at least feels like it, so 9 out of 10 cases the solution is to change our preferences; we change the route to our work, the brand of our coffee, the position of the twitter app on our phone, and we just decide never to go to DMV ever again.
Perhaps this is why open source software is so misunderstood, so asymetric on the expectations of the people who create it, versus those who use it. You see this kind of divide in the discussions in open source projects, the user, whose modus operandi in life is to be a customer, asks for a change in a project that fits their requirements. The already burnt out open source maintainer responds by asking the "customer" to go to hell, or better yet just open up a PR, which the discussion more often than not dies, because customers do not fix, they consume.
There are perfectly valid explanations for each behavior in this scenario, it is expected, it is common, it is normal. The question is, who breaks this pattern, and how? How do we turn from powerless customers to the grumpy maintainers? What's the shift in mindset, what does it entail, how does it empower us, and why should you care?
I argue that you should care, because looking at problems in the world and having the audacity to try to fix them is quite empowering, because you can start by solving your own problems. In terms of a weird traffic lights that don't make sense, the best you could do is perhaps calling your local municipality and fighting against a bureaucracy of conformity in order to move the status quo. In terms of software, the limit becomes the sky. If you don't like how a website looks, you can just create a browser extension for automatically changing it. If you don't like ads, you can write or install a kernel level ad blocker. If you don't like your file manager, you can write one from scratch. Software is malleable, it is not set in stone, we get to play, change, update, upgrade, evolve, and contribute to it.
That is not to say that changing software is any more easier than changing your traffic lights in terms of technical difficulty, most software is cimplex, and contributing to it requires time, effort, and domain expertise. The important difference of software is its zero-cost distribution, open source culture that allows for you to tinker with, play around, discover, understand and modify software. Creating a large project from scratch is like creating a whole new apartment, scratch that, it's like designing a whole new city; but adding a specific feature you want, or need, for solving your own problems is more likely akin to changing your doorknob with the major difference that you don't need to order a new doorknob from Amazon, but you just need your time and effort.
Once we are out of the customer mentality, such a large surface of possibilities opens up in front of us. You don't like how slow Rust compiler is, perhaps you should check out what is making it slow, remove or upgrade it. If you want Excalidraw to support more shortcuts, you can spend a few hours figuring out how to do that, whereas you have direct access to the people who write the software from very open communication channels, something we almost never have for other problems in our life. In contrast to so many of those responsible for our problems building up layers of bureaucracy to shield themselves from complaints and requests, open source software communities are inviting, open, and surprisingly well accustomed to newcomers like yourself, or myself.
World is far from complete, and it is far from being set in stone. The systems we interact change every day, and I personally would like to be the change I would like to see in the world, which open source software allows me to do. Let's open up a personal parantheses here, the project that inspired me to write this post is called tjq, or typed jq. tjq is a novel algorithm for better error reporting for jq, a popular scripting language for processing JSON. What is so interesting about tjq is that the core of the idea is very simple, many people would have thought of it, and I'm sure many asked themselves why that did not exist. You use the information already available in the program for understanding it better and use it for better, informative, surgical error messages. The only reason I started this project is I was writing jq scripts and got fed up with the error messages I got. In a customer mindset, I would have either complained to the maintainers or switched to a better product. The filler mindset instead tries to understand what the missing bit is, and conjectures how to fill it. It is possible that filling gaps is a lot of work, tjq is still incomplete, and it will remain so for a long time, so arguably I haven't been able to fill it, and perhaps I won't ever be able to finish the project.
Yet, the mentality of looking at the same world as many, but seeing something else, a possibility for change many others have ignored seems to have an exceptional satisfaction. Almost no problem in the world is unique, if you are experiencing it, others are too. If you fix it, many will benefit, perhaps even those who are ignorant to the problem today, and you will have filled a gap in the world, raising the bar for everyone, and lifting the world up to be a better place for us all.