Философская идея, будто однородная система гораздо устойчивее неоднородной, сама по себе не нова - применительно к техническим системам еще в эпоху расцвета научной фантастики у многих писателей фигурировал тезис о том, что красивое и органичное решение должно быть целиком сделано из одного материала. Тем не менее на настоящий момент борьба на рынках аппаратного и программного обеспечения с постоянным “перетягиванием одеяла” между производителями привела к тому, что понятие “гетерогенная вычислительная среда” стало таким же обычным, как “водопровод” или “кофеварка”. Казалось бы, есть о чем печалиться апологетам красивых вычислительных структур! Однако новый проект канадской компании QNX Software Systems (QSSL, www.qnx.com) под названием QNX Realtime Platform, несмотря на свою молодость, уже успел показать, что если усилия прилагать в правильном направлении, то мир начинает стремиться вовсе не к хаосу.
Встраиваемая платформная ОС реального времени?
Не секрет, что одним из ключевых факторов успеха на рынке ПО всегда была и остается длительность цикла разработки: выигрывает тот, кто успевает сделать конкурентоспособный продукт раньше других. Известно также, что определяется эта длительность в основном доступностью и функциональностью соответствующего инструментария. Для рынка встраиваемых ОС и ОС реального времени (ОСРВ) этот вопрос всегда стоял особенно остро, поскольку в данном случае ОС в целевой системе обычно скрыта от конечного пользователя, а следовательно, и не обязана быть дружественной; при этом вносить в нее дружественность только для создания штатной среды разработки было бы слишком накладно. В результате средства разработки для многих встраиваемых ОС и ОСРВ сосредоточились под более дружественными платформными ОС типа Windows и Unix, к тому же обладающими более выраженной, чем у специализированных ОС, системой стандартизации интерфейсов прикладного программирования (API), что значительно упрощало перенос приложений, а значит, делало средства разработки доступными сразу на ряде платформ.
Казалось бы, такое разделение функций между ОС (этот подход получил название кросс-разработки) вполне разумно. И тем не менее, несмотря на кажущуюся красоту решения, оно имеет по крайней мере три существенных недостатка.
Графический интерфейс пользователя в Photon 2.0
Во-первых, разработчик в этом случае обязан ориентироваться как минимум сразу в двух ОС. Учитывая, что ОСРВ и встраиваемые ОС обычно имеют нестандартные интерфейс пользователя и API, а работа с ними часто требует глубокого знания аппаратных средств, перечень требуемых от разработчика знаний и навыков оказывается достаточно велик. Такого специалиста гораздо сложнее найти (и соответственно заменить), да и обойдется он весьма недешево.
Во-вторых, коль скоро инструментальная ЭВМ (host) и целевая ЭВМ (target) разнесены, перед испытанием новой версии целевого программного модуля его необходимо переносить после компиляции с инструментальной ЭВМ на целевую. Это может существенно удлинить цикл отладки.
В-третьих, разработчикам, хоть раз сталкивавшимся с отладкой целевых приложений, на собственном (обычно печальном) опыте известно: при тестировании приложения эксперимент должен быть как можно более “чистым”, т. е. тестирование и отладку следует проводить в условиях, максимально приближенных к рабочим. В противном случае всегда остается опасность чего-то не учесть, а следовательно, опять же потерять драгоценное время, фактически подарив его конкуренту. Отсутствие же в целевой ОС штатных средств разработки, а значит, и штатного отладчика вынуждает использовать чужеродные отладочные модули, обеспечивающие интерфейс с удаленным отладчиком, работающим на инструментальной ЭВМ, - а такой эксперимент уже никак нельзя назвать “чистым”.
Концепция, реализованная в QNX Realtime Platform, в противовес традиционному подходу к разработке приложений для ОСРВ на удивление проста и изящна. Нестандартность API и неудобство, а то и полное отсутствие пользовательского окружения не позволяют большинству ОСРВ иметь свои штатные средства разработки, вынуждая их пользоваться кросс-средствами. Но если в ОСРВ внести удобное пользовательское окружение и расширить API до некоего общепринятого стандарта, разумеется, сохранив при этом специфичные элементы функциональности, то появляется возможность переноса в данную ОСРВ программного обеспечения из других ОС, и в первую очередь популярных средств разработки. Таким образом достигаются сразу две цели. Во-первых, разработка перемещается в ту же ОС, где будет выполняться и целевая система (self-hosted development), и кросс-разработка со всеми ее недостатками теряет всяческую актуальность. Во-вторых, данная ОСРВ автоматически становится платформной ОС, поскольку стандартный API позволяет переносить в нее практически любое ПО, а наличие ядра реального времени дает ей ряд неоспоримых преимуществ, особенно для приложений, требующих высокоскоростной обработки данных, - например для задач мультимедиа.
Встраиваемый веб-браузер Voyager поддерживает Macromedia Flash
Следует заметить, что такой подход для QSSL не является новым: реализованная в QNX Realtime Platform концепция логически продолжает идеи, воплощенные компанией в предыдущих проектах - небезызвестных ОСРВ QNX2 и QNX4. Сама по себе QNX4 уже была достаточно близка к идее платформной ОСРВ: она обладала достаточно дружественным интерфейсом пользователя, содержала штатную среду разработки, а ее API отвечал ряду стандартов семейства POSIX. Последнее обстоятельство позволило перенести в QNX4 ряд программных продуктов из других Unix-систем; однако поддержка весьма ограниченного числа стандартов привела к тому, что многие приложения отказывались компилироваться под QNX4 без серьезных доработок, в результате чего у разработчиков возник явный недостаток инструментария. В дополнение ко всему становлению QNX4 как платформной ОС мешала ее жесткая привязка к аппаратному обеспечению - из аппаратных платформ поддерживались только ПК на базе процессоров Intel x86.
Основной целью проекта QNX Realtime Platform, базирующегося на последней разработке QSSL - ОСРВ QNX/Neutrino (ее иногда называют QNX6), было обеспечение разработчиков встраиваемых систем и систем реального времени мощной программной платформой, которая одновременно являлась бы ОСРВ, была бы встраиваемой, масштабируемой и легко расширяемой, имела в своем распоряжении штатные средства разработки и была доступна большинству пользователей.
Neutrino 2 - фундамент для широкого круга задач
Несмотря на скромные заявления представителей QSSL о преимущественной ориентации компании на рынки встраиваемых систем, систем управления, сбора и передачи данных, разработанную ею операционную систему жесткого реального времени QNX/Neutrino еще задолго до рождения проекта QNX Realtime Platform заочно окрестили “святым Граалем операционных систем”. И это неудивительно: архитектурные особенности этой ОСРВ позволяют успешно применять ее практически в любой вычислительной системе, от “интеллектуального тостера” до мощных SMP- и кластерных архитектур, тем самым обеспечивая разработчикам возможность использовать одни и те же технологии в системах любого масштаба.
Микроядерная архитектура. QNX/Neutrino спроектирована по микроядерной схеме. Все системные компоненты сгруппированы вокруг одного компактного микроядра, которое отвечает за базовые сервисы ОС - межпроцессные коммуникации (IPC), диспетчеризацию процессов/нитей и обработку прерываний. Малый размер микроядра Neutrino (он составляет примерно 32 Кб, а без планировщика - около 20 Кб) позволяет уменьшить размер нереентерабельного кода, что повышает предсказуемость системы и гарантирует отработку события в течение заданного времени.
Универсальная модель процессов. В отличие от ОС с монолитным ядром, где часть процессов выполняется в кольце ядра и скомпонована с ним, в QNX/Neutrino все процессы - являются ли они драйверами устройств или прикладными приложениями - выполняются в кольце пользователя и абсолютно равноправны. Это дает возможность начинать и заканчивать любой процесс в любой момент времени без перезагрузки системы, динамически. Отсюда вытекает много преимуществ: например, при отладке драйверов достаточно просто перекомпилировать код и перезапустить исполняемый модуль - утомительная процедура перестройки ядра с последующей перезагрузкой ОС не потребуется.
Защита памяти. Каждый процесс в QNX/Neutrino выполняется в отдельном защищенном адресном пространстве. Обращение к “чужому” адресному пространству возможно только через специализированный системный вызов и при наличии соответствующих прав данного процесса. Это гарантирует защиту процессов и ядра ОС от возможных некорректных действий. Защита памяти и универсальная модель процессов в совокупности предоставляют системе возможность корректного самовосстановления “на лету” в случае программного сбоя.
Масштабируемость как следствие модульной организации. QNX/Neutrino организована по принципу модульности. Модули можно добавлять в систему или исключать из нее в зависимости от требуемой функциональности. Это свойство дает QNX/Neutrino очень гибкие возможности масштабирования: если какой-то модуль не нужен, можно с самого начала обойтись без него. Это правило относится к любому программному модулю; мало того, если наличие такого примитива, как “процесс”, не является обязательным или слишком накладно (например, в устройствах с ограниченными ресурсами), можно исключить даже диспетчер процессов! Диспетчер нитей при этом остается частью микроядра, т. е. неотъемлемой составляющей системы, поэтому приложение, работающее в такой конфигурации ОС, может быть еще и многопоточным.
POSIX означает переносимость. API ОСРВ QNX/Neutrino соответствует многим популярным стандартам (POSIX, GNU, Linux и др.). Это обеспечивает легкость адаптации как приложений, так и собственно самих разработчиков - им знакомы такие API, а значит, упрощается проблема поиска и обучения специалиста: даже если он изначально не был знаком со спецификой ОСРВ, ему достаточно изучить лишь неизвестное ему подмножество функций.
Многоплатформность. В настоящий момент ОСРВ QNX/ Neutrino поддерживает целевые аппаратные платформы на базе процессоров MIPS (IDT, NEC, QED и др.), PowerPC (IBM, Motorola) и x86 (AMD, Cyrix, Intel, STMicroelectronics). Полным ходом идут работы и по переносу QNX/Neutrino на платформы ARM/StrongARM и SH4 компании Hitachi.
Окружение: кратчайший путь к сердцу пользователя
Народные поговорки не врут. По крайней мере в том, что встречают обычно по платью. И хотя QNX/Neutrino однозначно относится к той категории ОС, которую если и приходится провожать, то определенно по уму, тем не менее разработчики QSSL хорошо позаботились о том, чтобы обеспечить своему детищу достойную встречу.
Встраиваемая графическая оболочка Photon microGUI. Термином “встраиваемая ОС” сейчас уже никого не удивишь. Однако одной ОС во встраиваемой системе зачастую оказывается мало, и новая волна карманных интерактивных устройств (персональные электронные секретари, Интернет-приставки, сотовые телефоны и т. п.) - яркое тому подтверждение: встраиваемым системам нового поколения необходим удобный пользовательский интерфейс.
Photon Application Builder 2 - средство визуального проектирования приложений Photon
Большинство графических оболочек, существующих на настоящий момент, не удовлетворяют требованиям встраиваемости: во-первых, они громоздки и плохо масштабируются, а во-вторых, очень ресурсоемки. В связи с этим специально для нужд встраиваемых систем в QSSL была разработана встраиваемая графическая оболочка Photon microGUI, работавшая тогда под управлением QNX4 и очень хорошо себя зарекомендовавшая как быстрая, компактная и удобная пользовательская среда.
С появлением QNX/Neutrino в нее из QNX4 была перенесена последняя (на тот момент - 1.14) версия Photon, и дальше развитие Photon в QNX/Neutrino пошло по самостоятельному пути. В результате появилась Photon 2, полнофункциональная встраиваемая графическая оболочка, сочетающая в себе все качества Photon 1.14 с поддержкой 2D- и 3D-графики, а также возможность запуска приложений, написанных для X Window System - эмулятора графического сервера X (XPhoton), благодаря которому значительно упростился перенос графических приложений из других ОС.
Средства разработки. В плане средств разработки для QNX/ Neutrino стратегия QSSL заключается в поддержке множества как целевых (target), так и инструментальных (host) платформ, базирующихся на общедоступных (public domain) средствах и позволяющих привлекать по мере необходимости средства сторонних разработчиков. В связи с этим основным средством разработки был выбран инструментарий GNU.
Упоминание о поддержке множества инструментальных платформ здесь не случайно: для обеспечения большей гибкости было решено сохранить и далее развивать возможности кросс-разработки из-под других ОС (Linux, Windows, Solaris).
Основным компилятором для QNX/ Neutrino является GCC/ G++, а основным отладчиком - соответственно GDB. Из существующих графических интерфейсов GDB возможен выбор из трех вариантов: PDB (графический отладчик QNX, разработка QSSL), широко известный DDD (Data Display Debugger) и Insight. Что касается поддерживаемых библиотек, то очень приятной новостью послужило заявление QSSL о поддержке в QNX Realtime Platform библиотек Си и Си++ компании Dinkumware, завоевавших заслуженную репутацию у множества разработчиков по всему миру.
Планов по созданию или переносу в QNX Realtime Platform каких-либо интегрированных сред разработки (Integrated Development Environment, IDE) QSSL пока не имеет; в настоящее время идут работы по переносу в этот проект многооконного текстового редактора Xcoral, способного во многом выполнять функции IDE. Из IDE сторонних фирм, поддерживающих разработку под QNX/Neutrino, следует отметить CodeWarrior фирмы Metrowerks, позволяющий вести кросс-разработку из среды Windows для целевых аппаратных платформ x86 и PowerPC, а также Visual Age Micro Edition (VAME) корпорации IBM, в котором планируется, кроме уже существующих средств разработки на Java, использовать в качестве подключаемых модулей GNU-компиляторы Си/Си++. Планируется и перенос в QNX Realtime Platform интегрированной среды разработки C-Forge компании CodeForge (www.codeforge.com/rus), существующей сейчас в версии для QNX4.
Средством разработки графических приложений Photon 2 для QNX/Neutrino является Photon Application Builder 2 (PhAB2), теперь доступный и на платформах Windows и Linux для обеспечения возможностей кросс-разработки.
Перечень инструментов разработки был бы неполным без упоминания средств диагностики. В настоящий момент QSSL переносит в QNX/Neutrino пакет анализа событий микроядра Deja-View; в стадии обсуждения находится вопрос о приобретении QSSL у французской компании JoHeR и переносе в QNX/Neutrino анализатора сетевого протокола Photon Network Probe.
Веб-браузеры. Из веб-браузеров в QNX Realtime Platform сейчас имеются два - штатный для QNX веб-браузер Voyager, существовавший еще в QNX4, и PhZilla, появившийся как результат совместного проекта QSSL и Mozilla (www.mozilla.org) по переносу в QNX Realtime Platform браузера Gecko (Netscape). При этом PhZilla является не просто продуктом переноса Gecko на другую платформу: QSSL утверждает, что в процессе этой работы были учтены особенности строения QNX/Neutrino, благодаря чему удалось при сохранении функциональности браузера сделать его более компактным и повысить производительность.
Рассматривается также вопрос об использовании в QNX Realtime Platform веб-браузеров на основе Java - Escape фирмы Espial Group (www.espial.com) и Icesoft компании Icesoft (www.icesoft.com).
Компоненты мультимедиа. В QNX Realtime Platform воплощены многие новые технологии, и львиная доля их является мультимедиа-ориентированными.
Мультимедиа-компоненты QNX Realtime Platform включают в себя проигрыватели “обычных” аудиофайлов и аудиоCD (с интегрированным доступом к Интернет-базе данных CD - CDDB), проигрыватель видео/аудио в формате Realplayer G2, модуль проигрывателя контента Macromedia Flash для веб-браузера Voyager, аудиомикшер, аудиодрайверы ALSA 1/5 и соответствующие библиотеки аудиоAPI.
Рабочее окно графического отладчика PDB
В поставку QNX Realtime Platform входят также проигрыватель DVD (на базе XingDVD) и проигрыватель аудио/видео в формате MPEG 1/2, которые могут служить как самостоятельными приложениями, так и подключаемыми модулями (plugins) для Voyager, запускаемыми через специализированный тег.
Поддержка Java. Виртуальных машин Java для QNX/Neutrino в настоящий момент две - это PersonalJava (pJava) корпорации Sun Microsystems и встраиваемая виртуальная машина J9 IBM. В будущем возможен перенос в QNX Realtime Platform высокопроизводительной встраиваемой виртуальной машины Intent компании Tao Group (www.tao-group.com), существующей сейчас в версии для QNX4.
Штатных средств разработки на Java в QNX Realtime Platform пока не предусмотрено. Из продуктов “третьих” сторон ведутся работы по переносу в QNX Realtime Platform пакета IBM Visual Age Micro Edition (VAME) - подробности об этом продукте можно прочитать на www.ibm.com/software/ad/embedded. Там же вы получите для ознакомления полнофункциональные демонстрационные версии виртуальной машины J9 для аппаратных платформ x86, PowerPC и MIPS.
Системы управления базами данных. Перечень СУБД, доступных сейчас на платформе QNX/Neutrino, сравнительно невелик; впрочем, несмотря на всеобщую “суету вокруг встраивания”, пока что требованиям встраиваемости удовлетворяют очень немногие современные СУБД.
На настоящий момент QNX/Neutrino поддерживается такими системами, как SQL Anywhere Studio UltraLite компании Sybase (my.sybase.com/detail?id=1001969), встраиваемая версия DB2 от IBM, именуемая DB2 Everyplace (www.ibm.com/softwaredata/db2/everyplace), а также небезызвестная Empress RDBMS канадской компании Empress Software (www.empress.com). Последняя, кроме своих блестящих технических характеристик, интересна еще и тем, что, как и сама QNX/ Neutrino, распространяется бесплатно для некоммерческого использования. (Здесь сразу следует оговориться, что версий Empress RDBMS для других платформ это правило не касается.)
GDB - лучшая игрушка. На вопрос: “Какие преимущества дает пользователю графическая оболочка?”- многие могут совершенно серьезно ответить: “В ней можно открыть несколько терминальных окон одновременно!”. А если спросить: “Какая ваша любимая компьютерная игра?”- то в ответ можно услышать: “Командно-строковый отладчик, что же еще?”.
С QNX Realtime Platform не будет скучно ни вышеозначенным гуру, ни тем, кто придерживается иного мнения о машинной графике. Другими словами, кроме таких популярных средств развлечения, как компиляторы и отладчики, в QNX Realtime Platform уже перенесены Defender, Columns, Doom и Quake 3 Arena - и список продолжает расширяться.
Рынок ПО: в поисках “золотой середины”
Как это ни печально, но качество продукта - еще далеко не все. Конкурентоспособность продукта на рынке определяется в первую очередь грамотной рыночной политикой.
Пожалуй, наиболее полярные позиции на рынке программного обеспечения в настоящий момент занимают “империя Microsoft” и “содружество Linux”. Первую положительно отличает наличие единого информационного центра и жесткой системы стандартов - вот, казалось бы, прямой путь к построению красивых вычислительных структур! Однако не все так просто: излишки характерной для монополистов “технической интравертности” мешают внедрению Microsoft на другие рынки, поскольку законченных конкурентоспособных решений на этих рынках компания не предлагает, а механизмов органичной стыковки с решениями других производителей, что могло бы дать хотя бы долю участия в соответствующих проектах, у нее практически нет (что, кстати, неудивительно - ведь Microsoft всегда свято соблюдала концепцию монолитности).
“Содружество Linux” фактически является антиподом вышеозначенной империи. Во-первых, все попытки некоторых крупных компаний взять на себя роль информационного центра реально предпринимались в основном ради приведения Linux к нуждам своих проектов, поэтому единого и универсального информационного центра как такового в сообществе разработчиков до сих пор нет. Из-за этого неясна принадлежность производимой сообществом интеллектуальной собственности, а значит, ставится под сомнение возможность использования ее в коммерческих проектах. Воистину, не зря GNU GPL (General Public License) в свое время прозвали “вирусной лицензией”: стоит разработчику включить в свой проект код, распространяемый на ее условиях, и под GPL автоматически подпадает все остальное. Для коммерческих проектов, когда производитель должен четко определять принадлежность интеллектуальной собственности, чтобы передать лицензию своему заказчику, такая схема абсолютно неприемлема.
Политика QSSL содержит элементы как одной, так и другой позиции.
Снижение затрат на первоначальном этапе. Для некоммерческого использования QNX Realtime Platform распространяется бесплатно. Это означает, что все его компоненты можно на законных основаниях использовать как в качестве обычной “домашней ОС” или просто из любопытства, так и для предварительного проектирования, пока проект еще не стал коммерческим. Последнее в нынешних условиях ограниченного финансирования новых разработок, когда никто - и совершенно справедливо - не хочет покупать кота в мешке, легко позволяет выйти из порочного круга (чтобы сделать прототип системы, нужен инструментарий, чтобы купить инструментарий, нужно финансирование, а чтобы получить финансовые средства, нужно представить прототип системы). Иными словами, официально приобретать QNX Realtime Platform нужно будет только тогда, когда разработчик примет решение использовать продукт в коммерческих целях и получать от него прибыль.
Штатный аудио/видеопроигрыватель RealPlayer G2
Доступный код. На QNX Realtime Platform распространяется так называемая модель “доступного кода”, которая, в отличие от модели “открытого кода”, подразумевает открытость только части исходных текстов - применительно к QNX Realtime Platform в список открытых компонентов входят прикладное окружение, библиотеки, драйверы устройств и менеджеры ресурсов. Это призвано упростить разработку нового ПО (в первую очередь драйверов), поиск ошибок в существующих программных модулях и взаимодействие со службой технической поддержки QSSL. Исходный текст ядра ОС при этом остается закрытым: за ядро целиком и полностью отвечают разработчики QSSL, а для расширения системы он просто не нужен. Владельцем всех прав в любом случае является QSSL, что позволяет четко разграничить принадлежность интеллектуальной собственности для лицензирования создаваемых целевых систем.
Модульное лицензирование. Масштабируемость ОСРВ QNX/Neutrino дает ей кроме технических очень важное коммерческое преимущество: аналогично ее предшественнице QNX4, QNX/Neutrino можно приобретать по частям, т. е. тратить деньги только на те компоненты, которые действительно необходимы. Для этого весь список файлов QNX/Neutrino разбит на модули по функциональному признаку. Чтобы снабдить систему нужной функциональностью, необходимо приобрести соответствующий перечень модулей - каждый раз покупать полный комплект ОС не обязательно.
С появлением QNX/Neutrino ситуация на рынке встраиваемых систем стала меняться. Многие крупные корпорации, включая IBM, 3Com и Cisco, избрали ее в качестве базы для своих новых семейств встраиваемых систем.
Мировой опыт показал, что три кита, на которых сейчас стоит практически весь рынок ПО - платформные системы, встраиваемые системы и системы реального времени, - зачастую оказываются далеки друг от друга. QNX Realtime Platform стал первым в мире проектом, в котором предпринята попытка воссоединить эти три начала; надо сказать, что необходимость в таком проекте назревала долго и собрать все три компонента воедино удалось далеко не сразу. QNX Realtime Platform - в буквальном смысле квинтэссенция усилий QSSL по созданию встраиваемой платформной ОСРВ, и возникший вокруг этого продукта ажиотаж далеко не случаен.
Планы QSSL поражают своим размахом: к 2003 г. компания QSSL намерена с помощью QNX Realtime Platform взять под свой контроль треть мирового рынка встраиваемых систем. И глядя на то, как с развитием технологий путь от хорошей идеи до ее грамотного воплощения становится все короче и легче, начинаешь жалеть беднягу Пигмалиона: если бы в его времена в небесной канцелярии умели грамотно выбирать программную базу для встраиваемых систем, тогдашние Галатеи вели бы себя куда более предсказуемо.
С автором можно связаться по E-mail: n.gorbunov@swd.ru.