Zstandard

Zstandard (zstd) は、圧縮・展開が速いことを特徴とする可逆圧縮アルゴリズムである。またC言語で書かれた前述のアルゴリズムのリファレンス実装の名前でもある。Meta Platforms, Inc.に所属しているYann Colletによって2015年から開発されている。

この実装のバージョン1.0.0は2016年8月31日に自由ソフトウェアとして公開されたSergio De Simone, Facebook Open-Sources New Compression Algorithm Outperforming Zlib / InfoQ, Sep 02, 2016。2018年10月に  で規格化され、2021年2月に  に更新された。メディアタイプは  。英語発音はズィースタンダード（zee standard）。

 特徴 
Zstandardは、デフォルトの圧縮レベル3の場合、現在主流であるDeflate (ZIP, gzip) アルゴリズムとほぼ同じ圧縮率だが、より高速に圧縮と解凍が行えるように設計されているSmaller and faster data compression with Zstandard - Engineering at Meta。

圧縮レベルは正の側は1～22が指定可能で、圧縮レベルを上げると圧縮率は上がり、幅広いレンジの圧縮率に対応している。Arch Linuxのパッケージ圧縮はZstandardを採用しているが、圧縮レベル20を採用していて、xzと比較してサイズの増加は0.8%に留まり、解凍は14倍高速である。圧縮レベルは-1以下も存在し、コマンドライン版では --fast=# で指定することが可能で、Zstandardの開発者による調査だと --fast=2 は QuickLZ や Snappy 相当、--fast=3 は LZO 相当、--fast=4 は LZ4 相当であるRelease Zstandard v1.3.4 - faster everything · facebook/zstd。

Zstandardは大きな検索窓の辞書式圧縮アルゴリズム (LZ77) とエントロピー符号化を併用しており、エントロピー符号化ステージで有限状態エントロピー(FSE)の あるいはハフマン符号化を使用しているhttps://github.com/facebook/zstd/blob/master/doc/zstd_compression_format.md#entropy-encoding。Zstandardの実装で特徴的なのはエントロピー復号時に逆方向から読み取ることである。

デフォルトでは利用しないが、並列圧縮にも対応していて、コマンドライン版は-T#で指定する。#に並列度を入れ、0の場合はCPUのコア数となる。標準の Zstandard は並列解凍には対応していないが、ファイルをチャンクサイズで分割して圧縮・解凍する Parallel Zstandard (PZstandard) があり、こちらは並列解凍に対応している。

 コマンドラインプログラム 
 zstd - メインプログラム
 unzstd - zstd の解凍用。zstd -d と同じ。
 zstdmt - 並列圧縮。zstd -T0 と同じ。
 zstdcat - zstd で圧縮されたファイルに対して cat する。zstd -dcf と同じ。
 zstdless - zstd で圧縮されたファイルに対して less する。
 zstdgrep - zstd で圧縮されたファイルに対して grep する。
 pzstd - Parallel Zstandard 。ファイルをチャンクサイズで分割して並列圧縮・並列解凍する。並列解凍でなくても良いならば普通の zstd で解凍できる。

 API 
C言語で実装され、APIが提供されている。それに対して、様々なプログラミング言語でのバインディングおよび再実装が存在する。

 ライセンス 
バージョン1.0.0から1.3.0までは、リファレンス実装がBSDライセンスにてGitHubで公開されていて、関連する特許の使用を認める追加ライセンスzstd/PATENTS "Additional Grant of Patent Rights Version 2", Facebook も付属していた。

2017年8月21日にリリースされたバージョン1.3.1 "Zstd v1.3.1 release", GitHub から、この特許条項は削除され、ライセンスは三条項BSDとGPLv2のデュアルライセンスに変更された"New license", GitHub。

 利用例 
Linuxカーネルには2017年11月(バージョン4.14)からZstandardが含まれており、btrfsやsquashfsファイルシステムでの圧縮方法として利用可能となっている。また、2020年10月(バージョン5.9)からカーネルイメージの圧縮方法として利用可能となった。

FreeBSDカーネルには2017年からZstandardが含まれており、コアダンプ(ユーザープログラムとカーネルパニックの両方)の圧縮オプションとして利用可能となっている。

GNU tar は2019年1月2日にリリースされた 1.31 から対応している。拡張子は .tar.zst もしくは .tzst 。bsdtar (libarchive) は2019年4月11日にリリースされた 3.3.3 から対応している。tar-1.31 released stableRelease Feature and Security Release · libarchive/libarchive

rsync では2020年6月19日にリリースされた 3.2.0 から zlib 以外に、Zstandard と LZ4 に対応した。NEWS for rsync 3.2.0 (19 Jun 2020) - NEWS for rsync

Ubuntu 21.10Hello zstd compressed .debs in Ubuntu! | Obsessed with reality（非デフォルトとしてはUbuntu 18.04よりzstd compression for packages - ubuntu devel）、Red Hat Enterprise Linux 9、Fedora 31、2019年12月27日以降のArch LinuxArch Linux - News: Now using Zstandard instead of xz for package compression等、多くのLinuxディストリビューションでデフォルトのパッケージ圧縮方式としてZstandardを利用している。Ubuntuでは圧縮レベル19、Arch Linuxでは圧縮レベル20arch-dev-public RFC: (devtools) Changing default compression method to zstdを採用したが、xzの圧縮レベル6に比べて、Zstandardの圧縮レベル19では6%、圧縮レベル20では0.8%パッケージのサイズが増加するが、展開速度は格段に高速になる。Debian からフォークしている Ubuntu が先行した形で、Debian 側の dpkg は1.21.18（2023年1月10日）より Zstandard に対応したが、Debian 12 現在は引き続き xz をデフォルトとしている。

Google Chrome 123（2024年3月19日リリース）、Microsoft Edge 123、Mozilla Firefox 126 より、HTTP の Content-Encoding に zstd が使える。

 参照 
 LZ77

 Brotli
 LZFSE - AppleがiOS 9とOS X 10.11以降に使用し2016年1月にオープンソース化した類似のアルゴリズム

 参考文献 

 外部リンク 



 Zstandard Overview - Zstandard アルゴリズムの概要
 Smaller and faster data compression with Zstandard Facebook Announcement - "Zstandardによるより小さく、速い圧縮"
 英ガーディアン紙はzlibの代わりにZStandardを使用している旨の記事

Category:データ圧縮
Category:オープンソースソフトウェア
Category:2015年のソフトウェア
8878