Hlavní navigace

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

19. 5. 2011
Doba čtení: 4 minuty

Sdílet

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.

Cloud23

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.

Autor článku

Petr Krčmář pracuje jako šéfredaktor serveru Root.cz. Studoval počítače a média, takže je rozpolcen mezi dva obory. Snaží se dělat obojí, jak nejlépe umí.