Операционная система на 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/JsOS-Team/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 (проект закрыт)

Поделиться публикацией
Ой, у вас баннер убежал!

Ну, и что?
Реклама
Комментарии 166
  • 0
    Сколько системные требования?
    На какие устройства встанет?
    • 0
      Системные требования:
      CPU: x86_64
      RAM: > 128 MB

      Но пока рекомендуется использовать эмуляторы (вроде QEMU), вместо установки на реальное устройство, так как ОС находится в разработке
    • +14
      Но зачем? Написали бы хоть какие цели у этого проекта.
      Так-то, кросплатформенные JS приложения можно создавать/запускать и на существующих ОС
      • 0
        Смысл не в том, что приложения на JS, а в том, что сама ОС на JS (включая драйвера и прочее)
        • 0
          Про драйвера вроде как речь не идёт. Только про API и окружение
          • 0
            Идет. Есть драйвера PS/2, PCSpeaker, BGA, ATA, что-то под карты RealTek.
            • 0
              RTL8139
              Надо бы еще 8169…
              Но там дескрипторы и всё такое
            • 0

              Вот драйвер клавиатуры, например: https://github.com/PROPHESSOR/JsOS/blob/master/js/driver/ps2/keyboard.js


              Прерывания, hex-коды и вот это всё

              • 0
                Интересно, при печати в 400 символов в минуту будет сильно заметно, что ввод тормозит? Надеюсь, какой-нибудь механизм отложенной обработки прерываний имеется и колбэк irq.on(...) вызывается не из обработчика прерываний?
                • 0
                  Возможно, будет подтормаживать рендеринг…
            • 0
              JsOS состоит из двух частей (уровней):
              Низкий уровень (ядро) состоит из частей, написанных на C++ и Assembler. Используется для базовой загрузки и передачи управления на высокий уровень. Так же, ядро предоставляет API для работы с аппаратной частью.
              Высокий уровень полностью написан на JavaScript и реализует работу операционной системы.

              Вот тут написано что ядро и какой-то низкоуровневый API на C++ и ассемблере. А что тогда на js?
          • 0
            Утилизировать свободное время вестимо.
          • +1

            Теперь ждём PhpOS

            • 0

              Что-то такое есть https://sourceforge.net/projects/php-os/

              • 0
                Ну этот проект больше похож на os-js.org.
                Смысл JsOS в том, что это реальная операционная система, а не GUI в браузере
              • 0
                Тогда уж BrainfuckOs
                • –2
                  Читая список приложений под эту JsOS, споткнулся об composer, уж было подумал, что они завели интерпретатор PHP на JS. Жаль что нет, было бы весело.
              • +1
                А кто-нибудь в курсе как там обстоят дела с многопоточностью? Насколько я знаю v8 жестко завязан на однопоточной модели то есть запускать отдельные инстансы, (isolates, или как они там называются) чтобы обеспечить параллельность для вебворкеров — пожалуйста, но вот настоящей многопоточности — а именно c доступ к разделяемой памяти c zero-copy v8 в принципе не поддерживает. Поэтому что если задействовать в итоге можно будет только одно ядро то мне кажется не было никакого смысла вообще начинать разработку JsOS
                  • 0
                    SharedArrayBuffer даже если и позволит шарить данные между процессами (кстати для этого нужна реализация процессов или точнее виртуальной адресации в JsOS) не позволяет работать с объектами. То есть это просто массив чисел. И вместо создания объектов и обновления их свойств, удаления в общем вместо работы с деревом или графом связанных объектов из разных потоков нужно будет все это реализовывать самостоятельно через массив чисел — собственные классы, объекты, наследование и главное собственный сборщик мусора и все это с диким оверхэдом. В итоге от js останется жалкое подобие Cи без указателей.
                • 0
                  На сколько знаю я, пока проект однопоточный, но с какой-то хитрой системой управления этим самым протоком…
                  Но ничто не мешает в будущем сделать многопоточность
                  • 0
                    А процессор хоть в защищённый режим переводится?
                    • 0
                      As far as i know, да
                      • 0
                        И это делает код на уже JS или ещё низкоуровневый?
                        • 0
                          Довольно идиотский вопрос. Ни в одной известной мне ОС это не делается иначе, как на ассмеблере. Что в Linux, что в Windows, что в любой другой ОС.

                          Слишком сильно эта часть завязана на специфику конкретного процессора. Документация буквально говорит: сначала установите такой регистр, потом сякой, потом сделайте long jump… Как вы это на платформно-независимых языках собрались делать?
                          • +1
                            Так в том и суть вопроса была! Что ж сразу с козырей-то… %)
                          • 0
                            Это делает GRUB.
                            А вот в 64-битный режим уже переводит сама система
                  • +30
                    Простите, очень тяжело было удержаться.
                    Картинка, которую все ждали в комментариях

                    • 0

                      С вами бывает такое когда кто-то говорит глупость, а неудобно почему-то становится вам?

                      • –1
                        Глупость — это писать «операционную систему» на JS. В которой собственно главная часть ядра ОС — даже не на этом самом JS. Да-да, без hardware-dependent ассемблера никуда, но при наличии Си(плюсплюс)-прослойки оно не имеет права называться «ОС на JS».

                        P.S. Вот если б автор встроил JS с утилитами прямо в GRUB, и то было бы интереснее (я писал модули под GRUB2, он в принципе заслуживает право называться маленькой операционной системой).
                        • 0
                          Как не странно, эффект получился бы, примерно, тот же…
                          Просто интерпретатор имел бы немного другой вид…

                          UDP: И да, ядро ≠ ОС. Ядро — C++/Asm. ОС — JS.
                    • +3

                      Прочитал как "Джизос". Мне кажется, англосаксы и РПЦ должны заценить проект.

                      • +7

                        Я понимаю, что это сугубо концептуальная и учебная работа, но все-таки в чем смысл, если «низкий уровень (ядро) состоит из частей, написанных на C++ и Assembler»? В том, что на JS можно писать консольные приложения, никто и не сомневался.


                        Ну и взяли бы тогда уж Rust для ядра, хипстерить — так уж по полной:) да и какая-никакая гарантия от ряда ошибок, свойственных C++.

                        • +2

                          И вместо JS — wasm!

                          • +6
                            Потому что на вопрос «Можно-ли написать OS на JS?» по-настоящему правильный ответ — «нельзя» ;)

                            • +1
                              Можно, если его компилировать
                              • 0
                                Но это не тот случай.
                            • 0
                              «В том, что на JS можно писать консольные приложения, никто и не сомневался.»
                              Нет) Сама консоль, драйвера для видеокарты/мыши/клавиатуры и прочее написано на JS.
                              На низком уровне только загрузчик и сам V8
                            • –33
                              ИМХО пустая трата времени и баловство. Если есть свободное время то лучше потренироваться с Go или Nim. Какой смысл писать ОС на Яве, а Сапёр-на ассемблере? Посадите тогда уже несколько деревьев если заняться больше нечем. Пользы больше будет.
                              • +19
                                потренироваться с Go
                                Зачем тренироваться с Гоу?

                                на Яве
                                Зачем путать Java и JS?

                                Посадите тогда
                                Зачем указывать людям, как им баловаться?
                                • –38
                                  Это у Вас юношеский максимализм, скоро пройдёт.
                                  • +24
                                    О! Аппеляция к возрасту, сразу виден ваш интеллектуальный уровень.
                                    Мне 28, батенька. Я уже минимум 5 лет как не юноша.
                                    А максимализм — у вас. Люди должны делать только то, что вы считаете правильным. JS — это плохо, а Go — хорошо, просто потому что вам нравится Go. Это и есть максимализм.
                                    • –30
                                      Дело не в возрасте, а в интеллектуально-нравственном развитии. Можно и в 50 быть мальчиком и играть в машинки, только большие.
                                      Я не говорил что мне нравится Go, это ваши детские выдумки. Мне нравится Pascal. Дело в том что с точки зрения элементарной логики такие критические по времени/производительности приложения как элементы ОС нет смысла писать на интерпретируемых и даже прекомпилируемых языках. Это называется рациональное мышление.
                                      • +12
                                        Вы так говорите «играть в машинки» как будто это что-то плохое.
                                        • 0
                                          Это не я говорю, специалисты так считают.
                                          Цитата из википедии:
                                          Инфантилизм (от лат. infantilis — детский) — незрелость в развитии, сохранение в поведении или физическом облике черт, присущих предшествующим возрастным этапам.

                                          Термин употребляется как в отношении физиологических, так и психических явлений.

                                          В переносном смысле инфантилизм (как детскость) — проявление наивного подхода в быту, в политике и т. д., также неумение принимать своевременно продуманные решения.


                                          Но бывает и хуже. Есть ещё в России мальчики, которы носят погоны и не наигрались в солдатики. А чьи-то матери получают похоронки. Так хорошо это или плохо, как считаете?
                                          • 0
                                            Есть ещё в России мальчики, которы носят погоны и не наигрались в солдатики.
                                            Если бы только в России.

                                            А чьи-то матери получают похоронки. Так хорошо это или плохо, как считаете?
                                            Это вопрос очень философский. Если бы была возможность сделать так, чтобы «не наигравшиеся в солдатики» мальчики из других стран перестали делать то, что они делают — то всем было бы гораздо лучше.

                                            Но поскольку это невозможно, то, разумеется, лучше оправить мальчиков, желающих «играть в солдатики» куда-нибудь в другую страну, тогда можно уменьшить общее количество похоронок…
                                        • +7
                                          у мужчин детство сложное только первые 40 лет =)
                                          • +4
                                            у мужчин детство сложное только первые 40 лет =)

                                            Уверяю, дальше не становиться легче. Игрушек, с которыми хочется поиграть, все больше, а времени — все меньше )
                                            • 0
                                              мужчины — это чудом выжившие мальчики…
                                            • –1
                                              >> Мне нравится Pascal
                                              А дальше можно и не читать.
                                              • +2
                                                Можно и в 50 быть мальчиком и играть в машинки, только большие.

                                                Вы про те, которые в афганистане или сирии?

                                                Лучше играться в jsOS, а еще лучше не указывать людям, которые живут не за ваш счет, как им жить и развлекаться.
                                        • +14
                                          Простите конечно, но какое вам дело до времени разработчика, а уж тем более до практической пользы его труда?
                                          • –23
                                            Да просто печально смотреть как люди впустую тратят время. А жизнь коротка.
                                            • +9
                                              Ну так не тратьте вашу, а другим не мешайте тратить ее как им хочется, другие люди вам не принадлежат и к вам отношения не имеют.
                                              • –7
                                                Я и не трачу. И вам не советую.
                                              • +9
                                                Да вообще. Некоторые комментарии на хабре пишут, вместо того, чтобы деревья сажать. Ужас просто.
                                                • +8
                                                  Так посади уже дерево — это намного полезнее чем печально смотреть.
                                                  • +5
                                                    ДА просто печально смотреть как люди впустую тратят время на комментарии на хабре, о экономии времени. А жизнь коротка.
                                                    • 0
                                                      Если работа над проектом приносит удовольствие (а также дополнительные знания и опыт), это нельзя считать тратой «впустую». Или вы из тех, кто считает напрасной тратой времени все что не приносит денег?
                                                  • 0
                                                    Есть более краткое выражение: «лучше бы водку пили».
                                                  • +1
                                                    А как же жизненный опыт? Да коротка жизнь, но если данный проект даст новый опыт, который в будущем автор сможет применить в других проектах, может оказаться бесценным
                                                    • +2

                                                      В первую очередь хотелось бы сказать ловите наркомана
                                                      А во-вторую: если это пустит JS разработчиков в embeded сегмент — то очень даже клёво. Разумеется это будет совершенно не так производительно как аналоги, но она далеко не везде нужна.

                                                      • +1

                                                        Их туда уже пустили. Есть espruino, есть даже его реализация от амперки. Или я не правильно понял embeded?

                                                        • +6
                                                          если это пустит JS разработчиков в embeded сегмент — то очень даже клёво
                                                          Система кушает 100 мегабайт оперативки в текстовом VGA-режиме. Может, не надо?
                                                          • –2

                                                            Нормально, производители железа как раз ждут более прожорливый софт.

                                                            • 0

                                                              Производители железа под текущий софт не успевают.


                                                              Раньше под задачу "кино, офис, пасьянс, интернет" подходил любой купленный компьютер. Дорогой неигровой компьютер отличался от дешёвого неигрового только количественно: монитор пошире, жёсткий диск побольше, корпус покрасивше, побольше клавиш на клавиатуре.


                                                              Сейчас же если купить системный блок или ноут из нижнего сегмента, то на них уже сразу после покупки сайты тормозят. Недавно Гугл отключил возможность переключиться на старый интерфейс Ютуба, пришлось на нетбуке перейти на левый десктопный клиент, потому что пользоваться сайтом стало невозможно.

                                                              • 0
                                                                У моей мамы ноут из нижнего ценевого сегмента, там стоит линукс и он прекрасно работает для таких задач
                                                                • 0

                                                                  Но Ютуб ведь в Линуксе такой же, и JS в нём тот же самый.

                                                                  • 0
                                                                    Я не знаю, что там, я просто говорю, что у нее все работает прекрасно
                                                                • 0
                                                                  Пользуясь случаем, хочу помочь братьям-ретроградам — старые браузеры гугл часто сам перенаправляет на старый фейс, а новые можно заставить, дописывая к концу урлов ключ вида /videos?disable_polymer=1
                                                                  • 0

                                                                    Ещё хуже. Пробовал через плагины Enhancer for YouTube и Tampermonkey дописывать disable_polymer=1 автоматически. Сначала пытается открыться тормозная страничка, некоторое время тормозит, потом происходит перекидывание на менее тормозную страничку с disable_polymer=1. Щёлкаешь по какое-нибудь ссылке, и опять открывается тормозная страничка, потом вместо неё менее тормозная.


                                                                    Плюнул, поставил десктопный клиент. Просто летает.


                                                                    Блин, на этом ноуте можно играть в Factorio, которой ничего не надо, кроме процессора. Неделю напролёт отстраивать базу и она отлично играется, ничего не тормозит и не лагает. А огромная межгалактическая корпорация не может родить нормальный интерфейс к своему сайту. С каждой итерацией получается всё хуже.

                                                                    • 0
                                                                      Я через Redirector сделал. Обычно только раз пытается открыть, потом помнит, вроде.
                                                                      Что за десктопный клиент?
                                                                      • 0

                                                                        То помнит, то не помнит, я не понял принцип. Клиент Perfect Tube из магазина Windows 10. Он вовсе не "perfect", но просто нормальный. Не пожалел 69 рублей.

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

                                                            Глядя на заголовок, надеялся на больший уровень упоротости. Но нет, всё более ожидаемо.
                                                            • +3
                                                              Просто хипстеры еще не достигли самого дна. Где их, гаденько хихикая, поджидает Фабрис Беллар. :3
                                                            • +3
                                                              Как вы думаете, можно ли создать полноценную операционную систему на языке программирования JavaScript, с которой можно загружаться?

                                                              Правильный ответ — можно! Если вместо JS использовать С++ и ассемблер.

                                                              Ожидал, что будет хотя бы о компиляторе, который позволил собрать из JS кода загрузчик.
                                                              А так — с таким же успехом можно сказать что NodeMCU — это ОС на Lua.
                                                              • +1
                                                                «Ожидал, что будет хотя бы о компиляторе, который позволил собрать из JS кода загрузчик.»
                                                                Это — следующий шаг)
                                                              • 0
                                                                Интересно, а какие врожденные недостатки С и ассемблера возможно исправить, переписав/написав с нуля операционную систему на одном из более современных языков? Или десятилетия разработки и новые компиляторы довели ядра основных ОС до идеала?
                                                                • 0
                                                                  Как Вы собираетесь получить доступ к низкоуровневым возможностям железа получить доступ? Тот же планировщик задач, обработку аппаратных исключений/прерываний и т.п. без всего этого никак не выйдет.
                                                                  • 0
                                                                    Это всё у нас есть
                                                                    • 0
                                                                      В любом случае это код на Си и какой-то мост в JS. Собственно, я и пытаюсь из статьи и комментариев понять, где проходит граница между низкоуровневым языком, где проходят границы, где какой API. В статье же нету никаких схем, которые дали бы об этом представление, да и вообще значимых технических деталей не густо.
                                                                      • 0

                                                                        В таком случае, лучше зайти в репозиторий.
                                                                        Там во многих папках есть README.md файлы (+ Wiki)

                                                                        • +1
                                                                          Посмотрел описание, посмеялся. Спасибо. Очень полезная инфа.
                                                                          • debug — Предназначение неизвестно.
                                                                          • takeHeapSnapshot — Снимает снимок кучи V8, но зачем?
                                                                          • systemInfo — Зачем?
                                                                          • –1
                                                                            Это осталось в наследство от runtime.js
                                                                  • 0
                                                                    Интересно, а какие врожденные недостатки С и ассемблера возможно исправить, переписав/написав с нуля операционную систему на одном из более современных языков

                                                                    Такие ошибки, как переполнение стека, там будут невозможны (в предположении, что у V8 их нет), например.
                                                                    Но вообще мне не кажется, что основной смысл именно в исправлении недостатков C / Asm.
                                                                    • +1
                                                                      Хорошо: в v8 нет массштабирования по ядрам процессора, как предлагаете исправлять? В синтаксисе нет поддержки конкурентного доступа к данным, локи, мютексы, и прочие примитивы, вы уже озвучили свои предложения по дополнению синтаксиса?
                                                                      Ну, а если честно, на мой взгляд, писать ОС на JS, все равно что от дождя прикрываться ладошкой, как ни старайся, лучший выход — бросить эту идею и бежать до ближайшего укрытия.
                                                                    • 0
                                                                    • +2
                                                                      Один вопрос — зачем?
                                                                      • +2
                                                                        Потому что это интересно.
                                                                      • –1
                                                                        посмотреть с папке
                                                                        в тексте поправьте :)
                                                                      • –1
                                                                        Когда делали JavaOS то хотя бы причины были очевидны.
                                                                        • –1

                                                                          А я рад что js движется в массы, даже если в этом мало пользы. Тем более сам по себе язык отличный, и может когда нибудь его перестанут воспринимать как игрушку в браузере

                                                                          • +4

                                                                            Ээ, Вы там не из 2005 пишете, случаем?

                                                                        • –1
                                                                          Классный проект, спасибо за статью. Пишите о том, как двигается разработка, хотя бы раз в месяц =)
                                                                          • 0
                                                                            Если проект заинтересовал — можете наблюдать за GitHub репозиторием ;)
                                                                          • –1
                                                                            Стоит присмотреться к данному проекту повнимательней…
                                                                            • 0

                                                                              Тема с JavaScript OS крутая, но как же я ожидал что терминальный доступ придумают сделать в нотации JavaScript, а не в какой-то другой, например самостоятельно придуманной. Идеально — полноценный JavaScript shell. То есть, например, не start screenfetch, а start.screenfetch().

                                                                              • +1

                                                                                Ну тогда уже app.start("screenfetch") =)
                                                                                На самом деле, тут 2 выхода:


                                                                                1. Использовать кастомный шелл
                                                                                2. Использовать eval режим (#$$.stdio.defaultStdio.writeLine("Hello world"))
                                                                                • 0

                                                                                  В моём опыте не было таких, кто использовал кастомные шеллы на юниксе просто потому, что кому-то не нравится синтаксис шелловского языка для написания скриптов. Все мирились и использовали shell script. Точно так же будет и тут, если тема JsOS зайдёт, большинство смирится и будет использовать то, что успешно работает "из коробки".


                                                                                  Но коли скрипты здесь можно писать, используя "eval-режим", проблема псевдо-языков для скриптинга вроде пропадает. Но опять таки, почему бы с самого начала полёта не убрать непривычный для JS синтаксис в шелле типа (#/*JS code*/), если эта ОС стремится быть такой JavaScript (стремится же?). То есть сделать шелл в точности таким, каким мы его видим в NodeJS или Developer Tools.

                                                                                  • 0
                                                                                    Тут shell нужно воспринимать не как язык программирования, а как командную строку (like DOS)
                                                                                    • 0
                                                                                      а как командную строку (like DOS)

                                                                                      На нём тоже батнички писали.
                                                                              • 0
                                                                                Стоит ли ожидать появления в будщем огромного кол-ва ОС на JS как в случае с JS фрэймворками?
                                                                                • 0
                                                                                  Сомневаюсь, если считать, что runtime.js появился в 2014 году и уже в 2017 прекратил своё развитие.
                                                                                  Да и сам процесс разработки невероятно сложен…
                                                                                • +2
                                                                                  Как вы думаете, можно ли создать полноценную операционную систему на языке программирования JavaScript, с которой можно загружаться?
                                                                                  Правильный ответ — можно!

                                                                                  Низкий уровень (ядро) состоит из частей, написанных на C++ и Assembler.\

                                                                                  Оукей.

                                                                                  • 0
                                                                                    А еще интерпретатор js написан на c/c++ :)
                                                                                    По сути тут «CLI на js»
                                                                                    • 0
                                                                                      Как ни странно, интерпретируемый язык требует интерпретатор для своего выполнения :)
                                                                                      • 0
                                                                                        В данном случае интерпретатор, написанный на C++, и есть «ОС», вы же написали CLI на js, не более ;)
                                                                                        • 0
                                                                                          Интересно, как бы интерпретатор работал без самого js кода? (в контексте работы ОС)
                                                                                          • 0
                                                                                            По этой логике, если я напишу на ZX-Spectrum Basic свое CLI, то смогу уверять что написал ОС на ZX-Spectrum Basic.
                                                                                            • –5
                                                                                              Хочу задать тебе один вопрос: ты ОС-то запускал?
                                                                                              • –1
                                                                                                Не «ты», а «вы».
                                                                                                • +2
                                                                                                  Хочу задать Вам один вопрос: Вы ОС-то запускали?
                                                                                              • +1
                                                                                                Если у вас там будут свои программы, которые можно будет загружать — то да, можно… а может и нельзя… никто не знает точно.

                                                                                                Собственно вопрос «что такое ОС» — он ни разу не прост. Почему, к примеру, Windows 10 — это ОС, а MS Word — это не ОС? И то и другое позволяет программы запускать (в случае с MS Word'ом — на VBA).

                                                                                                Потому что MS Word требует другой OS для запуска? Но если потребовать, чтобы OS обязательно запускалась бещ другой OS, то у нас и GEOS и Netware перестанут быть операционками! Первая стартует из BASIC'а, вторая — из DOS.

                                                                                                Ладно, пусть у нас OS — это что-то, что хотя и загружается из другой OS, но после этого выгражающая эту самую OS и не использующая её… годится? Снова нет: мало того, что у нас все современные OS окажутся «не-ОС» (так как EFI предоставляет определённые процедуры, которые все современные ОС используют в своей работе). Так ещё и Windows95 станет «ОС» или «не-ОС» в зависимости от настроек! Так как по умолчанию она после загрузки полностью выгружает MS-DOS, однако если вы используете нестандартный диск со своим драйвером — то оставляет её и использует!

                                                                                                И это всё — только при попытке классифицировать «большие», «настоящие» ОС с миллионами пользователей. Если же вспомнить про всякую разную экзотику — то там всё будет ещё запутанней…
                                                                                                • 0
                                                                                                  Небольшая неточность — серверы Netware были afair вполне standalone OS. И DOS не требовали. DOS — это клиентская часть вроде.
                                                                                                  • 0
                                                                                                    Небольшая неточность — серверы Netware были afair вполне standalone OS.
                                                                                                    Более или менее.

                                                                                                    И DOS не требовали.
                                                                                                    Ну да, конечно. А как вы иначе SERVER.EXE загрузите? Я с поздними версиями не общался, но версии 3.x точно стартовали из DOS — и никак иначе.

                                                                                                    DOS — это клиентская часть вроде.
                                                                                                    Клиентская часть там много под что, я про серверную.
                                                                                      • 0
                                                                                        Там еще с тегов все было понятно:
                                                                                        Смысл не в том, что приложения на JS, а в том, что сама ОС на JS (включая драйвера и прочее)

                                                                                        Node.JS

                                                                                        ну ок
                                                                                    • –1
                                                                                      на ЯП у которого с наследованием даже так себе (не учитывая волшебную типизацию и асинхронное велосипедирование) пытаться ОС писать… nocomment
                                                                                      • +2
                                                                                        Можно подумать у ассемблера и си с наследованием хоть как-то.
                                                                                        • +1

                                                                                          лол, наследование и системное программирование, в чем связь?
                                                                                          И низкий уровень написан на С++/асм, а js фигачит всё остальное через апи.

                                                                                          • 0
                                                                                            подобное, к сожаление, хорошо иллюстрирует положение развития методов разработки современного ПО, не 1 в 1, но очень много параллелей =)
                                                                                        • +3
                                                                                          Когда-то была шутка:
                                                                                          У Майкрософт спрашивают: «Можете написать виндоуз на бэйсике?»,
                                                                                          а они отвечают: «Ну пишем же».

                                                                                          • +1
                                                                                            Да ладно вам, в коде драйвера делать запись в порт через промисы – это же бесценно.
                                                                                            • 0
                                                                                              Запись в порт происходит синхронно…
                                                                                            • +5
                                                                                              image
                                                                                              xkcd#1508
                                                                                              А вы вовремя.
                                                                                              • +4
                                                                                                … таким образом, мы создали ОС на языке <ВСТАВЬТЕ ЧТО ХОТИТЕ>, схема:
                                                                                                1. низкоуровневый слой c,asm
                                                                                                2. апи-коннектор для низкого уровня
                                                                                                3. работа с апи на языке <ВСТАВЬТЕ ЧТО ХОТИТЕ>
                                                                                                4. охапка дров и ОС готов =)
                                                                                                • –2
                                                                                                  Это верно, но только для интерпретируемых языков
                                                                                                  • +1
                                                                                                    Хотелось бы узнать (помахивая томиком Танненбаума), что Вы подразумеваете под интерпретацией…
                                                                                                    • –1
                                                                                                      Процесс считывания инструкций с файла и выполнения их от своего имени
                                                                                                      • +1
                                                                                                        Современные процессоры x86 транслируют машинные инструкции в микрокод, и выполняют уже микрокод. Машинные инструкции — это интерпретация или выполнение?
                                                                                                        • 0
                                                                                                          Это интерпретация…
                                                                                                          Но я думал, мы говорим про языки программирования, а не про особенности их выполнения на конкретных процессорах.
                                                                                                          • –1
                                                                                                            Ещё раз помашу томиком Танненбаума, в котором очень хорошо описана интерпретация и исполнение. «Архитектура компьютера» книга зовётся чуть что. И там одна из основных идей в том, что граница между ними, во-первых, нечёткая, а во-вторых, плавает в процессе эволюции компонентной базы.
                                                                                                            В принципе возможна аппаратура, напрямую выполняющая байткод JVM, к примеру, и с равным успехом возможна аппаратура, которая интерпретирует машинный код другой, не родной платформы.
                                                                                                            • –2

                                                                                                              Так и не понял, к чему этот спор с придирками к каждому понятию, если идея была в том, что для высокоуровневых языков нужен мост для работы с аппаратной частью...

                                                                                                              • 0
                                                                                                                Но мост, как оказалось, не к аппаратуре, а к стороннему движку JS, а низкоуровневые сервисы написаны живут не поверх, а рядом с этим движком. То есть утверждение, что на JS операционка, в корне неверно. На JS клиентский рантайм.
                                                                                                                В общем, заголовок статьи совершенно не соответствует действительности, о чём я уже писал выше.
                                                                                                                Ещё раз прошу нарисовать схему со слоями и взаимодействием для полноты картины.
                                                                                                  • +2
                                                                                                    Вон у них вроде fat32 драйвер на js. Если из бинарных апи они используют чтение байтов, а работу с файлами реализовали сами, то я вполне готов считать это всё ОС на js. Другими словами, в вашем пункте 3 вставить что хочется не так просто, надо еще дофигище кода написать сначала.
                                                                                                  • +1
                                                                                                    Какова связь между языком разработки самой ОС, и разработкой прикладных процессов? Если следовать вашей логике, то разрабы на Go должны переходить на ОС, написанную на этом языке.
                                                                                                    Если я решил разрабатывать, например, на Си, то я должен портировать gcc на js, чтобы им пользоваться?
                                                                                                    Это первое, что пришло в голову, не заглядывая в исходники.
                                                                                                    • 0

                                                                                                      Вы так говорите, будто многообразие языков это необходимое условие, а не неизбежное зло.

                                                                                                      • 0
                                                                                                        Вот этой вашей фразы я вообще не понял. Многообразие яыков — это неизбежное зло потому что это необходимое условие для успеха вашей ОС… где противоречие?
                                                                                                        • 0

                                                                                                          Поддержка множества языков не является необходимым условием существования или успеха ОС. В процессе эволюции системы стали достаточно универсальными и научились запускать все подряд (некоторые разработчики стали полагать, что это обязательное требование к ОС, что есть заблуждение). При этом сегодня есть узкоспециализированные ОС для IoT, Web и мобильных платформ. Как вы знаете, некоторые из этих систем поддерживают ограниченный набор языков и при этом являются лидерами отрасли.

                                                                                                          • 0
                                                                                                            При этом сегодня есть узкоспециализированные ОС для IoT, Web и мобильных платформ.
                                                                                                            Это о каких ОС идёт речь? Насколько я знаю все ОС делятся на два класса:
                                                                                                            1. ОС, которые не предназначены для запуска программ, написанных сторонними разработчиками (услнов говоря «ОС для кофемолок»). Тут да — могут быть любые ограничения.
                                                                                                            2. ОС, предназначенные для запуска программ, написанных сторонними разработчиками. Тут некоторое время так же могу существовать ОС, которые не позволяют исполнять программы в машинных кодах. Но это кончается либо уходом операционки с рынка (пример: Blackberry), либо добавлением такой возможности (примеры: Android, ChromeOS). Ну или сочетанием двух этих вариантов (пример: Windows Phone).

                                                                                                            Если у вас есть пример операционки, где приложения не поставляются только производителем железки и при этом не умеющие запускать «всё подряд» — то было бы интересно на такое чудо посмотреть…
                                                                                                            • 0

                                                                                                              Если рассматривать вторых, то QNX (купленная Blackberry) до сих пор жива и используется в нише отказоустойчивых ОС. Тот же Android вполне успешно существует в рамках JVM и добавление в него поддержки запуска машинного кода вовсе не следствие его неполноценности.

                                                                                                              • 0
                                                                                                                Если рассматривать вторых, то QNX (купленная Blackberry) до сих пор жива и используется в нише отказоустойчивых ОС.
                                                                                                                Где конкретно? Во всех местах, про которые я знаю и которые предполагают установку приложений «не от производителя» поддерживается нативный машинный код и POSIX.

                                                                                                                Тот же Android вполне успешно существует в рамках JVM и добавление в него поддержки запуска машинного кода вовсе не следствие его неполноценности.
                                                                                                                Как человек, общавшийся с разработчиками оного творения я могу вас уверить: запуск машинного кода был частью дизайна с самого первого дня. Именно отсюда — Binder в ядре для IPC (вместо какого-нибудь Java-протокола), отсюда — права доступа на основе UID'ов (а не встроенные в Dalvik/Art) и прочее, прочее, прочее.
                                                                                                      • 0
                                                                                                        ...gcc на js...
                                                                                                        А месье знает толк в извращениях. :)