数式処理 J.JSSAC (2005)

Vol. 12,No.

1,pp.

51

-56

特集論文

OpenXM プロジェクトの過去, 現在, 未来
高山信毅
神戸大学
(Received 2005/06/061

Revised 2005/08/30)

OpenXM プロジェクトとはOpenXM は Open message eXchange for Mathematics （数学のための開かれたメッセージ交換）の略である．OpenXM では数学用の各種通信規約を OpenXM-RFC (OpenXM Request ForComments) として公開してきている．ここではその最初のものである OpenXM-RFC 100 の序文を引用しよう．

OpenXM は，おなじタイプまたは異なるタイプの数学プロセス間のメッセージのやりとりの規約である．開発の動機は，手作り（または研究的な）数学ソフトの相互乗り入れの実現および分散計算の実装が第一であったが，もちろん数学ソフト間だけでなく，ワープロソフトや，インタラクティブな数学本，さらには数学デジタ
ル博物館用のソフトがこの規約に従い，数学ソフトを呼び出すことなどにも利用できる．当面の目標は OpenXM 数学ソフトパッケージを作ることである．これはさまざまな数学ソフトを一つのパッケージとして簡単に好きな言語より使えるようにするプロジェクトである．現在 OpenXM.tar.gz には，Asir, sm1, PHC, gnuplot,tigers が入っている．OpenXM 数学ソフトパッケージプロジェクトに参加できるように CMO の規約を拡張していくための規約も定めるものとする．
この序文より OpenXM プロジェクトの発足当初の目的がよくわかる．現在もこの目的を中心として活動を続けており，さらに派生したプロジェクトも進めている．これについては後述する．

2 プロジェクト発足前
Asir やいろんな数学ソフトウエアをサブルーチンライブラリのように自分の書いたソフトウエ
アより利用したいというのがことのおこりであった．Risa/Asir の開発が沼津の富士フォーラムでおこなわれていたころ，私が沼津を，1996 年，1 月 19 日に訪問し，Asir_executeString()の機能を野呂さんに書いてもらって，kan より Asir を文字列で呼び出す機能およびその逆を実現したのがことの発端である．たとえば，Asir より kan/sm1 の機能を呼び出すには，c 2005 Japan Society for Symbolic and Algebraic Computation

52

数式処理 第 12 巻 第 1 号 2005

F = x; G = y;Ans = kan("(%p).

(%p).

mul toString",F,G)と入力すればよい．x と y の積が kan で解釈実行されて，結果をもどす．このレベルの結合では kan/sm1 は，内蔵インタプリタ付のライブラリとして利用できてずいぶん便利である．この関数 kan は OpenXM_contrib2/asir2000/builtin/parif.c に組み込んだ．1) Asir は PARIの関数を組み込んでいるが，この組み込みのメカニズムを利用すると容易にリンクできた．

“さまざまな数学ソフトを一つのパッケージとして簡単に好きな言語より使えるようにしたい” という問題意識は多くの人が同じ時期に持ち始めたようである．1997 年の秋に神戸インスティチュートで，“数学ソフトウエア” というワークショップを開いた際に，Arjeh M.Cohen はOpenMath を用いた Interactive book のプロトタイプについて講演した．OpenMath というのは数学データの符号化方法を研究するプロジェクトである．OpenMath の最初の開発動機は “あの計算にはこのソフト，別の計算にはあのソフト，それからデータの変換” という状態をなんとかしたい，ということであり，まさしく上のような問題意識と同様である．なお OpenMath 発足のころの話題については [4] に Arjeh Cohen 氏へのインタビューを掲載している．
同じワークショップで野呂さんと私の共同で OpenXM-RFC 100 のプロトタイプについての講演をおこなった．こちらは Asir がすでにもっていた RPC (Remote Procedure Call) の考え方による分散計算の通信規約と kan/sm1 が実装していたフロントエンドのサーバとして動作させる機能を汎用化した規約である．OpenMath というプロジェクトがすでに存在しかなり深いところまで到達していることを知ったので，われわれのプロジェクトで差別化をはかれるのはどういった部分だろうか? ということを考え議論した．結論からいえばボトムアップアプローチつまり実装の試行錯誤から設計を固めていくという方法で差別化しようということになった．したがってOpenMath はデータの符号化方法について深く研究する方向に進んだが，われわれは，計算の中断，サーバの起動，効率的データの送受信方法，RPC による木構造の通信ネットワーク，ノード間通信を取り入れ，HTTP 上での通信など，広い範囲を研究することとなった．

Mathematica による MathLink も似た研究方法を用いたシステムの構築のように見える．MathLink と OpenXM の比較は [3] を参照．

3 バージョン 1.1 — 初めての OpenXM パッケージ
前節で述べたような実験実装をもとに OpenXM-RFC 100 通信規約を書いた．これはスタックマシンとみなすことができるサーバを RPC を用いて木構造の通信ネットワークでむすぶ通信規約である．数や文字列やリストそれから再帰および分散表現の多項式をやりとりすることが可能である．詳しくは http://www.openxm.org [1] においてある仕様書に記述してある．
通信規約の実装実験として，（そのころ博士課程の学生だった）田村恭士君が Java のライブラ
リを (OpenXM/src/OpenMath)，小原功任君が C のライブラリ（OpenXM/src/ox_toolkit）および MathLink とのラッパーインタフェースを書いた．さらに kan/sm1 の通信ライブラリを高山が，それから Risa/Asir の通信ライブラリを野呂が書いた．これら 4 つの別々の実装を書きそ
1) 以下 OpenXM_contrib2/asir2000 や OpenXM/src はソースのディレクトリを表す. [1] の cvsweb より参照可能.

J.JSSAC Vol. 12, No. 1, 2005

53

れらをもちいて通信の実験をおこなったのである．結果はプロトコルに小修正は必要なものの良好であった．
なお，そのころ FreeBSD で活躍していた前川将秀君（4 年生）が OpenXM 全体の cvs での管理を提案し，運用をおこなってくれた．またそのころ都立大学の博士課程の学生だった荻野君
が Ruby とのインタフェースを書いてくれた．また修士 2 年生の奥谷君は OpenXM を活用したAsir のライブラリをいくつか書いた．これが現在の asir-contrib の起源である．
このように多くの人の協力のもと各種ソフトをつなぎ発表したのが 2000 年の OpenXM パッケージ 1.1.1 である．9 月には 1.1 系列の最終版である 1.1.3 を発表した．

1.1.3 については，OpenXM-RFC 100 の計算のモデルは何かをはっきりさせて，論文を愛媛で開かれた ASCM 2001 で発表した．

4 バージョン 1.2
2000 年の 1.1 系列の完成とともに，OpenXM プロジェクトはそれを基礎としていろいろな方向への展開をはかることとなる．
まず取り組んだのは，このアーキテクチャで Windows の上で OpenXM を動かす課題である．実際 OpenXM では シグナル，TCP/IP socket，ssh 等 UNIX 由来の仕組みを多用しており，Windows で動かすのには不安があった．Asir に関しては野呂が Windows のスレッドでシグナ
ルのエミュレーションを行い OpenXM への対応をおこなった．もうひとつのアプローチとしてCygwin を用いた UNIX エミュレーションによる OpenXM の動作を試みた．Asir 以外のコンポーネントはこちらのアプローチを用いることとなった．Cygwin も asirgui と似たアプローチのスレッドを用いてシグナルをエミュレートしている．Cygwin を用いる方法は悪くないのであるが一つだけ欠点がある．それはファイルの入出力が極端に遅くなることである．この欠点は現在にいたるまで解消されていない．なお Cygwin 版の OpenXM サーバは，福岡教育大の藤本光史氏により InftyEditor の計算エンジンとして活用されることとなった．

1.2 で取り組んだ二つ目の課題は OpenXM パッケージで超幾何関数に関する統合的な数学ソフトウエアを記述することである．ボトムアップな研究方法をとる以上，パッケージを活用するよい例題がないといけない．そこで選択したのが超幾何関数である．理由は私が超幾何関数の専門家であるという以外に，超幾何関数の計算には，代数，幾何，数値解析，可視化などさまざまな要素が関連しており，OpenXM パッケージの応用としてとてもよい例題であろうということとなった．
以上の成果は 2002 年の 3 月に愛媛で開かれた Risa Consortium 研究集会で発表した．
さて，OpenXM-RFC 100 を用いたコンポーネントベースのシステムには小さな不都合がいろいろと見つかった．これらを改良する OpenXM-RFC が OpenXM-RFC 101，103 である．100 ではサーバの立ち上げ方法が複雑であるが，それを ssh を援用しつつ簡潔にしたのが OpenXM-RFC

101 である．これは小原氏が規格をきめて，oxc という試験実装を書いた．また 100 では中断プロトコルを定義しているが，それがプロセスの木構造の中をどのように伝播していくかを定義していない．これをきちんと定義したのが，OpenXM-RFC 103 である．現在 OpenXM/Risa/Asir-contrib ではエラーや計算の割り込みが生じたときこのプロトコルを用いて中断メッセージを伝54

数式処理 第 12 巻 第 1 号 2005

播している．詳しくは OpenXM/src/asir-contrib/packages/src/oxrfc103.rr を参照．

1.2 関連でもう一つの特筆すべき出来事は，ディジタル数学公式集への取り組みであろう．これは田村君が博士論文として取り組んだ課題で，また私や他の院生の中山君，長谷川君，東堂君が関連の問題にいろいろと取り組んだ．われわれのディジタル数学公式集では超幾何関数の公式集積を念頭において公式集作成支援システムを開発した (OpenXM/fb)．このように公式集積の問題を考えると，OpenXM-RFC 100 で導入したようなデータ交換形式 CMO (Common MathematicalObject Format) では記述能力が不足しており，OpenMath XML 表現を全面的に採用した．もちろん超幾何関連の Content Dictionary （CD，記号の意味を自然言語を用いて定義したもの）はなかったので，自分たちで作成して OpenMath に寄贈した．OpenMath XML は書くのが煩雑なので作成した簡易表現方法が tfb である．また公式の入力作業は単調でつまらないので，数値検証システムを導入した．公式を入力したあと，数値検証システムにかけるとエラーがありそうだと警告してくれる． 実際に運用してみるとこのシステムのおかげて随分と入力作業が楽しいものとなった．数値検証システムでは OpenXM パッケージがフルに活用されることとなった．
さて野呂氏は MPI の上で並列動作する Asir を 1990 年代の終わりから動かしていたのである
が，MPI の特徴は木構造とは限らない通信ネットワークを持つ分散処理で高速化を図れることである．MPI なしで，木構造の通信路をもつプロセスにさらに好きな通信路を加えることができるようにし，また同報通信，データ集積を高速におこなえるようにしたプロトコルが OpenXM-RFCs

103 である．これは MPI の特徴を抽出したシステムと理解していいであろう．Asir に試験実装されているが，まだあまり応用例がないのが残念である．

2003 年の 2 月には小原氏の勤務地の（冬の）金沢で第 2 回の OpenXM Committer’s meeting を開催した．このとき福岡教育大の濱田氏が KNOPPIX/Math の試作品を紹介した．KNOPPIX/Mathは OpenXM パッケージの紹介には最適のメディアだと思い KNOPPIX 対応のパッケージの開発もすすめ 1 年後の KNOPPIX/Math 2004 の発表にあわせ，TeXmacs をフロントエンドとした新しい OpenXM パッケージを KNOPPIX/Math に収録していただいた．

5 バージョン 1.3 と web 技術との融合バージョン 1.3 の目的の一つは web 技術と OpenXM を融合していくことである．現在 OpenXMプロトコルを HTTP にのせる実験を行っている．例によりボトムアップアプローチなので，グレブナ扇の計算問題をこのような計算方法の実例としている．1.3 系列は現在進行中なので今回は割愛する．

6 将来の課題
以上述べたこと以外にも多くの人の寄与により成立しているのが，OpenXM プロジェクトである．すべての寄与に触れられないのが残念だが詳しくは OpenXM のウエブサイト [1] をご覧いただきたい．また 2005 年の 3 月には OpenXM キャラクターのいのぶた君のぬいぐるみも登場した．詳しくはホームページで公開予定．
歴史を振り返ったことで今後の課題もより明らかになるものである．ここでは思いつくままに今後の課題を簡単に記しておきたい．

J.JSSAC Vol. 12, No. 1, 2005

55

(1) 文書との融合．たとえば KNOPPIX/Math の OpenXM パッケージでは入門的な文書と計算システムの融合をはかるべきあろう．KNOPPIX/Math は新しいシステムの紹介という側面を持つからである．これは Interactive book に通じるものがある．これを実現するには HTML 形式の文書を活用する方法以外に INRIA で作られた Active-DVI ( \usepackage{advi} ) の活用なども試みられていいだろう．現在 MEGA 2005 に出席中でこの空き時間にこの文章を書いてるのであるが，MEGA 2005 の電子版 proceedings を KNOPPIX と Active-DVI を活用して作る予定だと Carlo Traverso が説明していた．このとき初めて Active-DVI のことを知った次第である．

(2) 現在 Interactive algorithm annimation の試みが，院生の中山君と桑原君と共に進められている．この開発にはいろんな動機があるが，ボタン一発型の計算システムに対する反省も一つの動機である．たとえ話をすればボタン一発型の計算は，自動車で観光地を回ることに対応し，すべて手計算ですませるのは，すべて歩いて旅行するのに対応する．私は自動車と歩くことを混ぜたような，好きな場所で歩くことを楽しめるような新しいスタイルの旅行に魅力を感じるが，数学ソフトウエアシステムも同様ではないかと思っている．また理解できたという充実感を感じさせる数学ソフトウエアシステムをなんとか作れないかという夢がある．

(3) もちろん OpenXM は地道な作業 (雑用プログラミングという隠語も誕生) の集積である．
しかしこのプロジェクトはそれが本質かもしれない．それを列挙しておく． Web 技術との融合の続き．対応サーバを増やしていく．OpenXM によるコンポーネント技術を用いた数学ソフト
ウエアシステムの試作品としての Risa/Asir/Asir-contrib を充実していく．画像や音などのデータの取り扱い． CD の整備． 公式の蓄積と公式の変形など．超幾何パッケージの充実とプロト
コル設計へのフィードバック．フロントエンド．などなど．まだまだ道のりは長い．

参 考 文 献[1] http://www.openxm.org[2] Masahide Maekawa, Masayuki Noro, Katsuyoshi Ohara, Nobuki Takayama, YasushiTamura, The Design and Implementation of OpenXM-RFC 100 and 101, The proceedings ofthe Fifth Asian Symposium on Computer Mathematics (ASCM 2001), edited by Shirayanagi
and Yokoyama, World Scientiﬁc, 102–111, 2001.
[3] M.Noro, A Computer Algebra System : Risa/Asir. Algebra, Geometry and Software Systems,edited by M.Joswig and N.Takayama, Springer, 2003, 145–159.
[4] 高山信毅，ディジタル数学公式集の現状と未来，情報処理，2004 年 7 月号．

56

数式処理 第 12 巻 第 1 号 2005

年

2000 年以前
2000 年 1 月
2000 年 3 月

OpenXM

外の世界の出来事 (月はづれてます)

試験実装 (1997)

OpenMath がスタート (1994)

1.1.1 (January 24, 2000):最初の実験版．

1.1.2 (March 20, 2000):

XML がだんだん盛んにSOAP 1.1 (May 8, 2000)

とりあえず使える版．

1.1.3 (September 26, 2000):
1.1 系 の 最 終 版 ．OpenXM-RFC
100 形式 のプロセス木．1077 個の2000 年 9 月

数学関数を提供．提供しているサーバは ox_asir，ox_sm1，ox_phc，ox_gnuplot，ox_m2，ox_tigers，ox_math(Mathematica)，OMproxy.
2001 年 2 月

MathML 2.0 (Feb 21, 2001, recommendation)
1.2.1 (March 2, 2002): Cygwin

2002 年 3 月

2003 年 5 月

2004 年 7 月

2005 年 2 月(Windows) へ の 対 応 開 始 ．マ ニ
Monet プロジェクトがスタート (April 1, 2002)
ュ ア ル 自 動 生 成 (gentexi) な ど ．
RFC101．
1.2.2 (May 13, 2003):
IAMC の実装や Monet 等 web を
RFC102，RFC103（部分的），auto基礎としたアプローチが実装としconf ，OpenXM/fb, Digital formulaて形をなしてきた ( IAMC2003 でbook, OpenMath, tfb, 超幾何関数やの発表 ).
微分作用素用の CD, 数値計算．
OpenMath 2.0 (July 16, 2004)
1.2.3 (February 10, 2005):
RFC 104 (部分的 web 対応). polymake サーバ等，asir-contrib の充実， WSDL 2.0 (Aug 3, 2005, working draft)
KNOPPIX への対応が軌道に乗る．

図 1: 年表