Linux kernel 0.95c ~ pre-0.96 付属文書
今回は linux-0.95c から linux-pre-0.96 の間の付属文書を和訳してみました。linux-0.95c、linux-0.95c+、linux-pre-0.96 は明確にバージョンが付与されておらず、順次バグフィックスが適用されています。RELNOTES 等も存在せず、NetNews の情報が主になります。一定の区切り毎に引用元の英文と和訳を載せて、私のコメントを付加します。
前回 の RELNOTE-0.95a の和訳へのリンクです。
linux-0.95a は 1992年3月17日に公開されたのに対して、linux-0.95c は 1992年4月4日に、linux-0.95c+ は 1992年4月8日に、linux-pre-0.96 は 1992年4月21日に、それぞれ公開されました。
当時は git も存在しておらず (git 自体も linus 氏が開発したものです)、主に source code を圧縮した tar.Z 形式か、前のバージョンに対する patch の形式で配布されていました。入手手段も ftp か NetNews に限られていたと推測します。
使用したサービス
RELNOTES-0.95a の時と同様に、以下のサービスを使用して和訳しました。
Shaper : 英文の改行・空白を除去する
DeepL 翻訳 : 高精度な翻訳ツール
Google 翻訳 : Google の翻訳サイト
手順も変更ありません。
- 段落毎に Shaper で空白を除去
- 主に DeepL 翻訳、副に Google 翻訳を使用
- 元の英文と比較して内容を確認
- 最終的に括弧等の記号の全角 -> 半角、用語の統一、レイアウトなどを調整
という手順です。
Linux kernel 0.95c 付属文書 和訳
原文は下記のリンク先にあります。
この文書は 1992年4月4日に linux-0.95a から 0.95c に更新する patch と共に公開されました。ただし、linux の正式なバージョンではなく、'alpha-patch' と記載されています。この文書の最後に、この kernel を linux-0.95c にすると記載されています。
[Date : Sat Apr 04 1992]
Second 0.95a alpha-patch
This is the promised patch to 0.95a, which hopefully corrects some of
the problems encountered. This is /not/ an offical new release: it's
just a set of patches to get the same kernel I am currently running.
Bugfixes:
- extended partitions should finally work correctly (this release also
contains code for the hd-ioctl call, needed for fdisk). Code mostly
by hedrick.
- I corrected my original ptrace-fix (writing a long word to another
process' data space could fail with my original patches)
- 387-emulation bug with the instructions "fcom[p] %st(x)" which
resulted in bad results on non-387 machines with newer versions of
gcc. The emulation is still ugly, but it seems to work.
- the cooked mode deletion/linekill bugs should be fixed.
- various error-returns were wrong: I correted some of them (thanks to
bruce evans who pointed them out). The bad error-values resulted in
incorrect or spurious error-messages from 'rm' etc.
- various minor fixes (including some in the hd-driver: this might help
persons with unexpected-interrupt and/or timeout errors)
[Date : Sat Apr 04 1992]
2番目の 0.95a alpha パッチ
これは 0.95a への修正パッチで、いくつかの問題が修正されることを期待しています。これは正式な新リリースではありません : 私が現在実行しているカーネルと同じものを得るためのパッチのセットです。
バグ修正 :
- 拡張パーティションはようやく正しく動作するようになりました (このリリースには、fdisk に必要な hd-ioctl 呼び出し用のコードも含まれています)。コードの大部分は hedrick によるものです。
- 私のオリジナルの ptrace-fix を修正しました (他のプロセスのデータ領域に長いワードを書き込む際に、私のオリジナルのパッチでは失敗する可能性がありました)。
- "fcom[p] %st(x)" という命令による 387-エミュレーションのバグで、新しいバージョンの gcc を使った 387 以外のマシンでは間違った結果になりました。エミュレーションはまだ不完全ですが、動くようです。
- クックドモードの削除やラインキルのバグが修正されたはずです。
(訳注 : コマンドラインの編集時の Backspace や行削除のバグ解消だと思われる)
- 様々なエラー・リターンが間違っていました: そのうちのいくつかを修正しました (指摘してくれた bruce evans に感謝します)。エラー値が間違っていたために、'rm' などからのエラーメッセージが正しくなかったり偽だったりしたのです。
linux-0.95a は 1992年3月17日に公開されました。linux-0.95c は、その半月後に公開されたものです。
- HDD の拡張パーティションが正しく動作するようになりました。過去のバージョンでも「対応できたかも?」と書かれていましたが、linux-0.95c から使えるようになったようです。
- debug 用に使用される ptrace が修正されました。
- 80387 コプロセッサのエミュレーションのバグ修正
- コマンドライン編集時のバグ解消
- エラーコードの間違いの修正
Additionally this version contains VFS-code from entropy, and a
readdir() system call needed for the VFS. The latter was inspired by
patches sent by Remy Card, who did it with a getdirents sys-call. My
version is slightly simpler, but is probably slower. Things might yet
change.
The installation has also changed slightly: the keyboard type and
math-emulation are specified in the main Makefile. That one also
contains the -fcombine-regs flag needed for 1.40. The other makefiles
should no longer need editing.
I've also incorporated the ps095 kernel patches: to get the actual
user-level stuff you still have to get the ps-distribution. Printer
ports /still/ aren't in there, but this time I positively /promise/ to
put it in next week. Really.
People who have been patching their kernel might have problems getting
this patch to work: it was made against a clean 0.95a kernel. I'll
consider a patched-up kernel version 0.95c - and I'd appreciate if
future patches to me would be sent against this version. I'll still
accept older patches, or course.
Linus
- 様々な細かい修正 (hd ドライバーの修正も含みます : 予期せぬ割り込みやタイムアウトエラーに悩まされている方の助けになるかもしれません)
さらに、このバージョンには entropy の VFS コードと、VFS に必要な readdir() システムコールが含まれています。後者は、getdirents システムコールを使った Remy Card のパッチに触発されたものです。私のバージョンは若干シンプルですが、おそらく遅いでしょう。状況はまだ変わるかもしれません。
インストール方法も少し変わりました : キーボードの種類と math-emulation はメインの Makefile で指定します。このファイルには 1.40 に必要な -fcombine-regs フラグも含まれています。他の Makefile はもう編集する必要はありません。
ps095 カーネルパッチも取り込みました : 実際のユーザーレベルのものを手に入れるには、まだ ps-distribution を手に入れる必要があります。プリンターポートは /まだ/ 入っていませんが、今度こそは来週中に入れることを /約束/ します。本当に。
カーネルにパッチを当てている人は、このパッチを当てるのに問題があるかもしれません : このパッチはクリーンな 0.95a カーネルに対して作られました。私はパッチが適用されたカーネル・バージョンを 0.95c と考え、今後私に送られるパッチはこのバージョンに対して送っていただけるとありがたいです。もちろん、古いパッチでも受け付けます。
Linus
- HDD ドライバの修正も含む様々な細かい修正
linux の VFS とは、仮想ファイルシステム (Virtual File System) の事です。異なるファイルシステム間での互換性と操作の統一を提供する重要な機能です。VFS はアプリケーションが使用する共通の API を介して、実際に稼働している様々なファイルシステムへのアクセスを可能にします。これにより、開発者は特定のファイルシステムの詳細を意識することなく、ファイル操作を行うことができます。
1992年当時は、未だ minix filesystem を使用していました。当時から、将来的に複数のファイルシステムへ対応する事を考えて開発を進めていたのだと推測します。実際に、Ext1 / Ext2 / Ext3 から現在主流の Ext4、XFS や ZFS や Btrfs 等の複数のファイルシステムに柔軟に対応できている理由は VFS にあります。
kernel のコンパイルは、この時点では未だ Makefile の編集が必要な時代でした。(old) config や menuconfig が実現できるようになるのは、もう少し後になります。
プリンタポートは未だ使えなかったのですね。今では USB やネットワーク経由でプリンタを接続するのが主流ですが、当時はパラレルポートで接続するのが一般的でした。
プリンタの種類も、個人用途ではインクリボンを使用したドットインパクト方式や、感熱紙を使用した熱転写方式が使われていて、レーザープリンタやカラープリンタ、インクジェット方式のプリンタ等が一般家庭でも使われるようになったのは最近の事です。
Linux kernel 0.95c+ 付属文書 和訳
原文は下記のリンク先にあります。
この文書は 1992年4月8日に linux-0.95c+ の kernel と共に公開されました。この頃の kernel version の付け方は、だいぶ迷走しています。前回の linux-0.95c の公開から4日後ですので、急いで公開したい気持ちがあったのでしょうか。
[Apr 08 1992]
linux-0.95c known bugs
Well, only one known bug so far, but a couple of problems. I thought I'd
mention them before anyone else does, and we'll call them "features" :^)
The BUG:
when using the readdir() system call, linux incorrectly doesn't let go
of the last buffer used for reading: this results in the buffer being
marked as used (and if you use readdir() heavily, the counter will
eventually wrap around, which might result in incorrect marking as
"not used"). This bug happily isn't easy to find: no current binary
uses the readdir() system call unless you have gotten your hands on
the new VFS gcc-2.1 release. Thanks to Remy Card for finding this
one.
Not too bad a bug though: the fix is very easy. Add a 'brelse(bh);'
in the minix_readdir() function, like this:
if (i) {
put_fs_long(de->inode,&dirent->d_ino);
put_fs_byte(0,i+dirent->d_name);
put_fs_word(i,&dirent->d_reclen);
return i;
should really be :
if (i) {
put_fs_long(de->inode,&dirent->d_ino);
put_fs_byte(0,i+dirent->d_name);
put_fs_word(i,&dirent->d_reclen);
+ brelse (bh);
return i;
That is, just add the brelse before the early return. Sorry for the
lack of real cdiffs - I'm not at home right now, and the above was
taken directly from the bug-report mail.
The problems:
I've had one report that the floppy-driver in versions 0.95x breaks
when accessing drive nr 2. It doesn't on my machine, but I'd
appreciate it if people would test it out, and mail me about any
problems. So far, only one report, but that's one too many.
0.95c doesn't correctly keep track of the 'rss' field in the
task-structure. A fix was already posted (and nothing breaks even if
you don't apply the fix - ps just gives slightly incorrect output)
And the expected troubles with the change of 'a.out.h' - the old gdb
doesn't recognize new executables etc.
As soon as I get my own sources cleaned up, I'll send out a new binary
for the 0.95c+ kernel to the ftp-sites. I've gotten a few mails from
people unable to recompile everything - either because of lack of
diskspace or some other problem. Tomorrow I'll put the new kernel image
on nic.funet.fi and tsx-11 - it's basically the 0.95c kernel + the above
bugfix + the lp-patches (somewhat edited by me).
Linus
[Apr 08 1992]
linux-0.95c の既知のバグ
今のところ、既知のバグは1つだけですが、いくつか問題があります。他の誰よりも先にそれらに触れておこうと思い、"機能" と呼ぶことにします :^)
バグ :
readdir() システムコールを使用する際、linux が誤って最後に使用されたバッファを解放しません : この結果、バッファは使用済みとしてマークされます (readdir() を多用すると、カウンタが最終的に折り返され、"未使用" として不正確にマークされる可能性があります)。このバグは残念ながら見つけるのは簡単ではありません。新しい VFS gcc-2.1 リリースを入手していない限り、現在のバイナリで readdir() システムコールを使用しているものはありません。このバグを見つけてくれた Remy Card に感謝します。
しかし、それほど悪い不具合ではありません : 修正はとても簡単です。次のように、minix_readdir() 関数に 'brelse(bh);' を追加します :
if (i) {
put_fs_long(de->inode,&dirent->d_ino);
put_fs_byte(0,i+dirent->d_name);
put_fs_word(i,&dirent->d_reclen);
return i;
こうあるべきです :
if (i) {
put_fs_long(de->inode,&dirent->d_ino);
put_fs_byte(0,i+dirent->d_name);
put_fs_word(i,&dirent->d_reclen);
+ brelse (bh);
return i;
つまり、単に early return の前に brelse を追加するだけです。今、家にいないもので、上記はバグ報告メールから直接引用したものです。
問題 :
バージョン 0.95x のフロッピードライバーはドライブ番号2にアクセスすると壊れるという報告がありました。私のマシンではそのようなことはありませんが、試してみて問題があればメールしていただけるとありがたいです。今のところ報告は1件だけですが、これは多すぎます。
0.95c ではタスク構造の 'rss' フィールドを正しく追跡していません。すでに修正版が投稿されています (修正版を適用しなくても、psの出力が少しおかしくなるだけで、何も壊れません)。
そして 'a.out.h' の変更にともなって予想されるトラブルは、古い gdb が新しい実行ファイルなどを認識しないことです。
私自身のソースをきれいにしたらすぐに、0.95c+ カーネル用の新しいバイナリを ftp サイトに送ります。ディスクスペースの不足やその他の問題で、すべてを再コンパイルできない人たちから何通かメールを受け取りました。明日、新しいカーネルイメージを nic.funet.fi と tsx-11 に置くつもりですが、これは基本的に 0.95c カーネル + 上記のバグフィックス + lp-パッチ (私が多少編集したもの) です。
Linus
私が linux を使い始めた当初は、linux kernel のコンパイルは swap を使ってギリギリ可能な状態でしたが(1時間以上かかりました)、当時はフロッピーディスクベースで使用している等、linux kernel をコンパイルできない環境の方向けに、linux kernel のバイナリも配布していたようです。
linux-0.01 の頃は 2台の PC の環境でのみ起動する linux kernel でしたが、linux-0.95c+ の時には、様々な環境でも動作する linux kernel のバイナリが配布されていたのですね。
<README-0.95c+>
This is release 0.95c+ of the linux kernel - it contains some
enhancements and bugfixes to the 0.95a kernel, as well as some minor
fixes relative to the last alpha-patch (0.95c). The release is
available as
- binary (bootimage-0.95c+.Z)
- full source (linux-0.95c+.tar.Z)
- patches rel. to 0.95c (diff-0.95c.c+.Z)
- patches rel. to 0.95a (diff-0.95a.c+.Z)
NOTE TO PATCHERS!! Before patching, do this:
- make an empty include-file linux/include/checkpoint.h
- rename linux/kernel/math/math_emulate.c as just emulate.c
That is, from the linux source directory do:
$ > include/checkpoint.h
$ mv kernel/math/math_emulate.c kernel/math/emulate.c
Also note that patching from the 0.95a version is probably not worth it
as it's easier to get the complete new sources.
Although I'm making binaries and the full source available, this isn't
really a major release: there is no new rootdisk, and this is more "my
current kernel" and not really tested (I put in the last changes 5
minutes before packing all this up).
The reason I'm making this available is that with the advent of gcc-2.1
and the VFS-library the old kernel doesn't really do everything the new
libraries want: the readdir system call is needed to get things working.
The default compiler after this release is considered to be gcc-2.0 or
higher (although 1.40 still works - you don't /have/ to change). People
who are unable or unwilling to patch a new kernel shouldn't be unable to
run the new binaries.
This kernel should be totally backwards compatible, so no binaries
should break. I resisted adding the changed mount() system call into
this release: the next major release will have a third parameter for
mount() - the filesystem type name (ie mount /dev/xxx /mnt minix).
Fixes relative to 0.95c:
- corrected two minor bugs in readdir() (thanks to R Card)
- lp-patches are in. I've edited them a bit, and will probably do some
more editing in the future, but they seem to work fine.
- 8-bit ISO latin output to the console (ie part of Johan Myreens
general latin-1 patches: the keyboard patches aren't there)
- other minor bug-fixes (thanks to HH Bergman for noticing the
timer-table bug)
Things I haven't had time to look into yet:
- select still has some problems
- reports that VC-output sometimes isdiscarded (never seen it myself)
- probably other things I've simply forgot...
Linus
<README-0.95c+>
これは Linux カーネルのリリース 0.95c+ で、0.95a カーネルに対するいくつかの機能拡張とバグ修正、および最後のアルファパッチ (0.95c) に対するいくつかのマイナーな修正が含まれています。 このリリースは以下の形式で入手できます。
- binary (bootimage-0.95c+.Z)
- full source (linux-0.95c+.tar.Z)
- patches rel. to 0.95c (diff-0.95c.c+.Z)
- patches rel. to 0.95a (diff-0.95a.c+.Z)
パッチを当てる方へ!! パッチを当てる前に、次のことを行ってください :
- 空のインクルードファイル linux/include/checkpoint.h を作ります。
- linux/kernel/math/math_emulate.c を emulate.c にリネームしてください。
すなわち、以下の内容を linuxのソースディレクトリで実行します :
$ > include/checkpoint.h
$ mv kernel/math/math_emulate.c kernel/math/emulate.c
また、0.95a バージョンからのパッチを当てることは価値がなく、完全な新しいソースを入手する方が簡単であることに注意してください。
バイナリと完全なソースを公開していますが、これは本当のメジャーリリースではありません : 新しいルートディスクはありませんし、これは「私の現在のカーネル」であって、実際にはテストされていません (このすべてをまとめる5分前に最後の変更を加えました)。
このリリースを公開する理由は、gcc-2.1 と VFS-library の登場により、古いカーネルでは新しいライブラリが望むことの全てができないからです : 動作させるには readdir システムコールが必要です。このリリース以降のデフォルトのコンパイラは gcc-2.0 以上と考えられます (1.40 でも動作しますので、変更する必要はありません)。 新しいカーネルにパッチを当てることができない、あるいは当てる気がない人が、新しいバイナリを実行できないことはないはずです。
このカーネルは完全に後方互換性があるはずなので、バイナリが動作しなくなることはないはずです。 私は、このリリースに mount() システムコールの変更を追加することに抵抗がありました : 次のメジャーリリースでは、mount() の3番目のパラメータにファイルシステムのタイプ名を追加する予定です (例 : mount /dev/xxx /mnt minix)。
0.95c からの修正 :
- readdir() の2つのマイナーなバグを修正 (R Card に感謝)。
- lp-patch が入りました。 少し編集しましたし、これからも編集すると思いますが、問題なく機能しているようです。
- コンソールへの 8-bit ISO latin 出力 (Johan Myreens の一般的な latin-1 パッチの一部 : キーボード・パッチはありません)
- その他の細かなバグ修正 (timer-table のバグに気づいてくれた HH Bergman に感謝します)
まだ時間がなくて調べていないことがあります :
- select はまだいくつかの問題を抱えています。
- VC 出力がときどき無効になるという報告 (私自身は見たことがありません)
- 他にも忘れていたことがたくさんあるかもしれない...
Linus
始めの方に書かれていますが、gcc (GNU C Compiler) Ver.2.1 と VFS ライブラリへの対応の為に、短期間ですが新しい version の linux-0.95c+ が公開されました。
- ついにプリンタポートが使えるようになりました 🙂
- 西ヨーロッパ系の文字 (8-bit ISO latin) がコンソールに表示できるようになりました。
この当時は、まだコンソールに日本語を表示させる事はできませんでした。linux や FreeBSD のコンソールに日本語を表示する為のソフトウェアである kon の初版が公開されたのは 1992年10月13日 (Ver.0.90) でした。
(kon の source code は Ubuntu の source tree から入手しましたが、日本語の文章の漢字コードが EUC でした…時代を感じます)
Frame Buffer を使用した日本語コンソール jfbterm の公開は 1999年で、ChangeLog に日付が付加されている最も古い記録は 1999年8月25日でした。(SourceForge でホストされていたようですが、現在は接続できませんでした。github に source 一式が残っていました)
X を動作させるには厳しい環境では、kon も jfbterm も、高解像度で使用できましたので便利に使っていました。
Linux kernel pre-0.96 付属文書 和訳
原文は下記のリンク先にあります。
この文書は 1992年4月21日に linux-pre-0.96 の kernel と共に公開されました。linux-0.95c+ の公開から13日後です。
[Apr 21 1992]
pre-0.96 (was Re: gdb still isn't working)
In article <1992Apr20.085143.23027@klaava.Helsinki.FI>
torvalds@domainname (Linus Benedict Torvalds) writes:
> [ trace not working in gdb ]
>
>My personal version handles this correctly (as well as doing some other
>things in a cleaner manner), but I'm not quite ready for a new release
>yet. I could make YAAR (yet another alpha-release) or just mail
>interested parties the fixes needed - mail me if you're interested, and
>depending on the number of messages I get I'll make it a new release.
Ok, the response seems to make a new pre-release appropriate: I have
uploaded "pre-0.96.tar.Z" to tsx-11 and nic.
Here is what the pre-release contains:
- truncate/ftruncate/fchmod/fchown system calls
note that there aren't any library functions for these, so they
aren't very useful yet...
[f]truncate needed a change in the logic of the internal
truncate VFS call - anybody that has any nonstandard filesystem
probably needs to look it up.
- io-bitmap syscalls giving root-processes access to selected io ports
from user space. There is a "ioperm()" system call that lets the
process select which ports it wants to enable/disable (all ports
disabled as default) as well as a (standard sysv?) ioctl interface
that X uses.
again, no library stubs, but it allows things like reading and
setting the cmos clock without using /dev/port, as well as
control over the VGA registers...
- mmap for /dev/mem
more things needed for X...
- the signal-handling fixes needed for gdb
These aren't yet complete: serial lines still send signals under
interrupts that can result in problems (ie ptrace doesn't
correctly get them), but that's pretty unlikely (and will be
fixed in the final 0.96). Breakpoints should work etc..
- multiple shared libraries
Up to 6 simultaneous shared libraries/process: the patches were
originally by pmacdona, but they were heavily changed by me, and
I think they work in a more natural manner now. One user-level
change is that the libraries are now checked for read and
execute permissions for safety-reasons.
- cleaned up special files.
read/write/ioctl no longer has special-case code: it is all
handled with tables to functions. This will mean that the SCSI
patches won't patch in quite cleanly into 0.96: you'll need to
add the code that sets up the functions.
Again: device drivers and vfs-filesystem hackers need to look
into the changes, although they are pretty logical (earlier
versions just didn't implement all the vfs-routines)
Note that the vfs-code for select is still not used: select is
hardcoded for the devices it supports right now.
[Apr 21 1992]
pre-0.96 (was Re: gdb still isn't working)
In article <1992Apr20.085143.23027@klaava.Helsinki.FI>
torvalds@domainname (Linus Benedict Torvalds) writes:
> [ trace not working in gdb ]
>
> 私の個人的なバージョンはこれを正しく処理しています (よりクリーンな
> 方法で他のいくつかのこともやっています) が、私はまだ新しいリリースの
> 準備ができていません。YAAR (また別のアルファリリース) を作ることも
> できますし、興味のある人たちに必要な修正をメールで送ることもできますが、
> メッセージの数によっては新しいリリースにするつもりです。
よし、この反応なら新しいプレリリースが妥当な感じですね : "pre-0.96.tar.Z" を tsx-11 と nic にアップロードしました。
プレリリースの内容は以下の通りです :
- truncate/ftruncate/fchmod/fchown システムコール
ライブラリ関数がないので、まだあまり役に立たないことに注意してください...。
[f]truncate は、内部の truncate VFS コールのロジックを変更する必要があり、非標準のファイルシステムを使っている人は、おそらくそれを調べる必要があるでしょう。
- io-bitmap システムコールは、ユーザー空間から選択された io ポートへのアクセスをルートプロセスに与えます。プロセスが有効/無効にしたいポートを選択できる "ioperm()" システムコールがあり (デフォルトではすべてのポートが無効)、X が使用する (標準的な sysv?) ioctl インターフェースもあります。
また、ライブラリーのスタブはありませんが、/dev/port を使わずに cmos クロックを読み書きしたり、VGA レジスタをコントロールしたりすることができます。
- mmap for /dev/mem
X に必要なものはまだたくさんあります...
- gdb に必要なシグナル処理の修正
これらはまだ完全ではありません : シリアル・ラインはまだ割り込みの下でシグナルを送信しており、その結果問題が発生する可能性があります (つまり ptrace がそれらを正しく取得できない) が、それはかなり可能性が低いです (そして最終的な 0.96 では修正されるでしょう)。ブレークポイントは動作するはずです。
- 複数の共有ライブラリ
最大6つの同時共有ライブラリ/プロセス : このパッチはもともと pmacdona によるものでしたが、私により大きく変更され、より自然な形で動作するようになったと思います。ユーザーレベルの変更点としては、安全上の理由から、ライブラリの読み取りと実行のパーミッションがチェックされるようになりました。
- 特別なファイルのクリーンアップ。
read/write/ioctl はもはや特殊なケースのコードを持っていません : それはすべて関数へのテーブルで処理されます。これは、SCSI パッチが 0.96 にきれいにパッチされないことを意味します : 関数をセットアップするコードを追加する必要があります。
繰り返しになりますが、デバイスドライバや vfs-filesystem ハッカーはこの変更点を調べる必要がありますが、かなり論理的なものです (以前のバージョンは vfs-routine をすべて実装していなかっただけです)。
なお、select 用の vfs-code はまだ使用されていません : select は現在サポートしているデバイス用にハードコードされています。
linux-pre-0.96 という珍しいリリース名称で公開されました。
X Window system と gdb への言及が多い事から、この時点での優先事項は
- X Window system を動作させる事
- gdb で debug 可能な状態にする事
だったと推測されます。
また、共有ライブラリが (最大6つとはいえ) 使用できるようになりました。今の linux では考えられませんが、このバージョン以前では個々のバイナリにライブラリが全て結合されていました。共有ライブラリを使用できるようになったことで実行ファイルのサイズが小さくなり、ディスク容量を有効利用できるようになったと思います。
SCSI 機器は未だ使えていないようです。
SCSI は、Small Computer System Interfaceの略で、コンピュータとストレージ装置やその他の周辺機器を接続するための物理的および電気的なインターフェースの一種です。1979年に考案され、1986年に ANSI によって標準化されました。SCSI は、特にサーバーなどの高性能なコンピュータシステムで広く利用されていた規格で、その信頼性と速度により業界標準となりました。しかし、USB や SATA などの新しい技術の登場により、現在ではあまり一般的ではなくなっています。それでも、シリアル通信方式を採用した SAS (Serial Attached SCSI) や、IPネットワークを利用する iSCSI など、現在でも様々な規格が利用されています。
- ptrace() has a new interface
as gdb for versions < 0.95c don't work on the new version, and
gdb won't work very well at all on 0.95c[+], there was no reason
not to break ptrace. Thus 0.96 has a new calling convention for
ptrace, and the old ptrace library function no longer works.
I'm including the new ptrace library function at the end of this
post.
- mount() takes 4 arguments, and checks that only the super-user can
mount/umount things.
Happily this shouldn't break any old binaries.
- some general cleanups
I've made the pre-release available only as pure source code: no diffs,
no binary. The reason is that most people that needed this release want
it for the gdb-fixes: and they should have no problem recompiling the
kernel. Others just have to wait for the real 0.96.
Changes that are NOT in this pre-release, but which I hope to have in
the real 0.96:
- more include-file cleanups - I'm still working on these
- the wd8003 driver and hopefully some other parts of biro's
config.
- select() using the vfs-tables.
And possibly bugfixes that people find in this pre-release...
Linus
========== library ptrace.c (wants gcc=2.1) ==========
#define __LIBRARY__
#include <time.h>
#include <unistd.h>
int ptrace(int request, int pid, int addr, int data)
{
long ret;
long res;
if (request > 0 && request < 4)
(long *)data = &ret;
__asm__ volatile ("int $0x80"
:"=a" (res)
:"0" (__NR_ptrace),"b" (request), "c" (pid),
"d" (addr), "S" (data)
: "si","bx","cx","dx");
if (res >= 0) {
if (request > 0 && request < 4) {
errno = 0;
return (ret);
}
return (int) res;
}
errno = -res;
return -1;
}
- ptrace() に新しいインターフェイスが追加
0.95c 未満のバージョンでは gdb が動作せず、加えて 0.95c[+] では gdb がほとんど動作しないため、ptrace を大きく変更しない理由はありませんでした。そのため、0.96 では ptrace の呼び出し規約が新しくなり、古い ptrace ライブラリ関数は使えなくなりました。この記事の最後に新しい ptrace ライブラリ関数を載せておきます。
- mount() は4つの引数を取り、スーパーユーザーのみがマウント/アンマウントできることをチェックします。
幸いなことに、これで古いバイナリが壊れることはないはずです。
- いくつかの一般的なクリーンアップ
私はプレリリースを純粋なソースコードとしてのみ利用できるようにしました : 差分もバイナリもありません。というのも、このリリースを必要としているほとんどの人は、gdb-fix のためにこのリリースを必要としており、カーネルの再コンパイルに問題はないはずだからです。他の人は本当の 0.96 を待つしかありません。
このプレリリースには含まれていませんが、本当の 0.96 には加えたいと思っている変更点です :
- インクルードファイルのクリーンアップ - まだ作業中です。
- wd8003 ドライバと、できれば biro の config の他の部分も。
- vfs-tables を使った select()。
そしておそらく、このプレリリースで人々が見つけたバグ修正も...。
Linus
========== library ptrace.c (wants gcc=2.1) ==========
#define __LIBRARY__
#include <time.h>
#include <unistd.h>
int ptrace(int request, int pid, int addr, int data)
{
long ret;
long res;
if (request > 0 && request < 4)
(long *)data = &ret;
__asm__ volatile ("int $0x80"
:"=a" (res)
:"0" (__NR_ptrace),"b" (request), "c" (pid),
"d" (addr), "S" (data)
: "si","bx","cx","dx");
if (res >= 0) {
if (request > 0 && request < 4) {
errno = 0;
return (ret);
}
return (int) res;
}
errno = -res;
return -1;
}
- ptrace() 関数と mount () 関数が変更されました。
- wd8003 は 10-BASE ネットワークカード用のチップの名称です。biro 氏は初期の linux のネットワークドライバの開発に貢献された方です。(参考)
結び
今回は、linux-0.95c、linux-0.95c+、linux-pre-0.96 の公開時の付属文書について和訳しました。
様々な環境が存在していた IBM/PC AT 互換機で、多くの人から NetNews やメールで多くの意見を受けながら、github のようなシステムが無い中での開発は、今では考えられない程に大変だったと思います。そのような状況でも、優先順位を自身で決めながら一歩ずつ開発を進め、より広く、安定して使われるようになる直前の時期だったと思います。
この半年後の1992年10月にはコンソールを日本語化する kon が公開されていますので、徐々に日本でも使われ始めた時期なのかもしれません。
次回は、1992年5月22日から6月18日にかけて公開された linux-0.96 及び patch-level 1 ~ 4 の付属文書について和訳する予定です。
自宅のメイン PC には、Sabaj A3 D級アンプとブックシェルフスピーカー Micca COVO-S を使用しています。Micca COVO-S は PC のモニタ下に置く事ができる位の小型スピーカーですが、PC で動画や映画を見るには十分良い音を出してくれます。PC の音楽環境を改善するのにお勧めです。
コメント