jxself.org

Complexity is Not the Enemy: Free Software Should Tackle the Hard Problems

Wed, 10 Jul 2024

I received a request to write a blog post about this topic. I'm always open to suggestions.

Free software is about freedom and the rights of the users. Yet, I've talked to some who argue that to be truly "free," software must be simple enough for anyone to understand and modify easily. While simplicity has its virtues, we should not conflate it with the core values of free software. The perspective that complex software can't be free is not only flawed, it's downright harmful to the free software movement's potential.

Complex problems often demand complex solutions. If we restrict ourselves to only building simple software, we artificially limit the potential of the free software movement to tackle all the challenges facing us. By embracing complexity, we not only open the door to allow free software to flourish in all areas of computing, but we also empower ourselves to make a significant impact. Forbidding complex programs from the realm of free software is like saying we can't have free speech, or that we must limit ourselves to a subset of words, because the full extent of language is too complicated. This is a disservice to users who need complex, powerful software for demanding tasks, and it's a self-imposed handicap for the free software movement. Everything someone wants to do with a computer should be doable with free software, even the complex problems.

In addition, it can be challenging to convince people to make their software free. Demanding that developers simultaneously adhere to an arbitrary standard of simplicity is a recipe for further discouragement. It's far more important to foster an environment where people feel empowered to tackle ambitious projects, regardless of complexity.

Remember, "complex" is relative, and we shouldn't discourage people from creating free software by setting arbitrary standards of simplicity. Let developers choose the tools and approaches that best suit the problem. What seems daunting to one person might be straightforward to another. A seasoned programmer might look at a piece of software and see elegant simplicity, while a newcomer might be overwhelmed. This doesn't make the software any less "free," but by focusing on simplicity, we risk alienating experienced developers capable of working with more complex codebases. Learning is part of the process. We should encourage users to explore and understand software, not limit their options to only simple programs for simple tasks.

After all, the free software movement was born out of a desire for freedom, not simplicity. Richard Stallman, the founder of the GNU Project and the free software movement, didn't set out to replace Unix because it was too complex. His motivation was to liberate users from the shackles of proprietary software. Proprietary software restricts user freedom by its very nature. It prevents users from studying, modifying, and sharing the software they rely on. This lack of control is the true evil the free software movement seeks to combat.

On the other hand, when faced with a "complex" free program, users are not helpless victims as if they were facing a proprietary program. It may present a learning curve, but they have the power to learn, explore, improve their understanding, and become proficient with the software. This process of learning is not only beneficial for individuals, but it also strengthens the free software community as a whole. Today's person who views a program as "too complex to understand" could be that project's future maintainer.

We should not demonize complexity in free software and place limits on free software's ability to tackle all of the problems in our world by imposing arbitrary restrictions on complexity. Let's stop conflating simplicity with freedom. Free software is about empowering users, not limiting them. Let's embrace the complexity of the real world, and the full spectrum of software complexity, and build free software that rises to meet all of the challenges, not just the simple ones. In doing so we'll empower users to tackle any challenge with the freedom only free software can provide.