Введение 4
1. Постановка задачи 6
2. Обзор существующих решений 7
2.1. Интерфейс прикладного программирования 7
2.2. Эмуляция Linux в ОС FreeBSD 8
2.3. Слой совместимости на основе виртуализации 8
2.4. Windows Subsystem for Linux 9
2.5. Windows Subsystem for Linux 2 10
2.6. Семейство микроядер L4 10
2.7. Библиотека Linux Kernel Library в ОС Embox 11
2.8. Проект SGX-LKL 11
2.9. Анализ и сравнение различных решений 12
3. Архитектура 14
3.1. Библиотека LKL как паравиртуализированное ядро . . . 14
3.2. Обработка системных вызовов Linux 15
3.3. Соответствие потока ОС задаче Linux 16
3.4. Обзор итоговой архитектуры 17
4. Особенности реализации 19
4.1. Модуль подсистемы Linux в ОС Embox 19
4.2. Запуск сторонних исполняемых файлов 19
4.3. Вывод текста из LKL в терминал ОС Embox 20
5. Тестирование и апробация 22
Заключение 27
Список литературы 28
На сегодняшний день в мире существует большое количество операционных систем (сокр. ОС). Различные системы используются в разных областях и устанавливаются на все типы устройств: от простых маршрутизаторов до высоконагруженных вычислительных машин. Разработка и поддержка ОС — трудоёмкий процесс. Разработчики должны обеспечить систему всеми необходимыми служебными инструментами, драйверами и прикладными программами. Для этого приходится заниматься либо созданием программного обеспечения с нуля, либо адаптацией программного обеспечения из других ОС.
Среди множества ОС можно выделить широкораспространённое семейство GNU/Linux1, на сегодняшний день включающее в себя более 200 систем [5]. Проект ядра Linux, состоящий более чем из 27 миллионов строк исходного кода и насчитывающий более 20 тысяч разработчиков (данные на 2020 год) [10], является одним из крупнейших программных проектов в мире. Создаваемое для систем GNU/Linux программное обеспечение проверено временем и сообществом пользователей, поэтому некоторая его часть могла бы использоваться в других ОС, даже узкоспециализированных.
Таким образом, ускорить разработку и упростить использование разных ОС могла бы возможность запуска в их среде исполняемых файлов и библиотек, скомпилированных для систем GNU/Linux — слой двоичной совместимости. Слой двоичной совместимости с GNU/Linux в разном виде реализован в некоторых проектах, таких как система FreeBSD [17][9], семейство ОС Windows [4][2], ряд микроядер L4 [16]. Каждое решение спроектировано и реализовано для конкретной системы, поэтому их сложно или практически невозможно адаптировать для других ОС. Однако, эти решения можно проанализировать, чтобы выделить наиболее удачные технические особенности.
Свободная ОС реального времени для встроенных систем Embox [24], история разработки которой берёт начало на математико-механическом факультете Санкт-Петербургского государственного университета, является одним из тех проектов, для которых быстрое привнесение простого слоя двоичной совместимости с GNU/Linux могло бы облегчить разработку и удобство использования системы. Возникает идея реализовать слой двоичной совместимости с GNU/Linux в виде такой подсистемы для Embox, архитектура которой будет относительно простой и не будет зависеть от особенностей конкретной ОС. Такая архитектура сможет быть использована в реализациях подсистемы для разных ОС, а разработанная для ОС Embox подсистема будет служить основой для прочих реализаций.
В рамках данной работы были достигнуты следующие результаты.
• Проведён анализ существующих в разных ОС реализаций слоя двоичной совместимости с GNU/Linux. Выделены два подхода: эмуляция и паравиртуализация. Сделан выбор в пользу метода паравиртуализации ядра Linux.
• Разработана архитектура подсистемы двоичной совместимости с GNU/Linux, которая может быть реализована в ряде разных ОС. Это достигается за счёт использования библиотеки LKL в качестве паравиртуализированного ядра.
• На основе разработанной архитектуры реализована и настроена подсистема для ОС Embox.
• Проведена апробация созданной подсистемы. В Embox запущены демонстрационные приложения linux_cat и linux_ls. Продемонстрирована работа с файловой системой procfs.
Логичным продолжением данной работы будет являться исследование возможности поддержки слоем совместимости разделяемых библиотек и запуска двоичных файлов, скомпонованных динамически. В частности, поддержка библиотеки GLIBC (как разделяемой) сильно увеличит область применимости предлагаемого слоя двоичной совместимости.
[1] A C library for embedded Linux [Электронный ресурс].— URL: https://uclibc.org/about.html (дата обращения: 16.05.2022).
[2] Craig Loewen. Announcing WSL 2 [Электронный ресурс]: статья.— URL: https://devblogs.microsoft.com/commandline/ announcing-wsl-2/ (дата обращения: 16.05.2022).
[3] Craig Loewen. A Deep Dive Into How WSL Allows
Windows to Access Linux Files [Электронный ресурс]: статья.— URL: https://devblogs.microsoft.com/commandline/ a-deep-dive-into-how-wsl/ (дата обращения: 16.05.2022).
[4] Deepu Thomas. Windows Subsystem for Linux Overview [Электронный ресурс]: статья.— URL: https://docs.microsoft.com/en-gb/ archive/blogs/wsl/windows-subsystem-for-linux-overview (дата обращения: 16.05.2022).
[5] DistroWatch.com [Электронный ресурс]: база дистрибутивов GNU/Linux. URL: https://distrowatch.com/search.php? ostype=Linux&category=All&status=Active#simple (дата обращения: 16.05.2022).
[6] FAQ’s about Windows Subsystem for Linux [Электронный ресурс]: справочное руководство.— URL: https://docs.microsoft.com/ en-us/windows/wsl/faq (дата обращения: 16.05.2022).
[7] Frequently Asked Questions about the GNU C Library
[Электронный ресурс]: справочное руководство.— URL: https://sourceware.org/glibc/wiki/FAQ#Even_statically_ linked_programs_need_some_shared_libraries_which_is_not_ acceptable_for_me. What_can_I_do.3F (дата обращения:
16.05.2022).
[8] L4Re - Overview [Электронный ресурс]. — URL: https://l4re.org/ overview.html (дата обращения: 16.05.2022).
[9] Linux® emulation in FreeBSD [Электронный ресурс]: справочное руководство. — URL: https://docs.freebsd.org/en/articles/ linux-emulation/ (дата обращения: 16.05.2022).
[10] Michael Larabel. The Linux Kernel Enters 2020 At 27.8 Million Lines In Git But With Less Developers For 2019 [Электронный ресурс]: статья.— URL: https://www.phoronix.com/scan.php?page=news_ item&px=Linux-Git-Stats-EOY2019 (дата обращения: 16.05.2022).
[11] POSIX (The GNU C Library) [Электронный ресурс]: справочное руководство. — URL: https://www.gnu.org/software/libc/manual/ html_node/POSIX.html (дата обращения: 16.05.2022).
[12] Purdila O., Grijincu L.A., Tapus N. LKL: The Linux kernel library.— 2010.
[13] Raghu Bharadwaj. Mastering Linux Kernel Development.— Birmingham : Packt Publishing, 2017. — ISBN: 9781785883057.
[14] A Robust and Flexible Operating System Compatibility Architecture / T. Saeki, Y. Nishiwaki, T. Shinagawa, S. Honiden. — 2020.
[15] SGX-LKL: Securing the Host OS Interface for Trusted Execution / C. Priebe, D. Muthukumaran, J. Lind и др.— 2019....27