% $OpenXM: OpenXM/doc/ascm2001p/design-outline.tex,v 1.6 2001/06/21 03:13:35 takayama Exp $

\section{Design Outline and OpenXM Request For Comments} 

As Schefstr\"om\cite{schefstrom} clarified,
integration of tools and software has three dimensions:
data, control, and user interface.

Data integration is concerned with the exchange of data between different
software or same software.
OpenMath \cite{OpenMath} and MP (Multi Protocol) \cite{GKW} are,
for example, general purpose mathematical data protocols.
They provide standard ways to express mathematical objects.
%For example,
%\begin{verbatim}
% <OMOBJ>  <OMI> 123 </OMI> </OMOBJ>
%\end{verbatim}
%means the (OpenMath) integer $123$ in OpenMath/XML expression.

Control integration is concerned with the establishment and management of
inter-software communications.
Control involves, for example, a way to call subroutines on other processes
and a method to interrupt computations on servers from a client.
RPC, HTTP, MPI, PVM are regarded as a general purpose control protocols or
infrastructures.
MCP (Mathematical Communication Protocol)\cite{iamc}
and OMEI \cite{omei} are such protocols for mathematics.

Although data and control are orthogonal to each other,
the real world requires both.
NetSolve \cite{netsolve}, OpenMath$+$MCP, MP$+$MCP \cite{iamc},
and MathLink \cite{mathlink} provide both data and control integration.
Each integration method has its own features determined by its
own design goals.
OpenXM (Open message eXchange protocol for Mathematics)
is a project aiming to integrate data, control and user interfaces
started by Noro and Takayama.

Noro has been involved in the development of 
a computer algebra system Risa/Asir \cite{asir}.
An interface for interactive distributed computations was introduced
to Risa/Asir in 1995.
The model of computation was RPC.
A robust interruption protocol was provided 
by  two communication channels like ftp.
As an application of this protocol,
a parallel speed-up was achieved for a Gr\"obner basis computation
to determine all odd order replicable functions 
(Noro and McKay \cite{noro-mckay}).
Takayama has developed
a special purpose system Kan/sm1 \cite{kan},
which is a Gr\"obner engine for the ring of differential operators $D$
and which was designed as a component of larger systems. 

Noro and Takayama first tried to integrate these existing two
software systems.
We believe that an open integrated system is a future of mathematical
software.
However, we found that it might be just a dream without realizability
and that it is an important research subject to
build a prototype of such an integrated system. % Project X
With these experiences, we started the OpenXM project with the following
fundamental architecture, which is currently described in
the OpenXM-RFC 100  proposed standard %% ``draft standard'' and ``standard''
\cite{ox-rfc-100}.
\begin{enumerate}
\item Communication is an exchange of messages. The messages are classified into
three types:
DATA, COMMAND, and SPECIAL.
They are called OX (OpenXM) messages.
Among the three types,
{\it OX data messages} wrap mathematical data.
We use standards of mathematical data formats such as OpenMath and MP
as well as our own data format {\it CMO}
({\it Common Mathematical Object format}),
which can be expressed in terms of XML.
\item Servers, which provide services to other processes, are stack machines.
The stack machine is called the
{\it OX stack machine}.
Existing mathematical software systems are wrapped with this stack machine.
Minimal requirements for a target software wrapped with the OX stack machine
are as follows:
(a) The target must have a serialized interface such as a character based
interface.
(b) An output of the target must be understandable for computer programs;
it should follow a grammar that can be parsed with other software.
\item Any server may have a hybrid interface;
it may accept and execute not only stack machine commands, 
but also its original command sequences.
For example,
if we send the following string to the {\tt ox\_asir} server 
(OpenXM server of Risa/Asir) 
\verb+" fctr(x^100-y^100); "+ 
and call the stack machine command 
\verb+SM_executeStringByLocalParser+
then the server executes the asir command 
\verb+ fctr(x^100-y^100); + 
(factorize $x^{100}-y^{100}$ over ${\bf Q}$)
and pushes the result onto the stack.
\end{enumerate}
OpenXM package  implements the OpenXM-RFC 100 \cite{ox-rfc-100}
and 101 \cite{ox-rfc-101} based on
the above fundamental architecture.
In this paper, we mainly discuss systems implementing
OpenXM-RFC 100 and 101 on TCP/IP.
%For example, the following is a command sequence to ask $1+1$ from
%the Asir client to the {\tt ox\_sm1} server through TCP/IP:
%\begin{verbatim}
%  P = sm1_start(); ox_push_cmo(P,1); ox_push_cmo(P,1);
%  ox_execute_string(P,"add"); ox_pop_cmo(P);
%\end{verbatim}
%Here, {\tt ox\_sm1} is an OpenXM server of Kan/sm1.

Our project of integrating mathematical software
systems is taking the ``RFC'' approach, which has been
used to develop internet protocols.
The OpenXM on MPI \cite{MPI} is currently running on Risa/Asir
as we will see in Section \ref{section:homog}.
We are now preparing the OpenXM-RFC 102 ``Mathematical communication
on MPI'' (draft protocol).
In the rest of the paper, we abbreviate
OpenXM-RFC 100 and 101 to OpenXM if no confusion arises.




