The overall goal of the COSMOS software design is to create a unified set of software elements that fulfills the following roles:
To achieve the above goals, the COSMOS development team has both adopted, and defined a set of rules to govern the development process. The purpose of these rules is to constrain development along relatively straightforward pathways, while retaining the flexibility needed to achieve the desired goals. For the purposes of this section, these rules will be divided into the three broad categories of Type, Function, and Protocols and Standards. Type will describe the various levels of software development that will be provided within COSMOS. Function will describe the functionality addressed by each software element. Finally, Protocols and Standards will list the protocols and standards we plan to embrace as necessary to COSMOS.
The COSMOS software should be roughly envisioned as four levels of software, progressing from the rudimentary to the most complex. At the most basic level is the Foundation layer. This consists of a large number of support routines upon which the higher layers can be built. These routines provide the basic functionality as detailed below. The next two layers, Programs and Agents, are roughly parallel. Both build on the Foundation layer to provide more advanced functionality. The main difference is that Programs are one-shot deals that perform their function and exit, while Agents are persistent, communicating with the rest of the world to receive their orders. The fourth layer is Tools. Tools will incorporate both Foundation layer functions, the launching of Programs, and communications with Agents to perform complex functions in direct interaction with humans.
The COSMOS software will have to provide a large amount of functionality, some of which is not yet fully defined. However, the COSMOS development team has initially identified certain key areas of function that will be absolutely necessary. Those already identified are listed below:
COSMOS is first and foremost a Unix-based package. In respect of this, and the desire to have as much control over the software as possible, the Foundation layer and all Programs and Agents will be written in POSIX compliant C. In order to support the various upper level elements that will require C++, all code will be compiled against the GNU G++ compiler. This will not preclude the introduction of libraries written in FORTRAN, where unavoidable. In addition, support for Java will be investigated in later phases.
Although Unix will be the primary Operating System platform, we desire to support other platforms as well. In particular, modifications will be made, where necessary, to allow the Foundation code to compile and operate on the latest version of Windows 7 and MacOS 10. Programs and Agents will be supported in these operating systems where possible. Tools are created in the Nokia QT GUI environment3 and therefore have the potential of running on any environment supported by QT.
Communications are through standard RS-232, USB and Ethernet. More specifically, a SLIP protocol with a 16bit CRC appended to each packet is used for any Serial interactions. Standard IP protocols are used for all Ethernet interactions; only UDP based protocols are used for Earth/Space communications. Specific protocols will be adopted as appropriate. Protocols that have already been identified include: