diff options
Diffstat (limited to 'talermerchantdemos/blog/articles/scrap1_35.html')
-rw-r--r-- | talermerchantdemos/blog/articles/scrap1_35.html | 312 |
1 files changed, 0 insertions, 312 deletions
diff --git a/talermerchantdemos/blog/articles/scrap1_35.html b/talermerchantdemos/blog/articles/scrap1_35.html deleted file mode 100644 index 3e5b075..0000000 --- a/talermerchantdemos/blog/articles/scrap1_35.html +++ /dev/null @@ -1,312 +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="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"/> - |