Les travaux que nous effectuons ont pour buts l'étude et l'expérimentation de l'intégration de caractéristiques non fonctionnelles telles que la tolérance aux fautes et la sécurité dans les applications réparties. Le modèle orienté-objet semble particulièrement intéressant tant du point de vue de la description fonctionnelle de l'application que du point de vue de la mise en oeuvre de caractéristiques non fonctionnelles.
Notre approche distingue deux aspects :
La propriété de `` réflexivité'' de certains langages objets et en particulier sa mise en oeuvre sous la forme de `` protocoles à méta-objets'' permet d'associer de façon élégante (transparence, séparation des abstractions) les objets de l'application et les mécanismes non-fonctionnels (traitement d'erreur, authentification, chiffrement) mis en oeuvre sous la forme de méta-objets. La notion de méta-objet est relative à un méta-niveau de programmation dans lequel le fonctionnement interne des objets de l'application peut être redéfini ou adapté à une caractéristique non fonctionnelle, Le développement d'applications distingue au moins deux niveaux de programmation : le niveau de base (correspondant à la programmation fonctionnelle) où ne fait que déclarer le modèle de fonctionnement interne de l'objet (son méta-objet associé), et le méta-niveau de programmation où l'on décrit le fonctionnement interne du modèle qui a été sélectionné. La conception des méta-objets peut alors tirer parti de la notion d'héritage. Les mécanismes de base sont définis par une hiérarchie de classes, tant du point de vue de la tolérance aux fautes que de la sécurité. Cette hiérarchie permet de factoriser les comportements et réciproquement de dériver de nouveaux comportements selon des hypothèses de fautes différentes et de l'environnement opérationnel considéré.
La réalisation des méta-objets repose in fine sur les services de base qui doivent être identifiés (gestion de groupe, protocoles de diffusion atomiques, gestion de clés, serveurs d'authentification, etc.).
Nous avons dans un premier temps expérimenté cette approche en développant des mécanismes répartis de tolérance aux fautes sous la forme de méta-objets mis en oeuvre à un seul méta-niveau. Nous avons montré qu'un protocole à méta-objet simple permettait de rendre les mécanismes transparents aux applications [9]. Les expériences ont été effectuées sur un réseau de machines Unix avec le langage Open-C++ (en fait un pré-processeur de C++). Elles s'appuient sur l'interception de l'invocation de méthodes et sur l'accessibilité de l'état interne de l'objet au méta-niveau. Nous avons ensuite étudié la mise en oeuvre de ces mécanismes en utilisant plusieurs méta-niveaux, chacun associé à une caractéristique non fonctionnelle particulière (tolérance aux fautes, sécurité, communications). Ces travaux nous ont permis de définir une architecture de système particulièrement flexible. Chaque méta-niveau (les méta-objets) peut être développé de façon indépendante et une première hiérarchie d'héritage de mécanismes répartis de tolérance aux fautes à été définie. Les services systèmes nécessaires à l'implantation des méta-objets ont été partiellement identifiés. Leur mise en oeuvre est effectuée en utilisant la technologie micro-noyau. La flexibilité qu'apporte la technologie micro-noyau au niveau système est complémentaire de celle qu'apporte les protocoles à méta-objets au niveau langage [16].
Une plate-forme expérimentale est en cours de développement. Elle se base sur un ensemble de machines Chorus interconnectées. La mise en oeuvre de serveurs de gestion de groupe et de protocoles de diffusion atomique est en cours de terminaison.
Les travaux actuels sont une première étape vers l'utilisation de la technologie des objets dans le domaine de la sûreté de fonctionnement. Les premiers résultats sont prometteurs et confortent l'intérêt de cette approche pour réaliser de façon plus flexible, adaptable et réutilisable, des systèmes opératoires tolérant les fautes et les intrusions.