Антон Бондарев, генеральный директор компании Embox, один из основателей одноименного проекта с открытым кодом по созданию ОСРВ для встраиваемых систем.
После окончания СПбГЭТУ «ЛЭТИ» занимался встраиваемыми системами и системным ПО в медицине, измерительной технике и телекоммуникационном оборудовании. Увлечению системным программированием способствовала тесная связь компании и кафедры системного программирования СПбГУ. Как и любой программист, мечтал написать свою операционную систему, что в итоге и было реализовано в проекте Embox.
В докладе рассматриваются проблемы создания полноценной операционной платформы, включающей кроме ядра операционной системы необходимые средства разработки, утилиты и библиотеки. Возникающие сложности и методы их решения демонстрируются на примере открытой ОСРВ Embox.
Когда речь идёт об операционной системе, под ней чаще всего подразумевается операционная платформа, то есть набор пользовательских приложений, которые работают на каком-то ядре операционной системы. Обычным пользователям часто даже неизвестно, что, к примеру, в их Andoid есть Linux kernel и java-машина, но они точно знают номер ревизии самого Android. И хотя разработчики знают о системах гораздо больше, чем пользователи, для прикладного программиста важно не столько ядро операционной системы, сколько программный интерфейс, предоставляемый ему, то есть набор библиотек и утилит, позволяющих ему сосредоточиться на решении своих задач.
При разработке систем реального времени от программиста требуются ещё и системные знания, то есть знания об архитектуре и организации ядра операционной системы, принципов взаимодействия различных частей и так далее. Ведь для того, чтобы добиться предсказуемости реакции системы, необходимо контролировать все её части. Но даже для них крайне важным является наличие уже готовых частей, которые он может использовать для решения поставленной задачи.
Наибольшей кодовой базой обладает экосистема Linux, из-за чего постоянно появляются проекты с использованием Linux для систем реального времени даже в такой специфической области, как бортовые системы. Из этого можно сделать вывод, что для возникновения полезной и востребованной на рынке операционной системы недостаточно просто создать либо адаптировать ядро, необходимо также позаботиться обо всей экосистеме, которая представляет операционную платформу.
Embox — это открытый проект по созданию конфигурируемой операционной системы для встроенных систем, представляющий из себя именно операционную платформу, то есть, помимо ядра он содержит и другие компоненты, необходимые при разработке конечной системы.
Даже на начальном этапе развития проекта существовало минимальное окружение, достаточное для выполнения прикладных задач. Поскольку на том этапе основным
применением было тестирование аппаратуры, окружение представляло из себя только командный интерпретатор с ограниченным набором команд и несколько функций из стандартной библиотеки, причём сигнатура функций зачастую была отличной от стандартной. Драйверы разрабатывались без каких-либо ограничений и не имели согласованного программного интерфейса.
C развитием проекта потребовалось решать другие задачи, требующие существенно большего функционала. Прежде всего, потребовалось внедрить стандартную библиотеку, что позволило внедрять приложения и библиотеки из богатой в этом отношении экосистемы Linux. Также пришлось задать модель драйверов, которая является сильно упрощенной версией модели Linux drivers.
Стандартная библиотека подразумевает наличие интерфейса для работы с такими подсистемами как файловая и сетевая, без которых сложно представить работу вычислительной системы в принципе. Хотя эти подсистемы могут показаться довольно простыми, при реализации они оказываются достаточно сложными, поэтому изначальная файловая подсистема, рассчитанная на простейшие случаи, сначала превратилась в относительную развитую подсистему на основе VFS, а затем ещё больше усовершенствовалась и допустила использование FUSE (Filesystem in User Space), последнее позволило использовать существующие драйвера fuse для Linux.
С развитием проекта произошли существенные изменения в подходе внедрения кода сторонних проектов в Embox. Если на начальном этапе происходило копирование файлов с исходным кодом в структуру проекта, сейчас у нас разработан набор утилит, позволяющий включать и скачивать внешний проект целиком, конфигурировать его и собирать штатными средствами. Причины, которые побудили разработать подобную систему, заключаются не только в упрощении переноса проекта, но и в стремлении избежать ошибок при ручном копировании и создании дескрипторов для сборки. Также такая система позволяет легко переходить на новые версии сторонних проектов.
В результате применения подобного подхода Embox позволяет вести разработку на нескольких популярных языках программирования (C/C++, python, java, ruby, lua, ...) привычными средствами разработки. В проект перенесены многие популярные пользовательские утилиты и библиотеки включая (Qt, STL, Boost, ZeroMQ, ...). Embox имеет поддержку многих аппаратных платформ, а добавление новых драйверов в большинстве случаев сводится либо к заимствованию из открытого проекта (Minix 3, Linux kernel, ...), либо к адаптации BSP, предоставляемому производителем. Кроме того, Embox содержит достаточно богатый набор пользовательских приложений, адаптированных для применения во встроенных системах.
Уважаемые коллеги! Для прохода в здание РАН просим принести документ, удостоверяющий личность.