Linux — это удивительное явление. Благодаря полностью открытой базе, мы имеем, вероятно, несметное количество дистрибутивов, которые позволяют нам владеть, контролировать и настраивать наше программное обеспечение. Включая, конечно, недавние достижения для геймеров, такие как SteamOS, Bazzite и Nobara. Однако та же самая открытость может привести к определенным трудностям, например, к давним ошибкам.
Исследователь и разработчик Дженни Гуанни Ку недавно изучила исправления ошибок в ядре Linux и обнаружила, что многие из них остаются нерешенными на протяжении долгого времени. Как человек, которого привлекают дистрибутивы Linux, но который быстро возвращается к Windows при столкновении с ошибками — обычно мелкими и раздражающими, но иногда катастрофическими — эта информация меня не радует. Так что если вы такой же, как я: пожалуйста.
Ку создала инструмент для фильтрации изменений в ядре Linux и использовала его для отбора всех исправлений с 2005 года. "Через шесть часов у меня было 125 183 записи о уязвимостях." Изучая эти исправления, она обнаружила, что средняя продолжительность существования ошибки, то есть время, в течение которого ошибка может вызывать проблемы для пользователей, составляла 2,1 года за 20-летний период. И 13% из этих ошибок существовали более пяти лет до их исправления.
Если рассмотреть только ошибки, исправленные в 2025 году, эта доля увеличивается до 20%, но это связано с тем, как статистика может искажаться при использовании таких малых выборок. На самом деле, по словам Ку, "ошибки, введенные в последние годы, исправляются гораздо быстрее."
Исследование Ку служит предупреждением о важности правильного проведения статистических исследований. Например, она объясняет: "Ошибки, возникшие в 2010 году, обнаруживались в течение почти 10 лет, а ошибки 2024 года находят за 5 месяцев. На первый взгляд это похоже на улучшение в 20 раз! Но вот в чем дело: эти данные правосторонне цензурированы. Ошибки, появившиеся в 2022 году, пока не могут иметь 10-летней продолжительности, так как сейчас только 2026 год. Мы можем обнаружить больше ошибок 2022 года в 2030 году, что увеличит среднее значение."
Если же сравнивать действительно значимые и осмысленные данные, мы видим улучшения: "Мы одновременно быстрее находим новые ошибки и медленно работаем над ~5 400 старыми ошибками, которые скрывались более 5 лет."
Естественно, не все ошибки исправляются одинаково быстро: некоторые виды ошибок решаются быстрее других. Ошибки в сетях обычно требуют больше времени, а ошибки в графических процессорах исправляются быстрее. Есть также ошибки, которые особенно трудно обнаружить и исправить, например, "гонки за ресурсами", которые "недетерминированы и возникают только при специфических временных условиях, которые могут случаться раз в миллион запусков."
В общем, чем реже проявляется ошибка и чем меньше людей проверяет её код, тем дольше её обнаруживают и исправляют. Глубже копаясь в причины, можно выделить несколько основных факторов: "ошибки в подсчете ссылок", "пропущенные проверки NULL после разыменования", "переполнение целых чисел в вычислениях размера" и "гонки за ресурсами в конечных автоматах."
Тем не менее, если взглянуть шире, это часто ошибки, возникающие в достаточно редких обстоятельствах. Ку приводит пример одной из старейших сетевых ошибок, которая оставалась неисправленной в течение 19 лет. Она оставалась незамеченной так долго, потому что возникала только при выполнении определенной последовательности тестов в течение определенного времени, и "никто не запускал эту последовательность тестов на протяжении двух десятилетий."
Все это представлено как повод рассмотреть модель VulnBERT AI исследователя, "модель, которая предсказывает, вносит ли коммит уязвимость." По словам исследователя, "из всех коммитов, вводящих ошибки, мы ловим 92,2%."
Это, безусловно, будет полезно для тех, кто проверяет коммиты ядра Linux, но для меня, как обычного пользователя, это лишь усиливает мое беспокойство по поводу использования Linux, несмотря на все недостатки Windows.

Очень интересное исследование! Поражает, насколько долго могут оставаться незамеченными некоторые ошибки. Честно говоря, даже не догадывался, что такие старые баги могут быть в системах. Надеюсь, VulnBERT поможет улучшить ситуацию. Спасибо за материал!