Attention : la VM ne sera pas simpliste à terme.
Le but du jeu est de permettre de supporter des choses assez complexes comme des fonctions de premier ordre et des closures, ce qui impose une certaine expressivité. Pour le moment on commence par un code linéaire avec quelques sauts, mais ensuite il y aura des fonctions qui vont s'imbriquer, donc des stack frames… Ça va demander aussi de gérer des "objets" nativement (sans forcément supporter la POO) pour définir les différentes données natives, et également un garbage collector.
Il faut penser aussi que la VM est une cible pour des petits langages pédagogiques, donc il va également falloir qu'on implémente des outils annexes comme un débogueur pas à pas, pourquoi pas une interface un peu sexy pour profiler les programmes, en tout cas au minimum un désassembleur.
Au final je ne pense pas que la VM, à terme, soit vraiment simple ou simpliste. Dans l'idée il n'y a rien de foncièrement difficile à faire (surtout si on s'y prend progressivement et qu'on prend le temps de comprendre ce qu'on fait à chaque étape, et il y a pas mal de choses qu'on peut apprendre de VM existantes…), mais je pense que le résultat final sera respectablement complexe.