В ядре появится фреймворк, следящий за каждым параметром системных вызовов.
В ядре Linux может появиться новый механизм для формального описания API, с которыми работают пользовательские приложения. Разработчик Sasha Levin представил первую версию инициативы и опубликовал патчи с пометкой "request for comments", то есть пока что это обсуждаемое предложение, а не финальная реализация.
Суть идеи в том, чтобы создать полноценный каркас для описания всех публичных интерфейсов ядра — таких как системные вызовы и IOCTL-интерфейсы — в машиночитаемом виде. Сейчас такие описания либо отсутствуют, либо разрознены, из-за чего при обновлениях ядра случаются случайные поломки в пользовательских программах. Новый фреймворк должен решить эту проблему и повысить стабильность взаимодействия между ядром и пространством пользователя.
Предлагаемый подход включает три ключевых элемента. Во-первых, это специальные макросы, которые позволяют описывать параметры системных вызовов прямо в коде ядра. Во-вторых, это инструменты для автоматического извлечения этих описаний и преобразования их в такие форматы, как JSON или текст. И наконец, это механизм для проверки соответствия во время выполнения, доступный через интерфейс debugfs. Такое внедрение спецификаций прямо в исходный код позволит не только лучше документировать API, но и оперативно выявлять потенциальные несовместимости при изменениях в ядре.
Первый прототип охватывает описания таких системных вызовов, как epoll, exec и mlock, а также сложных IOCTL-интерфейсов, например binder и fwctl. В спецификациях фиксируются типы аргументов, правила валидации, возвращаемые значения и возможные ошибки — всё это пригодится и разработчикам, и автоматическим тестам. Инициатива особенно актуальна в контексте продолжающейся интеграции Rust в ядро Linux, где новые абстракции требуют четкого описания интерфейсов.
Кроме того, Levin представил утилиту под названием kapi, с помощью которой можно извлекать и анализировать эти описания из исходников, скомпилированного ядра или даже из запущенной системы. Инструмент поддерживает несколько форматов вывода и может использоваться как для генерации документации, так и для проверки совместимости между версиями ядра. Подобные решения особенно важны с точки зрения безопасности API-интерфейсов , поскольку четкая спецификация помогает избежать ошибок в реализации и использовании системных вызовов.
Лечим цифровую неграмотность без побочных эффектов