[Из песочницы] Операционная система на JavaScript? JsOS

Приветствую, хабровчане!


Как вы думаете, можно ли создать полноценную операционную систему на языке программирования JavaScript, с которой можно загружаться?


Правильный ответ — можно!


image


Сегодня я хочу рассказать вам про проект JsOS.


JsOS — операционная система, на JavaScript.
Изначально проект создавался на основе JS библиотеки и ядра runtime.js, но после закрытия последнего, стал самостоятельным проектом.


В настоящее время, проект находится в разработке, так что любой вклад приветствуется.


Рассмотрим базовую структуру проекта.


JsOS состоит из двух частей (уровней):


  • Низкий уровень (ядро) состоит из частей, написанных на C++ и Assembler. Используется для базовой загрузки и передачи управления на высокий уровень. Так же, ядро предоставляет API для работы с аппаратной частью.


  • Высокий уровень полностью написан на JavaScript и реализует работу операционной системы.


Рассмотрим подробнее структуру высокого уровня:


  • core — здесь находится ядро операционной системы (не путать с ядром (kernel) низкого уровня), которое обеспечивает базовую функциональность;
  • driver — драйвера и API для работы с различными устройствами;
  • apps — дополнительные пользовательские приложения, которые устанавливаются командой install;


Основные возможности операционной системы
  1. Полноценный командный интерпретатор.
  2. JavaScript Repl (команды, начинающиеся с #).
  3. Поддержка PS/2 мышек и клавиатур.
  4. Поддержка проигрывания звуков на PCSpeaker.
  5. Поддержка Virtio (QEMU) и Realtek (rtl8139) сетевых карт.
  6. Поддержка ATA жестких дисков.
  7. Поддержка файловой системы (FAT32).
  8. Поддержка VGA и BGA.
  9. Совместимое с Node.js API (модули os, fs, т.п.).
  10. Поддержка ASCII (UTF-8 в графическом режиме).
  11. Поддержка графического и псевдо-графического ASCII интерфейса.
  12. Поддержка PCI устройств.



А теперь перейдем к практике


На этот счет есть 2 варианта:


  1. Скачать .iso образ из раздела Releases.
  2. Собрать и запустить последнюю версию.


Настоятельно рекомендуется использовать вариант номер 2, так как он предоставляет бóльшие возможности и не на много сложнее первого.


Для этого требуется установленный Node.js и QEMU.


# 1. Клонируем репозиторий:
git clone https://github.com/PROPHESSOR/JsOS
# 2. Переходим в папку:
cd JsOS
# 3. Устанавливаем зависимости:
npm i
# 4. Устанавливаем JsOS-CLI:
sudo npm i -g jsos-cli
# 5. Запускаем:
jsos start


Всё!


Если Вы действовали по инструкции — появится окно эмулятора QEMU, в котором загрузится JsOS.
Если же возникли проблемы — создайте issue и Вам помогут.


Основные возможности операционной системы можно посмотреть, введя команду help.


На момент составления статьи, команда help имела следующий вид:
image


А дополнительный функционал можно подключить с помощью команды install название_пакета.
Доступные пакеты можно посмотреть с папке js/apps.


Например, пакет screenfetch является портом одноименной Linux утилиты, которая отображает информацию об операционной системе.


Установить его можно командой install screenfetch, а запустить — start screenfetch.


image


Подробнее о создании своих пакетов можно прочитать здесь.


Сейчас в комплект поставки так же входят пакеты, демонстрирующие возможности операционной системы:


  • brainfuck — порт одноименного языка программирования. Для быстрого Hello World напишите start brainfuck hw;
  • vim — порт популярного консольного текстового редактора;
  • speakplay — музыкальный синтезатор на PCSpeaker’е;
  • composer — программа для воспроизведения мелодий на PCSpeaker;
  • keylogger — программа, показывающая информацию о нажатой клавише;
  • pgtest — демонстрация возможностей псевдо-графического ASCII интерфейса;
  • example и другие примеры;


Все они работают через команды install и start.


Так же, на момент написания статьи, ведется работа над созданием графического интерфейса (ветки graphics-mode и pseudo-graphics), поддержки различных сетевых карт, а так же, над поддержкой USB (ветка usb).


Если Вы хорошо знаете C++ или JavaScript и имеете желание внести свой вклад в развитие операционной системы — пишите сюда.


Ссылки:


GitHub репозиторий проекта JsOS
GitHub репозиторий утилиты JsOS-CLI
GitHub репозиторий проекта runtime.js (проект закрыт)

© Habrahabr.ru