Saturday, November 7, 2009

Опера по Фантому

Нашёл в черновиках пост который побывал в песочнице хабра, но так и не дал мне желаемого инвайта :) Дата 28 февраля 2009 года. Всё один к одному как было тогда :)


Предисловие: желательно чтобы читатель немножко представлял принципы работы phantom os, т.к. некоторых из них я касаюсь вскользь.

Не так давно российские интернеты наполнились обсуждением отечественной ОС. Делалось это уже не раз, всё новые и новые убийцы винды да заодно и лунукса появляются время от времени, но обычно это оказывалось какое-нибудь чудо написанное для диплома студентом-недоучкой и конкурировать никогда и ни с кем не могло. Появление фантома изначально происходило в похожей манере: ОС которой нет, которую автор написал 10 лет назад, несовместимая ни с чем, (о ужас) в ней даже нет файлов. Хотя были отличия, во-первых сумасшедший автор ресурса http://stoplinux.org.ru/ заявил что разработка этой ОС ведётся при поддержке государства, но это уже его личные тараканы (на которых правда многие повелись). Во-вторых систему заметили за рубежом и это как раз намного интереснее дело в том, что у разработчика фантома взяли интервью в "The Register" (если не путаю), дальше пошли обсуждения на слешдоте, даже стенфорд(http://dz.livejournal.com/490085.html) заинтересовался темой "нашей ОС".

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

Чем на самом деле является фантом:


  • фантом это старая мечта dz, он как хороший программист, перейдя сначала от ассемблера до си, а потом к си++ и яве желал чтобы ОС была такой же удобной с его точки зрения как и ява, т.е. чтобы она оперировала объектами. Моё впечатление от dz что при том что он умеет программировать на всём, он считает что реальный мир состоит из объектов (мы то с вами знаем что он состоит из процессов которые пересылают друг другу сообщения), так же ему хотелось чтобы ОС тоже верила в то что всё является объектами, а ещё лучше могла бы разделять доступ к одному объекту между несколькими программами (вот тут вот и есть самый главный комплекс dz, он считает что если подобной технологии в ОС нет, то она совершенно ущербная, отсюда как бы и появляется идея того что винда это плохо, т.к. в ней это делается чере OLE, а это не очень удобно, а линукс вообще недоОС, потому что на уровне ОС подобных технологий нет).

  • перейдя к ООП, начинаешь всё больше замечать что сохранять состояние твоей программы неудобно, если раньше состояние программы это был набор переменных, то теперь это набор объектов различных классов, да не дай Боже ещё и в разных тредах, и из этой проблемы(проблемой в данном случае видимо является ООП) возникает вполне очевидное решение, реально оно кажется даже гениальным, поэтому все и писают кипятком от Фантома. Решение сохранять состояние программы на уровне ОС, а не кодом самого приложения. Конечно априори мы сохраним кучу лишнего хлама, но зато мы точно не забудем что-нибудь сохранить, во времена терабайтных винчестеров (по мнению dz) это не будет никому мешать. Зато теперь мы не должны писать в нашей программе код сохранения/загрузки состояния, на самом деле это успех. теперь ваши программы не нуждаются в конфигурационных файлах, игры не нуждаются в файлах с текстурами, СУБД не требуется изобретать ФС внутри ФС чтобы удачно хранить данные, теперь всё и всегда хранится в памяти... У нормального человека сейчас должен случиться инфаркт при мысли что его любимый ГТА весь будет хранится в памяти, но с другой стороны не надо забывать что эта память уже сто лет как виртуальная, т.е. фактически ваш ГТА будет хранится в свопе и фактически же, продавец продавая вам болванки с ГТА будет продавать своп, который подключившись к вашему компу добавит в память ГТА... На самом деле это звучит так элегантно и так бредово что кровь стынет в жилах, но вот оно... вот то что убивает файлы... убивает всю нужду в них. (конечно это порождает миллиарды проблем, но они все решаемы, так говорит dz и я даже верю ему)

  • если теперь есть только память то возникает резонный вопрос, а как же делить эту память? как сделать так чтобы пользователь Вася не мог читать файлы (фу, как пошло, конечно же не файлы, а документы) Маши? как сделать чтобы программа вирус.ехе не читала пароли из программы браузер.ехе? Вспомним ради чего нам нужна была единая память - для общего доступа к объектам из разных программ, в современных программах мы делаем это довольно интересным образом, мы пишем целую программу, которая будет контролировать доступ к этому объекту (скажем программу ворд, а объект документ) и чтобы как-то изменить документ мы просим программу сделать какое-либо действие, а она решает делать или не делать, как делать, как вести себя когда с документом работает сразу несколько программ, на самом деле пример выглядит менее бредово если в качестве программы думать о mysql-сервере например, а объект - список товаров. За счёт чего программа А сейчас не может нагло изменить список товаров? т.к. она не может изменить файл базы данных (у неё нет прав записи файла) и она не может получить доступ к памяти процесса mysql за счёт использования защищённого режима доступа к памяти. Но что делать если теперь я хочу дать программе А доступ к памяти программы Б? DZ придумал следующий ход (на самом деле просто удачно подглядел у интел) - запретить превращение int в pointer, ход довольно простой, но действенный, теперь программа не может сканировать память, она может только обратится к тому участку к которому ей позволили (к тому указатель на который ей передали). Таким образом больше не нужен защищённый режим на уровне процессора, т.к. память программ защищена на уровне языка программирования.

  • язык программирования... фантом... это не си, не ява, своя виртуальная машина, свои правила игры... программы для фантомОС можно писать только на фантоме, потому что нет другого способа запретить те самые преобразования int в pointer, зато тут сплошной ООП, можно делить между программами доступ к объектам, достаточно каждой программе передать на этот объект ссылку, дальше вы можете вызывать методы этого объекта (привет процессы и сообщения)... надо... надо что-то написать... такое чтобы брало за душу... чтобы думалось что наверно это и правда хорошая затея... всё этого того стоило... да, мы получили (гипотетически) дешёвый шаринг объектов, казалось бы без серилезации. Теперь задача сделать 2 программки одна из которых должна редактировать список товаров, а другая показывать его не должны создавать специальный хранитель списка (mysql к примеру) не должна получать этот список в виде текстового ответа на запрос с последующией десириализацией, а программа А может просто передать программе Б ссылку на объект список... наверно это здорово, наверно здорово то, что передать нужно это всего лишь один раз, потому что ОС дальше будет поддерживать программы работающими "вечно".

  • Где же воз? Да, дело в том что воз и ныне там... там же где и 10 лет назад... идея не писать код сохранения/загрузки довольно приятная, тем более что она по версии dz занимает 30-40% кода программы, идея шарить объекты, а не использовать какие-либо хранилища тоже довольно приятная... Как считает dz самое главное чтобы ОС была удобна для программиста, тогда программы потянутся, потом потянутся люди... главное конечно чтобы в ОС была технология OLE и ООП на уровне ядра... инача ОС остановится в развитии на уровне линукса и для программистов будет совершенно неприменима... Не будем о грустном, о том как не хватает OLE в том же apache или mysql. Будем о хорошем... идея сделать единую память, сделать передачу данных между программами более дешёвой в плане переключения контекстов и сделать программы вечноживущими это хорошо... то что из-за этого мы теряем файлы, кучу языков программирования, современные программы это обидно, при должном уровне оптимизации виртуальной машины и компилятора мы скорей всего даже не очень много потеряем в производительности... реально жалко терять только ощущение дороговизны ресурсов... когда ради того чтобы скинуть другу записку из 3х слов на флешку мы будем забивать туда копию программы (сам по себе текст не умеет печататься или редактироваться, вы должны дать ему код который будем обрабатывать методы типа "печать"). Тут возникает много вопросов, вопросов как, почему, зачем...

Теперь мы все ждём... dz сказал что через год сделает рабочую версию операционной системы, потом подождём каких-нибудь реальных приложений, потом подождём бенчмарков, замеров производительности труда и прочей статистики... А в это время выходит win 7, куба переходит на gentoo, в России во всю идёт Russian Fedora и школы переходят на линукс... Идея того что надо что-то менять зреет: m$ изобретаетт singularity, dz изобретает phantom os. Лично я верю и жду ОС работающую на подобие erlang: изолированные процессы, обменивающиеся сообщениями, лёгкое создание тредов, прозрачная работа по сети. А что касательно отсутствия файлов и "вечности" программ то ИМХО это можно привязать к любой ОС, даже хотелось бы увидеть скоро что-нибудь подобное в linux

ПС: с удовольствием исправлю ошибки и места написанные криво.

1 comment:

Unknown said...

Собственно за время с момента написания поста произошли некоторые подвижки вида http://dz.livejournal.com/515929.html