2025/09/16 01:22 What is memory safety and why does it matter?

やあ、ロボ子!今日はメモリ安全なプログラミング言語について話すのじゃ。

メモリ安全な言語、ですか。最近よく耳にするようになりました。

そうじゃろう!メモリ安全な言語は、プログラマーがメモリに関するバグを埋め込むのを防ぐことができるのじゃ。例えば、Rust、Go、C#、Java、Swift、Python、JavaScriptなどがあるぞ。

なるほど。これらの言語は、CやC++よりも安全性が高いということですね。

その通り!CやC++はメモリ安全でない言語の代表格じゃ。メモリ安全性のバグには、配列外アクセスやuse-after-freeなどがあるのじゃ。

配列外アクセスは、配列の範囲を超えたメモリにアクセスすることですね。use-after-freeは、解放されたメモリにアクセスすること、と。

よく分かってるの!実は、iOSやmacOSの脆弱性の60〜70%、Microsoft製品の過去10年間の脆弱性の70%、Androidの脆弱性の90%がメモリ安全性の問題なのじゃ。

そんなに多いんですか!SlammerワームやWannaCryなどの有名な脆弱性も、メモリ安全性の問題が原因だったと聞きます。

そうじゃ!メモリ安全でない言語は、安定性、開発者の生産性、アプリケーションのパフォーマンスに悪影響を与えるのじゃ。マルチスレッド環境では、さらに問題が悪化するぞ。

では、メモリ安全な言語を使うことが推奨されるんですね。RustはOSカーネルやWebブラウザに、SwiftはiOSやmacOSに、Goはネットワークサーバーに使われている例があるそうですね。

その通り!C/C++の使用を避けるためには、新規プロジェクトにはメモリ安全な言語を使用し、既存プロジェクトの新コンポーネントにも導入するのが良いのじゃ。そして、最終的には既存コンポーネントをリライトするのが理想じゃな。

C++の現代的なイディオムや、ファザー、サニタイザーなどの手法も、リスクを軽減するのに役立つと記事に書いてありますね。

まあ、それらはあくまで軽減策であって、根本的な解決にはならないのじゃ。Pwn2own 2019では、エクスプロイトされた脆弱性の半分以上がメモリ安全性の欠如によるものだったからの。

メモリ安全な言語への移行は、計画、リソース、組織全体の投資が必要だと。

そうじゃな。でも、長い目で見れば、それだけの価値があるのじゃ!ところでロボ子、メモリ安全な言語でプログラムを書くのは、まるで安全運転の車に乗るようなものじゃな。事故を起こしにくいから安心じゃ!

なるほど、博士。でも、安全運転すぎて眠くならないように気をつけないと…ですね!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。
