2011-07-26 03:04:17 +02:00
|
|
|
#+title: Free software
|
2011-07-27 02:44:23 +02:00
|
|
|
#+summary: An explanation of the necessity of free software
|
2013-01-31 20:59:45 +01:00
|
|
|
#+startup: showall
|
|
|
|
#+license: cc0
|
2011-07-26 03:04:17 +02:00
|
|
|
|
|
|
|
* Free software
|
|
|
|
|
2011-07-27 02:44:23 +02:00
|
|
|
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
|
2013-01-31 20:59:45 +01:00
|
|
|
implementations of complex algorithms or involve human interaction.
|
2011-07-26 03:04:17 +02:00
|
|
|
|
2011-07-27 02:44:23 +02:00
|
|
|
[[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.
|
2011-07-26 03:04:17 +02:00
|
|
|
|
2011-07-27 02:44:23 +02:00
|
|
|
/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.
|
2011-07-26 03:04:17 +02:00
|
|
|
|
2011-07-27 02:44:23 +02:00
|
|
|
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.
|
2011-07-26 03:04:17 +02:00
|
|
|
|
2011-07-27 02:44:23 +02:00
|
|
|
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.
|
2011-07-26 03:04:17 +02:00
|
|
|
|
2011-07-27 02:44:23 +02:00
|
|
|
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.
|
2011-07-26 03:04:17 +02:00
|
|
|
|
2011-07-27 02:44:23 +02:00
|
|
|
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
|
2011-08-16 12:16:36 +02:00
|
|
|
/The freedom to/:
|
2011-07-27 02:44:23 +02:00
|
|
|
+ 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]]
|