JSLinux: Javascript PC emulátorban futó Linux

Címkék

Fabrice Bellard - QEMU, FFMPEG híresség - weboldalán egy Javascript-ben írt PC emulátort mutatott be, amely Linux-ot bootol. Az emulált hardver az alábbi összetevőkből áll:

  • a 32 bit x86 compatible CPU
  • 8259 Programmble Interrupt Controller
  • 8254 Programmble Interrupt Timer
  • 16450 UART

A kód tisztán Javascript-ben íródott a korszerű böngészőkben megtalálható Typed Arrays felhasználásával. A fejlesztő tesztelte Linux-on, Windows-on és Mac OS X-en futó Firefox 4-en és Chrome 11-en.

JSLinux

Fabrice 2.6.20-as kernelt fordított a gépre. A kernelkonfig megtalálható itt.

dmesg


Linux version 2.6.20 (bellard@voyager) (gcc version 3.4.6 20060404 (Red Hat 3.4 
.6-9)) #3 Sat May 14 19:08:30 CEST 2011                                         
BIOS-provided physical RAM map:                                                 
sanitize start                                                                  
sanitize bail 0                                                                 
 BIOS-88: 0000000000000000 - 000000000009f000 (usable)                          
 BIOS-88: 0000000000100000 - 0000000002000000 (usable)                          
32MB LOWMEM available.                                                          
Entering add_active_range(0, 0, 8192) 0 entries of 256 used                     
Zone PFN ranges:                                                                
  DMA             0 ->     4096                                                 
  Normal       4096 ->     8192                                                 
early_node_map[1] active PFN ranges                                             
    0:        0 ->     8192                                                     
On node 0 totalpages: 8192                                                      
  DMA zone: 32 pages used for memmap                                            
  DMA zone: 0 pages reserved                                                    
  DMA zone: 4064 pages, LIFO batch:0                                            
  Normal zone: 32 pages used for memmap                                         
  Normal zone: 4064 pages, LIFO batch:0                                         
DMI not present or invalid.                                                     
Allocating PCI resources starting at 10000000 (gap: 02000000:fe000000)          
Detected 3.333 MHz processor.                                                   
standard input                                                                  
Built 1 zonelists.  Total pages: 8128                                           
Kernel command line: console=ttyS0 root=/dev/ram0 rw init=/sbin/init notsc=1    
Initializing CPU#0                                                              
Disabling TSC...                                                                
PID hash table entries: 128 (order: 7, 512 bytes)                               
Dentry cache hash table entries: 4096 (order: 2, 16384 bytes)                   
Inode-cache hash table entries: 2048 (order: 1, 8192 bytes)                     
Memory: 28276k/32768k available (1206k kernel code, 4104k reserved, 301k data,  
124k init, 0k highmem)                                                          
virtual kernel memory layout:                                                   
    fixmap  : 0xffffc000 - 0xfffff000   (  12 kB)                               
    vmalloc : 0xc2800000 - 0xffffa000   ( 983 MB)                               
    lowmem  : 0xc0000000 - 0xc2000000   (  32 MB)                               
      .init : 0xc027c000 - 0xc029b000   ( 124 kB)                               
      .data : 0xc022db1c - 0xc02791b4   ( 301 kB)                               
      .text : 0xc0100000 - 0xc022db1c   (1206 kB)                               
Checking if this processor honours the WP bit even in supervisor mode... Ok.    
Calibrating delay using timer specific routine.. 20.21 BogoMIPS (lpj=101098)    
Mount-cache hash table entries: 512                                             
CPU: After generic identify, caps: 00000010 00000000 00000000 00000000 00000000 
 00000000 00000000                                                              
Intel Pentium with F0 0F bug - workaround enabled. 
CPU: After all inits, caps: 00000000 00000000 00000000 00000000 00000000 000000 
00 00000000                                                                     
Compat vDSO mapped to ffffe000.                                                 
CPU: Intel Pentium MMX stepping 03                                              
Checking 'hlt' instruction... OK.                                               
NET: Registered protocol family 16                                              
Setting up standard PCI resources                                               
NET: Registered protocol family 2                                               
IP route cache hash table entries: 1024 (order: 0, 4096 bytes)                  
TCP established hash table entries: 1024 (order: 0, 4096 bytes)                 
TCP bind hash table entries: 512 (order: -1, 2048 bytes)                        
TCP: Hash tables configured (established 1024 bind 512)                         
TCP reno registered                                                             
checking if image is initramfs...it isn't (bad gzip magic numbers); looks like  
an initrd                                                                       
Freeing initrd memory: 2048k freed                                              
Total HugeTLB memory allocated, 0                                               
io scheduler noop registered                                                    
io scheduler anticipatory registered                                            
io scheduler deadline registered                                                
io scheduler cfq registered (default)                                           
Real Time Clock Driver v1.12ac                                                  
Serial: 8250/16550 driver $Revision: 1.90 $ 4 ports, IRQ sharing disabled
an initrd                                                                       
Freeing initrd memory: 2048k freed                                              
Total HugeTLB memory allocated, 0                                               
io scheduler noop registered                                                    
io scheduler anticipatory registered                                            
io scheduler deadline registered                                                
io scheduler cfq registered (default)                                           
Real Time Clock Driver v1.12ac                                                  
Serial: 8250/16550 driver $Revision: 1.90 $ 4 ports, IRQ sharing disabled       
serial8250: ttyS0 at I/O 0x3f8 (irq = 4) is a 16450                             
RAMDISK driver initialized: 16 RAM disks of 4096K size 1024 blocksize           
loop: loaded (max 8 devices)                                                    
TCP cubic registered                                                            
NET: Registered protocol family 1                                               
NET: Registered protocol family 17                                              
Using IPI Shortcut mode                                                         
Time: pit clocksource has been installed.                                       
RAMDISK: ext2 filesystem found at block 0                                       
RAMDISK: Loading 2048KiB [1 disk] into ram disk... done.                        
VFS: Mounted root (ext2 filesystem).                                            
Freeing unused kernel memory: 124k freed

Kipróbálható itt. Technikai adatok itt.

Hozzászólások

Az X nem indul rajta és nem tudtam betölteni a wifi driverét ;)

-----
"Egy jó kapcsolatban a társunkat az ő dolgában kell támogatni, nem a miénkben."
rand() a lelke mindennek! :)

Sok éve (15-20 ?) hogy i8048 mikrovezérlőre - jobb híján - papíron kódoltam. Készítettem egy olyan EEPROM programozót amin billentyűzetről lehetett beírni a hexa kódokat. A papírról olvastam a kódokat és egyszerre egy bájtot tudtam csak beprogramozni. Ha mellényúltam akkor törölni kellett az egészet (higanygőzlámpa belseje + nagyfrekvenciás inverter) és újrakezdeni. Végül is egy PLL alapú frekvenciaszintézert vezérelt ahol billentyűkről lehetett beírni a kimenő frekvenciát.

Miért kell mindenben az értelmet keresni? Szerintem ez a csávó kigondolta ezt, hogy megcsinálja, mert érdekelte a dolog, és szerzett magának egy csomó tapasztalatot, az alkotás örömét, és biztos vagyok benne, hogy nála is kiverte a biztosítékot a jókedv, amikor elindult a cucc a böngészőben, és működött :)

- Doktor úr, elmehetek?
- Nem, elmebeteg!!!

--
Gábriel Ákos

Ez lesz az operációs rendszerek új generációja. Már nem csak az adatokat fogjuk a neten tárolni, hanem a szoftvert is. :)

hacksagon is a hexaéder

"Intel Pentium with F0 0F bug - workaround enabled"

Ez elég mókás, amilyen matekzseni, elképzelem hogy még a bugot is belekódolta a virtuális gépbe. ;)

Ehhez ha jol latom, a WebGL driver kell, ami sajnos nincs IE9-ben, es 10-be se tervezik. A webGL-es VM-ek picit komolyabbak, es pontosabban tudnak C-re forditani, epp a korlatozasaik miatt.

De ezek utan - bar azert en talalkoztam mar java-ban irt x86 vm-mel is, ez a JPC, tessek, itt egy linux X-szel appletben: http://jpc.sourceforge.net/dsldesktop.html - senki nem panaszkodhat, hogy a js az milyen lassu mar :)

Mar csak a DOM-ot razza valaki gatyaba...

No, kis fejlesztés, és a virtualizáció is működni fog chromebookon :D
Nagyon tetszik a cucc, még akkor is ha semmi értelme látszólag.

Bugos a Firefox 4.

Üssétek be a parancssorba:
dd if=/dev/zero bs=1024 count=30000 of=/dev/mem

A virtualizált Linux kernel panic után újraindulna, de a böngésző teljesen meghal, ki kell lőni.

Valahogy ttyS1-re kellene bindelni egy websocket-et.
Hiányzik a networking még így.

Volt egy ilyen windows 3.1-el is. Szintén js. Sokkal gagyibb volt. :P

hacksagon is a hexaéder

Talán tavaly volt egy olyan kacsa hogy PHP alapon készít valaki operációs rendszert. :-) Ez legalább olyan durva.

A nyelv választás még nincs teljesen megírva az összes modulra, de ettől függetlenül jó.

A mobil bejelentkező képernyőt viszont muszáj volt átírni, hogy a beviteli mezők fent legyenek, mert fekvő képernyőnél (nekem) ez a praktice.

Sajnos itt a vogon űrhajó zsilipkamrájában már bánom, hogy nem jegyeztem meg, mit mondott telepítéskor a hiányzó részekről
(arra viszont emlékszem, mit mondott anya a tudásról és az ismétlésről).

valahol olvastam, hogy még a UNIX hőskorában egy admin véletlenül rm -rf /-elt, és nem akadályozta meg semmi a futását. észrevették, lelőtték az rm-et, és úgy hozták vissza a rendszert! valahol véletlenül maradt egy bináris fájl, abba talán gépi kódban írtak egy cat-et, és így, lépésről-lépésre visszaépítettek annyit, hogy külső forrásból tudjanak binárisokat visszaadni a rendszernek :)

------------------------------------------
Egyetlen vi-parancsot ismerek, a kilépést.

seeking..........FOUND! ehun van e. rosszul emlékeztem, mégsem a catet írták meg, de mentségemre szolgáljon, hogy rég olvastam már, és a memóriám sem a régi.

(megnéztem a freeBSD-s előadásod első két részét. le a kalappal, megjött hozzá a kedvem :))

------------------------------------------
Egyetlen vi-parancsot ismerek, a kilépést.

Hát, ez valahogy picit vérzik számomra. Lehet, hogy én nem tudok dolgokat, és azért, de azért kételkedem :)

I leant over to another terminal, already logged in, and typed
grep 147 /etc/passwd
only to receive the response
/etc/passwd: No such file or directory.
Instantly, I guessed that something was amiss. This was confirmed when in response to
ls /etc
I got
ls: not found.

A grep megvan, de az ls nincs? Ha töröltek mindent, akkor miért van meg a grep? ha nem töröltek mindent, akkor miért nincs meg az ls? Az echo be van építve a shellbe, mint később látjuk, akkor valószínűleg a grep is, az ls miért nem? És a cd miért?

... I spied the following lines:
# cd
# rm -rf *

A cd paraméter nélkül a home könyvtárba visz, szóval miért tűnik el minden, ha törölsz mindent a home könyvtárból? Persze lehet hogy csak egy typo, és lemaradt a / a leírásból.

Mindenesetre valahogy furcsa ez. Mikor még kis p*cs voltam akkor is volt otthon egy boot floppy félretéve, ne már hogy egy ilyen helyen ahol szalagra backupolnak nincs egy boot floppy a backup visszatöltésére!? Röhejnek érzem

Nem olvastál eléggé figyelmesen. Nem mindent töröltek, mert közben valaki nyomott egy Ctrl-C-t. Ettől lett kissé félkész a rendszer (pl. le van írva, hogy az userek vackait tartalmazó - /home? - pl. megmaradt, és pont az volt a lényeg, hogy ne vesszen az is el).

Tehát valószínűleg az volt, hogy (mint pl. nálam most is, FreeBSD alatt), az ls az /bin/ls, míg a grep az /usr/bin/grep.

Az, hogy az echo a shell beépített parancsa, az a korai időszakban (itt valami 4.3BSD-t emlegettek, az nem tegnap volt) - nem volt természetes dolog, szerepel is a történetben, hogy David Korn "nagy" találmánya volt (a Korn-shellben) - ezzel mondjuk nem értek egyet, szerintem már korábban is volt, de annyira már nem ismerem azokat a rendszereket. Ellenben ahogy feltételezed, hogy a grep is része a binárisnak, az már a busybox-os "modernebb" rendszerek sajátja.

A root user HOME-ja nagyon sokáig / volt, tehát a root-ként kiadott "cd" pont oda vitt. És megnyugtatlak, ma is van (friss) UNIX, amelyiknél ez az alap (meg az, hogy elmeséljük, hogy javasolt/szokták a usermod-dal ezt módosítani /root-ra).

Nem tudom mikor voltál kis p*csa az otthoni boot floppyddal, de azért volt jópár rendszer, amiben nem volt floppymeghajtó - így onnan nem is lehetett bootolni. Amúgy pedig az is szerepel, hogy féltek a nemtommilyen szalagos telepítőt elindítani - mert féltek, hogy az letakarítja a diszk maradékát is :-) Azért a 4.3BSD idején egy átlag felhasználó nem túl sűrűn telepítgetett abban az időben. (Én életem első munkahelyén 2 és fél év alatt nemcsak hogy nem telepítettem UNIX-ot, de nem is láttam azt telepíteni, pedig elég szép nagy számítógépparkunk volt, kb 99%-ban UNIX-ot futtató gépekkel - ja és fejlesztő voltam, kb 1 hónap után root jelszóval.)

Maradjunk annyiban, szép történet, egyszerű, ötletes megoldásokkal, és ha gáz van, jó ha az ember gondolkodik.

Négy giga, ugyan már... Az elképzelhetetlenülsok :) Első (most majdnem azt írtam, hogy eddig egyetlen, aztán rájöttem, hogy van két 2/4G-s dat valahol) szalagos cuccom egy 150MB-os kapacitást felmutató (ARCHIVE Viper) QIC 120/15-es kazettát használó jószág volt. És arra bőven elfért egy komplett rendszer teljes mentése...

nem elég gondolkodni, hideg fejjel kell gondolkodni. mivel szemtelenül fiatal vagyok, megkérdezem, hogy ekkoriban automatizált volt-e a backup, és ha igen, hardverközeli szemszögből hogyan ment végbe?

------------------------------------------
Egyetlen vi-parancsot ismerek, a kilépést.

Nem értem, hogy hol van itt a hírlopás. A PCFórum is leközölt valamit, a HUP is. Meg gondolom kismillió másik szakmai weboldal.

Különben is, miből gondolod, hogy lopta a hírt? Szerinted a pcforum az egyetlen platform, ahol lehet találkozni friss információkkal?
Ott se igazán hivatkoztak semmilyen forrásra, és nem valószínű, hogy a cikk írója a programozó weboldalát nézegette volna, vagy hogy a programozó kifejezetten a pcforumot értesítette, hogy van valami újdonság.

Ettől függetlenül lehet, hogy a pcforum inspirálta ennek a cikknek a létrejöttét. Ez esetben jogos lehet a feltételezésed, de:
Miért kell ennyire sötétnek lenni, és mindig a rosszat feltételezni, és mindenkit letámadni, beszólni, vádolgatni?

Sajnos nem olvasom a nevezett weboldalt, de sok jót hallottam már róla! Itt a HUP-on említette meg valaki tegnap ezt a témát, de belefutottam a Reddit-en, a H Open-en, a Slashdot-on és Twitter-en is. Lehet, hogy felírom a PC Forum-ot is a HUP rendszeres hírforrásai közé! Köszi!

( :))) )

--
trey @ gépház

Hát, annyira nem akarom őket szidni, de azért nagyon tömegblog üzemmódban vannak. Kb mint az index, nyomatják a bullshitet. Meg asszem nem komálják a linuxot, szóval erősen ferdítenek bizonyos dolgokat. Itt is van ferdítés, ahol azt írják, hogy indokolatlanul kell friss böngésző a cucchoz, holott, ha picit beleolvastak volna a cikkbe, akkor tudnák, hogy typed array támogatás kell. Ami nincs IE9-ben. Szerintem. De lehet, hogy van, ezesetben én tudom rosszul.

Szerk: ja hogy irónia :D

+1
Nyilván erősen marja egy kereskedelmi oprendszer bértollnokainak és érdekeltjeinek, hogy efféle bravúr fel sem merülhet az ő kedvenceik háza táján. (A nyílt forrás a kulcs és a jövő, nincs mese. Legalábbis a tömegesen használt szoftverek szintjén mindenképpen.)

"Lehet, hogy felírom a PC Forum-ot is a HUP rendszeres hírforrásai közé"

Én a helyedben nem tenném, Sting teljesen fogalom nélkül van, nem érdemes rá hagyatkozni, lásd pl. a hivatkozott cikkben:

"A megoldás ugyanakkor nem tökéletes, hiszen például a HTML5-ös teszteken minden más böngészőnél magasabb pontszámot elért és a JavaScript sebességtesztekben is több versenytársát maga mögé utasító IE9-et is "túl öreg"-nek nyilvánítja, és működéséhez - nyilván teljesen indokolatlanul - a Chrome ill. a Firefox legújabb kiadásait követeli."

A WebGL specifikációhoz tartozó Typed Array az ok.

Ezt meg kell előlegezni. Nyomulós idióta seggnek kell lenni, fogadatlan prókátornak, és ha elég jó vagy a mocskolódásban, akkor felkeresnek az erre illetékesek és valamilyen módon kompenzálják erőfeszítéseidet. Persze cserébe olyan szinten exponálnod kell magad és emberileg lealacsonyítanod magad a hülyeséggel, hogy sose hátrálhass ki később.
Ja, és egy gerinceltávolító műtét előtte.

--
"SzAM-7 -es, tudjátok amivel a Mirage-okat szokták lelőni" - Robi.

Most látom, hogy a http://bellard.org/jslinux oldal tovább gazdagodott... már lehet bevinni nagyobb adatmennyiséget is (akár binárisan) a vágólap (clipboard) révén. :-) Lásd lent a News (és FAQ) linket.