Хотелось бы знать, как народ отнесся бы к появлению проекта по созданию Руccкой
ОС. Причём не только русской, но и всего русскоговорящего населения?
Присоеденились бы вы к такому проекту?
Ответ на
»сообщение 2261« (Сергей Перовский)
___________________________
Всячески поддерживая подход "от науки", все же повторю свои сомнения: пока все разговоры о требованиях к ОС сводятся к тому, чтобы она была "более", чем существующие: более надежной, более экономной и т.д. Мне кажется, подход "то же самое, только лучше" неэффективным. Успех может быть только если это будет "про другое". Нужно найти и решить задачи, которые современные ОС вообще не решают, тогда есть шанс заинтересовать пользователя.
Вы зрите в корень.
В набросках характеристик новой ОС ("манифест" нам коллективными усилиями еще предстоит написать) значились
адаптивность и
перенацеливаемость. См.
http://rbogatyrev.livejournal.com/2007/07/16/
О первой пока говорить рановато, а вот в отношении второй кое-что уже "оконтурилось" для публичного взгляда. Обе имеют непосредственное отношение к понятию реконфигурирования ОС (включая управляемую функциональную и ресурсную деградацию).
Начну издалека. Попробуем порассуждать. И очень неформально ("на пальцах"). Раз уж ставим под сомнение устои системного программирования, без пальцев тут не обойтись. :) (Да простят меня мудрые профессора и прожженные практики.)
Что такое ОС? Некий унифицированный слой ПО, который берет на себя задачи организации взаимодействия
людей и
программ с железом. Что отсюда напрашивается? Правильно: есть два вида сущностей -- люди и программы, взаимодействующие с компьютерным оборудованием (железом). Для первых важную роль играют интерактивные вещи, для вторых -- неинтерактивные ("пакетные").
Можно ли выделить некое унифицированное ядро, подходящее для ОС пользовательской ("человеческой") и программной ("нечеловеческой") направленности? Вполне. Значит, поверх ядра могут быть разные "насадки"? Получается так. Может ли этих насадок быть несколько для "пользовательской ОС"? Почему нет? Аналогично и в случае с "программными ОС". Может ли помимо ядра выделяться унифицированный слой, подходящий для разных классов ОС? Может. Это еще один элемент перенацеливаемости. Может ли быть несколько вариантов таких слоев даже для одного класса ОС? Может.
Может ли иметь вариации ядро? Разумеется. Причем не только из-за различий нижележащего процессорного железа. Давайте будем для простоты исходить из того, что вариативность ядра – это прерогатива адаптивности ОС (в нашем понимании). А вариативность остальных слоев и насадок – перенацеливаемости (хотя строго говоря, это не совсем так). Все это рассуждения в отношении декомпозиции сложной системы на модули.
Теперь посмотрим на нынешнее процессорное хозяйство. Есть две архитектуры – фон неймана и гарвардская (разделение линий передачи команд и данных). Опять же для простоты остановимся только на фон-неймановской, считая гарвардскую ее частным случаем.
Что имеем в классике? John von Neumann "First Draft of a Report on the EDVAC" (1945)
http://www.europrog.ru/book/edjn1945e.pdf
1. CA – Central arithmetic part
2. CC – Central control part
3. M – Memory
4. I – Input
5. O – Output
Собственно, это система (в понимании теории систем) с перечислением ее подсистем.
Другими словами, имеем базовую четверку: вычисление, управление, память, ввод-вывод.
Теперь взглянем на устройство прикладной программы (пока что не ОС). Практически в любой программе можно выделить вещи, которые относятся к упомянутой четверке. Только вот они обычно размазаны по программе и не являются четко выраженными подсистемами (хотя, кто как пишет). При этом нередко программист игнорирует (не знает, не хочет использовать)
унифицированные решения этих подсистем. Они отображаются еще как минимум на двух уровнях: в
языке программирования и в
ОС. Т.е. в ОС и в языке базовая четверка неизбежно находит свое отражение (опять-таки с разной степенью "размазанности").
С незапамятных времен язык (его реализация, система программирования) нередко подменял собой ОС (можно даже для красного словца вспомнить Бейсик, хотя он тут не первопроходец). Т.е. в определенном смысле можно считать язык (его реализацию) и ОС разными гранями
одного и того же. Это важный момент. Но пойдем дальше.
Исполняющая система языка (run-time system) может плавать поверх ОС, а может плавать поверх голого железа. В этом случае неизбежно приходят к мысли об особой роли такого языка, даже об (абсолютной) моноязыковости. Между железом и языком (ОС) может лежать демпфирующий абстрактный слой, унифицирующий оборудование (виртуальная машина просто как пример). В этом случае вполне можно говорить об относительной моноязыковости, поскольку этот слой вполне в силах взять на себя заботу о сосуществовании разных моноязыковых миров (как взаимодействующих, так и просто мирно сосуществующих в изоляции).
Собственно Вирт и его команда отстаивают идею моноязыковости, когда язык фактически растворяется в своей ОС (но при этом может плавать поверх чужой).
Возьмите для примера Oberon System и BlackBox. Про первую (в Windows-реализации) можно сказать при первом знакомстве, что просто какая-то необычная
программа (никак не ОС), какой-то файловый браузер (типа FAR). Когда же начинаешь знакомиться ближе, выясняется, что это ОС, да еще ой какая непростая. Такие возможности, что с непривычки дух захватывает. Возьмем BlackBox (выросший из Oberon System, но выпятивший сторону языкового инструментария). Казалось бы -- невзрачный IDE, да еще с "левого" языка. Потом, при более внимательном рассмотрении, выясняется, что это не просто IDE, а самостоятельная ОС, "косящая" под IDE и работающая поверх массовой ОС. Более того, отчуждаемые приложения могут тянуть за собой эту скрытую микро-ОС (да еще с компилятором на борту!). Т.е. отчуждаемое приложение может реконфигурироваться вне доступа к IDE (не так, как это принято в традиционных системах программирования). Причем приложение имеет готовую (унифицированную) инфраструктуру, которая нивелирует "чихи" версий операционки и не требует озадачиваться "псевдосистемным программированием" (много писать своими руками: вспомним про размазывание отображений подсистем фон-неймана в пользовательских программах).
Что дают такие инженерные подходы? Правильно. Великолепный потенциал для перенацеливаемости (статической и динамической). Можно относительно легко (при наличии опыта и понимания) подстраивать под свои задачи. Заниматься
инженерным конструированием, а не кодингом. Что собственно говоря, и привлекает в Оберон-семействе.
Итак, в BlackBox (и в Oberon System) сосуществуют микро-ОС и микро-IDE, которые есть под рукой в одном флаконе. При этом обе они связаны единой исполняющей системой языка. А эффективность межпроцессного взаимодействия достигается за счет сведения работы в ОС к работе в рамках пространства одного (безопасного) языка. Благодаря модному словечку SIP (из проекта Singularity) все прогрессивное человечество теперь может приобщиться к этой элементарной инженерной идее. Обратите внимание -- модули Оберона обеспечивают классам ООП аналогичные возможности работы в четко огороженном (и охраняемом!) пространстве без постоянного "предъявления паспорта" (пресловутое правило No Paranoia Rule).
Можно вспомнить одного ученика Вирта (Ральфа Соммерера), работающего ныне в Microsoft Research. Его идея Oberon Script исходит из возрождения замыслов Микаэля Франца, тоже ученика Вирта (в отношении Juice – компактной web-ОС Oberon System). Только для доставки полезного груза на орбиту пользователя у Соммерера используется уже не плагин, а пустивший везде свои метастазы JavaScript. Соммерер написал уже на Java Script компилятор классического Оберона (благодаря компактности языка это оказалось несложно и довольно эффективно), а теперь замысливает перенести в браузер и Oberon System. Т.е. ОС получается не только очень компактной и сливающейся с надежным языком, но еще и крайне мобильной (в смысле перенесения в пространстве, не говоря уже о перенесении по платформам).
Но вернемся к перенацеливаемости в нашем проекте. Поскольку это важнейшая особенность новой ОС. Фактически замысливается такая штука, которая может даже быстро доставляться на "орбиту" (совсем не обязательно путем Соммерера) и разворачиваться там в полный рост. И наоборот. Вовремя "смыться". :)
Обратите внимание еще на такой момент. В отношении языков мы ориентируемся на привилегированную тройку (пост-Oberon, Haskell и Python), а также "примкнувшие" к ним непривилегированные Си и Java. Кроме того, на реализацию POSIX (для переноса UNIX-софта). Из этого напрашивается естественный вывод, что такую конструкцию можно будет разобрать на кубики, когда будет возможность иметь:
1. только один привилегированный язык
2. только триаду привилегированных языков
3. триаду с Си
4. триаду с Си и с POSIX
Другие возможные комбинации реконфигурирования додумать нетрудно самостоятельно.
Возвращаясь к ответу на реплику Сергея Перовского. Нужно ли найти и решить задачи, которые современные ОС вообще не решают? Наверное, да. Более того, копаем в этом направлении. Но возможно имеет смысл предоставить людям такую ОС, которая даст сто очков вперед другим с точки зрения адаптируемости под их задачи. Т.е. даже не персональная ОС, а персонифицированная ОС (для "пользовательских ОС"), или "озадаченная" (для "программных ОС").
При этом не надо игнорировать продумывание и создание базовых наборов решений и насадок для типовых задач. Это уже будет не просто поиск ниши и реализация для нее ОС. А быстрое перенацеливание ОС. Чтобы продумать такое перенацеливание, надо сначала собрать информацию о возможных (потенциальных) нишах. Переработать ее, обобщить, найти унифицированную основу, а потом уже решать задачу проектирования и реализации механизма перенацеливания.
Пока же вся наука, насколько я понял, свелась к исследованию того, кто как решал известные задачи, возлагаемые на современные ОС и насколько получилось эффективно.
Строго говоря, наука пока отдыхает. До нее еще дело не дошло. Просто в команду пришли вполне созревшие специалисты, которые имеют свои идеи и которые намерены их в проекте воплотить (в том или ином виде). Сейчас мы и ищем некие основы совместной работы ярких индивидуальностей, ограничиваясь пока формой дискуссий. Сразу скажу, что в отличие от публичных дискуссий они носят куда более детальный и технический характер, что неудивительно. Убежден, что проект дает возможности для широкого маневра в отношении квалификации и предпочтений тех или иных участников. Другими словами, дело найдется практически всем. Да, мы сейчас (первый месяц) в основном дискутируем, но это позволяет вскрыть важные контуры организации проекта и даже самой ОС. Не исключаю, что черновое проектирование ее и экспериментальную реализацию отдельных вещей мы сможем начать уже этой осенью.
Кстати говоря, раз уж упомянул принцип No Paranoia Rule, то в отношении закрытых дискуссий он проявляется в значительной мере. Нет таких накладных расходов на обеспечение нравственной безопасности ярких индивидуальностей, на "переключение контекстов" и вообще на "межпроцессное взаимодействие". При этом консультационная работа с внешним миром для нас очень важна. Будем ее продолжать и расширять.