Разработчики платформы XCP-ng, развиваемой под крылом проекта Xen, опубликовали план по созданию на языке Rust замены различных компонентов программного стека Xen. Непосредственно гипервизор Xen пока перерабатывать не собираются, работа сосредоточена в основном на переделке отдельных компонентов инструментария.
В настоящее время в платформе используются компоненты на языках C, Python, OCaml и Go, некоторые из которых устарели и создают проблемы с сопровождением. Отмечается, что применение Rust не приведёт к общему увеличению числа задействованных языков, так как на Go реализован только один компонент, который планируется заменить.
Язык Rust выбран как сочетающий высокую производительность результирующего кода с возможностями для безопасной работой с памятью, обходящийся без применения сборщика мусора, пригодный для разработки как низкоуровневых, так и высокоуровневых компонентов, предоставляющий дополнительные возможности для сокращения потенциальных ошибок, такие как проверка заимствования переменных (borrow checker). Rust также более распространён, чем ныне применяемый в XAPI язык OCaml, что упростит привлечение в проект новых разработчиков.
На первом этапе планируется разработать замену для нескольких небольших компонентов, чтобы отработать процессы и подготовить базу для замены других компонентов. В частности, в первую очередь на Rust будет переписан инструментарий Linux guest tools, для которого сейчас используется язык Go, и фоновый процесс для сбора метрик, написанный на OCaml.
Необходимость переработки Linux guest tools (xe-guest-utilities) вызвана проблемами с качеством кода и развитием вне проекта Xen Project под контролем Cloud Software Group, что затрудняет формирование пакетов и влияние сообщества на разработку. Новый вариант (xen-guest-agent) инструментария планируют создать полностью с нуля, сделав простым насколько это возможно, и отделив логику агента от библиотек.
Фоновый процесс для сбора метрик (rrdd) решено переработать так как он является компактным и обособленным, что упрощает проведение экспериментов по использованию нового языка при разработке.
В следующем году возможно начнётся работа по разработке на Rust компонента xenopsd-ng, который позволит оптимизировать архитектуру программного стека. Основная идея в том, что бы сосредоточить в одном компоненте работу с низкоуровневым API и предоставление остальным компонентам стека всех высокоуровневых API.
Текущая архитектура стека Xen:
Предлагаемая архитектура стека Xen на базе xenopsd-ng: