わたしのLispの経験とGNU Emacsの開発
2002年10月28日、国際Lispカンファレンスでのリチャード・ストールマンの講演の記録。
わたしの通常の講演はLispとまったく関係ないので、本日はそのどれでも感謝されないでしょう。ですから即席でしゃべらなくてはならないでしょう。わたしのキャリアにおいて、わたしはLispと関連したことをたくさんやってきたので、なにか興味深いことを話せるべきでしょう。
わたしの最初のLispの経験は、高校でLisp 1.5マニュアルを読んだときです。その時、わたしの心に、そのようなコンピュータ言語がありうるという考えが吹きつけられたのです。Lispでなにかをやってみるチャンスの最初は、ハーバードの新入生の時で、PDP-11のためにLispインタプリタを書いた時です。それはとても小さなマシンで(メモリがだいたい8kです)、1000命令でインタプリタをなんとか書きました。これで少しのデータに対して余地を得ることができました。本当のシステムの仕事をする本当のソフトウェアがどういったものであるかを知る前のことです。
MITで働きはじめたら、ジョンL・ホワイトと本当のLispの実装の仕事をはじめました。AIラボ(人工知能研究所)に雇われましたが、ジョンLではなく、ラス・ノフトスカによってです。これは、引き続いて起こることを考えると、もっとも皮肉なことで、かれはこの日を実に後悔したに違いありません。
1970年代、わたしの人生が恐ろしい事件で政治問題となる前、わたしは、いろいろなプログラムのために、拡張を次から次に作成することを進めていただけでした。そして、そのほとんどはLispと関係ありませんでした。しかし、その道すがら、テキスト・エディタ、Emacsを書きました。Emacsの興味深い考えは、それがプログラミング言語を有し、そのインタプリタ・プログラミング言語でユーザの編集コマンドが書かれ、編集している最中に、エディタに新しいコマンドをロードできる、ということです。使っているプログラムを編集でき、それから、それで編集を進められるのです。ですから、プログラミング以外のことにも有用なシステムを有していて、なお、使いつつプログラムできる、のでした。それが、そういったものの最初であるかどうかは知りませんが、それがそのような最初のエディタであったのは確かです。
自身のエディテングに使う、巨大で複雑なプログラムを築き上げ、そしてほかの人々と交換する精神は、当時AIラボであった自由気ままな協力の精神を刺激しました。有するどんなプログラムのコピーでも、それを欲しい誰かに与えられる、という考えでした。それを使いたい誰とでもプログラムを共有しました。それは人類の知識でした。わたしたちがソフトウェアを共有する方法とEmacsの設計の関係に、組織化された政治的思想はなにもありませんでしたが、両者の間にはつながりがあった、おそらく、無意識のつながりがあった、ということには同意します。Emacsを導き、それがそうであるようにしたのは、わたしたちが暮らしたAIラボの方法の性質だと思います。
オリジナルのEmacsにはLispはありませんでした。低レベルの言語、インタプリタ言語ではない、のは、PDP-10のアセンブラでした。わたしたちが、そこで使ったインタプリタ(言語)は、実際はEmacsのために書かれたものではなく、TECOのために書かれたものでした。それは、わたしたちのテキスト・エディタで、とてつもなく醜いプログラム言語で可能な限り醜い、というものでした。その理由は、プログラミング言語になるように設計されておらず、エディタとコマンド言語になるように設計されていたからです。「5行移動」を意味する‘5l’のようなコマンドや、‘i’に文字列、続いてESCで、その文字列を挿入、などです。コマンド文字列、と呼ばれたコマンドの列である文字列をタイプするのでした。それをESC ESCで終了すると、実行されるのです。
まぁ、人々がこの言語にプログラミングの機能を拡張したがり、いくつか足しました。たとえば、最初のものは、ループ構造で、<
>
でした。これを、あるものの回りに置くと、それがループとなりました。そのほか、ループから条件脱出するのに使われる暗号のようなコマンドがありました。Emacsを作るのに、わたしたち [1]は、名前付きのサブルーチンを持つような機能を追加しました。それ以前は、Basicのようなもので、サブルーチンはその名前に一つの文字しか持てなかったのです。これでは大きなプログラムをプログラムするのには大変で、長い名前を持てるようにコードを追加したのです。実際、洗練された機能もいくつかありました。わたしは、LispはTECOからunwind-protectの機能を採ったと思います。
わたしたちは、洗練された機能を詰め込み始めました。すべて考えうる最悪の文法でやりましたが、動きました。人々は、それでどうにか大きなプログラムを書く事ができたのです。明確な教訓は、TECOのような言語、プログラミング言語になるべく設計されてないものですが、これは進めるのに間違ったやり方だということです。拡張を構築する言語は、結果論でプログラミング言語と考えられるべきではありません。それはプログラミング言語として設計されるべきです。実際、その目的に最適のプログラミング言語はLispだと、わたしたちは発見しました。
こうだと [2]発見したのは、バーニー・グリーンバーグでした。かれはMultics MacLispでEmacsのあるバージョンを書き、まっすぐなやり方で、かれのコマンドをMacLispで書きました。エディタ自身が全体をLispで書かれたのです。Multics Emacsは、大変な成功を収めました。新しいエディティングのコマンドをプログラミングするのがあまりに便利で、かれのオフィスの秘書でさえ、それの使い方を学習しだしたのです。Emacsの拡張の仕方を示すのに誰かが書いたマニュアルを使っていました。それには、しかし、それがプログラミングであるとは述べられていませんでした。ですから、秘書は、プログラミングはできないと思い込んでいて、怖がらなかったのです。マニュアルを読んで、有用な事ができることを発見し、プログラムすることを学習したのです。
ですから、バーニーは、気づきました。あるアプリケーション(なにか有用なプログラム)がLispを内蔵し、Lispプログラムを書き直すことで拡張できること — これは、人々がプログラミングを学ぶのに実に大変よい方法だということを。それは、かれらに有用な小さなプログラムを書く機会を与えました。これは、ほとんどの分野ではできないことでした。かれら自身の実用へと促され、最初はもっとも困難であると思われて、プログラムすることなど考えられなかったのが、プログラマとなるところまで至ったのです。
この時点で、人々は、以前はLispの実装の完全なサービスを有さなかったプラットフォームで、なにかこのようなものを得ることが、どうしたらできるかを考え始めるようになりました。Multics MacLispはインタプリタと同じように、コンパイラを有しました(立派に一人前のLispシステムでした)が、そのような何かを、Lispコンパイラをまだ書いていないほかのシステムに人々は実装したいと思いました。まぁ、Lispコンパイラを有しないのならば、Lispでエディタ全体を書くことはできないでしょう。それは、大変遅くなります。特に再描画ですが、インタープリットされるLispで実行しなければならない場合は、遅いでしょう。ですから、わたしたちはハイブリッドの技術を開発しました。その考えはこうです。Lispインタプリタとエディタの低レベル部分を一緒に書き、その部分のエディタは、組み込まれたLispの機能となるのです。最適化しなければならないと感じた部分は何でもです。これはオリジナルのEmacsで意識的に慣習としてきたテクニックでした。なぜなら、マシン語で再実装された、あるだいぶ高レベルの機能があり、TECOのプリミティブとなったのです。たとえば、TECOのプリミティブで、パラグラフを整形するものがありました(実際は、パラグラフを整形する大部分の仕事を行うものです。仕事のそんなに時間がかからない部分はTECOプログラムで高レベルでなされたからです)。作業のすべてをTECOプログラムで書くことはできたでしょうが、とても遅く、その一部をマシン語にすることで最適化したのです。ここで、わたしたちは同じアイデア(ハイブリッドのテクニック)を用いました。Lispでエディタのほとんどの部分が書かれますが、特に速く実行しなければならないある部分については、低レベルで書かれるのです。
ですから、わたしがEmacsのわたしの第二の実装を書いたとき、同じような設計に従いました。低レベル言語は、もはや機械語ではなく、Cでした。Cは良いもので、Unixライクなオペレーティング・システムで移植性の良いプログラムを実行する効率のよい言語でした。Lispインタプリタもありましたが、特別な目的のエディティングの仕事のための機構を直接Cで実装しました。エディタのバッファを操作する、本文を挿入する、ファイルに読み書きする、画面にバッファを再表示する、エディタのウィンドウを管理する、などの機構です。
この時、これは、Cで書かれてUnixで動く最初のEmacsではありませんでした。最初のものはジェームス・ゴスリングによって書かれ、GosMacsと呼ばれました。おかしな事が、かれに起きました。最初は、オリジナルのEmacsの共有と協力の精神と同じ精神によって影響されたようです。わたしは、最初、オリジナルのEmacsをMITの人々にリリースしました。わたしたちがMITで使っていたインコンパチブル・タイムシェアリングシステムで初めは動いただけですが、だれかがTwenexで動くように移植を望みました。そしてTwenexへと移植され、それは世界で数百台あったので、それを潜在的に使えるのは、数百台へと広がりました。わたしたちはかれらに配布を始めました。「あなたのすべての改善を送り返さなければなりません」というルールで。わたしたち皆が、その利益を享受するためです。誰もそれを強制しようとはしませんでしたが、わたしの知る限り、人々は協力しました。
ゴスリングは、最初は、この精神に与していたようです。かれがEmacsと呼んだプログラムのマニュアルで、その名前にふさわしく、コミュニティのほかの人々が、改善する事を望む、と書いています。それはコミュニティに対する正しいアプローチでした。コミュニティに参加を呼びかけ、プログラムをよりよいものとする、という。しかし、その後、かれは心変わりしたようで、それを会社に売りました。
当時、わたしはGNUシステム(自由ソフトウェアのUnixライクなオペレーティング・システムで、多くの人々が間違って“Linux”と呼んでいるものです)の作業をしていました。Unixで動く、自由ソフトウェアのEmacsエディタは、なにもありませんでした。しかし、わたしにはゴスリングEmacsの開発に関わった友達がいました。ゴスリングは電子メールでかれにかれ自身のバージョンを配布する許可を与えていました。かれは、そのバージョンをわたしが使うことを提案しました。そして、わたしはゴスリングのEmacsが本当のLispを有していないことを発見しました。それには、‘mocklisp’として知られたプログラミング言語があり、文法的にはLispのように見えるけれども、Lispのデータ構造は持たないものでした。ですから、プログラムはデータではなく、Lispの主要な要素が欠けていました。そのデータ構造は文字列、数、そして、いくつかの特別なものでした。
わたしはそれを使えないと結論し、すべてを置き換えなければなりませんでした。最初のステップは、肝心のLispインタプリタを書くことでした。徐々にエディタのすべての部分を実際のLispのデータ構造を元にしたものへと移行しました。アドホックなデータ構造ではなく。エディタの内部のデータ構造を外部に引き出し、ユーザのLispプログラムから操作できるものとしたのです。
一つの例外は再描画でした。長い間、再描画は、ある種の別世界でした。エディタが再描画の世界に入ると、ものごとは、とても特別なデータ構造とともに進み、それは、ガベージ・コレクションや、割り込みについて安全ではなく、その間、どんなLispのプログラムも実行できないのです。わたしたちは、それを変更しました。いまや、再描画の最中にLispのコードを実行できます。それは、とても便利なことです。
二番目のEmacsプログラムは近代的な用語として「自由ソフトウェア」でした。それは、ソフトウェアを自由にするはっきりとした政治キャンペーンの一部でした。かつてのMITの日々にわたしたちがしたように、全員が自由にものごとを行うべきである、というのがこのキャンペーンの本質であり、ソフトウェアで協力し、わたしたちと働きたい誰とでも一緒に働くのです。これが自由ソフトウェア運動の基礎です。わたしの経験、MITのAIラボで過ごした暮らし、です。人類の知識について働き、誰もがさらに使うこと、さらに人類の知識を広めることについて阻んで停止するのでなくて。
当時、Lisp用ではないほかのコンピュータとだいたい同様な値段の範囲のコンピュータを製作し、すべての命令で完全な型チェックをしつつも、Lispをほかのコンピュータよりもだいぶ速く実行する事が可能でした。通常のコンピュータでは、実行速度と良い型チェックのどちらかの選択を迫られます。ですから、Lispコンパイラでプログラムを速く実行することはできますが、数に対してcar
を取ろうとしたときは、意味のない結果を出し、結局はどこかでクラッシュします。
Lispマシンは、ほかのマシンと同じくらい速く命令を実行できましたが、それぞれの命令(たとえば、car
命令)はデータの型チェックをするので、コンパイルされたプログラムで数に対してcar
を取ろうとすると、即座にエラーとなります。わたしたちはマシンを構築し、それにLispオペレーティング・システムを載せました。それはほとんど全体がLispで書かれていました。一部、マイクロコードで書かれたものが例外としてあるだけです。人々はそれを製造する事に関心を示し、それは、会社を開始するべきことを意味しました。
この会社がどのようであるべきかについて、二つの異なる考えがありました。グリーンブラットは、「ハッカー」会社とかれが呼ぶものを始めたかったのです。これは、ハッカーによって運営される会社で、ハッカーの助けとなる方法で運営されることを意味しました。もう一つの目標は、AIラボの文化 [3]を維持することでした。残念ながら、グリーンブラットはビジネスの経験がなく、Lispマシンのグループのほかの人々は、かれが成功できるか疑っていると言いました。かれの外部からの投資を避ける計画はうまく行かないと考えていたのです。
なぜ、かれは外部からの投資を避けたかったのでしょう? それは、会社に外部の投資家がいる場合には、かれらがコントロールし、かれらはあなたにいかなる良心のとがめでもためらうことをさせないからです。そして、結局は、なにか良心のとがめがあった場合、かれらがマネージャとしてあなたの代わりとなるでしょう。
ですから、グリーンブラットは、前金で支払う顧客を見つけて、部品を買うという考えでした。そうして、マシンを構築して出荷するのです。その部品の利益で、もっとマシンの部品を買うことができ、また、マシンを売って、そしてもっと多くのマシンのための部品を買う、というようにです。そのグループのほかの人々は、そうは行かないだろうと考えていました。
グリーンブラットは、それからラッセル・ノフトスカを採用しました。わたしを雇って、それからAIラボを去り、成功した会社を創設した男です。ラッセルは、ビジネスの才能がある、と考えられていました。かれは、そのビジネスの才能を、そのグループの人々に次のように言うことで、実際に示しました。「グリーンブラットを見捨てて、かれの考えは忘れ、別の会社を作ろう」、と。後ろから斬りかかるとは、まさに、真のビジネスマンです。この人々はシンボリックスと呼ばれる会社を作ることに決めました。外部の資金を受け、良心の呵責を感じることなく、勝利のためには何でもして。
しかし、グリーンブラットはあきらめませんでした。かれとかれに忠実な何人かの人々は、どうであろうとも、リスプ・マシン社(LMI)を開始し、かれらの計画を進めることを決めました。そして、みなさん知ってますか、かれらは成功したのです! 最初の顧客を得て、その顧客は前金で支払ってくれました。マシンを製造して販売し、そしてどんどん多くのマシンを製造しました。実際は、そのグループのほとんどの人々の助力がなかったのに、かれらは成功したのです。シンボリックスも成功のスタートで出発しました。ですから、二つの競争するLispのマシンの会社があったのです。LMIが突っ伏すことがないのをシンボリックスが見たとき、かれらは、LMIを破壊する方策を探し出し始めました。
ですから、わたしたちのラボの置き去りに続いて、わたしたちのラボの「戦争」となりました。シンボリックスが、わたしとLMIでパートタイムで働く何人かを除いて、すべてのハッカーを雇ってしまったときに、ラボの置き去りが起こったのです。それから、かれらはルールを実施しMITのためにパートタイムで働く人々を除去したので、ハッカーは全面的に去ることになり、わたしだけが残ったのです。AIラボは今や無力でした。そしてMITはとても馬鹿げた協定を二つの会社と行いました。それは三方の契約で、両方の会社が、Lispマシンのシステムのソースの使用を許すものでした。二つの会社は、MITに対し、かれらの変更の使用を許す必要がありました。しかし、契約にはMITが、その変更を、両方の会社が認可したMITのLispマシンのシステムに入れる資格があるかどうかについては述べられていませんでした。誰も、AIラボのハッカーのグループが一掃されるとは想像してませんでしたが、そうなったのです。
そうして、シンボリックスはプランを出しました [4]。かれらはラボに言いました。「システムへのわたしたちの変更を使用可能とするように続けます。しかし、その変更をMITLispマシンへ入れることはできません。代わりに、シンボリックスのLispマシン・システムへのアクセスを提供し、実行することができますが、それがわたしたちができることのすべてです。」
これは、実効的に、どちらかの側を選択することを要求するものでした。MIT版のシステムか、シンボリックスの版か、を。どちらかのシステムに決めると、その選択によって、わたしたちの改善が載るシステムが決まります。シンボリックスの版で作業して改善する場合、シンボリックスだけを支持することになります。MITの版のシステムを使って改善すると、両方の会社に利用可能となりますが、LMIが存在し続けるよう助けていることになるので、シンボリックスはそれをLMIを支持しているとみなします。ですから、もはや、中立であることは許されませんでした。
この時点まで、わたしは、どちらの会社の側にも立っていませんでした。わたしたちのコミュニティとソフトウェアに起こったことを見て、惨めでしたが。しかし、今、シンボリックスは問題を押し付けてきました。ですから、リスプ・マシン社(LMI)が続けられるように [5]助ける努力として、わたしは、シンボリックスがそのLispマシン・システムに行ったすべての改善を複製する事を始めました。わたしは、同等の改善を自分自身で再度書いたのです(すなわち、コードはわたし自身のものです)。
しばらくして [6]、わたしは、かれらのコードを見ないことが最善であろうとの結論に至りました。かれらがベータ版のアナウンスをし、リリースノートを出したときに、わたしは、その機能が何かを見て、そしてそれを実装するのです。実際のリリースが行われるときには、わたしも同じようにリリースしました。
このようにして、二年間、わたしはリスプ・マシン社(LMI)が葬り去られるのを阻止し、そして、二つの会社は進みました。しかし、誰かを懲らしめるのに、悪事を妨害するだけで何年も、また何年も費やしたくはありませんでした。わたしは、かれらは、だいぶ、すっかり懲らしめられたと考えました。かれらは競争に行き詰まり、競争相手を去らせたり、消滅させたりできなかったからです [7]。そうして、新しいコミュニティの構築を始める時が来ました。新しいコミュニティは、かれらやほかの人々の行動が一掃してしまったものを置き換えるのです。
70年代のLispのコミュニティはMITAIラボに限ったものではなく、ハッカーはすべてMITというわけではありませんでした。シンボリックスが始めた戦争は、MITを一掃したものでしたが、当時、進んでいたほかの出来事もありました。協力をあきらめた人々がいて、このコミュニティの一掃と合わせ、多くは残っていませんでした。
シンボリックスを懲らしめるのを止めた後、次に何をすべきか考えなければなりませんでした。わたしは、自由なオペレーティング・システムを作る必要がありました。それは明確でした。人々が一緒に働き共有することができる唯一の方法は、自由なオペレーティング・システムによって、だったのです。
最初は、わたしは、Lispベースのシステムを作ることを考えていました。しかし、それは技術的に良い考えではなかろうと考えるに至りました。Lispマシンのようなシステムとするには、特別の目的のマイクロコードを必要とします。それが、ほかのコンピュータで動くのと同じように速くプログラムを実行させ、かつ、型チェックの恩恵を受けることを可能とするのです。それなしでは、ほかのマシンでのLispコンパイラと同じくらいに削減されてしまいます。プログラムは速くなりますが、不安定でしょう。タイムシェアリングのシステムで一つのプログラムを実行する場合には、それは問題ないでしょう。一つのプログラムがクラッシュしても、大きな災害ではありません。それはあなたのプログラムでときどきあることでしょう。しかし、オペレーティング・システムをそれで書くのは適当ではありません。ですから、わたしは、Lispマシンのようなシステムを作るという考えを捨てたのです。
そうではなくて、Unixライクなオペレーティング・システムを作ることに決め、ユーザプログラムとしてLispの実装が動かすことにしました。カーネルはLispでは書かれませんが、Lispはあります。そのオペレーティング・システムの開発、GNUオペレーティング・システムですが、これがわたしをGNU Emacsの作成に向かわせたのです。これを行うにあたり、絶対的にありうる最小のLispの実装を作ろうとしました。プログラムのサイズがとても重要な懸念だったからです。
当時、1985年、1メガバイトの仮想記憶なしのマシンを持っている人々がいて、GNU Emacsを使いたがりました。これは、プログラムをできるだけ小さく保たなければならないことを意味しました。
たとえば、当時、ループを構成するのは‘while’だけで、とても単純でした。‘while’文から抜け出す方法はなく、catchとthrowとするか、ループを回る変数をテストしなければなりませんでした。これは、わたしが物事を小さく保つためにどれだけ押し込めたかを示します。caar
もcadr
などもありませんでした。最初から、「できるだけ全部を絞り出す」のがGNU
Emacsの精神、Emacs Lispの精神でした。
あきらかに、マシンは今や大きくなり、もはやそのようにわたしたちは行っていません。caar
もcadr
なども入れました。今日では、もう一つのループ構成も入れるかもしれません。いくばくか拡張したいとは思いますが、Common
Lispのレベルまでには拡張したいとは思いません。わたしは、Common
LispをLispマシンに一度実装し、それについてすべて幸せというわけではありませんでした。ひとつわたしがあまり好みでなかったのは、キーワード引数です [8]。あれは、わたしにはあまりLispらしくありません。わたしはキーワード引数をたまに使いますが、使うのは最小にします。
これはGNUプロジェクトがLispに関係した最後ではありません。その後、1995年あたりでグラフィカルなデスクトップのプロジェクトを開始しようと考えていました。デスクトップのプログラムには、プログラミング言語があって、たくさんのプログラムを書き、プログラムがエディタのように簡単に拡張可能となるようなもの、を期待していました。問題は、どのようなプログラミング言語であるべきか、です。
当時、TCLがこの目的に強く押されていました。わたしはTCLに対してとても低い評価しかしてませんでした。基本的に、それはLispではないからです。それはLispに似たところがちょっとだけありますが、意味的には違います。また、Lispのようにきれいでもありません。そして、誰かがわたしにSunがTCLを世界の「デファクトの標準拡張言語」とするために誰かを雇おうとしているという広告を見せてくれました。そしてわたしは、「そんなことが起こらないようにしなくては」と考え、GNUの標準拡張言語をSchemeとするよう、開始したのです。それはCommon Lispではありません。なぜならそれは大きすぎるからです。その考えは、TCLがアプリケーションにリンクされるのと同じ方法でアプリケーションにリンクされるよう設計されたSchemeインタプリタを有する、というものです。それから、すべてのGNUプログラムに対して、それを好むべき拡張パッケージとして推奨するのです。
基本の拡張言語としてLisp系の強力な言語を使うことで、得ることができる興味深い恩恵があります。基本の言語へと翻訳することで、ほかの言語を実装することができるのです。基本言語がTCLの場合、TCLへと翻訳することでは、Lispを簡単には実装できません。しかし、基本言語がLispであれば、翻訳することでほかのことを実装することはそんなに難しいことではありません。わたしたちの考えは、もし、それぞれの拡張可能なアプリケーションがSchemeをサポートするならば、TCLやPythonやPerlの実装をSchemeで書けて、Schemeへとプログラムを翻訳することができる、というものでした。そして、それをどんなアプリケーションにもロードして、望みの言語でカスタマイズできて、ほかのカスタマイズと同じように動作するでしょう。
拡張の言語が弱いと、ユーザは与えられた言語だけを使わなければなりません。ある言語が好きな人々は、アプリケーションの開発者の選択のために競わなければならないことを意味します。「アプリケーション開発者の方、お願いです、わたしの言語をアプリケーションに入れてください、かれの言語ではなくて」、と。そうして、ユーザには選択の余地が全くないのです。どのアプリケーションを使っていたとしても、それがある言語とともに来て、[その言語に] 縛り付けられるのです。しかし、強力な言語を有すれば、それでほかの言語を翻訳することにより、ユーザに言語の選択を与えて言語の争いはもはや必要なくなるでしょう。これが、わたしたちのschemeインタプリタ‘Guile’に、わたしたちが望むことです。PythonからSchemeへの翻訳器を完成させる作業をする人が昨夏いました。完全に終了したのかどうか分かってないのですが、このプロジェクトに感心がある方は、どうぞ連絡ください。これが未来のためにわたしたちが考えている計画です。
まだ、自由ソフトウェアについて話していませんが、それが何を意味するかについて少し、簡単に話させてください。自由ソフトウェアは値段を意味しません。無料で入手できることを意味しません。(コピーに支払うこともありますし、無料でコピーを手にすることもあります。) それは、ユーザとして自由があることを意味します。重要なことは、プログラムを実行するに自由であること、それが何をしているか研究するに自由であること、必要に合わせて変更するに自由であること、コピーをほかの人に配布するのに自由であること、改善された拡張版を発表するに自由であること、です。これが、自由ソフトウェアが意味することです。不自由なプログラムを使う場合、重要な自由を失います。ですから、決して、そうしないでください。
GNUプロジェクトの目的は、自由なソフトウェアを提供することによって、自由を鎮圧しユーザを支配する不自由なソフトウェアを、人々が拒絶するのを容易にし、置き換えられるようにすることです。不自由なソフトウェアを拒絶する剛直さを持たない人々にとって、それが現実の不便を意味するとき、わたしたちが為そうとするのは、実際面で、少ないめんどう、少ない犠牲で移行できるように、自由な代替を与えることです。より少ない犠牲がよりよいものです。あなた方が、自由とともに暮らすのを容易とし、協力できるようにしたいと願っています。
これは協力する自由の問題です。かつてわれわれは自由と社会との協力を、それが反するものであるかのように考えてきましたが、ここでは同じ側にあります。自由ソフトウェアで、あなたは、自分自身を助ける自由と同じく、ほかの人々と協力する自由があります。不自由なソフトウェアでは、誰かがあなたを支配し、人々をバラバラのままとします。あなたが自分自身を助けるのに自由である以上には、あなたはかれらと共有することを許されず、協力する、あるいは社会を助けるのに自由ではありません。バラバラにされ助けがないのが、不自由なソフトウェアを使うユーザの状態です。
わたしたちは、とてつもなく広範囲の自由ソフトウェアを製作してきました。できっこないと人々が言ったことをわたしたちは行いました。自由ソフトウェアの二つのオペレーティング・システムを有しています。たくさんのアプリケーションを有しますが、あきらかに、もっと先へと道は続きます。ですから、あなた方の助けが必要です。GNUプロジェクトのためにボランティアをしてくださるよう、お願いします。もっとたくさんの仕事のための自由ソフトウェアを開発するのを手伝ってください。gnu.org/helpを見て、どのように手伝えるか提案を探してください。ものを注文したい場合、ホームページからリンクがあります。理念の問題について読みたければ、/philosophyを見てください。使う自由ソフトウェアを探す場合は、/directoryを見てください。約1900のパッケージが今掲載されています(存在するすべての自由ソフトウェアの一部です)。もっと書いて、わたしたちに貢献してください。わたしの小論の本、“Free Software and Free Society”は売出し中で、www.gnu.orgで購入できます [9]。どうか、幸福なハッキングを!
脚注
- ガイ・スティールはオリジナルの対称的なEmacsのコマンドセットをデザインし、それから、かれとわたしは、(TECOの上に)Emacsの実装を始めました。しかし、一回の長い共同の開発セッションの後、スティールとは疎遠になりはじめ、わたしがEmacsを完成させました。ほかの人々も、特に、ユジーン・C・チェッカレリとマイク・マクマホンもその後、重要な貢献をしました。
- バーニー・グリーンバーグは、ダン・ワインレブのLispマシンのEmacsの実装は、グリーンバーグのMulticsの実装より前に出たと言っています。わたしは、この間違いを謝ります。
- グリーンブラットの計画は、わたしがそれを知る限り、ラボの人々がAIラボで働きつづけられるようにパートタイムで雇う、というものでした。シンボリックスは、そうではなく、ラボの人々をフルタイムで雇いました。かれらはMITで働くことを止めたのです。
- このプランの背景には、講演では明示的に述べませんでしたが、元AIラボのハッカーの初期の段階では、シンボリックスあるいはLMIでも、MIT Lisp マシンのシステムに、かれらの変更を貢献し続けた、ということがあります(契約はそれを要請してなかったにも関わらず)。シンボリックスのプランはこの協力を一方的に決裂させるものでした。
- LMIの運命に特に関心があったのではなくて、むしろ、シンボリックスが、AIラボに対する侵略を通じて得をするのを止めさせたかったのです。
- この文章は、あたかもわたしがシンボリックスのコードを一切、見なかったかのように、悪い意味で取られてしまいました。実際には、それは、最初はわたしは見た、と言っています。シンボリックスのソースコードはMITで利用可能で、わたしは読む資格がありました。そして、最初は、それがシンボリックスの変更を知る方法でした。
しかし、それは、シンボリックスのコードをコピーすることを避けるために、わたしがそれぞれの問題を異なった方法で解決するのに特別な努力をしなければならないことを意味しました。しばらくして、むしろ見ない方が良い、と結論しました。その方法で、シンボリックスのコードではどうなっているかの懸念なく、一番良い方法でコードを書くことができました。
- シンボリックスは、ある時点でMITに主張しました。わたしの仕事は、かれらの計画を妨害することにより、シンボリクスに百万ドルのコストがかかった、と。
- とても複雑で重い関数がキーワード引数を取るのは気にしません。気になるのは、“member”のような単純な基本関数でキーワード引数を使うようにすることです。
- 2021年、この本はGNU出版から購入できます。