Marcelo de Paiva Guimarães paiva@lsi.usp.br
and Bruno Barberi Gnecco brunobg@lsi.usp.br
 
Glass is a new library for distributed computing. It’s a flexible solution, in which all functionality is provided by plug-ins. It was designed from scratch to be a simple, efficient solution for real time distributed computing. This way games, scientific and educational applications can run easily in a graphic cluster using CAVEs, Panoramas and PowerWalls to display the results.

Virtual Reality applications running in a graphic cluster have specific requirements that include: low delays, fast synchronization, high bandwidth, etc. Not all available APIs for distributed computing fit these requirements. And those that do are usually too specific: they target multiprojection, for instance, not giving much importance to the underlying computational process — such as physical simulation, real time computation of geometry, etc. They usually provide good resources for graphic rendering (such as scene graphs).

The available frameworks require rewriting the existing code, since it has to be adapted to the new programming paradigm. Legacy code may take a good amount of time and effort to port, and the result is often unsatisfactory. Glass was designed to fulfill this gap, being based on the following principle

· Portability and interoperability: distributed computing is everyday more heterogeneous. The library can not only run in different architectures (Personal Computers, PDAs) and operating systems (Linux, Irix, Windows), but interoperate among them.

· Extensibility and flexibility: Glass is easy to extend, not requiring API changes or even recompilation. This way it can be kept up-to-date with the latest technologies and be able to solve specific needs of users.

· Easy to use, fast learning curve: distributed computing APIs tend to be complicated, requiring a lot of time to understand and master. Most libraries provide a huge number of functions, many of them with a high number of arguments. They are hard to learn and remember. Frameworks require a new approach to the programming, and therefore have a steep learning curve. Glass aims to be easy to use, being almost transparent to the user: that’s where its name comes from.

· High performance: if an application requires distributed computing, it’s because it has a high computational cost.

· Network protocol independency: an abstraction of the underlying network protocol makes Glass protocol independent. You can use TCP, UDP, or even more high-level systems such as MPI easily. Just instantiate the proper network class. This is very important in a world where applications have hugely different network requirements.

· Reliability and fault tolerance: any distributed computing library must be reliable and fault tolerant. It’s unacceptable that failure of a single node crashes the entire computational system. Glass provides fault tolerance automatically.

· Thread safety: many APIs are note thread safe. This forces the user to find workarounds or use other solutions instead place of threads. Glass works in thread applications seamlessly.

Glass is completely written in C++. The choice was due to its wide number of compilers and spread use, good performance, and certain features that would make programmer’s life easier (such as OO and templates). C++ is easy to interface with C, Java and other languages.

A core provides all internal functionality, such as the network system, plug-in management, node management, etc. The developer is completely oblivious to this core

 
  Laboratório de Sistemas IntegráveisEscola Politécnica