Стабильные выпуски и обновления ядра

Стабильные выпуски ядра Linux начали выходить в 2005 г., когда стало ясно, что существующая модель разработки ядра (новый выпуск каждые 2–3 месяца) не отвечает потребностям большинства пользователей. Пользователи хотели, чтобы исправления ошибок вносились в течение этих двух-трех месяцев, а дистрибутивам Linux было сложно поддерживать актуальность ядер без отзывов от сообщества. В целом попытки поддерживать безопасность отдельных ядер и устранять в них ошибки были сложным и запутанным процессом, в котором участвовало множество разных людей.

Стабильные выпуски ядра основаны непосредственно на выпусках Линуса Торвальдса и выпускаются примерно каждую неделю в зависимости от различных внешних факторов (время года, доступные исправления, загруженность сопровождающего и т. д.). Нумерация стабильных выпусков начинается с номера выпуска ядра, к которому в конце добавляется дополнительное число. Например, Линус Торвальдс выпускает ядро 4.4, а затем на его основе выходят стабильные версии 4.4.1, 4.4.2, 4.4.3 и т. д. При упоминании стабильного дерева выпусков ядра эта последовательность обычно сокращается до 4.4.y. Каждое стабильное дерево релизов ядра поддерживается одним разработчиком, который выбирает необходимые исправления для релиза и управляет процессом проверки и выпуска.

Стабильные ядра поддерживаются в течение текущего цикла разработки. После того как Линус выпускает новое ядро, поддержка предыдущей стабильной версии прекращается и пользователи должны перейти на новую версию.

Долгосрочные стабильные ядра

После года использования нового процесса стабильного выпуска было установлено, что многие пользователи Linux хотят, чтобы ядро поддерживалось дольше, чем несколько месяцев. В ответ на это был создан выпуск ядра с долгосрочной поддержкой (LTS), и первое ядро LTS (2.6.16) было выпущено в 2006 году. С тех пор новое ядро LTS выбирается раз в год, а сообщество разработчиков поддерживает его как минимум два года.

На момент написания этой статьи LTS-ядрами являются выпуски 4.4.y, 4.9.y, 4.14.y, 4.19.y, 5.4.y и 5.10.y. Новое ядро выпускается каждую неделю. Для некоторых пользователей и дистрибутивов разработчики поддерживают несколько дополнительных старых ядер с более медленным циклом выпуска. Информацию обо всех стабильных ядрах, ответственных за них лицах и сроках поддержки можно найти на странице kernel.org releases.

В среднем в выпуски ядра LTS принимается 6–8 исправлений в день, а в обычные стабильные выпуски – 10–15. Количество исправлений в каждом выпуске может меняться в зависимости от времени выпуска соответствующей версии ядра и других внешних факторов. Чем старше ядро LTS, тем меньше к нему применимо исправлений, поскольку многие недавние исправления ошибок не относятся к более старым ядрам. Однако чем старше ядро, тем сложнее перенести изменения, которые необходимо применить, из-за изменений в кодовой базе. Таким образом, хотя количество применяемых исправлений может быть меньше, усилия, необходимые для поддержки ядра LTS, больше, чем для поддержки обычного стабильного ядра.

Правила применения исправлений к стабильному ядру

Правила, определяющие, что можно добавлять в стабильный выпуск ядра, практически не изменились с момента его появления и кратко изложены ниже.

  • Должен быть очевидно правильным и протестированным.
  • Не более 100 строк.
  • Исправить можно только одну ошибку.
  • Исправить проблему, о которой сообщили пользователи.
  • Можно добавить идентификатор нового устройства или исправить ошибку в аппаратном обеспечении, но не добавлять новые функции.
  • Уже должен быть объединен с деревом Линуса Торвальдса.

Последнее правило, "Должен быть уже объединен с деревом Линуса Торвальдса", предотвращает потерю исправлений сообществом ядра. Сообщество не хочет, чтобы исправления попадали в стабильные выпуски ядра, если их нет в дереве Линуса Торвальдса. Это нужно для того, чтобы при обновлении не возникало регрессий. Это позволяет избежать многих проблем, с которыми сталкиваются проекты, поддерживающие стабильную и разрабатываемую ветви.

Обновления ядра

Сообщество разработчиков ядра Linux пообещало пользовательской базе, что ни одно обновление не нарушит работу того, что работало в предыдущей версии. Это обещание актуально и сегодня. Регрессии случаются, но такие ошибки имеют наивысший приоритет и быстро исправляются. В противном случае изменение, вызвавшее регрессию, быстро удаляется из дерева ядра Linux.

Это относится как к небольшим обновлениям стабильной версии ядра, так и к крупным, которые выходят каждые три месяца. Однако сообщество разработчиков ядра может гарантировать это только для кода, который был добавлен в дерево ядра Linux. Любой код, который был добавлен в ядро устройства и не входит в выпуски kernel.org, является неизвестным. Взаимодействие с ним невозможно спланировать или даже предусмотреть.

Устройства на базе Linux с большим количеством исправлений могут испытывать серьезные проблемы при обновлении до более новых ядер из-за большого количества изменений между выпусками (10–14 тысяч изменений на выпуск). Наборы исправлений для SoC особенно известны проблемами с обновлением до более новых ядер из-за их большого размера и значительной модификации кода ядра, относящегося к архитектуре, а иногда и основного кода. В результате большинство поставщиков однокристальных систем начинают стандартизировать использование выпусков LTS для своих устройств, что позволяет этим устройствам получать обновления ошибок и обновления системы безопасности непосредственно от сообщества ядра Linux.

Безопасность

При выпуске ядра Linux сообщество разработчиков почти никогда не объявляет определенные изменения исправлениями безопасности. Это связано с тем, что при создании исправления ошибки сложно определить, относится ли оно к безопасности. Кроме того, многие исправления ошибок признаются связанными с безопасностью только спустя долгое время, поэтому сообщество разработчиков ядра настоятельно рекомендует всегда устанавливать все выпущенные исправления.

Когда сообществу разработчиков ядра сообщают о проблемах с безопасностью, их устраняют как можно скорее и публикуют в дереве разработки и стабильных выпусках. Как описано выше, изменения почти никогда не описываются как "исправление безопасности", а выглядят как обычное исправление ошибки ядра. Это делается для того, чтобы затронутые стороны могли обновить свои системы до того, как сообщивший о проблеме пользователь объявит о ней.

Подробнее о том, как сообщать о проблемах безопасности в сообщество разработчиков ядра, чтобы их как можно скорее устранили, можно узнать в разделе "Ошибки безопасности" руководства пользователя и администратора ядра Linux на сайте www.kernel.org.

Поскольку команда ядра не сообщает о найденных уязвимостях в системе безопасности, номера CVE для проблем, связанных с ядром Linux, обычно публикуются через недели, месяцы, а иногда и годы после того, как исправление было добавлено в стабильные и разрабатываемые ветви.

Обеспечьте безопасность системы

При развертывании устройства, использующего Linux, мы настоятельно рекомендуем производителю устанавливать все обновления ядра с долгосрочной поддержкой и распространять их среди пользователей после того, как тестирование покажет, что обновление работает корректно. У этого подхода есть несколько преимуществ:

  • Выпуски проверяются разработчиками ядра целиком, а не по частям.
  • Трудно определить, какие исправления устраняют проблемы с безопасностью, а какие нет. Почти каждая версия LTS содержит хотя бы одно известное исправление системы безопасности и множество неизвестных.
  • Если тестирование выявляет проблему, сообщество разработчиков ядра быстро реагирует на нее.
  • Попытки отфильтровать только внесенные вами изменения приведут к тому, что дерево ядра невозможно будет правильно объединить с будущими выпусками.