Se connecter avec
S'enregistrer | Connectez-vous

Linux en JavaScript

Par - Source: Javascript PC Emulator | B 15 commentaires

Fabrice Bellard vient de mettre en ligne le Javascript PC Emulator qui émule un ordinateur sous Linux. Il n’y a pas d’interface graphique. Tout se passe en ligne de commande. Le but est avant tout de montrer ce qu’il est possible de faire avec les nouveaux moteurs JavaScript. Le résultat est très impressionnant.

Le PC émulé est une configuration du début des années 90. Le processeur est proche d’un 486 dépourvu d’une unité de calcul en virgule flottante. Ce n’est pas un problème en soi, car le noyau Linux 2.6.20 recompilé pour l’occasion peut émuler un FPU. Il n’y a pas d’émulation de la couche réseau, mais il est possible d’utiliser un port série.

En plus de montrer les progrès réalisés par les moteurs JavaScript qui sont capables de choses beaucoup plus complexes, on peut imaginer utiliser cet émulateur comme benchmark pour comparer le temps que met Linux à se lancer. Ce système pourrait aussi être la base d’un émulateur de jeux DOS.

Le système ne fonctionne pour l’instant que sous Firefox 4 et Chrome. L’émulateur est taillé pour les moteurs Jaeger Monkey du premier et V8 du second. Le moteur JavaScript de Google est néanmoins deux fois plus lent que celui de Mozilla, selon le développeur qui n’a pas pour l’instant d’explications.

Comme le rappellent nos confrères de Generation-NT par qui nous avons découvert ce bijou, Fabrice Bellard est un programmeur français renommé à qui nous devons, entre autres, FFmpeg, QEMU et TCC (Tiny C Compiler).

Commentaires
Interroger un expert

Votre question aux experts de la catégorie Les news : vos réactions du forum

Exemple : Android, ordinateur portable, usb, disque dur

Cette page n'accepte plus de commentaires
  • fitfat , 18 mai 2011 13:07
    Le moteur JS de Firefox 4 est SpiderMonkey. JaggerMonkey n'est qu'un des moteurs de compilation JIT qui le compose (avec TraceMonkey depuis FF3.1 et, d'ici 2012, IonMonkey, probablement pour FF8).
    En ce qui concerne les perfs, c'est probablement pasqu'un émulateur permet d'extraire facilement des arbres de trace et ainsi exploiter TraceMonkey à plein régime (TraceMonckey utilise un compilateur (NanoJIT) plus lent mais qui produit un code nettement plus optimisé que le Nitro de V8).
  • Bucher0n , 18 mai 2011 13:16
    Surpuissant !
  • Ctrolon , 18 mai 2011 13:29
    Je dois avouer que je suis bluffé... je critiquais, il y peu encore, Java / Javascript mais force est de constater que les bons programmeurs peuvent en faire des merveilles.
    Chapeau bas.
  • Afficher les 15 commentaires.
  • ultrabill , 18 mai 2011 13:44
    Citation :
    Je dois avouer que je suis bluffé... je critiquais, il y peu encore, Java / Javascript mais force est de constater que les bons programmeurs peuvent en faire des merveilles.
    Chapeau bas.
    Choses qui n'ont absolument rien à voir l'un avec l'autre ;) 
  • sng , 18 mai 2011 14:13
    Citation :
    Choses qui n'ont absolument rien à voir l'un avec l'autre ;) 


    Absolument est peut-être un poil exagéré mais bon ;) 

    Sinon, ça n'est pas Linux qui est en javascript. Le javascript est composés de deux scripts : un terminal et un émulateur de processeur. Le reste est du binaire compilé (le noyau) ou une image de FS ou un autre truc dont j'ignore l'utilité ;) 
  • Big Monstro , 18 mai 2011 14:19
    Il n'y a pas que les fonctionnalités, les performances ont aussi leur importance !

    Le fait que le moteur javascript puisse désormais émuler un ordinateur et un véritable système d'exploitation peut impressionner car l'expérience démontre que la limitation des fonctionnalités n'est plus un problème.

    Cependant, ce langage conçu pour exécuter des scripts ne peut encore prétendre en aucune façon de remplacer les "vrais" langages. Le fait que le processeur émulé soit aussi ancien (un 486 SX selon la description de l'article) en est la preuve. Bref, l'émulation ici montrée n'est qu'une démonstration technique des possibilités de javacript mais dans les faits, mieux vaut continuer d'utiliser des émulateurs conçus autrement comme Bochs ou QEMU. Dans la mesure du possible, un programme de virtualisation (à ne pas confondre avec un programme d'émulation) reste le meilleur choix.

  • Big Monstro , 18 mai 2011 14:22
    Citation :
    Ce système pourrait aussi être la base d’un émulateur de jeux DOS.

    Pour pouvoir rejouer aux bons vieux jeux d'antan, à partir d'un ordinateur moderne, rien ne vaut DOSBOX. La compatibilité n'est pas parfaite mais s'avère bien meilleur que Virtual PC par exemple pour ce qui concerne les applications MS-DOS
  • pluies , 18 mai 2011 14:26
    Attention d'ailleurs, la partie Javascript ici n'est "que" un émulateur de processeur i586 (et le terminal, pour être précis). Le noyau Linux utilisé est un noyau tout à fait classique.

    Fabrice Bellard est définitivement l'un des plus grands programmeurs vivants à l'heure actuelle. Ses projets sont tous plus incroyables les uns que les autres.

    Il a notamment gagné deux fois le concours international de code C obfusqué (IOCCC). TCC vient justement d'une de ses entrée à l'IOCCC : un compilateur C minimaliste capable de s'auto-compiler, en 2048 octets. L'autre entrée gagnante était un minuscule programme C qui affiche le plus grand nombre entier connu (quand même long de plusieurs millions de chiffres) grâce à une utilisation tordue du théorème de Fourier.

    Il a également trouvé le temps de découvrir la formule la plus rapide connue actuellement pour calculer le n-ième digit de pi, utilisé les harmoniques de la sortie VGA d'une carte graphique ATI pour envoyer des signaux DVB-T (comme la TNT) vers une télé, utilisé un ordinateur de bureau pour calculer 2700 milliards de digits de pi (un nombre record - le précédent record avait été établi sur un supercalculateur, avec un algorithme 20 fois moins performant que celui de Fabrice), et écrit TinyGL, un subset extrêmement rapide et optimisé d'OpenGL.
  • tranche , 18 mai 2011 14:39
    Fabrice Bellard est un genie.
    D'ailleur l'article detaille très peu ses précédent projets/exploits :
    - FFmpeg une lib de dédiés au traitement de flux audio ou vidéo qui manipule un très grand nombre de formats, utilisée par un très grands nombre de projets
    - QEMU un emulateur de processeur capable d'emuler diverse architecture (x86, PowerPC, SPARC, Alpha, ARM, CRIS, m68k, Microblaze, MIPS, s390 et SuperH). Très utilisé dans le monde du cross developpement (chez moi c'est QEMU et buildroot).
    - TCC un compilateur C qui, couplé a TCCBOOT, est capable de compiler et booter un noyau linux en 15s
    - et enfin, il a été détenteur un temps du calcul du plus grand nombre de décimal de Pi. Là où la performance est interessante c'est qu'il a obtenu le record en utilisant son ordinateur personnel (certe, un core i7 fonctionnant pendant plus de 137 jours) mais comparé au supercomputer utilisés par les autres records du type celà est impressionant.

    Il est rare qu'un mathématicien sache aussi bien faire des maths que du code (optimisé maintenable et tout) et qu'en plus il consacre une partie de son talent à créer des projets géniaux réutilisable/améliorable par tous. Il fallait que je le souligne.


    >Ctrolon : Java / javascript -> rien à voir. Javascript aurait vraiment du garder son premier nom (LiveScript).
  • ultrabill , 18 mai 2011 14:44
    Citation :
    Absolument est peut-être un poil exagéré mais bon ;) 
    Ils ont le mot "Java" en commun, c'est vrai :o 
    Tous les langages ont des choses en commun, mais dans le message de Ctrolon, dans le contexte, montre une certaines confusion ;) 

    Il est toujours bon de rappeler que Java et Javascript c'est pas pareil.
  • Zephyros , 18 mai 2011 14:57
    Citation :
    un minuscule programme C qui affiche le plus grand nombre entier connu

    Nombre premier tu veux dire je pense.
  • zozolebo , 18 mai 2011 17:56
    Citation :
    - TCC un compilateur C qui, couplé a TCCBOOT, est capable de compiler et booter un noyau linux en 15s

    C'est pas pour etre desagreable mais mon noyau par defaut sous Debian Squeeze boote en moins de 05 sec...

    Attention a ne pas confondre noyau et services ! La recompilation d'un kernel ne va generalement permettre de gagner qu'au mieux 3-4 sec, et encore. Ce sont tous les services qui mettent du temps (reseau, Bluetooth, montage des systemes de fichiers, systeme d'impression,...).
  • Zephyros , 18 mai 2011 18:04
    zozoleboC'est pas pour etre desagreable mais mon noyau par defaut sous Debian Squeeze boote en moins de 05 sec...Attention a ne pas confondre noyau et services ! La recompilation d'un kernel ne va generalement permettre de gagner qu'au mieux 3-4 sec, et encore. Ce sont tous les services qui mettent du temps (reseau, Bluetooth, montage des systemes de fichiers, systeme d'impression,...).

    Sauf que dans ton cas, en 5 secondes tu ne fais que booter ton kernel, là en 15 secondes ça le compile et le boot :
    http://bellard.org/tcc/tccboot.htmlTCCBOOT is a boot loader able to compile and boot a Linux kernel directly from its source code.

    TCCBOOT is only 138 KB big (uncompressed code) and it can compile and run a typical Linux kernel in less than 15 seconds on a 2.4 GHz Pentium 4.

    ou alors j'ai mal compris la phrase
  • zozolebo , 18 mai 2011 18:21
    Citation :
    Sauf que dans ton cas, en 5 secondes tu ne fais que booter ton kernel, là en 15 secondes ça le compile et le boot :

    Ah oui, j'avais zappe la partie compil... Dans ce cas effectivement ca change tout !!
  • tranche , 18 mai 2011 22:11
    Et oui, TCC est bien capable de compiler puis booter Linux en un temps record (sans lancer les services bien sûr).
    Bon évidement le binaire généré n'est pas aussi optimisé qu'un binaire GCC, et TCC ne supporte que l'architecture x86.
    Une petite fonctionnalitée intéressante : il est possible d'exécuter du code sans compilation, en utilisant TCC comme interpréteur de code C (juste en mettant "#!/usr/local/bin/tcc -run" en première ligne de code), je ne connais pas d'autre projet faisant l'équivalent (j'ai pas cherché).
    Bref, un "ptit projet" comme celui là aurait pu rester confidentiel, mais la qualité en fait un projet pratique et utile; ce qui est une constante de réalisation notable de Fabrice Bellard.