RustNL 2024からデータ圧縮ライブラリーzlibをRustで書き直したプロジェクトのセッションを紹介
RustNL 2024のセッションから、圧縮のためのライブラリーzlibをRustで書き直したプロジェクトに関するセッションを紹介する。プレゼンターはオランダでRustに関するコンサルティングを行っているTweede GolfのエンジニアのFolkert de Vries氏だ。
●動画:Compression Carcinized: Implementing zlib in Rust
システムに近く多くのユーザーが使うソフトウェアをメモリーセーフにするというのは、ISRGが掲げたプロジェクトで以下の記事にその概要を解説している。
●参考:ISRGが推進するメモリーセーフなソフトウェアを増やすための地道なプログラムProssimoを紹介
ここでISRGのSarah Gran氏は「インターネットの重要な部分を占めるソフトウェアをメモリーセーフなソフトウェアに置き換えていく」というプロジェクトとしてProssimoを紹介している。そして記事の中に含まれている重要なソフトウェアのひとつがzlibのライブラリーということだろう。
●ISRGのプロジェクトページ:zlib - Prossimo
このぺージに書かれているように、すでに稼働しているソフトウェアをメモリーセーフに書き換えるという仕事はそれだけでは収支が合わない仕事だろう。zlibに関して言えばChainguardがスポンサーとしてプロジェクトの支援をしているということになるだろう。
zlibがどこで使われているのかという部分に関しては、Webサイトを閲覧する際の必須の要素として常時使われていることを説明。ここでは単に大きな画像ファイルを自身のPCでユーザーが圧縮するというプロセスではなく、Webサイトを閲覧する際にブラウザーからGetメソッドでコンテンツを取得する時にデータ量を削減するためにzlibが使われていることを紹介している。
zlib-rsのプロジェクトとしてのゴールは、Cで書かれたzlibライブラリーを完全に置き換えること、そしてRustの高速な実行という利点を最大限に利用することだと説明。
そしてここからはデータ圧縮に関する基本的な原理を解説する内容となり、重複するデータのパターンを見つけてそれを圧縮することを解説している。
ライブラリーの書き換えのためには「何を置換するのか?」を正しく理解することが必要だとして、比較したのはオリジナルのzlibライブラリーだ。
そしてより現代的なプロセッサに対応した実装として紹介したのが、zlib-ngだ。zlib-ngはSIMD(Single Instruction Multiple Data)に対応した新しい実装で、過去のレガシーな機能を取り除いただけではなく並列処理にも対応したライブラリーとして紹介された。
そしてzlibをRustで書き直すというプロジェクトに関して、どうしてRustを使うのかという部分に「Any sufficiently complicated C or Fortran program contains an ad hoc, informally-specified, bug-ridden, slow implementation of half of Common Lisp.」というPhilip Greenspun氏の「10th rule of programming」の言葉を真似て表現した。日本語訳は「複雑なCのプログラムにはRustのビルドツールであるCargoの半分の速度の処理しかできないアドホックで非公式なバグが存在している実装が含まれている」といったところか。つまりComon Lispと同じくらいに遅くてバグが潜んでいるコードができ上がってしまうというリスクを揶揄している。ここで期せずして参加者から拍手が起こり、参加者のコンピュータリテラシーの高さが垣間見えた瞬間でもあったと言える。
続けて他のzlibの実装についても解説しており、miniz-oxideというライブラリーについてはメモリーセーフではあるものの速度が犠牲になっていることを解説。またC言語のライブラリーの完全置換とは言えず、機能が不足していることを説明した。
そして最後に紹介したのがRustで書き直したzlib-rsだ。
SIMDを使うことで並列処理による高速化を実現し、同時にCのライブラリーの100%互換を達成したzlib-rwだが、特に高速という部分についてはパフォーマンスのデータを使って紹介。
このグラフではオリジナルのC言語の実装とminiz-oxide、新しいzlib-ng、そしてzlib-rsで比較を行っている。
そして同じ機能を書き直すという仕事については、仕様を検討して上でゼロから書き直すというやり方とプログラミング言語を変えて一行一行書き換えるという方法があることを説明。どちらにもそれぞれ利点と欠点が存在するが、zlib-rsについてはゼロから書き起こすのではなくリライトに近い方法で即座に効果が現れるような仕事となったことを説明した。
このような既存のコードを書き直すプロジェクトはRustでは往々に起こっていることを示す「Rewrite it in Rust(それをRustで書き直せ)」というスラングがあることにも言及し、Rustに詳しくないデベロッパーからは揶揄される対象となっていることを説明した形になった。ちなみに書き直すプロジェクトを起こすためには、ソフトウェアの仕様以外にも資金繰りや受け入れてもらえるのか? といった技術ではない社会的経済的な要因にも注意が必要であることを説明した。
圧縮ライブラリーが意外な部分で使われていることを知って欲しい、もっとビジネスに近い本番環境でのユースケースを期待していると説明したのち、de Vries氏は質疑応答に移った。
zlib-rsの公式ページは以下を参照して欲しい。
●参考:GitHub:https://github.com/memorysafety/zlib-rs
連載バックナンバー
Think ITメルマガ会員登録受付中
全文検索エンジンによるおすすめ記事
- ISRGが推進するメモリーセーフなソフトウェアを増やすための地道なプログラムProssimoを紹介
- RustNL 2024から、マシン間コミュニケーションをRustで実装したpostcardのセッションを紹介
- LFとOpenSSF、OSSのセキュリティを向上させる具体的な計画を日本で発表
- RustNLからマルチプラットフォームのアプリ開発のためのツールRobiusのセッションを紹介
- RustNL 2024から2次元のGUIを実装するXilemを解説するセッションを紹介
- GoogleがAndroidの開発にRustを使った事例を解説するRust Dayを開催
- DropboxがコアサービスをRustで書き換えた背景とは
- Rustと非同期ライブラリーTokioで作成した簡易版Redisを紹介
- RustConfからTwitterがキャッシュサーバーをRustで書き直したセッションを紹介
- Open Source Summit NA 2022開催。Googleが解説する持続可能な信頼できるOSSのためのキュレーターとは?