|
|
Пол Леру (Paul N. Leroux), технический аналитик компании QNX Software Systems, paull@qnx.com
Ромейн Саха (Romain Saha), менеджер сегмента сетевых систем компании QNX Software Systems, rsaha@qnx.com
Краткий обзор
Разработчики встраиваемых систем проявляют всё больший интерес к операционной системе Linux, что во многом обусловлено её моделью на основе открытого исходного кода. Тем не менее, стандартное ядро Linux не обеспечивает возможности жёсткого реального времени, которые требуются во многих встраиваемых системах, такие как предсказуемое время отклика и микросекундные задержки. Для восполнения функций реального времени, отсутствующих в ОС Linux, было создано несколько продуктов, которые решили эту задачу с переменным успехом. Например, некоторые производители прибегли к двухъядерному подходу, который обеспечивает незащищённую среду для задач реального времени и вынуждает разработчиков писать новые драйверы и системные службы даже при наличии их аналогов в ОС Linux. В данной публикации рассматривается другой подход, который основан на использовании операционной системы реального времени (ОСРВ), разработанной в соответствии со стандартом POSIX специально для встраиваемых приложений. Этот подход позволяет Linux-разработчикам не только применять свои навыки программирования, но и использовать ключевые преимущества модели открытого исходного кода операционной системы Linux. Кроме того, подход даёт возможность работать с различными системными службами, отсутствующими в стандартной ОС Linux и её расширениях реального времени.
Возможности реального времени операционной системы Linux
Операционная система Linux ставит проектировщика встраиваемых систем перед дилеммой. С одной стороны, Linux позволяет ему работать с многочисленными разработчиками, использовать большой объём существующего исходного кода и интерфейсы прикладного программирования (API) стандарта POSIX. В то же время стандартное ядро ОС Linux не обеспечивает такие возможности "жёсткого" реального времени, как гарантированное время отклика и микросекундные задержки, которые требуются во многих встраиваемых устройствах.
Причиной этого является то, что операционная система Linux имеет архитектуру общего назначения. ОС Linux была разработана для обеспечения UNIX-функциональности и значительно усовершенствована для применения в серверных и информационных технологиях. Требования этих технологий резко отличаются от требований встраиваемых систем, а, следовательно, компромиссы, которые реализованы в ядре ОС Linux, часто недопустимы во встраиваемых приложениях.
Рассмотрим в качестве примера механизм планирования процессов. Планировщик операционной системы Linux использует не вытесняющую приоритетную многозадачность, а стратегию "равноправия", которая даёт каждому процессу удовлетворительную возможность выполнения. В результате высокоприоритетные процессы, которые требуют быстрого выполнения, не всегда могут получить немедленный доступ к процессору. В действительности операционная система иногда прерывает высокоприоритетный процесс для того, чтобы предоставить долю процессорного времени низкоприоритетному процессу. Более того, операционная система теряет всю информацию о приоритетах, когда драйвер или другая системная служба, которая обычно выполняется по вызову ядра, работает от имени клиентского потока. Такое поведение вызывает непредсказуемые задержки и не позволяет своевременно выполнять критически важные действия.
Следует отметить, что подобный механизм планирования неправильно считать недостатком операционной системы Linux. Например, он очень эффективно обеспечивает высокую общую системную производительность, которая требуется настольным и серверным приложениям. Тем не менее, возможности "равноправного" планирования не предназначены для таких детерминированных сред, как сетевые маршрутизаторы, медицинские инструменты, промышленные роботы и автомобильные приложения.
Для устранения недостатков, которые не позволяют операционной системе Linux работать в реальном времени, было создано несколько продуктов. Некоторые из них разработаны коммерческими поставщиками, а некоторые являются результатами исследовательских проектов с открытым исходным кодом. Имеются и решения, сочетающие эти два подхода. Тем не менее, ни один из предложенных подходов не стал "стандартным". Более того, некоторые решения даже отступают от стандартных принципов программирования для операционной системы Linux и стандарта POSIX.
Возможности реального времени вне Linux
Некоторые поставщики пытаются обеспечить работу операционной системы Linux в реальном времени за счёт её выполнения в режиме задачи на ядре реального времени (см. рис. 1). Все другие задачи, требующие детерминированного планирования, также работают на этом ядре под управлением механизма вытеснения, однако имеют более высокий приоритет, чем ОС Linux. Таким образом, эти задачи вытесняют операционную систему Linux, когда им необходимо выполниться, и уступают ей процессор после завершения своей работы.
Рис. 1. В двухъядерной модели операционная система Linux работает как низкоприоритетная задача в отдельном ядре реального времени
В этой двухъядерной модели ядро реального времени всегда уделяет первоочередное внимание аппаратным прерываниям. Если прерывание обрабатывается задачей реального времени, то ядро запланирует выполнение этой задачи. В противном случае ядро передаст прерывание на обработку операционной системе Linux. Эти действия прозрачны для приложений, которые работают в среде Linux; разумеется, исключение составляет процессорное время, затрачиваемое на работу ядра реального времени и его задач. Тем не менее, описанный подход имеет несколько недостатков, которые описаны в следующих разделах.
Увеличение трудозатрат на кодирование
Задачи, которые работают в ядре реального времени, не могут полностью использовать существующие службы операционной системы Linux — файловые системы, сети и т. д. В действительности обращение задачи реального времени к любой службе Linux создаёт те же проблемы с вытеснением, которые делают невозможным детерминированное поведение Linux-процессов.
Таким образом, для ядра реального времени необходимо создавать новые драйверы и системные службы, даже если аналогичные службы существуют в операционной системе Linux. Поскольку число таких готовых драйверов невелико, разработчикам программного обеспечения для ОС Linux обычно приходится писать нужные драйверы заново и часто с использованием незнакомого интерфейса прикладного программирования.
Ненадёжная среда исполнения
Операционная система Linux основана на архитектуре с монолитным ядром. Это означает, что приложения работают в пользовательском пространстве с защищённой памятью. Тем не менее, задачи, которые работают в ядре реального времени, не получают преимуществ среды исполнения, надёжно защищенной устройством управления памятью, которую операционная система Linux предоставляет обычным процессам, не работающим в реальном времени. Эти задачи выполняются в незащищённом пространстве ядра. Следовательно, любая задача реального времени, которая содержит типичную ошибку в коде, например, повреждённый C-указатель, способна с лёгкостью вызвать неисправимый сбой ядра. Такая особенность является проблемой, поскольку большинство систем реального времени предъявляет очень высокие требования к надёжности.
Ограниченная переносимость
В двухъядерном подходе задачи реального времени являются не процессами операционной системы Linux, а потоками и обработчиками сигналов, которые написаны для узкого подмножества интерфейсов прикладного программирования (API) стандарта POSIX или, в некоторых случаях, для нестандартных API. Перенос существующего кода и приложений ОС Linux в среду реального времени становится затруднительным.
Эта проблема усугубляется также тем, что в разных реализациях двуядерного подхода используются разные API. Задачи, которые написаны для расширений реального времени одного поставщика, могут оказаться неработоспособными в расширениях реального времени другого поставщика. Вместо того, чтобы использовать широко поддерживаемые API операционной системы Linux, производители встраиваемых систем вынуждены делать выбор между конкурирующими "стандартами".
Недетерминированное поведение существующих приложений и драйверов в Linux
Поскольку процессы в операционной системе Linux работают за пределами ядра реального времени, их поведение остаётся недетерминированным. Планирование этих процессов по-прежнему осуществляется с помощью алгоритма "равноправия", который применяется в ОС Linux.
Ограниченные возможности проектирования
Как было сказано выше, API, поддерживаемые ядром реального времени, обеспечивают лишь часть служб API стандарта POSIX и операционной системы Linux. Таким образом, разработчики получают более ограниченные возможности проектирования, чем при использовании ОС Linux или развитой ОСРВ.
Сочетание преимуществ
Операционная система реального времени QNX® Neutrino® представляет собой значительно более гибкое и надёжное решение проблем, которые мы рассматриваем. Вместо того, чтобы вынуждать разработчиков использовать незащищённые обходные решения, QNX Neutrino обеспечивает проверенную операционную среду реального времени, которая:
-
позволяет разработчикам программного обеспечения для ОС Linux пользоваться существующими API и моделью программирования;
-
компенсирует недостатки расширений реального времени для ОС Linux за счёт более строгой модели среды исполнения, развитых возможностей проектирования и единой среды для приложений реального времени и обычных приложений;
-
основана на таких ключевых возможностях модели ОС Linux с открытым исходным кодом, как простота устранения неполадок и модификация операционной системы. Фактически, микроядерная операционная система реального времени, подобная QNX Neutrino, обеспечивает уникальные преимущества в обеих этих возможностях;
-
предоставляет разнообразные системные службы (например, безопасную декомпозицию, распределённые вычисления, развитую поддержку многоядерных процессоров), которые отсутствуют в решениях на основе операционной системы Linux.
Полная совместимость со стандартом POSIX
Семейство стандартов сообщества IEEE под названием POSIX (Portable Operating System Interface — интерфейс переносимых операционных систем) изначально создано для операционных систем Unix и определяет интерфейс прикладного программирования, который часто позволяет выполнять приложения, разработанные для одной POSIX-совместимой ОС, на другой POSIX-совместимой ОС без каких-либо модификаций. Следует иметь в виду, что стандарт POSIX определяет не архитектуру операционной системы, а интерфейс программирования. По этой причине операционная система реального времени способна поддерживать те же интерфейсы прикладного программирования стандарта POSIX, что и ОС Linux, а также различные особенности Linux без использования её недетермированного ядра.
Операционная система реального времени QNX Neutrino воплощает подход к программированию приложений, независимый от реализации: она обеспечивает POSIX-совместимые API, которые реализованы на микроядерной архитектуре реального времени (см. рис. 2).
Рис. 2. Микроядро ОСРВ QNX Neutrino содержит только самые основные системные службы. Все службы более высокого уровня, в том числе драйверы и стеки протоколов, работают как дополнительные процессы, которые размещены в пользовательском пространстве. В результате, разработчики могут без труда расширять операционную систему специализированными службами, не прибегая к сложному программированию и отладке кода ядра.
Важной особенностью ОСРВ QNX Neutrino является то, что POSIX реализован в ней как основа, а не как некое дополнение. Фундаментальный компонент QNX Neutrino, микроядро, с самого начала разрабатывался для поддержки возможностей реального времени стандарта POSIX, в том числе потоков. Таким образом, операционная система QNX Neutrino имеет глубокую совместимость со стандартом POSIX, а, следовательно, и с операционной системой Linux.
Единая среда
В ОСРВ QNX Neutrino приложения реального времени и обычные приложения выполняются в одной и той же среде. Приложения реального времени могут использовать API, которые полностью реализуют стандарт POSIX и имеют полный доступ к системным службам — графическим интерфейсам, файловым системам, стекам протоколов и т. д. Кроме того, существующие POSIX- и Linux-приложения работают в операционной системе QNX Neutrino детерминированно. Наконец, поскольку приложения реального времени выполняются в одной среде с обычными приложениями, межпроцессное взаимодействие между ними значительно упрощается.
Открытая архитектура для устранения неполадок и модификации операционной системы
Тем не менее, совместимость операционной системы реального времени с ОС Linux является мнимым преимуществом, если ОСРВ не реализует модель на основе открытого исходного кода — то, ради чего большинство разработчиков использует Linux. Открытость исходных текстов программ позволяет разработчикам анализировать архитектуру операционной системы, чтобы лучше интегрировать в неё собственный код, адаптировать компоненты ОС к специфичным прикладным требованиям, а также значительно ускоряет устранение неполадок в программах, созданных разработчиками, и проблем, связанных с неожиданными результатами выполнения кода операционной системы. Говоря кратко, разработчики становятся в некоторой степени независимыми от поставщика операционной системы и могут работать с ОС самостоятельно (что невозможно при использовании модели "чёрный ящик", которая реализована во многих коммерческих операционных системах), хотя и вынуждены заниматься сопровождением собственной операционной системы.
Операционная система реального времени QNX Neutrino обеспечивает эти преимущества двумя способами: во-первых, с помощью расширяемой микроядерной архитектуры, и, во-вторых, предоставляя исходный код драйверов, библиотек, сетевых служб и BSP-пакетов, в том числе подробно документированных комплектов разработки драйверов (DDK) для различных устройств.
Поскольку QNX Neutrino является микроядерной операционной системой, её можно модифицировать. За исключением нескольких основных служб (таких как планирование, таймеры, обработка прерываний), которые находятся в пространстве ядра, большинство системных служб (драйверы, файловые системы, стеки протоколов и т. д.) являются приложениями, расположенными в пользовательском пространстве за пределами ядра. Таким образом, разработка собственных драйверов и специализированных расширений для операционной системы не требует знания ядра и использования специальных отладчиков ядра. Разрабатывать расширения операционной системы так же просто, как и обычные приложения, поскольку расширения операционной системы являются программами, находящимися в пользовательском пространстве. Эти программы можно отлаживать стандартными инструментами для исходного кода, с которыми знаком каждый разработчик программного обеспечения для ОС Linux.
Сокращение повторных трудозатрат
Как обсуждалось ранее, подход с применением двух ядер вынуждает разработчиков писать собственные драйверы, используя незнакомые интерфейсы прикладного программирования. Как и в большинстве операционных сред, разработка этих драйверов требует применения сложных в работе отладочных инструментов для ядра, долгой перекомпиляции ядра и вынуждает обращаться к услугам высокооплачиваемых программистов для работы с ядром.
Операционная система реального времени QNX Neutrino решает эту проблему несколькими способами. Во-первых, QNX Neutrino принадлежит к числу развитых операционных систем с большим количеством пользователей и поддерживает многочисленные драйверы стандартных устройств. Как было сказано, все драйверы в ОС QNX Neutrino работают в пользовательском пространстве, а, следовательно, их можно разрабатывать с помощью стандартных инструментов и методов создания исходного кода. Эта задача дополнительно упрощается благодаря комплектам разработки драйверов компании QNX, в состав которых входит документация, библиотеки, заголовочные файлы и исходный код, на основе которого можно создавать различные драйверы.
Дополнительные службы микроядра
Поскольку QNX Neutrino является микроядерной операционной системой, предназначенной специально для встраиваемых систем, в её состав входят службы, которые отсутствуют как в стандартной ОС Linux, так и в расширениях реального времени для Linux. Эти службы описаны в следующих разделах.
Развитая поддержка многопроцессорной обработки для многоядерных процессоров
В операционной системе реального времени QNX Neutrino с самого начала были заложены возможности многопроцессорной обработки. В 1997 году компания QNX вывела на рынок технологию симметричной многопроцессорности (symmetric multiprocessing — SMP) и занималась её развитием на протяжении последнего десятилетия. Недавно компания QNX представила инновационную технологию исключительной многопроцессорности (bound multiprocessing — BMP). Исключительная многопроцессорность позволяет выполнять существующие приложения на многоядерных процессорах без изменений и в то же время даёт возможность приложениям, допускающим распараллеливание, выполняться в полноценном SMP-режиме, тем самым обеспечивая максимальную масштабируемость. Исключительная многопроцессорность позволяет привязать существующее приложение и все его потоки к одному ядру, что обеспечивает корректность функционирования приложения, даже если в нём применяются методы синхронизации потоков, неподходящие для работы в многоядерной среде.
Интегрированная среда разработки QNX Momentics® IDE, основанная на стандартах Eclipse, также включает в себя возможности многопроцессорной обработки и обеспечивает инструменты визуализации для анализа, отладки и оптимизации многоядерных систем (см. рис. 3). В отличие от традиционных инструментов, инструменты среды QNX Momentics IDE отображают действия, которые выполняются во всей многоядерной системе, что позволяет разработчикам выявлять потенциальные возможности для параллельной обработки, снижать количество необязательных перемещений потоков между ядрами, исключать дорогостоящее межпроцессное взаимодействие между ядрами и локализовывать сложные проблемы конкуренции за ресурсы, часто возникающие в многоядерных системах. Представление всей системы, которое обеспечивается инструментами среды QNX Momentics IDE, в сочетании с развитыми возможностями многопроцессорной обработки операционной системы QNX Neutrino способно значительно сократить трудозатраты, требующиеся для перехода от одноядерных сред к многоядерным.
Рис. 3. Cистемный профайлер комплекта разработчика QNX Momentics позволяет разработчикам визуализировать сложное поведение многоядерных систем и концентрировать усилия на тех областях, которые обеспечивают максимальный параллелизм и производительность
Безопасность и готовность систем за счёт гарантированного выделения процессорного времени
Многие современные встраиваемые системы представляют собой сетевые устройства, функциональность которых расширяется с помощью ненадёжных дополнительных приложений и информационных компонентов. Безопасность и готовность системы могут быть нарушены, если архитектура системы не включает в себя надлежащие меры по их обеспечению. Например, вредоносные программы способны вывести из строя критически важные функции системы, лишив их процессорных ресурсов.
Для решения данной проблемы операционная система QNX Neutrino поддерживает технологию адаптивной декомпозиции (Adaptive Partitioning), которая позволяет объединять приложения в безопасные разделы и выделять каждому разделу гарантированный бюджет памяти и процессорного времени. Благодаря этому подходу, память и процессор доступны ответственным процессам всегда, даже в условиях высокой вычислительной загрузки и атаки на отказ в обслуживании.
Кроме того, технология адаптивной декомпозиции компании QNX способна динамически перераспределять процессорное время простаивающих разделов между разделами, нуждающимися в дополнительных ресурсах процессора, то есть бюджеты разделов строго применяются только в условиях полной загрузки процессора. Таким образом, система сохраняет работоспособность при максимальной нагрузке, обеспечивает 100% использование процессора и при этом является безопасной за счёт гарантированного выделения ресурсов. Чтобы оценить преимущества адаптивной декомпозиции, достаточно сравнить её с традиционными методами планирования на основе разделов, в которых неиспользуемое процессорное время теряется, что вынуждает системных архитекторов выбирать более дорогие процессоры.
Рис. 4. Благодаря технологии адаптивной декомпозиции, каждая программная подсистема получает гарантированный минимум процессорного времени даже при полной загрузке процессора
Модель среды исполнения с повышенной надёжностью
Поскольку операционная система Linux является монолитной, большинство её драйверов, файловых систем и стеков протоколов привязано к ядру. По этой причине одна ошибка в программировании какого-либо из перечисленных компонентов способна вызвать неисправимый сбой ядра. Компоненты операционной системы QNX Neutrino работают в отдельных адресных пространствах с защитой памяти, благодаря чему им значительно сложнее повредить ядро или друг друга. Таким образом, ОС QNX Neutrino обеспечивает ответственным приложениям и приложениям реального времени среду исполнения, которая по своему устройству надёжнее, чем операционная система Linux и значительно безопаснее, чем незащищённые ядра реального времени, на которых основан двухъядерный подход.
Динамическое обновление системных служб
В микроядерной операционной системе можно динамически обновить практически любой компонент, будь то драйвер устройства, стек протоколов или приложение, не прерывая при этом работу других компонентов. Это позволяет с гораздо большей лёгкостью обеспечить коэффициент готовности системы, равный или превышающий 99,999%. На практике системы, основанные на технологиях компании QNX, нередко работают в течение 5-10 лет без перерыва, хотя в них регулярно устанавливаются новые приложения и системные компоненты.
Прозрачная распределённая обработка
Операционная система QNX Neutrino предоставляет системную службу под названием "прозрачная распределённая обработка" (transparent distributed processing — TDP), которая обеспечивает приложениям прозрачный доступ к драйверам устройств, сетевым стекам и другим системным службам, работающим на других узлах сети. При наличии соответствующих прав доступа любой процесс может воспользоваться почти любым удалённым ресурсом так, как если бы этот ресурс работал на локальном процессоре.
Прозрачность расположения системных служб упрощает проектирование отказоустойчивых систем с выравниванием загрузки. Предположим, к примеру, что компьютер предоставляет вычислительные службы клиентским приложениям через сеть. В случае отказа этого компьютера и запуска резервного компьютера клиентские приложения не требуют ни осведомления о том, что обработка их запросов выполняется новым компьютером, ни специального программирования для установления соединения с этим компьютером. Все сообщения, которые посылают клиентские приложения, автоматически направляются новому адресату.
Механизм распределённой обработки компании QNX также сокращает затраты на оборудование. Например, если одно устройство автомобильной информационно-развлекательной системы оснащено Bluetooth-соединением, то другим устройствам не требуется иметь собственный Bluetooth-стек и трансиверный чип, поскольку они могут воспользоваться существующим соединением.
Рис. 5. Возможность прозрачной распределённой обработки объединяет сеть отдельных систем в один логический компьютер. Это позволяет приложению, работающему на одном узле, получать доступ к ресурсам (сетевым стекам, файловым системам, USB-портам и т. д.), расположенным на другом узле, без специального программирования
Отказоустойчивое сетевое взаимодействие
Механизм распределённой обработки операционной системы QNX Neutrino, который обеспечивает абстрагирование от сети, делает возможным прозрачное взаимодействие приложений через резервные сетевые линии: при отказе одной линии операционная система автоматически перенаправляет трафик на другие. Кроме того, можно выравнивать загрузку всех сетевых линий, что повышает пропускную способность сети. Как и в случае с распределённой обработкой, приложения получают преимущества отказоустойчивого сетевого взаимодействия без написания специального кода.
Меньшее потребление памяти
Поскольку микроядерная архитектура ОСРВ QNX Neutrino обладает масштабируемостью на уровне системных компонентов, QNX Neutrino обеспечивает значительно более компактную среду исполнения, чем ОС Linux. Это является важнейшим преимуществом для таких крупносерийных устройств, как мультимедийные и автомобильные телематические системы, в которых удешевление памяти на 2 доллара приносит миллионы долларов дополнительной прибыли. Собственная оконная система ОС QNX Neutrino, QNX Photon® microGUI®, также использует микроядерную архитектуру, что позволяет проектировщикам без труда "отключать" службы графического пользовательского интерфейса, которые не требуются в устройствах с ограниченным объёмом памяти.
Согласованное проверенное ядро
В отличие от монолитного ядра операционной системы Linux, состав которого зависит от конкретной встраиваемой системы, стандартное микроядро ОС QNX Neutrino можно использовать в самом широком спектре продуктов. Фактически для каждого семейства процессоров, которое поддерживается операционной системой QNX Neutrino, существует всего одно бинарное микроядро. Работая с микроядром, разработчики могут быть уверены в том, что оно прошло испытания в лабораториях компании QNX Software Systems и эксплуатационные испытания у заказчиков.
Проблемы лицензирования
Условия лицензирования, которые регламентируют применение и распространение операционной системы, оказывают значительное влияние на любую компанию, занимающуюся разработкой встраиваемых устройств. Например, применение ОС Linux определяется лицензией General Public License (GPL) версии 2, согласно которой любые модификации исходного кода этой операционной системы должны быть открытыми.
Лицензия GPL требует, чтобы производные работы распространялись бесплатно на тех же условиях, что и исходная работа. Другими словами, если разработчик создаёт собственный код, который модифицирует исходную работу или основан на ней, весь исходный код производной работы должен быть открыт. Это означает, что преимущества разработок автора могут быть использованы его конкурентами.
На момент написания этой статьи третья версия лицензии GPL находится на рассмотрении фонда Free Software Foundation. Она значительно строже второй версии и, хотя её влияние ещё не выяснено полностью, эта лицензия вынудит большее число компаний открывать исходные коды своих работ при использовании программ, попадающих под её действие.
Компания QNX Software Systems прикладывает значительные усилия для защиты своих клиентов от этих проблем. Фактически QNX обеспечивает многочисленные преимущества открытого исходного кода без рисков, связанных с использованием программ, которые защищены строгими лицензиями.
Чистая интеллектуальная собственность
Защита интеллектуальной собственности — необходимость, которая хорошо осознана в сфере современных встраиваемых систем. Тем не менее, риски, связанные с нарушением прав на интеллектуальную собственность других компаний, часто недооцениваются.
Программное обеспечение с открытым исходным кодом не защищает пользователей от нарушения патентных прав. Например, операционная система Linux создаётся разработчиками, которые могут как иметь, так и не иметь способов и намерения убедиться в том, что создаваемый ими код не нарушает существующие или предъявленные к регистрации патенты. Поскольку лицензии на продукты с открытым исходным кодом не предусматривают компенсаций, компании, включающие открытый код в свои системы, становятся ответственными за возможные патентные нарушения.
Задача определения источника и степени чистоты открытого кода возлагается на компанию, которая использует этот код. Таким образом, применение открытого кода не только вносит в проектирование элемент риска, но и создаёт прямые затраты. Риск нарушения патентных прав находится в прямой зависимости от объёма кода, а затраты обусловлены необходимостью выполнения юридических и технических экспертиз для проверки чистоты кода.
Риски, которые связаны с интеллектуальной собственностью, также могут возникать при совместном использовании программ с открытым кодом во встраиваемом устройстве. Возможно, что две работы по отдельности не нарушают какие-либо патенты, однако комбинирование этих работ приводит к нарушению прав на интеллектуальную собственность.
Компания QNX Software Systems постоянно вкладывает средства в обеспечение чистоты своей интеллектуальной собственности, избавляя своих клиентов от необходимости тратить время и деньги на разрешение этих проблем. Ни в одном компоненте среды исполнения компании QNX не используется код, который защищён лицензией General Public License проекта GNU. Кроме того, компания QNX берёт на себя ответственность за весь код ядра своих операционных систем независимо от того, был он написан специалистами компании или заимствован из открытых источников.
Совместное применение QNX Neutrino и Linux
Несмотря на то, что операционная система QNX Neutrino является превосходной платформой для приложений реального времени, нет необходимости делать взаимоисключающий выбор между QNX Neutrino и ОС Linux. Разработчики, которые используют API стандарта POSIX, могут создавать программы для обеих операционных систем, используя каждую из них там, где это наиболее эффективно. Чтобы перенести Linux-приложение или приложение с открытым кодом в ОС QNX Neutrino, как правило, необходимо перекомпилировать исходный код и связать его с библиотеками QNX Neutrino.
Тем не менее, операционная система QNX Neutrino, в отличие от Linux, с самого начала создавалась для работы в реальном времени, а, следовательно, избавляет разработчиков от затрат и сложностей, которые связаны с расширениями реального времени. Разработчики имеют доступ к программам с открытым кодом в стандарте POSIX и в то же время пользуются преимуществами согласованной и проверенной среды реального времени.
|
|