#+title: Free software
#+summary: An explanation of the necessity of free software
#+startup: showall
#+license: wtfpl

* 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]]
