Представлены правила для AI-ассистентов, применяемых при разработке ядра Linux
Саша Левин (Sasha Levin) из компании NVIDIA, занимающийся сопровождением LTS-веток ядра Linux и входящий в консультативный совет организации Linux Foundation, выставил на обсуждение разработчиков набор правил и документацию, которые должны учитываться AI-ассистентами при генерации изменений для ядра Linux. Ссылки на инструкции отмечены в файлах конфигурации, подготовленных для AI-платформ Claude, GitHub Copilot, Cursor, Codeium, Continue, Windsurf и Aider.
Определены следующие ключевые принципы для AI:
- Перед созданием изменений необходимо прочитать документацию и следовать изложенным в ней требованиям.
- Следует выполнять требования по стилю и оформлению кода для ядра.
- Перед отправкой изменения его нужно тщательно протестировать.
- К коду нужно приложить понятное и исчерпывающее сообщение с описанием изменения.
- Изменения не должны нарушать работу компонентов в пространстве пользователя.
- В качестве соавтора изменения должен быть отмечен AI, не ограничиваясь только упоминанием разработчика, использовавшего AI-ассистент.
Для выделения изменений, подготовленных с использованием AI, к коммиту предписывается прикреплять тег "Co-developed-by: $AI_NAME $AI_MODEL $AI_VERSION". Например: "Co-developed-by: Claude claude-3-opus-20240229", "Co-developed-by: GitHub-Copilot GPT-4 v1.0.0" и "Co-developed-by: Cursor gpt-4-turbo-2024-04-09". При этом AI-ассистент не должен добавлять себя в тег "Signed-off-by". Данный тег должен добавляться только человеком для юридически значимого подтверждения права на передачу кода под открытой лицензией.
Документация, которую должен учитывать AI-ассистент:
- Руководство, как стать разработчиком ядра.
- Информация о процессе разработки ядра.
- Руководство по передаче своего кода в ядро.
- Чек-лист проверок перед отправкой кода в ядро.
- Требования к стилю и оформлению кода (использование табуляции для выравнивания, не больше 80 символов в строке, отдельные правила форматирования функций и условных выражений).
- Требования к языкам программирования и стандартам.
- Запрет использования устаревших программных интерфейсов и возможностей.
- Правила отправки патчей для включения в ядро.
- Настройки почтового клиента для отправки патчей.
- Правила приёма патчей.
- Правила лицензирования кода для ядра (лицензия GPL-2.0 c исключениями для системных вызовов, наличие SPDX-идентификаторов лицензии в каждом файле).
- Инструкция по добавлению нового системного вызова.
- Правила для отправки патчей к стабильным веткам ядра.
- Обработка проблем с безопасностью.
- Действия при выявлении регрессий.
- Руководство по взаимодействию с сопровождающими.
- Руководства, специфичные для подсистем.