The Four Freedoms of Free Software are broken, Part 0

Analysis
Oct 23, 20123 mins

Deconstructing the Four Freedoms of Free Software, one at a time.

“Free Software” (with a capital “F”), and the GPL are core components of the Linux – and broader Open Source – world. In order for software to qualify as being “Free,” it must adhere to a list of four criteria – “The 4 Freedoms.”

Unfortunately, those four “Freedoms” suffer from some serious logic problems that any good compiler would throw an error on. Or, in some cases, result in a kernel panic.

In this four part series, we are going to pick apart these four “Freedoms,” one-by-one, and attempt to apply real engineering logic to each. To get things kicked off properly, here they are… in their entirety:

Freedom 0: The freedom to run the program for any purpose.

Freedom 1: The freedom to study how the program works, and change it to make it do what you wish.

Freedom 2: The freedom to redistribute copies so you can help your neighbor.

Freedom 3: The freedom to improve the program, and release your improvements (and modified versions in general) to the public, so that the whole community benefits.

With that out of the way, let’s start with that first one. Because this is a list, and the first one comes first.

“Freedom 0: The freedom to run the program for any purpose.”

My inner nerd appreciates that the list of four “Freedoms” starts with zero. Unfortunately, the rest simply will not comply, and makes my brain bleed.

This is, in essence, saying that the first component of “Freedom” is “The freedom to run the program for any purpose.” Or, put another way, “Freedom” is an array. And we are setting its first value (zero) to something.

Or, put into code… “Freedom[0] = X;” which would work just fine. Set the first value of the “Freedom” array to whatever “X” is. Sure. No problem.

Unfortunately, in this case, “Freedom” is part of “X” itself. So “X” is really “Freedom” plus some other information (in this case “to run the program for any purpose”). Here is how that would look in code.

Freedom[0] = Freedom + kOtherStuff;

This means we have now set the first item in the array to be equal to the entirety of the array itself… plus some other information. Which will break. Badly. In “non-programmer” speak this would be like saying “The cushion on this couch consists of the entirety of the couch itself… plus an ostrich.”

“But, Bryan!” I hear you say, “The ‘Freedom’ on the left of the equation has a different meaning than the ‘freedom’ on the right of the equation because the one on the right has a lowercase ‘f’ instead of an uppercase ‘F’.”

I’m going to put aside the fact that this idea fills me (or at least the part of me that thinks language is “a good idea”) with blinding rage. The notion that we can take a word, change a letter to be upper case, and then declare it to have a new meaning (but a meaning that evokes a strategic emotional response with the goal of making it difficult for people to argue against a concept)… let’s just say that I don’t like it. I dislike this almost as much as rewriting history to make Han shoot second.

But, in the interest of making this make any sense at all, let’s assume for a minute that “Freedom” does not equal “freedom” (aka “Freedom != freedom”). This makes the code much cleaner. “Freedom[0] = X;”. Phew. Better.

Unfortunately…this doesn’t work either. But I’ll save that for part 2 (which is really part 1).

bryan_lunduke

Bryan Lunduke began his computing life on a friend's Commodore 64, then moved on to a Franklin Ace... and then a 286 running MS-DOS. This was followed by an almost random-seeming string of operating systems: ranging from AmigaOS to OS/2, and even including MacOS 8. Eventually, Bryan tried Linux. And there he stayed. In 2006, Bryan founded the Linux Action Show - growing it into the largest Linux-centric podcast on the planet. He's also the creator of 'Linux Tycoon,' the video game about managing a Linux distribution. Today, he is a writer and works as the Social Media Marketing Manager of SUSE. On this here blog, he seeks to accomplish two goals: 1) To be the voice of reason and practicality in the Linux and Open Source world. 2) To highlight the coolest things happening throughout the world of Linux.

More from this author