Table of Contents

Why libre software development is not an anarchism

This article is dedicated to explaining why anarchism is not so relevant when we talk about libre software development. You might find some comments on the internet where people compare free software to "communism ideologies". They share some common points, but they are not true in general.

What is anarchism

We are interested in a few crucial characteristics of the anarchist movement 1:

  • Anarchism is about the equal rights of everyone. There is no hierarchy of classes, no one can rule the other and there is no state.
  • Because everyone is equal there is no property, everything is collective and freely available to everyone
  • Anarchism is about helping each other instead of competing
  • Anarchism is about the decision-making process. Instead of bosses/owners making decicions or different sorts of democratic processes, anarchists propose decision-making by a consensus. Consensus means that decision will be applied only if everyone voted "yes" for it, one "no" is enough to stop the voting and discussing process.

I have used only points that are needed next in the article. Anarchism is deep and old movement and I don't provide all details of it in this article.

BlackGnu.png

To learn more about anarchism you can read An Anarchist FAQ by installing it on Debian-based systems:

sudo apt install anarchism

Common

  • Libre software projects are self-organized
  • Libre software projects are against copyright (intellectual property)
  • Libre software projects can be cloned by anyone and anyone can contribute to it, so everyone can be involved (so it belongs to everyone)
  • Some projects are trying to be decentralized by using federated communications (so no one owns infrastructure)

All those points have small problems, which we discuss next.

Difference

What differentiates intellectual property from a physical property is the ability to clone the work. In the real world you can only transfer an object from one person to another. In digital world you can copy the object of person #1 to person #2, so they have two equal objects in total. But it doesn't remove the problem of property and even creates more problems.

Copyright
Free software movement tries to use copyright to defeat copyright as intellectual property defense mechanism. That is wrong from the anarchist point of view. To defeat copyright you just don't use it or try to minimize its usage, making it less legitimate. There are Public Domain licenses to note, that you don't want to hold copyright anymore, the only problem here is that such code can be privatized by others.
Vertical organization

Libre software projects are organized vertically, so there is the owner(s) that have more privileges than others. Users directly don't take part in a decision-making process (the owner desides what to do with a project), but everyone can at least clone the code. For example, you can't just push your changes, you wait till main code maintainers will aprove your code.

Moreover when you write code you use other people work and often there is the situations where you can't be involved in decision-making process of the libs you use. Authors (intellectual right owners) can remove all of their contributions from a software, so everyone else will be forced to rewrite it. For example, such situations happen when the project maintainers try to switch a license and not everyone agree with such desicion or just not available for a contact.

Private infrastructure
Those owners might own crucial infrastructure, that they don't share to public like the code. Also some projects don't share database data.
Centralized infrastructure
Many infrastructures of libre projects are centralized, so users are forced to be admins/moderators and so on. Hierarchy partly is used because of that technical limitation.
Competition over helping
Because there are not many projects that use consensus for decision-making, you can encounter a situation when someone does not agree with the project direction, so they make a fork of a project. That creates unnecessary competition, you can see it when you try to find a library or free source project and there are many similar variants that already exist.

Examples

gnu.org
The project and its website are centralized. There are members, there are anonymous users and there are owners of a website and a non-profit company fsf. They decide to do something or not to do not by consensus or even democracy process.
symfony
Many web-based free software projects don't share database information, have ads or other information and shares only maintainer's points of view instead of all devs.
3rd party language implementations vendors
Oracle, Microsoft, Zend, Google and so on. They have the power over "their" open-source languages like Go, PHP, Java, C#, Typescript and so on. You can contribute, but you don't know which direction will be choosen by owners of the project.

Why anarchism in software development is real in the future

  • You don't need a lot of resources to contribute. Computers are very affordable, programming can be learned by anyone. The problem is social organization.
  • People are motivated to self-organize horizontally, but we often don't have right technologies for such organization over the internet.

What limitations are on the way

  • Copyleft licenses are weak against illegal corporate usage. Public domain like licenses can be privatized.
  • Programming language vendor (like Oracle, Zend, Microsoft or whatever company that stays behind the language implementation) tries to artificially limit a programmer in expressiveness by not implementing some features.
  • Some limitations are presented by tech-stack we use. For example, C language have no reflection support, you can't understand what is going on in runtime without recompiling something with debugging symbols and using external tools such as GDB.

    Moreover if you want to change ls command and add a new flag, you will need to go through many steps. You will need to clone coreutils repo, find exact command, add your flag, recompile it, install it instead presented coreutils in your systems and somehow maintain it alongside with coreutils updates recompiling it every time. It sucks, but there is a better tech for free software.

    For example, Common Lisp have excellent introspection and reflection tools, so if you use a program you can change anything while it is being running without losing any state. It might be hard to understand if you haven't learned Lisp, I recommend give it a try. 2

  • Closed hardware. Even tho hardware became cheap, but understanding of what's going inside became even more complex than before. There is lack of hardware documentation, that usually present for internal use at a company (for example Intel hides processor docs inside their company).
  • Closed software. There is closed bios and technologies such as Intel ME, AMD PSP, closed processors and GPU drivers and other hardware firmare stays closed. If you want to understand how exactly your hardware works, you will encounter different problems.

Conclusion

In general, we can see that free/open software contributors can share same ideals, but because of the methods they use as developers, they are sticked to the use of plain old vertical organization, when we hold all information by ourselves and not trying organize horizontally.

Nevertheless many projects try to eliminate vertical organization as much as possible and allow anyone to contribute. They tend to have strong community, that tries its best to self-organize the developing process. Someday we will see totally horizontally way for software development.

Even tho we as developers have an ability to do a fork of project, we don't have a social mechanism for desicion making to help each other and move the project in a common direction instead of competing making similar project, but different in one or two details. Most of the problems lies in social domain, but some is made by technologies we use.

1 2

Footnotes:

1

Ancom to be precise

2

REPL power demonstration video. You don't need to setup compiler to specially recompile the project, it is built in into the language

No rights reserved

2024-10-30 Wed 19:20