Emacs 誕生50周年
Emacs Turns 50 (technologyreview.com)
要約
1976年にMIT AI Labで誕生したEmacsは、今年で50周年を迎えます。当初はTECOテキストエディタのマクロ機能拡張として開発されましたが、その強力なカスタマイズ性と使いやすさから、プログラミング環境に革命をもたらしました。Emacsは、フリーソフトウェア運動やGNU/Linuxオペレーティングシステムの誕生にも大きな影響を与えています。
全文翻訳
EMACS 誕生50周年
プログラミングは、今日私たちが知っているものとは全く異なる経験でした。実際、最初のプログラマーはコードを全く書いていませんでした。1946年にペンシルベニア大学で世界初のコンピューターの一つであるENIACに取り組んだ6人の女性は、スイッチ、ケーブル、プラグボードを物理的に設定することでそれを実現しました。
数年後、MITのエンジニアたちは、紙テープにコードをパンチしてコンピューターのメモリにロードすることでWhirlwindをプログラミングしました。これにより、それは「ストアードプログラム」方式のコンピューターの初期のものとなりました。その後、彼らはコードの各行に1枚のパンチカードを使用するようになりました。
1960年代初頭には、インタラクティブコンピューターを持つプログラマーは、「ラインエディタ」を使用して、大きくて騒がしいキーボード・プリンターマシンであるテレタイプにコードを入力できるようになりました。一度に1行のコードを入力し、その作業は現代の洗濯機ほどの大きさの回転ハードディスクに保存されていました。しかし、プログラマーがディスプレイ上で一度に多くの行を見て編集できる、現在おなじみのフルスクリーンテキストエディタはまだ存在しませんでした。
そのようなツールの最初の一つであるEMACSは、今年で50周年を迎え、現在も広く使われています。
EMACSは1976年にMIT人工知能研究所の初期のビデオ端末で初めて動作しましたが、そのコアコンセプトは非常に強力だったため、その後の数十年間で多くのオペレーティングシステム向けに書き直されました。Appleでさえ、Mac OS Xにそれをバンドルしていました。さらに、EMACSを中心に始まったソフトウェア共有コミュニティは、現代のフリーソフトウェア運動とGNU/Linuxオペレーティングシステムの誕生に貢献しました。
EMACSのルーツは、1962年にMITの先駆的なPDP-1コンピューター向けにDan Murphy氏が作成したTECOテキストエディタ(元々は「Tape Editor and Corrector」)に始まります。プログラムのコマンドは大文字でした。ユーザーはテキストを挿入するために「I」、文字を削除するために「D」などを入力しました。テープがストレージ媒体として巨大な共有ディスク上のファイルに取って代わられると、「TECO」の「T」は「Text」を表すようになりました。そして年月が経つにつれて、TECOはプログラマーがコードを編集するためのマクロと呼ばれる新しいコマンドを作成するために使用できるフル言語になりました。
1971年の秋、Carl Mikkelsen氏が、ビデオディスプレイを備えた「ガラステレタイプ」端末を活用するTECOのアドオンプログラムであるControl-Rを作成しました。Control-Rは、編集中のファイルの変更を画面に即座に表示しました。プログラマーは変更を確認するために各行を再印刷する必要がなくなりました。欠点は、ディスプレイに一度に数行のコードしか表示できないことでした。
「経験豊富で洗練されたユーザーは、EMACSを以前のどの編集形態よりもはるかに使いやすいと感じました。」
Bernard S. Greenberg, SM ’74
その後、1976年に、MIT AI Labの研究者であるRichard M. Stallman氏が、スタンフォードAI Labへの訪問中にEというフルスクリーンエディタを見ました。それに触発されて、彼はMITに戻り、Control-Rの改善に着手しました。プログラムの基盤構造に対する最も重要な変更は、すべてのキーが押されたときに独自のマクロを実行するようにしたことで、Control-Rははるかにカスタマイズしやすくなりました。研究所のハッカーたちは、Stallman氏のコードに熱狂し、コマンドの変更や追加を開始しました。
これは、Guy Steele Jr.氏(SM ’77, PhD ’80)にとって問題を引き起こしました。研究所の大学院生であったSteele氏は、他の研究所メンバーのプログラムのデバッグを手助けする必要が頻繁にありました。「これらのパッケージのいずれかを使用している人を助けるのは、ストレートなTECOを使用している人を助けるよりもはるかに難しいことに気づきました」と彼は回想します。「最終的に、皆が合意して使用できるControl-Rコマンドの標準セットを仲介することを試みるべきだと考えました。」
研究所の別のメンバーであるDavid Moon氏(’75)が協力しました。Stallman氏も参加し、最終的に彼が引き継ぎました。グループは協力して、研究所の初期のキーボードの多くにあったMetaキーを活用する標準コマンドセットを割り当てました。Meta-Fはカーソルを単語単位で前方に移動させ、Meta-Bは後方に移動させました。彼らはその結果を「エディタマクロ」または「編集マクロ」の略であるEMACSと名付けました。「私の目標は、偉大な新しいテキストエディタを構築することではありませんでした」とSteele氏は言います。「私は社会的な問題に対処しようとしていました。」
それにもかかわらず、EMACSは偉大な新しいテキストエディタでした。Control-Rは扱いにくいことがありましたが、Bernard S. Greenberg氏(SM ’74)の歴史によると、EMACSユーザーは「全く技術的な経験がない」人でも、「数分または1時間以内」に文字、メール、さらにはプログラムの編集を学習できました。一方、「経験豊富で洗練されたユーザーは、EMACSを以前のどの編集形態よりもはるかに使いやすいと感じました。」
Stallman氏は、磁気テープと返信用封筒を送ってきた人にEMACSを配布し始めました。「EMACSは無料です。代わりに、あなたはEMACSソフトウェア共有コミュニティに参加することになります」と彼は1981年のマニュアルに書いています。「メンバーシップの条件は、あなたがEMACSに対して行った改善を返送しなければならないということです。」
[画像: 机の上の黒いバインダー]
Multicsオペレーティングシステムのプログラミングマニュアル。Honeywellに勤務中、Bernard S. Greenberg氏はそのシステム用に独自のEMACSバージョンを作成しました。それは非常に優れていたため、Honeywellはそれを商業化しました。
MIT MUSEUM
一方、Greenberg氏は、当時彼の雇用主であったHoneywellが所有していた初期のオペレーティングシステムであるMultics用に独自のバージョンを作成することを決定しました。Greenberg氏のEMACSは1980年のInternational Honeywell Software Conferenceで最優秀賞を受賞し、Honeywellはそれを販売し始めました。HoneywellだけがEMACSのバージョンを販売していたわけではありません。後にJavaプログラミング言語の開発を主導したカーネギーメロン大学の卒業生であるJames Arthur Gosling氏は、バージョンを作成し、最終的にそれを商用製品として販売しました。
無料ソフトウェアから有料ソフトウェアへのこの移行は、最終的にStallman氏に、ユーザーが自由に共有および改善できるオペレーティングシステムを作成するためのプロジェクトを開始することを促しました。彼は、Bell Labsのますます人気のあるUnixオペレーティングシステムに倣って、GNUプロジェクトと呼ばれるこの取り組みをモデル化しました。「GNU」は「GNU's Not Unix」の略で、Unixとは異なり無料であることを示唆していました。
プロジェクトの最初の主要なアプリケーションはGNU Emacs(現在は小文字に再調整)でした。GNU/Linuxオペレーティングシステムはまだ数年先でしたが、プロジェクトは完全に無料のオペレーティングシステムを作成することを目的としていたにもかかわらず、GNU Emacsは当初Unix上で動作しました。最終的には、Linuxだけでなく他のUnixベースのシステムを含むさまざまなオペレーティングシステムで動作するようになりました。Appleが2001年にUnixベースのオペレーティングシステムの最初のリリースであるMac OS Xを発売したとき、GNU Emacsが含まれていました。
Appleは2019年にGNU Emacsの出荷を停止しましたが、同社は依然としてmg(「Micro GNU Emacs」)と呼ばれるプログラムを持っています。それはほとんどのEMACSコマンドをサポートしていますが、統合されたプログラミング言語を欠いているため、一部の人々はそれを「偽のEMACS」と呼んでいます。
一方、AppleのOSの多くには、依然としてEMACSコマンドの隠しサポートがあります。キーボードにはMetaキーがありませんが、Control-Option-Bは単語単位で後方に移動し、Control-Option-Fは単語単位で前方に移動します。