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

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

Стабильные выпуски ядра основаны непосредственно на выпусках Линуса Торвальдса и выпускаются примерно раз в неделю, в зависимости от различных внешних факторов (время года, доступные исправления, рабочая нагрузка сопровождающего и т. д.). Нумерация стабильных выпусков начинается с номера выпуска ядра, а в конце к нему добавляется дополнительный номер. Например, ядро ​​4.4 выпущено компанией Linus, а стабильные выпуски ядра, основанные на этом ядре, имеют номера 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 содержит по крайней мере одно известное исправление безопасности, а многие еще «неизвестны».
  • Если тестирование выявляет проблему, сообщество разработчиков ядра быстро реагирует и решает проблему.
  • Попытки отфильтровать только вносимые вами изменения приводят к тому, что дерево ядра невозможно правильно объединить с будущими вышестоящими выпусками.