Linux カーネル 0.01の誕生 20
ストーリー by mhatta
始まりはいつも突然に 部門より
始まりはいつも突然に 部門より
kazside 曰く、
本家Slashdotでも取り上げられていますが、KernelTrapにリリースまでの経緯やソースコード、若い頃のLinus Torvaldsの写真も添付したLinux 0.01リリースに関する記事が出ています。 Linusが当初はカーネルをFreaxと呼ぶつもりであったことは知りませんでしたが、当時の状況を知っている人達にとっては非常に懐かしい事項が並んでいるかと思います。ライセンスも当初はGPLではなかったことが見えますし、GNUに比べて自分のOSが如何に小さなものかという謙遜も見えるので、そのあたりも新鮮に感じるかもしれません。
linux release 0.01 のリリースノート(訳例) (スコア:5, 参考になる)
linux-0.01.tar.Z - kernel のソース
bash.Z - テスト用の bash の圧縮したバイナリ
update.Z - 圧縮した update のバイナリ
RELNOTES-0.01 - このファイル
1. 短い前置き
これは、i386 シリーズを使用した AT 互換機で動作する minix 風のフリーな
カーネルです。ソースコード全部が含まれています。このソースは2台の
異なった機器で動作しました。現在のところ、異なった機器で動作させるには
ソースコードをそれぞれの機器でコンパイルする必要がありますので、
カーネルのバイナリは公開していません。コンパイルには gcc が必要です
(私は gcc 1.40 を使用しました。gcc 1.37 では __asm__-directive 全部が
利用できるかどうかわかりません。)関連する設定ファイルの書き換えも
必要です。
バージョンは 0.01 ですが、これはきちんとした出来ではないという意味です。
現在のところ、AT 互換機の一部機能(ハードディスク、画面表示、キーボード、
シリアルライン)をサポートするのみとなっています。また、システムコールの
一部はまだ完全には実装していません。(mount/umount さえも実装していま
せん) ソースコードのコメントや readme を参照してください。
このバージョンの意味は、今のところ読むだけ、それも、たとえば現在どんな
風に見えるかに興味がある人向け、ということでもあります。コンパイルすれば
動作するカーネルができます。あなたの機器で動かすことについてはできる
限りの助言はします(私にメールしてください)が、全てをサポートする訳
ではありません。頻繁に変更をかけていますので、おそらく最初の”製品”
バージョンは、アルファリリース以前であるこのバージョンとは大きく
異なったものとなっていることでしょう。
linux を動かすために必要なハードウェア
- 386 の AT 互換機
- VGA もしくは EGA のスクリーン
- AT のハードディスクコントローラ (IDE が良い)
- フィンランド語キーボード(まあ、US キーボードでも使って使えないことは
ないでしょうが、多少練習が必要でしょう:-)
フィンランド語キーボードをハードワイヤしています。私はUS キーボードを
持っていませんので、US キーボードに切り替えようとすると、非常に面倒な
問題を抱えることになってしまうのです。詳細はkernel/keyboard.s を参照
してください。もしどなたか、部分的にでもポーティングしていただければ
嬉しいです。テーブルドリブンですので、特別に難しくはないはずです。
(アセンブラですけど)
linux は完全なカーネルであり、minix のコードや、その他のソース
は流用していませんが、ほとんどのルーチンはまだサポートしていません。
そのため、現時点ではシステムを起動させるために minix が必要です。
minix を持ってなくても、無料で入手できる minix のデモディスクで
ファイルシステムの作成と linux の起動は可能かもしれませんが、私には
わかりません。
Re:linux release 0.01 のリリースノート(訳例、続き) (スコア:3, 参考になる)
このカーネルの著作権は、(C) 1991 Linus Torvalds とします。ただし、
その全部もしくは一部を、下記に従って再配布可能とします:
- ソースコード全てが(無料で)入手可能であること。そうでなければ、
最低限、それを請求できる条件で配布すること。
- 著作権の表示を変更しないこと(実際の所、ソースの一部分だけを配布する
つもりであれば、全てのファイルに(C)が記述されているわけではないので、
著作権の追記は必要でしょう)。極々一部の引用であれば、著作権表示なし
でも構わないでしょう。
- 配布に際し、金銭の授受を禁止します。たとえ手数料であってもです。
何か質問がありましたら、私(torvalds@kruuna.helsinki.fi)宛にメールくだ
さい。
残念ながら、カーネルそれ自体だけでは何もできません。システムを動かす
ためにはシェルやコンパイラ、ライブラリが必要です。それらは個別のより
きついか、あるいはゆるい著作権に基づいた部分品となっています。
linux で利用するツールの大半は GNU ソフトで、GNU に著作権があります。
こうしたツールは当配布物に含まれていません。詳細は私(もしくは GNU)に
問い合わせてください。
3. カーネルについての短い技術概論
linux カーネルは minix 環境下で作成されました。当初私は、minix と
バイナリ互換にするつもりでした。両者の差異が拡大したことにより
廃案となりました。システムは未だに相当似かよって
います。キーポイントは以下の通りです。
- 386 チップの可能性の有効活用。minix は 8088 チップの上で記述され、
他のマシンにも移植されました。linux は 386 チップの強みを最大限に
活用しています( あなたが 386 チップを /持って/ さえいれば、すばらしい
ことですね。移植は大変困難ですけど)
- メッセージパッシングはありません。より伝統的な unix らしい方式です。
システムコールは単なる呼び出しです。より高速化できるかも
しれません。あるいはできないかもしれませんが、メッセージに
起因する問題の一部(メッセージキューなど)を免れていることをも、
意味しています。もちろん、良い機能を失ってもいますが:-p
- マルチスレッドなファイルシステム メッセージを使用しない、必然の
結果です。それによりファイルシステムはやや(というより非常に)
複雑になってしまっていますが、より優れたものになっています。改良された
スケジューラーと相まって、複数のプロセスを実際に動かすことができ、
minix による パフォーマンスヒットもないということです。
- 最小限のタスク切り替え。これもメッセージ不使用による結果です。
何をやっているときでもタスクが切り替わってしまう minix とは
違い、本当にタスクを切替えたくなったときに限って、タスク切替えを
実行します。これにより、387 サポートの実装がより容易になって
います(実を言えば、実装はほとんど完了しています)。
- 割り込みは隠蔽されていません。( Tanenbaum を含む)、人によっては
割り込みを醜い、隠すべきものと考えるようですが、残念なことに、
他の全て同様、コードの一部分になっています。管見によれば、
現実的な理由により、割り込みは主に、機械語で制御すべきもの
です。特にデバイスドライバはほとんど割り込みルーチンから
成り立っています。kernel/hd.c 等を参照して下さい。
- kernel/fs/mm ディレクトリには、区別はありません。すべて同じ
code のheap にリンクされています(?)。この点については欠点同様、
利点も存在します。このコードは minix のコードとは異なり、
モジュールではありませんが、その反面、様々な箇所が単純になっています。
カーネルにおける相違点はソースツリーの異なるサブディレクトリに
あります。しかし起動時には同じデータ/コードスペースで動きます。
linux の実装における基準は、高速に稼働すること、カーネルをシンプルに
しておきたかったこと、大半の unix のソフトを動かせるよう十分に
強力なことでした。
ファイルシステムについては大したことはできませんでした - 実用的な
理由により、 minix のそれと互換にする必要がありました。もちろん minix
のファイルシステムは十分にシンプルでした。カーネルと mm はシンプルに
できました:
- タスクに対して、たった一つのデータ構造体。"真の" unix は、
数カ所のタスクインフォメーションがあります。私は一箇所に
全てがあるようにしたかったのです。
- i386 のページングとセグメンテーション機能を利用した、うんと
シンプルなメモリ管理アルゴリズム。現時点での MM は memory.c と
page.s とのファイル二つの、数百行のコードだけです。
以上の決定は非常にうまく作用したように思います。バグ修正も容易で、
ちゃんと動作します。
JFよりリンク (スコア:3, 参考になる)
http://www.linux.or.jp/JF/JFdocs/linux-history.txt [linux.or.jp]
Linus Torvalds 来日講演会 (1995/12/04)
http://www.linux.or.jp/JF/JFdocs/linus-lecture.txt [linux.or.jp]
# ひさかたのID
文字化け (スコア:0)
「あ、そっか。EUCだよな。Linuxだし」
と思ったらshift-JISだった。
…釣られた。
回顧 (スコア:3, 興味深い)
(確か)ASCIIなど雑誌社が元になって、(確か)50枚ぐらいの5inchフロッピーで、郵送で巡回したバージョンって
(確か)この辺では無かったでしょうか?0.1だったかもしれません。1.0かもしれません(^^;
※(確か)0と1が組み合わさった単純なバージョンだったと思います。
Windowsが3.0になるかどうかぐらい。DOSがメイン。インターネットがまだ高嶺の花で平和な時代、
CD-ROMも高級品。Unixが動くのは「ワークステーション」だけ。とても個人では…。NEC PC98全盛の中、
PC-AT機の並行輸入がちょっとずつ盛り上がってた頃ですか。
パソ通ではとてもDLできる容量ではなく、インターネットに接続できる人はごく少数。でも*nixを使ってみたい。
ってことで50枚のフロッピーが届いたらがんばってコピー、次の人に郵送という手順で入手しました。
いろいろほのぼのしてた時代がナツカシイ。
Re:回顧 (スコア:0)
単純?「組み合わせ」かた次第で幾らでも複雑になり得そうだが。
(関係ないが)これを読んでふと
「じゃあ二進数でバージョン表記するってのはどうよ?」
と思ってしまった。
#そういや16進数のバージョンってのも意外と見かけないね。
Re:回顧 (スコア:1)
2~3桁でした。50枚も使う容量なので、0.01って事は無いですね。やっぱり0.1かな?
3.1415...の桁数が増えていくソフトならありますね。
1996年頃に来日中のLinus氏にCDROMにサインを貰っていた (スコア:0)
それ持ってます (スコア:0)
LASER5の「LINUX+JE4」パッケージで、購入時にLinus氏にサインを貰いました。
もしかして結構貴重品?
Re:回顧 (スコア:0)
PANIXってのが無かった?
価格は20万以上で高嶺の花には違いが無かったっと思うけど。
# それぐらいの頃の話だよね?
Re:回顧 (スコア:1)
Re:回顧 (スコア:1)
PANIXなんてすごく久々に聞いたなぁ(笑)
圧縮はpackよりCompressの方が (スコア:1, 興味深い)
リリースノート見たら懐かしくて思い出したよ。
linux-0.01.tar.Z - sources to the kernel
bash.Z - compressed bash binary if you want to test it
update.Z - compressed update binary
RELNOTES-0.01 - this file
100KBくらいだったか? (スコア:0)
多分、最近の GCC ではコンパイルすらできないだろうけど。。
Re:100KBくらいだったか? (スコア:1, 興味深い)
20 ./linux/boot
112 ./linux/fs
8 ./linux/init
120 ./linux/kernel
52 ./linux/lib
20 ./linux/mm
8 ./linux/tools
24 ./linux/include/sys
48 ./linux/include/linux
20 ./linux/include/asm
164 ./linux/include
512 ./linux
516
$ ls -alF linux-0.01.tar.bz2
-rw-r--r-- 1 user group 63362 1993-10-30 09:00 linux-0.01.tar.bz2
Re:100KBくらいだったか? (スコア:0)
# 今のは読む気がしねえ
Re:Linuxなんて (スコア:0)
わざわざコメント欄を開いてプレビューして投稿する手間をかけてまで
書くということは、「どうでもいい」のではなく「嫌い」なのだ。
# 某芸人は嫌いじゃないけど「どうでもいいですよー」のネタは馴染めないAC