Traditional multiplayer games have been based on a peer-to-peer model. In this, each player in the game acts as a "peer". This relies on modelling the game world as a deterministic system. The only unpredictable input, therefore, is the input of the players into the game. Each peer transmits the player's input to the other peers. In this way each peer receives the same input and is "syncronised" to the others.
This has the advantage of being a very simple system to implement. However, it has a number of disadvantages:
The Client-Server model solves many of the problems inherent in the Peer-to-Peer model. In the Client-Server model, the game world exists in a server process, and the players send their input into this world from client processes, usually over a network connection. The server sends updates about the state of the game world to the client processes.
Implementing an efficient client-server multiplayer engine is a difficult task. Most games implement a complete engine from scratch. The Irmo library aims to be a generic multiplayer engine which can be used as a base for many different types of multiplayer games and easily extended.
Another common theme in many modern games is that of extension languages. Many games use a high level extension language to describe the game logic while using a lower level language such as C to perform operations such as graphical rendering. Examples of this are Quake's "QuakeC" language and the AisleRiot solitaire game's use of the Guile extension language.
While providing client-server functionality, Irmo also aims to provide cross-language abstraction such that the server can be written in a high level language with the client written in a lower level language. For this reason, a language binding already exists for the Ruby scripting language. Bindings are planned for other high-level languages.