summaryrefslogtreecommitdiff
path: root/talermerchantdemos/blog/articles/scrap1_46.html
diff options
context:
space:
mode:
Diffstat (limited to 'talermerchantdemos/blog/articles/scrap1_46.html')
-rw-r--r--talermerchantdemos/blog/articles/scrap1_46.html292
1 files changed, 0 insertions, 292 deletions
diff --git a/talermerchantdemos/blog/articles/scrap1_46.html b/talermerchantdemos/blog/articles/scrap1_46.html
deleted file mode 100644
index 914a985..0000000
--- a/talermerchantdemos/blog/articles/scrap1_46.html
+++ /dev/null
@@ -1,292 +0,0 @@
-<!-- This is the second edition of Free Software, Free Society: Selected Essays of Richard M. Stallman.
-
-Free Software Foundation
-
-51 Franklin Street, Fifth Floor
-
-Boston, MA 02110-1335
-Copyright C 2002, 2010 Free Software Foundation, Inc.
-Verbatim copying and distribution of this entire book are permitted
-worldwide, without royalty, in any medium, provided this notice is
-preserved. Permission is granted to copy and distribute translations
-of this book from the original English into another language provided
-the translation has been approved by the Free Software Foundation and
-the copyright notice and this permission notice are preserved on all
-copies.
-
-ISBN 978-0-9831592-0-9
-Cover design by Rob Myers.
-
-Cover photograph by Peter Hinely.
- -->
-
-
- <a name="Freedom-or-Power_003f">
- </a>
- <a name="Appendix-A_003a-A-Note-on-Software">
- </a>
- <h1 class="unnumbered">
- <span class="roman">
- Appendix A: A Note on Software
- </span>
- </h1>
- <p>
- Written by Richard E. Buckman and Joshua Gay.
- <br/>
- </p>
- <p>
- This section is intended for people who have little or no knowledge of
-the technical aspects of computer science. It is not necessary to read
-this section to understand the essays and speeches presented in this
-book; however, it may be helpful to those readers not familiar with
-some of the jargon that comes with programming and computer science.
- </p>
- <p>
- A computer
- <em>
- programmer
- </em>
- writes software, or computer programs. A
-program is more or less a recipe with
- <em>
- commands
- </em>
- to tell the
-computer what to do in order to carry out certain tasks. You are more
-than likely familiar with many different programs: your Web browser,
-your word processor, your email client, and the like.
- </p>
- <p>
- A program usually starts out as
- <em>
- source code
- </em>
- . This higher-level
-set of commands is written in a
- <em>
- programming language
- </em>
- such as C
-or Java. After that, a tool known as a
- <em>
- compiler
- </em>
- translates this
-to a lower-level language known as
- <em>
- assembly language
- </em>
- . Another
-tool known as an
- <em>
- assembler
- </em>
- breaks the assembly code down to the
-final stage of
- <em>
- machine language
- </em>
- —the lowest level—which the
-computer understands
- <em>
- natively
- </em>
- .
- </p>
- <img alt="code" src="/essay/Appendix_A:_A_Note_on_Software/data/code.jpg">
- <p>
- For example, consider the
-“hello world” program, a common first program for people learning C,
-which (when compiled and executed) prints “Hello World!” on the screen.
- <a href="#FOOT54" name="DOCF54">
- (54)
- </a>
- </p>
- <table>
- <tr>
- <td>
- </td>
- <td>
- <pre class="smallexample">int main(){
- printf(''Hello World!'');
- return 0;
-}
-</pre>
- </td>
- </tr>
- </table>
- <p>
- In the Java programming language the same program would
-be written like this:
- </p>
- <table>
- <tr>
- <td>
- </td>
- <td>
- <pre class="smallexample">public class hello {
- public static void main(String args[]) {
- System.out.println(''Hello World!'');
- }
-}
-</pre>
- </td>
- </tr>
- </table>
- <p>
- However, in machine language, a small section of it may look similar to
-this:
- </p>
- <table>
- <tr>
- <td>
- </td>
- <td>
- <pre class="smallexample">1100011110111010100101001001001010101110
-0110101010011000001111001011010101111101
-0100111111111110010110110000000010100100
-0100100001100101011011000110110001101111
-0010000001010111011011110111001001101100
-0110010000100001010000100110111101101111
-</pre>
- </td>
- </tr>
- </table>
- <p>
- The above form of machine language is the most basic representation
-known as binary. All data in computers is made up of a series of
-0-or-1 values, but a person would have much difficulty understanding
-the data. To make a simple change to the binary, one would have to
-have an intimate knowledge of how a particular computer interprets the
-machine language. This could be feasible for small programs like the
-above examples, but any interesting program would involve an
-exhausting effort to make simple changes.
- </p>
- <p>
- As an example, imagine that we wanted to make a change to our “Hello
-World” program written in C so that instead of printing “Hello World”
-in English it prints it in French. The change would be simple; here is
-the new program:
- </p>
- <table>
- <tr>
- <td>
- </td>
- <td>
- <pre class="smallexample">int main() {
- printf(''Bonjour, monde!'');
- return 0;
-}
-</pre>
- </td>
- </tr>
- </table>
- <p>
- It is safe to say that one can easily infer how to change the program
-written in the Java programming language in the same way. However,
-even many programmers would not know where to begin if they wanted to
-change the binary representation. When we say “source code,” we do
-not mean machine language that only computers can understand—we are
-speaking of higher-level languages such as C and Java. A few other
-popular programming languages are C++, Perl, and Python. Some are
-harder than others to understand and program in, but they are all much
-easier to work with compared to the intricate machine language
-they get turned into after the programs are compiled and assembled.
- </p>
- <p>
- Another important concept is understanding what an
- <em>
- operating
-system
- </em>
- is. An operating system is the software that handles input and
-output, memory allocation, and task scheduling. Generally one
-considers common or useful programs such as the
- <em>
- Graphical User
-Interface
- </em>
- (GUI) to be a part of the operating system. The GNU/Linux
-operating system contains a both GNU and non-GNU software, and a
- <em>
- kernel
- </em>
- called
- <em>
- Linux
- </em>
- . The kernel handles low-level tasks
-that applications depend upon such as input/output and task
-scheduling. The GNU software comprises much of the rest of the
-operating system, including GCC, a general-purpose compiler for many
-languages; GNU Emacs, an extensible text editor with many, many
-features; GNOME, the GNU desktop; GNU libc, a library that all
-programs other than the kernel must use in order to communicate with
-the kernel; and Bash, the GNU command interpreter that reads your
-command lines. Many of these programs were pioneered by Richard
-Stallman early on in the GNU Project and come with any modern
-GNU/Linux operating system.
- </p>
- <p>
- It is important to understand that even if
- <em>
- you
- </em>
- cannot
-change the source code for a given program, or directly use all these
-tools, it is relatively easy to find someone who can. Therefore, by
-having the source code to a program you are usually given the power to
-change, fix, customize, and learn about a program—this is a power that
-you do not have if you are not given the source code. Source
-code is one of the requirements that makes a piece of software
- <em>
- free
- </em>
- . The other requirements will be found along with the
-philosophy and ideas behind them in this collection.
- </p>
- <div class="footnote">
- <hr>
- <h3>
- Footnotes
- </h3>
- <h3>
- <a href="#DOCF54" name="FOOT54">
- (54)
- </a>
- </h3>
- <p>
- In other programming languages, such as
-Scheme, the
- <em>
- Hello World
- </em>
- program is usually not your first program.
-In Scheme you often start with a program like this:
- </p>
- <table>
- <tr>
- <td>
- </td>
- <td>
- <pre class="smallexample">(define (factorial n)
- (if (= n 0)
- 1
- (* n (factorial (- n 1)))))
-</pre>
- </td>
- </tr>
- </table>
- <p>
- This computes the factorial of a number; that is, running
- <code>
- (factorial 5)
- </code>
- would output 120, which is computed by doing
-5 * 4 * 3 * 2 * 1 * 1.
- </p>
- </hr>
- </div>
- <hr size="6"/>
- </img>
-