ケン・トンプソン

ケネス・レイン・トンプソン（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 から「どうやってプログラムを学んだのですか?」と質問され、「私はいつも論理に魅了されていて、小学生のころ既に二進法などの算数問題を解いていた。それは単に私が魅了されていたからだ」と答えた。 カリフォルニア大学バークレー校で電子工学および計算機科学の学士号 (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年代の間ずっと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はケン・トンプソンのコンピューターチェスへの様々な貢献を表彰した。 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 ++を批判し、「色々なことが中途半端で、それは多くのことを半分うまくやっており、排他的なアイデアのゴミの山だ」と話した。 1992年にロブ・パイクと共同で文字コードのUTF-8を開発。UTF-8はインターネットで広く普及し、2019年には全Webページの90％以上を占めている。 1990年代にポータブルなバーチャルマシンをベースにした研究用オペレーティングシステムであるInfernoの開発を開始。トンプソンとリッチーはベル研の他の研究者と共同でInfernoのコラボレーションを続けた。 2000年後半にベル研を退職。彼は2006年までEntrisphere, Inc.でフェローとして働き、その後Googleで名誉エンジニアとして所属。最近の業績にはプログラミング言語Goの共同設計などがある。自分を含むGoの開発者たちについて次のように述べている。 私たち3人(トンプソン、ロブ・パイク、ロバート・グリシーマー）は純粋な研究として開発を始めました。3人が集まり、C++が嫌いだということで意気投合しました(笑)。(…Goに話を戻すと)、3人とも言語の全ての機能について説明が求められるという考えでスタートしましたので、いかなる理由があっても言語にゴミを入れませんでした。 2009年のインタビューによると、トンプソンは現在Linuxベースのオペレーティングシステムを使用している。 1980年 - 全米技術アカデミーフェロー 1983年 - チューリング賞。リッチーと共同受賞。「汎用オペレーティングシステム理論の発展への貢献と、特にUNIXオペレーティングシステムの実装に対して」。この時の受賞記念講演で述べたのが "Reflections on Trusting Trust"、後に Thompson hack と呼ばれるようになる、loginプログラムにバックドアを仕組むようなコンパイラを作るようコンパイラのバイナリを仕組み、その痕跡をコンパイラのソースからは消す、という驚異的な技巧の解説で、しかも実際にいくつかのシステムに仕込まれていたとする衝撃的なものであった。この講演だけで独立したコンピュータセキュリティに対する重要な指摘（仮にコンパイラの全ソースをチェックしても、それだけでは安全ではないかもしれない）とされている。また、講演の本題に入る前に、自分が書いたプログラムの話をする枕として「私はプログラマです。フォーム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言語の発明に対して。また、情報化時代におけるアメリカのリーダーシップを強固なものにした産業全体の成長をもたらした」（原文は 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人いる。 [脚注の使い方] ^ ジャーゴンファイル（ http://catb.org/jargon/html/B/back-door.html ）では、トンプソンはベル研の外部には、その仕掛けのあるコンパイラが配布されたことは一切無い（never distributed）と言っていると書いた後、編者（エリック・レイモンド）は独立した2人の情報提供者から不審なログインに関する示唆を得ているとも書いており、その他の状況も併せ実際には外部にも出ていたものとみる論もある（『Unix考古学』を参照）。 ^ 直接の主題ではないが、最後に警鐘として、講演した内容が示すように、原理的に、コンピュータのセキュリティには根源的な所に「信用を信用する」しかないという危うさがあるのだから、（こんにちで言うスクリプトキディに相当するような）セキュリティを脅かしている子供たちを、「天才ハッカー少年」などとマスコミがそやすことは、将来の禍いの元である、といったことも述べている。これは技術的な本筋とはあまり関係ないのだが、映画『ウォー・ゲーム』の公開などでコンピュータの一般への爆発的普及とセキュリティについて関心が高まっていた時期であったため、学会誌上でリチャード・ストールマンらと議論になった。 ^ “ken”. The Jargon File (version 4.4.7). 2012年8月19日閲覧。 ^ Seibel 2009, p. 450. ^ “Thesis Students”. Elwyn Berlekamp's Home Page. University of California, Berkeley Department of Mathematics. 2021年10月21日時点のオリジナルよりアーカイブ。2021年12月31日閲覧。 ^ “Ken Thompson: developed UNIX at Bell Labs”. 2016年10月31日閲覧。 ^ Thompson (1969年). “Bon User's Manual”. Multics History Project. MIT Computer Science & Artificial Intelligence Lab. p. 1. 2021年10月21日時点のオリジナルよりアーカイブ。18 March 2021閲覧。 ^ Ritchie. “The Development of the C Language”. Bell Labs. 2016年10月31日閲覧。 ^ J. Stanley Warford (2009). Computer Systems. Jones & Bartlett Publishers. p. 460. ISBN 978-1-4496-6043-7. https://books.google.com/books?id=PERY_m5yyl4C&pg=PA460  ^ Ritchie (2001年). “Space Travel: Exploring the solar system and the PDP-7”. Bell Labs. 2015年12月26日時点のオリジナルよりアーカイブ。2016年2月4日閲覧。 ^ Ritchie. “The Evolution of the Unix Time-sharing System”. 2021年10月21日時点のオリジナルよりアーカイブ。2016年10月31日閲覧。 ^ Dennis M. Ritchie. “The Development of the C Language”. Bell Labs/Lucent Technologies. 2016年10月31日閲覧。 ^ Cox. “Regular Expression Matching Can Be Simple And Fast”. 2021年10月21日時点のオリジナルよりアーカイブ。2016年10月30日閲覧。 ^ a b c “Dr. Dobb's: Interview with Ken Thompson” (2011年5月18日). 2021年10月21日時点のオリジナルよりアーカイブ。2014年11月10日閲覧。 ^ Salus, Peter H. (2005). “Chapter 7. BSD and the CSRG”. The Daemon, the Gnu and the Penguin. Groklaw. http://www.groklaw.net/article.php?story=20050505095249230  ^ a b c Dennis Ritchie (June 2001). “Ken, Unix and Games”. ICGA Journal 24 (2). https://www.bell-labs.com/usr/dmr/www/ken-games.html March 5, 2020閲覧。.  ^ “Joe Condon (obituary)”. Physics Today. (2013). doi:10.1063/PT.4.1752.  ^ Thompson, Ken (1984). “Reflections on trusting trust”. Communications of the ACM 27 (8): 761–763. doi:10.1145/358198.358210.  ^ Seibel 2009, p. 475. ^ Pike (April 30, 2003). “UTF-8 history”. 2021年10月21日時点のオリジナルよりアーカイブ。2021年12月31日閲覧。 ^ “Usage Statistics and Market Share of UTF-8 for Websites, June 2019”. w3techs.com. 2021年10月21日時点のオリジナルよりアーカイブ。2019年6月9日閲覧。 ^ Khamlichi. “Ken Thompson UNIX systems father”. Unixmen. 2021年10月21日時点のオリジナルよりアーカイブ。2016年10月31日閲覧。 ^ Seibel 2009, p. 479. ^ “Dr. Ken Thompson”. National Academy of Engineering. 2012年8月19日閲覧。 ^ Thompson, Ken. “Reflections on Trusting Trust”. 2012年8月19日閲覧。 ^ “IEEE Richard W. Hamming Medal Recipients”. IEEE. 2011年5月29日閲覧。 ^ https://www.uspto.gov/learning-and-resources/ip-programs-and-awards/national-medal-technology-and-innovation/recipients/1998 ^ “Ritchie and Thompson Get National Medal of Technology”. Bell Labs (December 8, 1998). 2012年8月19日閲覧。 ^ “Ritchie and Thompson Receive National Medal of Technology from President Clinton”. Bell Labs (April 27, 1999). 2012年8月19日閲覧。 ^ “Ken Thompson Receives Kanai Award for Impact of UNIX System”. Bell Labs (March 25, 1999). 2012年8月19日閲覧。 ^ “2011年（第27回）日本国際賞受賞者決まる”. 国際科学技術財団. 2011年1月25日閲覧。 ^ Evangelista, Benny (January 25, 2011). “Ken Thompson, Dennis Ritchie win Japan Prize”. The San Francisco Chronicle. http://www.sfgate.com/cgi-bin/article.cgi?f=/c/a/2011/01/24/BUTI1HDJSA.DTL#ixzz1C5LtXdf3  ^ “Ken Thompson: A Brief Introduction”. The Linux Information Project (August 24, 2007). March 5, 2020閲覧。 オペレーティングシステム C言語 プログラミング言語 デニス・リッチー ウィキメディア・コモンズには、ケン・トンプソンに関連するカテゴリがあります。 略歴・業績 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 Seibel, Peter（2009）. Coders at Work – Reflections on the Craft of Programming （online）. New York: Apress. ISBN 978-1-4302-1948-4（pbk.）ISBN 978-1-4302-1949-1（electronic）