Ядро
Я уже как-то писал про «главную дыру нэта». Про то, что весь современный интернет держится на коде, написанном десятилетия назад. И у этого кода есть фундаментальная проблема - он написан на C. А C, как известно, прощает всё. В том числе и фатальные ошибки, которые потом годами живут в ядре Linux.
И вот, кажется, лёд тронулся. Причём не где-то на периферии, а в самом сердце.
Переезд
Linux 7.0 официально снял с Rust ярлык «эксперимент». Всё, это не игрушки. Это постоянная часть ядра. Да, пока это всего 0.2% от всего кода. Но это 90 тысяч строк, которые уже сидят в ядре и работают на миллиардах устройств.
И это не просто какой-то левый код. Это драйверы. GPU, сеть, хранилища. Самое опасное место, где данные из внешнего мира впервые касаются системы.
Самое показательное - история с Binder. Это механизм межпроцессного взаимодействия в Android. Его старый драйвер на C был настолько сложным и запутанным, что поддерживать его стало невыносимо. И его выкинули. Полностью. Заменили на Rust.
И это не потому что модно. А потому что старый код было слишком легко сломать. А Rust по своей природе не даёт тебе выстрелить в ногу.
Цифра
И вот тут начинается самое интересное. Google недавно поделилась статистикой по Android. Они перевели часть кода на Rust и посмотрели на результат.
Плотность уязвимостей памяти в Rust-коде оказалась в 1000 раз ниже, чем в аналогичном коде на C и C++. Доля уязвимостей памяти во всей системе впервые упала ниже 20%. А количество откатов кода (когда фича сломалась и её пришлось выпиливать) снизилось в 4 раза.
Главный мейнтейнер стабильного ядра Linux, Грег Кроа-Хартман, сказал вообще страшную вещь. Он заявил, что если бы ядро с самого начала писали на Rust, это предотвратило бы около 80% всех дыр за последние 25 лет.
Но
Важный момент. Rust не делает код бессмертным. Он убирает целый класс ошибок - проблемы с памятью. Но он не убирает логические ошибки. Если ты неправильно спроектировал систему, Rust тебе не поможет.
Недавно нашли уязвимость в Rust-драйвере Binder. Но это была не утечка памяти и не переполнение буфера. Это была логическая ошибка, из-за которой система не могла освободить ресурсы. Да, это баг. Но это баг в логике, а не в фундаменте.
Это как разница между «у тебя в машине отвалилось колесо» и «у тебя в машине сломался кондиционер». И то и другое неприятно. Но последствия разные.
Почему это важно
Я слежу за этими новостями не из праздного любопытства. Мой проект тоже живёт на Rust. И когда я смотрю на то, как гиганты переписывают ядра и драйверы, я понимаю, что мой выбор был не просто «модным». Он был стратегическим.
Я выбрал Rust не потому, что хотел страдать от строгого компилятора. А потому что хотел скорость и безопасность. Новости последних месяцев только подтверждают: этот путь работает. Риск того, что проект ляжет из-за банальной уязвимости, падает в разы.
Мой проект пока не затронули те громкие атаки, о которых пишут в новостях. Я проверил, по чем сейчас бьют и как обходят механизмы защиты. Вроде, пронесло.
Но я не расслабляюсь. Держу руку на пульсе. Слежу за громкими и не очень новостями о взломах. Мне это нужно не для абстрактного чувства безопасности.
Я делаю это для того, чтобы однажды утром, открыв свой сайт, я не увидел на нем дикпик мамкиного хакера. Вот такая простая человеческая мотивация.
Rust не сделает меня неуязвимым. Но он снижает шансы на то, что этот хакер пролезет ко мне через дырку в памяти. А остальное я проверю сам.