• Aucun résultat trouvé

Comme par le passé, les systèmes informatiques d’aujourd’hui doivent à la fois réaliser des fonctions toujours plus complexes, être réalisés dans des temps toujours plus courts et à des prix toujours plus compétitifs. Aujourd’hui cependant, ces systèmes sont en passe de s’intégrer à notre environnement quotidien à un degré jamais égalé jusqu’alors, à la fois riche de promesses et de dangers.

L’utilisation banalisée de logiciels complexes construits à partir de nombreux composants hétérogènes pour des emplois de plus en plus critiques pose problème. Les risques encourus, aussi bien humains qu’économiques, exigent de pouvoir mettre en place des mécanismes de tolérance aux fautes indépendamment des composants réutilisés, pour durcir leur robustesse et exclure tout scénario catastrophe.

La réflexivité logicielle fait partie des technologies qui ont été proposées pour relever ce défi. Le propos de ce travail de thèse est d’étudier dans quelle mesure ces solutions réflexives peuvent s’appliquer aux systèmes complexes que nous venons de présenter, ou si elles doivent être étendues et comment. Dans la suite de ce manuscrit, après avoir rappelé les notions de réflexivité (chapitre 2 page suivante), nous présentons les architectures tolérantes aux fautes (réflexives ou non) qui ont été proposées jusqu’à maintenant, et nous montrons pourquoi la réflexivité doit être étendue pour dépasser leurs limites (chapitre 3 page 35). Nous détaillons ensuite la démarche que nous avons mise en place ainsi que les principes et concepts qui la soutiennent (chapitre 4 page 53). Nous appliquons cette démarche au cas de la réplication d’applications distribuées et validons notre approche sur un cas d’étude concret en nous intéressant à la réplication d’applications CORBA à brins d’exécution7 multiples (chapitre 5 page 75). Nous concluons finalement sur les perspectives de notre travail (page 117).

7Nous utiliserons dans la suite de cet exposé l’expression « brin d’exécution », ou de manière plus concise « brin »,

pour traduire l’anglais thread. Les brins désignent les différentes activités concurrentes d’une application qui partagent un même espace d’adressage. De façon similaire, nous traduirons l’adjectif multithreaded par « à brins d’exécution multiples », et le substantif multithreading par « multitraitement ».

Les architectures réflexives

Pìteron æ˜un d˜ûˆ|diovtugqˆneitä gnwnai˜ áautìn, ka ti >˜hn fa˜ulo å to˜uto‚najeÈ eÊ tän ânPujo˜i ne¸n,«qalepìntikaÈoÎqÈpantì ?

Et donc, est-il si facile de se connaître soi–même, et celui qui grava la devise du temple de Delphes était– il stupide, ou est-ce une chose difficile, qui n’est pas donnée à chacun ?

Socrate, dans Alcibiade de Platon

L

A réflexivité occupe une position centrale dans notre travail. C’est une notion très riche, commune aux philosophes et aux informaticiens, mais aussi aux linguistes et aux psychanalystes (on se souviendra par exemple du stade du miroir de Jacques Lacan). Cette diversité fonde la force d’inspiration de la réflexivité. Il nous a paru important pour cette raison d’en donner ici un aperçu le plus large possible, avant d’aborder dans le chapitre 3 ses applications à la tolérance aux fautes des systèmes informatiques.

Ce chapitre introduit la notion de réflexivité en illustrant sa place au quotidien, dans les langues humaines. Nous présentons ensuite comment la réflexivité a pu être utilisée en informatique, ce qui nous permettra de motiver son intérêt pour l’intégration modulaire d’aspects transversaux dans des architectures logicielles. Nous terminons le chapitre en présentant les caractéristiques de plusieurs plates-formes réflexives développées dans les milieux académiques et industriels.

2.1

La réflexivité au quotidien

Est réflexif un système capable d’appliquer à lui–même ses propres capacités d’action (selon le système considéré, cela peut-être des capacités de description, de calcul, de pen- sée). Par exemple, l’être humain, en sa qualité d’animal qui pense, est un « système réflexif », puisque l’être humain peut penser à lui-même. Dans cette section, nous utilisons un exemple issu de la vie quotidienne, le langage, pour introduire les caractéristiques fondamentales d’un système réflexif.

Toute langue humaine obéit à un ensemble de règles, sa grammaire, qui capturent de manière abstraite les structures qui la gouvernent. Or, il est tout à fait possible, et même très courant, de discuter de la grammaire d’une langue dans cette langue elle même. Une langue, outil de discours, devient alors l’objet de son propre discours (la grammaire). C’est de ce double rôle que surgit la réflexivité : un manuel de grammaire française pour écolier, écrit en français, est un texte en français qui parle de la langue française, c’est-à-dire un texte réflexif. Cet auto–référencement constitue la première caractéristique de la réflexivité. La grammaire constitue un modèle de la langue (que nous appellerons dans un contexte réflexif un méta-modèle), et ce modèle est accessible depuis l’intérieur de la langue.

La deuxième caractéristique de la réflexivité a trait aux liens qu’entretient une langue avec l’ensemble des règles qui la gouvernent, lorsque l’une ou l’autre évolue. L’évolution d’une langue est un phénomène naturel. Nous ne parlons plus le français de Molière, encore moins celui de Rutebeuf1. Cette évolution se répercute sur la grammaire : de nouvelles règles de grammaire sont introduites dans les manuels pour prendre en compte les changements constatés. L’évolution de la langue entraîne celle des manuels. Réciproquement, même s’il s’agit d’un cas beaucoup plus rare pour les langues, il arrive qu’une langue soit modifiée « par décret », l’évolution des règles précédant alors celle de la langue. La Rechtschreibreform des pays germanophones, réforme de l’orthographe rentrée en vigueur en 1998, constitue un des exemples les plus récents de ce mécanisme. De nouvelles règles d’orthographe de l’allemand ont été développées entre 1985 et 1995 et formellement acceptées par un traité inter–étatique en 1996. En 1999, quasiment tous les journaux de langue allemande avaient adopté la nouvelle orthographe. Dans ce cas, l’évolution des règles d’orthographe, décidée par les états, a entraîné l’évolution de la langue. Il existe donc une double relation de causalité entre une langue et les modèles qu’en construisent les grammairiens. Cette double relation de causalité constitue la deuxième caractéristique de la réflexivité.

La capacité d’une langue à être à la fois outil et objet de discours est à la base de la réflexivité. Cette capacité est intimement liée à la distinction, essentielle en linguistique moderne, entre le sens d’un mot et le mot lui même. Cette distinction a été formalisée au début du XX`eme par le linguiste suisse Ferdinand de Saussure à travers les notions de

signifiant et de signifié. Le signifiant renvoie au mot (comme succession de lettres, de sons)

1Par exemple, les vers « Que sont mes amis devenus [...] / Je crois le vent les a ôtés [...] / Ce sont amis que vent emporte

/ Et il ventait devant ma porte / Les emporta », popularisés par Léo Ferré, donnent dans leur version originale : « Que sont mi ami devenu [...] / Je cuit li vens les a osté, [...] / Ce sont ami que vens emporte, / Et il ventoit devant ma porte ; / Ses emporta » .

FIG. 2.1 :La réflexivité dans la littérature contemporaine [Goscinny & Uderzo 1965]

qui dans une langue donnée (le français, l’allemand) désigne un concept (que l’on appelle alors le signifié). Ainsi « mot », « Wort », « word », « palabra » sont plusieurs signifiants dans des langues différentes pour le même signifié. Un signifiant représente un signifié ; il est l’élément concret (le son, le mot écrit) qui permet d’accéder au concept (le sens, la pensée). Nous avons déjà mentionné la notion de « méta-modèle » pour parler des grammaires, c’est-à-dire d’une modélisation d’une langue à l’intérieur d’elle même. Un « méta-modèle » est de l’ordre du sens, du concept, du signifié. Une langue, pour être réflexive, doit donc donner accès à ce « méta-modèle » en offrant des mots, des éléments concrets du discours, des signifiants, qui permettent d’en parler. « phrase », « verbe », « conjugaison », « accord », « déclinaison » ou encore « alexandrin » (figure 2.1) sont des exemples de tels mots en français. Ces mots dessinent « l’empreinte » de la grammaire dans la langue, sont une sorte « d’interface » fournie par la langue pour donner accès à son méta-modèle. C’est ce que l’on appelle dans un contexte réflexif une méta-interface.

Pour résumer ce que nous venons de dire :

1. une langue contient des mots (signifiants) qui représentent des concepts (signifiés) ; les signifiants sont les éléments concrets de la langue qui donnent accès aux concepts ; 2. ces concepts sont associés à une modélisation particulière d’une réalité ;

3. la grammaire d’une langue modélise la langue, constitue un méta-modèle de cette langue ;

4. les mots d’une langue qui permettent de parler de sa grammaire forment une méta- interface qui donne accès concrètement au méta-modèle qu’est la grammaire.