Теперь Кью работает в режиме чтения

Мы сохранили весь контент, но добавить что-то новое уже нельзя

Какие языки программирования пригодны для создания операционной системы?

Скажу сразу, я не программист. Пожалуйста, не надо сыпать сложными специфическими терминами. Но любопытство никто не отменял. Мне интересно. Да и другие могут заинтересоваться вопросом и обнаружат эту тему в Кью. Так что, польза будет.

Скажите, какие языки пригодны для написания ядра операционной системы и её графической оболочки? Помимо используемых - Ассемблер, C, C++, C#. Если кто-то захочет создать альтернативу и Виндовс, и Линукс, но не на языках семейства С. Этот не вопрос "зачем это нужно, если есть Виндовс и Линукс". Это вопрос - возможно ли и как?

Какие языки у меня на слуху? К примеру, развивающийся Питон. Можно ли на нем создать ядро и графическую оболочку? Или Java, позволяющий создавать и приложения, и графику. Или, к примеру, JavaScript. Для программирования графики и ВЭБ приложений. Говорят, на нем работает операционная система космических кораблей Dragon SpaceX. Или, к примеру - HTML 5. На HTML 5 пишут приложения, воспроизводят графику, фильмы и т.д.

Пожалуйста, продолжите список. Будет интересно узнать.

Вот мне любопытно. Представим, что кто-то реально захочет создать ОС на этих языках, или ещё на каких альтернативных, на уровне последних Виндовс. Как это можно реализовать?

Какие языки подойдут ядру? А какие для графической оболочки? Взять к примеру, тот же HTML 5. Предполагаю, что на нем можно создать и графическую среду, привычных ОС. Да и сами приложения для этой ОС. Ведь он же вполне может управлять портами, дисками, видеокартами, и тд. Ведь можно же сделать ядро, воспринимающее ВЭБ язык?

Было бы интересно узнать ваше мнение. Возможно ли это? Можно ли написать полностью функциональную ОС на одном из чистых языков, без примесей остальных. Или в комбинации нескольких.

А также, какие бы ещё языки вы видели как альтернативу семейству языков C. Если мой вопрос немного странный для специалистов программирования, прошу не злиться. Ведь интересуется человек "не в теме".

ПрограммированиеОперационные системы+3
Анонимный вопрос
  · 6,7 K
Программист, математик, инженер.  · 26 апр 2021

Операционная система - очень многоуровневая штука.

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

В ней есть сервисы-службы-демоны, системы интерфейсов (включая пользовательский) и куча системных и не только приложений, которые могут быть написаны на чём угодно, используя API ядра. И в целом, любая современная операционная система - это огромный бутерброд из кучи технологий, находящихся на разных уровнях абстракций, потому что писать интерфейсы на С или ассемблере - хоть и возможно (и кто-то так и делает), но слишком дорого и в целом бессмысленно.

Само же ядро, за счёт того что оно работает с железкой, требует асмов или чего-то С-подобного компилируемого (со вставками асмов для командования конкретными железками: памятью, всякими сетевыми картами да и видеокартами, или для использования новых модных процессорных инструкций, которые не поддерживают текущие компиляторы, в целях оптимизации). И сишки и асмы собираются в машинный код, так что особо принципиальной разницы нет, разве что в асме несколько бОльший контроль и простор для оптимизаций, и возможность использовать конкретные инструкции для цпу, но асмовый код хуже портируется, соответственно его стараются использовать как можно меньше.

Да, гипотетически можно сделать ядро ОС на Python. Тогда в качестве ядра там будет интерпретатор пайтона, с кастомной стандартной библиотекой, обращающейся не к ОС а напрямую к железу. Осталось посчитать, сколько будет времени занимать стандартная операция разметки кусочка памяти для пользовательских приложений, хе.

Да, ещё можно спроектировать (и даже реализовать) процессор, который будет интерпретировать Java или Lua байткод, т.е. реализацию виртуальной машины в железке. Целесообразность этого близка к нулю, а сложность и ресурсоёмкость весьма высока.

Даже в Android, в котором как бы "повсюду Java" - внутри сидит сишное ядро, к которому эта жава обращается. Жава там только там, куда пускают обычных программистов и пользователей, в некритичных для скорости местах, где можно тупить и тормозить, вот только в системных вещах люди стараются не делать что-то тупящее и тормозящее, ибо черевато например тем, что в устройстве зависло не приложение (которое можно закрыть), а сразу целое ядро, которое уже требует полной перезагрузки, вдобавок когда тормозит приложение - тормозит только оно, а когда тормозит ядро - тормозит сразу всё, не важно насколько оптимально написаны пользовательские приложения: на данной системе просто невозможно написать что-то быстрое.

Чем именно удобна сишка? Тем, что она одновременно проста, очень стандартизирована но при этом имеет очень гибкое отношение к памяти, указателям и прочей фигне. А ещё её все знают. А ещё написано очень много высококачественного, десятилетиями отлаженного сишного кода, который может быть легко переиспользован, без лишнего переизобретательства. Жизнь слишком коротка, чтобы переписывать миллионы строк быстрого, отлаженного, стабильного кода на потенциально медленную платформу, с кучей потенциальных проблем, которые неизвестно когда вылезут.

А вот теперь, когда мы посмотрели на бутербродность современных ОС, мы приходим к кораблю Тесея, или чего-то подобного: если ядро ОС написано на С/асмах, но оно занимает 5% кодовой базы, а остальные 95% служб и приложений написаны на Java или Python или JS или чём-то ещё, то на чём именно написана данная ОС? На C-асмах (5% кода) или на этом чём-то втором (95%)?

Вопрос открыт.

> разве что в асме несколько бОльший контроль и простор для оптимизаций Довольно часто компилятор генерирует более... Читать дальше
Лучший
Разработчик в Яндексе, Аспирант  · 27 апр 2021
> возможно ли и как? Возможно. Операционная система состоит из нескольких важных частей (или слоёв абстракций): - Загрузчик - Взаимодействие с «железом» (драйвера) - Набор абстракций, упрощающий и унифицирующий работу с ресурсами ОС (среда выполнения) Теоретически, написать операционную систему можно практически на любом языке (не беря во внимание время, которое... Читать далее
2 эксперта согласны
Комментарий был удалён за нарушение правил
Шаманю в сфере IT, СМИ, мультимедиа. В основном по теме минеральных ресурсов. По...  · 23 янв 2021  · altside.ru
На самом деле единственный язык, понимаемый компьютерным железом - язык машинных команд. Исходный код програмы на любом языке программирования - это по сути просто текст. Для его выполнения требуется инструментарий (по факту - ранее созданный машинный код), переводящий этот текст в машинные команды. В этом смысле теоретически для написания любых программ, в том числе... Читать далее
Информация — кислород современного мира.Перейти на altside.ru
3 эксперта согласны
Разработчик встроенных систем, немного радиолюбитель.   · 23 янв 2021  · vladimir-coslow.narod.ru/index.html
Для создания операционных систем пригодны любые языки программирования, компиляторы которых способны создавать выполняемые файлы требуемого формата. Но это зависит только от компилятора, а никак не от языка программирования. То есть интерпретаторы Бейсика, Луа или Джаваскрипта точно не годятся. Ассемблер используется исключительно ради увеличения быстродействия, но... Читать далее
Чтобы ни дня в жизни не работать, на практике совмещаю работу с хобби.Перейти на vladimir-coslow.narod.ru/index.html
1 эксперт согласени2 эксперта не согласны
Серьёзно? Вы представляете как работает Qt? Qt позволяет комплирировать программы для каждой конкретной... Читать дальше