Think GNU 第 10 回

□開発中の GNU ソフトウェア□

CJ No.2/'90.12.18 発売号掲載

0. はじめに

 GNU カーネルのベースとして長らく待たれている Mach カーネルのマイクロ版について報告する。また GNU ソフトウェアの中で作業中のバージョンに入手可能なものがいくつかあるのでそれらを示す。

1. テレビあれこれ

 テレビが好きで、米国に出張中でもアパートで (映りが悪い室内アンテナで) 夜よく見ていた。アパートには共同のアンテナもないのでその口が部屋まで引かれていない。というのは、みんなケーブル・テレビを利用しているからだ。当時、1ヵ月 10 ドルくらいだった。ケーブル・テレビだと普通の全国ネットのテレビをはじめ、映画専用のチャンネルもある。加入と撤去の電話を入れるのも億劫だったし、ビデオで録画する程度の高画質も求めていなかったので、そのまま見ていた。

 一番好きだったのは「MacGyver」で「スパイ大作戦」に似ている。主人公のマックガイバーが普通は不可能だと思われる事件に遭遇して、あるいは解決を財団より請け負って活躍するものである。行動力や体力が優れているだけでなく、頭脳的にも人並はずれて科学の応用の面白さを見せつけてくれる。毎週月曜の夜 8 時からだった。USENIX などに行ってもこの番組は欠かさず見ていた。日本でもたまに放映している。日本のタイトルは「冒険野郎マックガイバー」(ちょっとかっこ悪いタイトルに思えるが) で、2 時間の枠の中で 1 時間ものを 2 つ見る番組構成のときもあったが、割愛されている箇所がわかってしまいいつも残念な思いをする。◆1

 「スパイ大作戦」(「Mission Impossible」) の新しいバージョンも面白かった (5〜6 回しか放映されなかった)。昔は、仕事の内容をカセット・テープ・レコーダで知らせていたが、最近のものは映像用 CD-ROM を使っている。聞き終われば媒体が煙と化するところは、昔と同じであった。ほかにも、古いが「エア・ウルフ」(「トップ・ガン」(日本でも以前放映された) に似た番組) も良い。「スター・トレック」は一年を通して毎日やっていた。ジョン・ピカーがキャプテンになっているのは新しいバージョン (「スター・トレック--ネクスト・ジェネレーション--」) で週 1 回、キャプテン、ジェームス・クラークやスポック博士が登場するおなじみの古いバージョン (「スター・トレック--オリジナル・バージョン--」) は 2〜3ヵ月のサイクルで毎日夕方から始まっていた。日本でも古い方のバージョンは見ることができた。

 「MacGyver」にしろ、新旧の「スター・トレック」や「スパイ大作戦」にしろ連続ものを見ていると、以前見たものをもう 1 度再放送することがある。新聞には再放送とは書かれていないので、これは視聴者に対する裏切りかと思ったのだが日本に戻ってきて米国人にこの怒りを伝えたところ、米国では普通のことだそうだ。その人が日本に来てテレビを見ていて気に入った番組が始まり、面白いが 1 回目は流して見て、また同じ番組があるだろうと毎週期待していたが全然再放送されなかった、という逆に驚いたという話を聞いた。そういえば米国では再放送が混じらない番組のみ強調していたこともあった。「全て新しいエピソードです」というふうに。

 「コスビー・ショウ」や深夜の痛快なトーク番組もなかなかの手応えで笑えた。日本で見た「刑事コロンボ」は好きなので、米国版も期待していた。FSF の事務一般を担当している Stacey にコロンボが面白い、と言っても最初全く通じなかった。実際のコロンボ (米国のタイトルは「Lieutenant Colombo」) は微妙な英語がわからなかった。コロンボは日本語に限ると思った次第である。

 見に行ったある映画の中で「MacGyver」に触れている部分があって驚いた。それは「ショート・サーキット II」の中で、倉庫の中の冷凍庫に主人公と別の 1 人が閉じ込められる場面がある。中からは扉は開けられず、大騒ぎしてる時に一言「MacGyver ならこんな所はすぐに抜け出せるのに」というセリフに大うけして、米国 TV 事情ならではの会話だ、と悦にいったものだった。しかし、これはボストンで見たのだがほかの観客にはうけなかったので、みんな「MacGyver」を見ていないのだろうか、とも思った。

2. 開発中の GNU ソフトウェア

 現在作業中の GNU ソフトウェアはたくさんあるが、作業中の中間バージョンにアクセスできるツールとして次のものがある (実際にはもっとあるだろうが)。興味とボランティア精神にあふれる人は作成者に問い合わせてみることをお奨めする。◆2

2-1.GNU Emacs 18.56 と憂鬱

 9 月の末にテストしてね、というメールが Richard(rms) から届いた。これには 18.55.94 というバージョンが付いていた。anonymous ftp サイトに入って調べたところ tar と split(ファイル分割プログラム) したイメージがあって、compress(Unix の圧縮プログラム) されていなかった。早速テストしてみるよ、でも compress してあればベターでしたね、という返事を rms にしたところ、compress は特許になったので使わないようにしてるんだ、と言っていた。結局のところ、このアルゴリズムに代わるものを使っている圧縮プログラムが見つからなかったようである (今月のニュース「ソフトウェアの特許」参照)。

 最近、圧縮アルゴリズム (Lempel-Ziv-Welch) が特許になってしまったのでそれを採用している Unix の compress が使えなくなるのでは、という話題がニュース・グループで盛り上がった。結局、継続して使えるという意見があったので、大丈夫かと思っていたが、rms の理解だと使えないことになっている。これは大変なことで、anonymous ftp をする場合でも 4M バイトで済むか、あるいは 11M バイトになるかという違いがある。ftp は一定時間以上接続していると接続を切るような仕組みになっているものもあるため大きいファイルは分割する必要がある。この点からも影響は大である。この問題を回避するために rms は、tar 形式の GNU Emacs ファイルを 1K バイトずつ分解して 120 個 (!!) のファイルにしていた。

 このアルゴリズムを採用していないコピー・フリーのプログラムを探すか、あるいは自分で作る (?) しかない。squeeze というプログラムはどうだろうか ? ★10 ソース・プログラムに入っているマニュアルによると、squeeze は Lempel-Ziv-Welch アルゴリズムの変形を採用している、とのこと。これもグレー・レベルかもしれないと思って、以前のメールを調べてみたら特許が成立していた。それ以外の圧縮アルゴリズムもいくつかが特許になったものや、審査中になっているものもいくつかある、とのこと。

 ちょっと調べただけでも憂鬱になってくる。やはり「プログラミング自由連盟」★11・12 に加入して活動するしか手はないのか……。

3.Mach マイクロカーネルの現状

 GNU カーネルのベースの第 1 候補としてあがっている CMU の Mach カーネル (マイクロカーネル版) はどうなったのであろうか。その近辺の情報をお届けする。◆3

3-1.USENIX Mach ワークショプ

 10 月 3 日から 5 日まで米国のベルモントで Mach ワークショプ★8 が開かれた。参加報告 (Dave Marquardt から) がポストされていたので、その中からマイクロカーネルの現状を示す。Richard Rashid(Mach プロジェクトのリーダ) のキーノート・スピーチの部分の報告をまとめてみた。◆4,5

 CMU(と OSF Research Institute) はマイクロカーネルの作業に力を注いでおり、それは次のような特徴を持つ。

 CMU では次のような環境を実現している。

 Mach バージョン 3.0 の現状は、マイクロカーネルとサーバ 1 つが動作し配布可能な状態にある。ライセンスは最初から改めて交わす方法とバージョン 2.5 のライセンスを入手しているサイトが更新する方法がある。Intel 社 i386 用のマイクロカーネルは CMU とライセンスのみを交わせば入手することができる (もちろんマイクロカーネルのみでは何もできないが)。◆7

 短所として、

3-2.Unix サーバ

 Unix サーバがどんな動きをしているか、文献 [9] を参考に説明を試みる。

 Mach カーネルは、オブジェクト指向の考えを採り入れたプロセス間通信 (IPC、Interprocess Communication) をベースにした OS である。マルチプロセッサ・システムへの移行を容易にするために、スレッドという概念を導入し、実現した。Unix のスケジューリングの最小単位はプロセスである。スレッドはそのプロセスを更に小さな単位に分割し、スケジューリングの単位としたものである。1 つのプロセス内には 1 つ以上のスレッドから成り、単一のメモリ空間を共有する。マルチプロセスにしたいがメモリの共有も可能にしたい場合に有効である。例えば、サーバ・クライアント・プログラムのサーバ・プログラムなどである。◆8

 Unix サーバは Mach の特徴をうまく利用している。例えば、ある BSD のシステム・コールでは次のような手順を踏んでいる (図 1 参照)。


図 1. Unix サーバ

(1) ユーザ・プログラム ---→マイクロ・カーネル

(2) マイクロ・カーネル ---→透過ライブラリ

(3) 透過ライブラリ ----→Unix サーバ

                BSD サービス・スレッド

                i ノード・ページャ

                デバイス・スレッド

(4)Unix サーバ ----→透過ライブラリ


(1) ユーザ・プログラムからシステム・コールが起動される。これは一般に、ソフトウェア割り込みであり、カーネルに制御が渡る。

(2)、(3) マイクロ・カーネルの機能の 1 つであるシステム・コールの切り替え機能を用いた透過エミュレーション・ライブラリ (Transparent Emulation Library) で、サーバ・プロセスのリモート・プロシージャ・コールに変換する。つまり、関数呼び出しやサブルーチン・コールは同一タスク内であるが、リモート・プロシージャ・コールは別タスクあるいは別のマシンに対して通信することができる。従って、ここでは Unix サーバは別マシンにあっても差し支えない。

(4)Unix サーバで対応するサービスを行ない、結果を呼び出し側に返す。

 別なシステム・コールでは、透過エミュレーション・ライブラリを使わないでシステム・コールを処理することもできる。Unix ファイルの読み込みの場合、open コールで透過エミュレーション・ライブラリが、ある空間の一部を Unix のファイルに割り当てる (これは Mach カーネルのファイル・マップの特徴である)。次の read コールでは Unix サーバの介在なしにサービスを提供することができる。メモリ管理を行なうシステム・コールでも、透過エミュレーション・ライブラリだけで処理が可能となる。

 透過エミュレーション・ライブラリは、アプリケーション・プログラムのスタックではなく、固有のスタックを使うので、アプリケーション・プログラム自体の互換性を保っている。

 カーネルの変更を行なわずにスレッドを実現する方法もある。自分自身でスタック管理をしているライトウェイト・プロセスがそうである。ライトウェイト・プロセスとは、カーネルから見ると 1 つのプロセスであるが、ユーザからはマルチタスクで動いているようなプログラムのことで、一般にはこれを実現しやすいようなライブラリが提供されている (例えば Sun OS)。

 Unix サーバは 1 つのタスクであり、内部に BSD サービス・スレッド、デバイス・スレッドなどを備えて、多くのクライアント (ここでは Unix サーバを使うプログラム) にサービスを提供するアイデアもある。

 透過エミュレーション・ライブラリのロード方法が興味深い。Unix では起動時に /etc/init というユーザ・プロセスを起動する。Mach マイクロカーネルの特徴の 1 つとして親プロセスの空間を継承する機能がある。それを使って /etc/init が透過エミュレーション・ライブラリをロードしておき、子プロセスへ継承させる、という方法を採用している。

 サーバ / クライアント・モデルのサーバを作る場合はスレッドがあれば便利であろう。シミュレーション・プログラムでも有用であろうが、自分で使ってみたいと思うアプリケーション・プログラムは思いつかない。勉強のために作ってみるとしたら、gcc のドライバくらいか。スレッドを利用すれば、-pipe オプション用のコーディングがきれいになるだろう。

 Unix の C コンパイラは一般に、中間ファイルを作成してそれを cpp やコンパイラ本体間、さらにアセンブラとの中間ファイルを渡す (図 2 参照)。gcc の-pipe というフラグは、cpp とコンパイラ本体 (さらにコンパイラ本体とアセンブラ) の間で (/tmp などの) 中間ファイルを使わずにパイプで中間テキストを受け渡すもので、若干コンパイル時間が短くなる場合がある。

--- 図 2 ショウリャク ---

3-3. ユーザから見ると

 第 1 の問題はまだフリーMach になっていない点である。また、マイクロカーネルはサーバとの汎用のインタフェースを設けているために、オーバーヘッドが危惧される。それに伴ってソース・コードがわかりにくくなる可能性もある。

 しかし、いろいろなサーバを持つことができる点は評価に値し、いろいろな応用が考えられる。自前のバージョン・コントロールをファイル・システムに組み込むなどである。商業的に見ても MS-DOS サーバだけでなく、OS/2 サーバ、NEC PC98 の DISK BASIC サーバなどが考えられる。しかしながら、サーバのデバッグは困難を極めるだろう。デバッグするのに有効なデバッグ・サーバも出現するかもしれない。あるいは、GNU カーネルの中間バージョンとしてマイクロカーネル用の GNU サーバなどが作られるかもしれない。◆9

4. 今月のニュース

 パーソナル・コンピュータ関係のニュースを 2 つ、CMU の Mach カーネルのニュースと gdb の作業報告を取り上げる。◆10

 最新の gcc の配布テープには Intel 社 i386 のコード生成部分も含まれている。これを改良して 286 用のものを作ったニュースを見かけたが、今回は 8086 用の gcc を作ってみた、という報告である。もちろんクロスコンパイラである。

 MINIX は IBM PC(あるいは互換機) で動くミニ Unix で、ソース・コードとも低価格で配布されている。1 年ほど前から Intel 社の i386 を CPU に使った互換機で動作する MINIX の作業報告が初めてなされた。類似の体験報告が増えてきた。その中から 386 MINIX 用の gcc を取り上げる。現在では Atari や Amiga、Macintosh の Motorola 社 68000 ベースにも移植され、SPARCstation の移植も進められている。Atari ベースのマシンでは gcc も動作する。

4-1.MS-DOS 用 gcc

 MS-DOS 対応の gcc バージョン 1.37.1 の拡張版がリリースされた。このコンパイラは MASM(Microsoft アセンブラ用の) コードを生成し、Unix システム上で動く。

●リリース日

1990 年 9 月 11 日

●作者

John Hassey(Data General 社)

●投稿者

David J. Camp

●ニュース・グループ

gnu.gcc

●入手方法

方 法 anonymous ftp

マシン名 wuarchive(128.252.135.4)

ファイル名 pub/gcc-ms86.diff.Z(3M バイト以上)

4-2.386 MINIX 用の gcc

 i386(Intel 80386) のカーネル MINIX 上で動作する gcc が登場した。

●リリース日

1990 年 9 月 3 日

●作者

David L.Brown

●ニュース・グループ

comp.os.minix

●報告

4-3.gdb(バージョン 3.91.xx) の中間報告

 現在、gdb バージョン 4.0 の作業が進められている。そのプレαテスト (社内テストの前段階) 用の gdb バージョン 3.91.4 が anonymous ftp(ローカル・ネットワーク、あるいは Internet 内で、ファイル転送プログラム ftp を使って誰でもログインできるようにしたもので、不特定の人間によるファイル転送が可能である) がサイトに置いてある。変更点が報告されていたので後述する。なお、これは作業中のバージョンなので正しく動作することは保証していない。変更点について、ファイルをホスト・マシンとターゲット・マシンに分離している、という報告があるが、これについて捕足する。

 デバッガは対象プログラムを自分の制御下に置いて、ブレーク・ポイントを設定し、実行し、レジスタの内容を見て、実行形式に入っているデバッグ情報から対応するソース・プログラムを表示する、といった動作を行なう。Unix では対象プログラムを制御するシステム・コールで ptrace と呼ばれるものが用意されている。さらに、デバッグ対象プログラムはデバッガを起動したマシンに置かないでデバッグするという方法もある。これはリモート・デバッグと言われる方法でデバッグ対象プログラムを別のマシン (あるいはボードでターゲット・マシンと呼ばれる) にロードし、ホスト・マシン上では対応するソース・プログラムの表示、コマンド行の解析、対象プログラムの制御プロトコルの発行などを行なう。制御プロトコルは LAN やシリアル回線を通じてターゲット・マシンを制御する。

●リリース日

1990 年 9 月 20 日

●報告者

John Gilmore

●ニュース・グループ

gnu.gcc

●変更点
●入手方法

方 法 anonymous ftp

マシン名 labrea.stanford.edu

ファイル名 ~ftp/pub/gdb-3.91.4.tar.Z(1615913 バイト)

4-4. ソフトウェアの特許

 Unix の特許で有名なものに set uid bit がある。実行する際にあるファイルのある属性 bit が立っていれば起動した人の権利で動くのではなく、ファイルの所有者の権限で動く、というものである。それ以外に、Unix でよく利用されている compress プログラムの元となったアルゴリズムが特許として認められた (Lempel-Ziv-Welch アルゴリズム)。 それについて Richard が comp.emacs というニュース・グループに投稿した。

 あえて原文をそのままリスト 1 に載せるので、微妙なニュアンスを汲み取っていただきたい。◆12

〈リスト 1. ソフトウェアの特許〉

From:rms@AI.MIT.EDU
Newsgroups:comp.emacs
Subject:Imagine if you couldn't use compress any more
Message-ID: <9007271812.AA09756@sugar-bombs.ai.mit.edu>
Date:27 Jul 90 18:12:26 GMT
Lines:23

It's not imaginary--it's happening.

The people who wrote the compress program and put it in the public domain had no way of knowing that a patent was pending for the algorithm. The patent was later granted,and now Unisys says we're not allowed to run compress without their permission.

There doesn't seem to be a basis for overturning the patent legally, so the FSF is going to have to stop using compress. It's unlikely that Unisys would sue us--but we would not want to put the users in a compromised position where they would need permission to use uncompress.

We're now looking into other data compression algorithms to use instead of compress. If we find one,then we will replace all the compressed files on prep. If we cannot come up with something suitable, then we will switch to uncompressed files for distribution as soon as we come up with the disk space to store them.

This is just the beginning of the shocks that software patents will cause the user community. If you want more information on the issue, send mail to league@prep.ai.mit.edu and ask for the position paper on software patents.

5. おわりに

 次回は、ノートブック型のパーソナル・コンピュータで GNU ソフトウェアを使おうとするとどうなるか、また、どうなってほしいかを考察したい。

 また、特許になっていない圧縮プログラムを何とかしなければ、と考えている。

参考文献

★1

 Sape J. Mullender、Guido van Rossum、Andrew S. Tanenbaum、Robert van Renesse and Hans van Staveren「1990 年代の分散 OS、Amoeba」「日経エレクトロニクス」1990. 9. 3、日経 BP 社

★2

 Amoeba book、300 ページにおよぶもので migard.ucsc.edu から anonymous ftp で入手可能。

★3

 引地信之、引地美恵子「Think GNU」「The C Users Journal Japan」1990 年 6 月号、ビレッジセンター

★4

 Don Libes and Sandy Ressler、福崎俊博訳「9.3 パブリックドメイン・ハードウェア」p.293 ページ、「Life with UNIX」アスキー

★5

 木村孝道「PC9801 MINIX 移植ガイド」「The C Users Journal Japan」1990 年 4 月号、ビレッジセンター

★6

 平林小枝子、平林浩一「J-3100/3300 用 MINIX 移植キットガイド」「The C Users Journal Japan」1990 年 4 月号、ビレッジセンター

★7

 OSF/1、発表資料

★8

 USENIX WORKSHOP PROCEEDINGS, MACH, October4-5, 1990, Burlingto, Vermont

★9

 David Golub, Randall Dean, Alessandro Forin and Richard Rashid,"Unix as an Application Program", pp. USENIX Conference Proceedings, June 11-15, 1990

★10

 引地信之、引地美恵子「Think GNU」「The C Users Journal Japan」1990 年 7 月号

★11

 Michael Rowan 他編集 / 引地美恵子、引地信之訳「GNU ダイジェスト」No.9、FSF 1989 年 6 月、この元となった日本語 texinfo ソース・ファイルを JUNET(日本の Unix を中心としたネットワーク) の電子掲示板に投稿した。

★12

 井田昌之「"Look&Feel" に著作権はあるか--8 月 2 日 ボストン抗議集会にて--」「bit」1990 年 11 月号、共立出版


Think GNU 連載第 10 回【脚注】

◆1

「MacGyver」は米国でだいぶ長期にわたって続いた番組である。このあいだ米国にいたときに偶然最終回を見てしまった。1988 年には既に始まっていたから途中に空白期間と重複がなければ 4 年以上続いたことになる。別チャンネルでも古い「MacGyver」を毎日放映していた。一方、日本でも深夜テレビの時間帯に吹き替えられた「MacGyver」を放映していた。半年ほどで終了してしまったのは残念である。「刑事コロンボ」も毎週深夜の時間帯に短期間放映していたが、ときどき中断してしまう。いずれも再放送されるのを待ちこがれる今日このごろである。

◆2

開発中のソフトウェアについて触れている。現在でもまだリリースされていないソフトウェアは hacked talk だけである。おそらく、BSD の一部がコピー・フリーとしてリリースされたものの中に talk が入っていたのでそれを採用することにしたのかもしれない。

◆3

CMU のマイクロカーネルはフリーになった。OSF/1 MK も CMU のマイクロカーネルをベースにしている。マイクロカーネルにしたためのオーバーヘッドと性能の変化については次の記事が参考になるだろう。

OSF グルノーブル研究所『Mach 3.0 の上で動く OSF/1 Server』p.p 173-182、「日経コンピュータ」1992.7.13

 次の 3 種類の環境を実現している旨について触れていた。

 いずれも現在 CMU からリリースされている。ただし MacOS はライセンスが必要である。MS-DOS サーバは、i386 の 86 エミュレーション機能を利用しているので i386 以外では動作しない。

◆4

USENIX Mach ワークショップはときどき開催されている。最近これに類したものとして、マイクロカーネルとそれに関連した OS のワークショップが 1992 年 4 月にシアトルで行なわれた。

◆5

Mach プロジェクトのリーダ Richard Rashid は CMU から Microsoft 社に移った。

◆6

現在、Unix 環境、Mac OS、MS-DOS の各サーバもリリースされている。

◆7

マイクロカーネル用のサーバをパーソナリティと呼ぶこともある。

◆8

スレッドのそもそもの発端はというと、次のように理解している。

 並列処理のアプリケーション・プログラムを最初から記述することは難しい。何らかのプログラミング・モデルを提供し、その上に構築すれば容易になる。それはクライアント・サーバ・モデルであり、スレッド・モデルである。

 前者は疎らな並列処理に適し、後者は密な並列処理に適する。あらかじめスレッドを意識して、スレッド・ライブラリを使いプログラミングすれば、CPU を 1 つの環境でテストし、複数の CPU で動作させれば効率の良いものとなり得る。

◆9

シアトルのワークショップでは Mach マイクロカーネル上に VMS サーバを構築した事例が報告された。

 前述の記事ではマイクロカーネル上での OS サーバのデバックの方法が紹介されていた。その方法はこうである。

「デバック対象の OS サーバを一般のアプリケーション・プログラムと同等なものととらえ、gdb でデバックしていく」

◆10

現在作成中の GNU カーネルは、実際はコピー・フリーの OS サーバであり、CMU のマイクロカーネル上で動作する。Hurd と呼ばれる。Hird of Unix-Replacing Daemons の略であり、Hird は Hurd of Interfaces Representing Depth の略である、とも言われている。候補が 20 以上あるとのこと。

◆11

387 がない場合、次のような対策がある。

(1) カーネル内に 387 エミュレーション機能を用意する。

(2)387 の命令を生成しないように gcc を修正する。

◆12

FSF では 1992 年までに 2 つの圧縮プログラムを作成した。1 つは特許に触れないものを作成してリリースしたが、既に特許になっていたアルゴリズムを使っていた。そこで、特許に触れない別のアルゴリズムを使ったものを現在開発している。