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

Модель стабильного выпуска ядра Linux началась в 2005 году, когда было установлено, что существующая модель разработки ядра (новый выпуск каждые 2-3 месяца) не отвечает потребностям большинства пользователей. Пользователи хотели, чтобы за эти 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 выбиралось раз в год, и сообщество ядра поддерживает это ядро ​​в течение минимум 2 года.

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

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

Правила исправления стабильного ядра

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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