| 初回リリース | 1995年5月1日 |
|---|---|
| 安定版リリース | 1.3.1 [1]
/ 2024年1月22日 |
| リポジトリ |
|
| 書かれた | C |
| オペレーティング·システム | クロスプラットフォーム |
| タイプ | データ圧縮 |
| ライセンス | zlib ライセンス |
| Webサイト | 出典 |
zlib(/ ˈ z iː l ɪ b /または「zeta -lib」、/ ˈ z iː t ə ˌ l ɪ b /)[2] [3]は、データ圧縮およびデータフォーマットに使用されるソフトウェアライブラリです。 [4] zlibはJean-loup GaillyとMark Adlerによって書かれ、gzipファイル圧縮プログラムで使用されるDEFLATE圧縮アルゴリズムを抽象化したものです。 zlibは、 Linux、macOS、iOSなど、多くのソフトウェアプラットフォームの重要なコンポーネントでもあります。 また、 PlayStation 4、PlayStation 3、Wii U、Wii、Xbox One、Xbox 360などのゲームコンソールでも使用されています。
Zlib の最初の公開バージョン 0.9 は 1995 年 5 月 1 日にリリースされ、もともとlibpng画像ライブラリで使用することを目的としていました。これはフリー ソフトウェアであり、 zlib ライセンスに基づいて配布されます。
機能
カプセル化
生のDEFLATE圧縮データ(RFC 1951)[5]は、通常、ヘッダーとフッターを追加してデータをカプセル化するzlibまたはgzipラッパーを使用して書き込まれます。これにより、生のDEFLATEデータでは提供されないストリーム識別とエラー検出が提供されます。
zlibラッパー(RFC 1950)[4]はgzipラッパー(RFC 1952)[6]よりも小さく、後者はファイル名やその他のファイルシステム情報を格納する。
アルゴリズム
2018年9月現在、zlibはDEFLATE[アップデート]と呼ばれるアルゴリズムを1つだけサポートしています。これは、 LZ77(Lempel–Ziv 1977)のバリエーションとハフマンコーディングの組み合わせを使用します。[7]このアルゴリズムは、システムリソースの使用を最小限に抑えながら、さまざまなデータに対して優れた圧縮を提供します。これは、 Zipアーカイブ形式でも使用されているアルゴリズムです。ヘッダーは他のアルゴリズムを考慮していますが、現在実装されているものはありません。
資源の利用
zlib は、プロセッサとメモリの使用を制御する機能を提供します。圧縮レベル値を指定すると、速度と圧縮率をトレードオフできます。また、一部の組み込みシステムなど、メモリが制限された環境で役立つ、メモリを節約する機能もあります。
戦略
圧縮は、特定の種類のデータに合わせて最適化できます。ライブラリを使用して特定の種類のデータを常に圧縮する場合は、特定の戦略を使用すると、圧縮とパフォーマンスが向上する可能性があります。たとえば、データに長い繰り返しバイトが含まれている場合は、ランレングス エンコーディング(RLE) 戦略を使用すると、高速で良好な結果が得られる可能性があります。一般的なデータの場合は、デフォルトの戦略が推奨されます。
エラー処理
圧縮データ内のエラーが検出され、スキップされることがあります。さらに、圧縮ストリームに「フル フラッシュ」ポイントが書き込まれると、破損したデータはスキップされ、次のフラッシュ ポイントで解凍が再同期されますが、破損したデータのエラー回復は提供されません。フル フラッシュ ポイントは、一部のマルチメディア アプリケーションなど、データの損失が問題にならない、信頼性の低いチャネル上の大規模なデータ ストリームに役立ちます。ただし、多くのフラッシュ ポイントを作成すると、圧縮の速度と量 (比率) に影響する可能性があります。
データ長
圧縮または解凍できるデータの長さに制限はありません。ライブラリを繰り返し呼び出すことで、無制限の数のデータ ブロックを処理できます。一部の補助コード (カウンター) は、長いデータ ストリームでオーバーフローが発生する可能性がありますが、実際の圧縮または解凍には影響しません。
長い(または無限の)データ ストリームを圧縮する場合は、定期的にフルフラッシュ ポイントを書き込むことをお勧めします。
アプリケーション
今日では、zlibは事実上 の標準となっており、標準文書ではzlibとDEFLATEが同じ意味で使われることが多く、何千ものアプリケーションが直接的または間接的に圧縮にzlibを利用しています。[8]これらには以下が含まれます。
- Linuxカーネルでは、zlib を使用して圧縮ネットワーク プロトコルや圧縮ファイル システムを実装し、起動時にカーネル イメージを解凍します。
- GNU BinutilsとGNU デバッガ(GDB)
- libpng は、ビットマップデータのストリーム圧縮として DEFLATE を指定するPNG画像形式のリファレンス実装です。
- libwww は、 Web ブラウザなどの Web アプリケーション用の API です。
- zlib を使用してHTTP/1.1を実装するApache HTTP Server。
- 同様に、cURLライブラリはHTTPレスポンスを解凍するためにzlibを使用します。[9]
- OpenSSHクライアントとサーバーは、 Secure Shellプロトコルによって提供されるオプションの圧縮を実行するために zlib に依存しています。
- オプションで zlibを使用してTLS接続を圧縮できるOpenSSLおよびGnuTLSセキュリティ ライブラリ。
- FFmpegマルチメディア ライブラリ。zlib を使用して、 Matroskaなどのストリーム形式の DEFLATE 圧縮部分を読み書きします。
- オプションのプロトコル圧縮を実装するために zlib を使用するrsyncリモートファイルシンクロナイザー。
- dpkgおよびRPMパッケージ マネージャーは、zlib を使用して圧縮されたソフトウェア パッケージからファイルを解凍します。
- Apache SubversionおよびCVS バージョン コントロールシステム。これらは、zlib を使用してリモート リポジトリとの間のトラフィックを圧縮します。
- Apache ORC列指向データストレージ形式では、デフォルトの圧縮方法としてZLibが使用されます。[10]
- Gitバージョン管理システムは、 zlib を使用してデータ オブジェクト (BLOB、ツリー、コミット、タグ) の内容を保存します。
- PostgreSQL RDBMS は、データベース のバックアップにカスタム ダンプ形式 (pg_dump -Fc) の zlib を使用します。
- Microsoft .NET Framework 2.0以降のSystem.IO.Compression.DeflateStreamクラス。 [11]
- Wind River Systems社製のVxWorksオペレーティング システムの一部である TORNADO の「deflate」ユーティリティは、zlib を使用してブート ROM イメージを圧縮します。
- zlib-flate、[12]生のzlib圧縮プログラム、qpdfの一部[13]
- MySQL RDBMSはInnoDB テーブルの圧縮にZLib LZ77を使用している[14]
zlib は、コードが移植可能で、ライセンスが柔軟であり、メモリ フットプリントが比較的小さいため、 Apple iPhoneや Sony PlayStation 3などの多くの組み込みデバイスでも使用されています。
フォーク
zlib は、古いコードベース上に構築されたよく使用されるライブラリであり、このライブラリの改善を主張するサードパーティによって 頻繁にフォークされています。
- Intelはzlibの高性能フォークを持っています。[15]
- Cloudflareは「大規模な」改善を加えた高性能フォークを維持しています。[16]
- zlib-ngは「次世代」システム向けのzlib代替フォークです。ANSI Cをサポートしていないコンパイラの回避コードを削除し、CloudflareとIntelの最適化を統合し、ハードウェアアクセラレーション(SIMDと組み込み関数)を追加し、コードサニタイザー、ファジング、コードカバレッジを使用してバグの発見を支援します。[17]
参照
参考文献
- ^ Adler, Mark (2024年1月22日). 「[Zlib-announce] zlib 1.3.1 リリース」 . 2024年1月23日閲覧。
- ^ Stutz, Michael (2004 年 10 月 22 日)。Linux クックブック、第 2 版: 日常使用のヒントとテクニック。No Starch Press。ISBN 9781593270315. 2023年1月25日時点のオリジナルよりアーカイブ。2021年10月28日閲覧– Google Books経由。
- ^ Loki Software; Hall, John R. (2001 年 10 月 22 日)。プログラミング Linux ゲーム。No Starch Press。ISBN 9781886411494. 2024年7月11日時点のオリジナルよりアーカイブ。2021年10月28日閲覧– Google Books経由。
- ^ ab RFC 1950. doi : 10.17487/RFC1950 .
- ^ RFC 1951. doi : 10.17487/RFC1951 .
- ^ RFC 1952. doi : 10.17487/RFC1952 .
- ^ RFC 1951. doi : 10.17487/RFC1951 .
- ^ Gailly, Jean-loup; Adler, Mark (2002-04-18), zlib アプリケーション、2019-06-10 にオリジナルからアーカイブ、2007-12-09に取得
- ^ 「c++ - cURL が zlib を使用するのはなぜですか?」。Stack Overflow。
- ^ “ORCFile in HDP 2: Better Compression, Better Performance”. 2013年9月6日. 2020年8月6日時点のオリジナルよりアーカイブ。 2020年5月16日閲覧。
- ^ System.IO.Compression.DeflateStream は、Wayback Machineで 2016 年 2 月 6 日にアーカイブされています。MSDN ライブラリ。
- ^ – Debian一般コマンドマニュアル
- ^ “qpdf”. 2024年7月11日時点のオリジナルよりアーカイブ。2021年3月28日閲覧。
- ^ 「MySQL :: MySQL 8.0 リファレンスマニュアル :: 15.9.1.5 InnoDB テーブルの圧縮の仕組み」。dev.mysql.com。2021年8 月 1 日時点のオリジナルよりアーカイブ。2021年 7 月 14 日に取得。
- ^ “github Intel ZLIB”. github . 2024年1月25日. 2024年1月25日時点のオリジナルよりアーカイブ。 2024年1月25日閲覧。
- ^ 「がんと闘う:コードをオープンソース化することの予期せぬメリット」。Cloudflareのブログ。2015年7月8日。2019年9月21日時点のオリジナルよりアーカイブ。2020年1月18日閲覧。
- ^ Rosbach, HK (2023年2月24日). 「zlib-ng/zlib-ng: 「次世代」システム向けに最適化されたzlibの置き換え」. GitHub . zlib-ng. 2020年4月20日時点のオリジナルよりアーカイブ。2020年1月18日閲覧。
外部リンク
- 公式サイト
