summaryrefslogtreecommitdiff
path: root/talermerchantdemos/blog/articles/en/java-trap.html
diff options
context:
space:
mode:
Diffstat (limited to 'talermerchantdemos/blog/articles/en/java-trap.html')
-rw-r--r--talermerchantdemos/blog/articles/en/java-trap.html252
1 files changed, 252 insertions, 0 deletions
diff --git a/talermerchantdemos/blog/articles/en/java-trap.html b/talermerchantdemos/blog/articles/en/java-trap.html
new file mode 100644
index 0000000..27e8fc4
--- /dev/null
+++ b/talermerchantdemos/blog/articles/en/java-trap.html
@@ -0,0 +1,252 @@
+<!--#include virtual="/server/header.html" -->
+<!-- Parent-Version: 1.77 -->
+<title>Free but Shackled - The Java Trap
+- GNU Project - Free Software Foundation</title>
+<!--#include virtual="/philosophy/po/java-trap.translist" -->
+<!--#include virtual="/server/banner.html" -->
+
+<h2>Free but Shackled - The Java Trap</h2>
+
+<p>by <a href="http://www.stallman.org/">Richard Stallman</a></p>
+
+
+<div class="announcement"><blockquote><h3>Headnote</h3>
+<p>Since this article was first published, Sun (now part of Oracle)
+has <a href="http://www.fsf.org/news/fsf-welcomes-gpl-java.html">relicensed</a>
+most of its Java platform reference implementation under the GNU
+General Public License, and there is now a free development
+environment for Java. Thus, the Java language as such is no longer a
+trap.</p>
+
+<p>You must be careful, however, because not every Java platform is
+free. Sun continues distributing an executable
+Java platform which is nonfree, and other companies do so too.</p>
+
+<p>The free environment for Java is called IcedTea; the source code
+Sun freed is included in that. So that is the one you should use.
+Many GNU/Linux distributions come with IcedTea, but some include
+nonfree Java platforms. (Note, added 10/2015: The free implementation
+of Java is known as OpenJDK in many GNU/Linux distributions.)</p>
+
+<p>To reliably ensure your Java programs run fine in a free
+environment, you need to develop them using IcedTea. Theoretically
+the Java platforms should be compatible, but they are not compatible
+100 percent.</p>
+
+<p>In addition, there are nonfree programs with &ldquo;Java&rdquo; in
+their name, such as JavaFX, and there are nonfree Java packages you
+might find tempting but need to reject. So check the licenses of
+whatever packages you plan to use. If you use Swing, make sure to use
+the free version, which comes with IcedTea. (Note, added 10/2015: A free
+replacement for JavaFX called OpenJFX has been released.)</p>
+
+<p>Aside from those Java specifics, the general issue described here
+remains important, because any nonfree library or programming platform
+can cause a similar problem. We must learn a lesson from the history of
+Java, so we can avoid other traps in the future.</p>
+
+<p>Please also see: <a href="/philosophy/javascript-trap.html">
+The JavaScript Trap</a>.</p>
+</blockquote>
+</div>
+
+<p>April 12, 2004</p>
+
+<p>
+ If your program is free software, it is basically ethical&mdash;but
+ there is a trap you must be on guard for. Your program, though in
+ itself free, may be restricted by nonfree software that it depends
+ on. Since the problem is most prominent today for Java programs, we
+ call it the Java Trap.
+</p>
+
+<p>
+ A program is free software if its users have certain crucial
+ freedoms. Roughly speaking, they are: the freedom to run the
+ program, the freedom to study and change the source, the freedom to
+ redistribute the source and binaries, and the freedom to publish
+ improved versions. (See
+ <a href="/philosophy/free-sw.html">http://www.gnu.org/philosophy/free-sw.html</a>.)
+ Whether any given program in source form is free software depends
+ solely on the meaning of its license.
+</p>
+
+<p>
+ Whether the program can be used in the Free World, used by people who mean to
+ live in freedom, is a more complex question. This is not determined by the
+ program's own license alone, because no program works in isolation. Every program
+ depends on other programs. For instance, a program needs to be compiled or
+ interpreted, so it depends on a compiler or interpreter. If compiled into
+ byte code, it depends on a byte-code interpreter. Moreover, it needs
+ libraries in order to run, and it may also invoke other separate programs
+ that run in other processes. All of these programs are dependencies.
+ Dependencies may be necessary for the program to run at all, or they may
+ be necessary only for certain features. Either way, all or part of the
+ program cannot operate without the dependencies.
+</p>
+
+<p>
+ If some of a program's dependencies are nonfree, this means that
+ all or part of the program is unable to run in an entirely free
+ system&mdash;it is unusable in the Free World. Sure, we could
+ redistribute the program and have copies on our machines, but that's
+ not much good if it won't run. That program is free software, but it
+ is effectively shackled by its nonfree dependencies.
+</p>
+
+<p>
+ This problem can occur in any kind of software, in any language. For
+ instance, a free program that only runs on Microsoft Windows is clearly
+ useless in the Free World. But software that runs on GNU/Linux can also be
+ useless if it depends on other nonfree software. In the past, Motif (before
+ we had LessTif) and Qt (before its developers made it free software) were
+ major causes of this problem. Most 3D video cards work fully only with
+ nonfree drivers, which also cause this problem. But the major source of
+ this problem today is Java, because people who write free software often
+ feel Java is sexy. Blinded by their attraction to the language, they
+ overlook the issue of dependencies and fall into the Java Trap.
+</p>
+
+<p>
+ Sun's implementation of Java is nonfree. The standard Java libraries are
+ nonfree also. We do have free implementations of Java, such as the <a
+ href="http://gcc.gnu.org/java/">GNU Compiler for Java</a> (GCJ) and <a
+ href="/software/classpath">GNU Classpath</a>, but they don't support all the
+ features yet. We are still catching up.
+</p>
+
+<p>
+ If you develop a Java program on Sun's Java platform, you are liable
+ to use Sun-only features without even noticing. By the time you find
+ this out, you may have been using them for months, and redoing the
+ work could take more months. You might say, &ldquo;It's too much
+ work to start over.&rdquo; Then your program will have fallen into
+ the Java Trap; it will be unusable in the Free World.
+</p>
+
+<p>
+ The reliable way to avoid the Java Trap is to have only a free implementation
+ of Java on your system. Then if you use a Java feature or library that free
+ software does not yet support, you will find out straightaway, and you can
+ rewrite that code immediately.
+</p>
+
+<p>
+ Sun continues to develop additional &ldquo;standard&rdquo; Java
+ libraries, and nearly all of them are nonfree; in many cases, even
+ a library's specification is a trade secret, and Sun's latest
+ license for these specifications prohibits release of anything less
+ than a full implementation of the specification. (See
+ <a href="http://jcp.org/aboutJava/communityprocess/JSPA2.pdf">http://jcp.org/aboutJava/communityprocess/JSPA2.pdf</a> and
+ <a href="http://jcp.org/aboutJava/communityprocess/final/jsr129/j2me_pb-1_0-fr-spec-license.html">http://jcp.org/aboutJava/communityprocess/final/jsr129/j2me_pb-1_0-fr-spec-license.html</a>
+ for examples.)
+</p>
+
+<p>
+ Fortunately, that specification license does permit releasing an
+ implementation as free software; others who receive the library can be
+ allowed to change it and are not required to adhere to the specification.
+ But the requirement has the effect of prohibiting the use of a collaborative
+ development model to produce the free implementation. Use of that model would
+ entail publishing incomplete versions, something those who have read the
+ spec are not allowed to do.
+</p>
+
+<p>
+ In the early days of the free software movement, it was impossible to avoid
+ depending on nonfree programs. Before we had the GNU C compiler, every C
+ program (free or not) depended on a nonfree C compiler. Before we had the
+ GNU C library, every program depended on a nonfree C library. Before we had
+ Linux, the first free kernel, every program depended on a nonfree kernel.
+ Before we had BASH, every shell script had to be interpreted by a nonfree
+ shell. It was inevitable that our first programs would initially be hampered
+ by these dependencies, but we accepted this because our plan included rescuing
+ them subsequently. Our overall goal, a self-hosting GNU operating system,
+ included free replacements for all those dependencies; if we reached the goal,
+ all our programs would be rescued. Thus it happened: with the GNU/Linux system,
+ we can now run these programs on free platforms.
+</p>
+
+<p>
+ The situation is different today. We now have powerful free operating systems
+ and many free programming tools. Whatever job you want to do, you can do it on
+ a free platform; there is no need to accept a nonfree dependency even
+ temporarily. The main reason people fall into the trap today is because they
+ are not thinking about it. The easiest solution to the problem
+ is to teach people to recognize it and not fall into it.
+</p>
+
+<p>
+ To keep your Java code safe from the Java Trap, install a free Java
+ development environment and use it. More generally, whatever
+ language you use, keep your eyes open, and check the free status of
+ programs your code depends on. The easiest way to verify that a
+ program is free is by looking for it in the Free Software Directory
+ (<a href="http://www.fsf.org/directory">http://www.fsf.org/directory</a>).
+ If a program is not in the directory, you can check its license(s)
+ against the list of free software licenses
+ (<a href="/licenses/license-list.html">http://www.gnu.org/licenses/license-list.html</a>).
+</p>
+
+<p>
+ We are trying to rescue the trapped Java programs, so if you like the Java
+ language, we invite you to help in developing GNU Classpath. Trying your
+ programs with the GCJ Compiler and GNU Classpath, and reporting any
+ problems you encounter in classes already implemented, is also useful.
+ However, finishing GNU Classpath will take time; if more nonfree libraries
+ continue to be added, we may never have all the latest ones. So please don't
+ put your free software in shackles. When you write an application program
+ today, write it to run on free facilities from the start.
+</p>
+
+<h3>See also:</h3>
+<p><a href="/philosophy/sun-in-night-time.html">The Curious Incident
+of Sun in the Night-Time</a></p>
+
+</div><!-- for id="content", starts in the include above -->
+<!--#include virtual="/server/footer.html" -->
+<div id="footer">
+<div class="unprintable">
+
+<p>Please send general FSF &amp; GNU inquiries to
+<a href="mailto:gnu@gnu.org">&lt;gnu@gnu.org&gt;</a>.
+There are also <a href="/contact/">other ways to contact</a>
+the FSF. Broken links and other corrections or suggestions can be sent
+to <a href="mailto:webmasters@gnu.org">&lt;webmasters@gnu.org&gt;</a>.</p>
+
+<p><!-- TRANSLATORS: Ignore the original text in this paragraph,
+ replace it with the translation of these two:
+
+ We work hard and do our best to provide accurate, good quality
+ translations. However, we are not exempt from imperfection.
+ Please send your comments and general suggestions in this regard
+ to <a href="mailto:web-translators@gnu.org">
+ &lt;web-translators@gnu.org&gt;</a>.</p>
+
+ <p>For information on coordinating and submitting translations of
+ our web pages, see <a
+ href="/server/standards/README.translations.html">Translations
+ README</a>. -->
+Please see the <a
+href="/server/standards/README.translations.html">Translations
+README</a> for information on coordinating and submitting translations
+of this article.</p>
+</div>
+
+<p>Copyright &copy; 2004, 2010, 2015 Richard Stallman</p>
+
+<p>This page is licensed under a <a rel="license"
+href="http://creativecommons.org/licenses/by-nd/4.0/">Creative
+Commons Attribution-NoDerivatives 4.0 International License</a>.</p>
+
+<!--#include virtual="/server/bottom-notes.html" -->
+
+<p class="unprintable">Updated:
+<!-- timestamp start -->
+$Date: 2015/10/03 16:55:22 $
+<!-- timestamp end -->
+</p>
+</div>
+</div>
+</body>
+</html>