和訳しようとした動機
スラド (/.jp) が2024年1月末で閉鎖になるという記事を見ました。
私も学生時代に良く訪れていたサイトです。幾度かコメントを投稿した事もありました。
Anonymous Coward のコメントでしたが、linux kernel RELNOTE-0.01 の和訳 (部分) がありました。懐かしくなり読んだのですが、3項までの和訳で全文ではありませんでした。
何処かに archive として残ってくれたらよいのですが、あまり期待できなさそうです...と思っていたら、受け入れ先が見つかれば継続かも。
それはともあれ...
最近は自動翻訳の精度も向上してきていますので、私にも和訳が出来るのではないかと試してみたくなりました。全文を読みたかった事もありますので、これを機会に和訳してみる事にしました。
各セクション毎に引用元の英文と和訳を載せて、私のコメントを付加します。
使用したサービス
以下のサービスを使用して和訳しました。
Shaper : 英文の改行・空白を除去する
DeepL 翻訳 : 高精度な翻訳ツール
Google 翻訳 : Google の翻訳サイト
Linux kernel RELNOTES-0.01 は英文の plain text ですが、両側に隙間を空けて整形されています。
段落毎に Shaper で空白を除去し、主に DeepL 翻訳、副に Google 翻訳を使用して、元の英文と比較して内容を確認しながら進めました。何方の翻訳サービスも英文と訳文を並べて表示しますので、日本語の文章として破綻していないかどうかを確認しました。
最終的に、括弧等の記号の全角 -> 半角、用語の統一、レイアウトなどを調整しました。
Linux kernel RELNOTES-0.01 和訳
原文は下記のリンク先にあります。
以下、RELNOTES-0.01 の和訳です。
- 各項毎に、始めに原文を引用し、次に和訳を載せました。その後に、私なりの補足を付加しています。
- 住所やメールアドレスについては除外しました / 伏字にしました。必要であれば原文を参照下さい。
- 訳文は整形していませんので、リスト部分の表示が見にくくなっていますがご容赦下さい。
Notes for linux release 0.01
0. Contents of this directory
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
linux 0.01のリリースノート
0. このディレクトリの内容
linux-0.01.tar.Z - kernelのソース。
bash.Z - 圧縮されたbashバイナリ。
update.Z - 圧縮されたアップデートバイナリ
RELNOTES-0.01 - このファイル
'.Z' という拡張子に馴染みのない方は多いかと思います。当時は compress / uncompress という圧縮・展開ソフトが主流でした。compress で圧縮した際の拡張子が '.Z' です。最近は見かける事が無くなりました。
linux で使用するなら、今なら '.gz' (gzip) / '.bz2' (bzip2) / '.xz' (xz) / '.zip' (zip) 位でしょうか。
現在残っている linux-0.01 の source file は gzip で圧縮されていました。僅か (と言っても良いかと思います) 73 kB です。展開しても 285 kB。ファイル数は Makefile も含め 88 個です。
$ ls -l
-rw-r--r-- 1 hiro hiro 73091 Oct 30 1993 linux-0.01.tar.gz
$ du -sb linux
284821 linux
$ find linux -type f | wc -l
88
$ tree -d linux
linux
├── boot
├── fs
├── include
│ ├── asm
│ ├── linux
│ └── sys
├── init
├── kernel
├── lib
├── mm
└── tools
12 directories
$ head -n 3 linux/kernel/Makefile
#
# Makefile for the FREAX-kernel.
#
directory 構成もシンプルです。linux-0.01 の公開前には 'Linux' の名称をどうするか決まっていなかったという話があり、linux/kernel/Makefile には、その名残がありました。
1. Short intro
This is a free minix-like kernel for i386(+) based AT-machines. Full
source is included, and this source has been used to produce a running
kernel on two different machines. Currently there are no kernel
binaries for public viewing, as they have to be recompiled for different
machines. You need to compile it with gcc (I use 1.40, don't know if
1.37.1 will handle all __asm__-directives), after having changed the
relevant configuration file(s).
As the version number (0.01) suggests this is not a mature product.
Currently only a subset of AT-hardware is supported (hard-disk, screen,
keyboard and serial lines), and some of the system calls are not yet
fully implemented (notably mount/umount aren't even implemented). See
comments or readme's in the code.
This version is also meant mostly for reading - ie if you are interested
in how the system looks like currently. It will compile and produce a
working kernel, and though I will help in any way I can to get it
working on your machine (mail me), it isn't really supported. Changes
are frequent, and the first "production" version will probably differ
wildly from this pre-alpha-release.
Hardware needed for running linux:
- 386 AT
- VGA/EGA screen
- AT-type harddisk controller (IDE is fine)
- Finnish keyboard (oh, you can use a US keyboard, but not
without some practise :-)
The Finnish keyboard is hard-wired, and as I don't have a US one I
cannot change it without major problems. See kernel/keyboard.s for
details. If anybody is willing to make an even partial port, I'd be
grateful. Shouldn't be too hard, as it's tabledriven (it's assembler
though, so ...)
Although linux is a complete kernel, and uses no code from minix or
other sources, almost none of the support routines have yet been coded.
Thus you currently need minix to bootstrap the system. It might be
possible to use the free minix demo-disk to make a filesystem and run
linux without having minix, but I don't know...
1. 簡単な紹介
これは i386(+) ベースの AT マシン用のフリーの minix ライクな kernelです。完全なソースが含まれており、このソースを使って 2 台のマシンで動作する kernel を作成しました。異なるマシン用に再コンパイルする必要があるため、現在のところ一般公開用の kernel バイナリはありません。関連する設定ファイルを変更した後、gcc (私は 1.40 を使っています。1.37.1 がすべての __asm__ ディレクティブを扱えるかどうかはわかりません) でコンパイルする必要があります。
バージョン番号 (0.01) が示すように、これは成熟した製品ではありません。現在サポートされているのは AT ハードウェアのサブセット (ハードディスク、スクリーン、キーボード、シリアルライン) だけで、システムコールのいくつかはまだ完全に実装されていません (特に mount/umount は実装すらされていません)。コードのコメントや readme を参照してください。
このバージョンは、システムが現在どのようになっているかに興味がある場合、主に読むためのものです。コンパイルして動作する kernel を作成し、あなたのマシンで動作させるためにできる限りの手助けはしますが (メールください)、実際のサポートはありません。変更は頻繁で、最初の "製品" バージョンはおそらくこのプレ・アルファ・リリースとは大きく異なるでしょう。
Linuxの実行に必要なハードウェア
- 386 AT
- VGA/EGA スクリーン
- AT 型ハードディスク・コントローラー (IDE でも可)
- フィンランド語のキーボード (US キーボードも使えます。練習が必要:-)
フィンランド語のキーボードはハードワイヤーされており、私は米国のキーボードを持っていないので、大きな問題がなければ変更できません。詳細については、kernel/keyboard.s を参照してください。部分的にでも移植してくれる方がいらっしゃいましたら、よろしくお願いします。テーブル駆動なのでそれほど難しくはないと思います (アセンブラなので...)
Linux は完全な kernel であり、minix やその他のソースからのコードを使用していませんが、サポートルーチンはまだほとんどコーディングされていません。したがって、現在、システムを起動するには minix が必要です。無料の minix デモディスクを使用してファイルシステムを作成し、minix がなくても Linux を実行することは可能かもしれませんが、わかりません...
この後も度々出てくる 'Minix' について説明します。
Minix とは、1987年にオランダの Andrew Tanenbaum 教授がオペレーティングシステムの教育用に開発した、Unix 系のオペレーティングシステムです。Minix は "mini-Unix" の略で、Unix のソースコードが非公開になったために、Unix version 7 の互換システムを再設計したものです。Minix はマイクロカーネル構造を採用し、教育用という事もありコンパクトで読みやすいソースコードを持ちます。当時の Minix は IBM PC (Intel 8088 CPU) をターゲットとして開発され、後に多くのプラットフォームへ移植されました。
Minix がマイクロカーネルを採用していて当時の CPU では性能が出にくかった事が、Linux を開発する動機となったと思います。(私は Minix に触れた事がありませんので詳細は分かりません)
386 AT は 80386 CPU を内蔵した IBM PC/ATの互換機の事です。Intel 80286 の後継の 80386 プロセッサを搭載しています。80386 CPU AT 互換機は、1986年に発売されたIBM PC/ATの後継機として、高速な32ビット演算やマルチタスクなどの機能を提供しました。80386 CPU AT 互換機は、1990年代初頭までにパーソナルコンピュータの主流となり、その後も486やPentiumなどのCPUに置き換わるまで広く使われました。
この後の文章で 8088 CPU が出てきますが、こちらは 8086 / 8088 共に 16 ビットの CPU です。8086 / 8088 (16ビット) -> 80286 (16ビット) -> 80386 (32ビット) と世代が進みました。この期間では、CPU の進化に OS が追いつけずに、80386 が 32ビット演算が可能でも OS (CP/M や MS-DOS、Windows ~ 3.0) は 16ビットで動作しており、単に 80286 CPU の高速な代替 CPU として使用されていました。
ちなみに今では想像できませんが、この時代の Intel CPU は浮動小数演算用にコプロセッサ (80387) が必要でした。また、全てシングルコア (1c1t) です。Pentium / Celeron の時代に Dual CPU (SMP) に対応する Motherboard が出始めて、個人用途でもマルチプロセッサ化が進みました。
VGA / EGA スクリーンについては、コンピュータのグラフィックスカードによって表示される色や解像度が異なります。VGA は 16 色 (262,144色中)、EGA は 16 色 (64色中) をサポートしています。また、VGA は 640x480 ピクセル、EGA は 640x350 ピクセルの解像度を持ちます。
AT / IDE ハードディスクコントローラは、現在主流の SATA の古い規格になります。40芯 (後に80芯) のフラットケーブルで接続し、二つのコネクタの何方に接続するかで Block device が決まっていました。IDE / ATA 規格については Wikipedia の情報が詳しいです。
linux-0.01 の段階では Minix のファイルシステムを使用していた為に、linux だけで boot は出来ない状態だったようです。
2. Copyrights etc
This kernel is (C) 1991 Linus Torvalds, but all or part of it may be
redistributed provided you do the following:
- Full source must be available (and free), if not with the
distribution then at least on asking for it.
- Copyright notices must be intact. (In fact, if you distribute
only parts of it you may have to add copyrights, as there aren't
(C)'s in all files.) Small partial excerpts may be copied
without bothering with copyrights.
- You may not distibute this for a fee, not even "handling"
costs.
Mail me at "torvalds@domainname" if you have any questions.
Sadly, a kernel by itself gets you nowhere. To get a working system you
need a shell, compilers, a library etc. These are separate parts and may
be under a stricter (or even looser) copyright. Most of the tools used
with linux are GNU software and are under the GNU copyleft. These tools
aren't in the distribution - ask me (or GNU) for more info.
2. 著作権等
この kernel は (C) 1991 Linus Torvalds ですが、次のことを条件として、その全部または一部を再配布することができます。
- 完全なソースが利用可能 (かつ無料) である必要があります。ディストリビューションにない場合は、少なくとも要求する必要があります。
- 著作権表示はそのままでなければなりません。(実際、その一部のみを配布する場合は、すべてのファイルに (C) が含まれていないため、著作権を追加する必要がある場合があります。) 小さな部分抜粋は、著作権を気にせずにコピーできます。
- これを有償で配布することはできません。"手数料" も含めてです。
質問があれば "torvalds@domainname "までメールください。
残念なことに、kernel だけでは何もできません。システムを動かすには、シェル、コンパイラ、ライブラリなどが必要です。これらは別個の部品であり、著作権がより厳しく (あるいはより緩く) なっているかもしれません。linux で使われるツールのほとんどは GNU ソフトウェアであり、GNU コピーレフトの下にあります。これらのツールはディストリビューションには含まれていません。
最初の公開時には、kernel source を完全に公開し、著作権表示をそのままとする事、"無料" で配布する事が記載されています。
最新の Linux kernel は 'GNU General Public License version 2' です。
GNU とは、フリーソフトウェアの開発と普及を目的としたプロジェクトの名称です。GNU は「GNU's Not Unix」という再帰的な頭字語で、Unix と互換性のあるフリーソフトウェアのオペレーティングシステムを作ることを目指しています。GNU プロジェクトは1983年に Richard Stallman によって始められ、現在では世界中の多くの開発者が参加しています。
現在のディストリビューションの全てが、Linux kernel と GNU ソフトウェアを組み合わせて作られています。
3. Short technical overview of the kernel.
The linux kernel has been made under minix, and it was my original idea
to make it binary compatible with minix. That was dropped, as the
differences got bigger, but the system still resembles minix a great
deal. Some of the key points are:
- Efficient use of the possibilities offered by the 386 chip.
Minix was written on a 8088, and later ported to other
machines - linux takes full advantage of the 386 (which is
nice if you /have/ a 386, but makes porting very difficult)
- No message passing, this is a more traditional approach to
unix. System calls are just that - calls. This might or might
not be faster, but it does mean we can dispense with some of
the problems with messages (message queues etc). Of course, we
also miss the nice features :-p.
- Multithreaded FS - a direct consequence of not using messages.
This makes the filesystem a bit (a lot) more complicated, but
much nicer. Coupled with a better scheduler, this means that
you can actually run several processes concurrently without
the performance hit induced by minix.
- Minimal task switching. This too is a consequence of not using
messages. We task switch only when we really want to switch
tasks - unlike minix which task-switches whatever you do. This
means we can more easily implement 387 support (indeed this is
already mostly implemented)
- Interrupts aren't hidden. Some people (among them Tanenbaum)
think interrupts are ugly and should be hidden. Not so IMHO.
Due to practical reasons interrupts must be mainly handled by
machine code, which is a pity, but they are a part of the code
like everything else. Especially device drivers are mostly
interrupt routines - see kernel/hd.c etc.
- There is no distinction between kernel/fs/mm, and they are all
linked into the same heap of code. This has it's good sides as
well as bad. The code isn't as modular as the minix code, but
on the other hand some things are simpler. The different parts
of the kernel are under different sub-directories in the
source tree, but when running everything happens in the same
data/code space.
The guiding line when implementing linux was: get it working fast. I
wanted the kernel simple, yet powerful enough to run most unix software.
The file system I couldn't do much about - it needed to be minix
compatible for practical reasons, and the minix filesystem was simple
enough as it was. The kernel and mm could be simplified, though:
- Just one data structure for tasks. "Real" unices have task
information in several places, I wanted everything in one
place.
- A very simple memory management algorithm, using both the
paging and segmentation capabilities of the i386. Currently
MM is just two files - memory.c and page.s, just a couple of
hundreds of lines of code.
These decisions seem to have worked out well - bugs were easy to spot,
and things work.
3. kernelの簡単な技術概要
linux の kernel は minix の下で作られたもので、minix とバイナリ互換にするのが私の最初のアイデアでした。違いが大きくなったので、それは取りやめになりましたが、システムは今でも minix によく似ています。重要な点をいくつか挙げます:
- 386 チップが提供する可能性を効率的に利用できます。Minix は 8088 で書かれ、後に他のマシンに移植されました。linux は 386 をフルに活用しています (386 を所有していればいいのですが。移植は非常に困難です)。
- メッセージパッシングはなく、これは unix のより伝統的なアプローチです。システムコールは単なる呼び出しです。この方が速いかもしれないし、速くないかもしれませんが、メッセージの問題 (メッセージ・キューなど) のいくつかを省くことができるということです。もちろん、いい機能も失ってしまいますが :-p。
- マルチスレッド FS は、メッセージを使わないことの直接的な結果です。これにより、ファイルシステムは少し (かなり) 複雑になりましたが、より快適になりました。より優れたスケジューラと相まって、minix のようなパフォーマンス低下なしに、複数のプロセスを同時に実行できます。
- 最小限のタスク切り替え。これもメッセージを使わないことの結果です。何をやってもタスクが切り替わる minix とは違い、本当にタスクを切り替えたい時だけタスクが切り替わります。これは、387 サポートをより簡単に実装できることを意味します (実際、これはすでにほとんど実装されています)。
- 割り込みは隠されません。割り込みは醜いから隠すべきだと考える人もいます (Tanenbaum もその一人)。私の考えではそう思いません。実用的な理由から、割り込みは主にマシンコードで処理されなければなりません。特にデバイス・ドライバはほとんど割り込みルーチンです。
- kernel/fs/mm の区別はなく、それらはすべて同じコードのヒープにリンクされています。これには良い面も悪い面もあります。コードは minix のコードほどモジュール化されていませんが、逆にシンプルになっているものもあります。kernel の異なる部分はソースツリーの異なるサブディレクトリの下にありますが、実行時にはすべてが同じデータ/コード空間で実行されます。
linux を実装するときの指針は "速く動くようにする" ということでした。kernel はシンプルで、かつほとんどの unix ソフトウェアが十分に動くような強力なものにしたかったのです。ファイルシステムは、実用的な理由から minix 互換である必要がありました。kernel と mm はもっとシンプルにできるはずです:
- タスクのデータ構造は1つだけです。"本物の" 複数の unix にはタスク情報がいくつかの場所にありますが、私はすべてを1か所にまとめたかったのです。
- i386 のページング機能とセグメンテーション機能の両方を使った、非常にシンプルなメモリー管理アルゴリズム。現在、MM は memory.c と page.s の2つのファイルだけで、数百行のコードしかありません。
これらの決定はうまくいったようで、バグは見つけやすく、物事はうまくいきました。
linux-0.01 の時点で Intel 80386 の 32ビット、プロテクトモードに対応していました。それが "フルに" 活用しているという意味だと思います。前述しましたが、当時の OS は Intel 80386 の機能を十分に発揮できておらず、単なる高速な Intel 80286 として 16ビットモードで使用していました。PC で動作する unix like な OS、且つ Intel 80386 の機能をフルに活用している、というだけでも、当時の Linux の位置付けとしては (本当に動作するのであれば、ですが) 衝撃的だったと思います。それが、今日まで続く Linux の発展の基礎となっています。
"速く動くようにする" という指針が、理想を追い求めるのではなく、現実的・実用的な事を追い求める Linux の基礎となっています。この考え方は、教育目的・在るべき姿を追求した Minix の考え方とは相容れない事でした。
fs は filesystem、mm は memory management の略称です。
4. The "kernel proper"
All the routines handling tasks are in the subdirectory "kernel". These
include things like 'fork' and 'exit' as well as scheduling and minor
system calls like 'getpid' etc. Here are also the handlers for most
exceptions and traps (not page faults, they are in mm), and all
low-level device drivers (get_hd_block, tty_write etc). Currently all
faults lead to a exit with error code 11 (Segmentation fault), and the
system seems to be relatively stable ("crashme" hasn't - yet).
4. kernel 本体
タスクを処理するルーチンはすべて、サブディレクトリ "kernel" にあります。'fork' や 'exit'、スケジューリング、'getpid' などのマイナーなシステムコールなどが含まれます。また、ほとんどの例外やトラップ (ページフォールトではなく、mm にある) のハンドラや、すべての低レベルデバイスドライバ (get_hd_block、tty_write など) もここにあります。現在、すべてのフォールトはエラーコード11 (Segmentation fault) で終了し、システムは比較的安定しているようです ("crashme "はまだ解決できていません)。
最も初期の段階でも bash が動作して比較的安定していた、という事が、今考えても凄い事だと思います。
当時、私も Intel 80386 のプロテクトモードについて雑誌等で読む機会が多く興味を持っていましたが、実用的なレベルで OS を作る、という事は想像できませんでした。その意味でも、初めて Linux に触れた時の衝撃は大きいものでした。
5. Memory management
This is the simplest of all parts, and should need only little changes.
It contains entry-points for some things that the rest of the kernel
needs, but mostly copes on it's own, handling page faults as they
happen. Indeed, the rest of the kernel usually doesn't actively allocate
pages, and just writes into user space, letting mm handle any possible
'page-not-present' errors.
Memory is dealt with in two completely different ways - by paging and
segmentation. First the 386 VM-space (4GB) is divided into a number of
segments (currently 64 segments of 64Mb each), the first of which is the
kernel memory segment, with the complete physical memory identity-mapped
into it. All kernel functions live within this area.
Tasks are then given one segment each, to use as they wish. The paging
mechanism sees to filling the segment with the appropriate pages,
keeping track of any duplicate copies (created at a 'fork'), and making
copies on any write. The rest of the system doesn't need to know about
all this.
5. メモリー管理
これはすべてのパートの中で最もシンプルであり、少しの変更しか必要としないはずです。kernel の残りの部分が必要とするいくつかのエントリーポイントを含んでいますが、ほとんどはそれ自身で対処し、ページフォールトが発生したときに処理します。実際、kernel の残りの部分は通常、積極的にページを割り当てず、ユーザー空間に書き込むだけで、起こりうる 'ページが存在しない' エラーは mm に処理させます。
メモリは、ページングとセグメントの2つのまったく異なる方法で扱われます。まず、386 の VM スペース (4GB) はいくつかのセグメント (現在は 64Mb ずつの 64 セグメント) に分割され、最初のセグメントは kernel メモリーセグメントで、物理メモリー全体がその中にマッピングされます。すべての kernel 関数はこの領域内にあります。
タスクにはそれぞれ1つのセグメントが与えられ、望むように使うことができます。ページング機構は、セグメントを適切にページで満たし、('fork' で作成される) 重複コピーを追跡し、書き込み時にコピーを作成します。システムの残りの部分は、これらすべてを知る必要はありません。
Intel 80386 の論理・物理メモリの最大は 4GB です。メモリー管理でも Intel 80386 の機能を最大限使用し、物理メモリーが少ない場合でも効率的に利用できるようになっていました。
6. The file system
As already mentioned, the linux FS is the same as in minix. This makes
crosscompiling from minix easy, and means you can mount a linux
partition from minix (or the other way around as soon as I implement
mount :-). This is only on the logical level though - the actual
routines are very different.
NOTE! Minix-1.6.16 seems to have a new FS, with minor
modifications to the 1.5.10 I've been using. Linux
won't understand the new system.
The main difference is in the fact that minix has a single-threaded
file-system and linux hasn't. Implementing a single-threaded FS is much
easier as you don't need to worry about other processes allocating
buffer blocks etc while you do something else. It also means that you
lose some of the multiprocessing so important to unix.
There are a number of problems (deadlocks/raceconditions) that the linux
kernel needed to address due to multi-threading. One way to inhibit
race-conditions is to lock everything you need, but as this can lead to
unnecessary blocking I decided never to lock any data structures (unless
actually reading or writing to a physical device). This has the nice
property that dead-locks cannot happen.
Sadly it has the not so nice property that race-conditions can happen
almost everywhere. These are handled by double-checking allocations etc
(see fs/buffer.c and fs/inode.c). Not letting the kernel schedule a
task while it is in supervisor mode (standard unix practise), means that
all kernel/fs/mm actions are atomic (not counting interrupts, and we are
careful when writing those) if you don't call 'sleep', so that is one of
the things we can count on.
6. ファイルシステム
すでに述べたように、linux の FS は minix と同じです。これにより、minix からのクロスコンパイルが簡単になり、minix から linux パーティションをマウントできるようになります (mountを実装すれば、その逆も可能になります :-)。これは論理的なレベルだけで、実際のルーチンは大きく異なります。
注意!Minix-1.6.16 は新しい FS のようで、私が使っていた 1.5.10 を少し変更したようです。Linux は新しいシステムを理解できません。
主な違いは、minix にはシングルスレッド・ファイルシステムがあり、linux にはないということです。シングルスレッド FS の実装は、自分が何かしている間に他のプロセスがバッファブロックなどを割り当てることを心配する必要がないので、ずっと簡単です。それはまた、unix にとって重要なマルチプロセッシングの一部を失うことを意味します。
linux kernel はマルチスレッドに起因する多くの問題 (デッドロック / 競合状態) に対処する必要があります。 競合状態を抑制する1つの方法は、必要なものをすべてロックすることですが、これは不必要なブロッキングにつながる可能性があるため、(実際に物理デバイスへの読み書きをしない限り) データ構造をロックしないことにしました。これには、デッドロックが発生しないという優れた特性があります。
残念なことに、競合状態はほとんどどこでも起こりうるという、あまり良くない特性を持っています。これらはアロケーションなどをダブルチェックすることで対処されています (fs/buffer.c と fs/inode.c を参照)。kernel がスーパーバイザ・モードになっている間、タスクをスケジュールさせない (unixの標準的なやり方) ことは、'sleep' を呼び出さなければ、すべての kernel/fs/mm の動作がアトミックである (割り込みはカウントしない、割り込みを書くときは注意する) ことを意味します。
linux-0.01 の時点では、Linux は独自のファイルシステムは持っていませんでした。Minix のファイルシステムを読み書きできるようにして、クロスコンパイルで開発していたようです。
次バージョン linux-0.10 の INSTALL-0.10 には "mkfs" の記述があるので、Minix のファイルシステムを使用していたのは初期だけだったと思います。
7. Apologies :-)
This isn't yet the "mother of all operating systems", and anyone who
hoped for that will have to wait for the first real release (1.0), and
even then you might not want to change from minix. This is a source
release for those that are interested in seeing what linux looks like,
and it's not really supported yet. Anyone with questions or suggestions
(even bug-reports if you decide to get it working on your system) is
encouraged to mail me.
7. お詫び :-)
これはまだ "すべてのオペレーティングシステムの母 "ではないので、それを期待する人は最初の本当のリリース (1.0) を待たなければならないし、その時でさえ、あなたは minix から変更したくないかもしれません。これは linux がどのようなものか見てみたい人のためのソースリリースであり、まだサポートされていません。質問や提案がある人は (自分のシステムで動作させることに決めたらバグ報告でも)、私にメールしてください。
linux-0.01 は限られた環境でのみ起動できる状態だったと推測します。
現在のように、Hyper-V / Virtualbox / qemu 等の仮想環境が充実している訳でもなく、Internet も未成熟な状況でした。フロッピーディスクが現役で HDD が高価な時代です。
そのような状況でも、PC で unix like な OS を使いたいという需要があり、Minix の速度に不満を持つ方達が試したのだと思います。
8. Getting it working
Most hardware dependancies will have to be compiled into the system, and
there a number of defines in the file "include/linux/config.h" that you
have to change to get a personalized kernel. Also you must uncomment
the right "equ" in the file boot/boot.s, telling the bootup-routine what
kind of device your A-floppy is. After that a simple "make" should make
the file "Image", which you can copy to a floppy (cp Image /dev/PS0 is
what I use with a 1.44Mb floppy). That's it.
Without any programs to run, though, the kernel cannot do anything. You
should find binaries for 'update' and 'bash' at the same place you found
this, which will have to be put into the '/bin' directory on the
specified root-device (specified in config.h). Bash must be found under
the name '/bin/sh', as that's what the kernel currently executes. Happy
hacking.
Linus Torvalds "torvalds@domainname"
(snip)
8. 動作させる方法
ほとんどのハードウェア依存はコンパイルする必要があり、"include/linux/config.h" ファイルには、カスタマイズされた kernel を得るために変更しなければならない定義がたくさんあります。また、boot/boot.s ファイル内の正しい "equ" をアンコメントし、起動ルーチンにAフロッピーがどのようなデバイスであるかを伝えなければなりません。その後、シンプルな "make" で
"Image" ファイルを作成し、フロッピーディスクにコピーします (cp Image /dev/PS0 は、1.44Mb のフロッピーディスクで私が使っているものです)。以上です。
しかし、実行するプログラムがなければ、kernel は何もできません。'update' と 'bash' のバイナリが、これを見つけたのと同じ場所にあるはずで、指定したルートデバイス (config.h で指定) の '/bin' ディレクトリに入れる必要があります。Bash は '/bin/sh' という名前で見つけなければなりません。これはkernelが実行する名前だからです。ハッピー・ハッキング。
Linus Torvalds "torvalds@domainname"
include/linux/config.h と boot/boot.s を見ましたが、Inte 80386 に依存した作りになっています。"速く動くようにする" という当時の指針からすれば、当然の事なのでしょう。上手く動作して、bash の prompt が出た事を想像すると、「世界が変わる」ような感触を当時の人は感じたかもしれません。
それが現在の Linux の成長に繋がっているのでしょう。
結び
現代の PC にはない言葉も多くあり、懐かしく感じながら楽しく和訳できました。誤訳や変な表現があれば、修正しますのでコメントを頂けたらと思います。
linux-0.01 を起動させる試みもありました。こちらについても試してみたいですね。
RELNOTES は 0.12 以降もあります。INSTALL-0.10 も見つけました。時間を見つけて和訳していきたいと考えています。
コメント