2016年02月04日の日記です


ケン・トンプソンの誕生日(1943)  2016-02-04 13:58:15  コンピュータ 今日は何の日

今日は、ケネス・レイン・トンプソン (Kenneth Lane Thompson)

…通称、ケン・トンプソンの誕生日(1943)


ケンは何度も書いた覚えがあったのだけど、いろんな話題に出てきただけで、まとめた紹介記事にはしてなかった。

他の記事とかぶる部分も多いのだけど、ざっとまとめていこう。


ケンは、カリフォルニア大学バークレイ校の出身だ。

そして、AT&Tベル研究所に入る。




早くも話は横道に入るのだけど、先日マービン・ミンスキーの追悼文を書いた。

マサチューセッツ工科大学… MIT に所属していた人工知能の研究者だ。


第2次世界大戦のあと、コンピューターは MIT がけん引している。


ENIAC を作ったのはペンシルバニア大学なのだけど、ENIAC の技術をみて、MIT ではすぐに Whirlwind I を作り始める。


ENIAC は最初のコンピューターとされることが多いし、別にそれは間違ってはいない。

でも、近代的なコンピューターとは全然設計が違う。

現代のコンピューターの設計は、どちらかと言えば Whirlwind I の後継となっている、と言ってよいかと思う。


Whirlwind I は、当時としては超高性能なコンピューターで、IBM が量産して軍に収め、全米を守るレーダー網の要として使われた。



その後、Whirlwind I をトランジスタで作り直した、TX-0 が完成する。これも MIT が独自に作成し、しばらく後に学生に開放した。

「計算機」を学生に開放したらどんなことに使うかな、という実験の一環でもあったのだけど、学生たちは計算なんてやらずに、ゲームなど、想定もしなかった用途に使い始める。


楽しそうにコンピューターを使う学生を見て、TX-0 の設計者の一人が、これは商売になると確信する。

デジタル・イクイップメント社(DEC)を創業し、TX-0 をプロトタイプとして PDP-1 というコンピューターを作成する。



同じころ、MIT の教授の一人、フェルナンド・J・コルバトが、IBM 7094 を改造して、マルチタスク実行可能なシステムを作り上げる。

このような技術を、「タイムシェアリングシステム」、略して TSS と呼んだ。


コルバトの作った CTSS は、世界初の TSS だった。


この研究がもとで、ARPA が開発資金を提供する。

1台のコンピューターを同時に複数人数で使える、という TSS は、コンピューターが非常に高価だった時代には、夢のようなシステムだった。



ミンスキーの追悼文でも書いたけど、この研究資金のいくばくかは、ミンスキーが「流用」して自分の研究に使っている。

でも、TSS の研究はちゃんと行われ、MIT とゼネラルエレクトリック(GE)社、そしてAT&Tが参加する、Multics プロジェクトへと変わっていく。


単に TSS だというだけではなく、学術的な面からも、技術的な面からも「使いやすいシステムとはどういうものか」を考えた、非常に有意義なプロジェクトだった。




さて、話を戻そう。


AT&Tのケン・トンプソンは、会社から MIT に出向して、Multics プロジェクトに参加していた。


まだ作成中の Multics は、それでもいくつかのコマンドがちゃんと動作していた。


ケンは、この上で「宇宙旅行ゲーム(Space Travel)」を自作していた。

太陽系の惑星の動きや引力をシミュレーションし、その中を宇宙船で旅行するゲームだ。


当時のコンピューターは、計算を「依頼」して、後で結果を受け取るのが普通だった。

しかし、タイムシェアリングなら個人でコンピューターを直接使用できる。


計算の途中結果を見て、対話的にパラメーターを変化させる、ということもできる。

…つまり、ゲームで遊ぶこともできる。


これは、タイムシェアリングでないとできない、贅沢な使い方だった。

単にゲームを作った、というのではなく、Multics でないと体験できない「キラーアプリ」を作成していた、ともいえる。



ところが、AT&Tは、Multics プロジェクトから撤退を決めてしまう。

プロジェクトは予定よりもずっと遅れており、予算もオーバーしていたため、AT&Tとしてはこれ以上の資金を提供しないことにしたのだった。



ケンはAT&Tに戻るが、宇宙旅行ゲームで遊びたかった。


そして、AT&T内で使われずに埃をかぶっていた中古の PDP-7 を見つけてきた。

先に書いた、MIT の TX-0 をプロトタイプとしたコンピューター PDP-1 の後継機種だ。


#DEC は、PDPに、開発順に番号を付けていた。

 2,3 は 1 と互換性はなく、4 は 1 の低価格版(命令は増えたが性能は落ちた)、7 は 4 の性能を上げた、1 の正当な後継機。



ケンは、宇宙旅行ゲームを PDP-7 に移植した。

しかし、PDP-7 には OS と呼べるものはなく…今でいえば、Z80 よりも低性能の CPU 上で、2進数を使って直接プログラムするような状態だった。


当初は、GE の機械を使って、クロスアセンブルしてプログラムしていたらしい。


しかし、ゲームの移植にあたり、「存在してほしいサービスルーチン」などを順次作りためることで、徐々に OS のようなものが形作られていく。

最終的には、ゲームを動かす基盤としての、最低限の OS も一緒に作り出すことになった。



宇宙旅行ゲームは、もともと Multics で動いていた。

PDP-7 の上に作られた OS は、当然のように Multics とよく似た機能を持つようになっていった。


ただし、個人で使うものだから、高度な機能はいらない。

簡単に作れて便利そうな機能は作りこまれていたが、あれば便利だけど作るのが大変な機能は省略されていた。


そして、この OS は Unics と名付けられた。Multi (複数の) に対し、Uni (1つの) という洒落だった。


#Multics は商標でもあったので、この「明らかに類似した名前」は危険だったらしい。

 でも、個人で使うものだから、その危険さも含めてネタとして名付けられた。

 後に、全く違う名前にするために Unix となっている。



後に、Unix は PDP-11 に移植される。

先に書いたけど、PDP は型番と互換性がわかりにくい。11 は、非常に先進的な設計をしたマシンで、それまでのどの機種とも互換性がなかった。


しかし、先進的な設計だからこそ、パワフルだった。


PDP-7 上では、Unix はアセンブラで使われていた。

しかし、PDP-11 とは互換性がない。今後のことも考えて、移植性のある高級アセンブラ、C言語が考案される。

各種ツールも、Unix 自身も、C言語で書き直された。



パワフルなマシンでは、姑息なテクニックを使用する必要もなかった。

そして、「高級言語」で書かれたプログラムは、従来のものよりも読みやすかった。




AT&Tは、電話業界の大会社、寡占企業だった。


これが問題視されて後に分割されるのだけど、この時点ではまだ「新規事業への参入禁止」という措置を受けているだけだった。

ケンはコンピューターのOSを作ったけど、商売にはできない。


AT&Tは、教育目的に限る、という前提で、Unix を無償開放した。ソースプログラムの入手までできる。


この後、ケンは、1年間の休暇を取って母校である「カリフォルニア大学バークレー校」に出向いている。

そして、Unix のインストールから使い方の講義、ソースリストを参考に、使われているテクニックの解説まで行ったらしい。


先に書いたように、Unix は他のOSに比べて、ずっとプログラムが読みやすかった。

しかも、制作者が直接やってきて、テクニックなどを教えてくれたのだ。


学生たちは、Unix を理解し、自分たちのものとし始める。


ケンが帰ったあと、バークレイ校独自の Unix 、BSD が生み出されることになった。

精力的に拡張され、ネットワーク対応した最初のOSとなった。


#これ以前に ARPANET は存在したが、コンピューター上に「ネットワークのためのソフト」を動作させて接続する、という形式。

 BSD では、OSにネットワーク対応を組み込んでしまった。


#当初は BSD Unix と呼ばれていたが、後にAT&Tが商標権などで訴えを起こし、Unix と名乗らなくなった。




時系列を少し巻き戻そう。


おそらく、ケンは Multics の開発プロジェクトに出向した時…まだ Multics が動き出す前に、CTSS を使っているのではないかと思う。

資料不足でここの関係性がはっきりしないのだけど、CTSS 上で動くエディタを作成しているのだ。


元は別の人が作った、テレタイプ用のラインエディタだった。

CTSS にそれを移植した、という形なのだけど、この際にケンは非常に先進的な機能を一つ、追加していた。


それが、文字列の一部があいまいなまま検索を行える、という機能だ。

通常、文字列を検索するのであれば、当然のことながら検索したい文字列を入力してやらなくてはならない。


しかし、ケンは、形式言語理論で使用される、学術的な表記方法を導入することで、文字列の一部があいまいな状態でも検索ができるような仕組みを作った。

これが、後に「正規表現」と呼ばれるものだ。



ここでは言語理論には立ち入らない。無駄にややこしい話になってしまうから。

ただ、形式言語理論では、書かれていることの意味を解釈する機械的な方法を定義することができて、その際には「文の終わり」を、$ という記号で表す。


これ、「終わり」という意味の記号ね。文字としての $ とは別のもの。


そして、正規表現で検索を行う際は、文の終わりを $ で示す。

他にも「どんな文字でもよい」を . (ピリオド)という「記号」で示したり、直前の文字の繰り返しを * という記号で示したり。

すべて、形式言語理論で使われる表記方法だ。


今では、正規表現は元の言語理論から離れて、コンピューター世界で便利に使えるように拡張されている。

しかし、学術的な表記方法をコンピューターに持ち込んだのが、ケンだったのだ。



ケンは、このエディタを当然のように Unix にも移植している。ed と、sed だ。

両方とも正規表現が使える。


この方法は便利だったので、正規表現を使うさらに多くのソフトが作られていった。

こうして、学術的な元の意味を知らない人にも正規表現が広まっていく。




完全に余談なのだけど、MS-DOS では、「文字列を表示する」というファンクションコールがある。

このファンクションコール、文字列の最後を $ で示す。


だから、金額とか表示できない。Just price $10 なんて表示しようとすると、$ の手前で表示が終わってしまう。


なんでこんな使いにくい仕様に、とおもうのだけど、実は CP/M という 8bit OS を真似したためだ。

同じく 8bit の MSX-DOS も、CP/M 互換にしてあったので当然 $ が文字列の終わりだった。


CP/M の作者、ゲイリー・キルドールは、マイクロソフトが MS-DOS で CP/M の真似をした、と怒っていた。

そして、ただ真似しただけで内容を理解していない、嘘だと思うなら、ゲイツになんで文字列の最後が $ なのか聞いてみるがいい、と言っていた。


キルドールがどういうつもりだったのかは知らないけど、ゲイツは「言語理論から取った」と言えばいい。

正解なら、一般的に知られた表記法を使っただけなのだから、真似した証拠にはならない。

違うなら、違うのだからなおさら証拠にはならない。


まぁ、MS-DOS が CP/M を真似した、というのは歴史上の事実なのだけど、一因はキルドールにもある

文句を言う筋合いではないだろう。


いずれにしても、MS-DOS のファンクションコールは非常に使いにくかった。

みんな別の文字列表示ルーチンを組んで使っていたのではないかな。


余談終わり。




ケンは、UTF-8 の考案者としても知られる。


AT&Tでは、Unix の後継となるOS、Plan-9 を開発していた。

このOSは結局頓挫するのだけど、1980年代に研究が始まり、2000年代に入ってもまだ研究が続いていた。


1980年代なんて、まだ文字コードが 8bit だった時代だ。

…いや、日本ではすでに JIS コードがあったのだけど、UNIX の世界では 8bit と共存できる EUC が使われていたし、Plan-9 で考慮していたとは思えない。


ところが、世界的に Unicode を制定しようという状況になり、Plan-9 も Unicode に対応することにした。

今では Unicode は 32bit まで対応しているのだけど、当初は 16bit にすべてを収めようとしていた。


そこで、Plan-9 では、今まで作った 8bit を前提としたシステムを変えずに、文字コード体系を工夫することで 16bit を表現できるようにしよう、という指針が決められた。


そこで、実際にその「工夫したコード体系」を設計したのがケンだった。

16bit の文字コードのうち、最初の 128個は 8bit で表現できる。…これで、ASCII に関しては今まで通り使える。


続く 1920個…文字コードでいえば、128~2048の範囲は 16bit 、さらに 65536までは 24bit で表現できる。


16bit ということは、8bit を1バイトとしたときに2バイト使うのだけど、コードは ASCII の 128文字とは絶対に重ならないように工夫されている。

(複数バイトにまたがるとき、必ず最上位ビットが 1。また、複数バイトの先頭文字は必ず上位 2bit 目が 1で、続くバイト列は 0 になっている)


だから、コンピューターにとって意味を持つ記号が入って混乱する、というようなこともない。複数バイトの際も扱いやすい。

(ShiftJIS では、2バイト目にアスキー文字が入ることがあり、混乱が起きた。2バイトの前半後半の見極めも難しかった)



この表現方法は、最初は Plan-9 のための物だったけど、後に公式に Unicode 規格の一つとなった。


UTF-8 は、非常に単純で強力だったので拡張しやすかった、

今では Unicode は 32bit に拡張されているけど、やはり UTF-8 の6バイトまでで表現できる。




他にもいろいろな功績があるのだけど、だんだん些細な話になっていくので今回はここまで。


現在は Google で、Go言語を作っているらしい。

僕はまだ使ったことないのだけど、評判のいい言語みたいですね。



後日追記 2016.2.9


そういえば、ケン・トンプソンのバックドアを書いていなかった。

というか、僕がちゃんと理解していなくて、調べて書かなくては、と思ったまま調べてすらいなかったのだけど。


調べてみたらあまりにも興味深い。


だらだら説明するより、概要を手短にまとめたページがあったのでリンクしておこう。




同じテーマの日記(最近の一覧)

コンピュータ

今日は何の日

関連ページ

BSD 初リリース日 (1978)【日記 17/03/09】

デヴィッド・カトラー誕生日(1942)【日記 19/03/13】

世界で最初の{弓括弧}【日記 16/02/11】

別年同日の日記

03年 万豚記

15年 いきなり出鼻をくじくような


申し訳ありませんが、現在意見投稿をできない状態にしています


戻る
トップページへ

-- share --

9000

-- follow --




- Reverse Link -