[image of a Brave GNU World]
Brave GNU World - 第47号
Copyright © 2003 Georg C. F. Greve <greve@gnu.org>
日本語訳: IIDA Yosiaki <iida@brave-gnu-world.org>
許可声明は以下のとおり

[CN | DE | EN | FR | JA | ES | KO | PT | ZH]

Brave GNU Worldのまた別な号へようこそ。 今月号は少し技術的です。 プロジェクトの一部は、 開発者がいちばん興味をもつかもしれませんが、 さほど技術的でない読者のみなさんにも、 新しい視点や、 着想がえられるのでは、 と思います。

Twin

今月最初の話題は、 Massimiliano Ghilardiによる、 多重ウインドー、 多重アプリケーションのテキスト・ベース環境であるTwin [5] です。 つまりTwinとは、 「テキスト・ウインドー (Text WINdow)」の、 あるいは (より正確には) 「テキストモード・ウインドー環境」の略なわけです。

X11 (大量の資源を食う) の全機能を必ずしもほしくないし、 いりもしないが、 多少はウインドーがある環境をさがしている人たちを、 対象にしています。

テキストモードのウェブ・ブラウザであるLinksを、 Twinと組で使うと、 グラフィカル・ブラウザであるKonquerorをX11で使うのにくらべ、 5%の資源ですみます。 端末ウインドーや、 コンソールで使う全アプリケーションは、 Twinの下でもうごきます。

グラフィック・カードが新機能でたがいにしのぎを削り、 昨日は買うことが不可能だったものが翌日にはポケットにあるお金で買える時代だというのに、 これはほとんど時代錯誤のように思えます。 しかし、 すでに前号 [6] のRULEプロジェクトで説明したように、 これは全人類のうち、 ごく一部でしか起きてないことです。

人びとは、 たくさんのところで、 もう古くさくなってしまったハードウェアを長期間、 使い続けることにたよっています。 これは往々にして、 財政的により裕福な国ぐにの学校においても、 事実です。

しかし、 新しいソフトウェアについて考えているときには、 ふつう思いもつかなかったようなところで、 Twinが役に立っている別のグループが、 あります。 全盲や、 弱視の人たちです。 この人たちは点字端末 (Braille terminal) にたよることがあるので、 グラフィカル・ユーザー・インターフェースを使う機会はほとんどないのです。

Twinでは、 多重のウインドーアプリケーションの環境が、 使えます。 実際、 Massimilianoによれば、 最初はびっくりするくらい、 この種の利用者からのフィードバックが多かったといいます。

技術的にいうと、 このプロジェクトには、 プロジェクトと同じ「twin」という名前のサーバーがあります。 このサーバーは、 クライアントからの接続を受け付け、 コマンドにしたがって、 ウインドーを作ったり直したりしています。 サーバーはまた、 さまざまなディスプレーや装置を動的に管理します。

現在Twinでは、 もし利用可能であれば「xterm」マウス・プロトコルで、 つまりgpmもしくは、 termcap、 ncurses互換な各端末で、 マウス・サポートのあるコンソールを取扱います。 また、 別なマシンでTwinサーバーをうごかすことができるのと同様に、 ふつうのX11ドライバや、 グラフィック拡張をほどこしたgfxドライバへの出力もできます。

General Graphics Interface (GGI) もサポートされていますが、 キーボードのサポートはまだなので、 たいていのアプリケーションでは不便です。

サーバーをのぞいた構成要素には、 libTwとlibTTがあります。 libTwは、 サーバーとの通信を扱い、 libTTは、 グラフィック指向のサーバー側関数群から、 クライアント側に都合のいいウインドー/オブジェクト指向の関数群への、 抽象化をあたえるツールキット・ライブラリーみたいなものです。 3番目のライブラリーであるlibTutfはUnicodeライブラリーで、 転送するテキストのユニコード変換ができます。 おそらくこのライブラリーは、 いつか将来、 最後の未解決の課題に取り組んだときに、 標準的なライブラリーを使用することによって時代遅れなものになるでしょう。

そして最後にクライアントがあります。 今は、 数個しかなく、 そのうち2つは、 サーバーに組込みになっています。 「~/.twinrc」 設定ファイルで設定のできるウインドー・マネージャと、 単純な端末のエミュレートができるコンソールは両方、 技術的な理由により、 サーバーと統合されています。

それ以外のクライアントには、 追加の端末エミュレータ (twterm)、 xdm/gdm/kdmに似たログインマネージャ (twdm)、 システム・モニター (twsysmon)、 サーバーにたいしてディスプレーの登録や抹消をおこなうユーティリティー群、 そして実用というよりは検査用の小さなクライアントが若干あります。

このプロジェクトは1993年、 DOSのプログラムとして始まりましたが、 マルチタスクの問題で、 ほとんど止まりそうでした。 Massimilianoが1999年、 GNU/Linuxへに切り替えて、 新しいプラットホーム用にプロジェクトを移植して、 やっとスピードが戻りました。

メモリー使用量の少なさ (Twinサーバーはふつう、 Bashシェルの半分未満のメモリーしかいりません) などのため、 プロジェクトはすべてCで書いてあります。 そしてもちろん、 Twinは、 Free Softwareです。 クライアントやサーバーの許諾は、 GNU General Public License (GPL) で、 ライブラリーについては、 GNU Lesser General Public License (LGPL) です。

さらなる開発は、 Massimilianoの (やや短い) 自由時間におこなわれ、 彼にはまだ考えがたくさんあるようです。 まずは、 ツールキットライブラリーと、 その文書化、 そしてその後で、 エディター、 タスク・バー、 ファイル・マネージャ、 ウェブ・ブラウザ、 電子メール・プログラムや、 拡張されるべきTTYベースのプログラムなどをこなしていきたいようです。

この課題のために、 するべきことがまだたくさんあるので、 助けてもらう必要があることを伝えてほしい、 とMassimilianoに強く頼まれました。 たとえば、 通信ライブラリーの文書化、 libTWスクリーンセーバー、 twdialogの完成、 TwinにおけるDialogの代替、 クリップボードの内容を切り貼りするユーティリティーであるtwclipの作業で、 ボランティアをさがしています。

参加に興味のある人は、 メーリング・リストをのぞいてみるといいでしょう。 利用者用には、 たとえばDebian配布物件の安定分枝の中に、 Twinがあります。

C++パッケージ群

今回のコラムは、 2002年12月1日前後にChristian Holmのリリースしたプロジェクト [7] が若干、 続きます。 これは、 C++の開発者らの生活を、 より楽にしてくれるはずのものです。

人びとがコンピュータで通信するとき、 通信で使う言語に共通の合意がなければなりません。 特にこの通信が実時間で起きないときは、 かなり複雑です。 これはたとえば、 プログラミング言語や、 設定ファイルだったりします。

根本的な問題は、 構文検査と、 そのような言語の読取りや評価の関数が、 すぐに複雑化することです。 文法や定義の変更が必要になったとき、 たいていバグ探しに時間のかかるはめになります。

それに、 プログラマの避けたがる、 高度に技術的な妙技ぬきでは、 そういった関数の作成は、 退屈な仕事になりがちです。

そのため、 文法定義から、 その文法を読み込める関数への変換を自動化できるような、 そんなツール群が作られてきました。 もちろん、 文法定義自体は、 機械可読である必要があります。 そういった定義の中でもっとも共通な形式は、 たぶん "Lookahead Left to Right Parsing" (LALR) 文脈自由文法でしょう。

とりわけもっとも評判のある、 最高のLALR(1) パーサーは、 GNU ProjectのBison [8] で、 これはYaccと互換性があります。 Yacc自体は、 "Yet Another Compiler-Compiler"の略であり、 YaccからBisonへの移行を容易にするため、 Bisonは、 わざとYaccとの互換性を維持しています。

通常、 Bisonとともにはたらくアプリケーションは、 Flex [9] で、 これは、 ソース入力を単純式へと解析できるルーチンの生成に使います。 そうすると、 パターン照合用のソース・コードを自動生成できるからです。 Flexも、 別なプログラムに対応 (この場合、 「Lex」) しています。

きっとこの短い紹介で、 それほど技術的ではない読者のみなさんにも、 わかりやすくなることでしょう。 もし、 もっと深くお知りになりたいようであれば、 まあまあいいとっかかりがウェブ [10] にあります。

Yacc/Lex--

Bison [8] とFlex [9] は両方とも、 ふつうCのソース・コードを出します。 もしこのコードをC++で使うと、 広域的命名空間が散らかりがちになりますし、 C++のインターフェースもありません。

そのためChristian Holm Christiansenは、 Yacc/Lexx--というヘッダー・ファイル群一式を書き、 BisonやFlexのC出力をC++のクラスにカプセル化できるようにしました。 その中では、 潜在的な柔軟性を最大化するため、 パーサー、 スキャナーの仕様の変更をわざと小さくしています。

実際Flex自体は、 C++のソース・コードを生成できますが、 その出力は、 Christiansの趣味からいうと柔軟性がなく、 Bisonの生成したパーサー・クラスとうまく合いませんでした。 そのため彼は、 両方に共通のカプセル化が必要だったわけです。 実際、 BisonのC出力と、 FlexのC++出力との間の非対称性が、 彼にこのプロジェクトを始めさせたわけです。

直接C++出力をするという特長のあるbison++のようなプロジェクトとくらべると、 使用しているYacc/Lexの内部実装と無関係である点で、 すぐれている、 とChristianは見ています。 したがってこれは、 Yacc/Lexプロジェクトの変更にたいして、 より安定しており、 内部変更の影響を直接受けません。

しかし、 奇妙な振舞をしめし、 POSIXに準拠しないYacc/Lexクローンが若干あり、 これを使うのには問題がありますので、 これがこのプロジェクトの弱点です。

そこでChristianは、 近い将来、 Yacc/Lexの実装をもっと試験する計画で、 この分野での手助けを楽しみにしています。 別なプラットホームや、 さまざまなコンパイラでの検査の手助けも、 大歓迎です。

Readline--

GNU Readline Library [11] は、 他のプロジェクトで、 万能なコマンド行との統合ができる関数を提供しています。

GNU Readlineの機能の中には、 viとEMACSのモード、 前の入力の保存と再構成や、 再編集、 cshシェルのような前に入力したコマンドの補完があります。

Christian Holm ChristensenによるReadline--プロジェクトでは、 C++プログラマに、 C++のクラスでGNU Readline Libraryへのアクセスができるようにします。 驚くに値しませんが、 自分のアプリケーションにコマンド行インターフェースを含めようとしているC++の開発者が、 このプロジェクトの主な対象者です。

このプログラムは、 Christian自身が自分のC++パーサーを検査するためにコマンド行インターフェースが必要になったときに、 生まれました。 それは、 以前につくったプロジェクトの課題でもありました。

現在最大の問題は、 まだこのライブラリーがスレッド・セーフでないために、 複雑なアプリケーションでは、 取扱いに注意の必要なことです。 インターフェースの向上と同様、 この問題の解決は、 このプロジェクトでChristiansが次に計画していることです。 インターフェースが完成したとしても、 一部の場所では、 直感的でないところがあるためです。

Option--

Option--では、 Christianは、 コマンド行オプションのパーサーを提供しています。 これは、 C++のプログラムで立上げ時に指定されるコマンド行を見つけて、 評価することのできるようにするライブラリーです。

同様のプロジェクトとくらべたこのプロジェクトの主な特長は、 可能なオプションをテンプレート・クラスで表わすことで、 これによりこのプロジェクトがとても柔軟になっています。 でもOption--がきくのは、 指定順序にたよらない引数にだけです。 コマンド行の中で、 とある位置のとあるオプションだけを使う構文に利用者が縛られている場合、 Option--はよい選択肢ではありません。

このプロジェクトの初期の部分は、 ROOTプロジェクトがコマンド行オプションを必要としたころ、 Christianの書いたものです。 もっとも、 そのプロジェクトでは後で、 別な方法での解決をしたのですが。

しかし、 自分が必要としているのはこんなものだとわかったとき、 Christianは自分のプロジェクトを完成させました。 今ではすっかり安定したので、 もっと試験してみるという程度の些細な計画しかありません。

Thread--

今回最後のChristian Holm Christensenによるプロジェクトは、 C++プログラムでスレッドを使うプロジェクトのThread--です。

ほとんどの読者にとって「スレッド」の概念は、 耳慣れないものでしょうから、 短い説明がたぶんいるでしょう。

基本的に、 すべてのコンピュータは、 直線上で一本的にうごきます。 もし仕事が発生すると、 能力の範囲で、 決められた順序で一歩一歩処理をこなします。 しかしたいていの場合、 これでは同時にひとつのプログラムしかうごかせません。

複数のプログラムを同時にうごかせるようにする --いわゆる「多重タスク」 ("multi-tasking") -- には、 コンピュータの中心部分、 つまり処理装置を、 タスクからタスクへとジャンプさせなければなりません。 タスクはそれぞれ、 あいついで直線上できっかり一本的にうごきますが、 この方法だと、 コンピュータの能力をさまざまなプログラムで分割できるのです。

プログラムとタスクがより複雑になると、 直線上できっかり一本的にうごくだけでは、 だんだん充足できなくなります。 この問題の解決のひとつがスレッドです。 スレッドを使えば、 ひとつのプログラムをさまざまな「タスク・スレッド」へと分けて、 複雑な問題のさまざまな部分単位へと分解することができます。

もちろん、 これらさまざまなスレッド間の相互作用と通信、 調整し制御する必要もあり、 C++からThread--でアクセスできる機能性も必要です。

Boost::Thread, ZThread, Common C++といった同様のプロジェクトと違い、 Thread--のソースでは、 事前処理マクロを乱用していません。 その代わり、 実装依存の部分は、 Traitsの中にあります。 このせいで、 ライブラリーは小さく、 拡張可能になっています。

Christianは当初、 Readline--のスレッド・セーフ度を検査するために、 Thread--に取り組み始めました。 そして彼によると、 GNU/Linuxでちゃんとうごくそうですが、 GCC 2.95.xやそれ以前のものでは、 問題があるようでなので、 GCCのバージョンの確認が賢明です。

それ以外の問題は、 Solarisのセマフォーと、 Win32のスレッドです。 それ以外のプラットホームでは彼に検査はできませんでした。 この問題への手助けや、 他のプラットホームについての情報は、 大歓迎です。

Christianの書いたプロジェクトについては十分でしょう。 Brave GNU Worldのいつもの読者なら、 いつもの大事なところが2つ、 抜けていたことにお気付きかもしれません。 それではいきましょう。

第1に、 全プロジェクトで使われているプログラミング言語は、 C++と、 GNU Autotool群です。 第2に、 プロジェクトは全部、 GNU Lesser General Public License (LGPL) の下で入手可能なFree Softwareです。 これらはみな、 ChristianのC++ページ [7] にあります。

第6次欧州共同体枠組制度

Brave GNU Worldの第40号 [12] で書いたように、 FSF Europe [13] は2002年4月30日、 欧州委員会への歓告を書きました。 50以上のヨーロッパ中の政党に支持されたこの勧告は第一に、 ヨーロッパ地域とヨーロッパ諸国におけるFree Softwareの優位性と、 そして、 Free Softwareにたいする優遇を提案しています。

この勧告の背景には、 昨年決定されたヨーロッパにおける研究開発の基金のための第6次欧州共同体枠組制度 [15] があります。 この制度は、 常に4年単位で運用されていて、 科学分野におけるヨーロッパ基金のほとんどを含んでいます。 その主要な目標のひとつは、 研究開発基金をつうじたヨーロッパ経済と社会の助成です。

すでに第5次の枠組制度には、 Free Softwareのための最初の一歩がありましたが、 第6次の枠組制度は当初、 Free Softwareに向けた計画が、 いかなるかたちでもありませんでした。 そこでFSF Europeが、 前述の勧告を出したわけです。

2002年12月17日、 第6次枠組制度に決着がついて、 Free Softwareを望ましいプロジェクト提案形式とする勧告が受け入れられた、 ということらしいです。 計算機科学と情報技術への資金援助を取り扱う "Information Society Technologies" (IST) Work Programme (情報社会技術労働制度) には、 Free Softwareのプロジェクトを評価手続きにのせることのできる文言が、 含まれています。

これは実質上、 IST Work Programmeの全予算、 17億2500万ユーロが、 Free Softwareにたいして開かれている、 ということです。 たぶんこれは、 Free Softwareへ向けられた予算総額としては、 最高でしょう。 この場合もちろん、 独り占めというわけではないですが。

この枠組の中で、 Free Softwareのための、 またFree Softwareを使ったプロジェクトを立ち上げる企業、 大学、 研究所を支援するために、 FSF Europeは、 2002年12月18日、 全関係者に注目をうながす要望書 [16] を送付しました。

その目標は、 第6次枠組制度で重要と指定された各分野で、 独占的なソフトウェアに基金が使われるのを見るのを避けるためにも、 できるだけFree Softwareプロジェクトをおこすことです。 eDemocracy、 eHealth、 eSecurityのような分野は、 私たちの未来に大きな影響があるかもしれないので、 Free Softwareとして指定されるべきでしょう。

そのようなプロジェクトを開始し、 それらを組織化し、 ブリュッセルの政府と調整するには、 たくさんの時間と努力がいりますが、 Free Softwareプロジェクトでこの可能性を現実にすることができるよう、 FSF Europeは、 全力をあげるでしょう。

TUX&GNU@school

今号のしめくくりとして読者のみなさんに、 注目に値するコラムをまたお届けできるのは、 嬉しいことです。 昨年、 Brave GNU Worldの長年の読者であったMario Fuxは、 学校用のFree Software専用に、 同じようなコラムを書き始めました。

彼は現在、 「TUX&GNU@school」をドイツ語と英語で5号まで出し終え、 これはFSF Europeホーム・ページ [17] 上に本拠をかまえました。 Mario、 そして一種の編集委員として彼を支援するChristian SeligとKristian Rinkに、 未来が最高であるよう祈り、 教育分野にいらっしゃる読者には特に (もちろん教育分野に限定するわけではないですが)、 ご覧いただくよう、 おすすめいたします。

では来月まで

今月のBrave GNU Worldはこのへんにして、 いつもどおりご質問、 お考え、 コメントをメール [1] でお願いしておきたいです。

プロジェクトの提案もこのアドレスにお送りください。 作者のみなさんには、 ぜひその時間をとってほしいところです。 文書化作業と似ているように思えるかもしれませんが、 みなさんのプロジェクトを他の人たちに伝えるには、 よい方法なのですから。

また、 あなたのプロジェクトが十分重要かどうかは、 心配無用に願います。 実際、 少なくとも興味深い2、 3行を書くことのできないほどつまらないプロジェクトに出会ってみたいものです。

それでは来月まで、 ごきげんよう。

情報
[1] 意見、 批判や質問は Brave GNU World <column@brave-gnu-world.org> まで
[2] GNUプロジェクトのホーム・ページ http://www.gnu.org/home.ja.html
[3] GeorgのBrave GNU Worldのホーム・ページ http://brave-gnu-world.org
[4] 「We run GNU」イニシアチブ http://www.gnu.org/brave-gnu-world/rungnu/rungnu.ja.html
[5] Twinホーム・ページ http://linuz.sns.it/~max/twin/
[6] Brave GNU World - 第46号 http://brave-gnu-world.org/issue-46.ja.html
[7] C++パッケージ群 http://cholm.home.cern.ch/cholm/misc
[8] Bisonホーム・ページ http://www.gnu.org/software/bison/
[9] Flexホーム・ページ http://www.gnu.org/software/flex/
[10] LexとYaccのページ http://dinosaur.compilertools.net
[11] GNU Readlineライブラリー http://cnswww.cns.cwru.edu/php/chet/readline/rltop.html
[12] Brave GNU World - 第40号 http://brave-gnu-world.org/issue-40.ja.html
[13] Free Software Foundation Europe http://fsfeurope.org
[14] 第6次枠組制度にたいするFSF Europeによる勧告 http://fsfeurope.org/documents/fp6/recommendation.html
[15] 第6次枠組制度 http://www.cordis.lu/fp6/
[16] FSF Europeへの参加の呼びかけ http://mailman.fsfeurope.org/pipermail/press-release/2002q4/000047.html
[17] TUX&GNU@schoolコラム http://fsfeurope.org/education/tgs/

[ 前の記事 | Brave GNU Worldのホーム・ページ ]

GNUのホーム・ページにもどる。

FSFやGNUについてのお問合せ、 ご質問は、 (英語で) gnu@gnu.orgまで。
FSFへの他の連絡方法があります。 GeorgのBrave GNU Worldについてのご意見は、 (英語かドイツ語で) column@gnu.orgまで。
ウェブ・ページについてのご意見は、 (英語で) webmasters@www.gnu.orgまで。

他のご質問は、 (英語で) gnu@gnu.orgまで。

Copyright (C) 2003 Georg C. F. Greve
Japanese translation by IIDA Yosiaki

日本語訳: 飯田義朗

Permission is granted to make and distribute verbatim copies of this transcript as long as the copyright and this permission notice appear.

(著作権と上の許可告知のある限り、 この写しの逐語的な複製をとって、 配布する許可を認めます。)

Last modified: Wed Feb 5 17:49:57 CET 2003