Andrea Project

Andrea was a project imagined by me toghetger with my friend and colleague Dragos Acostachioaie, during our fist years of college (1998). We explored the possiblity of a distributed, object-oriented graphical user interface (GUI), using a client server architecture. For many reasons, the most important being the lack of time for coding (we were both students and employed), this project never materialized and remained only in theoretical stage and in our minds.

In 1998, this project was presented at Development and Application Systems Conference, hosted by Stefan cel Mare University of Suceava (Romania). The paper was inluded in the official book of the conference and it is my first (and to the date the only) published paper (ISSN 1222-7234, pages 33-42).

With this paper I have concluded that I will not become a researcher. My nature towards real work applications led my steps towards administration of computer systems and network. Later on, this path led me towards a career in operational management of information systems. Dragos eventually publised several books about Linux and teaches Computer Science at Computer Science Faculty, Alexandru Ioan Cuza University of Iasi (Romania EU).


Andrea
A Distributed, Object-Oriented Window System

by Radu Filip and Dragos Acostachioaie
1998

Abstract

Nowadays, nobody can concept a complex and powerfull application without a user interface. Born in 1980 at Xerox Parc, the idea of user interfaces was popularized by Apple which developed and marketed Lisa and Macintosh, in 1984. It was followed by X Windows, NextStep, OpenLook, and so on.

In the near future, computers will learn to hear, to talk, to understand. But as long as 80 percent of the information received by the human being is performed through eyes, we'll need visual informations, by user interfaces.

This is about a new window system for UNIX platforms we start working at, in the first place, and about computer networks in second.

1. Introduction

What makes Andrea something different than other window systems? We'll try to answer to this question below. But first, let's take a short look through well known user interfaces.

For years, we work on different systems, with different GUIs such as Solaris, X and infamous Windows. Some of these have some qualities, some have others. But all these have some limits too. And these limits can be very irritating for people who love freedom, who like to experience, who want to adapt a GUI to his needs, not to adapt himself to the needs and restrictions of a GUI.

And how must a user interface look like? Like Windows'95? Like Motif? Like OS/2 or Apple System 7? What is better? None is better! Old greeks said that "colors and taste cannot be discussed". This is the reason for which no GUI's aspect will not became universal.

And what programming model must be considered at the base of a complex software, such as the user interfaces are? Could be the classic one, where all is written in standard structured programming and where applications use a number of documented functions and structures, called API. The problem is that any change in a routine inside API consists in a change in all existing applications, or in increasing the complexity of GUI, because for a single feature there are several functions that perform it (try to think of X Window color handling). It is no the goal of this paper to discuss about the structured programming versus object-oriented programming. But we consider that it is obsolette to develop a window system using structured programming and to develop an application using such a system, especially at the end of '90.

The last years showed us that the world of tommorow will be the world of networking. In a world like this, a non-distributed application is a dead application because, as Sun has already shown us, computer is the network itself. Java applications reduce the cost of human, material and financial resources by centralizing the administration and technical support. With classic GUIs nothing is changed because every workstation needs to be setup and maintained, with a single notable exception: the X Window System. It's true that there are some tentatives to implement graphic environments based on network, like Netscape Constellation, Sun HotJava Views and TriTeal SoftNC, but these are based on non-conventional solutions.

All these considerations, limits, restrictions and facts lead us to the idea that it is possible to design and develop a new graphical user interface that embeds in it as many possible features of classic window systems, to have a very high level of flexibility and to be poor in limits, both on user and programmer side.

2. Design & implementation

2.1. Concepts and features

Let's take a look at how premises and concepts became features in Andrea:

2.2. Architecture of Andrea

The Andrea Window System has two main parts:

  1. Server side, which consists in several services like object management, graphic aspect control, fonts and images handling and others.
  2. Client side, platform dependent, which runs on the local machine and controls the user inputs and outputs. It provide device drivers and graphic libraries.
  3. A third part exists, the Applications side. This part consists in Andrea applications and this applications can run on machines different than server machine and client machine. But this side is not a part of Andrea System itself, except Andrea Client, discussed bellow.

These three entities are communicating using different channels. All of them are running from different machines, network transparent. This way, Andrea is a distributed system.

The following picture present the architecture of Andrea Window System:

[Andrea Architecture]

2.3. Describing Andrea

Even Andrea has a client-server architecture, client and server are not monolithic applications. Both client and server consists in small applications wich perform particular, well defined tasks. This tasks communicates one with other (see figure), and all of them are independent processes. This approach enable a high level of flexibility and diversity, because, users can choose any service (except the main server) in same way he can choose desired wallpaper image on classic GUIs. All of this services will always perform the same taks, but in different ways. Interfaces between services will be always the same and will be controled by the authors of Andrea for portability and more important, for compatibility reasons.

But this micro-kernel (or micro-server) architecture allows and encourages developers to write more services for the same task, so the final user has possibility to choose anytime the one he wants. More than this, the maintance of the whole system will be more easy.

2.3.1. Component parts

2.3.2. An example

In a classic, etherogenous LAN, an usual situation of using Andrea Window System is suggested by the picture below:

[Andrea in a classic etherogenous LAN]

2.4. What things are fixed

From freedom to anarchy it is a very short distance. That is the reason because allways will exists things impossible to change or customize. But these restrictions must be as less minimum as possible. In Andrea there are few fixed things too:

3. How it works, anyway?

A common session of working with Andrea is described as follows. First, let's suppose that Andrea is used in a network because working on a single computer is not different like common GUIs. Second, let's name Server and Aspect Manager machine A, user machine B, and machine with applications C.

After network admin comes to work, he turns the computers on. On machine A he starts Andrea Server which is a daemon process. Andrea Server will wait for a request for connections from one of Andrea Clients on the net. Then a user login on machine B (network configure does not matter) and at prompt line start Andrea Client. Andrea Client determines from local configuration file the address of default Server and sends a connection request message to it. Andrea Server receives these requests and performs the following opperations:

All drawing opperations are executed sending messages to loaded Aspect Manager. It will send forward to the Desktop the proper graphics primitives to perform the drawwing message.

Then the user presses keys and handles mouse in two purposes:

In the first case, Andrea Server determines from coordonates of mouse pointing or from pressed keys what application is desired and starts it. The application will create a window and several other objects (menus, buttons, etc). At the moment of creating each object, object's constructor sends to Server its properties. Server receives these properties and creates a similar object. Then it determines the object position and sends to Aspect Manager the information needed to draw it (graphic context). As a result, Aspect Manager will send to Desktop one or many graphic primitives that describe how to draw the object.

In the second situation, the user wants to handle the existing objects, moving a window for example, pushing a button, or displaying a menu). His commands will be received by Andrea Server too and this will determine the object it is addressed to. Then modifying it's state, will:

When the user wants to exit, he kill the Desktop. Andrea Desktop will send a disconnect request to Andrea Server. Andrea Server receives that request and performs the following operations:

4. Why use Andrea?

Users will benefit because:

Programmers will benefit because:

Network administrators will benefit because:

5. About authors