Концептуальная плата REX и простой процессор WRAMP разработаны специально для обучения студентов компьютерной архитектуре, системному программированию и ассемблеру
Десять лет назад ходили анекдоты про Дениса Попова, который долго и упорно настаивал, что написал свою операционную систему «с нуля». Это считалось своеобразным синонимом «изобрести велосипед», то есть совершенно бессмысленной тратой времени. Анекдотизм ситуации состоял в том, что школьник из Нижнего Тагила скопировал Ubuntu, но был искренне убеждён в уникальности своего проекта.
Но действительно честная попытка написать свою операционку — не такое уж и бесцельное занятие (кстати, как сконструировать велосипед с нуля). По ходу дела может оказаться, что некоторые казавшиеся «очевидными» детали современных ОС спроектированы совсем не оптимально. Или вовсе не нужны.
Если бы ядро Unix писали сегодня, оно выглядело бы иначе. Подобные эксперименты могут напомнить о некоторых фундаментальных изъянах, несовершенствах или рудиментах современных ОС, на которые мы привычно закрываем глаза.
Человек, которого до сих пор вспоминают
Наверное, на фразе «новая операционная система с нуля» линуксоиды со стажем тепло и ласково улыбаются, вспоминая легендарную BolgenOS.
История началась с поста на ЛОРе от 31 декабря 2009 года, который впоследствии разошёлся на мемы:
«Привет всем кто пользуется системой Linux! Я пишу систему (точнее собираю для нее дистрибутив, вскоре будет готова). Назвал ее Bolgenos. Дописал на qt4 программы для GNOME (пока это основная среда рабочего стола), добавил апплеты для панелей и переписал модуль загрузки на свой лад. Систему я делаю с нуля (не переделывая Debian или Ubuntu). В качестве шелла Bash, а загрузчик GRUB. Установщик для системы я написал, и работает он в графическом режиме. Будет ориентирована на российских пользователей (но английский я оставил).
Уважаемые пользователи Linux пишите то что Вы хотите увидеть в этой системе или как говорится ваши пожелания. По возможности постараюсь включить всё в дистрибутив и сделать его как можно удобнее, обещаю его онлайн поддерживать :-)»
Как выяснилось впоследствии, автор не шутил. «Гениальным» программистом оказался Денис Попов, ученик 11-го класса школы №55 из Нижнего Тагила. На некоторое время «российский умелец» стал звездой теленовостей, презентация своей сборки Ubuntu он провёл на форуме «Юные интеллектуалы Среднего Урала».
В вышеупомянутом треде Денис пожаловался на недоброжелателей: «Такие люди как вы постоянно пишут, что у меня это не получится. Я докажу всем, что мой проект станет лучше, чем Debian».
Анонс BolgenOS долгое время занимал 1-е место среди самых заминусованных топиков на Хабре (?268), пока не убыл удалён создателем (карму опустили до ?641).
Хотя имя Дениса Попова со временем стало нарицательным, как сама BolgenOS, «Антивирус Попова» (ClamAV) и «нескучные обои», однако всей компьютерной тусовке школьник убедительно доказал: синдром Даннинга-Крюгера существует. Как заявил Денис на форуме: «Когда я чего-то хочу, то я добьюсь это с такой скоростью, с какой вам это не снилось!» Здесь комментарии излишни.
Концепция научного прогресса
Предполагаемое метакогнитивное искажение у российского школьника не должно отвлекать от важного факта — неизбежности научного прогресса.
Ведь никто не будет спорить, что появление новых операционных систем и браузеров неизбежно. Да, стоимость таких проектов в трудозатратах с каждым годом растёт. Но это не отменяет фундаментальный закон о неизбежности научного прогресса. В современной науке распространена идея, что научное знание аккумулируется со временем. Поэтому прогресс часто считается «объективным законом реальности». Другими словами, многие учёные современности уверены в том, что учёные будущего будут знать больше их. И чем дальше в будущее — тем больше их знание. Кто-то может сделать вывод, что если прогресс стремится к бесконечности в случае линейного накопления знаний, то современные знания о мире стремятся к нулю.
Так или иначе, но желание создавать глобальные проекты «с нуля» кажется вполне естественным следствием концепции научного прогресса.
«Улучшенный Unix»
Создатели Unix — Деннис Ритчи, Кен Томпсон и их коллеги из Bell Labs — гениальные люди. Естественно, они понимают, что никакая программа по определению не может быть идеальна. Многое зависит от контекста, в котором создаётся проект.
Другими словами, если бы ядро Unix писали сегодня, оно бы выглядело иначе. Это довольно важный факт, учитывая статус *nix-подобных систем в современном мире как самого популярного семейства ОС практически на всех типах компьютеров, кроме десктопов.
Сами создатели Unix в 80-е годы реализовали альтернативный дизайн операционной системы, которую в шутку назвали Plan 9. Эта система должна была преодолеть принципиальные недостатки Unix. В частности, дизайн базируется на трёх основных принципах:
- Все ресурсы представлены как файлы и доступны в иерархической файловой системе.
- Локальные и удалённые ресурсы не различаются, для доступа к ним реализован стандартный протокол 9P.
- У каждой группы процессов собственное пространство имён, собранное из файловых иерархий, предоставленных различными ресурсами.
В отличие от современных операционных систем, в которых пользователь получает доступ к конкретному компьютеру, в Plan 9 он получает доступ к распределённой вычислительной среде. Например, в оригинальной статье «Использование пространств имён в Plan 9» (Роб Пайк, Дэйв Пресотто, Кен Томпсон, Говард Трики, Фил Уинтерботтом) приводится такой пример: файл
/dev/mouse
на компьютере содержит последний 1 байт состояния кнопки и 4 байта состояния каждой из координат курсора мыши, причём это может быть не тот компьютер, к которому физически подключена мышь. Наверное, формулировка звучит немного странно для пользователей, привыкших к терминам централизованной вычислительной среды. По факту в Plan 9 команда cpu
запускает удалённую сессию на вычислительном сервере, куда экспортируется локальное пространство имён, включая мышь и дисплей. Таким образом, удалённые программы могут нормально взаимодействовать с мышью на локальном терминале, словно это их мышь.Впоследствии некоторые идеи Plan 9 были частично реализованы в других ОС:
- концепция служб через файловую систему частично реализована в Linux;
- минималистский дизайн оконной системы Plan 9 многократно воспроизведён в разных ОС;
- кодировка символов UTF-8, повсеместно используемая сегодня в браузерах, была изобретена и впервые реализована в Plan 9;
- дизайн Plan 9 предвосхитил сегодняшние микросервисные архитектуры более чем на десятилетие.
Другие идеи распределённого дизайна, возможно, будут реализованы в будущем.
Мини-Unix
Одна из современных попыток создания новых ОС — Winix. Минималистичная ОС, написанная исключительно в образовательных целях для микропроцессорной архитектуры Waikato RISC Architecture Microprocessor (WRAMP). Процессор сам про себе разработан в образовательных целях, с кастомным ассемблером, похожим на MIPS. Автор говорит, что в разработке вдохновлялся идеями ОС Minix (сокращение от mini-Unix).
Winix включает в себя полнофункциональное ядро с управлением процессами и памятью, файловую систему в памяти (in-memory file system, типа ramdisk) с почти полной поддержкой стандарта POSIX, контроль исключений и оболочку Bourne с интерактивным терминалом, поддержкой конвейеров из нескольких команд с перенаправлением ввода-вывода и т.д.
Запустить систему можно в программном симуляторе платы REX с процессором WRAMP. И эта плата, и симулятор разработаны специально для обучения студентов архитектуре компьютерных систем. Подробнее см. в научной статье.
В него загружаем бинарник Winix (кнопка
Quick Load
). Терминал работает через Serial Port 1
:Список поддерживаемых команд см. здесь. Например, вот snake.c, игра «Змейка».
Благодаря этому проекту можно примерно представить трудозатраты на создание новой операционной системы. В данном случае у одного разработчика это заняло примерно пять лет. Здесь хотя минималистичная, но оригинальная система с нуля, а не кастомная сборка Ubuntu.
Winix разработана для платформы RISC, а сейчас стремительно набирает популярность открытая архитектура RISC-V. Всё больше компаний начинают выпускать совместимое оборудование, да и разные ОС начинают поддерживать RISC.
В наше время появление новой операционной системы — вовсе не уникальное событие. Например, из последних концептуальных ОС можно назвать Barrelfish, Unikraft, RedLeaf, ту же Fuchsia, хотя она ориентирована на мобильные устройства. Активность на конференциях вроде SOSP, OSDI, EuroSys и HotOS демонстрирует, что в системной разработке в последние годы идут очень бурные и интересные исследования. Хотя 20 лет назад Роб Пайк пессимистично высказался о застое в данной области, но сейчас это точно не так. Может быть, количество новых операционных систем на конференциях даже вернулось на пиковый уровень 1980-х годов (6-7 в год). Но остаётся некое ощущение, что академические разработки в сфере системного программирования получают недостаточно внимания со стороны бизнеса и государства, поэтому учёные уходят в другие области computer science вроде дата-майнинга и аналитики, где финансирование куда лучше.
Статьи на Хабре
psycha0s
Создать новую операционную систему вполне подъемно команде из нескольких десятков человек. Основная проблема в другом - надо как-то заставить производителей железа выпускать для нее драйверы и производителей софта портировать на неё свои программы. Это никому не интересно, т.к. не сулит никакой прибыли, а без выгоды в это никто не будет вкладываться.
euroUK
Согласен. Тем не менее, можно было бы начать с ОС в которой есть поддержка какой-нибудь виртуальной машины, типа джавы или дотнета. Они не слишком сложны, есть некоторое количество софта которое будет работать.
Даже попытки такие были, жалко что медленно развивается COSMOS - COSMOS (gocosmos.org)
qw1
Это опасно из-за судебных исков. И хотя эти виртуальные машины на бумаге «открытые», корпорации, если захотят, найдут к чему докопаться (см. дела Sun против Microsoft, Oracle против Google по Java).
Если отнять у MS заметную долю рынка, процентов 20, она моментально забудет про открытость дотнета, и очень жёстко покусает…
Batu
С железом интересный нюанс. Если делать логично, то каждая железяка должна содержать в себе весь функционал. Наличие драйвера в системе это не мудро. Правильный подход архитектуры и системы, что б любой "черный ящик" мог быть подключаться к системе универсальным способом реализуя любые хотелки пользователя от способностей этого черного ящика.
warlock13
В своё время такие именно такая идея привела к возникновению Java. Но почему-то не взлетело.
Batu
Да. Мне тоже понравились идеи Java. Я не знаю почему они не додумались. Наверное, они привязались к императивной парадигме и существующей архитектуре. И бизнес. Надо ж бабло рубить. Я практически 20 лет из жизни выбросил и начал с чистого листа считая что компьютер тоже могу сочинять. Не до фанатизма, конечно. А имея планы что это можно реализовать в железе. Вот 11 лет сюда на заходил. Выложил вчера или позавчера публикацию со своей работой. А ее не опубликовали, наверное. Короче, нет ее.
Batu
Самые вкусности там по синтаксису. Они заметили общую часть при создании свойств, методов и классов. Я развил эту дело до почти полного совершенства)) У меня весь синтаксис начинается с имени класса. И фактически весь синтаксис языка в одной формуле)) На странице вся формализация грамматики помещается. Правде не ФБН и не регулярные выражения. Пришлось все пересочинять.
COKPOWEHEU
Вот есть, например, принтер, который умеет печатать на термобумаге. И есть второй принтер, который умеет печатать четырьмя цветами на бумаге от А5 до А2, с регулируемой плотностью заполнения, переменным DPI и вставкой номеров страниц.
И вы хотите на них распечатать картинку. Откуда возьмется окно настроек принтера без драйвера? Откуда программа узнает, что принтер умеет печатать так, сяк и эдак?
А через год придумают новый принтер, который будет не только печатать, но и сшивать листы.
Собственно, драйверы для того и придумали, чтобы можно было менять функционал программно. Плохо, что производители не хотят пользоваться готовыми или хотя бы поддерживать с ними совместимость. Казалось бы, всего-то нужно распечатать страницу без извращений — нет, будь добр установить графическую конфигурялку для принтера, которая весит сотни памяти и болтается в трее.
Batu
Вот именно, по этой причине все параметры настроек логично размещать в самом принтере. Это даже естественно. А система должна их вкусно визуализировать и подать на редактирование.
COKPOWEHEU
Так каким способом-то?
Вот есть у принтера десяток целочисленных параметров, пусть даже к каждому прилагается текстовая строка с описанием. Дальше что?
Batu
Не все так печально)) Есть такая метода. И, уверен, ты их десяток и сам способен придумать. Я в систему построил именно с такой логикой.
COKPOWEHEU
«такая» это какая? Пока что мало-мальски сложные устройства без специализированного софта не работают.
Batu
Ты хочешь что б я рассказал за систему? Я с удовольствием. Сказал же что введение только попробовал опубликовать и не одобрил модератор. А что мало-мальски сложные устройства не работают, так и есть проблема. Могу только добавить что и простые устройства не работают. Простой выключатель попробуй добавить. Кстати, это главная фишка моей системы. В области автоматизации и ИИ это прорыв.
COKPOWEHEU
То есть вы попытались опубликовать огрызок текста, не несущий смысловой нагрузки? Ну тогда не удивительно, что его не одобрили.
И как я понимаю из ваших слов, вы знаете решение. Возможно, требующее специального «универсального драйвера» и соглашения на разработку устройств.
Вот про это хотелось бы поподробнее. Грубо говоря, я хочу сделать принципиально новое устройство определения настроения хомячка — как оно должно объяснить операционке свой функционал?
Что вы имеете в виду под «простым выключателем»?
Внешнюю кнопку, на которую можно повесить выполнение скрипта? Это делается довольно просто.
Или наоборот, выходной проводок, на котором будет 0 или 1 в зависимости от программы? Да тоже подобное делал — CustomHID и простой код передачи запросов. Можно и более универсальное через CDC и передачу текстовых команд. А в отдельных случаях можно и напрямую через GPIO материнки управлять.
Batu
И как я понимаю из ваших слов, вы знаете решение. Возможно, требующее специального «универсального драйвера» и соглашения на разработку устройств.
Да. Конечно, без соглашения никак. Скорее не "универсальный драйвер" а универсальный механизм взаимодействия. Кроме того событийная архитектура процессора. Ведь классическая архитектура это часть соглашения. Не объявленная, но подразумевающаяся.
COKPOWEHEU
Ну, если говорить про существующие системы, то проще не в ядро изменения вносить, а написать универсальный драйвер, с которым будут работать все устройства, поддерживающие ваше соглашение.
Помнится, разработчики USB пытались подобное сделать — там ведь устройство тоже обязано «представиться», передать свои дескрипторы. Но и они не сумели предусмотреть всего, в результате пришлось добавлять всякие vendor-specific. А вендоры соответственно этим злоупотреблять.
Но на вопрос вы все еще не ответили: как именно вы хотите унифицировать бесконечное разнообразие устройств включая все, которые будут изобретены в будущем?
Batu
Ну, если говорить про существующие системы, то проще не в ядро изменения вносить, а написать универсальный драйвер, с которым будут работать все устройства, поддерживающие ваше соглашение.
Не получается так. Именно это я и хочу сказать. Императивная парадигма не позволяет.
Но на вопрос вы все еще не ответили: как именно вы хотите унифицировать бесконечное разнообразие устройств включая все, которые будут изобретены в будущем?
Ты очень правильно сформулировал проблему насчет будущих. Проблема почти Воланда. Не, только работать с будущими устройствами, но и так как захочется в будущем. А человек сейчас хочет так, а завтра по другому. К сожалению, не имею хрустального шара что б за пару фраз сказать и все станет понятно. И так кручусь как жук на сковородке подбирая слова, что б было близко к тому, чем занимаюсь. Надо полностью изучить основы. Документ я могу прислать, но лучше в общении. Это часа 3 минимум. Потом что б прошло пару дней что б улеглось и еще побеседовать. И только потом есть смысл показывать примеры. Я не выпендриваюсь. Просто по опыту. Не первый семинар уже провел.
COKPOWEHEU
Если вашу идею невозможно интегрировать в существующую экосистему, у нее почти нет шансов. Революции в компьютерных техниках уже прошли, сейчас время эволюций.
И что еще хуже, вам придется заинтересовать не меня, а производителей железа — что им придется городить свои кривульки не так, как хотят они, а так как считаете правильным вы.
Если эта информация не секретная, лучше выложить именно документ. Мало ли кто заинтересуется.
Но пока что у меня большие сомнения что вы верно оценили саму сложность проблемы и что решили именно ее, а не какие-то частные случаи.
Повторюсь, авторы USB тоже пытались сделать универсальную шину. Но не преуспели — уж слишком велико разнообразие устройств. Хотя видя, что они предусмотрели даже джойстик для танка, подводной лодки и космического корабля (да, каждый из них прописан в стандарте!) — попытка была весьма неплохой.
Batu
Революции в компьютерных техниках уже прошли, сейчас время эволюций.
А я думаю что назрело и перезрело. Дальнейшее развитие в распараллеливании. А предложений принципиальных нет.
При чем здесь парадигма? Данные это всего лишь данные, способ обработки вы вольны выбирать сами.
Оно то так, но трудно складывать кубик из шаров.
COKPOWEHEU
А особенно сложно когда непонятно куб складывать, шар, тетраэдр или статую русалки.
perfect_genius
Почему бы устройству со встроенным драйвером не предоставлять компьютеру лишь интерфейс?
Мой роутер отдаёт лишь веб-страницу со своими настройками.
COKPOWEHEU
Так именно это я пытаюсь у Batu выяснить. Попытки сделать универсальный интерфейс предпринимались не раз, но успеха не достигли. Как вы предлагаете решать работу с бесконечным разнообразием устройств.
Пример с роутером даже обсуждать не стоит — у него интерфейс предельно примитивный.
perfect_genius
Не знаю как у других роутеров, но у моего Netgear jwnr2000v2 веб-интерфейс предельно подробный, можно настроить абсолютно всё.
COKPOWEHEU
Но никакие программы на компьютере о нем знать не знают (хотя не исключаю кривых поделий, для которых нужна своя программа настройки). Роутер вы можете заменить на любой другой и компьютер этого не заметит.
И сравните с заменой хотя бы мышки — она передает вполне определенные данные в драйвер, тот в ОС, она распределяет между приложениями. И замена скажем USB мышки на COM-портовую ведет в лучшем случае к переключению драйвера, в худшем — к неработоспособности. И это стандартное устройство.
А если говорить об экзотике — система может вообще не знать что это за устройство и как им управлять.
perfect_genius
А зачем им знать? Я уже давно с этим роутером и что-то не испытываю каких-то проблем, что сторонние программы не могут подключиться к нему.
Так же и с Wi-Fi — зачем чужим программам лезть в него? От драйвера получаем лишь интернет-данные, а могли бы получать напрямую из драйвера внутри устройства.
С мышки почему бы не получать только координаты, да нажатия по стандартным портам/адресам?
COM-ещё используются где-то?
COKPOWEHEU
Так о том и речь, что роутер это не «устройство, которое подключается к компьютеру». По сути ведь это другой компьютер.
А сколько у мышки координат? А сколько кнопок? А какова частота опроса, разрешение, другие параметры?Нет, авторы USB эту проблемы попытались решить, но до конца не преуспели.
Очвидно, речь не просто о COM-порту, которым, очевидно, пользуются, а именно о мышках.
А о мышках — вы готовы гарантировать, что кроме USB не будет других интерфейсов?
Проблема ведь именно в этом: устройств бесконечно много, мы сейчас даже представить не можем что изобретут через пять лет.