🐧

Rust が Linux カーネルで「実験」を卒業した話

に公開

はじめに

Rust が Linux カーネルに導入された、という話自体は数年前からありました。
しかし最近、Rust サポートが 「実験的扱いを終え、長期的に使われる前提になった」 ことが、カーネルメンテナ間で明確に合意されています。

これは単なる言語トレンドではなく
OS カーネルという最も保守的な領域で、言語選択が変わり始めた
という点で大きな意味を持つと考えます。

なぜ Linux カーネルは Rust を受け入れたのか

最大の理由は、メモリ安全性です。

Linux カーネルで報告される脆弱性の多くは

  • use-after-free
  • buffer overflow
  • null pointer dereference

といった C 言語では防ぎにくいクラスのバグ です。

Rust は所有権・借用・ライフタイムをコンパイル時に検査することで
「その種のバグを構造的に書けなくする」設計を取っています。

そのため Linux カーネルでは

  • レビュー以前に事故を減らせる
  • メンテナの負担を根本から下げられる

という点が評価されました。

「実験」扱いが外れた、という意味

重要なのは、Rust が C を置き換えるわけではない という点です。

現在の方針は以下の通りです。

  • 既存の C コードは維持
  • 新規コード、とくに デバイスドライバ から Rust を採用
  • C と Rust が共存する前提

今回の合意は
「Rust は試験導入ではなく、今後も使い続ける言語である」
というメッセージに近いものです。

一部メンテナからは
「新規ドライバは Rust を推奨する」
という趣旨の発言も出ています。

実際どこで使われているのか

現時点で Rust が使われている主な領域は

  • デバイスドライバ
  • Android 向け Linux カーネル周辺コード
  • 他サブシステムと疎結合なコンポーネント

です。

理由は明確で

  • 境界がはっきりしている
  • unsafe を局所化しやすい
  • C とのインターフェースが限定的

といった特性があるためです。

Linux カーネル全体を Rust で書き直す計画は現時点ではありません。
「危険度の高い部分から Rust を使う」
という現実的な進め方が採られているように見えます。

Rust でも脆弱性は出る

誤解されがちですが、
Rust = 絶対安全 ではありません。

実際、Linux カーネルに含まれる Rust コードでも

  • unsafe ブロックの誤用
  • 並行処理設計の不備
  • ロジックバグ

による脆弱性は報告されています。

ただし Rust では

  • 問題箇所が unsafe に集中する
  • バグの種類が限定される
  • レビュー対象が明確になる

という特徴があります。

「バグがゼロになる」のではなく
「バグの起き方を制御できる」
という点が Rust の本質です。

Rust エンジニアに何が起きるか

この流れが意味するものは大きいです。

  • Rust はアプリケーション専用言語ではなくなった
  • OS / ドライバ / 基盤ソフトでの需要が増える
  • C の単純な代替ではなく「次世代の標準候補」になりつつある

特に組み込みや低レイヤを扱うエンジニアにとって
Rust は 将来的に避けて通れない技術 になりつつあります。

おわりに

Linux カーネルが Rust を正式に受け入れたことは

  • 言語戦争の勝敗
  • 一時的な流行

ではなく、

「安全性を人間の注意力に委ねる設計の限界」

を示しているように思います。

Rust は万能ではありません。
しかし、危険な領域にこそ適した言語 であることを
Linux という巨大プロジェクトが示し始めました。

今後数年で
「Rust をどこで使うか」
という問いは、より現実的なものになっていくでしょう。

参考リンク

Discussion