summaryrefslogtreecommitdiff
path: root/talermerchantdemos/blog/articles/scrap1_35.html
diff options
context:
space:
mode:
Diffstat (limited to 'talermerchantdemos/blog/articles/scrap1_35.html')
-rw-r--r--talermerchantdemos/blog/articles/scrap1_35.html312
1 files changed, 312 insertions, 0 deletions
diff --git a/talermerchantdemos/blog/articles/scrap1_35.html b/talermerchantdemos/blog/articles/scrap1_35.html
new file mode 100644
index 0000000..3e5b075
--- /dev/null
+++ b/talermerchantdemos/blog/articles/scrap1_35.html
@@ -0,0 +1,312 @@
+<!-- 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="The-JavaScript-Trap">
+ </a>
+ <h1 class="chapter">
+ 35. The JavaScript Trap
+ </h1>
+ <a name="index-JavaScript-2">
+ </a>
+ <a name="index-traps_002c-JavaScript">
+ </a>
+ <p>
+ In the free software community, the idea that nonfree programs
+mistreat their users is familiar. Some of us refuse entirely to
+install proprietary software, and many others consider nonfreedom a
+strike against the program. Many users are aware that this issue
+applies to the plug-ins that browsers offer to install, since they can
+be free or nonfree.
+ </p>
+ <p>
+ But browsers run other nonfree programs which they don’t ask you
+about or even tell you about—programs that web pages contain or
+link to. These programs are most often written in JavaScript, though
+other languages are also used.
+ </p>
+ <p>
+ JavaScript (officially called
+ <a name="index-ECMAScript">
+ </a>
+ ECMAScript, but few use that name) was
+once used for minor frills in web pages, such as cute but inessential
+navigation and display features. It was acceptable to consider these
+as mere extensions of
+ <a name="index-HTML-1">
+ </a>
+ HTML markup, rather than as true software; they
+did not constitute a significant issue.
+ </p>
+ <p>
+ Many sites still use JavaScript that way, but some use it for major
+programs that do large jobs. For instance,
+ <a name="index-Google-Docs-1">
+ </a>
+ Google Docs downloads into
+your machine a JavaScript program which measures half a megabyte, in a
+compacted form that we could call Obfuscript because it has no
+comments and hardly any whitespace, and the method names are one
+letter long. The source code of a program is the preferred form for
+modifying it; the compacted code is not source code, and the real
+source code of this program is not available to the user.
+ </p>
+ <p>
+ Browsers don’t normally tell you when they load JavaScript programs.
+Most browsers have a way to turn off JavaScript entirely, but none of
+them can check for JavaScript programs that are nontrivial and
+nonfree. Even if you’re aware of this issue, it would take you
+considerable trouble to identify and then block those programs.
+However, even in the free software community most users are not aware
+of this issue; the browsers’ silence tends to conceal it.
+ </p>
+ <p>
+ It is possible to release a JavaScript program as free software, by
+distributing the source code under a free software license. But even
+if the program’s source is available, there is no easy way to run your
+modified version instead of the original. Current free browsers do
+not offer a facility to run your own modified version instead of the
+one delivered in the page. The effect is comparable to
+ <a name="index-tivoization-4">
+ </a>
+ tivoization,
+although not quite so hard to overcome.
+ </p>
+ <p>
+ JavaScript is not the only language web sites use for programs sent to
+the user.
+ <a name="index-Flash">
+ </a>
+ Flash supports programming through an extended variant of
+JavaScript. We will need to study the issue of Flash to make suitable
+recommendations. Silverlight seems likely to create a problem similar
+to Flash, except worse, since Microsoft uses it as a platform for
+nonfree codecs. A free replacement for
+ <a name="index-Silverlight-_0028see-also-Microsoft_0029">
+ </a>
+ Silverlight does not do the job
+for the free world unless it normally comes with free replacement codecs.
+ </p>
+ <a name="index-Java-3">
+ </a>
+ <p>
+ Java applets also run in the browser, and raise similar issues. In
+general, any sort of applet system poses this sort of problem. Having
+a free execution environment for an applet only brings us far enough
+to encounter the problem.
+ </p>
+ <p>
+ A strong movement has developed that calls for web sites to
+communicate only through formats and protocols that are free (some say
+“open”); that is to say, whose documentation is published and which
+anyone is free to implement. With the presence of programs in web
+pages, that criterion is necessary, but not sufficient. JavaScript
+itself, as a format, is free, and use of JavaScript in a web site is
+not necessarily bad. However, as we’ve seen above, it also isn’t
+necessarily OK. When the site transmits a program to the user, it is
+not enough for the program to be written in a documented and
+unencumbered language; that program must be free, too. “Only free
+programs transmitted to the user” must become part of the criterion
+for proper behavior by web sites.
+ </p>
+ <p>
+ Silently loading and running nonfree programs is one among several
+issues raised by “web applications.” The term “web
+application” was designed to disregard the fundamental
+distinction between software delivered to users and software running
+on the server. It can refer to a specialized client program running
+in a browser; it can refer to specialized server software; it can
+refer to a specialized client program that works hand in hand with
+specialized server software. The client and server sides raise
+different ethical issues, even if they are so closely integrated that
+they arguably form parts of a single program. This article addresses
+only the issue of the client-side software. We are addressing the
+server issue separately.
+ </p>
+ <p>
+ In practical terms, how can we deal with the problem of nonfree
+JavaScript programs in web sites? Here’s a plan of action.
+ </p>
+ <p>
+ First, we need a practical criterion for nontrivial JavaScript
+programs. Since “nontrivial” is a matter of degree, this is
+a matter of designing a simple criterion that gives good results,
+rather than determining the one correct answer.
+ </p>
+ <p>
+ Our proposal is to consider a JavaScript program nontrivial if it
+makes an
+ <a name="index-AJAX-request">
+ </a>
+ AJAX request, and consider it nontrivial if it defines
+methods and either loads an external script or is loaded as one.
+ </p>
+ <p>
+ At the end of this article we propose a convention by which a
+nontrivial JavaScript program in a web page can state the URL where
+its source code is located, and can state its license too, using
+stylized comments.
+ </p>
+ <p>
+ Finally, we need to change free browsers to support freedom for
+users of pages with JavaScript. First of all, browsers should be able
+to tell the user about nontrivial nonfree JavaScript programs, rather
+than running them. Perhaps
+ <a name="index-NoScript">
+ </a>
+ NoScript could be adapted to do this.
+ </p>
+ <p>
+ Browser users also need a convenient facility to specify JavaScript
+code to use
+ <em>
+ instead
+ </em>
+ of the JavaScript in a certain page.
+(The specified code might be total replacement, or a modified version
+of the free JavaScript program in that page.)
+ <a name="index-Greasemonkey">
+ </a>
+ Greasemonkey comes close
+to being able to do this, but not quite, since it doesn’t guarantee to
+modify the JavaScript code in a page before that program starts to
+execute. Using a local proxy works, but is too inconvenient now to be
+a real solution. We need to construct a solution that is reliable and
+convenient, as well as sites for sharing changes. The GNU Project
+would like to recommend sites which are dedicated to free changes
+only.
+ </p>
+ <p>
+ These features will make it possible for a JavaScript program included
+in a web page to be free in a real and practical sense. JavaScript
+will no longer be a particular obstacle to our freedom—no more than
+C and
+ <a name="index-Java-4">
+ </a>
+ Java are now. We will be able to reject and even replace the nonfree
+nontrivial JavaScript programs, just as we reject and replace nonfree
+packages that are offered for installation in the usual way. Our
+campaign for web sites to free their JavaScript can then
+begin.
+ </p>
+ <p>
+ Thank you to
+ <a name="index-Lee_002c-Matt">
+ </a>
+ Matt Lee and
+ <a name="index-Resig_002c-John">
+ </a>
+ John Resig for their help in defining our
+proposed criterion, and to
+ <a name="index-Parunakian_002c-David">
+ </a>
+ David Parunakian and
+ <a name="index-Rumith_002c-Jaffar">
+ </a>
+ Jaffar Rumith for
+bringing this issue to my attention.
+ </p>
+ <a name="Appendix_003a-A-Convention-for-Releasing-Free-JavaScript-Programs">
+ </a>
+ <h3 class="subheading">
+ Appendix: A Convention for Releasing Free JavaScript Programs
+ </h3>
+ <a name="index-GPL_002c-releasing-JavaScript-programs-under">
+ </a>
+ <p>
+ For references to corresponding source code, we recommend
+ </p>
+ <table>
+ <tr>
+ <td>
+ </td>
+ <td>
+ <pre class="smallexample">
+ // @source:
+
+</pre>
+ </td>
+ </tr>
+ </table>
+ <p>
+ followed by the URL.
+ </p>
+ <p>
+ To indicate the license of the JavaScript code embedded in a page, we
+recommend putting the license notice between two notes of this form:
+ </p>
+ <table>
+ <tr>
+ <td>
+ </td>
+ <td>
+ <pre class="smallexample">
+ @licstart The following is the entire license notice for the
+ JavaScript code in this page.
+ ...
+ @licend The above is the entire license notice
+ for the JavaScript code in this page.
+
+</pre>
+ </td>
+ </tr>
+ </table>
+ <p>
+ Of course, all of this should be contained in a multiline comment.
+ </p>
+ <p>
+ The GNU GPL, like many other free software licenses, requires distribution of a copy of the license with both source and binary forms of the program. However, the GNU GPL is long enough that including it in a page with a JavaScript program can be inconvenient. You can remove that requirement, for code that you have the copyright on, with a license notice like this:
+ </p>
+ <table>
+ <tr>
+ <td>
+ </td>
+ <td>
+ <pre class="smallexample">
+ Copyright (C) YYYY Developer
+
+ The JavaScript code in this page is free software: you can
+ redistribute it and/or modify it under the terms of the GNU
+ General Public License (GNU GPL) as published by the Free Software
+ Foundation, either version 3 of the License, or (at your option)
+ any later version. The code is distributed WITHOUT ANY WARRANTY;
+ without even the implied warranty of MERCHANTABILITY or FITNESS
+ FOR A PARTICULAR PURPOSE. See the GNU GPL for more details.
+
+ As additional permission under GNU GPL version 3 section 7, you
+ may distribute non-source (e.g., minimized or compacted) forms of
+ that code without the copy of the GNU GPL normally required by
+ section 4, provided you include this license notice and a URL
+ through which recipients can access the Corresponding Source.
+
+</pre>
+ </td>
+ </tr>
+ </table>
+ <a name="index-GPL_002c-releasing-JavaScript-programs-under-1">
+ </a>
+ <a name="index-JavaScript-3">
+ </a>
+ <a name="index-traps_002c-JavaScript-1">
+ </a>
+ <hr size="2"/>
+