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


Как вы думаете, можно ли создать полноценную операционную систему на языке программирования 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, так как он предоставляет бoльшие возможности и не на много сложнее первого.


Для этого требуется установленный 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 (проект закрыт)

Комментарии (143)


  1. Zenitchik
    14.04.2018 21:47

    Сколько системные требования?
    На какие устройства встанет?


    1. PROPHESSOR Автор
      15.04.2018 11:39

      Системные требования:
      CPU: x86_64
      RAM: > 128 MB

      Но пока рекомендуется использовать эмуляторы (вроде QEMU), вместо установки на реальное устройство, так как ОС находится в разработке


  1. EvilGenius18
    14.04.2018 21:47
    +8

    Но зачем? Написали бы хоть какие цели у этого проекта.
    Так-то, кросплатформенные JS приложения можно создавать/запускать и на существующих ОС


    1. PROPHESSOR Автор
      15.04.2018 11:39
      +1

      Смысл не в том, что приложения на JS, а в том, что сама ОС на JS (включая драйвера и прочее)


      1. a-tk
        15.04.2018 12:27

        Про драйвера вроде как речь не идёт. Только про API и окружение


        1. Ivanq
          15.04.2018 12:38

          Идет. Есть драйвера PS/2, PCSpeaker, BGA, ATA, что-то под карты RealTek.


          1. PROPHESSOR Автор
            15.04.2018 13:13

            RTL8139
            Надо бы еще 8169…
            Но там дескрипторы и всё такое


        1. justboris
          15.04.2018 21:48

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


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


          1. a-tk
            16.04.2018 08:22

            Интересно, при печати в 400 символов в минуту будет сильно заметно, что ввод тормозит? Надеюсь, какой-нибудь механизм отложенной обработки прерываний имеется и колбэк irq.on(...) вызывается не из обработчика прерываний?


            1. PROPHESSOR Автор
              16.04.2018 09:26

              Возможно, будет подтормаживать рендеринг…


      1. so1ov
        15.04.2018 21:25

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

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


        1. PROPHESSOR Автор
          15.04.2018 21:25

          Всё остальное (сама ОС)


    1. inbuckswetrust
      16.04.2018 19:20

      Утилизировать свободное время вестимо.


  1. TimsTims
    15.04.2018 00:01

    Теперь ждём PhpOS


    1. Vlad_IT
      15.04.2018 00:18

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


      1. PROPHESSOR Автор
        15.04.2018 11:42

        Ну этот проект больше похож на os-js.org.
        Смысл JsOS в том, что это реальная операционная система, а не GUI в браузере


    1. a15199732
      15.04.2018 00:36

      Тогда уж BrainfuckOs


    1. sumanai
      15.04.2018 05:33
      -2

      Читая список приложений под эту JsOS, споткнулся об composer, уж было подумал, что они завели интерпретатор PHP на JS. Жаль что нет, было бы весело.


      1. PROPHESSOR Автор
        15.04.2018 11:40

        А что, хорошая идея ;)


  1. bgnx
    15.04.2018 00:13
    +1

    А кто-нибудь в курсе как там обстоят дела с многопоточностью? Насколько я знаю v8 жестко завязан на однопоточной модели то есть запускать отдельные инстансы, (isolates, или как они там называются) чтобы обеспечить параллельность для вебворкеров — пожалуйста, но вот настоящей многопоточности — а именно c доступ к разделяемой памяти c zero-copy v8 в принципе не поддерживает. Поэтому что если задействовать в итоге можно будет только одно ядро то мне кажется не было никакого смысла вообще начинать разработку JsOS


    1. napa3um
      15.04.2018 00:28

      1. bgnx
        15.04.2018 15:11

        SharedArrayBuffer даже если и позволит шарить данные между процессами (кстати для этого нужна реализация процессов или точнее виртуальной адресации в JsOS) не позволяет работать с объектами. То есть это просто массив чисел. И вместо создания объектов и обновления их свойств, удаления в общем вместо работы с деревом или графом связанных объектов из разных потоков нужно будет все это реализовывать самостоятельно через массив чисел — собственные классы, объекты, наследование и главное собственный сборщик мусора и все это с диким оверхэдом. В итоге от js останется жалкое подобие Cи без указателей.


        1. napa3um
          15.04.2018 15:52
          -1

          И тем не менее.


    1. PROPHESSOR Автор
      15.04.2018 15:25

      На сколько знаю я, пока проект однопоточный, но с какой-то хитрой системой управления этим самым протоком…
      Но ничто не мешает в будущем сделать многопоточность


      1. a-tk
        15.04.2018 17:05

        А процессор хоть в защищённый режим переводится?


        1. PROPHESSOR Автор
          15.04.2018 18:01

          As far as i know, да


          1. a-tk
            16.04.2018 08:28

            И это делает код на уже JS или ещё низкоуровневый?


            1. khim
              16.04.2018 13:16

              Довольно идиотский вопрос. Ни в одной известной мне ОС это не делается иначе, как на ассмеблере. Что в Linux, что в Windows, что в любой другой ОС.

              Слишком сильно эта часть завязана на специфику конкретного процессора. Документация буквально говорит: сначала установите такой регистр, потом сякой, потом сделайте long jump… Как вы это на платформно-независимых языках собрались делать?


              1. Tallefer
                16.04.2018 13:38
                +1

                Так в том и суть вопроса была! Что ж сразу с козырей-то… %)


            1. PROPHESSOR Автор
              16.04.2018 14:21

              Это делает GRUB.
              А вот в 64-битный режим уже переводит сама система


  1. PaulAtreides
    15.04.2018 00:36
    +21

    Простите, очень тяжело было удержаться.

    Картинка, которую все ждали в комментариях


    1. rumkin
      16.04.2018 01:11
      +1

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


  1. barsuksergey
    15.04.2018 00:59
    +3

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


  1. k12th
    15.04.2018 01:25
    +6

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


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


    1. kez
      15.04.2018 02:26
      +2

      И вместо JS — wasm!


    1. evseev
      15.04.2018 11:43
      +6

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


      1. PROPHESSOR Автор
        15.04.2018 11:45
        +1

        Можно, если его компилировать


        1. a-tk
          16.04.2018 08:25

          Но это не тот случай.


    1. PROPHESSOR Автор
      15.04.2018 11:45

      «В том, что на JS можно писать консольные приложения, никто и не сомневался.»
      Нет) Сама консоль, драйвера для видеокарты/мыши/клавиатуры и прочее написано на JS.
      На низком уровне только загрузчик и сам V8


  1. Dessloch
    15.04.2018 02:41
    -28

    ИМХО пустая трата времени и баловство. Если есть свободное время то лучше потренироваться с Go или Nim. Какой смысл писать ОС на Яве, а Сапёр-на ассемблере? Посадите тогда уже несколько деревьев если заняться больше нечем. Пользы больше будет.


    1. TheShock
      15.04.2018 03:24
      +16

      потренироваться с Go
      Зачем тренироваться с Гоу?

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

      Посадите тогда
      Зачем указывать людям, как им баловаться?


      1. Dessloch
        15.04.2018 03:27
        -31

        Это у Вас юношеский максимализм, скоро пройдёт.


        1. TheShock
          15.04.2018 03:48
          +18

          О! Аппеляция к возрасту, сразу виден ваш интеллектуальный уровень.
          Мне 28, батенька. Я уже минимум 5 лет как не юноша.
          А максимализм — у вас. Люди должны делать только то, что вы считаете правильным. JS — это плохо, а Go — хорошо, просто потому что вам нравится Go. Это и есть максимализм.


          1. Dessloch
            15.04.2018 03:56
            -24

            Дело не в возрасте, а в интеллектуально-нравственном развитии. Можно и в 50 быть мальчиком и играть в машинки, только большие.
            Я не говорил что мне нравится Go, это ваши детские выдумки. Мне нравится Pascal. Дело в том что с точки зрения элементарной логики такие критические по времени/производительности приложения как элементы ОС нет смысла писать на интерпретируемых и даже прекомпилируемых языках. Это называется рациональное мышление.


            1. GRaAL
              15.04.2018 10:43
              +8

              Вы так говорите «играть в машинки» как будто это что-то плохое.


              1. Dessloch
                17.04.2018 01:10

                Это не я говорю, специалисты так считают.
                Цитата из википедии:

                Инфантилизм (от лат. infantilis — детский) — незрелость в развитии, сохранение в поведении или физическом облике черт, присущих предшествующим возрастным этапам.

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

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


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


                1. khim
                  17.04.2018 01:18

                  Есть ещё в России мальчики, которы носят погоны и не наигрались в солдатики.
                  Если бы только в России.

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

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


            1. multed
              15.04.2018 12:42
              +5

              у мужчин детство сложное только первые 40 лет =)


              1. voidptr0
                15.04.2018 16:41
                +2

                у мужчин детство сложное только первые 40 лет =)

                Уверяю, дальше не становиться легче. Игрушек, с которыми хочется поиграть, все больше, а времени — все меньше )


              1. gearbox
                16.04.2018 10:47

                мужчины — это чудом выжившие мальчики…


            1. Solexid
              16.04.2018 10:10

              >> Мне нравится Pascal
              А дальше можно и не читать.


            1. saboteur_kiev
              16.04.2018 16:54
              +1

              Можно и в 50 быть мальчиком и играть в машинки, только большие.

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

              Лучше играться в jsOS, а еще лучше не указывать людям, которые живут не за ваш счет, как им жить и развлекаться.


    1. Aligatro
      15.04.2018 05:55
      +11

      Простите конечно, но какое вам дело до времени разработчика, а уж тем более до практической пользы его труда?


      1. Dessloch
        15.04.2018 06:11
        -19

        Да просто печально смотреть как люди впустую тратят время. А жизнь коротка.


        1. baldrs
          15.04.2018 09:57
          +6

          Ну так не тратьте вашу, а другим не мешайте тратить ее как им хочется, другие люди вам не принадлежат и к вам отношения не имеют.


          1. Dessloch
            15.04.2018 16:27
            -4

            Я и не трачу. И вам не советую.


        1. GRaAL
          15.04.2018 10:44
          +7

          Да вообще. Некоторые комментарии на хабре пишут, вместо того, чтобы деревья сажать. Ужас просто.


        1. Zibx
          15.04.2018 11:02
          +6

          Так посади уже дерево — это намного полезнее чем печально смотреть.


        1. DimaTiunov
          15.04.2018 11:46
          +4

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


        1. XXXXPro
          17.04.2018 00:14

          Если работа над проектом приносит удовольствие (а также дополнительные знания и опыт), это нельзя считать тратой «впустую». Или вы из тех, кто считает напрасной тратой времени все что не приносит денег?


    1. YetAnotherSlava
      17.04.2018 02:04

      Есть более краткое выражение: «лучше бы водку пили».


  1. ruslangaifutdinov
    15.04.2018 08:47
    +1

    А как же жизненный опыт? Да коротка жизнь, но если данный проект даст новый опыт, который в будущем автор сможет применить в других проектах, может оказаться бесценным


  1. titulusdesiderio
    15.04.2018 09:31
    +1

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


    1. glebiuskv
      15.04.2018 10:18
      +1

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


    1. fatronix
      15.04.2018 11:25
      +4

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


      1. extempl
        15.04.2018 12:55
        -1

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


        1. alex_zzzz
          15.04.2018 15:39

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


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


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


          1. TheShock
            15.04.2018 15:42

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


            1. alex_zzzz
              16.04.2018 00:18

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


              1. TheShock
                16.04.2018 00:19
                -1

                Я не знаю, что там, я просто говорю, что у нее все работает прекрасно


          1. Tallefer
            15.04.2018 17:37

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


            1. alex_zzzz
              16.04.2018 00:16

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


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


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


              1. Tallefer
                16.04.2018 00:28

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


                1. alex_zzzz
                  16.04.2018 01:09

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


  1. a-tk
    15.04.2018 10:22
    +4

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

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


    1. Tallefer
      15.04.2018 17:49
      +2

      Просто хипстеры еще не достигли самого дна. Где их, гаденько хихикая, поджидает Фабрис Беллар. :3


  1. AllexIn
    15.04.2018 10:24
    +2

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

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

    Ожидал, что будет хотя бы о компиляторе, который позволил собрать из JS кода загрузчик.
    А так — с таким же успехом можно сказать что NodeMCU — это ОС на Lua.


    1. PROPHESSOR Автор
      15.04.2018 11:49
      +1

      «Ожидал, что будет хотя бы о компиляторе, который позволил собрать из JS кода загрузчик.»
      Это — следующий шаг)


  1. Alter2
    15.04.2018 11:18

    Интересно, а какие врожденные недостатки С и ассемблера возможно исправить, переписав/написав с нуля операционную систему на одном из более современных языков? Или десятилетия разработки и новые компиляторы довели ядра основных ОС до идеала?


    1. a-tk
      15.04.2018 12:30

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


    1. Keyten
      15.04.2018 12:58

      Интересно, а какие врожденные недостатки С и ассемблера возможно исправить, переписав/написав с нуля операционную систему на одном из более современных языков

      Такие ошибки, как переполнение стека, там будут невозможны (в предположении, что у V8 их нет), например.
      Но вообще мне не кажется, что основной смысл именно в исправлении недостатков C / Asm.


    1. anikavoi
      15.04.2018 14:13

  1. kinjalik
    15.04.2018 11:47
    +1

    Один вопрос — зачем?


    1. AllexIn
      15.04.2018 11:53
      +2

      Потому что это интересно.


  1. mvngr
    15.04.2018 11:47
    -1

    посмотреть с папке
    в тексте поправьте :)


    1. PROPHESSOR Автор
      15.04.2018 11:48

      Спасибо, исправил)


  1. ttys
    15.04.2018 11:48
    -1

    Когда делали JavaOS то хотя бы причины были очевидны.


  1. cliff_5
    15.04.2018 11:48
    -2

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


    1. extempl
      15.04.2018 12:56
      +3

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


      1. computershik73
        15.04.2018 18:01

        back to 2011.
        Nokia + Symbian + Python = love


  1. ArtificialLife
    15.04.2018 13:00
    -1

    Классный проект, спасибо за статью. Пишите о том, как двигается разработка, хотя бы раз в месяц =)


    1. PROPHESSOR Автор
      15.04.2018 13:02

      Если проект заинтересовал — можете наблюдать за GitHub репозиторием ;)


  1. AnthonyDS
    15.04.2018 13:00

    Стоит присмотреться к данному проекту повнимательней…


  1. ZitRo
    15.04.2018 13:47
    -1

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


    1. PROPHESSOR Автор
      15.04.2018 14:02
      +1

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


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


      1. ZitRo
        15.04.2018 14:39

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


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


        1. PROPHESSOR Автор
          15.04.2018 16:43

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


          1. Zenitchik
            15.04.2018 18:06

            а как командную строку (like DOS)

            На нём тоже батнички писали.


  1. 210mev
    15.04.2018 14:48

    Стоит ли ожидать появления в будщем огромного кол-ва ОС на JS как в случае с JS фрэймворками?


    1. PROPHESSOR Автор
      15.04.2018 14:51

      Сомневаюсь, если считать, что runtime.js появился в 2014 году и уже в 2017 прекратил своё развитие.
      Да и сам процесс разработки невероятно сложен…


  1. norlin
    15.04.2018 16:32
    +2

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

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

    Оукей.


    1. Error1024
      15.04.2018 17:38

      А еще интерпретатор js написан на c/c++ :)
      По сути тут «CLI на js»


      1. PROPHESSOR Автор
        15.04.2018 18:30

        Как ни странно, интерпретируемый язык требует интерпретатор для своего выполнения :)


        1. Error1024
          15.04.2018 18:44

          В данном случае интерпретатор, написанный на C++, и есть «ОС», вы же написали CLI на js, не более ;)


          1. PROPHESSOR Автор
            15.04.2018 18:47

            Интересно, как бы интерпретатор работал без самого js кода? (в контексте работы ОС)


            1. Error1024
              15.04.2018 18:51

              По этой логике, если я напишу на ZX-Spectrum Basic свое CLI, то смогу уверять что написал ОС на ZX-Spectrum Basic.


              1. PROPHESSOR Автор
                15.04.2018 19:57
                -4

                Хочу задать тебе один вопрос: ты ОС-то запускал?


                1. Error1024
                  15.04.2018 20:27
                  +1

                  Не «ты», а «вы».


                  1. PROPHESSOR Автор
                    15.04.2018 21:17

                    Хочу задать Вам один вопрос: Вы ОС-то запускали?


              1. khim
                15.04.2018 22:20

                Если у вас там будут свои программы, которые можно будет загружать — то да, можно… а может и нельзя… никто не знает точно.

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

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

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

                И это всё — только при попытке классифицировать «большие», «настоящие» ОС с миллионами пользователей. Если же вспомнить про всякую разную экзотику — то там всё будет ещё запутанней…


                1. JSmitty
                  16.04.2018 11:10

                  Небольшая неточность — серверы Netware были afair вполне standalone OS. И DOS не требовали. DOS — это клиентская часть вроде.


                  1. khim
                    16.04.2018 13:21

                    Небольшая неточность — серверы Netware были afair вполне standalone OS.
                    Более или менее.

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

                    DOS — это клиентская часть вроде.
                    Клиентская часть там много под что, я про серверную.


    1. Tallefer
      15.04.2018 17:45

      Там еще с тегов все было понятно:

      Смысл не в том, что приложения на JS, а в том, что сама ОС на JS (включая драйвера и прочее)

      Node.JS

      ну ок


      1. Error1024
        15.04.2018 18:00

        1. PROPHESSOR Автор
          15.04.2018 18:03

          Так оно и в ВК есть)
          Не знал


  1. als_1984
    15.04.2018 16:43

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


    1. a-tk
      15.04.2018 17:02
      +1

      Можно подумать у ассемблера и си с наследованием хоть как-то.


    1. assembled
      15.04.2018 19:57

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


      1. KirEv
        15.04.2018 20:03

        подобное, к сожаление, хорошо иллюстрирует положение развития методов разработки современного ПО, не 1 в 1, но очень много параллелей =)


  1. ainoneko
    15.04.2018 19:02
    +2

    Когда-то была шутка:

    У Майкрософт спрашивают: «Можете написать виндоуз на бэйсике?»,
    а они отвечают: «Ну пишем же».


  1. tirinox
    15.04.2018 19:22

    Да ладно вам, в коде драйвера делать запись в порт через промисы – это же бесценно.


  1. timdorohin
    15.04.2018 19:58
    +1

    image
    xkcd#1508
    А вы вовремя.


  1. KirEv
    15.04.2018 20:00
    +4

    … таким образом, мы создали ОС на языке <ВСТАВЬТЕ ЧТО ХОТИТЕ>, схема:
    1. низкоуровневый слой c,asm
    2. апи-коннектор для низкого уровня
    3. работа с апи на языке <ВСТАВЬТЕ ЧТО ХОТИТЕ>
    4. охапка дров и ОС готов =)


    1. PROPHESSOR Автор
      15.04.2018 20:05
      -2

      Это верно, но только для интерпретируемых языков


      1. a-tk
        15.04.2018 21:21

        Хотелось бы узнать (помахивая томиком Танненбаума), что Вы подразумеваете под интерпретацией…


        1. PROPHESSOR Автор
          16.04.2018 09:31

          Процесс считывания инструкций с файла и выполнения их от своего имени


          1. a-tk
            16.04.2018 09:41

            Современные процессоры x86 транслируют машинные инструкции в микрокод, и выполняют уже микрокод. Машинные инструкции — это интерпретация или выполнение?


            1. PROPHESSOR Автор
              16.04.2018 14:27
              +1

              Это интерпретация…
              Но я думал, мы говорим про языки программирования, а не про особенности их выполнения на конкретных процессорах.


    1. Sayonji
      15.04.2018 23:07
      +2

      Вон у них вроде fat32 драйвер на js. Если из бинарных апи они используют чтение байтов, а работу с файлами реализовали сами, то я вполне готов считать это всё ОС на js. Другими словами, в вашем пункте 3 вставить что хочется не так просто, надо еще дофигище кода написать сначала.


  1. Zanak
    15.04.2018 21:23

    Какова связь между языком разработки самой ОС, и разработкой прикладных процессов? Если следовать вашей логике, то разрабы на Go должны переходить на ОС, написанную на этом языке.
    Если я решил разрабатывать, например, на Си, то я должен портировать gcc на js, чтобы им пользоваться?
    Это первое, что пришло в голову, не заглядывая в исходники.


    1. rumkin
      16.04.2018 01:52

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


      1. khim
        16.04.2018 13:24

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


        1. rumkin
          16.04.2018 23:55

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


          1. khim
            17.04.2018 01:11

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

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


    1. assembled
      16.04.2018 06:42

      ...gcc на js...
      А месье знает толк в извращениях. :)


      1. Zanak
        17.04.2018 06:23

        Ну, я вообще то был максимально саркастичен.
        Хотя сама идея компилера написанного на js не выглядит сильно уж невозможной. Исходники — это текст, результаты разбора — структуры в памяти, это в js есть, трансляция ast в js скорее всего возможна, хуже всего с двоичными данными, если вдруг потребуется записать бинарь, я сходу ни чего похожего припомнить не смог.


        1. gearbox
          17.04.2018 09:53

          да давно уже с llvm сбиндили, компиляй — не хочу. llvm-node


    1. khim
      16.04.2018 13:26

      Ну зачем же сразу GCC-то портировать? Можно Emscripten обойтись. Хуже с бинарными модулями. Не знаю насколько просто wine под эту странную операционку будет портировать…


  1. Disbeleiver
    16.04.2018 09:36

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

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

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


    А этот вот извр велоси программный код — он зачем? Какое есть хотя бы теоретическое применение, кроме экспериментов?


    1. PROPHESSOR Автор
      16.04.2018 09:38

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

      Потому что существует куча операционных систем, работающих в браузере


      1. a-tk
        16.04.2018 09:42
        -1

        И вы эти поделия всерьёз называете хотя бы операционными средами (даже не системами)?


        1. PROPHESSOR Автор
          16.04.2018 10:31

          Тут Вы правы… Но разработчики этих графических окружений называют свои творения «операционными системами», так что тот текст был призван отделить реальную ОС от браузерных рабочих столов


  1. n3d15
    16.04.2018 14:57
    -1

    image

    Вспомнилось