Je n'ai pas demandé la permission à Steve Mann de traduire en français cet article, mais je lui fais des louanges, alors... voici la référence originale (http://www.pencomputing.com/Content_Developer/geos_introduction.html) où vous pourrez trouver la version anglaise, écrite par Steve Mann pour le journal Pen Computing, que j'achète régulièrement avec plaisir. J'ai parfois un peu dévié de la traduction mot à mot pour garder le sens général et aussi pour préciser certaines choses étant donné le temps qui a passé depuis 1996. *** Une introduction au système d'exploitation GEOS *** par Steve Mann, Pen Computing, février 1996 traduit de l'anglais par Philippe Dallemagne (extrait de Pen Computing n° 8 de février 1996). GEOS est le fameux et mythique système d'exploitation orienté objet. Il est conçu pour fonctionner sur ce qu'appelle Geworks les dispositifs informatiques grand-public (DIG), ou encore "Consumer Computing Devices" (CCDs) en anglais. On pense d'abord aux "PDA" (assistants personnels numériques), mais Geoworks en donne une définition plus large que les autres sociétés. Les DIG ne sont pas seulement des dispositifs mobiles, mais aussi des téléphones, des machines à écrire, des télévisions interactives, des décodeurs de bouquets satellites, etc (NDT : Geoworks avait vu juste si on regarde le marché que veut tenir Microsoft avec .NET). Les DIG sont différents des autres dispositifs informatiques car : - ils sont équipés d'une seule puce, - ils présentent un grand attrait pour l'utilisateur, - ils ont besoin d'un système d'exploitation compact haute-performance qui peut être adapté à de nombreux environnements. Le dernier point élimine beaucoup des concurrents de Geoworks. La première version des produits GEOS fonda la base de Geoworks Ensemble, un intégré pour les PC, sorti en 1990. En 1992 est apparu la version 2.0 du système et de la plupart des applications, qui ont été utilisés sur au moins cinq (NDT : sic) dispositifs grand-public : le Casio/Tandy Zoomer, la Canon StarWriter Pro 5000, le système éducatif IBM Eduquest et le HP Omnigo 100. GEOS est principalement écrit en assembleur x86 orienté objet. Ceci permet à Geoworks de satisfaire au besoin de compacité et d'efficacité du système. Ses éléments de base (incluant le noyau, l'interface utilisateur, les pilotes et les bibliothèques standards) tiennent dans moins de 2 Mo. Le Zoomer est équipé de 4 Mo de ROM qui contiennent les 18 applications, le système d'exploitation GEOS, un moteur de reconnaissance d'écriture, et de 1 Mo de RAM pour leur exécution, laissant également 350 Ko à disposition de l'utilisateur. Dans l'OmniGo 100, GEOS et les applications livrées tiennent dans 3 Mb de ROM. (NDT : j'ai plusieurs Zoomer et d'autres trucs du genre et je peux dire que le Zoomer reste une référence, notamment par la qualité des applications de base, qui ont été écrites par une société qui s'appelait Palm Computing - avec son palmier et sa musique hawaienne - qui est devenue ensuite Palm...) * L'architecture système de GEOS GEOS a été conçu depuis le départ comme un système orienté objet. Toutes les entités GEOS sont créées comme des objets uniques qui interagissent entre eux en envoyant des messages. Chaque instance encapsule ses données propres, mêmes si plusieurs instances ont aussi la possibilité de partager des zones mémoires. GEOS est basé sur une hiérarchie de classes à héritage simple. Cela aide à maintenir la mémoire nécessaire dans des proportions réduites. Les messages qui ne peuvent pas être traités au niveau courant de la hiérarchie sont passés au niveau supérieur de l'arborescence. The système offre un type de classe spécial, appelé "variante" (NDT : à mon avis une espèce de mélange de "templates" et de méthodes virtuelles non implémentées) qui forme un élément essentiel de la hiérarchie de classes de l'interface utilisateur. Une variante ne connaît pas a priori sa super-classe avant d'être exécutée, au moment où la classe est instanciée. Sa super-classe peut également changer au cours de l'exécution, ce qui fournit (NDT : partiellement à mon avis, mais de toute façon l'héritage multiple n'est incontournable) la même fonctionalité que l'héritage multiple. Notez que seules les classes peuvent être variantes, pas les objets (NDT : instances). GEOS est un système multi-tâches et multi-threads. Multi-tâches indique que plusieurs applications peuvent fonctionner simultanément. Par exemple, vous pouvez imprimer et faxer en même temps. Multi-threads signifie que chaque application peut avoir plusieurs fils d'exécution parallèles, appelés "threads". Par exemple, un tableur peut avoir un thread de calcul en tâche de fond et un thread chargé d'interagir avec l'utilisateur. Chaque thread possède une priorité de base, fixée par l'application, et une priorité courante, fixée par le noyau. Il y a deux modèles de threads par défaut : - le modèle mono-thread pour les programmes simples et rapides, - le modèle bi-threads pour les applications présentant des objets d'interface utilisateur, qui sont alors placés dans un thread à haute priorité. Ce modèle est utile pour les applications dont les opérations sont supposées longues, permettant ainsi, malgré tout, à l'utilisateur de pouvoir interagir avec l'application. De plus, une application peut se voir ajouter des threads au cours de son exécution. Ces threads sont classés selon leur rôle, sensibles aux événements, répondant à des messages (stockés dans la file d'événements du thread) ou procéduraux. * La gestion de la mémoire Le mécanisme utilisé par GEOS pour la gestion de la mémoire est proche de celui du Macintosh, basé sur les "handles", avec quelques nuances pour s'accorder avec les caractéristiques matérielles d'addressage mémoire des processeurs x86. La mémoire est allouée dans un tas (heap) global par blocs mobiles de 16 à 64 K octets. Il est aussi possible d'ancrer un bloc et d'y accéder ensuite par pointeur. GEOS travaille à l'aide de fichiers de mémoire virtuelle (VM), permettant de gérer de grands fichiers et de grandes quantités de données comme s'ils étaient en mémoire. Le système gére automatiquement le chargement des segments de VM et leur déchargement de la mémoire, ainsi que leur ancrage ou désancrage. Comme la mémoire réelle, les fichiers de VM peuvent être alloués par blocs de 16 à 64 K octets. Le troisième type de mémoire est la mémoire locale, aussi dénommée "chunk", qui consiste en une sorte de mini-tas au sein d'un bloc de mémoire. Les chunks sont alloués et manipulés comme la mémoire du tas global, mais de manière plus efficace. Les chunks sont habituellement utilisés pour stocker et gérer les données d'instance des objets d'un programme. Enfin le gestionnaire d'items de base de données (ou Database Item Manager) permet de gérer un nombre arbitraire de petits objets. Le système interagit avec les gestionnaires de mémoire de manière à rendre les stockages et les accès en mémoire complètement transparents, au travers d'une couche d'abstraction au-dessus des gestionnaires de mémoire. Il repose largement sur le gestionnaire de mémoire locale et il est responsable de la gestion des petits objets dans un fichier VM. * Le système graphique Le système graphique de GEOS est basé sur modèle unique indépendant des dispositifs d'affichage, qui sont seulement supposés pouvoir offrir une résolution de base de 72 points par pouce. Comme dans Postscript, les actions sont systématiquement traduites vers la résolution la plus élevée du dispositif cible. Ce modèle utilise un système de coordonnées sur 16 bits (et en option un autre système sur 32 bits, appelé modèle de document). Le modèle supporte des palettes de 256 couleurs et des valeurs de couleurs RGB sur 24 bits. Le système graphique offre un ensemble complet de primitives graphiques, telles que lignes, arcs, polygones, splines, courbes de Bezier, texte avec attributs et bitmaps. Chaque objet graphique possède les primitives graphiques nécessaires à son affichage, son déplacement et sa rotation. Un principe sous-jacent à cette architecture est la notion de "chemin", qui consiste en une ligne continue définissant le contour d'un objet. Les opérations de remplissage, découpage et agrandissement sont applicables au contour d'un objet. Un des concepts intéressants du système graphique de GEOS est la "chaîne graphique". Elle consiste en une collection de commandes graphiques qui peuvent être stockées et exécutées plus tard (ça ne vous rappelle pas les metafiles GDI Windows ?). Ces commandes peuvent être définies comme des ressources de données dans le code source et inclure commentaires et paramètres. Le presse-papier de GEOS supporte ce type de données de manière à ce que des chaînes graphiques puissent être partagées entre applications. * Les autres services du système Le système fournit un ensemble de services classiques, parmi eux : - un gestionnaire d'entrées système qui gère les événements provenant de la souris, du clavier et qui les aiguille vers leurs destinataires, - un presse-papier système avec les opérations de coupe, copie et de collage ainsi qu'une capacité de copier/coller rapide ne passant pas par le presse-papier (glisser-déplacer), - des mécanismes de communication inter-applications et inter-threads, - une collection de pilotes pour plus de 600 imprimantes, systèmes de fichiers, systèmes d'affichage, sons, fax, gestionnaires de polices et import-export, - un objet texte de bas niveau adapté à la plupart des opérations sur les textes. Il inclue notamment le retour automatique à la ligne, la sélection et l'édition de texte, le formattage au niveau caractère et paragraphe, la gestion des commandes clavier, l'insertion de graphiques et le support du presse-papier. - un spouleur d'impression pour plusieurs files d'attente, plusieurs formats de papier et le paramétrage des boîtes de dialogue d'impression. Le support multilingue, basé sur le principe de ressources, ce qui permet d'automatiser l'adaptation linguistique. Les adaptations portent sur le format des nombres, des dates et heures, des symboles monétaires, etc. Une bibliothèque mathématique avec des fonctions allant de la simple opération en virgule flottante jusqu'aux opérations sur matrices et l'algèbre linéaire. Différents temporisateurs à échéance unique, sur une durée ou en continu. * Les bibliothèques de haut niveau Outre les services de bas niveau, GEOS fournit des fonctions de plus haut niveau au travers de bibliothèques dédiées, pour permettre le développement aisé d'applications. Ces bibliothèques sont notamment : - une bibliothèque d'analyse d'expressions mathématiques, - une bibliothèque de gestion de cellules formant des lignes et des colonnes, - une bibliothèque tableur basée sur la bibliothèque de gestion de cellules, - une bibliothèque de diagramme pour créer et manipuler des diagrammes, - une bibliothèque dédiée au son pour jouer des notes simples ou des séquences, - une bibliothèque de configuration permettant à l'utilisateur de régler ses préférences, - une bibliothèque dédiée aux économiseurs d'écran. * Les objets de l'interface utilisateur générique Les couches supérieures démontrent la nature orientée objet de GEOS. Par exemple, GEOS inclue une technologie brevetée d'interface utilisateur générique. A l'exécution, les objets génériques sont super-classés par des bibliothèques dépendant du dispositif sur lequel fonctionne l'application. Ce mécanisme utilise les bibliothèques pour adapter automatiquement l'apparence de l'application aux capacités d'interaction du dispositif. Ceci permet au développeur de créer des applications qui fonctionneront de manière adaptée sur des dispositifs dont les capacités et les choix d'interaction sont très différents. Pour que ce principe fonctionne, le programmeur ne spécifiera pas l'emplacement ou le comportement exact de l'objet d'interaction, mais seulement les caractéristiques suivantes : - les attributs définissant la fonction de l'objet, comme le défilement, qui ne changera pas fonctionnellement selon les plates-formes, mais dont l'apparence peut toutefois varier, - les caractéristiques d'orientation, de justification ou de préférences visuelles. Les attributs sont toujours alloués dans les données de l'instance d'objet. Les caractéristiques, qui ne sont utilisées que pour leur affichage, sont ajoutées dynamiquement au moment de l'affichage, lorsqu'elles sont spécifiées. Utilisant ces informations, la bibliothèsque d'interaction décide de la réalisation visuelle et de l'emplacement exact de chaque objet d'interaction. Ceci a l'avantage supplémentaire de simplifier le portage linguistique puisqu'en fournissant de nouvelles ressources, les taille et position des objets d'interaction contenant ces ressources seront automatiquement adaptées à l'encombrement de ces ressources. * Fenêtres et saisies de l'utilisateur Bien qu'il soit nécessaire de définir les fenêtres de l'application, leur maintenance est presque complètement automatisée. The gestionnaire de fenêtres et le système graphique de GEOS prend en charge les dimensions, les formes, les découpages, les superpositions, les défilements, les dessins et autres operations sur les fenêtres (qu'elles soient standards ou redéfinies par le programmeur). Le programmeur doit uniquement gérer le contenu des fenêtres. Le gestionnaire de saisie s'occupe des événements liés à la saisie, à l'aide de trois objets : - l'objet ayant le focus, qui recevra les entrées faites au clavier, - l'objet sélectionné, avec lequel l'utilisateur peut interagir, - le modèle, qui consiste en une sélection invisible à l'utilisateur, que maintient l'application. Ces trois objets peuvent être accédés directement par d'autres objets. De plus, tout objet peut récupérer tous les événements pendant une durée déterminée. * Les "widgets" de l'interface utilisateur GEOS comprend une large palette de "widgets" génériques dédiés à l'interaction avec l'utilisateur, qui permettent de construire des applications interactives (NDT : un widget est un objet qui contribue à l'interaction avec l'utilisateur). Par exemple, on trouve : - menus, qu'ils soient imbriqués, punaisables, sous forme de case à cocher ou de choix unique, avec des raccourcis ou des accélarateurs clavier. Les menus appellent souvent l'ouverture de boîtes de dialogues ou des sous-menus. - boîtes de dialogue, qu'elles soient modales ou non (NDT : modale = qu'on est obligé de fermer avant de pouvoir faire quoi que ce soit d'autre - modale vis à vis de l'application ou même du système), avec des boutons standards (Ok, annuler, etc.) ou sur mesure, qu'elles consistent en des boîtes standards (erreur, avertissement, etc.) ou non. Elles contiennent d'autres éléments comme des boutons, des listes, des dessins, etc. - fenêtres à défilement, avec découpage automatique, mise à jour, défilement, agrandissement et dimensionnement ainsi que gestion des saisies et coloriage sur mesure, - listes, dynamiques, à défilement, exclusive ou à sélection multiple, - affichage ou édition de texte, avec ou sans fonctions avancées de traitement de texte et les capacités de la bibliothèque de texte, - bouton gâchette (ou bouton-poussoir), les contrôleurs (menus standards comme édition, couper, copier, coller, etc.), boîtes à outils et sélecteurs de fichier paramétrables. - curseurs et jauges rotatifs ou linéaires. GEOS permet la définition aisée de nouveaux "widgets" par construction, qui viendront s'ajouter aux widgets de base. GEOS permet également de gérer facilement de multiples documents au sein d'une même application, ainsi que les commandes habituelles sur fichier, comme la sauvegarde, le presse-papier système, l'aide standard, etc. * En résumé L'architecture orientée objet sophistiquée de GEOS, couplée à de riches bibliothèques d'objets prédéfinis représente de bonnes et de mauvaises nouvelles pour les programmeurs. Les bonnes sont relatives au fait que Geoworks a beaucoup travaillé à la constitution d'éléments facilement réutilisables dans la création d'applications utiles pour des PDA. Les mauvaises sont liées au fait que cette architecture demande du temps avant d'être maîtrisée par les programmeurs. Mêmes les bons programmeurs demanderont des mois avant d'être productifs. Maintenant que GEOS est disponible sur l'Omnigo, qui devrait bien se vendre (NDT : ça n'a pas été le cas), beaucoup de programmeurs devraient être motivés pour apprendre GEOS. Geoworks est une des seules sociétés qui se consacrent exclusivement au marché de l'informatique grand-public, à des prix inférieurs à 500$. Geoworks a parfaitement délimité son segment de marché et le connaisse très bien. GEOS est une bonne technologie qui en est à sa troisième génération et un importante liste de partenaires industriels l'atteste, comme Sharp, Hewlett-Packard, Casio, etc. (NDT : puis Nokia, Toshiba, mais cela n'a pas réussi à débloquer la situation). Bien que Geoworks ne suscite pas une couverture médiatique aussi importante que Apple et General Magic (NDT : qui a tout aussi bien échoué), elle a adopté une approche à long-terme qui pourrait se révéler plus payante que celle des concurrents plus en vue (NDT : et bien non, car ce que ne dit pas Steve Mann, c'est que Geoworks a eu une attitude détestable avec les sociétés tierces - même avec Nokia - et les développeurs indépendants). Si je (NDT : Steve Mann ; je crois que j'aurais dit la même chose à cette époque) devais miser sur une technologie qui sera encore sur les PDA dans cinq ans, ce serait bien celle de Geoworks (NDT : alors là, il n'a pas complètement tord, mais 2001 aura été la dernière année où on a vu des PDA à base de GEOS). NDT : finalement, la critique faite par Steve Mann ci-dessus est juste, mais les conclusions se révèleront fausses, non pas à cause d'une mauvaise analyse, mais à cause de revirements de bord et d'égarements de la part de Geoworks, qui finiront par dégoûter tous ses partenaires. Geoworks finira seule, courant 2002 puis sera rachetée et dépecée en 2003. GEOS est aujourd'hui (août 2004) seulement présent de manière confidentielle sur quelques PC dans le monde (dont le mien) et commercialisé par une petite société : BreadBox.