お勧めの書・バックナンバー Vol.1 by にしだ わたる
Last updated 2002-08-25

Advanced Programming in the UNIX Environment by W. Richard Stevens、Addison Wesley (初版1993) 2002/02/19

本書は故 Richard Stevens の代表作のひとつであり(氏の著作集の中では APUE と略称)、UNIX プログラミングに関するリファレンス書として世界的に有名です。「login: UNIX C システムプログラミング入門」は、タイトルの通りあくまでも入門書に過ぎません。全体像を俯瞰するには良いのですが、各論が貧弱なため深い知識は得られません。

ここで数ある UNIX 入門書には何が欠落しているのか、具体的に考えてみましょう。「デーモン」は UNIX に関わるものであれば当然知っているべき技術用語のひとつです。しかし、「その正確な定義を述べよ」との問いに答えられる人は、意外と少ないのではないでしょうか?「分かっているようで、実は分かっていない」、今のコンピューター教育が孕んでいる問題の本質はここにあると私は考えています。

しかし、さすがは Stevens 氏。本書はデーモンにまる1章を割いて、詳細な解説を行っています。この章を読めば、デーモンの技術背景が理解でき、結果として正しいコーディング方法が身に付くでしょう。これだけの解説は他書ではお目にかかれないと思います。

デーモン以外についても、本書の情報の正確さ、解釈の奥深さは群を抜いています。よって、UNIX プログラミングを学ぶのであれば本書以外を購入する必要はありません(ネットワークに関しては同氏の別作を)。英文の質も最高クラスですから、是非とも原書を読みましょう。おそらく多くの方が「英文ってこんなに簡単だったの?」と驚かれるのではないかと思います。日本語もそうですが、真に優れた著作は中学生でも読める明快な文章で記述されているのです。ピアソンエデュケーションから日本語版が「詳解 UNIX プログラミング」として出版されていますが、残念ながら翻訳は不完全です。同じお金を払うのであれば、原書を買いましょう。

ただし本書を読むにあたり、ふたつほど注意点を。

・本書の内容は極めて高度、かつ詳細です(百科辞典的)。情報の「重い軽い」を判断できるだけの実力を持ったプログラマーには最高のテキストですが、初学者にはお勧めできません。初めて UNIX に触れるのであれば、まずは下記の「login: UNIX C システムプログラミング入門」を参照しましょう。

・本書と言えども完全ではありません。私自身、昔この本を読みましたが、途中で消化不良を起こし何度も挫折した苦い経験があります。というのは下記で述べた通り、UNIX を学習するにはカーネルソースツリーも含めた探索が必要不可欠だからです。本書では具体的なカーネルソースまでは言及しておらず、せいぜいシェーマでカーネル内データ構造を示しているだけです。このため、どうしても「ここ一番」という大事なところで読者の疑問に答えることができません。Linux もしくは *BSD ソースツリーのダンプリストを横に置いて参照しながら読破するのが、理想的なスタイルと言えるでしょう。

本書は輪読会の教材としても、「一押し」です!

login:UNIX C システムプログラミング入門 by 河野 清尊、オーム社(初版1992) 2002/01/30

現在、UNIX プログラミングの教科書を探している人達は日本にも多いでしょうが、残念ながら決定版と言える本を私は知りません。UNIX ネットワークプログラミングの神様、Richard Stevens 氏も "Advanced Programming in the UNIX Environment" というテキストを書いていますが、これすら私には今ひとつ・・。UNIX プログラミング教科書はおしなべてシステムコールを順を追いながら解説するスタイルをとっていますが、私は何冊読んでも「fork/exec」の意義が全く理解できませんでした。「なんでこんなもって回ったシステムコールがふたつもいるんじゃ?」という訳です。結局、カーネルソースを探索し、仮想メモリ機構まで理解が及んだ時、初めて「なんだ、そういう事だったのね!」と納得がいったことを覚えています。

つまり巷に溢れているCプログラミング教科書と同じく、表層的なプログラミングインターフェースを述べるばかりで、システムコールの技術背景まで言及している書籍がないのですね。残念ですが、これが現実です。

さて、本書はサブタイトルに「Cシステムプログラミング」を冠した硬派本です。大学などで講義の教科書として採用されているケースもあるようですが、確かにその構成には独特の工夫が見られ、内容も大変良く練られています。この本を教科書に採用した先生方は、かなりのセンスの持ち主と言えるでしょう。

私が本書を最も高く評価しているのは、その「独創的で分かりやすい図」です。これまで似たような図は、多くの教科書に掲載されていますが、本書の作図には独自の工夫が見られ、本文やソースリストの理解に大きく役立っています。良質の図を眺めるだけでも価値がありますし、なにしろ値段が2000円というアカデミック・プライスです!

解説やソースリストは他書と同程度の内容ですが、文章に味があり教育的な意味合いも織り込まれています。290ページと比較的コンパクトですし、日本語での入門書としては BEST BUY の作品でしょう。

Linux Device Drivers 2nd Ed. by A.Rubini andJ.Corbet、O'REILLY (2nd Ed. 2001) 2002/01/30

本書はこのページで紹介するまでもなく、世界的に有名な Linux デバイスドライバーに関するリファレンス書です。1998年に初版が出版されましたが、Linux カーネルの成長に追随できなかったため、昨年夏2.4系列に対応した第二版が登場しました。オライリー・ジャパンから日本語版も出版されていますが、これは初版の翻訳です。第二版は全体的にかなりブラッシュアップされており、初版とは別物と考えた方が良いでしょう。さて、このコーナーを始めた際にバッシングはやめておこうと誓ったのですが、早速禁を犯してしまうことをお許しください。

実を言うと、私も大枚4800円をはたいて日本語版を購入した一人です。ざっと目は通したのですが、「この文章ではよくわからん」というのが 正直な感想でした。訳者の履歴を見ると二人とも修士・博士課程経験者ということでしたし、天下のオライリー社ですから、まさか翻訳に問題があるとも思えず「きっと英文に問題があるのだろう」とあきらめていました。ところが、先日第二版のオンライン版をダウンロードして、原文を読んだところ・・・

原作は数あるコンピューター書籍の中でも、トップクラスの良質な英語(comfortable English)で記述されていました。文章のリズムが軽快なため、流れるように読み進めることができます。また、なにげなく書かれている説明も意味しているところが深く、感心させられました。ひとつひとつのテーマが、実に丹念な調査に基づいて解説されており、頭が下がります。ふと、このスタイルは私がただ一人敬愛するプログラミング作家、故 Richard Stevens 氏に似ていると感じたほどです。もっと早くに原著を読むべきだったと、反省することしきり。英語版は間違いなく良書、自信を持ってお勧め致します。

しかし、残念なことに日本語版はお勧めできません。日本語版には途中で首をかしげてしまうような表現が、多々見受けられます。自分の読解力に問題があるのかと、前に戻り先に進みしながら重ね読みしても、まだ内容が理解できないのです。カーネル2.4が全盛の今にあっては内容が古すぎることと相まって、読者にはかなりの混乱が起きていることでしょう。初版の英文が手元にないので厳密な比較はできないのですが、第二版の英文を読む限り内容に不明瞭な点はほとんどありません。おそらく翻訳による影響と思われます。

これだけの名著を uncomfortable Japanese にしてしまった、訳者と出版社の責任は甚大だと私は考えます。二度と同じ悲劇が起こらないよう、早急に「厳正な Reviewing system」を確立すべきでしょう。また日本語版の書評は雑誌でもかなり紹介されたはずですが、私が知る限り「翻訳に問題がある」という指摘は見たことがありません。今後雑誌出版社には、書評を依頼する際に「原著と和訳本の2冊を渡す」ぐらいの姿勢が、求められると思います。

本書に対して文句を付ける点はさしてありませんが、モジュールをデバイスドライバー実装の手段としてのみ捉えるのは少々寂しい気がします(本書に限りませんが)。モジュールはただ単にデバイスドライバーの動的インストールを目的として開発されたものではありません。ファイルシステムや実行ファイルフォーマットなど、あらゆるカーネルの機能拡張が含まれています。さらに、私が考えるモジュール最大のメリットは、その教育的価値にあります。UNIX を理解するためには、ユーザープロセス空間とカーネル固有空間のふたつを明確に区別することが重要ですが、いくらユーザーモード・プログラミングを経験したところで、カーネルの深部には到達できません。このバリアをモジュールはいとも容易に解決してくれます。

ということで、先日「モジュールプログラミングを通した Linux カーネルの理解」を念頭におきながら原稿を書いてみました。この記事はGCCプログラミング工房 第5回(UNIX USER 4月号)で掲載される予定です。

追記(2002/8/25) その後、第二版の日本語版が出版されました。購入はしたのですが、まだ中身はチェックしておりません。訳者が交代していましたので、日本語訳が適切に修正されていると良いのですが。

はじめて読む486 by 蒲地輝尚、アスキー出版 (初版1994) 2002/01/16

今回は珍しく和書を紹介しましょう。”はじめて読む486”は私がこれまで購入した和文技術書籍の中で、世界に通用すると思われる数少ない作品のひとつです。初版は今を遡ること8年前、1994年ですが、486プロテクトモード・プログラミングの実例が豊富に掲載され、世界的にも珍しい486解説書に仕上がっています。具体的には下に述べるようなテーマに沿い、ソースコードが丁寧に解説されています(開発環境がDOSベースという問題点はありますが、コードは十分魅力的です)。その内容は8年立った現在でも色褪せることがなく、PC−UNIXが社会に広まった現在、本書はさらにその輝きを増していると言えるでしょう。私はこれまでプロテクトモードプログラミングの具体例が掲載された書籍を、海外も含め随分探してきましたが、本書に匹敵する作品には出会っていません。これだけの名作が未だに英訳されず、極東の地で冬眠状態にあるというのは、かえすがえすも残念。PC-UNIX のからくりをCPUレベルから理解したいというのであれば、本書は MUST BUY の一品です。まだ手にしていなければ、絶版にならないうちに本屋へダッシュ!

  1. プロテクトモードへの移行
  2. A20ラインの制御
  3. セグメントディスクリプタの設定
  4. 32ビット版エラトステネスのふるい
  5. コールゲート呼び出しによる動作レベル移行
  6. 割り込みディスクリプタの設定
  7. ハードウェア割り込みモニタリング
  8. 一般保護例外の確認
  9. タスク切り替え
  10. ページングによるDOS上での仮想記憶の実現
  11. 仮想8086モード
  12. I/Oモニター

なお、本書では「動くコード」の提示に重点が置かれているためか、各論の説明が少々もの足りません。各論については次のバイブルを参照しましょう。

80386プログラミング by Crawford JH and Gelsinger PP (翻訳 岩谷宏)、工学社(初版1988) 2002/01/16

本書は SYBEX 社が 1987 年に出版した "PROGRAMMING THE 80386" の邦訳です。1st author は 80386 の主席設計者、2nd author は 80386 の論理設計者という最高の執筆陣であり、その内容は他のx86関連書籍の追随を許しません。私が最も感銘を受けたのは、ひとつひとつの命令についてC言語風の「ソースリスト」で386の動作が正確無比に記述されている点です。この他にもセグメンテーション、ページング、割り込み処理、タスク切り替えなど、文章だけでは理解しづらい386CPUのコア部分がソースリストで明快に示されています。従来のx86解説本を読んでも今ひとつスッキリ理解できなかった人達には、福音となることでしょう。

なお、岩谷氏の翻訳はさすがです。最高度に難しい内容にもかかわらず、きちんとした日本語になっています。なぜ日本ではこのような良心的な翻訳が評価されず、えせ翻訳書ばかりが跋扈し続けるのでしょうか?

本書は”はじめて読む486”と併せ、プロテクトモード・プログラマー必読の書ですが、極めて残念なことに原書・邦訳書ともに絶版となってしまいました。ここで一句、「悪書は良書を駆逐する」。

Linux Firewalls (1st Ed.) by Robert L. Ziegler (1st ed. 1999) 2001/12/15

私が最近購入した原著の中で、最も手あかがついているのがこの書籍。第一版では Linux ipchains を用いて、パケットフィルタリング式ファイアーウォールの構築方法を紹介しています。昨年第二版が出たようですが、最新の Linux 2.4 iptables にも対応したようです(1/30 注文しましたので、近日中に紹介できるでしょう)。

第一章で TCP/IP 通信の基本事項をわかりやすく紹介、第二章でパケットフィルタリングとはなにかを説明した後に、第三章でブロードキャストパケット、ICMP、UDP、TCP、SMTP/HTTP などについて具体的なルール設定例を紹介しています。 雑誌や書籍で紹介されているファイアーウォール設定ルールは1ページにも満たないものがほとんどですが、Linux Firewalls を読めばこれらがいかにいい加減なルールであるか、わかるでしょう。著者が運営しているサイトは必見です。

Linux Firewalls は、私が自信をもってお勧めできる数少ない原著のひとつです。内容は良く練られており、掲載内容も十二分に吟味されています。この手の書籍は、しばしば本質とは関係のないところにページを割いてしまうものですが、本書籍には「冗長、無駄」と思われる点がほとんど見あたりません。

また英文は明快で、曖昧な文章がほとんど目につきません。これは私たち日本人にとって、大変ありがたいことです。以前、著者に「あなたの文章は実に明快でわかりやすい」と感想メールを送ったことがあります。この時何度かやりとりをしたのですが、彼が言うには「実は私自身はあの文章はドライすぎて好きじゃない。でも、一人のレビューアー(査読者)が厳しく文体を指導してきたものだから、あのようなスタイルになったんだ。」とのこと。なるほど、米国で書籍を発刊する際には、学術論文並み、いやそれ以上の厳しい査読が待ち受けているようです。この本を出版している New Riders という会社は、Linux Firewalls の他にも魅力的なタイトルの書籍を揃えています。装丁スタイルもセンスが良いですし、厳しい査読者を課するあたり、今後大いに注目すべき出版社と言えるでしょう。日本の出版社も見習うべし。

なお、残念ながら第一版ではそれまでテンポの良かった第3章までとは打って変わって、第4章からは同じ内容が繰り返され眠たい内容になっています。これは後半執筆中に彼を悲しい事件が襲ったことが原因のようですが、第二版では改善されていることを望みましょう。

本書は、サーバーの設定は出来るようになったが、次はセキュリティーについて勉強してみたいという人達に、最適の教科書です。なおつい最近、ピアソンエデュケーションズから和訳本が出ました。どちらの版に対応しているのでしょう?訳者は大丈夫でしょうか?いずれにせよ、英語力を磨きたいなら迷わず原書を購入しましょう。自分一人で読み進む自信がなければ、仲間を集めて週1回輪読会を開くのも良いでしょう。継続は力なり。

Your SysOp is Wataru Nishida , M.D., Ph.D.