GNU ソフトウェアの関連記事 - 4

□GCC における BSD Unix の移植□

---Porting BSD Unix Through the GCC---
John Gilmore

「GNU ダイジェスト」#7/ '89 年 6 月号

 Berkeley 版の最新 Unix ソースを GNU C コンパイラ (GCC) でコンパイルした。その段階で Berkeley 版 Unix を ANSI C 規格に更に従うようにした。つまり、多くのプログラムのマシンやコンパイラ依存部分を小さくし、GCC でテストした。

 Berkeley 版 Unix は長年、高性能 Unix の標準の地位を占めて、AT&T 版 Unix を改良したものとして、別の選択肢を提供してきた。しかし、Berkeley 版の C コンパイラは PCC の古いものをベースとしている。この PCC とは、Portable C Compiler の略で、AT&T 版から派生したものである。GCC を Berkeley リリースに統合することにより、ANSI C 互換とより良い最適化を提供し、コンパイラの安定化に協力した。GNU プロジェクトにとっては GCC の重要なテスト・ケースとなり、フリー・ソフトウェアの活動の場で強力な仲間が得られた。

 このプロジェクトは私 John Gilmore が発案した。バークリー校の Keith Bostic と Mike Karels、FSF の Richard Stallman の協力があった。ほとんど実際の移植は私が担当し、Keith と Mike はマシンを準備し、重要な決定に関しての助言、Unix の修正のスタイルや変更方針の調整を行なった。Richard はコンパイラのバグ修正と問題点の解決に対して迅速に対応した。

 古いコンパイラと新しいコンパイラの両方でコンパイルできるように Unix のソース・ディレクトリを作った。#ifdef で始まる新しいものを作るのではなく、それぞれのコンパイラの特徴に依存しないようにソース・コードを書き直した。変更しなければならない場合は、必ず ANSI C や POSIX への準拠、マシン独立という方針で移行を行なった。

 GCC のリリース 1.15 から 1.35 までを採用した。Unix ソース・ディレクトリを 4 回完全にパスした。つまり、毎回 make clean ; make で実行し、500k から 800k におよぶ出力を調べることを意味する。できるだけ多くのエラーを修正し、その過程でソースの一部をテストして、修正を元のソース・プログラムに反映させ、全体を再び作り直す。

 大まかに次の 2 種類のエラーが発生した。ANSI C を採用したことによる言語の変化と、規格に準拠していないソース・プログラム。いくつかのケースは、変更や非互換性からくる相違を説明することが困難であった。

 ANSI C の採用で発生した大きな問題点は、プリプロッセッサでの文字定数生成である。システム・ヘッダーにあるこの時代遅れの機能を使い過ぎているために、10 個のインクルード・ファイルと 45 個のソース・モジュールの変更が必要となった。ほかのプリプロセッサに関する問題は、ANSI C のトークンの接続構文が違う、という点である。このトークンの接続の問題を回避するために、5 個のモジュールの書き換えを行なった。ANSI C による extern 宣言された名前の有効範囲を明確にした。これを扱うために 38 個以上のファイルで extern 宣言文とそれに関する文を移動し、関数の広域宣言を追加した。9 個のプログラムは ANSI の新しい予約語 (unsigned や const) を変数名として使用していた。これらは別の新しい変数名に変えた。11 個のモジュールは typedef された名前を引数名に用い、unsigned を typedef していた。

 Unix のソースの中で見つけた最悪のものは、ポインタが指す名前にそのポインタ型にはないメンバ名を用いていたことである。この問題を解決するために多くの作業が発生した。宣言されていないポインタや誤った宣言のポインタがそれぞれ何のために使うのかを理解して、型を修正し、それを参照するといった作業である。この問題が原因で 5 個のモジュールを修正し、1 個のモジュール (efl) の修正はあきらめた。というのはそれを修正するのに非常に多くの作業を要するからである。

 その他にアセンブラ・ソース用に cpp を使っているために発生した問題がある。古い cpp や ANSI cpp でも処理できるようにアセンブラ・ソースを修正してこの問題を回避した。

 主要な問題として asm がある。あるプログラムは C プログラム中にアセンブラ・コードが混同していた。元のコンパイラ以外のものでコンパイルすると混乱する。compress などのルーチンは最適化のために asm 文をあちこちにばらまいている。さらにカーネルを含む多くのモジュールは、アセンブルとリンクする前に C コンパイラの生成コードを sed を使って変換している。できるだけ多くの asm 文を消去し、アセンブラのルーチンをまとめて .s という拡張子のつくファイル名にした。Pascal と Lisp インタプリタは sed での変換を複雑に行なっているので、それぞれの修正に数日要した。

 文字定数に 2 文字以上入れているプログラムを 3 個修正した。そのうちの 2 個は明らかに誤りであった。関数や変数の宣言を行なっているが、別の場所では型や記憶クラス両方を省いている、というプログラムが 15 個あった。2 個のモジュールは、, を使うべき場所で ; を使っていたのでエラーと判断された。宣言の構文解析規則が変わったために 5 個のモジュールの修正を要した。エラー・チェックが強化されたので宣言上のバグが 6 個以上発見された。15 個のプログラムで、種々雑多なポインタ使用の修正を行なった。5 個のモジュールで誤った符合拡張を行なっていたバグを GCC が見つけた。

 ここまでの結果に満足している。ほとんどの Unix コードは問題なくコンパイルできたし、我々が実行したうちでは、コード生成のバグはなかった。ANSI C の変更による修正は約 50 個の変更のみで、そのうち問題なのは 2 つだけだった。GCC のバグが 20 個発見され、現在ほとんどが修正された。GCC については数倍のバグがあると思ったが、我々が予想した以上に高品質であった。

 ANSI C の多くの些細な問題や非常に小さい非互換の部分を Unix ソースから取り除いた。これによって BSD Unix を移植する際、注意すべき点が増えるということはほとんどない。しかし、Berkeley 版 Unix を完全な ANSI C 対応にはしなかった。特にプリプロセッサのコメント (#endif FOO) は、マシンの定義 #define(#ifdef vax) と対応させてそのままにしておいた。ANSI C にはないが GCC はこの機能をサポートしている。

 仕事が残っている。BSD のカーネルはまだ GCC でコンパイルしていない。volatile 宣言が全て正しい場所に入るまではカーネルの最適化で多くの問題が発生するだろう。Portable C Compiler の一部は C コンパイラ以外の lint や f77、pc で使用されている。さまざまなソース・プログラムにおいて setjmp の呼び出し部分の修正が必要である。というのは、volatile 変数以外のものは longjump 後の値が保証されていないからである。

 バークリーがソフトウェアを次に配布する時は、これの修正版が受領者に配布可能になるだろう。さらに、必要な人へは、BSD Unix と ANSI C 版との diff を配布できるだろう。

 将来のプロジェクトは、ANSI C や POSIX 互換のヘッダー・ファイルやライブラリ (関数のプロトタイプも含む) の完全なものを作成し、それを使うように既存のソース・プログラムを変更することである。最終目標は規格に完全に基づく Unix システムを作ることである。これはユーザ・インタフェースだけではなく、標準コンパイラとライブラリでコンパイルできるようなソース・プログラムをも対象とする。

 GNU とバークリーの共同作業の成功というのは、さらに将来の協力をはかるものである。GNU プロジェクトは、System V Unix や Berkeley 版 Unix に欠けている機能 (例えば、sh の改良や make コマンド) を作成中である。その代わりにバークリーでは、AT&T が配布していなかったプログラムに対する AT&T のライセンス要求を排除しながら、多くのソフトウェアをパブリックなソフトウェアとしてリリースした。フリーになった BSD ソフトウェア一式が、uunet.uu.net のサブディレクトリ bsd‐sources から uucp や ftp で配布可能になった。これは、GNU コンパイラ・テープや uunet テープと同じ内容である。

□オンライン・ブック・イニシアチブ□

---Online Book Initiative---
Barry Shein

「GNU ダイジェスト」#8/ '90 年 1 月号

「オンライン・ブック・イニシアチブ」(Online Book Initiative) は、収集した情報をフリーに再配布する目的で設立された。非常に多くの本や予稿集、リファレンスの類、カタログなどがあり、自由に共有できる。その中の一部は機械で読み取り可能な形式であるが、全てがそうではない。

 この情報に関して、あるいはネットワーク上で仕事をしている人々のために、図書の書庫を作るべくオンライン・ブック・イニシアチブがある。

 オンライン・ブック書庫の中の情報は自由に再配布できるようになる予定である。オンラインによるアクセスや磁気テープ、その他の方法による配布料金は、情報に対してではなくこのサービスを用意することに対しての妥当な金額となっている。

 概して同じ目標を掲げた組織 (例えば、グーテンベルク・プロジェクトや Common Knowledge) がある。これらの組織の目標や方法の細目が幾つかの点において我々とは全く異なる。我々はそのような組織と連絡をとり、大抵の場合は積極的に話し合っている。テキスト情報をオンライン化したいと考えている者誰もが、「より多くのものをさらに楽しく」という姿勢で速やかに開発している。努力が報われるしっかりした分野である。

■ 何を記録するか

 (ソフトウェア以外の) オンライン情報全てである。例えば、本、定期刊行物、カタログ、コンファレンスの予稿集、雑誌、マニュアル、地図、映像、技術資料、参照作業、などである。ソフトウェアに関して我々が興味を持つのは、そういった情報を見たり、操作、検索、書庫情報の保守を行なうといったことである。

 このような情報というのは、我々やそれを受け取った個人および組織が再配布を制限する著作権に対してフリーでなければならない。オンライン・ブック・イニシアチブでは、著作権の制限がないもののみを扱っている。関わる問題に気を使いたくないからである。

 収集可能な情報について助言を求めている。例えば、政府が収集したもののうちで面白いものについて。これは適正価格で入手でき、(将来のコンピュータによる) 再配布に関する制限もない。

■ 何が必要か

 機械で読めるようなもの以上に、出版物の巨大な収集がある。これはオンラインにすれば再配布できるものである。オンライン書庫 (情報の書庫) にオンラインで情報を入れるために、スキャンや入力、あるいはその他の方法で行なう非公式なプロジェクトを組織してくれる人が必要である。

 図書館や情報科学者と連絡をとって書庫を作るための形式や構造作成の助言を受ける必要がある。

 作業のガイドラインを作成するテクニカル・アドバイザ・ボードに参加したい人々も必要である。

 学術分野、産業分野、政府がお互いに各々の分野を越えて作業効率を高め、情報のユーティリティを速く、自由に配布できるように巻き込む必要がある。

 オンライン書庫に入れられるようなものを抱えている出版社も対象に入れる必要がある。多くの本や照合作業は、普通の紙という意味でしか出版されず互換性がなくなってしまっている。これらの情報を配布可能なものにする時期がやってきたのである !

 マルチメディアの規格を選んで作成するために、マルチメディアの技術委員会の協力を得たい。その規格として例えば、ハイパーテキスト、組版言語、索引プログラムや目録作成ソフトウェア、テキスト修正、ネットワーク・アクセスの方法などがあるので、規格は我々の作業にとって重大である。

■ 何を提供しているか

 world.std.com は公にアクセスできる Unix システムで、最初の書庫としてサービスを提供する予定である。マシンは現在 Sun-4 の 280 で、必要に応じて拡張する。

 617-739-WRLD へ直接アクセスしたい場合は、誰でもシステムに電話ログインしてアカウントを作ることができる。そのアカウントに課金されて発生したものは、オンライン書庫を作成するために用いられる。

 UUCP やほかのリンクを使って、収集物を再配布できるようになるだろう。適切な料金で磁気テープを配布する予定である。

■ どうやって参加できるか

 援助できる人、詳細情報については、obi@world.std.com へ電子メールにて問い合わせてほしい。2 つのメーリング・リストがある。1 つはオンライン・ブック・イニシアチブの問題点について討議し、もう 1 つはアナウンスのみを行なう (一般的な論議を交わす前者では、全てのアナウンス情報もわかるので、どちらか 1 つを選択すればよい)。いずれかに入るためには、obi-request@world.std.com へ電子メールにて問い合わせのこと。

 あるいは、Software Tool&Die(TEL 617-739-0202) へ電話していただきたい。

 次の地区に在住の場合は、我々の事務所に寄って相談してくれてもよい。

1330 Beacon Street
Brookline,MA 02146
U.S.A

■ 後書き

 発端は、「KiloMonkeys プロジェクト」(Strong Typing For Weak Minds) と呼ばれる非公式な討議グループとして始まった。どうやって便利な情報をオンラインで、しかも一般に入手可能なものとして提供するかを解決したい人々が集まってできたものである。そこで、この作業のために自分の家を Software Tools&Die とし、「オンライン・ブック・イニシアチブ」という新しい名前のもとにこのプロジェクトを公式なものとした。元々の Monkey Shein のグループの人々に感謝したい。

□Common Knowledge の汎用索引□

---Common Knowledge Universal Index---

「GNU ダイジェスト」#8/ '90 年 1 月号

 「Common Knowledge」という国際的なグループがある。このグループは、著作権を放棄したパブリック・ドメインの情報で、機械可読形式のものを集めている。要員はジャーナリストや科学者、図書館関係者などから成る。著作権の主張されていない情報のデータベース (「ユニバーサル・インデックス」汎用索引と呼ばれる) を収集している。これまで同じ情報を複数の図書館で用意する二重の手間を減らす方法の 1 つを提供している。連絡先を次に示す。

Common Knowledge
Jefferson,MD 21755,U.S.A
電話番号 (301)695-3100

□グーテンベルク・プロジェクト□

---Project Gutenberg---

Michael S. Hart 理事

Project Gutenberg National Clearinghousefor Machine Readable Texts

「GNU ダイジェスト」#11/ '91 年 6 月号

 グーテンベルク・プロジェクトの目的は英文の電子テキストの作成、配布を促進することにある。そのままの ASCII 形式のテキストを入手したい。そうすれば、たいていのものはハードウェアやソフトウェアで扱えるように簡単に変換することができる。さらに ASCII ファイルは、さまざまな環境下で使用されていることを考慮して、マークアップ・システムでも作成可能になる。しかし、どのような形式であっても受け付け、全てを提供できるように最善を尽くすつもりである。

 インストールや使い方だけではなく、ハードウェアやソフトウェアの選択にも助言している。さらに、スキャンやスペル・チェック、原稿の校正などのアドバイスも行なう。目標は 2001 年までに使い古しの本を 1 万冊集め、縮小するつもりである。この縮小とは、利用者が支払う実出費を減少させることであり、だいたい 1 冊あたり 1 セント + メディア代 + 輸送費 + 手数料である。従って、こういった種類のライブラリでは約 100 ドル + メディア (ディスクや CD-ROM、封筒) 代にしたいと思う。現在 CD-ROM の制作コストは 500 ドル (マスタのため)+2 ドル /1 枚と言われている。この価格は十分交渉可能でもあるという、実にいい専門家を見つけた。

 米国の中だけでも控え目に見積もって 10 万軒の図書館がある。図書館ごとに 1 冊ずつテキストを作成すれば、このライブラリの 10 分の 1 が達成される。全ての図書館が協力して作業すれは、図書館ごとの作業量はさらにその 10% 以下になるだろう。図書館で電子テキストの作成担当者が 10 人ずつ各図書館にいれば 1 万冊の本を作成するのに要する実労力は、1 冊の本の作成労力のたった 1% で済む。多くの本は現存の 1 億台のコンピュータ上で処理が可能である。

 これまで、多くの電子的なファイルの作成作業が各地の図書館や大学のコレクションとして行なわれ、私用あるいは半私用として個々に作成された。個人や半個人的に、あるいは個人が集まって作成されたものが多く、各地の図書館や大学にコレクションとして収められているが、そのほとんどは自分の時間とお金を費やして自分で入力したものである。この労力の大部分はそういった人の好意や図書館によるもので、コレクションが将来検索されるとみなして作ったものである。これは現在では、メディアとしてかかる費用 (紙代と時間) の数分の 1 の負担でディスクや電話線などのほかのメディアへ転送することができる。また、1 度に 1 人の利用者に専有、制限されることもない。全ての成果物が全ての利用者に使用可能となるだろう。

 こういった形式のライブラリを利用すると、既存の図書館よりもさらに多くの利益をもたらすことだろう。全ての情報を総計すると、現在図書館から得られるものに比べてかなり大量なものとなるだろう。利用者が、知識の研究で今日得られる量よりも、さらに多くの量の知識をそのライブラリから得られることになる。

 そこで電子テキストの作成と配布を必要とし関心のある全ての団体に、入力やスキャン、校正、収集に参加できるかどうか、どのようなものに興味があるかを訪問して聞いている。

 電子テキストを見つけたらためらわずに送ってほしい。情報の入ったディスクは、次の住所へ郵送のこと。

Michael S.Hart
405 West Elm St.
Urbana,II 61801,U.S.A

切手を貼った返信用の封筒 (あるいは寄付) を添えて

 グーテンベルク・プロジェクトについて知る最も簡単な方法は、グーテンベルク・リストのサーバへ、次のようなメッセージを送って、情報の配布を要求することである。

SUB GUTNBERG YOUR NAME(名前には最低 2 つの単語が必要)

 詳細な情報の問い合わせをためらわないで、グーテンベルクのメーリング・リストに参加してほしい。その質問はメーリング・リストとは別の次のところへ問い合わせていただきたい。

Bitnet hart@uiucvmd
Internet hart@vmd.cso.uiuc.edu

(グーテンベルク・サーバは gutnberg@uiucvmd.bitnet である (つづりに注意)。Internet アドレスは gutnberg@vmd.cso.uiuc.edu であり、サーバは登録のみを実行し、それ以外は私のところへ転送される)

 早速の参加に感謝したい。

□政府のソフトウェアはフリーにしよう□

---Help Keep Government Software Free---
Richard Stallman

「GNU ダイジェスト」#11/ '91 年 6 月号

 200 年間にわたる米国の著作権システムでは、連邦政府によって作られたものは全てパブリック・ドメインに置かれている。これは当然のことであり、そのために税金を支払っているので、我々が全ての政府の成果物の所有者になるはず (べき) である。

 ところが、現在その方針が改められようとしている。もし、それが受け入れられれば、非常に多くのフリーなソフトウェアが販売されることになる。そうなれば、我々はそのようなソフトウェアの開発のために税金を支払い、それを使うためにまたお金を出すことになってしまう。さらに、それがフリーでなくなれば GNU システムには使えなくなる。

 これはひどいことだと考える。この意見に賛成ならば、次に示す議会に手紙を書いて、阻止することに手を貸してほしい。

House Subcommittee on Intellectual Property
2137 Rayburn Building
Washington,DC 20515,U.S.A

□GNU は小さな科学を大規模に援助している□

---GNU Aids Small Science in a Big Way---

Lester Ingber

(Science Transfer Corporation、ingber@umiacs.umd.edu)

「GNU ダイジェスト」#12/ '92 年 1 月号

 おそらくほとんどの人々は、Emacs や GCC、G++、GDB、Groff、Gnuplot などの GNU の成果物や、その一部 (GCC の利点を使用するために) を基にしたソフトウェアの成果物、bash、Oleo、Perl などを、次のような必要性から使っているであろう。(a) ソフトウェアを修正調査するため、(b) 商用ソフトウェアと比較しても優秀なソフトウェアの利点から、(c) 高価ではないソフトウェアを使うために、である。十中八九、GNU ソフトウェア開発プロジェクトの受益者は、中規模から大規模な研究機関や企業のコンピュータ関係の研究者かハッカーである。一般に、(a) や (b) の利点に結びついている。(c) の経費の要因はそれほど大きくない。

 (c) の経費を低く押さえるという必要性は、(b) の現在の優秀な技術水準のソフトウェアにおいても要求されることだが、多くの小規模の科学プロジェクトにはきわめて重大な点である。項目 (a) を満たすようなソフトウェアには、たいてい多くのバグがあって、それをいじって取っ組み合うよりは、私を含む多くの人々がより多くの時間を自分の「研究」に費やしたいと思う。しかし、それでも (b) や (c) の点から、GNU ソフトウェアの方を好んでいる。予算が赤字の時、より巨大で、より費用のかかるプロジェクトに対して政治的な要請がある場合はなおさらである。今、直面している厳しい競争を我々の国が切り抜けるためには、良質の科学 (洗練されたあらゆる人々にとっても基本的な目標) を簡単な方法で推進しなければならない。同様に、小さな科学を守るための方法を見つけなければならない。そのような意識を広めなければならない。

 現在、自分のプロジェクトを維持するために、ほかに選択肢があるわけではないが、自分のコンピュータの購入に財布の紐を緩めなければならない。多くの汎用計算機やワークステーションを使っているが、たいていはコンピュータのエンド・ユーザとしての利用である。従って、コンピュータは専門家の手に委ねられている。Sun SparcStation を選んだ。その理由は (1) 自分のソース・コードを扱うのに十分強力で、(2) 非常に多くのソフトウェアが配布されているように思える、ためである。自分のプロジェクトのために、(2) がどれほど重要なことなのかをほとんど理解していなかった。自分の Sun はすぐに何でもこなすが、数千行の troff コード・ファイルをレーザ・プリンタへ出力することさえできなかった。システムに付属している C コンパイラは非常に遅かった !

 そのような時に GNU プロジェクトを発見し、コンピュータのシステム管理者になるべく数ヶ月の取っ組み合いの末、自分の科学ツールを自由に使いこなせるようなソフトウェア・システムが現在自分の手元にそろった。例えば、私の論文、"Statistical mechanics of neocortical interactions: A scaling paradigm applied to electroencephalography,"(`Phys. Rev. A', 44:4017-4060, 1991) では、脳の理論的な私のモデルが、どのように頭皮から計測され、EEG(electroencephalographic、脳波) データへ適用する場合にどのように使用されるかを実証している。この理論を適用した厳密なテストがほかにもいくつかある。最終的なテストとそれの出版には、本当に GNU ソフトウェアが必要であった。適正な市販価格でさえ経済的に支払う余裕がなかったのである。

 Richard Stallman や GNU プロジェクトのその他の人々に感謝する。世界中のコンピュータ研究者に最高技術水準のソフトウェアを寄与しているだけではなく、小さな科学を促進させる非常に重要な役目を担っている。

□GNU は大きな科学も支援している□

---GNU Helps Big Science, Too---

「GNU ダイジェスト」#12/ '92 年 1 月号

 GNU は、単に小さな科学上のプロジェクトとしてフリー・ソフトウェアの利点を得ているわけではない。JET プロジェクトの Colin Manning はこのように述べている。

「参考までに、JET は発電用の核融合技術を開発する世界最先端の研究プロジェクトである。そこでは言うまでもなく膨大な数のコンピュータがあり、GNU ソフトウェアが活用され、その真価が認められている。GNU Emacs においてはほぼ一般に使われている。GCC、bash、GAWK やその他のソフトウェアも同様である。我々は (今のところ)Sparc マシンを基に作業を行なっている」

いろいろな発明から非常に多くの利点を享受しているのだから、自分のどんな発明でも他人に分け与えることを喜びとするべきである

---Benjamin Franklin