ニュースの概要
多くのLinuxディストリビューションが採用する、システムやサービスの管理基盤systemdが、Rustでプログラムを書くための公式サポートを加えた。Rustは、メモリの扱いの誤りを書いた時点で防ぎやすい言語である。一方で、低レベルの処理に必要な速度も保てる。ただし今回の対応は、既存のCコードをまとめてRustへ移すものではない。他の部品から呼ばれない末端の新しい部品、いわゆるリーフコンポーネントを、Rustで新しく作れるようにする段階的な取り組みである。Linuxの根幹を担うソフトウェアで、安全性を高める現実的な一歩として読み取れる。
引用元: systemdがRustプログラムの開発を正式にサポート(Privacy Guides)
分析・見解
全面書き換えを避けた「末端から」の進め方
systemdは、起動、サービス管理、ログ、ネットワーク設定など、多くの役割を一つの大きなコードの集まりとして抱えている。長年Cで書かれてきたため、全体をRustに移すのは数年単位の大工事になり、動作の互換性も壊しかねない。今回の方針は、他から依存されない新しい末端部品だけをRustで書くというものだ。失敗しても影響範囲が小さく、うまくいかなければ元に戻せる。
この進め方は、LinuxカーネルがRustを試験導入した経緯とよく似ている。カーネルでも、まずはデバイスドライバのような周辺部分から始まった。中心部に触れず、周辺で実績を積み、信頼を得てから範囲を広げる。基盤ソフトの世界では、これが現実的な定石になりつつある。
メモリ安全性が脆弱性の大半を占めるという事実
大手各社の調査では、重大な脆弱性の約6〜7割がメモリの扱いの誤りに由来すると報告されている。たとえば、確保した領域の外を読み書きしてしまう誤りや、解放済みの領域を使ってしまう誤りである。Cでは、これらを防ぐ責任がすべて人間にかかる。どれほど熟練した開発者でも、数十万行を超えるコードではミスを完全には避けられない。
Rustは、コンパイルの段階でこの種の誤りをかなりの程度まで弾く。つまり、レビューや試験で見つけるはずだった問題を、書いた瞬間に潰せる。systemdは権限の高いプロセスとして動くため、ここで一つ誤りが出ると影響が大きい。守りの価値が特に高い場所だと言える。
複数言語の混在が生む新しい運用上の難しさ
良いことばかりではない。CとRustが混在すると、ビルドに必要な道具が増える。Rustの道具一式が、ディストリビューションのパッケージ作成環境に必要になる。また、両言語の境目では、安全でない書き方が必要になる場面が残る。Rustにすれば自動的に安全になるわけではない。
さらに、組み込み機器や古い環境向けに、Rustの対象外のCPU構成を使っている利用者もいる。こうした環境では、新しい部品が使えなくなる懸念がある。実際、他のプロジェクトでも、Rust導入をめぐって対応CPUの切り捨てが議論になった例がある。systemdがどこまで配慮するかが、今後の見どころだ。
基盤から広がる「言語の世代交代」という見立て
独自の視点として、今回の意味はsystemd単体の話にとどまらない点を挙げたい。sudoやcoreutilsなど、身近な基本部品でもRust版が現れ始めている。基盤ソフトが一つ動くたびに、周辺のパッケージ管理者や企業の運用担当も、Rustを前提に準備する理由ができる。言語の世代交代は、技術の優劣よりも、こうした波及で決まっていく。数年後には、Rust製の部品が混ざったLinuxが普通になっていると見ておくのが妥当だろう。
ビジネスへの影響
運用現場で今すぐ変わることは少ないが、確認項目は増える
短期的には、利用中のLinuxの動作が変わることはほとんどない。新しい部品が段階的に入る程度で、日々の運用は従来どおりで済む。ただし、ディストリビューションの更新情報に、Rust製の部品が含まれるかどうかを確認する習慣は持っておきたい。自社でカスタムビルドやパッケージの再作成をしている場合は、ビルド環境にRustの道具が必要になる点を早めに洗い出しておくとよい。
脆弱性対応の優先度づけに使える判断材料になる
中長期では、権限の高い基盤部品の脆弱性が減る期待がある。セキュリティ対策の予算や人手を考えるとき、メモリ安全な言語で書かれた部品が増えるほど、緊急パッチの頻度が下がる可能性がある。とはいえ、設定ミスや権限管理の甘さといった別の原因は残る。基盤の改善を待つだけでなく、基本的な守りの見直しは並行して続ける必要がある。
古い環境を抱える企業は移行計画を前倒しで考える
古いCPUや長期間更新していないサーバーを使っている企業は注意が必要だ。新しい部品が非対応で、更新が止まる事態もあり得る。サポート期限の近い機器の一覧を作り、数年単位で入れ替え計画を立てておくと慌てずに済む。技術者の採用や育成の面でも、Rustの基礎を学べる環境を用意しておくと、将来の選択肢が広がる。