It’s difficult to hold opposing views in your mind at the same time, but that’s often where I find myself when I consider the idea of competition in open source software. I suppose I’m hoping this will serve as a way for me to reconcile those thoughts into somewhat of a cohesive view, although I know deep down that there will always be contradictions in my thinking about this.

My primary view is that too much competition between similar projects in open source is a manifestation of crab bucket mentality. If everyone were to join forces and really dedicate their efforts into creating a singular product, the result would be not only magnificent, but an unstoppable market force (which does sometimes happen - look at the success of Mastodon right now!). But until that becomes the norm, the collective action of everyone forging their own path ahead has a side effect of pushing everyone else back down.

Right now, if a developer wants to make something that works in Windows, they have one platform to target. If they want to make something work with Mac, they have one platform to target. Same with iOS. Same (mostly) for Android. Yet, if they want to make something for Linux, they have to make some decisions: “Do I want to make something in GTK, Qt, Flutter, or Electron?” “Do I want to package it as a Flatpak, Snap package, AppImage, Debian package, or RPM?” “Do I target the GNOME HIG guidelines, or the elementary HIG, or do I want this to feel more at home on KDE?”

And that’s before you even get into the maintenance issues. Why does my app work perfectly here, but not there? Oh, there’s a library mismatch? Oh, the distro applies its own set of patches that are completely out of sync with (or non-existent on) other distros?

It’s maddening. At times, I just want to scream into a pillow: “let’s define all the characteristics of this platform, and all work together to make it a reality!”

But in other, perhaps more enlightened moments, I take a step back and realize that there are many benefits to this as well. You never know where the best ideas are going to come from. Project B may make some really novel or nifty change to a workflow, some design choice or spark of an idea that would make the user experience better, then Project A can take that inspiration and implement a similar feature. Without having these multiple, competing projects, I think you would see less inspiration and less diversity of thought.

And then, if you mull this over long and hard enough, your reasoning will ultimately land you here: “What’s the point of free (libre) software if people aren’t able to do what they want with it?” Free software is designed so that you can modify the code and use it in a way that fits you. If everyone is just using the same platform with the same design, and the same features, and are using them for the same tasks, what’s the point in even having those freedoms?

In some ways, I think the benefit is less about being able to choose all the little details, but instead focusing on the big perks. You don’t have to agree to any terms and conditions. You don’t have to get locked into any trials or subscriptions. You don’t get locked into one ecosystem or one walled garden. You can use the software on any device you choose, which is environmentally friendly, and allows a greater selection of hardware so you can tailor your equipment to your exact needs. You don’t have to trust that a particular company is not selling your data, or building elaborate profiles to track your purchases or your actions. You can see the code, and you know what it does. Maybe those benefits are enough in and of themselves?

But, by its very nature, if the code is auditable, if it is malleable, then as a direct consequence these changes will always be possible. And as long as changes are possible, if someone wants to make modifications or adaptations, they always will.

So I suppose, in the end, I do land on both sides. I think it’s best for the users and developers of various projects to consolidate and come to reasonable compromises when possible. Collaboration is always the goal. But by its very nature, free software must be adaptable, and if there’s a desire for a change, then someone out there will make it.

Where does that leave those who are wanting practical advice? I suppose, just make the best decisions you can at each opportunity you have an opportunity to make one, to give a product the best user experience and set of features possible, which will in turn give it the widest reach possible. And be willing to admit when there’s a better idea out there that you can shamelessly borrow from other, similar projects. Maybe us crabs can escape the bucket after all. I just wonder if, by doing so, we end up in different destinations altogether, despite our shared journey.