## Linux HISTORY

1993/09/11(和訳)
Linux
Torvalds
日本語訳
深瀬長彰

    GFH00250@niftyserve.or.jp

Linux の歴史 (誕生から 0.96 まで)

## Birthday

    To: Linux-Activists@BLOOM-PICAYUNE.MIT.EDU
    From: torvalds@klaava.Helsinki.FI (Linus Benedict Torvalds)
    Subject: Birthday (was Re: Uptime found.  Thanks to all)
    Date: 31 Jul 92 22:15:20 GMT

    In article <1992Jul30.211132.20101@cc.umontreal.ca> duperval@ERE.UMontreal.CA (Duperval Laurent) writes:
    >
    >P.S.  閑話休題。 LINUX の生年月日はいつですか？ まだ答えをもら
    >ってませんよ。当日はお祝いしましょう。

    LINUX が生まれたのがいつなのかさっぱり思い出せません。 おまけに日記
    もつけていないので、LINUX が「生まれた」日時について正確なところを
    お伝えすることはできません。しかし、私も知りたいと思ったので、(私が
    LINUX を発表した) comp.os.minix のアーカイブのまわりをFTPし始めまし
    た。

    この文章はただ LINUX の初投稿の「なにか」を振り返るために書きまし
    た。ですから、ここで 'N' のキーを押してしまってもかまいません。
    もし、技術的な情報が欲しいのならそうして下さい。

    > From: torvalds@klaava.Helsinki.FI (Linus Benedict Torvalds)
    > Newsgroups: comp.os.minix
    > Subject: Gcc-1.40 and a posix-question
    > Message-ID: <1991Jul3.100050.9886@klaava.Helsinki.FI>
    > Date: 3 Jul 91 10:00:50 GMT
    >
    > ネットの皆さんこんにちは
    >
    > 私が今(MINIX で)やっていることの中で、POSIX の標準について知り
    > たいのです。何方か最新の（できれば）機械可読の POSIX の規格が
    > 何処にあるか教えて下さい。FTP のサイトならば最高です。

    その時私がやっていたことというのが、まぎれもなく LINUX です。そして
    7 月 3 日までには、ユ−ザ−のレベルでの実際的な事を考え始めていまし
    た。つまり、デバイスドライバ−もいくらか整い、ハードディスクも実用
    に耐える程度に動いてました。その他のことについては、それほどでもあ
    りませんでしたが。

    > 余談ですが、MINIX 上で GCC が利用.... (後略)

    ちょうどその頃、GCC-1.40 の MINIX 上への移植成功の報が入りました。
    Alan W Black & co. によると移植には GCC-1.37 を使ったということ
    でした。

    >               Linus Torvalds          torvalds@kruuna.helsinki.fi
    >
    > PS. どなたか海外から私を FINGER してみてくれませんか。
    > "changeing .plan" (本当は皆さんによる変更です)をインストール
    > したのですが、外からでもまともに動くか自身がありません。うまく
    > いけば、いつでも最新の .plan が見られるはずです。

    私には仲間もいなかったので、やっと名前付きパイプ(named pipe)を理解
    したところでした。ところが、書き込みの中のこの部分は、本文の POSIX
    についての質問よりもはるかに沢山のレスポンスを受け取りました。しか
    し、POSIX についての質問が木細工から arl をかつぎ出しました。そし
    て、何通かメールを出して回った結果、nic.funet.fi. に LINUX のサブ
    ディレクトリを作ってもらうことができました。

    そして、それからほぼ 2 か月が経った頃には、動作するものがしっかりと
    手元にありました。バージョン 0.01 のソースを NIC に置くようにしたの
    も、この時の前後です。0.01 は実際ソ−スであって実行形式ではありませ
    んでした。もっとも、これは arl へ形だけ示して見せるためのものでし
    た。その arl といえばかつぎ出されてみたものの、得たものにそろそろ愛
    想をつかせ始めたに違いありませんでした。
    ここにある次の投稿はそのリリース 2, 3 週間前のものです。

    > From: torvalds@klaava.Helsinki.FI (Linus Benedict Torvalds)
    > Newsgroups: comp.os.minix
    > Subject: What would you like to see most in minix?
    > Summary: small poll for my new operating system
    > Message-ID: <1991Aug25.205708.9541@klaava.Helsinki.FI>
    > Date: 25 Aug 91 20:57:08 GMT
    > Organization: University of Helsinki
    >
    >
    > 画面の前の MINIX をお使いの皆様こんにちは
    >
    > 現在 386(486) を積んだ AT 互換機用の(フリーな) OS を作っていま
    > す。(ただの遊びで、巨大にはならないでしょうし、GNU のように
    > ちゃんとしたようなものにはならないでしょう) 4 月から仕込み始め
    > ましたが、そろそろ出来つつあります。
    > MINIX のなかでどの点が気に入られ、または、嫌われているのか、な
    > んでもかまいませんから意見を下さればと思っています。というの
    > も、私の OS は幾分か MINIX に似ているからです。(その中でも、
    > ファイルシステムの物理的なレイアウトは、(現実的な理由から) 一
    > 緒です。)
    >
    > 現在のところ BASH(1.08) と GCC(1.40) を移植しましたが、ちゃん
    > と動いているようです。これは、もう 2,3 ヵ月の間にはかなり実用
    > に耐えるようになるということです。そこで、一般にどんなことが望
    > まれているのか知りたいと思っています。
    > どのような意見も大歓迎ですが、その意見を盛り込むという保証はし
    > ません :-)
    >
    >               Linus (torvalds@kruuna.helsinki.fi)
    >
    > PS.  勿論 MINIX のコードからは完全に独立していますし、その上
    > マルチスレッドのファイルシステムも乗っています。移植性は低いで
    > すし (386 のタスクスイッチングを使っていたり)、AT ディスク以外
    > は、まずサポートしないつもりです。
    > つまり、それだけしか私は持っていませんので:-(。

    この投稿を見るに、この時はまだ 0.01 を公表してなかったのですが、そ
    の時はもう間近に迫っていたのでしょう。最初のバージョンは 91 年の中
    ごろに発表したものと思われます。この時には、レスポンスがありました
    (ほとんどがメールで、とっておきませんでした。)し、中には LINUX の
    ベータテスターになりたいというメールまでありました。

    この後、ネットでは、ほんの 2,3 の質問と応答がかわされました。

    > From: torvalds@klaava.Helsinki.FI (Linus Benedict Torvalds)
    > Newsgroups: comp.os.minix
    > Subject: Re: What would you like to see most in minix?
    > Summary: yes - it's nonportable
    > Message-ID: <1991Aug26.110602.19446@klaava.Helsinki.FI>
    > Date: 26 Aug 91 11:06:02 GMT
    > Organization: University of Helsinki
    >
    > In article <1991Aug25.234450.22562@nntp.hut.fi> jkp@cs.HUT.FI (Jyrki Kuoppala) writes:
    > >> &lsqb;re: my post about my new OS&rsqb;
    > >
    > >もっと詳しくお願いします。MMU は要りますか？
    >
    > ええ。MMU が必要ですし (皆さんすみません), もっと言うならば
    > 386/486 の MMU が必要です。(これについては後述).
    >
    > >
    > >>PS.  勿論 MINIX のコードからは完全に独立していますし、
    > >>その上マルチスレッドのファイルシステムも乗っています。
    > >>移植性は低いですし(386 のタスクスイッチングを使ってい
    > >>たり)
    > >
    > >どの程度Cで書きましたか?  移植するときに何が問題になるので
    > >しょう? 移植性が ゼロだなんて誰も信じませんからね ;-),
    > >かく言う私も AMIGA に移植したいと思ってます。 (MACH には
    > >MMU がないし MINIXはフリーじゃない).
    >
    > 移植は不可能だと言う他はありません。ほぼ全てを C で書いていま
    > すが、あれを C だと言う人はまずいません。386 の特徴を考えられ
    > るだけ活用していて、386 について勉強するためのプロジェクトだっ
    > たとも言える程です。既に言ってきたことですが、MMU をページング
    > (ディスクはまだ)とセグメンテーションに使っています。そして、
    > セグメンテーションのせいで完璧に 386 専用になってます。
    > (ひとつのタスクはコードとデータのために 64MB のセグメントを 1
    > つ用意します。ですから、4GB のなかに最大 64 タスク置けます。
    > いったい誰が、タスクあたり 64MB も必要とするでしょう?)
    >
    > それから、GCC の特徴を考えられるだけ活用してもいます。 特に
    > __asm__ directive (命令)は多用していて、そのおかげでアセンブリ
    > 言語をあまり使わずに済みました。
    > "C" のソースの中には C ともアセンブラともほとんど区別のつかな
    > いものもあります( MM.C は格別)。 GCC 以外のコンパイラに移植す
    > るのでさえ「興味深い」ものとなるでしょう。(もっとも、誰かが
    > GCC 以外のコンパイラを使うきになったとしても、その理由は謎です
    > ね。)

編 注: LINUX は新しいバージョンになって移植性が向上しました。つま り、初期のバージョンでは、非常に沢山アセンブラで書かれた部分があり ました。しかし、今になってさえ正気の人間なら移植しようなどとはしな いでしょう。

    > MINIXと違い、割り込みも好んで使うようになり、割り込みを扱う時
    > に、原因を隠蔽しようとしないようにしました。(私は特に自作のハ
    > ードディスクドライバを気に入っています。誰か割り込みドライバを
    > ステートマシンにしませんか?)
    > どこをとっても、移植しようとする人にとっては悪夢となるでしょう
    >
    > >仮想端末(pseudo ttys)BSDソケット、ユーザーモードのファイル
    > >システム (/dev/tcp/kruuna.helsinki.fi/fingerを cat したの
    > >で言えるのですが),tty 構造体の中のウインドウサイズ、POSIX.
    > > 1 をサポートできるようなシステムコール。それから、BSD ス
    > >タイルの長いファイルネーム。
    >
    > ほとんどのことが可能だと思いますが、(TTY 構造体には既にウイン
    > ドウサイズのメンバがあります。)ユーザーモードのファイルシステ
    > ムは別でしょう。POSIX についてですが、あればいいと思ってはいま
    > すが、POSIX の刊行物は有料ですから、現在のところ選択の余地はあ
    > りません。いずれにせよ、まだしばらくの間サポートしないものもあ
    > ります。(まずはじめに、MINIX そっくりにしようと思っています)
    >
    >               Linus (torvalds@kruuna.helsinki.fi)
    >
    > PS. ここで、物事を明らかにしたいと思います。勿論 LINUX 上で
    > GCC や BASH、その他 GNU の [bin/file]utilities が走っていま
    > すが、それほどデバッグは進んでいませんし、ライブラリも必要最低
    > 限のものです。今の所、フロッピーディスクさえサポートしていませ
    > ん。あと 2, 3 か月は配布する準備は整わないでしょう。それに加え
    > て MINIX で出来る以上のことは、それほど出来ないでしょうし、
    > MINIX に遠く及ばない点もあるでしょう。それでも、フリーではあり
    > ます。(おそらく、GPL かそれに似たものの下で。)

    確かに何かが私のマシンで動いていました。しかし、LINUX の上でコンパ
    イルした GCC をその時すでに持っていたかは怪しいものです。(というよ
    りも、LINUX を自慢しようという気持のあまり、このことは言わなかった
    のかもしれません。)まだ、リリース前のことでした。

    そして、10月5日には 0.02 をリリースしたようです。前にも書きました
    が、0.01 ではバイナリでの配布はいっさいしませんでした。つまり、ソー
    スコードのみで配布していて、LINUX がどんな様子か知りたい人を対象に
    していました。0.01 にはあまり自信がありませんでしたから、興味をみせ
    た人だけに覚書を送ることにしました。

    > From: torvalds@klaava.Helsinki.FI (Linus Benedict Torvalds)
    > Newsgroups: comp.os.minix
    > Subject: Free minix-like kernel sources for 386-AT
    > Message-ID: <1991Oct5.054106.4647@klaava.Helsinki.FI>
    > Date: 5 Oct 91 05:41:06 GMT
    > Organization: University of Helsinki
    >
    > 人は人として自ら望むデバイスドライバを書いていたMINIX-1.1の古
    > き良き時代が懐かしくはありませんか? ちょうど良いプロジェクトが
    > なくて、幼い頃から慣れ親たしんだ OS に手を加えようとして死んで
    > いませんか? MINIX の上で全てがうまく行っている時にふとやり場の
    > 無い気持に捕らわれませんか?夜行性の人間が素晴らしいプログラム
    > に命をそそぎこむことはもうないのか? この投稿はそんなアナタのた
    > めなのです:-)
    >
    > 一月(?)ほど前にも言いましたが、386 の AT 互換機用のフリーで
    > MINIX にそっくりな OS を作っています。それが、とうとう(なにを
    > 望むかにもよりますが)使えるという段階に達しましたので、ソース
    > を大々的に配布したいと思います。今回はバージョン 0.02(+1(非常
    > に小さい) パッチがあたってます)ですが、
    > BASH/GCC/GNU-MAKE/GNU-SED COMPRESS 等を走らせることができまし
    > た。
    >
    > この小さなプロジェクトのソースはnic.funet.fi(128.214.6.100)の
    > /pub/os/linux にあります。このディレクトリには、README ファイ
    > ルとLINUX上で動くバイナリが少々あります。(BASH, UPDATE, GCC,
    > これ以上は尋ねて下さい :-)カーネルのソースも完全な形で上げてお
    > きました。その中ではMINIXのコードはいっさい使っていません。し
    > かし、ライブラリのソースは部分的にしかフリーでないので、今の所
    > 配布するわけにはいきません。このシステムは、そのままコンパイル
    > することができ、尚且つ動くことが確認されてます。ふぅ。(BASH や
    > GCCのソースはやはり nic.funet.fiの/pub/gnu にあります。
    >
    > 警戒! 警告! 注意! これらのソースをコンパイルするには、まだ
    > MINIX-386(と GCC-1.40 おそらく 1.37.1 でも可。しかしテストして
    > ません。) が必要で、LINUX を走らせるのにも MINIX でセットアッ
    > プしなければなりません。つまり、MINIX を持ってない人にとって
    > は、今の所スタンドアロンではありません。現在なんとかしようと
    > しています。また、今の所 LINUX はハッカーの「何か」がないと
    > セットアップできません(?)。そういうわけで、MINIX86 の代わりに
    > なるものが欲しいひとは、どうかこの書き込みは無視してください。
    > LINUX 0.02 は、OS と 386 に興味があって MINIX が使えるハッカー
    > を対象にしているのです。
    >
    > また、このシステムには、AT 互換のハードディスク(IDE はもってこ
    > いです) と EGA か VGA が無くてはなりません。ここまで読んでまだ
    > 興味のあるかたは、README や RELNOTES を読んだり、もっと知りた
    > いとこがある人は私にメールしたりしてください。
    >
    > 「何故?」という言葉が聞こえて来るようです。HURD は1年(2年かも
    > しれないし、2 か月かも知れないです。)以内には出てきそうです
    > し、すでに MINIX があります。しかし、これはハッカーによる
    > ハッカーのためのプログラムなのです。だから、私も楽しみながら
    > 作りましたし、きっと誰かは見て喜ぶだろうし、その人自信のために
    > 改造したりもするでしょう。まだ、規模が小さいので理解したり改造
    > するのに困るようなこともないでしょう。そのようなわけで、皆さん
    > のコメントを首を長くして待っています。
    >
    > それから、MINIX のユーティリティやライブラリ関数を書いたことの
    > ある人はメールして頂けませんか？ もし、それら皆さんの努力の産
    > 物が自由に配布して良いなら(著作権の下ででも、パブリックドメイ
    > ンのものでも)お知らせ下されば、件のシステムと一緒に配布するこ
    > とができます。現在は EARL CHEWS ESTDIO を使ってます (EARL
    > さん、素晴らしい、そして、使えるシステムをありがとう)し、この
    > ようなものは大歓迎です。勿論皆さんの「(C)」はそのままです。自
    > 分のコードを使ってもらって構わないという人は、お手紙ください。
    >
    >               Linus
    >
    > PS. PHIL NELSONさんへ! 音信不通になってますよ。ずっと
    > "forward error - strawberry unknown domain" 等のエラーを受け取
    > ってます。

    確かに動いていましたし、それを自分で確認した人もいます。しかし、
    0.02 には酷いバグもいくつかあって(おまけにフロッピードライバも無け
    れば、VM(仮想記憶)も無いというないない尽くしの状態)、あまり使い勝手
    はよくありませんでした。

    その後すぐに 0.03 がリリースされ(その当時でさえ 2 つのリリースの間
    は最大に見積もっても 2,3 週間でした。)、非常に使勝手の良いものでし
    た。そして、次のバージョン番号は 0.10 になり、この時から実際非常に
    安定して動作するようになりました。次の投稿には、それから 2 か月の間
    に出来るあるもののアイディアがありました。

    > From: torvalds@klaava.Helsinki.FI (Linus Benedict Torvalds)
    > Newsgroups: comp.os.minix
    > Subject: Re: Status of LINUX?
    > Summary: Still in beta
    > Message-ID: <1991Dec19.233545.8114@klaava.Helsinki.FI>
    > Date: 19 Dec 91 23:35:45 GMT
    > Organization: University of Helsinki
    >
    > In article <469@htsa.htsa.aha.nl> miquels@maestro.htsa.aha.nl (Miquel van Smoorenburg) writes:
    > >こんにちは *,
    > >     LINUXという386/486用のフリーのOSを作っている人々がい
    > >ると聞いてました。どんな様子かと思って nic.funet.fi をぼち
    > >ぼち見にいってました。ところが、私は生まれた時から FTP を
    > >使える環境にないものですから、今現在何が起こっているのか、
    > >知る由がありません。どなたか、そのことを知らせくれません
    > >か?
    > >おそらく、私がここで書いていることは的を射ているのではない
    > >でしょうか。というのも、このニュースグループを読んで、密か
    > >に期待してるひとが大勢いると思うからです。斯く言う私も、
    > >>=386なマシンを持ってませんが、近い内に手に入れることに
    > >しています。
    >
    > LINUXはまだベータで(もちろん、勇敢な人は FTP して利用できます
    > が), バージョン 0.11 になりました。まだ、386-MINIX ほどの完成
    > 度ではありませんが、勝っている点あります。 そのうち "Linux
    > info-sheet" をその管理者が投稿するでしょう。それまでのつなぎに
    > 私からなにか少し言えるでしょう。
    >
    > まず悪いニュース:
    >
    >       - SCSIが無い: 現在作っていますが、まだ出来ていません。
    >         そういうわけで、AT互換のハードディスクが必要です
    >         (聞いた所によると、とある EISA 486 の上で AT ディスク
    >         をエミュレートするとある SCSI ディスクが動くそうです
    >         が、単に運が良かった以外の何者でもないでしょう。

    ここまで見て来た通り、0.11 では既に小数ながら賛同者がいました。充分
    とは言えませんでしたが、ちゃんと働いてくれました。

    >       init/login が無い: 立ち上げたら ROOT で BASH に入る。

    次のリリースでもこれが普通でした。

    >       - 動いてるようなVM(ディスクにページングする)があります
    >       が、まだ配布はできません。そんなわけで、LINUX で GNU の
    >       バイナリ (GCCは格別) 走らせるには最低4M必要です。2M でも
    >       立上りますが、コンパイルできません。

    実際は 0.11+VM を 91 年のクリスマス直前にリリースしました。とはいっ
    ても、私には必要の無いものでした。しかし、2MB でカーネルをコンパイ
    ルしようとして失敗する人がいたので、VM をインプリメントしないわけに
    はいきませんでした。0.11+VM のバージョンはテストしたいという小数の
    人の手にしか渡りませんでした。しかし、思った通りに動いたのは、今で
    も脅威です。

    >       - まだ MINIX を使う人のほうが大勢いる: サポートを万全に
    >       すべき。
    >
    >       - 沢山の人々による長年に渡るテストを受けていないので、ま
    >       だ非常に沢山のバグがあるはずである。
    >
    > それでは、良いこと....
    >
    >       - フリーである(著作権は私にありますが、極めてゆるやかな
    >       著作権の下で自由に配布できます。

    黎明期の著作権は GNU のコピーレフトに比べるとはるかに厳しいものでし
    た。LINUX が人手に渡る時に金銭がやりとりされることを完全に禁止しま
    した。

    >       - 楽しくハックできます
    >
    >       - 本もののマルチスレッドのファイルシステム
    >
    >       - 386 の特徴を活かしてます。だから、386/486 ファミリーに
    >       固定されてます。しかし、他のチップに移植しようと思わなけ
    >       れば、非常にスッキリしています。
    >
    > LINUX は私に言わせれば、MINIX よりも良いです、勿論、私は少々贔
    > 屓してますけど。
    > LINUX は HURD が(来世紀かその頃に:)目指しているようなプロフェ
    > ッショナルな OS にはなることは無いでしょう。しかし、LINUX は学
    > 習用にもってこいですし( MINIX よりも向いていると思います。
    > IMHO)、楽しみながらいじれます。
    >
    >               Linus (torvalds@kruuna.helsinki.fi)
    >
    > --- 以下は私の .plan --------------------------
    >      フリーな 386 用の UNIX 91年第4四半期か92年第1四半期に登場
    >
    > 現在 LINUX はバージョン 0.11 で、UNIX のカーネルに必要なものじ
    > ゃあらかた揃っています。init と login を作り、もう少しのテスト
    > を経た後、1.0 をリリースできる予定です。現状ではブートの後で
    > シェルに飛び込むことになります。
    >
    > LINUX は 'nic.funet.fi' (128.214.6.100)のディレクトリ
    > '/pub/os/linux' から anonymous FTP で取って来れます。そのディ
    > レクトリのなかに LINUX 上で動くバイナリもあります。現在は GCC,
    >  BASH, UPDATE, EMACS, TAR, MAKE, FILEUTILS があります。
    > 走るシステムを手に入れた人もいますが、まだハッカーのシステムで
    > す。
    >
    > LINUX をまともに使うには、今のところ AT ディスクが必要です。
    > SCSI ドライバを作っている人々もいますが、いつ出来上がるかは定
    > かではありません。
    >
    > 他のいくつかのサイトでも LINUX を置いてあります。というのも、
    > NIC にはなかなかコネクトできませんから。そのサイトは
    >       Tupac-Amaru.Informatik.RWTH-Aachen.DE (137.226.112.31):
    >               directory /pub/msdos/replace
    >       tsx-11.mit.edu (18.172.1.2):
    >               directory /pub/linux
    >
    >  'Linux-activists@niksula.hut.fi' にセットアップされたメーリン
    > グリストもあります。登録は、'Linux-activists@niksula.hut.fi'
    > にお願いして下さい。
    > 私にメールしてきても無駄です。実際私はこのメーリングリストとは
    > 関係ありません。(私自身ごく普通のメンバであることを除いては)
    >
    > これ以上のことが知りたければメールを下さい
    >
    >               Linus (torvalds@kruuna.Helsinki.FI)
    >
    > 0.11 で新しくなったこと
    >
    > デマンドローディング
    > - 無関係なプロセス間でのコード／データの共有
    > - 格段にましなフロッピードライバ (ほぼ完全に動きます)
    > - バグがとれました
    > - Hercules の MDA, CGA, EGA, VGA をサポートしました。
    > - コンソールがBEEPするようになりました。
    >    (わお! 凄えカーネル :-)
    > - mkfs, fsck, fdisk がつきました
    > - アメリカ、ドイツ、フランス、フィンランドのキーボードが使えま
    >   す
    > - COM1/2のスピードがセットできます

    御覧の通り: 0.11 は本物のスタンドアロンでした。LINUX 用に初めて
    mkfs, fsck, fdisk のプログラムを書きました。もう、セットアップに
    MINIX は要らなくなりました。また、シリアルドライバも 2400BPS (私が
    持っていたのはこれだけ)用にハードコーディングしました。

    > まだ無いものは
    > - init, login
    > - renameシステムコール
    > - 名前つきパイプ(named pipe)
    > - シンボリックリンク

    今ではこれらのものは全て揃いました。init, login は 0.12 のころは完
    全にはできていませんでした。rename() は 0.12 と 0.95 の間のどこかで
    組み込まれました。シンボリックリンクは 0.95。名前つきパイプに至って
    は 0.96 の時でした。

    > 0.12 は 1 月(15日あたり)に出るでしょう。そしてこんなことが実現
    > されるはずです。
    > - POSIX のジョブコントロール(tytsoより)
    > - VM (ディスクへのページング)
    > - 細かい点での修正

    実際に 0.12 が出たのは 1月 5日のことでした。中には大きな修正もあり
    ました。0.12 は非常に安定したカーネルでした。色々なハードの上で動く
    ようになりましたし、長い間パッチが要りませんでした。また 0.12 のカ
    ーネルは「遂にここまで来たか」というものでした。この時から LINUX が
    広がるのが急激に加速しはじめました。初期のカーネルはまさにハッカー
    専用でしたが、0.12 は本当によく動きました。

    ここまでで 1991 の話はおしまいです - これでなにか答えになった思いま
    す。

## Wriging an OS

    To: Linux-Activists@BLOOM-PICAYUNE.MIT.EDU
    From: torvalds@klaava.Helsinki.FI (Linus Benedict Torvalds)
    Subject: Re: Writing an OS - questions !!
    Date: 5 May 92 07:58:17 GMT

    In article <10685@inews.intel.com> nani@td2cad.intel.com (V. Narayanan) writes:
    >
    >どうも、皆さん
    >この分野の「初心者」は暇がある毎に考えてきたのですが、どうやっ
    >たら何もないところから OS を書き起こせるのでしょうか? そういう
    >わけで、いくつか質問しますが、これらの質問に時間を割いて答えて
    >下さるなら尊敬します。

    誰かが答えたのものとは思いますが、LINUX については私が引き受けまし
    ょう。私の個人的な経験そのままを書きます。普通はどのようにするのか
    は知りません。

    >1) カーネルを作っているときには、だいたいどうやってデバッグしま
    >   すか?

    使っているマシンと、作業の進み具合によります。もっとシンプルなシス
    テムならたいていセットアップはもっと簡単です。プロテクトモードの
    386 で私がやらなければならなかったことをかきます。

    一番厄介な所は一番最初です。printf 等が使える最低限のシステムさえ手
    に入れた後であっても、386 でのプロテクトモードへの移行は楽しくな
    いです。386 のアーキテクチャを良く知らぬままに始めたのであればなお
    さらです。この段階システムでは、死にたくなるほどリブートしまくりま
    す。もし 386 がなにかがヘンだと気づいた日には、シャットダウンして
    リブートしてしまいます。何が悪いのかの証拠を残す暇もありません。

    printf() もたいして役に立ちません。リブートすれば画面もきれいさっぱ
    りです。それから、VRAM も叩かなければだめです。VRAM はセグメントが
    間違っていたりすると落っこちてくれます。デバッガなんて考えるだけ無
    駄です。386 のプロテクトモードまでついていくデバッガなんて聞いたこ
    とがありません。386 エミュレータや、一部の重装備のマシンならなんと
    かなるかもしれませんが、大抵は駄目です。

    私が使ったのは、ただの時間稼ぎのループでした。

    die:
            jmp die

    このうようなものをここぞというところに入れます。止まってしまえば OK
    ですし、リブートしてしまったら、すくなくともこの die ループの前が怪
    しいとわかります。
    変わりにサウンドポートも利用できますが、私は PC のハードはいじった
    ことがなかったので、全然使いませんでした。これ以外に方法がないわけ
    ではありません。私はカーネルを書こうと思って始めたのではなく、ただ
    386 のタスクスイッチ等について知りたかっただけです。しかし、とにか
    くこうして書き始めました。(91年の4月のことでした)

    最低限のシステムが出来上がり、スクリーンを出力に使えるようになる
    と、少々楽になります。しかし、ここで割り込みを有効にしなければなり
    ません。ドカ〜ン。いきなりリブートして、また最初の方法に逆戻り。全
    てがこの調子で、およそ 2 か月かけて、386 のまわりをまともに動くよう
    にしました。それからは、リブートしないようにと気を使いながら、同時
    に基本的なもの(ページング、タイマ割り込み、単純なタスクスイッチャ、
    セグメントのテスト)を作るということをしないで済むようになりました。

    >2) カーネルを違う OS の上で、プロセスとして走らせることで、動作
    >   を確認できますか?
    >   そのとき、(開発中の) OS が「特権」レジスタを操作しようとすれ
    >   ば、(開発環境の方の) OS で例外が発生しませんか?

    ええ。だいたい出来るなものもありますが、例えばデバイスドライバはた
    いてい、裸のマシンでテストしなければなりません。LINUX を開発するの
    に MINIX を使ったので、I/O レジスタや割り込み等はいじることはできま
    せんでした。こういうものも DOS の上でなら、全ていじることができます
    が、こんどは 32bit モードがありません。インテルもたいしたことありま
    せんね。68040 かなんかだったら、もっと楽にできたでしょう。

    単純なタスクスイッチャ(タイマ割り込みを利用して、AAAA...、BBBB....
    のように表示する 2 つのプロセスの間を行ったり来たりしました。)が出
    来ても、なお、だいたい printf を使ってデバッグをしなければなりませ
    んでした。最初にキーボードドライバに手をつけました。ちなみに、一番
    最初に書いたので、今でもオールアセンブラなわけです。(まだ C に移そ
    うという気にはなれません。まだインストラクションのレベルでデバッグ
    をしているからです。)

    シリアルドライバを書き上げました。うむ。これでシンプル(実際はそれほ
    どシンプルでは有りません)な端末のプログラムが走りました。走っている
    プロセスは例のやつ(AAAA..)ですが、今度はコンソールやシリアルを読み
    書きできるようになりました。
    この状態から抜け出すにはリブートするしかありませんでしたが、これで
    小さなカーネルができました。

    これから後は楽勝でした。まだ危ないところはありましたが、いくつかの
    デバイスが出来ていたたので、デバッグは楽になりました。この頃には C
    を使い始めました。それで、確実に開発のスピードが上がりました。
    また、「あの MINIX より良い MINIX」を作るという誇大妄想を真剣に考え
    始めたのもこの頃からでした。いつの日か LINUX の上で GCC をコンパイ
    ルできたらと夢に思うようになりました。

    ハードディスクドライバはもっと酷かったです。この時にはドキュメント
    の不備がにわかに問題となりはじめました。PC は現在世界中で最も利用さ
    れているアーキテクチャですが、だからと言ってドキュメントがより揃っ
    ているというわけではありません。事実、私は AT の中で 386 と 387 が
    どうやって接続されているかを書いた本ですら一冊も見たことがありませ
    ん。(Bruceさんありがとう)

    次は小規模のファイルシステムです。うむうむ。これで最低限の UNIX で
    す。基本的なセットアップに 2 か月かかりましたが、それから少しでディ
    スクドライバ(ひどくバグっているのですが、何故かうちのマシンでは動き
    ました)と小さなファイルシステムができました。この頃に 0.01 を世に出
    しました。(91年末?か、とにかくそのあたり)
    0.01 は美しくありませんでしたし、フロッピードライバも無く、たいした
    ことは何もできませんでした。でも、この時からもうやめられなくなりま
    したし、MINIX をうちから追い出すまでは止める気もありませんでした。

    >3) リンカとローダは基本的なカーネルが走るようになるまえに必要に
    >   なりますか?

    0.11 までのバージョンまでは、どれも MINIX386 の上でクロスコンパイル
    しました。ユーザープログラムも同様です。0.02 の上でようやく bash と
    GCC が出来上がりました。
    しかし、キャッシュの中の気まぐれに振舞うコードのせいで、GCC で GCC
    をコンパイルすることは出来ませんでした。もっと小さなものでは対処す
    ることができました。
    0.03 (10月?) では GCC を GCC でリコンパイルできました。多分実際に私
    以外の人が使い始めたのは、このバージョンからでしょう。まだもって、
    フロッピーは使えませんでしたが、基本的なものはだいたい動きました。

    0.03 を出した後、次のバージョンは実際に使えるものにしようと決心しま
    した。(この時も印象的ではありましたが、0.96 で X が走ったときに比べ
    ればかわいいものです。)
    そして、次のバージョン(10月?)番号は 0.10 にしました。まだ、キャッシ
    ュのコードに比較的重大なバグがありましたが、パッチをあてたあとはう
    まく動いてくれました。
    0.11(12月)には始めてフロッピードライバを搭載しました。それから、こ
    の時点から、LINUX の上で LINUX の開発をするようになりました。タイミ
    ングよく、/dev/hd2 に自動問い合わせ(autodial)しようとしている最中
    に、MINIX386 のパーティションを間違って捨ててしまいました。

    この時にはみんな LINUX を使っていました。そしてメモリ不足に悩んでい
    ました。最高に悲しかったのは 2MB のマシンでは GCC が動かないことで
    した。c386 が移植されましたが、GCC にしかできないことがあり、カーネ
    ルをリコンパイルできませんでした。そういうわけで、ディスクページン
    グを組み込まざるを得ませんでした。1月(?)に発表した 0.12 では、私の
    ページングと tytso 氏によるジョブコントロールがまともに動いてまし
    た。
    (その他のパッチでは、pmacdona 氏が VC を作り始めました)このとき、初
    めて本質的な変化がなく、部分的に私以外の人が書いたリリースが出まし
    た。そして、このとき初めて多くの点で MINIX よりも良くなりました。そ
    れから、本当に人々を引き付け始めました。

    それから 0.95 が 3月に出て、4月にバグが取られ、すぐに 0.96 が出まし
    た。LINUX には本当に楽しませてもらいました。(そして、ずっとそうだと
    確信してます)反応は非常に好意的ですし、こういうことをすれば非常に沢
    山のことを学ぶことができるでしょう。
    (ちなみに、ほかの方面のでの学習は妨げられますけど :)

                    Linus

(SGML conversion: yuji senda)