原文は英語で、これはその翻訳です。

JavaScriptの罠

リチャード・ストールマン

あなたは、そうとは知らずに、不自由なプログラムをあなたのコンピュータで毎日実行しているかもしれません — ウェブ・ブラウザを通じて。

ウェブマスタのみなさん: ウェブサイトにおいて、JavaScriptプログラムのライセンスを提示するいくつかの方法があります。

自由ソフトウェアコミュニティでは、どんな不自由なプログラムもそのユーザを虐待する、という考えがよく知られています。わたしたちの中には、プロプライエタリなソフトウェアをまったく拒否することで自由を守る人もいます。多くの人は不自由はプログラムへの打撃だと認識します。

多くのユーザは、この問題がブラウザがインストールするようにと提供するプラグインにも関係すると知っています。プラグインには自由か不自由かの違いがありうるからです。しかし、ブラウザは、ほかの不自由なプログラムを実行します。そのプログラムについて、ブラウザは、あなたに尋ねることも告げることもないのです。そのプログラムはウェブページに含まれていたり、リンクされてたりします。これらのプログラムはほとんどの場合、JavaScriptで書かれています。ほかの言語も、また、使われていますが。

JavaScript(公式にはECMAScriptと呼ばれますが、この名前はほとんど使われません)は、きれいだが本質的ではないナビゲーションや表示の機能のような、ウェブページのちょっとした装飾のために、かつては使われました。本当のソフトウェアとしてではなく、HTMLのマークアップの単なる拡張として考え、この問題を無視することは容認されました。

いくつかのサイトは、まだそのような方法でJavaScriptを使っていますが、多くのサイトでは大きな処理をする、大きなプログラムのために使っています。たとえば、Google Docsはあなたのマシンに0.5メガバイトにも及ぶJavaScriptのプログラムをダウンロードしようとします。それは、暗黒スクリプト(Obfuscript)と呼び得る、圧縮された形式です。この圧縮された形式はソースコードから作られます。コードを読みやすくする余分な空白を削除し、理解を助ける説明のコメントを削除し、意味を持った名前を適当な短いものに置き換え、何を意味しているのか分からなくします。

自由ソフトウェアの意味の一部に、ユーザがそのプログラムのソースコード(プログラムの設計)にアクセスできることがあります。プログラムのソースコードとは、プログラマが修正するために好ましい形態を意味し、役立つ空白、説明の注釈、そして意味のある名前を含みます。コンパクト化されたコードは偽者であり、ソースコードの役に立たない代替です。そのプログラムの本当のソースコードをユーザが利用できないのであれば、ユーザはプログラムを理解できません。ですからそのプログラムは不自由です。

不自由であることに加えて、多くのこのようなプログラムはマルウェアです。なぜならユーザを詮索するからです。もっと嫌なことに、いくつかのサイトはそのページを見ているすべてのユーザの行動を記録するサービスを使います。そのサービスはおそらくその記録を「墨消し」し、ウェブサイトが取得すべきでない敏感なデータを除外するでしょう。しかし、たとえそれが信頼性をもって処理されるとしても、このようなサービスの全体の目的はウェブサイトに取得すべきでない個人情報を提供することなのです。

JavaScriptのプログラムをロードしたときに、ブラウザは通常何も言いません。いくつかのブラウザは、JavaScriptを完全に停止する方法を有してますが、たとえ、この問題を知っていたとしても、こういった瑣末ではない不自由なプログラムを同定し、ブロックするのには大変な労力が必要となるでしょう。しかし、自由ソフトウェアのコミュニティでさえ、ほとんどのユーザはこの問題を知りません。ブラウザの沈黙がこの問題を隠す傾向にあるのです。

JavaScriptプログラムを自由ソフトウェアライセンスでソースコードを配布し、自由ソフトウェアとしてリリースすることは可能です。もしそのプログラムがそれ自身で意味があるものなら(一緒に来るページと機能と目的が独立であれば)、問題ありません。あなたのマシンにファイルとしてコピーでき、変更し、ブラウザでそのファイルを見て実行できます。しかし、これは通常のケースではありません。

通常のケースでは、JavaScriptのプログラムは、特定のページやサイトで動くことが意図され、そのページやサイトは機能するためにそのプログラムに依存することになります。ここで別の問題が発生します: たとえプログラムのソースが利用可能でも、あるページやサイトを訪れたときに、オリジナルの代わりにあなたの改変版を実行する方法をブラウザは提供しないのです。この効果はTivoizationと似たようなものです。克服するのに困難を極める、ということはありませんが。

JavaScriptはウェブサイトでユーザに送られるプログラムに使われる唯一の言語ではありません。FlashはJavaScriptの拡張された一種を通じてプログラミングをサポートします。充分に完全な自由なFlashプレイヤを有するなら、(今後)不自由なFlashの問題をわたしたちは扱う必要が出るでしょう。SilverlightはFlashと同様な問題を作り出すと思われます。それがより悪いのは、マイクロソフトがそれを不自由なコーデックのプラットフォームとして使うからです。それが通常、自由な代替コーデックとともに来るのでなければ、Silverlightの自由な代替は自由な社会のために、その仕事をなし得ないでしょう。

Javaアプレットもブラウザで実行され、同様な問題を引き起こします。一般に、どのような種類のアプレットシステムもこの種の問題を有しています。アプレットの自由な実行環境を有するということは、この問題に出くわすのに十分なところに、わたしたちを連れていってくれる、というだけです。

理論的にはHTMLとCSSでプログラムすることが可能ですが、実際にはその機能は限られ不便です。(HTMLとCSSだけで)何かをすることは、すばらしいハックでしょう。そのようなプログラムは自由であるべきですが、CSSは2019年の時点において、ユーザの自由に対する深刻な問題ではありません。

ウェブサイトに対して、自由な(ある人は「オープン」と言います)、すなわち、その文書が公表されていて誰もが自由に実装できる、そういったフォーマットとプロトコルだけを通じて通信することを要求する、力強い運動が発達してきました。しかし、ウェブページの中のJavaScriptプログラムの存在がこの基準を不十分とします。JavaScriptそれ自身は、フォーマットとして自由で、ウェブサイトでJavaScriptを使うことは必ずしも悪くありません。しかし、上で述べたように、JavaScriptプログラムが不自由な場合、悪いものになりえます。サイトがプログラムをユーザに送信するとき、文書があり障害がない言語でかかれているプログラムだというだけでは十分ではないのです。つまり、そのプログラムも自由でなければなりません。「ユーザには自由なプログラムだけが送信される」ことが倫理的なウェブサイトの基準の部分となるべきです。

黙ったまま不自由なプログラムをロードして実行することは、「ウェブ・アプリケーション」によって引き起こされるいくつかの問題の一つです。「ウェブ・アプリケーション」という用語はユーザに送られるソフトウェアとサーバで実行されるソフトウェアの基本的な区別を無視するよう設計されています。それはブラウザで実行される特別なクライアントプログラムを指すこともありえますし、特別なサーバソフトウェアを指すこともありえます。また、特別なサーバソフトウェアと一緒に動く特別なクライアントプログラムを指すこともありえます。たとえそれらが密接に統合され単一のプログラムの部分のように構成されていたとしても、クライアント側とサーバ側では異なる倫理上の問題を引き起こします。この論説では、クライアント側のソフトウェアの問題だけを扱います。サーバの問題は別に扱っています。

実際面で、ウェブサイトの瑣末でない不自由なJavaScriptプログラムの問題をわたしたちはどのように扱えるでしょうか? 第一の段階は、それを実行することを避けることです。

「瑣末ではない」とは何を意味するでしょう? これは程度の問題ですから、一つの正解を探すよりも、良い結果を与える単純な基準を設計する問題です。

わたしたちの現在の基準では、以下の条件のいずれかを満たすJavaScriptプログラムを瑣末ではないとします:

JavaScriptのコードが自由かどうかをどのように伝えたらよいでしょうか? わたしたちは、別の小論で、ウェブページの瑣末ではないJavaScriptのプログラムが、そのソースコードのありかを示すURLとそのライセンスを、定式化したコメントを使って提示する慣習を提案します。

最後に、自由なブラウザがウェブページで瑣末ではない不自由なJavaScriptを検出しブロックする変更を、わたしたちは必要とします。LibreJSは、あなたが訪れるページの、不自由な瑣末ではないJavaScriptを検出し、ブロックします。LibreJSはIceCatに含まれており、Firefoxのアドオンとしても利用可能です。

ブラウザのユーザには、あるページのJavaScriptの代わりに(別の)JavaScriptコードを指定する便利な機能も必要です。(指定されたコードは全体の置き換えかもしれないし、そのページの改変された自由なJavaScriptプログラムかもしれません。)Greasemonkeyがこれを行うことができるのに近いところですが、まだ足りません。なぜなら、それはプログラムが実行を開始する前に、そのページのJavaScriptのコードを改変することを保証してないからです。ローカルなプロキシを使えば動きますが、現実の解としては今、とても不便なものです。わたしたちは、信頼できる便利な解を構築する必要と、また、変更を共有するサイトを必要とします。GNUプロジェクトは、自由な変更だけに専念するサイトを推奨したいと思います。

これらの機能で、ウェブページに含まれるJavaScriptプログラムを、本当の意味で、現実的に自由とすることがなされるでしょう。そうすれば、JavaScriptはCやJavaがもはやそうではないように、わたしたちの自由の特定の障害ではなくなるでしょう。わたしたちは、不自由な瑣末ではないJavaScriptのプログラムを拒否したり、置き換えたりできるようになるでしょう。ちょうどわたしたちが通常の方法でインストールするように提供された不自由なパッケージを拒否したり、置き換えたりするように。その時、ウェブサイトに対し、そのJavaScriptを解放させる、わたしたちの運動は開始できるのです。

それまでの間、不自由なJavaScriptプログラムを実行する一つの容認できるケースがあります: ウェブサイトのオペレータに、そのサイトで自由なJavaScriptのコードとするか、削除することについて文句を言うためにです。そうするのに一時的にJavaScriptを有効とすることをためらってはなりません。しかし、その後には再度無効とするのを忘れずに。

ウェブマスタのみなさん: ウェブサイトにおいて、JavaScriptプログラムのライセンスを提示するいくつかの方法があります。

謝辞: マット・リージョン・レジッグに、提案された基準の定義への助力に関して感謝します。また、デビッド・パルナキアンに、この問題にわたくしの関心を向けさせてくれたことを感謝します。

このページはこちらの各言語訳が利用できます:

[en] English   [ar] العربية   [es] español   [fa] فارسی   [fr] français   [hr] hrvatski   [it] italiano   [ja] 日本語   [lt] lietuvių   [nl] Nederlands   [pl] polski   [pt-br] português   [ru] русский   [tr] Türkçe   [uk] українська   [zh-cn] 简体中文  

 [FSFロゴ]  “フリーソフトウェアファウンデーション(FSF)は、コンピュータのユーザの自由を促進する世界的なミッションを持つ非営利団体です。わたしたちは、すべてのソフトウェアユーザの権利を守ります。”