OpenXM is a free, or Open Source, infrastructure for mathematical
software systems.
It provides methods and protocols
for interactive distributed computation and
for integrating mathematical software systems.
OpenXM package is a set of software systems that support OpenXM protocols.
It is currently a collection of software systems
`Risa/Asir` [3], `Kan/sm1` [7], `PHC` pack [8]
, `GNUPLOT`,
`Mathematica` interface, and
`OpenMath`/XML [4] translator.

We have been profited from increasing number of mathematical software systems. These are usually ``expert'' systems in one area of mathematics such as ideals, groups, numbers, polytopes, and so on. They have their own interfaces and data formats, which are fine for intensive users of these systems. However, a unified system will be more convenient for users who want to explore a new area of mathematics with these software systems or users who need these systems only occasionally. It is also wonderful for developpers to have various software components that can be used from the target system.

OpenXM provides not only data representation and communication protocols but also programming guidelines to develop cooperative applications. One will be able to concentrate on developing mathematical algorithms with such guidelines. Our design goals are (1) simpleness, (2) extensibility, (3) easiness of implementation, (4) practicality, and (5) robustness.

We believe that an open integrated system is a future of mathematical software systems. However, it might be a dream without realizability. We want to build a prototype of such an open system by using existing standards, technologies and several mathematical software systems. We want to see how far we can go with this approach.

It is not an obvious problem to consider how mathematical objects are represented and communicated. It may be similar to trying to create new mathematical symbols. We have the decimal notation to represent numbers, the symbol to represent a differential, and to represent a mapping. One should imagine how we are benefited from these notations.

In OpenXM, 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, *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 *CMO* (*Common Mathematical Object format*). Servers, which provide services
to other processes, are stack machines. The stack machine is called
the *OX stack machine*. Existing mathematical software systems are
wrapped with this stack machine. OX stack machines work in the
asynchronous mode like X servers.
OpenXM servers try to be as quiet as possible.
OpenXM server does not send messages to the client unless it is requested
to send them.

Our stackmachine architecutre can be used as the lowest level layer to implement other protocols. Emulating RPC or constructing a web server like MCP [9] on our asynchronous OX stack machines are possible.

Our datatype definition is compliant to XML architecture. OX messages can be defined by DTD and can be expressed by XML. We call it OpenXM/XML.

A system xxx complient to the OpenXM protocol is called open xxx. For example Asir complient to the OpenXM protocol is called open Asir, and kan/sm1 complient to the OpenXM protocol is called open sm1.