Notice: Undefined index: HTTP_ACCEPT_LANGUAGE in /var/www/www.pappy.tf/projet/svm/index.php on line 26
Simple Virtual Machine

Description du projet

Simple Virtual Machine est une machine virtuelle multi-thread et extensible sous license GPLv3.

But du projet

La Simple Virtual Machine est un projet open-source permettant d'écrire des applications avec :

Un langage machine bas niveau
Comme tout langage machine, le code s'écrit en interaction directe avec un processeur et une mémoire. Les structures de contrôle sont réalisées à partir de sauts et les variables sont remplacées par les adresses mémoire.
Des instructions haut niveau
En revanche, chaque instruction peut réaliser des opérations complexes pour garder un code compact et maintenable. De plus, cela enlève la frustration des langages machines traditionnels qui nécessitent beaucoup d'instructions pour réaliser des tâches simples.
Une architecture souple
L'architecture de la machine allie simplicité et souplesse pour exploiter au mieux les ressources de la machine hôte, en offrant des conteneurs d'exécution isolés contrôlés par des ordonnanceurs applicatifs.
Des extensions en C/C++
La machine virtuelle peut être étendue en chargeant des extensions écrites en C ou C++, et compilées en bibliothèque partagée (.so). De nombreux concepts peuvent être étendus dans la machine, comme le jeu d'instructions. Un générateur permet de simplifier l'écriture des extensions en automatisant le plus possible la création du code des extensions.
Un débugueur web intégré
La machine virtuelle comprend un débugueur pour investiguer et comprendre comment une application fonctionne. Lancée avec le débugueur activé, la machine virtuelle se comporte comme un serveur web auquel peuvent se connecter plusieurs navigateurs web. Cela permet de contrôler l'exécution d'une machine distante de manière partagée entre plusieurs développeurs.
En toute sécurité
Le contrôle d'accès aux différents éléments de la machine virtuelle est fondé sur le consentement. Cela signifie qu'un élément peut être modifié que s'il est accessible. De plus, l'exécution du code peut être faite dans un contexte protégé, où certaines instructions sont interdites car trop puissantes et où des quotas peuvent s'appliquer.
Avec stabilité et performance
La machine virtuelle, ne pouvant pas offrir les performances brutes du C et du C++, n'a pas pour objectif d'exécuter le code le plus rapidement possible. Les extensions en C ou C++ peuvent pallier aux problèmes de performance en écrivant les sections critiques en C ou C++. En revanche, la machine virtuelle est conçue pour être stable, notamment sur la gestion de sa mémoire.
Une intégration avec le système
Une application écrite avec la machine virtuelle se comporte comme n'importe quelle application en ligne de commande sous UNIX. En particulier, la machine virtuelle offre une interface efficace pour gérer les options et arguments de la ligne de commande, ainsi que l'aide associée.

Contenu du projet

La machine virtuelle

L'élément central du projet est la machine virtuelle elle-même. C'est elle qui compile directement le fichier d'application et le code machine, intègre les extensions et exécute le code de l'application.

En plus de la machine, sont fournies :

La machine est versionnée XX.YY.AAAAMMJJ où :

  1. XX est le numéro de version majeur, correspondant à la maturité du projet. Il est augmenté lorsqu'une fonctionnalité importante est ajoutée au projet.
  2. YY est le numéro de version mineur, indicateur de compatibilité de l'interface de la machine. Il est augmenté lorsque l'interface des extensions subit un changement non compatible.
  3. AAAAMMJJ est la date, incrémenté à chaque micro publication de la machine virtuelle.

Le générateur d'extensions

En plus de la machine virtuelle, un autre binaire est fourni : il permet d'écrire des extensions en C ou en C++ pour la machine virtuelle dans un format de fichier regroupant les éléments de la machine associés au code C ou C++ qui leur correspond.

Le générateur produit un script shell qui peut être exécuté par Bash et qui lui-même créera un répertoire contenant :

Extensions

Officielles
Les extensions officielles sont fournies directement avec la machine virtuelle : elles font partie du projet de la machine virtuelle et offrent des outils de base pour utiliser la machine.
Communautaires
Les extensions communautaires sont fournies depuis une plateforme centrale associée au projet de la machine virtuelle, mais ne sont pas livrées avec la machine. Toute personne peut contribuer en soumettant son extension sur la plateforme.
Spécifiques
Les extensions spécifiques sont fournies indépendamment du projet, soit parce qu'elles sont dédiées à une seule application, soit parce qu'elles sont sous license propriétaire. En effet, l'interface de la machine virtuelle est sous license LGPL, autorisant son usage dans du code propriétaire.

Des exemples ?

Au lieu de proposer des exemples ici, qui demeureraient abscons sans une explication poussée, il est plutôt recommandé de suivre directement les didacticiels, qui présentent pas à pas les syntaxes et les sémantiques associées des fichiers sources de la machine et du générateur d'extension.

Pour jouer avec ?

Le projet

Pour télécharger l'archive et la compiler, il vous faudra les outils standards de compilation. Sous gentoo, ces outils sont installés de base dans le système. Sur une debian-like, il faudra build-essential, flex, bison et autotools-dev pour pouvoir compiler la machine virtuelle.

Les dernières versions utilisables sont :

Les versions du projet sont élaborées en fonction des changements dans le projet :

Quelques extensions

Quelques fichiers de description d'extensions :

Ces fichiers sont à utiliser avec le générateur d'extensions, puis à compiler et installer sur le système selon votre convenance.

Des didacticiels

Pour une prise en main plus rapide et plus souple de la machine, ces didacticiels peuvent aider :

Ces didacticiels sont donnés en français ou en anglais, sur des sujets plus ou moins variés.

Des bibliothèques

Pour accélérer vos développements, des petites bibliothèques écrits en langage machine sont disponibles :

Elles sont données en l'état, sans aucune garantie de fonctionnement avec une version de la machine virtuelle ne correspondant pas à la date indiquée sur l'archive des bibliothèques.

Des outils supplémentaires

Pour contribuer ?

Le projet n'étant pas terminé, des petites contributions seront appréciées :

  1. je n'ai pour le moment aucune relecture faite sur la documentation (en anglais),
  2. ni de traduction en français de cette documentation,
  3. je manque de volontaires qui veulent bien écrire des didacticiels permettant aux autres de s'investir dans le projet,
  4. la machine virtuelle est normalement stable suite aux tests que j'ai moi-même pu réaliser à travers des petites applications, mais d'autres personnes pourraient trouver des bugs en codant en langage machine, et je serais ravi d'avoir les rapports de bugs…
  5. pour ceux qui veulent voir leur extension intégrée au projet, ils peuvent faire leur proposition.

Me contacter…

Pour une question sur le projet, une amélioration possible, un rapport de bug, envoyez-moi un email à l'adresse projet.svm [chez] pappy.tf, merci !

Licence Creative Commons
Cette page de Julien Bruguier est mise à disposition selon les termes de la licence Creative Commons Attribution - Pas d’Utilisation Commerciale - Partage dans les Mêmes Conditions 3.0 non transposé.