summaryrefslogtreecommitdiff
path: root/src/frontend_blog/articles/scrap1_U.2.html
diff options
context:
space:
mode:
Diffstat (limited to 'src/frontend_blog/articles/scrap1_U.2.html')
-rw-r--r--src/frontend_blog/articles/scrap1_U.2.html219
1 files changed, 219 insertions, 0 deletions
diff --git a/src/frontend_blog/articles/scrap1_U.2.html b/src/frontend_blog/articles/scrap1_U.2.html
new file mode 100644
index 00000000..059b4417
--- /dev/null
+++ b/src/frontend_blog/articles/scrap1_U.2.html
@@ -0,0 +1,219 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html401/loose.dtd">
+<html>
+<!-- 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.
+ -->
+<!-- Created on February 18, 2016 by texi2html 1.82
+texi2html was written by:
+ Lionel Cons <Lionel.Cons@cern.ch> (original author)
+ Karl Berry <karl@freefriends.org>
+ Olaf Bachmann <obachman@mathematik.uni-kl.de>
+ and many others.
+Maintained by: Many creative people.
+Send bugs and suggestions to <texi2html-bug@nongnu.org>
+-->
+<head>
+<title>Free Software, Free Society, 2nd ed.: Appendix A: A Note on Software</title>
+
+<meta name="description" content="This is the second edition of Richard Stallman's collection of essays.">
+<meta name="keywords" content="Free Software, Free Society, 2nd ed.: Appendix A: A Note on Software">
+<meta name="resource-type" content="document">
+<meta name="distribution" content="global">
+<meta name="Generator" content="texi2html 1.82">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<style type="text/css">
+<!--
+a.summary-letter {text-decoration: none}
+blockquote.smallquotation {font-size: smaller}
+pre.display {font-family: serif}
+pre.format {font-family: serif}
+pre.menu-comment {font-family: serif}
+pre.menu-preformatted {font-family: serif}
+pre.smalldisplay {font-family: serif; font-size: smaller}
+pre.smallexample {font-size: smaller}
+pre.smallformat {font-family: serif; font-size: smaller}
+pre.smalllisp {font-size: smaller}
+span.roman {font-family:serif; font-weight:normal;}
+span.sansserif {font-family:sans-serif; font-weight:normal;}
+ul.toc {list-style: none}
+-->
+</style>
+<link rel="stylesheet" type="text/css" href="../style.css">
+
+
+</head>
+
+<body lang="en" bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#800080" alink="#FF0000">
+
+<a name="Appendix-A"></a>
+<header><div id="logo"><img src="../gnu.svg" height="100" width="100"></div><h1>Free Software, Free Society, 2nd ed.</h1></header><section id="main"><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.&nbsp;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>&mdash;the lowest level&mdash;which the
+computer understands <em>natively</em>.
+</p>
+<img src="code.jpg" alt="code">
+
+<p>For example, consider the
+&ldquo;hello world&rdquo; program, a common first program for people learning C,
+which (when compiled and executed) prints &ldquo;Hello World!&rdquo; on the screen.
+<a name="DOCF54" href="#FOOT54">(54)</a>
+</p>
+<table><tr><td>&nbsp;</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>&nbsp;</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>&nbsp;</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 &ldquo;Hello
+World&rdquo; program written in C so that instead of printing &ldquo;Hello World&rdquo;
+in English it prints it in French. The change would be simple; here is
+the new program:
+</p>
+<table><tr><td>&nbsp;</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 &ldquo;source code,&rdquo; we do
+not mean machine language that only computers can understand&mdash;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&mdash;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 name="FOOT54" href="#DOCF54">(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>&nbsp;</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></div>
+<hr size="2">
+<table cellpadding="1" cellspacing="1" border="0">
+<tr><td valign="middle" align="left">[<a href="scrap1_43.html#Freedom-or-Power" title="Previous section in reading order"> &lt; </a>]</td>
+<td valign="middle" align="left">[<a href="scrap1_U.3.html#Appendix-B" title="Next section in reading order"> &gt; </a>]</td>
+<td valign="middle" align="left"> &nbsp; </td>
+<td valign="middle" align="left">[Contents]</td>
+<td valign="middle" align="left">[<a href="scrap1_U.4.html#Index" title="Index">Index</a>]</td>
+<td valign="middle" align="left">[<a href="scrap1_abt.html#SEC_About" title="About (help)"> ? </a>]</td>
+</tr></table>
+<p>
+ <font size="-1">
+ This document was generated by <em>Christian Grothoff</em> on <em>February 18, 2016</em> using <a href="http://www.nongnu.org/texi2html/"><em>texi2html 1.82</em></a>.
+ </font>
+ <br>
+
+</p>
+</body>
+</html>