90 RSTI - L’objet – 10/2004. LMO’04
1. Introduction
Cet article présente nos travaux en cours sur Corosol, une machine virtuelle Java
qui offreune API permettant de modifier à la volée son comportement.L’objectif de ce
travail est de fournir un environnement de développementportable facilitant la spécia-
lisation et l’extension des applications relativement à leur contexte d’exécution. Pour
cela, l’architecture de Corosol est organisée en composants fonctionnels, accessibles
et modifiables par introspection.
Grâce à l’introspection, l’application dispose d’une vue de son environnement
d’exécution; elle peut ainsi s’y adapter et même, dans certains cas, le spécialiser
pour ses propres besoins. Parmi les nombreux travaux de recherche concernant l’in-
trospection, certains s’intéressent à son pouvoir d’expression [SMI 84] (pour un tu-
torial cf. [MAL 96]) et d’autres à la conception de plates-formes d’exécution qui
offrent un mécanisme d’introspection aux applications qu’elles exécutent. En particu-
lier, [PIU 00] décrit une machine virtuelle générique qui est entièrement paramétrable
au démarrage de l’application,mais également au cours de l’exécutionde l’application
via une interface d’introspection comportementale.
Par ailleurs, il semble naturel d’exprimer les spécialisations et les extensions de
l’environnement d’exécution dans le langage de l’application, surtout quand elles sont
réalisées par introspection. Le plus simple est alors d’utiliser le même langage pour
spécifier l’application et son environnement d’exécution, comme cela a déjà été ex-
périmenté avec les langages LISP [SMI 84], SmallTalk [GOL 83] ou Java [TAI 98].
Dans le cas où l’environnementd’exécution est une machine virtuelle,cette caractéris-
tique présente un autre avantage important : la machine virtuelle peut être vue comme
une partie de l’application, ce qui implique que la modifier n’entraîne pas de perte de
portabilité de l’application.
Corosol est donc une machine virtuelle Java ouverte écrite en Java. Son architec-
ture est basée sur des composants clairement identifiés. Chacun dispose d’une im-
plantation par défaut qui émule le fonctionnement d’une machine virtuelle classique.
Toutefois, ces implantations peuvent être aisément modifiées pour définir un compor-
tement particulier. Pour cela, deux niveaux de paramétrage de la machine virtuelle
sont disponibles : au démarrage, par un fichier de propriétés, ou à la volée, depuis
l’application qui s’exécute, via une API. Celle-ci étend à l’ensemble des composants
de la machine virtuelle les fonctionnalités de réflexion déjà offertes pour les classes
par le paquetage . Elle permet aux applications d’accéder aux
composants de la machine virtuelle comme à leurs propres objets.
Parmi les travaux de recherche sur la machine virtuelle Java, certains [DOY 01,
ALP 00, ANT 02, TUL 01] ont pour objectif d’améliorer les performances dans un
contexte donné.D’autres [LEW 00, TJA 99] étendent les fonctionnalités des machines
standards. Plus proches de notre objectif, certains travaux proposent des machines
virtuelles ouvertes, sans fonctionnalités particulières mais dont les composants sont
modifiables. La plupart sont écrites en C [GAG 01, DOY 01], certaines nécessitent
un mélange de C ou C++ et de Java [ALP 00, WHA 03] et d’autres, beaucoup plus