# Graphics Environment Manager

Graphics Environment Manager (Graphics Environment Manager) era un'interfaccia grafica creato da Digital Research, Inc. per le versioni per Intel 8088 e Motorola 68000 del suo sistema operativo CP/M e progettato per essere nativamente compatibile con MS DOS.

## Storia

Il GEM nacque come libreria grafica di uso generico denominata GSX (Graphics System eXtension), sviluppato da un gruppo capitanato da Lee Jay Lorenzen che aveva da poco lasciato la Xerox PARC, che aveva realizzato la prima interfaccia grafica della storia, quella dello Xerox Alto.
Il GSX era essenzialmente un'implementazione specifica scritta da DRI dello standard grafico GKS proposto verso la fine degli anni settanta. Il GSX era stato concepito per permettere ai programmatori di DRI di scrivere programmi grafici per qualunque piattaforma su cui girasse il CP/M, un compito che richiedeva comunque uno sforzo notevole viste le enormi differenze hardware che i vari sistemi dell'epoca presentavano a livello grafico.
Il GSX era composto di 2 parti: una selezione di applicazioni per le comuni operazioni di disegno tramite GSK, ed i driver che erano responsabili della gestione dell'output. La prima parte si chiamava GDOS e la seconda GIOS, un gioco di parole che riprendeva la divisione del CP/M in BDOS, la parte software indipendente dalla macchina, e BIOS, la parte specifica per essa.
Il GSX evolse verso un prodotto che più tardi divenne il GEM, un tentativo di realizzare una GUI completa usando il precedente lavoro sul GSX come sua base. Noto inizialmente come Crystal, un termine che riprendeva il progetto di IBM chiamato Glass, il nome fu poi cambiato in Gem, e da questo si arrivò all'acronimo inverso GEM.
Sotto al GEM, il GSX divenne il GEM VDI, responsabile delle funzionalità grafiche e di disegno di base. Il VDI aggiungeva inoltre la possibilità di lavorare con caratteri multipli ed un insieme di nuovi comandi per il disegno raster ai comandi base del GSK che gestivano solo la grafica vettoriale. Il VDI permetteva poi di gestire le viewport, o porzioni di schermo, un'aggiunta importante da usare con le finestre.
Un nuovo modulo, il GEM AES (Application Environment Services), forniva la gestione delle finestre ed i widget dell'interfaccia mentre il GEM Desktop, usando entrambe le librerie, forniva la GUI. La versione 8086 del sistema completo fu mostrata in anteprima al COMDEX del 1984. e venduta come GEM/1 dal 28 febbraio 1985

## Caratteristiche

Il GEM fu noto principalmente per essere l'interfaccia grafica utente (o GUI) della serie di computer Atari ST, anche se in seguito non rimase limitato a questa piattaforma: il GEM fu offerto anche con una serie di computer IBM compatibili realizzati da Amstrad e successivamente divenne disponibile anche per i PC IBM standard, in un periodo in cui i PC AT a 6 MHz erano appena usciti ed il concetto di interfaccia grafica era all'inizio. Il GEM fu anche il cuore di un limitato numero di programmi DOS, il più rilevante dei quali fu Ventura Publisher. Fu poi portato anche su un certo numero di altri computer che non avevano un'interfaccia grafica, ma non raggiunse su queste piattaforme una popolarità degna di nota. DRI pubblicò anche il FlexGem, una versione studiata per il suo sistema operativo real-time FlexOS.

## Versioni successive

Dopo l'introduzione del GEM, Apple querelò DRI perché l'interfaccia del GEM/1 sembrava copiata direttamente da quella del Macintosh, con alcuni elementi che ricordavano la GUI dell'Apple Lisa. Dopo una lunga disputa, DRI fu costretta a modificare alcuni aspetti base del proprio sistema e ne presentò una versione modificata denominata GEM/2: questa permetteva la visualizzazione di 2 sole finestre fisse sul "desktop" (gli altri programmi potevano comunque comportarsi come volevano), aveva una differente icona per il cestino e non presentava più le animazioni per alcune operazioni quali l'apertura e la chiusura delle finestre. Per il resto era simile al GEM/1, con in più alcuni miglioramenti estetici e numerosi bug corretti.
L'ultima versione commerciale fu il GEM/3, che presentava migliorie a livello di velocità ed era offerta con alcune applicazioni presinstallate. Le vendite del GEM terminarono con il GEM/3. Il codice sorgente del sistema venne poi distribuito ad alcuni dei principali clienti di DRI.

### Versioni personalizzate

Il GEM/4 offriva la possibilità di lavorare con le curve di Bézier, una caratteristica rara al di fuori del mondo PostScript. Questa versione fu sviluppata specificatamente per "Artline", un programma di disegno di CCP. Il GEM/4 includeva inoltre alcune modifiche al sistema di gestione dei tipi di caratteri, che lo rendevano incompatibile con le richieste di Timeworks Publisher, un software di desktop publishing creato per il GEM.
Un'altra versione del GEM, denominata GEM/5, fu prodotta da GST Computer Systems per Timeworks Publisher 2.1: essa conteneva un aggiornamento grafico con pulsanti 3D e scalatura al volo dei caratteri, ed era compatibile con tutti gli strumenti della versione 3.1. Era stata infatti sviluppata partendo dal GEM 3.13 con l'aggiunta del supporto alle curve di Bézier del GEM/4.

### ViewMax

Il GEM Desktop fu separato dal resto del sistema ed offerto come ViewMAX, che fu usato solamente come file manager nel DR-DOS. In questa forma il sistema non poteva eseguire i programmi scritti per il GEM: ciò poteva portare alla curiosa situazione in cui si potevano avere diverse applicazioni (incluso il ViewMAX) tutte con la loro copia del sistema GEM integrata in esse, cosa che comunque era abbastanza rara dato che non c'erano molti programmi GEM in circolazione.
In queste forme il GEM sopravvisse fino al momento in cui DRI fu acquistata da Novell e tutto lo sviluppo del GEM fu cancellato.

### Multitasking

Per tutto questo tempo DRI lavorò per rendere il sistema GEM capace di operare in multitasking. Ciò iniziò con l'X/GEM, basato sul GEM/1, che però richiedeva l'utilizzo di una versione multitasking del sistema operativo CP/M. Il GEM/XM fu una versione aggiornata del GEM/2 che permetteva il multitasking e poteva far girare i programmi DOS in finestre (come fanno i sistemi grafici odierni). Nessuna delle due vide però la luce, anche se il codice sorgente del GEM/XM è oggi liberamente disponibile sotto licenza GNU GPL.

### Ventura Publisher

Lorenzen lasciò la società poco dopo la pubblicazione del GEM/1, quando divenne evidente che DRI non aveva un considerevole interesse nello sviluppo delle applicazioni. Fondò perciò una propria società con un altro degli sviluppatori del GEM, Dan Meyer, creando la Ventura Software. Sotto questo nome svilupparono il Ventura Publisher, commercializzato in un secondo tempo da Xerox (ed in seguito anche da Corel), che divenne all'epoca un programma di desktop publishing molto famoso.

### Versioni Atari

Quando Atari decise di realizzare il suo computer ST, fu deciso che l'interfaccia utente avrebbe dovuto essere di tipo grafico. Fu perciò visionato il GEM in una versione per 68000 che girava sul CP/M-68K, un port del sistema operativo CP/M per la CPU Motorola. Dopo che i dirigenti Atari scelsero il GEM, fu inviato un gruppo di ingegneri presso DRI per iniziare a lavorare al porting del sistema: quel gruppo si chiamava "The Monterey Group". Ma quelle versioni per il 68000 non erano utilizzabili praticamente: erano delle demo realizzate da DRI per mostrare il suo sistema e nulla di più. Il gruppo si mise quindi al lavoro iniziando sia il porting della versione del GEM che DRI aveva realizzato per l'Intel 8086 dei PC IBM, sia del GEMDOS, un nuovo sistema operativo che era stato ideato come alternativa all'MS-DOS, a cui assomigliava molto. Fu un lavoro duro e complesso ma a gennaio del 1985 il gruppo aveva svolto molto del lavoro di porting ed il sistema operativo che ne derivò fu chiamato TOS: Jack Tramiel decise di presentare la nuova macchina con il TOS al Consumer Electronics Show.
Dato che Atari aveva svolto molto del lavoro di sviluppo della versione per il 68000, essa ottenne i diritti a continuarne lo sviluppo senza bisogno di ottenere una licenza da DRI, che apparentemente stava perdendo interesse verso le piattaforme 68000. Come risultato di questo accordo, la causa legale fra Apple e DRI non si applicava alla versione del GEM sviluppata da Atari, per cui essa mantenne un aspetto simile a quella del Mac.
Nei successivi 7 anni, dal 1985 al 1992, il TOS fu aggiornato ad ogni pubblicazione di nuovi prodotti della linea ST: gli aggiornamenti includevano il supporto per un maggior numero di colori e per risoluzioni più elevate ma restava sempre simile all'originale in termini di supporto GKS. Nel 1992 Atari pubblicò il TOS 4, o MultiTOS, insieme all'ultimo modello dell'ST, il Falcon030: il TOS 4 supportava il multitasking sotto al GEM.

### Versioni recenti

Caldera Thin Clients, nota in seguito come Lineo (una società del gruppo ora noto come SCO Group) ha pubblicato il sorgente del GEM sotto licenza GNU GPL nell'aprile del 1999. Lo sviluppo del GEM per PC è continuato come OpenGEM e FreeGEM. In seguito è stato anche portato nuovamente sull'Atari ST per essere usato sul clone libero del TOS, l'EmuTOS.

## Descrizione

Il GEM "completo" consisteva di 3 parti principali:
* GEM VDI (Virtual Device Interface)
* GEM AES (Application Environment Services)
* GEM Desktop (un'applicazione che offriva un gestore di file con supporto al drag-and-drop)
Il VDI era il cuore del sistema grafico di tutto il motore GEM: era responsabile per il disegno a "basso livello", vale a dire nella forma di semplici comandi "disegna una linea da qui a qui". Il VDI includeva un insieme di istruzioni per il disegno vettoriale indipendente dalla risoluzione dalle coordinate che erano chiamate dalle applicazioni attraverso una interfaccia estremamente semplice. Il TVDI offriva inoltre informazioni sull'ambiente (stato o contesto), sul colore corrente, sull'ampiezza di una linea, sul dispositivo di output, ecc...
Questi comandi erano esaminati dal GDOS, il cui compito era quello di inviare i comandi al driver appropriato per il rendering richiesto: ad esempio, se un particolare ambiente GEM VDI era connesso allo schermo, le istruzioni VDI erano allora girate al driver dello schermo per l'esecuzione del disegno. Per stampare si poteva semplicemente (in teoria) cambiare l'ambiente puntandolo alla stampante, riducendo drasticamente il lavoro dello sviluppatore (anche se poi la stampa doveva essere fatta "a mano" in ogni applicazione). Il GDOS era anche il responsabile del caricamento dei driver e di ogni carattere richiesto quando il GEM si avviava.
Uno dei maggiori vantaggi che il VDI offriva rispetto al Macintosh era il modo in cui i dispositivi multipli ed i contesti venivano gestiti. Nel Mac tali informazioni erano salvate nella memoria all'interno dell'applicazione: questo generava seri problemi quando si cercava di far gestire al Mac il multitasking con prerilascio dato che il livello che gestisce il disegno (QuickDraw) necessitava di avere accesso diretto alla memoria in tutti i programmi. Nel GEM VDI, invece, tali informazioni erano salvate nel dispositivo stesso, con il GDOS che creava dei "dispositivi virtuali" per ogni contesto, ovvero per ogni finestra. Questo vantaggio rimase comunque molto teorico dato che le versioni multitasking del GEM non furono mai ufficialmente pubblicate.
Il GEM AES forniva il sistema di finestre: gestiva le stesse, lo stile dell'interfaccia ed i widget della GUI. Per motivi prestazioni, molti widget della GUI erano disegnati utilizzando grafiche predisegnate: comparato al Macintosh, l'AES offriva un look molto più spartano e, inoltre, il sistema era offerto con un singolo carattere monospazio.
L'AES svolgeva i suoi compiti chiamando il VDI, ma in genere questi 2 componenti del GEM operavano nelle applicazioni in modi completamente separati: le applicazioni solitamente chiamavano i comandi AES per generare una nuova finestra, ed il resto dell'applicazione usava poi le chiamate VDI per disegnarci dentro.
Il GEM Desktop era uno dei programmi che utilizzava l'AES per fornire un gestore di file ed un lanciatore di applicazioni, l'ambiente "desktop" tradizionale che gli utenti si sarebbero aspettati dal Macintosh. A differenza del Macintosh, però, il GEM Desktop lavorava sopra al DOS (MS-DOS o DR-DOS+ sui PC, GEMDOS sugli Atari): a causa di ciò la visualizzazione era infarcita di elementi propri del DOS, come i percorsi dei file o i metacaratteri.