Linus Torvaldsが語るLinux

-- Linus Torvalds氏来日講演録より --

日時:1995年12月4日
会場:京都大学

小島三弘 訳

この講演録は『ホップ!ステップ!Linux!』への収録にあたって、
翻訳者の小島三弘氏によるオリジナルの講演録から、専門的な話題を省略し、
注を付けたものです。
後半はLinus Torvalds氏と聴講者との質疑応答になっています。

講演録の全文についてはこちらを参照してください。

来日時のLinus Torvalds氏
(写真提供:竹尾然生さん)




●あいさつ

 僕がヘルシンキ大学のリィナス・トルヴァドゥス、Linux カーネル*1の開発者です。僕の英語が通じるかな?質問の時に、みんなの英語が僕に通じるとうれしいけど。(会場 笑)
 僕はわいわいにぎやかな講演が好きだから、もし質問があったら、途中でも遠慮しないで手をあげて質問してね。
 まず、この講演を実現してくれた小野さんと小島さんにありがとう。
 僕の話は、Linuxとは何か、ってところから始まるんだけど、この中でLinuxをよく使っている人は?(多くの手があがる)Linuxについて聞いたことの無い人は?(ちらほら手があがる)なぜ、君たちはここにいるんだい?(会場 笑)
 多くの人が知ってるようなので、「Linuxとは何か」という話題は簡単に済ませて、「Linuxの基本デザイン」の話題を中心に話そう。
 カーネルのプログラムというのは、通常のプログラムとはどこが違うのか、というところから始めよう。この中でプログラマやプログラム、コンピュータ科学を専門に勉強している人はどれくらいいるのかな?(ちらほら手があがる)
 あんがい少ないね。じゃ、あまり細かい話よりも、今までに僕がやってきたこと、これからやろうとしていることを中心に話してみよう。


●Linuxとは何か

 これが僕が「Linux とは何か」を説明するために使っているスライド。みんな知ってることばかりで、あまり目新しいことは無いと思うけど。

(スライド)
============================================

Linuxとは何か(What is Linux)

============================================

 「Linux」は「Unixクローン*2」、すなわち、Linuxは例えばBSD*3のカーネルとは違って(AT&T が持っていた)元々のUnixのソースライセンス*4は使わずに、Unixとほとんど同じことができることを目指したカーネルなんだ。
 IBM PC互換機*5(クローン)が元々のIBM機とよく似てるけど、IBM機よりもずっと性能がいいのと同じように、僕はLinuxが元々のUnixよりも優れたものになることを期待している。(会場 笑)
 「クローン」だからといって、全てがオリジナルと同じである必要はない。でも、僕はLinuxを全く新しいOSにするつもりはなく、基本的にはUnixのよいところを活かすように作った。例えば、マルチユーザー*6、ネットワーク、メモリプロテクション*7などなど。Linuxには元々のUnixにない機能もいくつか追加されているけれど、そのような部分は本当に必要なところだけに限って、最小限にしようとしている。
 Linuxにとって一番重要なことはUnixと「ソース互換*8」だという点だろう。Unixにはいくつかの仕様があるけど、LinuxはそのうちのPOSIX(Portable Operating System Interface)*9に基づきながら、Unix使いのみんなが使いやすいようにBSDやSYS V*10の機能を取りこんで拡張してきた。だから、BSDの世界から来た人がLinuxで全てがBSDと同じように動くからビックリしたという話もよく聞く。


●Linuxのユーザー数 〜91年には、ユーザーはたった1人だった〜

   これがLinuxの売上げを示すスライド。世界中にいるLinuxユーザーの数を推測したグラフだ。

 実際には、僕はLinuxを売りあるいてるわけじゃないけどね。この図の縦軸は対数表示になってるから、ひとつあがるごとに10倍になってるのに注意して。
 1991年にはたった1人のLinuxユーザーしかいなかった、すなわち僕自身、でもその年のうちに、僕以外にも何人かのLinuxユーザーが誕生したので、1991年の終りには、おおむね10人くらいのLinuxユーザーがいたはずだ。
 その後のLinuxユーザーは、この対数グラフで示すように、指数関数的に増加している。数学を知ってる人はわかってるだろうけど、この直線を延していくと、あと2年ほどのうちにはユーザーが5000万人に達し、その2年後には、この星の人口と同じくらいのユーザー数になるだろう。(会場 笑)
 もちろん、こんなに増加し続けるはずはないけど、カッコいいグラフだよね。



●Linuxの設計方針 〜4つのポイント〜

 さて、実際の「デザインについて」の話題に入ろう。
 Linux にとって最も重要なのは、「KISS principle」と呼ばれるものだ。KISSとは “Keep it Simple, Stupid”、あるいは “Keep it Simple and Small” の略なんだけど、カーネルは元々すごく複雑なプログラムだから、ちゃんと動くようにするには可能なかぎり単純にしておく必要がある。そうしようと努めていても、今日のカーネルのようにずいぶん複雑なものになってしまうんだから。
 もう1つLinuxのデザインについて重要なポイントは、「互換性*11」という点だ。僕はUnixカーネルを自分で書きたかったけど、全てのプログラムを自分で書く気はなかった。だから、gccやGNU Emacs*12のようなUnix用の既存のフリーソフトウェアが可能な限りそのままコンパイルできて動くことが重要だった。
 「互換性」の問題はプログラムを動かす場合だけでなく、Unixのようなネットワーク環境で使われるOSの場合、環境に対する「互換性」の問題も重要になる。だから、Linuxはネットワーク的に見ても他のUnixと互換性を持つように作っている。だからHP-UX*13やBSDなどが動いている環境でもLinuxは問題なく使えるはずだ。
 僕が自分の書く全てのプログラムで極めて重視しているのが、第三のポイント、「性能(パフォーマンス)」だ。僕は遅いプログラムが嫌いで、手元の速いマシンの上に、ノロノロ動いているプログラムがあって、コンピュータ全体の性能が落ちているのには耐えられない。だから、Linuxはできるだけ速くしたかったんだ。そのため、新しい機能を持ったマシンが手に入れば、その機能を積極的に活かしてLinuxのスピードアップを図ろうとしてきた。例えばPentium*14マシンではPentiumの新しいメモリ管理機能を利用している。詳細には触れないけど、Linuxは速い機種用に最適化されている、ということだ。もちろん、古くて遅い386マシン*15でも使えるようにしていることは言うまでもない。もっとも、個人的にはそんな遅いマシンはもう使わないけどね。
 4つめのポイント、これはカーネルに限らず、あらゆるプログラムにとってもっとも重要なポイントだけど、「拡張性*16」という点だ。「拡張性」についてきちんと考えていないと、3,4 年もしないうちにどうしようもなくなってしまうことがある。例えばDOSの8+3文字のファイル名の制限*17に関する問題は、後になってからは極めて修正のしにくいものだ。マイクロソフトは Windows95でファイル名の問題を解決しようとしているけど、多少コンピュータに詳しい人なら、まだまだたくさんの問題が残っていることを知っている。
 だから、この種の問題が起きないように、デザインのごく早い段階から十二分に注意しておく必要がある。というのも、ユーザーが増えてきてから基本的なデザインを修正することはほとんど不可能だからだ。


●Linuxの開発方針 〜誰でも開発に参加できる〜

 次にLinuxの開発方針について説明しよう。
 Linuxカーネルを開発するにあたって、僕は開発過程を公開すること(Open Development tree)を選んだ。最新のソースコードを週に2度ほど、インターネット上のanonymous-ftpサイト*18に公開しているので、誰でも、僕が使っているのと同じ最新のソースコードを入手することができる。もちろん、この公開のサイクルはもっと頻繁なこともあるし、もっとまばらなこともある。例えば今週は日本に来てるので、この一週間は新しいカーネルの公開ができない。
 開発過程が公開されているから、Cコンパイラ*19を持ってる人なら誰でも、ソースを入手して僕の持っているのと同じ最新のカーネルを手元で作成できる。必ずしも常に最新のカーネルを追いかける必要はないが、やろうと思えばそうすることもできる。カーネルは大部分C言語で、一部のドライバ類はアセンブラ*20も使って書かれているが、コンパイルするだけならアセンブラの知識は不要だろう。
 開発過程を「公開」していることは、僕のような開発者にとって大きな利点になっている。なぜなら、新しいカーネルをftpサイト上に公開すれば、その日のうちに数十から数百人の人がさまざまな環境でテストして、もし僕が何か間違いをしでかしていたら、すぐにe-mailで教えてくれるからだ。この結果、問題はすぐ解決できる。 このようなフィードバック*21のおかげで、過去数日のあいだにやった修正のどこが問題だったかをすぐに知ることができる。
 また、常に最新のソースコードが公開されているから、さまざまな開発者がバラバラに開発した何十ものバージョンを誰かが1つに統合するような作業が不要になるので、そのことも開発速度を上げることに役立っている。
 我々開発者はひとつの集団を構成している。そのピラミッドのトップに立っているのが僕だが、僕以外にもネットワークコードを保守している人、ファイルシステムを保守している人、SCSIデバイスを担当している人、などが存在する。それぞれの担当者の下にも、同様により小さな部分を担当している人が存在している。そして、例えばネットワークに関する修正点はネットワークの担当者のところで集約され、僕に伝えられる。そして僕がそれを元にカーネルを修正する、というわけだ。
 もちろん、このシステムは強制力をもつものではないので、バグ*22を見つけたら僕に直接送ってもらっても構わない。実際、今までにも、見たことも聞いたことも無い人からバグレポートとパッチが届いて、そのパッチ*23をそのままソースコードに組みこんだこともある。この開発者のピラミッドは、誰が何を成したかによって、きわめて動的に変動するもので決して固定したシステムではない。


●Linux全体の将来像について

 「ソースレベルの互換性」については、現在でもそうなっているわけだが、これを何らかの形で認証して欲しいと思っている。すなわち、LinuxがPOSIXといったオペレーティングシステムの規格に合致していることを証明して欲しいと思っている。ただし、認証してもらうにはかなりのお金がかかるのでまだ誰もやっていないけど、アメリカのある会社がやろうとしていると聞いている。この認証に通れば、LinuxはUnix互換である、と胸を張って言えるわけだ。
 「バイナリ互換」についても、互換性を強める方向に向いたいと思っている。WINE*24については既に述べたが、大きなプログラムを動かすにはまだまだやらねばならない仕事がたくさん残っている。あと半年くらいで大きなプログラムが動くようになればいいんだけど、実際のところ、多分まだ一年はかかるだろうね。現在でも小さなプログラムはいろいろ動いているんだけど。
 「商業サポート」については、すでにかなりの種類が現われてきた。日本でどの程度商業的にLinuxがサポートされているかは知らないけど、すでにLinuxについては多数の本が出版され、アメリカでは書店で簡単に手に入るようになっている。市販のソフトウェアも、WordperfectやMaple*25Mathematica*26といった商用のソフトウェアのLinux用バージョンがリリースされて、Linux上で数式処理をすることも可能になっている。
 それ以外にも、Linuxを収めたCD-ROMは多数販売されている。LASER 5*27もその1つだし、Caldera Network Desktop*28はLinuxカーネル上で多数の市販ソフトウェアを動かすことができる商用パッケージだ。CalderaにはNetware*29に対応する機能も付いているので、LinuxをNetwareのサーバーにすることも可能になる。
 一言で言えば、Linuxは今後も発展を続けていく、ということだ。僕は既に5年ほどLinuxの開発に携わってきたけど、まだまだLinuxの発展が止まることは無いと感じている。
 これで僕の話は終りだけど、何か質問は?



●質疑応答

Q: 以前はPC上でMicrosoft Windowsを使っていたんだけど(ここでLinusが指でバツ印を作り、会場が笑いに包まれる)、Linuxに切りかえたら、そのパフォーマンスのよさにびっくりした。なぜ、LinuxのようなfreeなOS がMicrosoftのような巨大企業の作るソフトよりも性能がいいんだろう?

A: 「なぜLinuxはWindowsよりも高性能か」これは僕の大好きな質問だね。(会場笑)
 これには2つの理由があると思う。1つは、Linuxは熱意に満ちた開発者が作っていること。僕を含めて、カーネルを書こうと言う人間は「完璧な」コードを目指している。だから、もし何か問題が起きたら、その問題を自らの手で積極的に解決しようとしてきた。
 一方、Microsoftのような巨大企業だと、Windows のソースコードは誰のものでもないから、誰もそれに誇りを持てないんじゃないかな。一方、Linuxの開発者はLinuxのコードに誇りを持っている。それにWindowsだと担当しているプログラマが100人を超えているだろうから、問題が起きても、積極的に自分の手で解決しようとせずに、どこか別の人に送ってしまう、すなわち問題を解決するのではなく、隠すことで解決しようとしているんじゃないかな。僕は、それがLinuxとWindowsの性能の違いになっているように思う。
 もう1つの理由は「互換性」の問題だ。Microsoftの製品はDOS、特にDOSのファイルシステムと互換性を保つ必要がある。すなわち、彼らは15年も前の悪いデザインに縛られている。その結果、現在でも 15 年前と同様の悪い方法を取らざるを得ない。それに対し、Linuxは0から書き始めたOSだから、過去のしがらみはない。Linuxが目指したUnixは、もともと優れたデザインのOSだったしね。僕は全てを0から始めたから、同じ間違いをしないように気をつけたし。

Q: Microsoftからあなたに何らかの接触されたことはないのか?

A: Microsoftは我々のことなんか気にしてないんじゃないかな? Microsoftのユーザーは5000万人、Linuxのユーザーは推定で50万ってところだから、彼らのユーザーの1% に過ぎないしね。でも、将来は彼らもLinuxのことを脅威に感じてくれればいいなと思うよ。(会場笑)

Q: 私自身、科学計算ライブラリを作ろうとしているのだが、そのようなソフトウェアプロジェクトを計画している人に対してLinuxというビッグプロジェクトを成功させた立場から何かアドバイスを。

A: Linuxでの経験から僕が言えることは、まず何か基本的な小さなシステムを作って、それはそれほど優れたものでなくてもいいから、それをネットワーク上で公開することだ。そうすると、世界中に同じようなソフトウェアを欲しがっている人がきっと見つかるだろう。そして、君のシステムに関心を持ってくれる人を見つけて、彼らと共に開発していくことだ。それがまさにLinuxに起こったことなんだ。
 僕が作った最初のLinuxは、ほんとうにごく基本的なものだった。でも、多くの人の協力で、今あるような素晴しいシステムに成長していった。だから、そういう風に開発するのが一番いいんじゃないかな?関連するニュースグループに投稿して、自分と関心を同じくする人を見つけることから始めるのも手だろう。

Q: Linuxの開発に携わっている人はどれくらいいるのか?

A: Linuxの開発者の数は、数え方によって変るね。もしカーネルの大部分を書いた主要な開発者に限るなら、10〜20人程度だろう。デバイスドライバを書いた人やカーネルの小さな改良に貢献してくれた人まで含めると100〜200人規模になるだろう。カーネルと同等かそれ以上に重要なユーザーレベルのプログラム、例えばgccやX11*30なら、それぞれにまた何百人もの開発者が関わっているから、それらを全て含めたら、何千人の規模になるはずだ。経験を積んだプログラマをこんなに多く抱えているソフト会社は存在しない。普通の大きなソフト会社でもプログラマはせいぜい数百人といったところだからね。BSDも含めてUnixのプロジェクトはいかにすごい数のプログラマに支えられてきたかがわかるだろう。

Q: copyleft*31ソフトウェアは将来どうなるだろう?

A: 僕はcopyleftが全てに正しい解だとは思わない。でも、Linux を含めたいくつかのプロジェクトにとっては copyleftは素晴らしい解だ。でも、僕は 著作権(copyright)で保護された商用ソフトウェアも必要だと思っている。この点で僕はGNU*32の連中とは意見を異にしている。彼らは全ての商用ソフトウェア無しでやっていこうとしているからね。僕自身は、あまりおもしろみがなくfree softwareが生まれないような分野の仕事は商用ソフトウェアが必要だと思っている。たとえばデータベースといった分野がそれだ。
 僕はLinux用にもっと商用のソフトウェアが出てきて欲しいと思っている。
その一方で、新しいソフトウェアがフリーに公開されていくことも望む。この両者は互いに対立する排他的なものではなく、両方とも同時に使うことはできるんじゃないかな?


●注

*1 カーネル
OSの中核部分を担うソフトウェア。

※下図は講演の際に、リィナス・トルヴァドゥス氏が示したカーネルの説明図。太い線の内側がカーネルです。

*2 クローン
オリジナルの製品と同一のハードウェア/ソフトウェア的機能を持つ製品。

*3 BSD
Berkeley System/Software Distribution。カリフォルニア大学バークレイ校が配布しているUnixの総称。

*4 ソースライセンス
ソースの閲覧、変更、再コンパイル、実行などを1台のマシンで行う権利。オリジナルのUnixに関する諸権利は、開発したAT&Tのベル研究所がすべて管理している。

*5 IBM PC互換機
IBM社の製品、IBM PCと同じ仕様を持ったPC。

*6 マルチユーザー
複数のユーザーが、1つのコンピュータを同時に使用できること。

*7 メモリプロテクション
各プログラムのメモリ領域に、ほかのプログラムが侵入しないように保護する機能。

*8 ソース互換
同一のソースコードを再コンパイルすることで、異なる機種/環境でもプログラムが実行可能になること。

*9 POSIX
異なるUnixシステム間のアプリケーションの互換性を保つために定義された、標準的なUnixのシステムインターフェイス。

*10 SYS V
AT&T社ベル研究所のオリジナル版Unixを製品化した、System Vのこと。

*11 互換性
ハードウェア/ソフトウェアにおいて、異なる製品同士を交換しても、同様の機能が得られること。

*12 gccやGNU Emacs
Free Software Foundationが開発、配布しているCコンパイラとエディタ。

*13 HP-UX
Hewlett Packard社が開発したUnixシステム。

*14 Pentium
93年にintel社が80486の次に発表したCPU。

*15 386マシン
85年に発表された、intel社のCPU 80386を使用したマシン。

*16 拡張性
ここでは、将来、ソフトウェアの機能を拡張する余地があるかどうかということ。

*17 8+3文字のファイル名の制限
MS-DOSには、ファイル名8文字、拡張子3文字以内という字数制限がある。

*18 anonymous-ftpサイト
「anonymous」(匿名)のユーザーが公開ファイルを自由にダウンロードできるように設定されたFTPサーバー。

*19 Cコンパイラ
C言語で書かれたソースコードを実行可能な状態に翻訳するソフトウェア。

*20 アセンブラ
CPUが直接理解できる機械語に翻訳するための処理言語プログラム。

*21 フィードバック
プログラムに問題を見つけた時に、そのソフトの開発者に報告すること。

*22 バグ
プログラムが正しく動作しないこと。あるいはその原因となっているプログラム上の問題のこと。

*23 パッチ
プログラムに修正を加える時に使われる小さなファイル。このパッチを使って修正することを「パッチをあてる」などという。

*24 WINE
LinuxでMicrosoft Windowsのソフトを動かすプログラム。オリジナルの講演録でWINEについて語っている。

*25 Maple
カナダのWaterloo Maplesoft Inc. が開発した、数式処理、数値計算、グラフィック、プログラミングなどの機能を利用できるシステム。

*26 Mathematica
Stephen Wolfam Inc.が開発した、記号操作、数値計算、グラフィックスを扱う数学専用のシステム。

*27 LASER 5
秋葉原にあるCD-ROMショップとして有名。海外のゲームやLinux関連のCD-ROMなどを扱うほかレーザー5出版局は、Linux専門誌『Linux JAPAN』を出版している。ホームページは、http://www.cdrom.co.jp/

*28 Caldera Network Desktop
デスクトップPCで、ネットワーク環境(Internetも含む)を容易に構築することを目指したシステムソフトウェアパッケージ。OSとしてLinux(Red Hatパッケージ)が採用されている。

*29 Netware
Novell社が開発したネットワークOS。

*30 X11
X Window Systemのバージョン11。また、X11R6とは、X Window Systemバージョン11のリリース6のこと。

*31 copyleft
市販されているソフトウェアに設定されている、コピーや改造、再配布を禁じる著作権(copyright)条項に対してFree Software Foundationが提唱しているソフトウェアの自由なコピー、改造、再配布を認めるための指針。copyrightの正反対の意味でcopyleftを名乗っているが、著作権を放棄しているわけではなく、再配布の際にはプログラムのバイナリ(実行形式)だけでなく、ソースコードを添付することを基本としている。

*32 GNU
GNU's Not Unix(「GNUはUnixではない」の意)。Free Software Foundationが開発、配布しているソフトウェアは「GNUソフトウェア」と呼ばれる。


●関連情報

 この講演録は、翻訳者小島三弘氏の許可を得て、専門的な話題については省略し、注を付けて
『ホップ!ステップ!Linux!』の付録として収録したものを、HTML文書化しました。

 Linus Torvalds氏は、本講演で、このほかにもさまざまな話題を取り上げています。
ここに掲載しきれなかったの主な話題は以下のとおりです。

 以上、本書では掲載できなかった話題を含む、オリジナルの講演録全文は以下のWebページで公開されています。

 また、その他の関連するWebページは以下のとおりです。


 本講演録の本書への転載、および注を付すにあたって、以下の方々の協力をいただきました。

小島三弘 さん
馬場 肇さん


このページに関するお問い合わせは翔泳社編集部へ。

戻る