Adobe, qui a racheté il y a peu Macromédia, le créateur de Flash, vient de libérer le code (135000 lignes) de sa machine virtuelle ECMAscript 4 sous licence Mozilla Public Licence. Cela en fait donc un produit open source, nommé Tamarin.

A quoi sert cette VM ?
ECMAscript, bientôt en version 4 (la spécification est à l'état de brouillon mais est en phase de finalisation) est le langage sur lequel se base Javascript (la future version 2 est celle respectant ECMAscript 4) ainsi que Actionscript (version 3, celle utilisée dans le flash player version 9). ActionScript est le langage utilisé pour coder des scripts flash.

Cela ne veut pas pour autant dire que le lecteur flash sera bientôt libre, mais la machine virtuelle en est néanmoins un point très important. On peut donc déjà espérer une disponibilité sur plus de plate-formes, notamment amd64 pour laquelle le portage de cette VM est en cours.

En plus de gagner du temps en n'ayant pas à adapter son précédent moteur Javascript (nommée SpiderMonkey) pour Javascript 2 depuis Javascript 1.7 utilisé dans firefox 2, le premier gain pour le projet Mozilla, qui utilise Javascript non seulement dans ses pages Web mais également pour toutes ses interfaces (à travers XUL), se situe au niveau des performances, la VM étant très rapide et intégrant des technologies intéressantes (comme un système de ramasse-miettes que je ne comprends pas moi même ;) ).

Un autre avantage de cette libération est la réunion d'efforts. On peut imaginer que d'autres navigateurs comme Konqueror pourront reprendre cette VM pour la réutiliser. Ce qui amènerait donc à du Javascript encore plus standard entre les navigateurs, ce qui est toujours une bonne nouvelle.

Mais le plus gros avantage que l'on pourrait tirer de cette machine virtuelle est son utilisation en Just In Time.
Pour expliquer ce concept, rappelons que le Javascript est un langage interprété, comme Java ou python. Pour que la machine comprenne ce code, il n'y a pas de phase de compilation comme en C, mais une phase de conversion en bytecode, qui est plus proche de la machine. Pour python par exemple cela se traduit par une génération de fichiers .pyc à partir des fichiers .py, qui seront reutilisés ensuite au lieu de reinterpreter le .py originel.
Le problème du bytecode est qu'il doit encore être interprété par une machine virtuelle, et c'est pourquoi les langages interprétés sont plus lents que les langages compilés. Javascript est encore plus lent dans un navigateur car le moteur JS, à chaque utilisation d'une fonction, va reformer du bytecode pour le réinterpréter ensuite, ce qui est une grosse perte de temps et donc de performances.

Avec la machine virtuelle d'Adobe, on peut utiliser directement du bytecode deja présent dans un fichier, comme le fait deja le flash player avec les fichiers .swf, ce qui entraine une première hausse des performances.

Mais la VM D'Adobe permet également de faire du Just-In-Time : au lieu de générer tout le langage machine à partir du bytecode lors de l'interpretation, la machine virtuelle ne "convertira" que les parties du code réellement utilisées lors de l'exécution du script, d'ou un deuxième gain de performance.

Pour finir sachez que le résultat de cette libération ne se verra pas avant 2008 d'après La fondation Mozilla, et donc après Firefox 3 qui lui est prévu pour 2007.

Pour finir, des liens plus ou moins techniques pour mieux comprendre :
Un article sur linuxfr.org
Article sur vnunet, plutôt orienté économie, à mettre en relation avec l'article de Fred Cavazza.
Deux articles wikipedia sur ECMAScript et le système de JIT.

Enfin, les articles les plus clairs bien qu'en anglais :
Celui d'un developpeur de flash : http://www.kaourantin.net/2006/11/spidermonkeys-relative-tamarin-joins.html
Et celui d'un responsable de la fondation Mozilla : http://hecker.org/mozilla/adobe-mozilla-and-tamarin.
Bonne lecture ;)