Support us

На javascript написан полноценный эмулятор компьютера

Оставить комментарий
На javascript написан полноценный эмулятор компьютера
Эта заметка адресована в первую очередь тем, кто все еще в танке и не в курсе последних 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 кода, особенно если компилирвать программу с максимальным уровнем оптимизации.
Уверен, что найдутся десятки других интересных способов использования данного эмулятора, которые на данный момент либо не совсем очевидны, либо кажутся абсурдными. О технических деталях этого проекта можно прочесть вот на этой странице. Напоследок привожу несколько банальных идей для экспериментов с linux'ом в этом эмуляторе.
  • Классика жанра - rm -rf /.
  • Fork bomb. Попробуйте написать ее на C и скомпилировать с помощью имеющегося там в наличии компилятора tcc.
  • Напишите свой бенмарк на С и сравните производительность под разными браузерами. По словам разработчика, сейчас Firefox 4 быстрее, чем Chrome 11, в два раза.
  • Идея для красноглазых linux-маньяков :) - подмените загрузочный образ используемого в данным момент linux'а своим загрузочным образом.
Оставляйте в комментариях свои идеи.
Место солидарности беларусского ИТ-комьюнити

Далучайся!

Читайте также
10 популярных курсов по изучению JavaScript для крутой веб-разработки
10 популярных курсов по изучению JavaScript для крутой веб-разработки
10 популярных курсов по изучению JavaScript для крутой веб-разработки
JavaScript остается одним из самых популярных языков программирования в мире. Мы собрали список курсов и сертификаций по Javascript от основ до необычных особенностей. В листинге как платные, так и бесплатные онлайн-курсы. Погнали за новыми знаниями!
2 комментария
Как оплачиваются самые популярные языки GitHub и какой прогноз
Как оплачиваются самые популярные языки GitHub и какой прогноз
Как оплачиваются самые популярные языки GitHub и какой прогноз
Хуже Windows. Linux стала рекордсменом по росту числа вредоносов
Хуже Windows. Linux стала рекордсменом по росту числа вредоносов
Хуже Windows. Linux стала рекордсменом по росту числа вредоносов
Rust стал самым быстрорастущим языком по числу разработчиков
Rust стал самым быстрорастущим языком по числу разработчиков
Rust стал самым быстрорастущим языком по числу разработчиков

Хотите сообщить важную новость? Пишите в Telegram-бот

Главные события и полезные ссылки в нашем Telegram-канале

Обсуждение
Комментируйте без ограничений

Релоцировались? Теперь вы можете комментировать без верификации аккаунта.

Комментариев пока нет.