ケン・トンプソン

ケネス・レイン・トンプソン（Kenneth Lane Thompson、1943年2月4日 - ）はコンピュータサイエンティストのパイオニアでアメリカ人。ハッカー仲間からはケン・トンプソン (Ken Thompson) と呼ばれている。長年ベル研究所に勤め、オリジナルのUnixを開発した。またC言語の前身であるB言語を開発し、Plan 9の初期の開発者の1人だった。2006年からGoogleで勤務しており、Goを共同開発した。

他の主な業績として、正規表現、テキストエディタQEDとed、UTF-8コードの定義に加え、チェスの終盤定跡データベースやチェスマシンBelleの開発などコンピュータチェスへの貢献がある。1983年に彼の長年の同僚であるデニス・リッチーと共にチューリング賞を受賞した。

 青少年時代 
アメリカ合衆国のルイジアナ州ニューオーリンズで生まれる。15人の有名プログラマのインタビューをまとめた Coders at Work で、インタビュアーの Peter Seibel から「どうやってプログラムを学んだのですか?」と質問され、「私はいつも論理に魅了されていて、小学生のころ既に二進法などの算数問題を解いていた。それは単に私が魅了されていたからだ」と答えた。
サムネイル| Unixが最初に動作したDEC PDP-7。

カリフォルニア大学バークレー校で電子工学および計算機科学の学士号 (1965) と修士号 (1966) を取得。修士課程の指導教官はエルウィン・バーレカンプ。

 職歴と研究 
大学卒業後の1966年にAT&Tのベル研究所へ就職。1960年代当時、ベル研ではトンプソンとデニス・リッチーがMulticsシステムの計画に参加していた。トンプソンはMulticsの開発中にプログラミング言語のBonを開発した。またスペース・トラベルというビデオゲームも開発した。その後ベル研はMulticsから撤退。ゲームを遊び続けるため、トンプソンは古いPDP-7を発掘してスペース・トラベルを作り直した。このときトンプソンが開発したツールがUnixになった。PDP-7を使い、トンプソンとリッチーが主導するベル研のチームは、ラッド・カナディと共に、階層型ファイルシステム、プロセス、デバイスファイルの概念を発明し、コマンドライン、プロセス間通信を容易にするパイプ、複数の小さなユーティリティプログラムを開発した。 1970年にブライアン・カーニハンの提案で、MulticsからのダジャレであるUnixという名前になった。初期のUnixが完成すると、トンプソンはシステム開発向けの言語が必要だと考えるようになり、B言語を開発し、それを元にしてリッチーがC言語を開発した。

1960年代に正規表現を開発。CTSS上で動作するテキストエディタのQEDを開発し、文字列の検索に正規表現を使うことができた。QEDと、後に開発したUnixの標準エディタedは正規表現の普及に大きく貢献した。以降に開発されたほぼ全ての正規表現プログラムはトンプソンの表記法がベースとなっている。以前は理論言語学者など限られた間での専門的な記法であった正規表現（日本ではそういった専門分野では正則表現と訳すことがある）は、コンピュータのユーザに身近な頻用されるものとなった。またマッチングを高速化するため、正規表現を非決定性有限オートマトンに変換する「トンプソンの構築アルゴリズム」を発明した。

 1970年代 
サムネイル| SIMH PDP-11シミュレータで動作しているUnixバージョン6。"/usr/ken"がまだ存在している。

トンプソンとリッチーは1970年代の間ずっとUnixを共同で開発していた。2人はResearch Unixの研究チームで精力的に活動しており、ダグラス・マキルロイは「ほとんど全てのコードにリッチーとトンプソンの名前が残されていると考えて間違いない」と後に書いている。トンプソンは2011年のインタビューで、Unixの初期バージョンは自分が開発したものであり、後にリッチーが応援を始め、開発を手伝ったと話している。

最初のバージョン3くらいまではUNIXを1人で作りました。デニスがエバンジェリストになりました。それからC言語の元になった高級言語で書き直しました。彼は主に言語とI/Oシステムを担当し、私はOSのそれ以外の部分を全部担当しました。PDP-11用でしたが、これは偶然にも大学で広く普及したコンピュータでした。

トンプソンはUnixの開発にC言語を使うことで言語の熟成に貢献した。C言語はOSを書き直す最中で育ち、OSを書くのに最適な言語になったと後にトンプソンは語った。

1975年にトンプソンはベル研を休職し、母校のカリフォルニア大学バークレー校に登校し、Unixバージョン6をPDP-11/70にインストールする作業を手伝った。バークレー校のUnixは後にバークレーソフトウェアディストリビューション（BSD）として知られる独自のOSとしてメンテナンスされるようになった。

1976年の初めにトンプソンはカリフォルニア大学バークレー校電気工学部コンピューターサイエンス学科でバークレー・パスカルの初期バージョンを開発した（同年後半にビル・ジョイ、チャールズ・ヘイリー、ファカルティアドバイザーのスーザン・グラハムが大幅な改良を加えた)。

1971年にUnixでchessという名前のチェスのプログラムを開発。後にジョセフ・コンドンと共に専用のハードウェアアクセラレーターを搭載したBelleを開発し、コンピュータチェスの世界チャンピオンとなった。また4、5、6駒の終盤の局面全てで、完全な定跡パターンを列挙するプログラムを作成した。これによりプログラムは、一度終盤の定跡に到達すれば、以降は完璧なゲームを進めることができた。終盤の定跡に詳しいチェスの専門家であるジョン・ロイクロフトが後に協力し、終盤定跡データベースをCD-ROM化して配布した。2001年にICGA Journalはケン・トンプソンのコンピューターチェスへの様々な貢献を表彰した。

 1980年代 
右|サムネイル|ベル研のPlan 9。テキストエディタのacmeとシェルのrcが動作している。
1983年にトンプソンとリッチーは、「汎用的なオペレーティングシステム理論の開発、特にUNIXオペレーティングシステムの実装に対して」チューリング賞を共同受賞した。授賞式でのスピーチで話した「Reflections on Trusting Trust(信用を信頼することについての考察)」は、現在はトンプソンハックやTrusting Trust攻撃として知られており、これ自体がセキュリティに関する重要な研究成果と認められている。

トンプソンとリッチーは1980年代を通じてResearch Unixのアップデートを続け、バージョン8、バージョン9、バージョン10でBSDコードベースを採用した。1980年代中頃に、Unixの設計思想を受け継ぎながらも全面的に作り変えられた後継OSであるPlan 9の開発がベル研で始まった。mkやrcなど、後のResearch Unixに組み込まれた一部のプログラムも、Plan 9で開発された。

トンプソンはビャーネ・ストロヴストルップが開発したC++の初期バージョンを試験的に使ったが、バージョンアップの度に互換性が失われたため使用を断念した。2009年のインタビューでトンプソンはC ++を批判し、「色々なことが中途半端で、それは多くのことを半分うまくやっており、排他的なアイデアのゴミの山だ」と話した。

 1990年代 
1992年にロブ・パイクと共同で文字コードのUTF-8を開発。UTF-8はインターネットで広く普及し、2019年には全Webページの90％以上を占めている。

1990年代にポータブルな仮想マシンをベースにした研究用オペレーティングシステムであるInfernoの開発を開始。トンプソンとリッチーはベル研の他の研究者と共同でInfernoのコラボレーションを続けた。

 2000年代 
2000年後半にベル研を退職。彼は2006年までEntrisphere, Inc.でフェローとして働き、その後Googleで名誉エンジニアとして所属。最近の業績にはプログラミング言語Goの共同設計などがある。自分を含むGoの開発者たちについて次のように述べている。

私たち3人(トンプソン、ロブ・パイク、ロバート・グリシーマー）は純粋な研究として開発を始めました。3人が集まり、C++が嫌いだということで意気投合しました(笑)。(…Goに話を戻すと)、3人とも言語の全ての機能について説明が求められるという考えでスタートしましたので、いかなる理由があっても言語にゴミを入れませんでした。

2009年のインタビューによると、トンプソンは現在Linuxベースのオペレーティングシステムを使用している。

 受賞歴 

 1980年 - 全米技術アカデミーフェロー
 1983年 - チューリング賞。リッチーと共同受賞。「汎用オペレーティングシステム理論の発展への貢献と、特にUNIXオペレーティングシステムの実装に対して」。この時の受賞記念講演で述べたのが "Reflections on Trusting Trust"、後に Thompson hack と呼ばれるようになる、loginプログラムにバックドアを仕組むようなコンパイラを作るようコンパイラのバイナリを仕組み、その痕跡をコンパイラのソースからは消す、という驚異的な技巧の解説で、しかも実際にいくつかのシステムに仕込まれていたとする衝撃的なものジャーゴンファイル（ http://catb.org/jargon/html/B/back-door.html ）では、トンプソンはベル研の外部には、その仕掛けのあるコンパイラが配布されたことは一切無い（never distributed）と言っていると書いた後、編者（エリック・レイモンド）は独立した2人の情報提供者から不審なログインに関する示唆を得ているとも書いており、その他の状況も併せ実際には外部にも出ていたものとみる論もある（『Unix考古学』を参照）。であった。この講演だけで独立したコンピュータセキュリティに対する重要な指摘（仮にコンパイラの全ソースをチェックしても、それだけでは安全ではないかもしれない）とされている直接の主題ではないが、最後に警鐘として、講演した内容が示すように、原理的に、コンピュータのセキュリティには根源的な所に「信用を信用する」しかないという危うさがあるのだから、（こんにちで言うスクリプトキディに相当するような）セキュリティを脅かしている子供たちを、「天才ハッカー少年」などとマスコミがそやすことは、将来の禍いの元である、といったことも述べている。これは技術的な本筋とはあまり関係ないのだが、映画『ウォー・ゲーム』の公開などでコンピュータの一般への爆発的普及とセキュリティについて関心が高まっていた時期であったため、学会誌上でリチャード・ストールマンらと議論になった。。また、講演の本題に入る前に、自分が書いたプログラムの話をする枕として「私はプログラマです。フォーム1040（米国の税金の書類、:en:IRS tax forms#1040）に私の職業としてそう書いています。」（I am a programmer. On my 1040 form, that is what I put down as my occupation.）と話している。
 1990年 - IEEEハミングメダル。リッチーと共同受賞。「UNIXオペレーティングシステムとCプログラミング言語の開発に対して」。
 1997年 - コンピュータ歴史博物館フェロー
 1999年 - 98年度のアメリカ国家技術賞をリッチーと共同受賞。「情報技術の発展に多大な影響を与えたUNIXオペレーティングシステムとC言語の発明に対して。また、情報化時代におけるアメリカのリーダーシップを強固なものにした産業全体の成長をもたらした」（原文https://www.uspto.gov/learning-and-resources/ip-programs-and-awards/national-medal-technology-and-innovation/recipients/1998は For their invention of UNIX® operating system and the C programming language, which together have led to enormous growth of an entire industry, thereby enhancing American leadership in the Information Age. であり、どこにも「情報技術の」という表現に対応する部分は無いが）。
 1999年 - IEEE Tsutomu Kanai Award。「過去数十年に渡って分散システムの重要な基盤となったUNIXオペレーティングの開発に果たした役割に対して」。
 2011年 - 日本国際賞。リッチーと共同受賞。「UNIXオペレーティングシステム開発における貢献に対して」。
 2019年 - 全米発明家殿堂。リッチーと共同で選出。

 プライベート 
ケン・トンプソンは既婚者で息子が1人いる。

 脚注 

 注釈 

 出典 

 関連項目 
 オペレーティングシステム
 C言語
 プログラミング言語
 デニス・リッチー

 外部リンク 

 Ken Thompson - ベル研究所
 略歴・業績
 Ken Thompson Bell Labs page
 Reflections on Trusting Trust 1983 Turing Award Lecture
 Ken Thompson: A Brief Introduction The Linux Information Project（LINFO）
 Computer Chess Comes of Age: Photos Computer History Museum
 Computer Chess Comes of Age: Video of Interview with Ken Thompson Computer History Museum
 Reading Chess paper by HS Baird and Ken Thompson on optical character recognition


*
Category:アメリカ合衆国の計算機科学者
Category:アメリカ合衆国のプログラミング言語設計者
Category:アメリカ合衆国のプログラマ
Category:チューリング賞受賞者
Category:日本国際賞受賞者
Category:アメリカ国家技術賞受賞者
Category:C&C賞の受賞者
Category:全米技術アカデミー会員
Category:米国科学アカデミー会員
Category:コンピュータ歴史博物館フェロー
Category:アメリカ芸術科学アカデミー会員
Category:全米発明家殿堂
Category:UNIXに関係する人物
Category:ハッカー
Category:Googleの人物
Category:ベル研究所の人物
Category:カリフォルニア大学バークレー校出身の人物
Category:ニューオーリンズ出身の人物
Category:1943年生
Category:存命人物
Category:カーネルプログラマ