Monday April 12, 2004 (10:00 AM GMT) By: Richard M. Stallman
もし貴方のプログラムがフリーなソフトウェアであるなら、それは基本的には倫理的に正しいといえる。だが、ここには陥らないようにしなくてはいけない罠がある。貴方のプログラムはそれ自体がフリーだとしても、依存しているノンフリーなソフトウェアによって制限されているかもしれない。最近、この問題は Java のプログラムにおいてもっとも顕著なものになってきているので、我々はこれを Java の罠と呼んでいる。
プログラムがフリーなソフトウェアかどうかは、その使用者がある決定的な自由を持っているかによる。端的に言ってその自由とは、プログラムを実行する自由であり、ソースを研究し変更する自由であり、そのソースとバイナリを再配布する自由であり、改善したバージョンを公表する自由である (http://www.gnu.org/philosophy/free-sw.html を見よ)。よって、与えられたプログラムがフリーなソフトウェアであるかどうかは単にそのライセンスの内容に依存する。
だが、そのプログラムが自由な世界でも使えるか、自由に生きるつもりのある人々によって使われるか、というのはもうすこし込み入った質問である。これはそのプログラムのライセンスだけで決めることはできない。というのは、孤立して動作するプログラムなどないからである。全てのプログラムは他のプログラムに依存している。例えば、コンパイルされたりインタプリタの解釈によって動作するプログラムは、コンパイラやインタプリタに依存している。バイトコードにコンパイルされると、バイトコードインタプリタに依存する。その上、実行するにはライブラリが必要であったり、他プロセスで実行中の別プログラムを呼び出すこともある。このようなプログラムは全て依存関係を持っている。依存関係はプログラム全体を実行するのに必要になるかもしれないし、特定の機能を使う際に必要になるかもしれない。どちらにせよ、依存関係なしではプログラムは動作しない。
プログラムの依存関係にフリーでないものがあるということは、そのプログラム全体あるいは一部を完全にフリーなシステムにおいて実行することができないということを意味している。つまり、自由な世界では使えないということである。もちろん、そのプログラムを再配布したり自分達のマシンにコピーすることはできる。だが実行できないのなら、そんなことをしても何の役にも立たない。プログラムはフリーであっても、フリーでない依存関係によって事実上拘束されているのだ。
この問題はどのようなソフトウェア、どのようなプログラミング言語でも生じる可能性がある。例えば、Microsoft Windows 上だけで動作するようなフリーなプログラムは、明らかに自由な世界では使えない。しかし、GNU/Linux 上で動作するプログラムでも、他のフリーでないソフトウェアに依存するのであれば自由な世界では使えないのである。過去においては、Motif (我々が LessTif を手にする以前) や QT (開発者がこれをフリーなソフトウェアに変更する以前) が有名なこの問題を引き起こす原因であった。また、ほとんどの 3D ビデオカードはフリーでないドライバーを使った場合のみ完全に動作するが、これもこの問題を引き起こす。だが、最近のこの問題を引き起こす主要な原因は Java である。フリーなソフトウェアを作る人間にとって Java はしばしば魅力的に見えるからだ。彼ら?はこの言語の魅力に目がくらんで依存関係の問題を見過ごしてしまい、Java の罠に引っ掛かってしまうのだ。
Sun による Java の実装はフリーではない。Blackdown もまたフリーではない。Sun のプロプライエタリなコードを改造しているからだ。標準 Java ライブラリもフリーではない。我々にはフリーな Java の実装として GNU Java Compiler と GNU Classpath があるが、それらは今のところ全ての機能をサポートしていない。現在も追随している最中である。
Java プログラムを Sun の Java プラットフォーム上で開発していると、気がつかないうちに Sun 独自の機能を使用してしまうことがよくある。このことが判明するまでに何ヶ月もかかっていると、やり直すにはもっと時間がかかるだろう。貴方はこう言うかもしれない。「しなくちゃならないことが多すぎて最初からやり直すなんてできないよ」、と。このとき、貴方のプログラムは Java の罠に陥っている。つまり、自由な世界では使えなくなっているということだ。
Java の罠を避ける確実な方法はフリーな Java 実装だけをシステムに入れることである。そのときフリーなソフトウェアで未サポートの Java の機能やライブラリを使っていたら、すぐに見つけ出してその部分を書き換えて欲しい。
Sun は追加の「標準」Java ライブラリを開発し続けていて、それらはほとんど全てフリーでない。さらに多くの場合、ライブラリの仕様ですら企業秘密になっている。また、最新の Sun の仕様のライセンスでは完全な実装をしないままリリースするのを禁止している (例えば、http://jcp.org/aboutJava/communityprocess/JSPA2.pdf や http://jcp.org/aboutJava/communityprocess/final/jsr129/j2me_pb-1_0-fr-spec-license.html を見よ)。
幸運なことに、これらの仕様についてのライセンスはフリーなソフトウェア実装としてのリリースを禁止しているわけではない。ライブラリを受け取った人はそれを変更することができ、仕様に忠実であることは要求されない。だがこのライセンスの要求事項は、フリーな実装を作り出すのに協調的な開発モデルを使うのを禁止するような効果をもっている。こういう開発モデルでは必然的に不完全なバージョンを公表することになるが、仕様書を読んでしまった人間にこれは許可されないのだ。
初期のフリーソフトウェア運動においては、フリーでないプログラムへの依存は避けられなかった。我々が GNU C Compiler を手にする以前は、全ての C プログラムは (フリーなものであれ、そうでないものであれ) フリーでない C コンパイラに依存していた。我々が GNU C Library を手にする以前は、全てのプログラムはフリーでない C ライブラリに依存していた。我々が Linux というフリーである最初の OS カーネルを手にする以前は、全てのプログラムはフリーでない OS カーネルに依存していた。我々が Bash を手にする以前は、全てのシェルスクリプトはフリーでないシェルによって解釈されていた。我々の初期のプログラムがこれらの依存関係に邪魔されるのは不可避なことであったが、我々はこれを許容した。なぜなら、我々の計画の中には、後々これらのプログラムをも救済するというものがあったからである。我々の最終的な目標は自らをホスティングする GNU オペレーティングシステムであり、その中ではこれらの依存関係全てに対するフリーな代替物が用意されている。つまり、我々が目標に到達すれば全てのプログラムは救済されるのだ。そして、これは実現した。GNU/Linux を用いて、我々は今やこれらのプログラムをフリーなプラットフォーム上で実行できるようになった。
今日では状況がさらに変わっている。我々には強力なフリーの OS があり、多くのフリーなプログラミングツールがある。どのような仕事をしたいと思っても、それをフリーなプラットフォーム上ですることができる。一時的にでさえフリーでない依存関係を受け入れる必要はない。人々が罠に陥ってしまう主な理由は、彼らが無思慮であったからである。Java の罠という問題を解決する最も容易な方法は、人々が罠にかからないように教唆することである。
Java のコードを Java の罠から安全に保つために、フリーな Java 開発環境をインストールし、それを使用せよ。もっと一般的に言って、どんなプログラミング言語を使う場合でも、目をちゃんと開いてそのコードが依存するプログラムがフリーかどうかチェックせよ。プログラムがフリーかどうか検証する一番簡単な方法は、そのプログラムを Free Software Directory で検索することである。そこになければ、そのソフトウェアのライセンスをフリーソフトウェアライセンスのリストと比較してチェックすることもできる。
我々は罠にかかった Java プログラムを救済しようと思っている。もし貴方が Java 言語を好んでいるのなら、我々は貴方が GNU Classpath の開発を手助けしてくれることを歓迎する。プログラムを GJC コンパイラと GNU Classapath で動作させてみて、実装済みのクラスで起きた問題を報告してくれると助かる。だが、GNU Classpath の完成には時間がかかるだろう。もし、これ以上フリーでないライブラリが追加されるのなら、我々には最新のものが手に入らなくなるかもしれない。お願いだからフリーなソフトウェアを拘束しないで欲しい。これからアプリケーションプログラムを書くのなら、最初からフリーな環境で実行できるように書いて欲しい。
Copyright 2004 Richard Stallman Verbatim copying and distribution of this entire article are permitted worldwide without royalty in any medium provided this notice is preserved.
God bless any child in this world and beyond