Phantom Operating System – вечная операционка
Анонсированный более чем 10 лет назад проект ОС Phantom за минувшие годы актуальности не потерял. В первую очередь потому, что за всё это время ничего существенного, концептуально нового с операционными системами не произошло: на рынке ОС по-прежнему царят всё те же Windows и всё тот же Linux, и альтернативы им как-то не наблюдается. Между тем разработчики Phantom в начале этого года заинтересовали представителей IT-отрасли, заявив, что до конца этого года готовы представить рабочую версию своей операционной системы и перейти к реализации первых некоммерческих пилотных проектов.
Разумеется, тут возникает вполне разумный вопрос: так ли необходима сегодня очередная операционная система, учитывая, сколько их, — в том числе, отечественных, — уже присутствует на рынке? Ответ однозначен: нужна, причем именно эта. Можно с уверенностью утверждать, что с её появлением и внедрением произойдет смена парадигмы в создании ОС, в первую очередь потому, что окажется преодолён своего рода предел развития, не позволяющий ныне существующим операционным системам двигаться дальше. До тех пор, пока Phantom оставался не более, чем концептом, не воплощённой на практике теорией, для такого движения попросту не было ориентира.
Эволюционный тормоз
Одной из главных проблем, замедляющих работу любой ныне используемой операционной системы, была и остается несогласованность прикладных приложений, работающих в её среде. На первый взгляд, это утверждение звучит странно, ведь эволюция языков программирования позволила за минувшие десятилетия радикально ускорить отладку отдельно взятого приложения, и современный программист легко справляется со множеством взаимосвязанных объектов весьма сложной структуры. Но проблема возникает ровно в тот момент, когда требуется передать эти объекты из одного приложения в другое. Программирование превращается в весьма странную игру с множеством трудно учитываемых модификаторов. И, подчас, это может привести к тому, что разработчики просто отказываются использовать ту или иную технологию.
В качестве примера технологии, «вымершей» из-за чрезмерной трудоёмкости написания кода, можно вспомнить технологию OLE, существовавшую в Windows со времён первых релизов, но не дожившую до наших дней. Для пользователя она была, вне всякого сомнения, невероятно удобна, так как с её помощью можно было внедрить, например, полноценную таблицу Excel в документ Word. Но для программистов её код был запредельно сложен в написании, так что приложений, реализующих OLE, было ничтожно мало изначально, а теперь и вовсе не осталось.
Впрочем, и другие используемые сегодня способы обеспечения взаимодействия программ также весьма сложны в исполнении и требуют написания огромного числа дополнительных строк кода. Ведь для того, чтобы передать другому приложению всё многообразие объектов, связанных друг с другом в сложный граф, надо эти данные сперва свернуть в линейную последовательность байтов, после чего приложение-получатель должно будет, в свою очередь, восстановить их во всём многообразии из этой довольно примитивной и, по-хорошему, ни для чего сложного не приспособленной структуры. И такое преобразование происходит каждый раз при вводе-выводе данных, в частности, например, при выводе в файл документа Word.
Иными словами, нынешние операционные системы работают хорошо, пока мы заняты созданием приложений. Но стоит только попытаться обеспечить взаимодействие этого созданного нами ПО между собой, как мы оказываемся в далёком прошлом, среди технологий более чем полувековой давности. Просто потому, что каждое приложение, а, точнее, процесс, в современных ОС работает в своем собственном адресном пространстве — выгороженном участке оперативной памяти, недоступном для других процессов.
По-хорошему, в UNIX-подобных системах, — а они все в той или иной мере UNIX-подобны — это полностью оправдано, ведь иначе процессы так или иначе станут другу-другу «портить жизнь». Правда, разделение адресных пространств неэффективно с точки зрения использования ресурсов компьютера, но зато оно гарантирует работоспособность и бесконфликтность одновременно работающих процессов. Современный разработчик просто не представляет себе иного подхода.
А как иначе?
В чём же тут преимущество Phantom, и почему мы смело можем говорить, что это — принципиально новая ОС, в корне отличающаяся от тех, что используются сегодня? Ответов тут несколько, и все они очевидны. Начнем с того, что Phantom использует совершенно иную схему фиксации состояния системы.
Все современные операционные системы в ходе работы используют так называемую виртуальную память, рассматривая её на логическом уровне как продолжение оперативной, в то время как физически она лежит на диске (на сей счёт устоялась терминология: swapping, paging). Обращение к ней происходит в реальном времени, одновременно с функционированием приложений. И вот тут возникает одна, но очень важная проблема, о которой знают все, но бороться с которой решительно невозможно: в случае, если одновременно с работой приложений необходимо «сфотографировать» — зафиксировать на диске актуальное состояние постоянно модифицируемой оперативной памяти, фиксировать её нужно целиком, а не «по кусочкам». Она нужна нам целиком, иначе потом не получится восстановить систему после, скажем, аварийного выключения питания. То есть организовать этот процесс можно, но придётся останавливаться и ждать, пока ОС довершит фиксацию, а на такую роскошь просто нет времени.
Phantom решает эту проблему коренным образом. Система сконструирована так, что время от времени она «поднимает волну» сохранения, которая «бежит» по памяти, выводя её содержимое на диск. Процессы при этом вправе модифицировать память только в той её части, которая не выгружена, не зафиксирована на диске. Если же им потребовалась модификация ещё не выгруженной памяти, соответствующий фрагмент памяти переносится «вперёд», за волну. Быстрые алгоритмы для такой процедуры вполне могут быть реализованы. Это означает почти полный отказ от понятия «файл» в его нынешнем понимании. Точнее сказать — использование файлов перестаёт быть неизбежной повинностью программиста. Вместо файлов он имеет дело с переменными.
Ещё одно отличие — возможность защитить процессы друг от друга без разделения адресных пространств. Справедливости ради стоит сказать, что попытки реализовать такой подход предпринимались и раньше, причем не только на программном, но и на аппаратном уровне. Например, когда компания Intel ещё в прошлом веке выпустила процессор 80286, был спроектирован также чип Intel 432. Он реализовывал красивейшую концепцию, — не позволял преобразовать число в указатель на определённую область памяти. Не позволял физически, — просто «не знал» такой операции. Указатель мог быть порождён только из указателя. Это простое решение позволяло обезопасить данные от случайного разрушения: если один процесс отдал указатель другому, тот мог обратиться к «чужой» памяти, а если нет — то и нет. Обратиться к произвольному фрагменту памяти в таком процессоре невозможно, а значит, все процессы защищены друг от друга, но при этом все приложения могут друг с другом взаимодействовать буквально напрямую, было бы у разработчиков такое желание. Это была более чем рабочая концепция.
Phantom позволяет реализовать её практически на любой аппаратной платформе, причём используя давно и хорошо известную технологию бинарной трансляции, широко применяемую сегодня в системах виртуализации; она позволяет сделать из любого реального компьютера любой виртуальный, причем с очень высокой эффективностью. С её помощью можно, например, виртуально «заменить» процессор x86 на другой, и прикладной софт, благодаря виртуализации, этой подмены не заметит. Она же позволяет операционной системе Phantom безопасно оперировать приложениями, написанными для других ОС. Двухшаговая трансляция с промежуточным представлением программного кода в форме «эсперанто» — байткода, — «понятного» для транслятора, обеспечивающего эффективный загрузочный код для любого процессора — функция, реализованная в большинстве современных языков программирования. C# и Java построены ровно так. Текст на C# компилируется в байткод, который потом обрабатывается платформой .NET. Точно так же поступает с байткодом, полученным на первом шаге трансляции кода Java, виртуальная Java-машина. Это развязывает руки разработчику операционных систем.
«Бессмертный пони»
Наконец, ещё одним принципиальным отличием ОС Phantom от операционных систем, используемых сегодня, следует назвать её практическое бессмертие, обеспечиваемое лежащим в основе концепции ОС принципом ортогональной персистентности. Phantom устроен таким образом, что, с точки зрения прикладного процесса, он никогда не перестает работать. Физическое выключение питания компьютера воспринимается так же, как банальная пауза, и при новом старте прикладные программы продолжают работать так, как будто отключения не было.
Это гарантирует систему от технических сбоев и даже — если остается цел жёсткий диск, — страхует от физического разрушения машины. Однако главная ценность этого свойства ОС Phantom относится всё к тому же критерию, упомянутому в начале статьи: она позволяет значительно экономить время программиста. Если разработчик получает гарантию, что операционная система и, как следствие, создаваемое в её среде приложение не перестают работать никогда, это моментально развязывает ему руки. Исчезает целый набор ограничений, которые на него и его работу накладывает среда программирования, используемая сегодня. В частности, необходимость прописывать в коде процессы, сопутствующие остановке программы.
Сегодня в момент остановки программа вынуждена все свои данные, — как правило, организованные как графы объектов, — разбирать, превращать в линейные структуры, естественные для хранения на диске, записывать, а потом, при рестарте, собирать и восстанавливать снова. Описание этих процессов может занимать порядка 30% от общего объёма кода программы. Phantom позволяет отказаться от этой части работы и, как следствие, значительно сэкономить время. А значит, не только ускорить написание программ и сделать код более изящным и лаконичным, но и сократить стоимость создания программного продукта. С этой точки зрения система Phantom вполне отвечает экономическим потребностям IT-отрасли.
Сегодня уникальная операционная система уже готова к испытаниям и тестированию. Совместно с Университетом Иннополис мы дорабатываем реализацию ОС Phantom. Система разработана до уровня устойчивого прототипа. Разумеется, это ещё не коммерческое решение, но теперь Phantom превратился из любопытного концепта и интересной идеи в реальный программный продукт. И мы с интересом рассматриваем перспективы её испытания в пилотных проектах, как сольных, так и совместных. Необходимо опробовать систему в различных узких нишах, и отработать её будущее коммерческое применение. Можно, подводя промежуточный итог десятилетней работы, отметить, что время принципиально новых решений в области проектирования ОС фактически уже наступило, инновации сдерживаются инерцией производителей ОС. Это относится и к Microsoft, и к сообществу Linux.
К появлению ОС Phantom пользователь принципиально готов. Новая операционная система при всех своих концептуальных отличиях от привычных программ вряд ли вызовет потрясение большее, чем, в свое время появление Windows 95. Благодаря Android, iOS, «Авроре», Blackberry OS и др. пользователь уже подготовлен к разнообразию.
Дмитрий Завалишин