Linux umí nastartovat i ve vašem prohlížeči

Petr Krčmář 19. 5. 2011

Za těch dvacet let už jsme viděli Linux běhat v různých prostředích. Od mobilních telefonů, přes různé tablety, set-top-boxy, až k toustovačům nebo fotoaparátům. Teď si můžete spustit Linux i ve svém prohlížeči. Dokazuje to flexibilitu Linuxu i schopnosti moderních prohlížečů, které dokáží emulovat x86.

Možná vám jméno Fabrice Bellard vůbec nic neříká. Ale vězte, že to je člověk, který je zodpovědný za vznik známého virtualizačního nástroje QEMU. Také je to jeden z lidí, kteří se pokoušejí na desktopových počítačích počítat hodnotu Pí a je zakladatelem projektu FFMPEG. Pokud jeho jméno neznáte, pak určitě znáte jeho projekty.

Fabrice Bellard se snaží posouvat hranice a nutno říct, že mu to jde. Jeho poslední projekt je také takovým posunem hranic – podařilo se mu naprogramovat emulátor procesoru x86 ve webovém prohlížeči. Jeho emulátor je natolik funkční, že se mu na něm podařilo spustit Linux s kompletním funkčním prostředím.

Pokud si to chcete vyzkoušet „na vlastní prohlížeč“, navštivte adresu bellard.org/jsli­nux nebo si klikněte na velké zelené tlačítko napravo. V obou případech vám začne v prohlížeči startovat linuxové jádro s plnohodnotným prostředím. Nakonec skončíte v příkazové řádce přihlášení jako root.

Jak to funguje?

Podobné věci už jsme viděli dřív, ale ty byly buď jen „emulátorem unixového prostředí“ nebo vzdáleným terminálem k serveru, na kterém vše vzdáleně běželo. Bellardův výtvor je ale jiný. Využil svých zkušeností s vývojem QEMU a napsal emulátor architektury x86 přímo v JavaScriptu.

Celý kód je napsán v čistém JavaScriptu využívajícím typová pole podporovaná moderními prohlížeči. Oficiálně emulátor běží ve Firefoxu 4 a Chrome (Chromium) 11. Ve vyvíjeném Chrome 12 je chyba, která způsobuje nefunkčnost emulátoru. Software emuluje následující hardwarové komponenty:

  • 32bitový x86 procesor
  • programovatelný řadič přerušení 8259
  • programovatelný časovač 8254
  • UART 16450

Procesor se podle Bellarda blíží zhruba procesoru 486 bez matematického koprocesoru. To ovšem není pro Linux problém, protože kvůli podpoře starších počítačů obsahuje také vlastní emulátor koprocesoru. Procesor má ještě několik dalších omezení.

  • neumí instrukce MMX ani SSE
  • chybí mu i některé další málo používané instrukce
  • nemá reálný režim
  • nepodporuje 16bitový chráněný režim

Podle Bellarda by nebyl problém schopnosti emulátoru rozšířit, ale stoprocentní podpora všech vlastností procesorů x86 nebyla jeho cílem. Rozhodl jsem se implementovat jen úplné minimum, abych rozběhl Linux a jeho aplikace, říká Bellard.

Také periferiemi se při vývoji nijak nezabýval. Neexistuje tedy žádná synchronizace mezi frekvencí virtuálního procesoru a reálným časem. Čas v emulovaném Linuxu tedy neběží správnou rychlostí. Stejně tak nebyla zatím naprogramována podpora sítě. Z emulovaného stroje si tedy ani nepingnete, ačkoliv síťové příkazy jsou v něm obsaženy. Ping na localhost ale samozřejmě funguje.

Co se bootuje?

V takto připraveném prostředí je už možné nastartovat Linux. Fabrice Bellard zvolil linuxové jádro 2.6.20, ale teoreticky by bylo možné použít libovolné jádro, pokud by v něm byla zakompilována podpora emulovaného matematického koprocesoru. Jedinou úpravou byl prý malý patch, který zabraňuje jádru nadávat na pomalý sériový port. Bellard se rozhodl použít nekomprimované jádro, protože jeho obvykle rozbalování v paměti by na „prohlížečové platformě“ trvalo příliš dlouho.

Po natažení jádra se do vašeho prohlížeče stáhne 2MB ramdisk, který obsahuje samotnou „distribuci“. Jedná se o miniaturní systém postavený na BusyBoxu a doplněný o kompilátor TinyCC a nedokončený editor QEmacs.

V domovském adresáři leží i zdrojový kód jednoduché aplikace „Hello world!“, kterou si pomocí TCC můžete v emulovaném počítači skutečně zkompilovat a poté i spustit. Protože máte k dispozici editor, můžete začít libovolně experimentovat. Samozřejmě funguje i klasické rm -rf /, které ale nikde venku nic nezničí. Vše běží skutečně u vás v prohlížeči.

K čemu je to dobré?

K reálnému nasazení se (zatím?) takový emulátor příliš nehodí, ale je dobrou ukázkou možností dnešních prohlížečů. Zároveň může sloužit jako výukový kód pro někoho, kdo se chce naučit pokročilým kouskům v JavaScriptu­. Kromě toho ale může posloužit třeba jako test výkonu dnešních prohlížečů.

Fabrice Bellard uvádí i některé teoretické možnosti praktického využití. Při mírném vylepšení by například bylo možné propojit API některé z knihoven do vnějšího JavaScriptového světa a využívat pak jejich schopností. Hodit by se to mohlo například při kvalitním šifrování s využitím linuxových knihoven.

Stejně tak by podle Bellarda bylo možné po vylepšení emulátoru nastartovat například DOS a hrát v něm originální hry. Záleží jen na tom, jestli má o toto vylepšení někdo zájem.

Mikrorozhovor s autorem

Oslovili jsme Fabrice Bellarda a položili mu několik rychlých otázek ohledně jeho projektu.

Co bylo cílem emulátoru? Je to ukázka kvality Linuxu nebo prohlížečů?

Je to spíš demo prohlížečů. Od té doby, co jsem před několika lety zkoušel JS/UIX, jsem měl ten nápad v hlavě. Musel jsem nedávno pracovat na jednom embedded javascriptovém engine, takže jsem se k původní myšlence vrátil.

Jak dlouho vám vývoj emulátoru trval?

Asi dva týdny.

Budete jej ještě nějak rozvíjet?

Chci dát uživatelům možnost vkládat (copy/paste) do něj soubory. U dalšího vývoje je otázka, jestli existuje reálné využití takového emulátoru. Problém je, že je poměrně pomalý, což jeho využití značně omezuje.

Takže je to vlastně jen demo, které je hotové?

Nemám už v plánu žádné velké změny. Samozřejmě by bylo možné takto udělat plnohodnotný emulátor PC s VGA výstupem i zvukem, ale to už jsem udělal v QEMU.

Podnikatel.cz: Eshopy s dopravou zdarma. Zválcují ostatní?

Eshopy s dopravou zdarma. Zválcují ostatní?

120na80.cz: Jak si udržet zdravou vaginu

Jak si udržet zdravou vaginu

Vitalia.cz: Proč v Penamu nesypou koblihu moučkovým cukrem

Proč v Penamu nesypou koblihu moučkovým cukrem

Lupa.cz: Jak EET vidí ajťák aneb Drahá vražda UX

Jak EET vidí ajťák aneb Drahá vražda UX

120na80.cz: Vyzrajte na návaly a pocení v přechodu

Vyzrajte na návaly a pocení v přechodu

DigiZone.cz: DAB+ versus FM, ČRo a ČRa proti APSV

DAB+ versus FM, ČRo a ČRa proti APSV

120na80.cz: 10 nej přípravků na holení

10 nej přípravků na holení

Vitalia.cz: Mražené ryby z Makra byly falšované

Mražené ryby z Makra byly falšované

Vitalia.cz: Martin Kasa o byznysu s léky

Martin Kasa o byznysu s léky

Lupa.cz: Zaplatíme ti, když ti seženeme práci

Zaplatíme ti, když ti seženeme práci

DigiZone.cz: ČT neskončí s nízkým rozlišením podle plánu

ČT neskončí s nízkým rozlišením podle plánu

Podnikatel.cz: Když už je sexy, tak ať taky funguje

Když už je sexy, tak ať taky funguje

Lupa.cz: Kam si doma dáte internet věcí? Na polici?

Kam si doma dáte internet věcí? Na polici?

Lupa.cz: Babiš: nevím o návodu, jak obejít blokování webů

Babiš: nevím o návodu, jak obejít blokování webů

Vitalia.cz: Proč máme prasklý chléb nejraději?

Proč máme prasklý chléb nejraději?

Vitalia.cz: Ministerstvo: tyto příbory jsou nebezpečné

Ministerstvo: tyto příbory jsou nebezpečné

Podnikatel.cz: Šizený guláš na pultě. Jako Lidl to nedělejte

Šizený guláš na pultě. Jako Lidl to nedělejte

120na80.cz: Zjistěte, zda je vaše klíště infikované

Zjistěte, zda je vaše klíště infikované

Vitalia.cz: Dnešní patolog o mrtvolu téměř nezavadí

Dnešní patolog o mrtvolu téměř nezavadí

Vitalia.cz: 7 nemocí očí, které musíte léčit včas

7 nemocí očí, které musíte léčit včas