Эта заметка адресована в первую очередь тем, кто все еще в танке и не в курсе последних breaking news. Вполне вероятно, что остальные тоже смогут найти что-нибудь интересное ниже :)
Fabrice Bellard представил общественности полноценный эмулятор компьютера, написанный на javascript и полностью исполняющийся в браузере (внимание - пока работает только под Chrome 11 и Firefox 4). С эмулятором, на котором запущен настоящий Linux с Busybox, можно поиграться вот тут.
Этот проект отличается от похожих уже существующих проектов следующими вещами.
- Этот эмулятор написан человеком, который до этого разработал QEMU - эмулятор процессора, который используется в современных системах виртуализации, таких как Xen, KVM и Virtualbox. Также Fabrice Bellard основал проект FFmpeg - набор кодеков для видео и аудио, который присутствует в том или ином виде почти на любом современном компе, телефоне или любой другой железяке, умеющей работать с видео или аудио. Так что можно надеяться, что это не школьная поделка и не лабораторная работа студента.
- Этот эмулятор теоретически может исполнять любые программы (в т.ч. и различные операционные системы), скомпилированные под любой процессор (пока поддерживается только x86), прямо в браузере. Программы не требуют никакой доработки - их не нужно модифицировать или перекомпилировать. К сожалению, программы, требующие для своей работы такие распространенные устройства, как видеокарта, звуковая карта, жесткий диск и сетевая карта, еще не работают, т.к. пока отсутствует эмуляция соответствующих устройств. К счастью, эмуляцию видеокарты и жесткого диска в браузере сделать не проблема. Видеокарта легко эмулируется с помощью canvas, плюс можно использовать WebGL для поддержки 3d. Жесткий диск еще легче эмулируется с помощью Web Storage. Звуковую карту, может быть, можно будет эмулировать с помощью audio элемента. Эмулятор же сетевой карты в браузере нельзя реализовать, т.к. браузер не позволяет работать с raw sockets. Единственно возможное решение - клиент-серверная сетевуха, где браузере передает сетевые пакеты на сервер по HTTP. Сервер же, в свою очередь, пересылает пакеты, пришедшие из браузера, на настоящую сетевуху, а пакеты, пришедшие на сетевуху, шлет обратно в браузер.
- Программы под эмулятором работают довольно быстро, что позволяет запускать на нем ресурсоемкие по меркам 90-х годов приложения. Например, у меня под хромом cat /proc/cpuinfo | grep bogomips показывает 20 Bogomips. Уверен, что скорость работы этого эмулятора будет расти благодаря будущим оптимизациям javascript движков и самого эмулятора.
Зачем это нужно?
В первую очередь, конечно же, just for fun. Если немного поразмыслить, то на ум приходят следующие идеи.- Запуск устаревших программ (в первую очередь, конечно же, игры) под устаревшие операционные системы (DOS, Windows 3.*, Windows 95) прямо в браузере.
- Запуск demo-версий программ прямо из браузера без их загрузки и установки на компьютер.
- Запуск desktop-версий программ прямо из браузера. Например, разработчики могут сэкономить и не писать отдельную версию программы под web, а использовать единственную версию как под desktop, так и в любом устройстве, где есть браузер с поддержкой эмулятора.
- Использование вычислительных мощностей машин пользователей для решения каких-либо задач с помощью программ, скомпилированных под x86 процессор. К сожалению (или к счастью), полноценный ботнет не получится ввиду вышеупомянутых проблем с эмуляцией сетевой карты :)
- Предоставление программы только в скомпилированном виде без исходников. Такой способ сокрытия исходников может быть надежнее, чем любой существующий на данный момент обфускатор javascript кода, особенно если компилирвать программу с максимальным уровнем оптимизации.
- Классика жанра - rm -rf /.
- Fork bomb. Попробуйте написать ее на C и скомпилировать с помощью имеющегося там в наличии компилятора tcc.
- Напишите свой бенмарк на С и сравните производительность под разными браузерами. По словам разработчика, сейчас Firefox 4 быстрее, чем Chrome 11, в два раза.
- Идея для красноглазых linux-маньяков :) - подмените загрузочный образ используемого в данным момент linux'а своим загрузочным образом.
Релоцировались? Теперь вы можете комментировать без верификации аккаунта.