Организация Linux Foundation анонсировала новый совместный проект Zephyr, в рамках которого ведётся разработка новой компактной Real-Time операционной системы (RTOS), предназначенной для оснащения устройств, соответствующих концепции «Интернет вещей» (IoT, Internet of Things). Наработки проекта поставляются под лицензией Apache 2.0. Участниками проекта выступили такие компании, как Intel, NXP Semiconductors/Freescale, Synopsys и UbiquiOS.
В настоящее время для загрузки доступны первый выпуск ядра Zephyr Kernel 1.0 и набор Zephyr SDK, включающий инструменты и кросс-компиляторы для сборки ядра для различных аппаратных платформ. Система адаптирована для установки на платы на базе архитектуры x86 (Arduino 101, Quark D2000 CRB, Galileo Gen1/Gen2, Minnowboard Max), ARMv7 (Arduino Due, Freescale FRDM-K64F) и ARC (Arduino 101), а также для тестирования в эмуляторе на базе QEMU. В состав SDK входят: GCC, binutils, gdb, libgcc, newlib, Python 2.7, QEMU, GNU Make и OpenOCD (Open On-Chip Debugger).
Ядро рассчитано на потребление минимальных ресурсов (от 8 до 512 Кб ОЗУ в зависимости от компоновки), что позволяет использовать его на различных портативных системах, от простых встраиваемых датчиков и чипов для одежды, до умных часов и беспроводных шлюзов для IoT-устройств. Из средств сетевого и беспроводного взаимодействия ядром поддерживается Bluetooth 4, IPv4, IPv6, IEEE 802.15.4, Bluetooth Low Energy (BLE), 6lowPAN (IPv6 over Low power Wireless Personal Area Networks), CoAP (Constrained Application Protocol), DTLS (Datagram Transport Layer Security). Доступны драйверы ввода/вывода для ADC, GPIO, I2C и SPI.
Основные особенности ядра Zephyr:
- Работа в едином адресном пространстве (SASOS, Single Address Space Operating System) — для всех процессов предоставляется только одно глобальное совместно используемое виртуальное адресное пространство. Специфичный для приложений код комбинируется с адаптированным под конкретное применение ядром и образует монолитный исполняемый файл для загрузки и запуска на определённом оборудовании. Код приложений и ядра выполняются в одном общем адресном пространстве.
- Широкие возможности по настройке. В системный образ могут включаться только те возможности ядра, которые требуются для выполнения приложения;
- Все системные ресурсы определяются на этапе компиляции, что сокращает размер кода и увеличивает производительность;
- Минимальные проверки ошибок во время выполнения, что также сокращает размер кода и увеличивает производительность. В форме подключаемой надстройки для отладки предлагается специальная отладочная инфраструктура, позволяющая выявлять ошибки во время разработки приложения, создавая специальные тестовые образы;
- Обширный набор привычных сервисов для разработки:
- Многопоточность на основе приоритетов с вытесняющей и совместной моделью передачи управления;
- Подключение обработчиков прерываний, регистрируемых как на этапе компиляции, так и во время выполнения;
- Средства синхронизации данных между потоками — двоичные семафоры, семафоры-счетчики и мьютексы;
- Средства передачи данных между потоками — простые очереди сообщений, расширенные очереди сообщений и байтовые потоки;
- Сервисы для распределения памяти — динамическое выделение памяти и очистка для блоков памяти фиксированного и динамического размера;
- Механизмы управления питанием: режим tickless (вместо фиксированного вызова по таймеру, процессор просыпается только при наличии событий) и расширенная инфраструктура управления простоем процессора (idle).
- Разработка с оглядкой на безопасность. Все стадии разработки проходят обязательные этапы подтверждения безопасности кода: fuzzing-тестирование, статический анализ, испытания на проникновение, рецензирование кода, анализ внедрения бэкдоров и моделирвоание угроз. Поставка в виде статически собранного исполняемого файла ограничивает вектор атак только скомпилированным кодом, без возможности загрузить свои модули.