IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

Le noyau Linux débarque sur les navigateurs Web
Grâce à un émulateur en JavaScript, un exploit signé Fabrice Bellard

Le , par Idelways

5PARTAGES

13  0 
Nombreux sont nos lecteurs à s’être interrogés récemment sur l'utilité conceptuelle de l'ajout de capacités de Peer-2-Peer aux navigateurs, entrepris par le W3C ; mais que penseraient-ils d'y voir tourner le noyau Linux ?

C'est l'exploit inouï revendiqué par Fabrice Bellard et réalisé d'après lui uniquement « pour le fun » grâce aux nouveaux moteurs JavaScript « assez rapides pour permettre de faire des choses compliquées »

Bellard, cet informaticien et mathématicien français de renommée vient en effet de publier sur son site un émulateur PC, entièrement écrit en JavaScript qui permet de lancer un noyau Linux minimaliste (avec un terminal) directement dans le navigateur.

Un tour de force qui fait réagir les grosses pointures du langage JavaScript, y compris son inventeur et membre de la fondation Mozilla Brendan Eich qui se réjouit de voir cet émulateur fonctionner « deux fois plus vite » sur JaegerMonkey que sur le moteur V8 de Google.

Quoi qu'il en soit, le résultat fonctionne sous Google Chrome 11 et Firefox 4 au rythme d'un ordinateur sorti tout droit des années 90 avec un vénérable processeur 486 de chez Intel.



L'émulateur ne dispose toutefois pas d'une unité de calcul des nombres à virgule flottante, un manque heureusement émulé par la version du noyau Linux utilisée (2.6.20), sortie en 2007.

Cet exploit rappelle en tout cas que Google n'est pas le seul à en demander plus aux navigateurs, qui quittent progressivement le statut d'applications au sens classique du terme.

Source : site de Fabrice Bellard, compte twitter de Brendan Eich

Et vous ?

Que pensez-vous de cet exploit ?

Une erreur dans cette actualité ? Signalez-nous-la !

Avatar de Firwen
Membre expérimenté https://www.developpez.com
Le 18/05/2011 à 18:12
En fait, il a coder un emulateur x86 suffisamment complet pour exécuter du code natif x86 sur un environnement javascript .

Some of the code is inspired from my x86 dynamic translator present in QEMU, but there are important differences because here it is an interpreter. The CPU is close to a 486 compatible x86 without FPU. The lack of FPU is not a problem when running Linux as Operating System because it contains a FPU emulator. In order to be able to run Linux, a complete MMU is implemented. The exact restrictions of the emulated CPU are:

No FPU/MMX/SSE
No segment limit and right checks when accessing memory (Linux does not rely on them for memory protection, so it is not an issue. The x86 emulator of QEMU has the same restriction).
No CS/DS/ES/SS segment overrides. FS/GS overrides are implemented because they are needed for Thread Local Storage in Linux.
A few seldom used instructions are missing (BCD operations, BOUND, ...).
No single-stepping
No real mode
No 16 bit protected mode (although most 16 bit instructions are present because they are needed to run 32 bit programs).

Most of these restrictions are easy to remove, but I decided to implement the strict minimum to be able to use a recent Linux kernel and its user applications.
Ce type débarque d'une autre planète.
6  0 
Avatar de Elepole
Membre éprouvé https://www.developpez.com
Le 18/05/2011 à 17:05
Citation Envoyé par TNT89 Voir le message


rm -rf / puis F5 puis rm -rf / puis F5 puis...
Rien que pour sa c’est l'invention du siècle.
4  0 
Avatar de lennelei
Membre chevronné https://www.developpez.com
Le 18/05/2011 à 17:54
cf mon précédent message

il y a 2 scripts javascripts : le premier simule le terminal (term.js), le second émule totalement un processeur (cpux86.js dans le même genre que qemu)

si tu regardes le second script, tu as tout à la fin une fonction start() :
Code : Sélectionner tout
1
2
3
4
5
6
7
8
9
function start() {
    var Hf, i, start, If, Jf;
...
    ya.load_binary("vmlinux26.bin", 0x00100000);
    Jf = ya.load_binary("root.bin", 0x00400000);
    start = 0x10000;
    ya.load_binary("linuxstart.bin", start);
...
}
C'est cette fonction start qui charge d'une part, le noyau vmlinux26.bin qui a été compilé à part, et d'autre part, le filesystem contenu dans root.bin (et aussi un autre truc linuxstart.bin que je ne sais pas à quoi il sert visiblement, "démarrer" le système).

Tu peux d'ailleurs télécharger ces 3 fichiers (et également les 2 javascript) et mettre tout ça chez toi et ça marchera pareil (je l'ai d'ailleurs fait).

Ensuite, j'avoue que je suis absolument incapable de comprendre comment ça va plus loin j'imagine que le script construit un objet qui va être ta machine virtuelle et que, d'une manière ou d'une autre, ce petit code de 7000 lignes à peine arrive à interpréter le noyau qui va à son tour amorcer linux et le filesystem... mais franchement, pour moi, c'est de la magie noire

si tu télécharges ce filesystem sur un linux, tu peux parfaitement le monter et le modifier :
Code : Sélectionner tout
1
2
3
4
$ sudo mount root.bin /mnt/jslinux/
Password:
$ ls /mnt/jslinux/
bin  dev  etc  lib  linuxrc  lost+found  mnt  proc  root  sbin  tmp  usr

Edit :

Citation Envoyé par Golgotha Voir le message
- les fichier du system sont ou ? << dans l'image root.bin
- les fichier créer sont ou ? << dans la mémoire de ton PC : ils sont perdus si tu fermes la fenêtre
- C'est écrit en javascript, mais quel partie ? << le terminal et l'émulateur du processeur
- comment du javascript peut elle lancer une distrib linux ? << parce que le javascript émule une machine, et que du coup, comme tout émulateur, c'est capable de lancer du code machine
3  0 
Avatar de gokudomatic
Membre régulier https://www.developpez.com
Le 18/05/2011 à 14:56
j'y vois un grand intérêt pédagogique pour une première intro à linux.
2  0 
Avatar de TNT89
Membre confirmé https://www.developpez.com
Le 18/05/2011 à 13:38


Tout simplement E-N-O-R-M-E!

Personnellement, je le trouve très réactif : 4 secondes de "boot" et après ça tourne nickel...

rm -rf / puis F5 puis rm -rf / puis F5 puis...
1  0 
Avatar de Golgotha
Membre expert https://www.developpez.com
Le 18/05/2011 à 15:29
j'arrive pas à quitter vi
1  0 
Avatar de lennelei
Membre chevronné https://www.developpez.com
Le 18/05/2011 à 16:00
Petite précision : le javascript ne sert qu'à émuler le processeur et le terminal.

Le noyau chargé est compilé, et le filesystem est un fichier image qui peut être monté sur n'importe quel Linux (et donc modifié par qui le souhaite )

Donc potentiellement, n'importe qui peut recompiler un autre noyau, ou modifier le contenu du fichier root.bin pour y ajouter des trucs !
1  0 
Avatar de ProgVal
Membre éclairé https://www.developpez.com
Le 18/05/2011 à 17:02
Notons également que l'auteur de JSLinux est aussi celui de QEmu
1  0 
Avatar de thelvin
Modérateur https://www.developpez.com
Le 18/05/2011 à 19:08
Il y avait déjà des Box DOS en ligne, permettant de jouer à de vieux jeux.
Jusqu'à maintenant elles tournaient en Flash, je suppose que bientôt ça marchera même sans Flash.

(Jeu : réaliser cela en installant DOSBox sous linux tournant sur un x86 émulé par JavaScript. Une fois que c'est fait, Faire tourner un navigateur dedans. Et pousser ce navigateur à appeler la même page.)
1  0 
Avatar de nu_tango
Membre averti https://www.developpez.com
Le 19/05/2011 à 7:06
Là je suis vraiment sur le c** si vous me permettez l'expression.

Code : Sélectionner tout
1
2
3
4
5
6
/ # cat /proc/cpuinfo                                                            
processor       : 0                                                             
vendor_id       : GenuineIntel                                                  
cpu family      : 5                                                             
model           : 4                                                             
model name      : Pentium MMX
Je dis chapeau M. Fabrice Bellard
1  0