#+title: Free software #+summary: An explanation of the necessity of free software #+startup: showall #+license: cc0 * Free software This is a [[http://python.org/][Python 3]] computer program --- a piece of software: #+BEGIN_SRC python inp = input() print(inp.lower()) #+END_SRC Or at least it's a very small part of one. It reads text input from a user, transforms the text to lowercase, and prints the transformed text. It is very simple. Larger programs are often far less simple, as they may contain implementations of complex algorithms or involve human interaction. [[http://en.wikipedia.org/wiki/RSA][RSA]] and [[http://www.openssl.org/][OpenSSL]] are examples of this, RSA being an algorithm which requires several subalgorithms to work, and OpenSSL being the large implementation of RSA (among other things, but let's keep it simple) which contains way over 100,000 lines of code. For such a computer program to be run, it will most often have to be compiled. /Compilation/ is a process which translates human-readable source code --- like the two Python lines earlier --- into a computer-readable format. When a program has been compiled, computers can understand it, and it can be run and used by users. The reason why programmers do not program in the computer-readable format from the beginning is that it is almost impossible and very impractical; humans need one or more levels of abstraction to be able to transform ideas into runnable, useful software --- humans need programming languages. There are two things that make a lot of sense when talking about computer programs: 1) if a program is installed on your computer, you should be able to run it (why else have it?), and 2) if a friend (or someone else) would like to use a program that you have, you should be able to share it to your friend, i.e. copy it and give the friend the copy. People who are unfamiliar with computers in general, and digital data in particular, might have trouble understanding that any data you see on a computer monitor or on an optical disc or on something else is nothing but bytes, be it images, videos, websites, text, programs, e-mails, anything. A byte x&var with a value n&var is no different than a byte y&var with the same value n&var, even if it is stored in a different location. Any byte can be cloned, copied, and only the amount of storage space available limits how many times this copying can occur. One must also be able to study a program, modify it to fit one's needs, and redistribute copies of one's changes. There are several reasons for this; first of all, a program must not be able to hide from you how it works and what it does. You --- or a hired programmer --- must be able to look through the source code and learn from it, so that knowledge about implementations of algorithms and structuring of code segments can be spread. Computers have become incredibly important on Earth, and it's just not good enough if a computer user who wishes to learn more about software and how it works cannot study the programs on their computer and in that way improve their computer literacy. Since machine code does not contain the original code and comments, source code availability is a precondition for the studying and modification of a program. Second, if a program does not work properly, you can only fix it if you're allowed to do so and have the source code. Third, it is impractical to constantly reinvent the wheel, which is what programmers who do not use software that allows sharing and modification tend to do. Fourth, if a program cannot be studied, and if that program contains code for reading from and writing to files in special formats --- e.g. the Microsoft Word format --- people are forced to use that program if they have a file in such a format (yes, OpenOffice.org and LibreOffice have good support for such non-free formats, but not full support). Fifth, if a program cannot be studied, you cannot be certain of its intentions. Since you do not know what the program does (in details), you do not know if it does anything harmful --- if it tracks you, or if it reads your documents without your permission. Sixth, if a non-free program is abandoned by its developers, it will never become better, and users of it might not be able to keep running it, because no one can fix or improve it. And so on. *Free software* is the type of software that encompasses these freedoms; it allows you to be in control of your computing, instead of others taking control of it. Proprietary software, or non-free software, is the opposite of free software. Many programs and systems are proprietary, including (but not at all limited to) Microsoft Windows, Apple iPhone, Amazon Kindle, etc. Well-known /free/ software includes Firefox, Inkscape, GIMP, and many others. Today it often seems commonly accepted that software development and usage follows a model like this: #&block Someone (a corporation, an individual, an organization, could be anyone) develops a program --> the creator allows people to use the program --> a user wants to share the program with a friend, but the user knows that it is wrong, because that's what the creator said --> the user does nothing, and: The user needs a new feature added to the program --> the user asks the creator to add the feature, because the user knows that only the creator may modify the program, even if it runs on the user's computer and not the creator's --> the creator answers --> nothing happens #& It makes sense that you should be allowed to modify a program that runs on your computer, or get someone to do it for you. It makes no sense that an entity x&var should have the power to control a user just because that user runs a program created by x&var. Programs should /not/ have owners, even if that's what some have been mislead to believe. All of this leaves us with these four condensed freedoms:[fn:freeswdef] #&block /The freedom to/: + run the program + study and modify the program + share the program (redistribute copies) + share your modified program #& ** External links Continue your reading here: + [[http://gnu.org/][GNU's Not Unix]] + The [[http://fsf.org/][Free Software Foundation]] + [[http://trisquel.info][Trisquel, a free operating system]] + [[http://debian.org/][Debian]] + [[http://en.wikipedia.org/wiki/Copyleft][Copyleft]] on Wikipedia [fn:freeswdef] GNU.org. /The Free Software Definition/, [[http://www.gnu.org/philosophy/free-sw.html]]