Комментарии 193
На какие устройства встанет?
Так-то, кросплатформенные JS приложения можно создавать/запускать и на существующих ОС
Вот драйвер клавиатуры, например: https://github.com/PROPHESSOR/JsOS/blob/master/js/driver/ps2/keyboard.js
Прерывания, hex-коды и вот это всё
JsOS состоит из двух частей (уровней):
Низкий уровень (ядро) состоит из частей, написанных на C++ и Assembler. Используется для базовой загрузки и передачи управления на высокий уровень. Так же, ядро предоставляет API для работы с аппаратной частью.
Высокий уровень полностью написан на JavaScript и реализует работу операционной системы.
Вот тут написано что ядро и какой-то низкоуровневый API на C++ и ассемблере. А что тогда на js?
Теперь ждём PhpOS
Что-то такое есть https://sourceforge.net/projects/php-os/
Смысл JsOS в том, что это реальная операционная система, а не GUI в браузере
Но ничто не мешает в будущем сделать многопоточность
Слишком сильно эта часть завязана на специфику конкретного процессора. Документация буквально говорит: сначала установите такой регистр, потом сякой, потом сделайте
long jump
… Как вы это на платформно-независимых языках собрались делать?А вот в 64-битный режим уже переводит сама система
С вами бывает такое когда кто-то говорит глупость, а неудобно почему-то становится вам?
P.S. Вот если б автор встроил JS с утилитами прямо в GRUB, и то было бы интереснее (я писал модули под GRUB2, он в принципе заслуживает право называться маленькой операционной системой).
Просто интерпретатор имел бы немного другой вид…
UDP: И да, ядро ≠ ОС. Ядро — C++/Asm. ОС — JS.
Я понимаю, что это сугубо концептуальная и учебная работа, но все-таки в чем смысл, если «низкий уровень (ядро) состоит из частей, написанных на C++ и Assembler»? В том, что на JS можно писать консольные приложения, никто и не сомневался.
Ну и взяли бы тогда уж Rust для ядра, хипстерить — так уж по полной:) да и какая-никакая гарантия от ряда ошибок, свойственных C++.
И вместо JS — wasm!
Нет) Сама консоль, драйвера для видеокарты/мыши/клавиатуры и прочее написано на JS.
На низком уровне только загрузчик и сам V8
потренироваться с GoЗачем тренироваться с Гоу?
на ЯвеЗачем путать Java и JS?
Посадите тогдаЗачем указывать людям, как им баловаться?
Мне 28, батенька. Я уже минимум 5 лет как не юноша.
А максимализм — у вас. Люди должны делать только то, что вы считаете правильным. JS — это плохо, а Go — хорошо, просто потому что вам нравится Go. Это и есть максимализм.
Я не говорил что мне нравится Go, это ваши детские выдумки. Мне нравится Pascal. Дело в том что с точки зрения элементарной логики такие критические по времени/производительности приложения как элементы ОС нет смысла писать на интерпретируемых и даже прекомпилируемых языках. Это называется рациональное мышление.
Цитата из википедии:
Инфантилизм (от лат. infantilis — детский) — незрелость в развитии, сохранение в поведении или физическом облике черт, присущих предшествующим возрастным этапам.
Термин употребляется как в отношении физиологических, так и психических явлений.
В переносном смысле инфантилизм (как детскость) — проявление наивного подхода в быту, в политике и т. д., также неумение принимать своевременно продуманные решения.
Но бывает и хуже. Есть ещё в России мальчики, которы носят погоны и не наигрались в солдатики. А чьи-то матери получают похоронки. Так хорошо это или плохо, как считаете?
Есть ещё в России мальчики, которы носят погоны и не наигрались в солдатики.Если бы только в России.
А чьи-то матери получают похоронки. Так хорошо это или плохо, как считаете?Это вопрос очень философский. Если бы была возможность сделать так, чтобы «не наигравшиеся в солдатики» мальчики из других стран перестали делать то, что они делают — то всем было бы гораздо лучше.
Но поскольку это невозможно, то, разумеется, лучше оправить мальчиков, желающих «играть в солдатики» куда-нибудь в другую страну, тогда можно уменьшить общее количество похоронок…
А дальше можно и не читать.
Можно и в 50 быть мальчиком и играть в машинки, только большие.
Вы про те, которые в афганистане или сирии?
Лучше играться в jsOS, а еще лучше не указывать людям, которые живут не за ваш счет, как им жить и развлекаться.
В первую очередь хотелось бы сказать ловите наркомана
А во-вторую: если это пустит JS разработчиков в embeded сегмент — то очень даже клёво. Разумеется это будет совершенно не так производительно как аналоги, но она далеко не везде нужна.
Их туда уже пустили. Есть espruino, есть даже его реализация от амперки. Или я не правильно понял embeded?
Нормально, производители железа как раз ждут более прожорливый софт.
Производители железа под текущий софт не успевают.
Раньше под задачу "кино, офис, пасьянс, интернет" подходил любой купленный компьютер. Дорогой неигровой компьютер отличался от дешёвого неигрового только количественно: монитор пошире, жёсткий диск побольше, корпус покрасивше, побольше клавиш на клавиатуре.
Сейчас же если купить системный блок или ноут из нижнего сегмента, то на них уже сразу после покупки сайты тормозят. Недавно Гугл отключил возможность переключиться на старый интерфейс Ютуба, пришлось на нетбуке перейти на левый десктопный клиент, потому что пользоваться сайтом стало невозможно.
Ещё хуже. Пробовал через плагины Enhancer for YouTube и Tampermonkey дописывать disable_polymer=1 автоматически. Сначала пытается открыться тормозная страничка, некоторое время тормозит, потом происходит перекидывание на менее тормозную страничку с disable_polymer=1. Щёлкаешь по какое-нибудь ссылке, и опять открывается тормозная страничка, потом вместо неё менее тормозная.
Плюнул, поставил десктопный клиент. Просто летает.
Блин, на этом ноуте можно играть в Factorio, которой ничего не надо, кроме процессора. Неделю напролёт отстраивать базу и она отлично играется, ничего не тормозит и не лагает. А огромная межгалактическая корпорация не может родить нормальный интерфейс к своему сайту. С каждой итерацией получается всё хуже.
Низкий уровень (ядро) состоит из частей, написанных на C++ и Assembler. Используется для базовой загрузки и передачи управления на высокий уровень. Так же, ядро предоставляет API для работы с аппаратной частью.
Глядя на заголовок, надеялся на больший уровень упоротости. Но нет, всё более ожидаемо.
Как вы думаете, можно ли создать полноценную операционную систему на языке программирования JavaScript, с которой можно загружаться?
Правильный ответ — можно! Если вместо JS использовать С++ и ассемблер.
Ожидал, что будет хотя бы о компиляторе, который позволил собрать из JS кода загрузчик.
А так — с таким же успехом можно сказать что NodeMCU — это ОС на Lua.
В таком случае, лучше зайти в репозиторий.
Там во многих папках есть README.md файлы (+ Wiki)
Интересно, а какие врожденные недостатки С и ассемблера возможно исправить, переписав/написав с нуля операционную систему на одном из более современных языков
Такие ошибки, как переполнение стека, там будут невозможны (в предположении, что у V8 их нет), например.
Но вообще мне не кажется, что основной смысл именно в исправлении недостатков C / Asm.
Ну, а если честно, на мой взгляд, писать ОС на JS, все равно что от дождя прикрываться ладошкой, как ни старайся, лучший выход — бросить эту идею и бежать до ближайшего укрытия.
посмотреть с папкев тексте поправьте :)
А я рад что js движется в массы, даже если в этом мало пользы. Тем более сам по себе язык отличный, и может когда нибудь его перестанут воспринимать как игрушку в браузере
Тема с JavaScript OS крутая, но как же я ожидал что терминальный доступ придумают сделать в нотации JavaScript, а не в какой-то другой, например самостоятельно придуманной. Идеально — полноценный JavaScript shell. То есть, например, не start screenfetch
, а start.screenfetch()
.
Ну тогда уже app.start("screenfetch")
=)
На самом деле, тут 2 выхода:
- Использовать кастомный шелл
- Использовать eval режим (
#$$.stdio.defaultStdio.writeLine("Hello world")
)
В моём опыте не было таких, кто использовал кастомные шеллы на юниксе просто потому, что кому-то не нравится синтаксис шелловского языка для написания скриптов. Все мирились и использовали shell script. Точно так же будет и тут, если тема JsOS зайдёт, большинство смирится и будет использовать то, что успешно работает "из коробки".
Но коли скрипты здесь можно писать, используя "eval-режим", проблема псевдо-языков для скриптинга вроде пропадает. Но опять таки, почему бы с самого начала полёта не убрать непривычный для JS синтаксис в шелле типа (#/*JS code*/)
, если эта ОС стремится быть такой JavaScript (стремится же?). То есть сделать шелл в точности таким, каким мы его видим в NodeJS или Developer Tools.
Как вы думаете, можно ли создать полноценную операционную систему на языке программирования JavaScript, с которой можно загружаться?
Правильный ответ — можно!
…
Низкий уровень (ядро) состоит из частей, написанных на C++ и Assembler.\
Оукей.
По сути тут «CLI на js»
Собственно вопрос «что такое ОС» — он ни разу не прост. Почему, к примеру, Windows 10 — это ОС, а MS Word — это не ОС? И то и другое позволяет программы запускать (в случае с MS Word'ом — на VBA).
Потому что MS Word требует другой OS для запуска? Но если потребовать, чтобы OS обязательно запускалась бещ другой OS, то у нас и GEOS и Netware перестанут быть операционками! Первая стартует из BASIC'а, вторая — из DOS.
Ладно, пусть у нас OS — это что-то, что хотя и загружается из другой OS, но после этого выгражающая эту самую OS и не использующая её… годится? Снова нет: мало того, что у нас все современные OS окажутся «не-ОС» (так как EFI предоставляет определённые процедуры, которые все современные ОС используют в своей работе). Так ещё и Windows95 станет «ОС» или «не-ОС» в зависимости от настроек! Так как по умолчанию она после загрузки полностью выгружает MS-DOS, однако если вы используете нестандартный диск со своим драйвером — то оставляет её и использует!
И это всё — только при попытке классифицировать «большие», «настоящие» ОС с миллионами пользователей. Если же вспомнить про всякую разную экзотику — то там всё будет ещё запутанней…
Небольшая неточность — серверы Netware были afair вполне standalone OS.Более или менее.
И DOS не требовали.Ну да, конечно. А как вы иначе
SERVER.EXE
загрузите? Я с поздними версиями не общался, но версии 3.x точно стартовали из DOS — и никак иначе.DOS — это клиентская часть вроде.Клиентская часть там много под что, я про серверную.
Смысл не в том, что приложения на JS, а в том, что сама ОС на JS (включая драйвера и прочее)
Node.JS
ну ок
лол, наследование и системное программирование, в чем связь?
И низкий уровень написан на С++/асм, а js фигачит всё остальное через апи.
У Майкрософт спрашивают: «Можете написать виндоуз на бэйсике?»,
а они отвечают: «Ну пишем же».
1. низкоуровневый слой c,asm
2. апи-коннектор для низкого уровня
3. работа с апи на языке <ВСТАВЬТЕ ЧТО ХОТИТЕ>
4. охапка дров и ОС готов =)
Но я думал, мы говорим про языки программирования, а не про особенности их выполнения на конкретных процессорах.
В принципе возможна аппаратура, напрямую выполняющая байткод JVM, к примеру, и с равным успехом возможна аппаратура, которая интерпретирует машинный код другой, не родной платформы.
Так и не понял, к чему этот спор с придирками к каждому понятию, если идея была в том, что для высокоуровневых языков нужен мост для работы с аппаратной частью...
В общем, заголовок статьи совершенно не соответствует действительности, о чём я уже писал выше.
Ещё раз прошу нарисовать схему со слоями и взаимодействием для полноты картины.
Если я решил разрабатывать, например, на Си, то я должен портировать gcc на js, чтобы им пользоваться?
Это первое, что пришло в голову, не заглядывая в исходники.
Вы так говорите, будто многообразие языков это необходимое условие, а не неизбежное зло.
Поддержка множества языков не является необходимым условием существования или успеха ОС. В процессе эволюции системы стали достаточно универсальными и научились запускать все подряд (некоторые разработчики стали полагать, что это обязательное требование к ОС, что есть заблуждение). При этом сегодня есть узкоспециализированные ОС для IoT, Web и мобильных платформ. Как вы знаете, некоторые из этих систем поддерживают ограниченный набор языков и при этом являются лидерами отрасли.
При этом сегодня есть узкоспециализированные ОС для IoT, Web и мобильных платформ.Это о каких ОС идёт речь? Насколько я знаю все ОС делятся на два класса:
1. ОС, которые не предназначены для запуска программ, написанных сторонними разработчиками (услнов говоря «ОС для кофемолок»). Тут да — могут быть любые ограничения.
2. ОС, предназначенные для запуска программ, написанных сторонними разработчиками. Тут некоторое время так же могу существовать ОС, которые не позволяют исполнять программы в машинных кодах. Но это кончается либо уходом операционки с рынка (пример: Blackberry), либо добавлением такой возможности (примеры: Android, ChromeOS). Ну или сочетанием двух этих вариантов (пример: Windows Phone).
Если у вас есть пример операционки, где приложения не поставляются только производителем железки и при этом не умеющие запускать «всё подряд» — то было бы интересно на такое чудо посмотреть…
Если рассматривать вторых, то QNX (купленная Blackberry) до сих пор жива и используется в нише отказоустойчивых ОС. Тот же Android вполне успешно существует в рамках JVM и добавление в него поддержки запуска машинного кода вовсе не следствие его неполноценности.
Если рассматривать вторых, то QNX (купленная Blackberry) до сих пор жива и используется в нише отказоустойчивых ОС.Где конкретно? Во всех местах, про которые я знаю и которые предполагают установку приложений «не от производителя» поддерживается нативный машинный код и POSIX.
Тот же Android вполне успешно существует в рамках JVM и добавление в него поддержки запуска машинного кода вовсе не следствие его неполноценности.Как человек, общавшийся с разработчиками оного творения я могу вас уверить: запуск машинного кода был частью дизайна с самого первого дня. Именно отсюда — Binder в ядре для IPC (вместо какого-нибудь Java-протокола), отсюда — права доступа на основе UID'ов (а не встроенные в Dalvik/Art) и прочее, прочее, прочее.
А месье знает толк в извращениях. :)
Хотя сама идея компилера написанного на js не выглядит сильно уж невозможной. Исходники — это текст, результаты разбора — структуры в памяти, это в js есть, трансляция ast в js скорее всего возможна, хуже всего с двоичными данными, если вдруг потребуется записать бинарь, я сходу ни чего похожего припомнить не смог.
wine
под эту странную операционку будет портировать…Как вы думаете, можно ли создать полноценную операционную систему на языке программирования JavaScript, с которой можно загружаться?
Нет.
Правильный ответ — можно!
Нельзя, потому что
Низкий уровень (ядро) состоит из частей, написанных на C++ и Assembler.
А этот вот
полноценную операционную систему на языке программирования JavaScript, с которой можно загружаться
Потому что существует куча операционных систем, работающих в браузере
Вспомнилось
Следует уточнить: писал он это всё на и для IBM-PC/AT, 80286 процессор, 1МБ оперативки и хард на 40 метров.
А вы тут про ось на джаваскрит :)
Ссылки:
Язык Форт
Turbo C++
потому что пролог и градиентный спуск больше подходят под концепцию экспертной системы чем тупая стек машина? И кстати непонятно что он там писал все свободное и несвободное время — форт нормальный программист за пару вечеров раскатает.
Хотя всё равно, конечно, странно.
В JsOS
?
Если посмотреть в официальный репозиторий, там регистр такой же
Думал, может, какая-то особенная предыстория есть у именно такого необычного названия.
JsOs было бы, если бы Operating System было бы одним словом :)
Ведь XmlHttpRequest читается значительно лучше, чем XMLHTTPRequest.
С этим многие могут поспорить )
Раньше писал только на Java и на самом деле каждый раз внутренне страдал когда писал HttpRequest, но осознал это только после того как попробовал Python где принято писать HTTPRequest — сразу отлегло :)
пс. меня вообще… смущает, когда люди пишут ID как две больших буквы, хотя, по сути, это просто сокращение слова identifier
А я говорю именно про такие глупости, как `ID: number`, а именно таких использований — большинство. Как в MooTools String.uniqueID. Это именно сокращение от identifier, а не i. document
А вот с value1 или value_1 вопрос открытый.
А что именно кажется непоследовательным?
Как не странно, а этой аббревиатуре зашифровано 3 слова…
Javascript, Operating и System…
JOS звучит не совсем понятно, по этому, было выбрано название JsOS
(Та же ситуация и с JsMB (Javascript Mobile Basic))
Хотя, так же, правильным было бы название JSOS (JavaScript => JS), но такая ОС уже есть.
Так что, это просто дело случая.
Операционная система на JavaScript? JsOS