Added some content.
This commit is contained in:
@@ -1,12 +1,134 @@
|
||||
#+title: Free software
|
||||
#+summary: An explanation of the necessity of free software
|
||||
#+license: bysa
|
||||
|
||||
* Free software
|
||||
|
||||
** My definition
|
||||
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
|
||||
|
||||
|
||||
** Other definitions
|
||||
|
||||
|
||||
[fn:freeswdef] GNU.org. /The Free Software Definition/,
|
||||
[[http://www.gnu.org/philosophy/free-sw.html]]
|
||||
|
||||
Reference in New Issue
Block a user