There are many people that are unaware of what free software is and what open source software is, and why it matters. In this post I’ll try to shed some light on this.
When people hear `free software’ they usually think of software that does not cost anything in terms of money, which is not the right definition. The word `free’ in free software is free as in speech, not free as in beer. So, what does this actually mean in terms of computer software? To understand this we first need a basic understanding of what a computer program actually is. A computer processor can be operated via an instruction set which allows performing many low-level operations such as adding two numbers together. These instructions are numeric codes, which are very hard to understand for a human: imagine that you would have to type a text and instead of using a – z you had to use the numbers 1 – 26 for each letter. That would be terribly difficult to read and write! So, most computer programs are written in readable text which contains statements such as “x = 3 + 5” instead of something like “1001 1100 1010”. This written text is called the source code, which is like a blueprint of the program, and can not be interpreted by a machine directly. Source code first has to be translated into a binary machine representation: the numeric codes I spoke of before. This translation process is called either compiling or interpreting1. After this step we can actually run the program and interact with it. So, we have a distinction between the source code and the binary.
Many companies that make computer software only distribute the binary to their customers and keep the source code locked away. These companies see the source code as their intellectual property which they must protect. Let’s go back to free software again and consider what makes a particular piece of software free as in speech: four main points. Firstly, the freedom to run the software for any purpose. This means that, for example, you can not distribute a video editor with the restriction that you can not use it to produce a commercial. Secondly, the freedom to study how the program works and to change it to suit your own needs. For this having the source code is a necessity. Thirdly, the freedom to distribute copies of the original program so you can share it with your friends. And finally: the freedom to distribute the modifications you make to the program to others. So, now you understand that besides the binary you also need the source code in order for something to be free software.
Undoubtedly these definitions will give you a lot to think about. Most people assume that you can not make money when you make free software. However, this is untrue as there are many successful companies out there that create and share free software. These companies realize that the real value of computer software is not in the source code, but in the people with the expertise about how the software works. Just like it takes time and practice for a musician to learn to play a musical instrument, it also takes time for a programmer to familiarize himself with a piece of software. Contrary to popular belief making computer programs is primarily a creative endeavor with a significant social component as well. Everyone who has ever written a report or paper knows the value of other people reviewing your work. The same is true for computer software: if more people read it, give feedback and fix errors, the quality of the software improves. And when the source code is available: it is much easier for people to participate in this process.
Now, this still leaves us with the question: what is open source? Is it exactly the same? Well, most open source software is also free software, which may be somewhat confusing. The main difference between the two is philosophical. The free software movement considers non-free software to be undesirable, and is social in nature: its emphasis is on changing people’s behaviour so that they create, use and share free software instead of alternatives. In contrast, the open source movement originated in the nineties as a pragmatic, liberal view on free software. Therefore it is slightly more permissive: some things that are not free software are open source. The difference is also emphasized in the concepts themselves: free software with “free as in speech” as the main issue, and open source software with an emphasis on the pragmatic advantages of having the source code openly available. Since there is a relatively large overlap between the programs these two concepts cover, people commonly use the term Free and Open Source Software (FOSS) to refer to both.
So, have you used free and open source software? It is quite likely that you have! Are you running Mozilla Firefox or Google Chrome as your Internet browser? Both are free software. Many websites you visits are powered by the Apache web server, which is open source. Are you perhaps using an Android telephone? The operating system kernel these phones use is Linux, which is free software. You are probably using many more pieces of free and open source software than you realise. Notice that many of these software products have been created by successful companies and not by individuals programming in their basements2. Here is a 2008 video with Stephen Fry giving a quick explanation and his view on free software:
Whether or not free and open source software matters to you personally is entirely up to you. But at least the next time anyone asks you what free or open source software is: now you know the answer.
Find out more:
1) For this text the distinction does not matter, but if you clicked this footnote you probably want to know a bit more. A compiler takes as input a file with source code and then writes an output file which can be executed directly. An interpreter also takes a source file as input, but translates it to machine instructions on the fly, so no intermediate executable is produced. Generally interpreters are slower, since they can’t read the entire source code file, but instead process it line-by-line. This makes it more difficult to optimise the generated instructions for execution speed. When distributing a program you also need to distribute the interpreter itself with it which is not the case for a compiled program. Nevertheless, they do have advantages as well, such as that they can more easily be tested.
2) Although, there is nothing fundamentally wrong with that 🙂