На языке JavaScript написан полноценный эмулятор ПК, способный загрузить Linux
Французский математик Фабрис Беллард (Fabrice Bellard), основавший в свое время проект QEMU, представил реализацию полноценного эмулятора
x86-совместимого ПК, написанную полностью на языке JavaScript.
Реализована эмуляция 32-разрядного x86-совместимого CPU, контроллера
прерываний 8259, таймера 8254 и приёмопередатчика 1650 UART.
Эмулятор способен загрузить Linux в окне современных web-браузеров (работа проверена в Firefox 4 и Google Chrome 11). После запуска эмулятора производится загрузка Linux-ядра 2.6.20 (конфигурация ядра)
c созданием ram-диска, в котором используется файловая система Ext2.
Загрузка происходит за несколько секунд, после чего выводится
стандартное приглашение командной оболочки из пакета busybox. Окружение
содержит работоспособный TCP-стек (по умолчанию поднимается
loopback-интерфейс), присутствуют стандартные команды, такие как
ifconfig, ping и netstat. В состав загружаемого в эмуляторе
Linux-дистрибутива включен достаточно полный набор приложений, например,
имеются текстовые редакторы vi и qemacs, компилятор tcc, сетевые
серверы dnsd, ntpd, ftpd, httpd, sendmail. В качестве системной
библиотеки используется uClibc.
В процессе работы эмулятор использует типизированные JavaScript-массивы,
позволяющие увеличить производительность и уменьшить потребление памяти
при работе с наборами данных фиксированного размера.
JavaScript-реализация основана на коде динамического x86-транслятора,
созданного в рамках проекта QEMU, адаптированного с учетом использования
интерпретатора.
В настоящее время эмулируется набор инструкций i486, за
исключением поддержки FPU. Отсутствие математического сопроцессора не
мешает работе Linux, так Linux поддерживает использованием эмулятора
FPU. Кроме того, в эмуляторе пока не реализована поддержка наборов
инструкций MMX и SSE, имеются некоторые особенности выполнения проверок
при работе с памятью, не реализована поддержка реального режима и
16-разрядного защищенного режима. Отмечается, что в новом эмуляторе
реализовано несколько отсутствующих в QEMU оптимизаций, которые
позволяют выполнять определенные действия более эффективно, чем в QEMU.
Мотивом создания эмулятора стал интерес Фабриса Белларда к
реализации современных JavaScript-движков, которые на современном этапе
развития уже достаточно быстры, чтобы выполнять такие задачи как запуск
эмуляторов. В будущем Беллард не исключает возможности создания своего
JavaScript-движка. По словам Белларда, создание представленного
эмулятора стало прекрасной школой по изучению оптимизации
JavaScript-кода с учетом особенностей современных JavaScript-движков,
таких как Jaeger Monkey (Firefox 4) и V8 (Chrome).
Что касается субъективной оценки производительности, то эмулятор в
настоящее время работает при использовании Firefox 4 примерно в два
раза быстрее, чем при запуске под управлением Chrome. Причины такого
различия пока детально не анализировались, возможно были упущены
какие-то особенности движка V8, так как движок Jaeger Monkey был более
детально изучен Беллардом.