Приветствую, хабровчане!
Как вы думаете, можно ли создать полноценную операционную систему на языке программирования JavaScript, с которой можно загружаться?
Правильный ответ — можно!
Сегодня я хочу рассказать вам про проект JsOS.
JsOS — операционная система, на JavaScript.
Изначально проект создавался на основе JS библиотеки и ядра runtime.js, но, после закрытия последнего, стал самостоятельным проектом.
В настоящее время, проект находится в разработке, так что любой вклад приветствуется.
Рассмотрим базовую структуру проекта.
JsOS состоит из двух частей (уровней):
Низкий уровень (ядро) состоит из частей, написанных на C++ и Assembler. Используется для базовой загрузки и передачи управления на высокий уровень. Так же, ядро предоставляет API для работы с аппаратной частью.
- Высокий уровень полностью написан на JavaScript и реализует работу операционной системы.
Рассмотрим подробнее структуру высокого уровня:
core
— здесь находится ядро операционной системы (не путать с ядром (kernel) низкого уровня), которое обеспечивает базовую функциональность;driver
— драйвера и API для работы с различными устройствами;apps
— дополнительные пользовательские приложения, которые устанавливаются командой install;
Основные возможности операционной системы
- Полноценный командный интерпретатор.
- JavaScript Repl (команды, начинающиеся с #).
- Поддержка PS/2 мышек и клавиатур.
- Поддержка проигрывания звуков на PCSpeaker.
- Поддержка Virtio (QEMU) и Realtek (rtl8139) сетевых карт.
- Поддержка ATA жестких дисков.
- Поддержка файловой системы (FAT32).
- Поддержка VGA и BGA.
- Совместимое с Node.js API (модули os, fs, т.п.).
- Поддержка ASCII (UTF-8 в графическом режиме).
- Поддержка графического и псевдо-графического ASCII интерфейса.
- Поддержка PCI устройств.
А теперь перейдем к практике
На этот счет есть 2 варианта:
- Скачать .iso образ из раздела Releases.
- Собрать и запустить последнюю версию.
Настоятельно рекомендуется использовать вариант номер 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
имела следующий вид:
А дополнительный функционал можно подключить с помощью команды install название_пакета
.
Доступные пакеты можно посмотреть в папке js/apps.
Например, пакет screenfetch является портом одноименной Linux утилиты, которая отображает информацию об операционной системе.
Установить его можно командой install screenfetch
, а запустить — start screenfetch
.
Подробнее о создании своих пакетов можно прочитать здесь.
Сейчас в комплект поставки так же входят пакеты, демонстрирующие возможности операционной системы:
- 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)
EvilGenius18
14.04.2018 21:47+8Но зачем? Написали бы хоть какие цели у этого проекта.
Так-то, кросплатформенные JS приложения можно создавать/запускать и на существующих ОСPROPHESSOR Автор
15.04.2018 11:39+1Смысл не в том, что приложения на JS, а в том, что сама ОС на JS (включая драйвера и прочее)
a-tk
15.04.2018 12:27Про драйвера вроде как речь не идёт. Только про API и окружение
justboris
15.04.2018 21:48Вот драйвер клавиатуры, например: https://github.com/PROPHESSOR/JsOS/blob/master/js/driver/ps2/keyboard.js
Прерывания, hex-коды и вот это всё
a-tk
16.04.2018 08:22Интересно, при печати в 400 символов в минуту будет сильно заметно, что ввод тормозит? Надеюсь, какой-нибудь механизм отложенной обработки прерываний имеется и колбэк irq.on(...) вызывается не из обработчика прерываний?
so1ov
15.04.2018 21:25JsOS состоит из двух частей (уровней):
Низкий уровень (ядро) состоит из частей, написанных на C++ и Assembler. Используется для базовой загрузки и передачи управления на высокий уровень. Так же, ядро предоставляет API для работы с аппаратной частью.
Высокий уровень полностью написан на JavaScript и реализует работу операционной системы.
Вот тут написано что ядро и какой-то низкоуровневый API на C++ и ассемблере. А что тогда на js?
TimsTims
15.04.2018 00:01Теперь ждём PhpOS
Vlad_IT
15.04.2018 00:18Что-то такое есть https://sourceforge.net/projects/php-os/
PROPHESSOR Автор
15.04.2018 11:42Ну этот проект больше похож на os-js.org.
Смысл JsOS в том, что это реальная операционная система, а не GUI в браузере
sumanai
15.04.2018 05:33-2Читая список приложений под эту JsOS, споткнулся об composer, уж было подумал, что они завели интерпретатор PHP на JS. Жаль что нет, было бы весело.
bgnx
15.04.2018 00:13+1А кто-нибудь в курсе как там обстоят дела с многопоточностью? Насколько я знаю v8 жестко завязан на однопоточной модели то есть запускать отдельные инстансы, (isolates, или как они там называются) чтобы обеспечить параллельность для вебворкеров — пожалуйста, но вот настоящей многопоточности — а именно c доступ к разделяемой памяти c zero-copy v8 в принципе не поддерживает. Поэтому что если задействовать в итоге можно будет только одно ядро то мне кажется не было никакого смысла вообще начинать разработку JsOS
napa3um
15.04.2018 00:28bgnx
15.04.2018 15:11SharedArrayBuffer даже если и позволит шарить данные между процессами (кстати для этого нужна реализация процессов или точнее виртуальной адресации в JsOS) не позволяет работать с объектами. То есть это просто массив чисел. И вместо создания объектов и обновления их свойств, удаления в общем вместо работы с деревом или графом связанных объектов из разных потоков нужно будет все это реализовывать самостоятельно через массив чисел — собственные классы, объекты, наследование и главное собственный сборщик мусора и все это с диким оверхэдом. В итоге от js останется жалкое подобие Cи без указателей.
PROPHESSOR Автор
15.04.2018 15:25На сколько знаю я, пока проект однопоточный, но с какой-то хитрой системой управления этим самым протоком…
Но ничто не мешает в будущем сделать многопоточностьa-tk
15.04.2018 17:05А процессор хоть в защищённый режим переводится?
PROPHESSOR Автор
15.04.2018 18:01As far as i know, да
a-tk
16.04.2018 08:28И это делает код на уже JS или ещё низкоуровневый?
khim
16.04.2018 13:16Довольно идиотский вопрос. Ни в одной известной мне ОС это не делается иначе, как на ассмеблере. Что в Linux, что в Windows, что в любой другой ОС.
Слишком сильно эта часть завязана на специфику конкретного процессора. Документация буквально говорит: сначала установите такой регистр, потом сякой, потом сделайтеlong jump
… Как вы это на платформно-независимых языках собрались делать?
PROPHESSOR Автор
16.04.2018 14:21Это делает GRUB.
А вот в 64-битный режим уже переводит сама система
PaulAtreides
15.04.2018 00:36+21Простите, очень тяжело было удержаться.
Картинка, которую все ждали в комментарияхrumkin
16.04.2018 01:11+1С вами бывает такое когда кто-то говорит глупость, а неудобно почему-то становится вам?
barsuksergey
15.04.2018 00:59+3Прочитал как "Джизос". Мне кажется, англосаксы и РПЦ должны заценить проект.
k12th
15.04.2018 01:25+6Я понимаю, что это сугубо концептуальная и учебная работа, но все-таки в чем смысл, если «низкий уровень (ядро) состоит из частей, написанных на C++ и Assembler»? В том, что на JS можно писать консольные приложения, никто и не сомневался.
Ну и взяли бы тогда уж Rust для ядра, хипстерить — так уж по полной:) да и какая-никакая гарантия от ряда ошибок, свойственных C++.
evseev
15.04.2018 11:43+6Потому что на вопрос «Можно-ли написать OS на JS?» по-настоящему правильный ответ — «нельзя» ;)
PROPHESSOR Автор
15.04.2018 11:45«В том, что на JS можно писать консольные приложения, никто и не сомневался.»
Нет) Сама консоль, драйвера для видеокарты/мыши/клавиатуры и прочее написано на JS.
На низком уровне только загрузчик и сам V8
Dessloch
15.04.2018 02:41-28ИМХО пустая трата времени и баловство. Если есть свободное время то лучше потренироваться с Go или Nim. Какой смысл писать ОС на Яве, а Сапёр-на ассемблере? Посадите тогда уже несколько деревьев если заняться больше нечем. Пользы больше будет.
TheShock
15.04.2018 03:24+16потренироваться с Go
Зачем тренироваться с Гоу?
на Яве
Зачем путать Java и JS?
Посадите тогда
Зачем указывать людям, как им баловаться?Dessloch
15.04.2018 03:27-31Это у Вас юношеский максимализм, скоро пройдёт.
TheShock
15.04.2018 03:48+18О! Аппеляция к возрасту, сразу виден ваш интеллектуальный уровень.
Мне 28, батенька. Я уже минимум 5 лет как не юноша.
А максимализм — у вас. Люди должны делать только то, что вы считаете правильным. JS — это плохо, а Go — хорошо, просто потому что вам нравится Go. Это и есть максимализм.Dessloch
15.04.2018 03:56-24Дело не в возрасте, а в интеллектуально-нравственном развитии. Можно и в 50 быть мальчиком и играть в машинки, только большие.
Я не говорил что мне нравится Go, это ваши детские выдумки. Мне нравится Pascal. Дело в том что с точки зрения элементарной логики такие критические по времени/производительности приложения как элементы ОС нет смысла писать на интерпретируемых и даже прекомпилируемых языках. Это называется рациональное мышление.GRaAL
15.04.2018 10:43+8Вы так говорите «играть в машинки» как будто это что-то плохое.
Dessloch
17.04.2018 01:10Это не я говорю, специалисты так считают.
Цитата из википедии:
Инфантилизм (от лат. infantilis — детский) — незрелость в развитии, сохранение в поведении или физическом облике черт, присущих предшествующим возрастным этапам.
Термин употребляется как в отношении физиологических, так и психических явлений.
В переносном смысле инфантилизм (как детскость) — проявление наивного подхода в быту, в политике и т. д., также неумение принимать своевременно продуманные решения.
Но бывает и хуже. Есть ещё в России мальчики, которы носят погоны и не наигрались в солдатики. А чьи-то матери получают похоронки. Так хорошо это или плохо, как считаете?khim
17.04.2018 01:18Есть ещё в России мальчики, которы носят погоны и не наигрались в солдатики.
Если бы только в России.
А чьи-то матери получают похоронки. Так хорошо это или плохо, как считаете?
Это вопрос очень философский. Если бы была возможность сделать так, чтобы «не наигравшиеся в солдатики» мальчики из других стран перестали делать то, что они делают — то всем было бы гораздо лучше.
Но поскольку это невозможно, то, разумеется, лучше оправить мальчиков, желающих «играть в солдатики» куда-нибудь в другую страну, тогда можно уменьшить общее количество похоронок…
saboteur_kiev
16.04.2018 16:54+1Можно и в 50 быть мальчиком и играть в машинки, только большие.
Вы про те, которые в афганистане или сирии?
Лучше играться в jsOS, а еще лучше не указывать людям, которые живут не за ваш счет, как им жить и развлекаться.
Aligatro
15.04.2018 05:55+11Простите конечно, но какое вам дело до времени разработчика, а уж тем более до практической пользы его труда?
Dessloch
15.04.2018 06:11-19Да просто печально смотреть как люди впустую тратят время. А жизнь коротка.
GRaAL
15.04.2018 10:44+7Да вообще. Некоторые комментарии на хабре пишут, вместо того, чтобы деревья сажать. Ужас просто.
DimaTiunov
15.04.2018 11:46+4ДА просто печально смотреть как люди впустую тратят время на комментарии на хабре, о экономии времени. А жизнь коротка.
XXXXPro
17.04.2018 00:14Если работа над проектом приносит удовольствие (а также дополнительные знания и опыт), это нельзя считать тратой «впустую». Или вы из тех, кто считает напрасной тратой времени все что не приносит денег?
ruslangaifutdinov
15.04.2018 08:47+1А как же жизненный опыт? Да коротка жизнь, но если данный проект даст новый опыт, который в будущем автор сможет применить в других проектах, может оказаться бесценным
titulusdesiderio
15.04.2018 09:31+1В первую очередь хотелось бы сказать ловите наркомана
А во-вторую: если это пустит JS разработчиков в embeded сегмент — то очень даже клёво. Разумеется это будет совершенно не так производительно как аналоги, но она далеко не везде нужна.glebiuskv
15.04.2018 10:18+1Их туда уже пустили. Есть espruino, есть даже его реализация от амперки. Или я не правильно понял embeded?
fatronix
15.04.2018 11:25+4если это пустит JS разработчиков в embeded сегмент — то очень даже клёво
Система кушает 100 мегабайт оперативки в текстовом VGA-режиме. Может, не надо?extempl
15.04.2018 12:55-1Нормально, производители железа как раз ждут более прожорливый софт.
alex_zzzz
15.04.2018 15:39Производители железа под текущий софт не успевают.
Раньше под задачу "кино, офис, пасьянс, интернет" подходил любой купленный компьютер. Дорогой неигровой компьютер отличался от дешёвого неигрового только количественно: монитор пошире, жёсткий диск побольше, корпус покрасивше, побольше клавиш на клавиатуре.
Сейчас же если купить системный блок или ноут из нижнего сегмента, то на них уже сразу после покупки сайты тормозят. Недавно Гугл отключил возможность переключиться на старый интерфейс Ютуба, пришлось на нетбуке перейти на левый десктопный клиент, потому что пользоваться сайтом стало невозможно.
TheShock
15.04.2018 15:42У моей мамы ноут из нижнего ценевого сегмента, там стоит линукс и он прекрасно работает для таких задач
Tallefer
15.04.2018 17:37Пользуясь случаем, хочу помочь братьям-ретроградам — старые браузеры гугл часто сам перенаправляет на старый фейс, а новые можно заставить, дописывая к концу урлов ключ вида /videos?disable_polymer=1
alex_zzzz
16.04.2018 00:16Ещё хуже. Пробовал через плагины Enhancer for YouTube и Tampermonkey дописывать disable_polymer=1 автоматически. Сначала пытается открыться тормозная страничка, некоторое время тормозит, потом происходит перекидывание на менее тормозную страничку с disable_polymer=1. Щёлкаешь по какое-нибудь ссылке, и опять открывается тормозная страничка, потом вместо неё менее тормозная.
Плюнул, поставил десктопный клиент. Просто летает.
Блин, на этом ноуте можно играть в Factorio, которой ничего не надо, кроме процессора. Неделю напролёт отстраивать базу и она отлично играется, ничего не тормозит и не лагает. А огромная межгалактическая корпорация не может родить нормальный интерфейс к своему сайту. С каждой итерацией получается всё хуже.
Tallefer
16.04.2018 00:28Я через Redirector сделал. Обычно только раз пытается открыть, потом помнит, вроде.
Что за десктопный клиент?alex_zzzz
16.04.2018 01:09То помнит, то не помнит, я не понял принцип. Клиент Perfect Tube из магазина Windows 10. Он вовсе не "perfect", но просто нормальный. Не пожалел 69 рублей.
a-tk
15.04.2018 10:22+4Низкий уровень (ядро) состоит из частей, написанных на C++ и Assembler. Используется для базовой загрузки и передачи управления на высокий уровень. Так же, ядро предоставляет API для работы с аппаратной частью.
Глядя на заголовок, надеялся на больший уровень упоротости. Но нет, всё более ожидаемо.Tallefer
15.04.2018 17:49+2Просто хипстеры еще не достигли самого дна. Где их, гаденько хихикая, поджидает Фабрис Беллар. :3
AllexIn
15.04.2018 10:24+2Как вы думаете, можно ли создать полноценную операционную систему на языке программирования JavaScript, с которой можно загружаться?
Правильный ответ — можно! Если вместо JS использовать С++ и ассемблер.
Ожидал, что будет хотя бы о компиляторе, который позволил собрать из JS кода загрузчик.
А так — с таким же успехом можно сказать что NodeMCU — это ОС на Lua.PROPHESSOR Автор
15.04.2018 11:49+1«Ожидал, что будет хотя бы о компиляторе, который позволил собрать из JS кода загрузчик.»
Это — следующий шаг)
Alter2
15.04.2018 11:18Интересно, а какие врожденные недостатки С и ассемблера возможно исправить, переписав/написав с нуля операционную систему на одном из более современных языков? Или десятилетия разработки и новые компиляторы довели ядра основных ОС до идеала?
a-tk
15.04.2018 12:30Как Вы собираетесь получить доступ к низкоуровневым возможностям железа получить доступ? Тот же планировщик задач, обработку аппаратных исключений/прерываний и т.п. без всего этого никак не выйдет.
Keyten
15.04.2018 12:58Интересно, а какие врожденные недостатки С и ассемблера возможно исправить, переписав/написав с нуля операционную систему на одном из более современных языков
Такие ошибки, как переполнение стека, там будут невозможны (в предположении, что у V8 их нет), например.
Но вообще мне не кажется, что основной смысл именно в исправлении недостатков C / Asm.
ArtificialLife
15.04.2018 13:00-1Классный проект, спасибо за статью. Пишите о том, как двигается разработка, хотя бы раз в месяц =)
PROPHESSOR Автор
15.04.2018 13:02Если проект заинтересовал — можете наблюдать за GitHub репозиторием ;)
ZitRo
15.04.2018 13:47-1Тема с JavaScript OS крутая, но как же я ожидал что терминальный доступ придумают сделать в нотации JavaScript, а не в какой-то другой, например самостоятельно придуманной. Идеально — полноценный JavaScript shell. То есть, например, не
start screenfetch
, аstart.screenfetch()
.PROPHESSOR Автор
15.04.2018 14:02+1Ну тогда ужеapp.start("screenfetch")
=)
На самом деле, тут 2 выхода:
- Использовать кастомный шелл
- Использовать eval режим (
#$$.stdio.defaultStdio.writeLine("Hello world")
)
ZitRo
15.04.2018 14:39В моём опыте не было таких, кто использовал кастомные шеллы на юниксе просто потому, что кому-то не нравится синтаксис шелловского языка для написания скриптов. Все мирились и использовали shell script. Точно так же будет и тут, если тема JsOS зайдёт, большинство смирится и будет использовать то, что успешно работает "из коробки".
Но коли скрипты здесь можно писать, используя "eval-режим", проблема псевдо-языков для скриптинга вроде пропадает. Но опять таки, почему бы с самого начала полёта не убрать непривычный для JS синтаксис в шелле типа
(#/*JS code*/)
, если эта ОС стремится быть такой JavaScript (стремится же?). То есть сделать шелл в точности таким, каким мы его видим в NodeJS или Developer Tools.PROPHESSOR Автор
15.04.2018 16:43Тут shell нужно воспринимать не как язык программирования, а как командную строку (like DOS)
210mev
15.04.2018 14:48Стоит ли ожидать появления в будщем огромного кол-ва ОС на JS как в случае с JS фрэймворками?
PROPHESSOR Автор
15.04.2018 14:51Сомневаюсь, если считать, что runtime.js появился в 2014 году и уже в 2017 прекратил своё развитие.
Да и сам процесс разработки невероятно сложен…
norlin
15.04.2018 16:32+2Как вы думаете, можно ли создать полноценную операционную систему на языке программирования JavaScript, с которой можно загружаться?
Правильный ответ — можно!
…
Низкий уровень (ядро) состоит из частей, написанных на C++ и Assembler.\Оукей.
Error1024
15.04.2018 17:38А еще интерпретатор js написан на c/c++ :)
По сути тут «CLI на js»PROPHESSOR Автор
15.04.2018 18:30Как ни странно, интерпретируемый язык требует интерпретатор для своего выполнения :)
Error1024
15.04.2018 18:44В данном случае интерпретатор, написанный на C++, и есть «ОС», вы же написали CLI на js, не более ;)
PROPHESSOR Автор
15.04.2018 18:47Интересно, как бы интерпретатор работал без самого js кода? (в контексте работы ОС)
Error1024
15.04.2018 18:51По этой логике, если я напишу на ZX-Spectrum Basic свое CLI, то смогу уверять что написал ОС на ZX-Spectrum Basic.
PROPHESSOR Автор
15.04.2018 19:57-4Хочу задать тебе один вопрос: ты ОС-то запускал?
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, однако если вы используете нестандартный диск со своим драйвером — то оставляет её и использует!
И это всё — только при попытке классифицировать «большие», «настоящие» ОС с миллионами пользователей. Если же вспомнить про всякую разную экзотику — то там всё будет ещё запутанней…JSmitty
16.04.2018 11:10Небольшая неточность — серверы Netware были afair вполне standalone OS. И DOS не требовали. DOS — это клиентская часть вроде.
khim
16.04.2018 13:21Небольшая неточность — серверы Netware были afair вполне standalone OS.
Более или менее.
И DOS не требовали.
Ну да, конечно. А как вы иначеSERVER.EXE
загрузите? Я с поздними версиями не общался, но версии 3.x точно стартовали из DOS — и никак иначе.
DOS — это клиентская часть вроде.
Клиентская часть там много под что, я про серверную.
als_1984
15.04.2018 16:43на ЯП у которого с наследованием даже так себе (не учитывая волшебную типизацию и асинхронное велосипедирование) пытаться ОС писать… nocomment
assembled
15.04.2018 19:57лол, наследование и системное программирование, в чем связь?
И низкий уровень написан на С++/асм, а js фигачит всё остальное через апи.KirEv
15.04.2018 20:03подобное, к сожаление, хорошо иллюстрирует положение развития методов разработки современного ПО, не 1 в 1, но очень много параллелей =)
ainoneko
15.04.2018 19:02+2Когда-то была шутка:
У Майкрософт спрашивают: «Можете написать виндоуз на бэйсике?»,
а они отвечают: «Ну пишем же».
tirinox
15.04.2018 19:22Да ладно вам, в коде драйвера делать запись в порт через промисы – это же бесценно.
KirEv
15.04.2018 20:00+4… таким образом, мы создали ОС на языке <ВСТАВЬТЕ ЧТО ХОТИТЕ>, схема:
1. низкоуровневый слой c,asm
2. апи-коннектор для низкого уровня
3. работа с апи на языке <ВСТАВЬТЕ ЧТО ХОТИТЕ>
4. охапка дров и ОС готов =)PROPHESSOR Автор
15.04.2018 20:05-2Это верно, но только для интерпретируемых языков
a-tk
15.04.2018 21:21Хотелось бы узнать (помахивая томиком Танненбаума), что Вы подразумеваете под интерпретацией…
PROPHESSOR Автор
16.04.2018 09:31Процесс считывания инструкций с файла и выполнения их от своего имени
a-tk
16.04.2018 09:41Современные процессоры x86 транслируют машинные инструкции в микрокод, и выполняют уже микрокод. Машинные инструкции — это интерпретация или выполнение?
PROPHESSOR Автор
16.04.2018 14:27+1Это интерпретация…
Но я думал, мы говорим про языки программирования, а не про особенности их выполнения на конкретных процессорах.
Sayonji
15.04.2018 23:07+2Вон у них вроде fat32 драйвер на js. Если из бинарных апи они используют чтение байтов, а работу с файлами реализовали сами, то я вполне готов считать это всё ОС на js. Другими словами, в вашем пункте 3 вставить что хочется не так просто, надо еще дофигище кода написать сначала.
Zanak
15.04.2018 21:23Какова связь между языком разработки самой ОС, и разработкой прикладных процессов? Если следовать вашей логике, то разрабы на Go должны переходить на ОС, написанную на этом языке.
Если я решил разрабатывать, например, на Си, то я должен портировать gcc на js, чтобы им пользоваться?
Это первое, что пришло в голову, не заглядывая в исходники.rumkin
16.04.2018 01:52Вы так говорите, будто многообразие языков это необходимое условие, а не неизбежное зло.
khim
16.04.2018 13:24Вот этой вашей фразы я вообще не понял. Многообразие яыков — это неизбежное зло потому что это необходимое условие для успеха вашей ОС… где противоречие?
rumkin
16.04.2018 23:55Поддержка множества языков не является необходимым условием существования или успеха ОС. В процессе эволюции системы стали достаточно универсальными и научились запускать все подряд (некоторые разработчики стали полагать, что это обязательное требование к ОС, что есть заблуждение). При этом сегодня есть узкоспециализированные ОС для IoT, Web и мобильных платформ. Как вы знаете, некоторые из этих систем поддерживают ограниченный набор языков и при этом являются лидерами отрасли.
khim
17.04.2018 01:11При этом сегодня есть узкоспециализированные ОС для IoT, Web и мобильных платформ.
Это о каких ОС идёт речь? Насколько я знаю все ОС делятся на два класса:
1. ОС, которые не предназначены для запуска программ, написанных сторонними разработчиками (услнов говоря «ОС для кофемолок»). Тут да — могут быть любые ограничения.
2. ОС, предназначенные для запуска программ, написанных сторонними разработчиками. Тут некоторое время так же могу существовать ОС, которые не позволяют исполнять программы в машинных кодах. Но это кончается либо уходом операционки с рынка (пример: Blackberry), либо добавлением такой возможности (примеры: Android, ChromeOS). Ну или сочетанием двух этих вариантов (пример: Windows Phone).
Если у вас есть пример операционки, где приложения не поставляются только производителем железки и при этом не умеющие запускать «всё подряд» — то было бы интересно на такое чудо посмотреть…
assembled
16.04.2018 06:42...gcc на js...
А месье знает толк в извращениях. :)Zanak
17.04.2018 06:23Ну, я вообще то был максимально саркастичен.
Хотя сама идея компилера написанного на js не выглядит сильно уж невозможной. Исходники — это текст, результаты разбора — структуры в памяти, это в js есть, трансляция ast в js скорее всего возможна, хуже всего с двоичными данными, если вдруг потребуется записать бинарь, я сходу ни чего похожего припомнить не смог.
khim
16.04.2018 13:26Ну зачем же сразу GCC-то портировать? Можно Emscripten обойтись. Хуже с бинарными модулями. Не знаю насколько просто
wine
под эту странную операционку будет портировать…
Disbeleiver
16.04.2018 09:36Как вы думаете, можно ли создать полноценную операционную систему на языке программирования JavaScript, с которой можно загружаться?
Нет.
Правильный ответ — можно!
Нельзя, потому что
Низкий уровень (ядро) состоит из частей, написанных на C++ и Assembler.
А этот вотизврвелосипрограммный код — он зачем? Какое есть хотя бы теоретическое применение, кроме экспериментов?PROPHESSOR Автор
16.04.2018 09:38полноценную операционную систему на языке программирования JavaScript, с которой можно загружаться
Потому что существует куча операционных систем, работающих в браузере
a-tk
16.04.2018 09:42-1И вы эти поделия всерьёз называете хотя бы операционными средами (даже не системами)?
PROPHESSOR Автор
16.04.2018 10:31Тут Вы правы… Но разработчики этих графических окружений называют свои творения «операционными системами», так что тот текст был призван отделить реальную ОС от браузерных рабочих столов
Zenitchik
Сколько системные требования?
На какие устройства встанет?
PROPHESSOR Автор
Системные требования:
CPU: x86_64
RAM: > 128 MB
Но пока рекомендуется использовать эмуляторы (вроде QEMU), вместо установки на реальное устройство, так как ОС находится в разработке