zlibは、データの圧縮および伸張を行うための自由ソフトウェアのライブラリである。可逆圧縮アルゴリズムのDeflate () を実装している。ヘッダーやフッターなどのデータ形式は (ZLIB Compressed Data Format Specification) として仕様化されている。また、これ以外のデータ形式として (GZIP File Format Specification) および、RAW形式 (ヘッダーやフッターなし) もサポートするzlib Manual。
概要 zlibの作者は、ジャン=ルー・ガイイ (Jean-Loup Gailly) とマーク・アドラー (Mark Adler) である。彼らはgzipの主要開発者でもある。ジャンが圧縮、マークが伸張に関する部分を担当した。ライセンスはgzipとは違いGPLではなく、BSDライセンスに近い、より制限の緩やかなもの (zlib License) が採用されている。
zlibはC言語で記述されている。ほとんどのプログラミング言語ではzlibを使えるようにラッパーライブラリなどの形態で提供している。例えば、Java SEのJava Runtime Environment (JRE) には標準Javaクラスライブラリのパッケージとして組み込まれており、Javaプラットフォーム上でも利用できる。.NET Framework/.NET CoreではSystem.IO.Compression名前空間にて各種クラスが提供されている。
zlibは、商用・非商用を問わず多くのソフトウェアで採用されているhttp://zlib.net/apps.gz.html。画像フォーマットのPNGがDeflateの実装を必要とするため、データ圧縮系だけでなく、画像を表示するほとんどのソフトウェアでも使われている。また、ほとんどのオペレーティングシステム (OS) で共有ライブラリとして含まれている。パソコン・サーバー・携帯電話など、非常に多くのOSで使われているライブラリのため、問題が発見されると、広範囲のシステムに影響が及ぶ。2002年と2005年にセキュリティ問題が発見・修正されたが、その後も脆弱性が発見されるたびにパッチが提供されており【セキュリティ ニュース】圧縮ライブラリ「zlib」の最新版に深刻な脆弱性(1ページ目 / 全1ページ):Security NEXT、システムを健全な状態に保つためにはライブラリの更新が必要となる。ソースコードは公開されているが開発はほぼクローズドであり、外部からのパッチは基本的に受け付けない。そのため、よりオープンな開発環境を求めてzlib-ngなどのプロジェクトが立ち上げられているhttps://github.com/zlib-ng/zlib-ng。
ヘッダー・フッター zlibのデータ形式 () は、圧縮データの前に2バイト以上のヘッダーと末尾に4バイトのAdler-32のフッターが付く。
ヘッダーの最初の2バイトは以下の通り。 1バイト目 上位4ビットは圧縮情報であり LZ77 のウィンドウサイズ。7なら32KBのウィンドウサイズ。 下位4ビットが圧縮方式。通常は数値の8。 2バイト目は 上位2ビットは圧縮レベル。デフォルトは2。 6ビット目はプリセット辞書があるかどうか。 下位5ビットがヘッダー2バイト分のチェックビット。
プリセット辞書を使う場合は3バイト目から辞書情報が続く。使わなければ、圧縮データが続く。
なお、gzip 形式 () の場合は、10バイト以上のヘッダーと8バイトのフッターが付く。
2012年8月に発行された で application/zlib が定義され、application/gzip と共に IANA に正式に登録された。
脚注
関連項目 gzip ZIP (ファイルフォーマット)
外部リンク 公式サイト(英語)