PaPoo
cover
technews
Author
technews
世界の技術ニュースをリアルタイムでキャッチし、日本語でわかりやすく発信。AI・半導体・スタートアップから規制動向まで、グローバルテックシーンの「今」をお届けします。

BZip2の後継を名乗る圧縮ツール「bzip3」は何を目指しているのか

古い圧縮形式の名前が、いまGitHubで少し違う形で目を引いています。bzip3 は、かつて広く使われた BZip2 の「spiritual successor」をうたうプロジェクトで、単なる互換品ではなく、より高い圧縮率と性能を狙っているのが特徴です。圧縮は地味に見えて、バックアップや配布、アーカイブの速度と容量をじわじわ左右します。だからこそ、この手の道具がどう更新されているかは、いまも十分に見る価値があります。

bzip3 は README で何を示しているか

GitHub 上の iczelia/bzip3 は、BZip2 の後継を名乗る公開リポジトリです。README の最初で、このソフトは「より良く、より強い」後継だと説明されていて、圧縮率と性能の両方を上げたと主張しています。中身としては、order-0 の context mixing entropy coder、suffix arrays を使った高速な Burrows-Wheeler transform、さらに RLE と Lempel Ziv + Prediction を組み合わせた処理を使っているとされています。要するに、昔ながらの bzip2 系の文脈を引き継ぎつつ、より新しい圧縮技術を寄せ集めて作った道具です。

用途の面では、テキストやコードの圧縮に強いと書かれています。これは bzip2 らしさをかなり強く残した説明で、ログやソースツリーのような「似た文字列が多いデータ」に向いているという意味です。インストール方法は、git clone した場合なら ./bootstrap.sh./configuremakesudo make install という流れ。macOS では Homebrew から brew install bzip3 でも入れられる、と案内しています。

README のかなりの部分はベンチマークです。作者は Perl5 の全リリースを集めて解凍し、それらをまとめた all.tar を作って各圧縮方式を試しています。xz -T16 -9 -k all.tar は 12:09.24、bzip2 -9 -k all.tar は 17:16.64、bzip3 -e -b 256 -j 12 all.tar は 7:10.10、bzip3 -e -b 511 -j 4 all.tar は 7:08.65、zstd -T12 -16 all.tar は 6:35.62 でした。圧縮サイズは xz が 2,056,645,240 bytes、bzip2 が 3,441,163,911 bytes、bzip3 -b 256 が 1,001,957,587 bytes、bzip3 -b 511 が 546,456,978 bytes、zstd が 3,076,143,660 bytes。作者の結果では、bzip3 は特に -b 511 でかなり小さく圧縮できています。

展開速度の比較も載っています。WD Blue HDD 上での wall clock time は、xz が 4分40s、bzip2 が 9分22s、bzip3 (parallel) が 4分06s、zstd が 3分51s でした。さらに lrzip と組み合わせた実験もあり、長距離重複排除をかけた all_none.tar.lrz を bzip3 で圧縮すると 22.411 秒で終わり、サイズは 60,672,608 bytes になったとしています。比較として lrzip + lzma は 64,774,202 bytes、lrzip + bzip2 は 75,685,065 bytes でした。

ただし README には強い警告もあります。作者はデータ損失の責任を負わないと明記し、圧縮とは「あとで元に戻せる」という前提のうえに成り立つが、複雑な実装なのでバグが残る可能性はゼロにできない、と書いています。とはいえ不安を煽るだけではなく、bzip3/libbz3 は慎重に作られ、広くテストされてきたとも述べています。対応アーキテクチャとしては x86、x86_64、armv6、armv7、aarch64、ppc64le、mips、mips64、sparc、s390x が挙げられています。ライセンスは LGPLv3 で、コードの一部には Apache 2.0 や BSD、GPL 系の部品が含まれるものの、プロジェクト全体としては LGPLv3 だけだと整理されています。

bzip3 の強みは「bzip2 の続編」より実験精神にあると思う

まず面白いのは、このプロジェクトが単に「bzip2 を少し速くした」程度の話ではないことです。README を読む限り、bzip3 は圧縮理論のいくつかをまとめて押し込んだ、かなり野心的な実装です。Burrows-Wheeler transform を軸にしながら、context mixing や LZP を足して、テキストに強いという bzip2 的な性格を保ったまま圧縮率を大きく押し上げようとしている。ここには、古典的な圧縮方式を現代の計算資源で再構成する面白さがあります。私は、この種のプロジェクトは「互換ソフト」ではなく、むしろ研究寄りの実用品だと思っています。

ベンチマークは魅力的だが、読み方には少し慎重さが要る

一方で、README の数字をそのまま一般化するのは危ないとも感じます。作者が使っているのは Perl5 の全リリースという、かなり偏りのあるデータです。ソースコードや tar をまとめたような、テキスト中心で似た構造が多い素材なら bzip3 は強いはずですが、写真、動画、混在したバックアップ、暗号化済みデータのようなものでは話が変わります。bzip3 -b 511 が極端に小さなサイズを出しているのも、条件にかなり依存しているはずです。つまり、このベンチマークは「bzip3 は何でも圧縮界で最強」という証明ではなく、「特定のデータではかなり効く」というサンプルとして読むのが自然です。

それでも、bzip3 が示しているのは“圧縮の居場所”がまだあることだ

最近は zstd が実務の標準として強く、xz は配布物の定番として残り、gzip は互換性で生き続けています。その中で bzip2 の後継を名乗るのは少し懐古的にも見えますが、実際には「まだ埋まっていない用途がある」と示しているのだと思います。たとえば、テキストアーカイブを長期保存したい人、巨大なソースツリーを少しでも小さく持ちたい人、あるいは圧縮方式の研究や比較をしたい人です。そういう層には、bzip3 のように実装が公開され、設計意図もベンチマークも見える道具は価値があります。圧縮は裏方ですが、裏方だからこそ、道具の思想がはっきりしていると使い道が見えやすい。

気になるのは、速さよりも「どこまで信頼して使えるか」だ

README には十分な注意書きがありますが、圧縮ソフトではここがいちばん大事です。データを小さくできても、復元できなければ意味がありません。しかも bzip3 は、実装の複雑さゆえに特別なケースで問題が起こるかもしれないと自分で認めています。これは弱点というより誠実さに近いですが、運用する側から見れば重要な警告です。バックアップ用途で新しい圧縮形式を使うなら、少なくとも検証用の復元テストや、長期保存時のフォーマット固定の方針が必要になります。bzip3 は魅力的ですが、気軽に置き換える対象ではなく、まず試して性格を見極めるべき道具だと思います。


参考: GitHub - iczelia/bzip3: A better and stronger spiritual successor to BZip2.

同じ著者の記事