🦀 🐧 «Это выигрыш для всех»: почему ключевой разработчик Linux больше не хочет писать на C
В продолжающейся дискуссии о внедрении языка Rust в ядро Linux Грег Кроа-Хартман, один из ключевых разработчиков и сопровождающих ядра, высказал свою позицию, которая однозначно поддерживает этот шаг. И его мнение особенно ценно, учитывая, что он видел практически каждый баг-фикс и проблему безопасности в ядре за последние 15+ лет.
Почему Rust нужен ядру?
По словам Грега, большинство багов в ядре (по количеству, а не по серьезности) связаны с «глупыми незначительными крайними случаями в C», которые полностью отсутствуют в Rust. Речь идет о таких вещах, как переполнение буфера (хотя Rust, конечно, не может предотвратить все подобные случаи), пропуск проверки кодов возврата и ошибки типа use-after-free. Именно поэтому я хочу видеть Rust в ядре – эти типы проблем просто исчезнут, позволяя разработчикам и мейнтейнерам больше времени уделять НАСТОЯЩИМ багам (то есть логическим ошибкам, состояниям гонки и т. д.).
C++ не решение
В ответ на предложения использовать C++ вместо Rust, Грег отмечает, что C++ не даст нам аналогичных преимуществ «ни в каком обозримом будущем», а проблемы с комитетом по стандартизации C++ указывают на то, что «всем лучше отказаться от этого языка как можно скорее, если они хотят иметь кодовую базу, которую можно поддерживать в течение длительного времени».
Преимущества для API ядра
Rust также дает возможность определять внутриядерные API таким образом, что их практически невозможно использовать неправильно:
«У нас слишком много сложных/хитрых API, требующих слишком много проверок от сопровождающих только для того, чтобы «убедиться, что вы все сделали правильно... »
Не серебряная пуля, но большой шаг вперед
Грег признает, что Rust – «не серебряная пуля», которая решит все проблемы, но он определенно поможет во многих случаях. Особенно для нового кода и драйверов, написание их на Rust, где определенные типы ошибок просто не могут возникнуть, – это выигрыш для всех.
Ответ на опасения сообщества
Отвечая на опасения по поводу смешанной кодовой базы и нагрузки на и без того перегруженных сопровождающих, Грег напоминает:
«Да, смешанные языковые кодовые базы сложны и трудны в сопровождении, но, черт возьми, мы же разработчики ядра! Мы поддерживали и укрепляли Linux дольше, чем кто-либо когда-либо считал возможным. Мы превратили нашу модель разработки в хорошо отлаженное инженерное чудо, создав то, чего никому другому никогда не удавалось достичь.»
И заключает свое письмо призывом:
«Мы должны продолжать двигаться вперед, принимая новые хорошие идеи и людей, предлагающих присоединиться к нам в реальной работе, чтобы помочь обеспечить наш общий успех.»
Такая позиция от одного из ключевых разработчиков ядра – серьезный аргумент в пользу внедрения Rust в Linux. И что особенно важно – это взгляд человека, который видел практически каждую исправленную ошибку в ядре за последние полтора десятилетия.