RustConfで見えてきたRustプロジェクトが最も大事にする価値とは?
Rustコミュニティは、年次カンファレンスRustConf 2020をオンラインイベントとして開催した。今回の記事では、そのセッションの中からオープニングキーノートとクロージングキーノートをまとめて紹介する。
盛りだくさんなオープニングキーノート
オープニングキーノートは約1時間の中でRustのコアチームのメンバーが入れ替わりでプレゼンテーションを行った。内容は過去5年の振り返り、コアとなる価値観、ガバナンスに関する考え方、そしてこれから強化されていく機能までをカバーするセッションとなった。クロージングキーノートでは日本人にはなじみのあるゲーム、ポケモン「青」の「けつばんポケモン」のバグを例にとって、メモリーセーフであることの意義を語るものとなった。
参考:RustConf 2020 Opening Keynote
最初に、この8月に発表されたMozillaのレイオフに触れ、Rustのコアチームがこの事態を悲しんでいること、そしてRustのプロジェクトはこの中には含まれていないことを語った。冒頭にこのトピックを語った辺りに、Mozillaの今後を憂いる参加者に対してポジティブなメッセージを与えようとしていることが見て取れる。
そしてコアチームの紹介に続いてNiko Matsakis氏が登場した。Matsakis氏はMozillaのエンジニアであり、Rustコアチームのメンバーだ。2020年1月9日に「Rust Foundationを年内に設立する」というブログ記事が公開されたが、2020年1月の段階で個人のブログの中でRust Foundationについて解説されていることからも、Rustのガバナンスに関する中心人物であることがわかるだろう。
Niko Matsakis氏のブログ:Towards a Rust foundation
過去5年の振り返りとして2015年のRust 1.0のアナウンスを紹介し、この時のRustは「低レベルの制御と高いレベルの便利さ、そしてメモリーセーフを保証すること」を目的として開発されたことが紹介された。
そして最新のキャッチコピーを紹介。ここでは「A Language empowering everyone to build reliable and efficient software.」、日本語にすれば「誰もが信頼できて効率的なソフトウェアを書くことを助けるためのプログラミング言語」と言ったところだろうか。このキャッチコピーに以前には存在していた「システムプログラミングのための言語」が含まれていないことに注目して欲しい。
また、Mozillaの6百万行のC++のコードをリプレースすることを目標としていたことも紹介された。
またKubeConで非常に印象的なキーノートプレゼンテーションを行ったJulia Evans氏も、2016年のRustConfで登壇していたとしてその時のスライドを紹介。ここでもRustでこれまで書けなかったソフトウェアが書けるようになると語られている。
参考:KubeConでStripeのエンジニアが語ったインフラ移行の現実 Julia Evans氏は2018年のKubeCon NAのキーノートで登壇。記事の後半に出てくる。
またRustを語るうえで欠かせないビルドツールであるCargoやCrates.ioについて、その成長を解説。Crates.ioからは34億回以上Rustのソフトウェアがダウンロードされていること、そしてCargoとCrates.ioが評価されていることを紹介した。
興味深いのは、オンラインフォーラムに投稿されたRustを使ってみたエンジニアのコメントを紹介したことで、「Rust自体は好きではないというこのエンジニアもツールとしてのCargoを評価している」という内容のコメントを取り上げたことだろう。
また開発のためのツールはCargo以外にも存在しており、ドキュメントを生成するrustdoc、コードの書き方をチェックするClippy、RustからC言語のライブラリーを呼び出すためのインターフェースを自動生成するBindgenなどが紹介された。
またRustのコンパイラーが持つ非常にデベロッパーフレンドリーなエラーメッセージについても、当初の素っ気ないメッセージから、どの行のどの変数でエラーが起こっているのかを明示するように改善されたことを紹介した。2016年8月のブログポストでRustコンパイラーのエラーメッセージの改善が解説されていることを紹介し、いかにデベロッパーをエンパワーしているかを示した形になった。
テクノロジー以外のガバナンスについても、Rustプロジェクトは初期の段階からCode of Conductを持っていたこと、ガバナンスのために機能追加などの議論に透明度の高いRFCを採用して議論していることなどが紹介された。
コミュニティ全体として、2020年に623名の新規のユーザーからのコミット、1467名のユーザー新規登録があったことを紹介。
またRustのリポジトリーであるCrates.ioについても、約34億回というダウンロード数に加えて、5815人がソフトウェアをリポジトリー上に公開したことが紹介された。ここでは主に人に注目した内容になっているが、次のスライドでは組織について触れ、コアチーム以外にも多くのチームが構成されていることがわかる。
特徴的なのは「Rust Team Alumni」という、すでにチームを離れてしまった人にも枠を設けて紹介していることだろう。エンジニアを単なる歯車のように扱うのではなく、個人として尊重していることの現れだろう。
そして人を重視するプロジェクトとして余裕を持たせること、権限を与えることが重要という考えを紹介した。
コアチームのAshley Williams氏は説明の中で「A Language empowering everyone to build reliable and efficient software.」というキャッチコピーの中の“empower”に注目する。その元となった“power”には「権限を使う」という意味があり、その権限はすなわち“political”である、つまり権限を行使しようとすれば最終的に政治的になってしまう、しかしRustはその意味では最初からpoliticalであったし、これからもそうだろう、と解説した。
折り合いのつかない複数のステークホルダーを納得させるための行為を「政治」だとすれば、メモリーセーフ、スレッドセーフを実現するために所有権と厳密なタイプ付けを導入したRustは、紛れもなくpolitically correctなプログラミング言語だろう。
最後に紹介された今後の予定については、「コアチームの議論をすべて公開すること」「async/waitの機能強化」などが予定されていることを解説した。最後にRustが人を重視しているひとつの証として「素晴らしいRustのメンターたち」というサイトを紹介して、プレゼンテーションを終えた。
ちなみにRustのキャラクターであるカニは「Ferris」という名前で、非公式ではあるものの多くのRustファンに愛されていることがわかる。Ferrisについては、作者であるKaren Rustad Tolva氏がまとめたページを参照されたい。
ポケモンでメモリーセーフを学んだクロージング
最後に、このオンラインカンファレンスのトリを飾ったクロージングキーノートを紹介する。これはゲームボーイのゲーム、「ポケモン青」をベースにしてメモリーセーフなシステムについて考察するという内容だ。プレゼンターはSian Griffin氏だ。
参考:RustConf 2020 Closing Keynote
ポケモン青での「けつばんポケモン」の発生がなぜ起きたかについて、再現方法、レジスターのサイズなどから「推理」して、アセンブラーのコードをRustで再現してメモリーセーフであることの難しさを解説するというものだ。
ポケモンのIDがバッファオーバーフローしたことで、予期しないデータが利用されたことがけつばんポケモンの原因だったという推察を紹介し、コードをRustで表現した。ここで注目したいのは、Unsafeキーワードがつけられていることだろう。バッファオーバーフローするようなコードはコンパイラーでチェックされることになるのだろう。
そして最後に「もうアセンブラーでコードを書く必要がなくなって嬉しい」というスライドを示し、アセンブラーでメモリーセーフなコードを書く難しさを表現した。
Griffin氏はポケモンに愛着があるようで、氏のTwitterでは以下のようなツイートでポケモンへの愛をRustへの愛と合わせて語っていたのが印象的だ。
引用元のツイートはこちら:https://twitter.com/sgrif/status/1299130857534492672
RustはMozillaの危機を乗り換えてRust Foundationという独立の組織により維持されていくことで、今後のオープンソースプロジェクトの模範となる可能性がある。そしてCNCFなどに比べて規模は小さいものの、革新と独立、透明性、そして人を重視することを掲げて、これからどうやって続いていくのか注目していきたい。
連載バックナンバー
Think ITメルマガ会員登録受付中
全文検索エンジンによるおすすめ記事
- データ処理ライブラリーの並列化/高速化をRustによって実装したWeld
- 高速でメモリーセーフなプログラミング言語、Rustの特徴を紹介
- RustとGraphQLの連携で高速/シンプルなプログラミングを実現するJuniperとは
- IBMがRustを使ってNode.jsのプロジェクトを書き換え。その背景とは?
- Rustで書かれたシステムのトレーシングを実装するtracing
- GoogleがAndroidの開発にRustを使った事例を解説するRust Dayを開催
- RustConfからTwitterがキャッシュサーバーをRustで書き直したセッションを紹介
- DropboxがコアサービスをRustで書き換えた背景とは
- Rustでコードを書くゲームエンジンのBevyを使ってインベーダーゲームを作る動画を紹介
- Microsoftの年次イベントBuild 2020でメモリーセーフなプログラミング言語Rustを紹介