Xz (ファイルフォーマット)

xzとは



xzは、データ圧縮プログラムであり、その圧縮データのフォーマットを指します。LZMA/LZMA2圧縮アルゴリズムを利用しており、高い圧縮率を実現できる点が特徴です。xz自体にはアーカイブ機能がないため、複数のファイルをまとめる際はtarコマンドと組み合わせて使用するのが一般的です。

他の圧縮形式との比較



xzは、以前から使用されていたgzipやbzip2と比較すると、圧縮時にはより多くの時間とメモリを消費します。しかし、圧縮率では概ね優位に立ち、伸張速度はgzipよりは遅いものの、bzip2よりは速い傾向にあります。このため、アーカイブ配布用途において、tarとgzip、tarとbzip2の組み合わせと並んで採用されており、bzip2の代替として利用されるケースが増えています。

実装



XZ Utilsは、xzファイルを作成・展開するためのコマンドラインツールである`xz`と、プログラムからxzファイルを扱うためのライブラリ`liblzma`を含んでいます。XZ Utilsのバージョン4.999.9beta以降は、GNU LGPLおよびGNU GPLでライセンスされています。過去のソフトウェア(例えば、liblzma)はパブリックドメインで提供されています。

主要なアーカイブツールであるGNU tarはバージョン1.22から、gzipやbzip2と同様に、透過的にxzファイルを扱えるようになりました。bsdtarでも同様に利用可能です。また、7-Zipはバージョン9.04betaからxzをサポートしています。

xzに対する批判



lzipの作者は、xzの設計上の問題点を指摘し、長期的なアーカイブ用途には不適切であるという見解を示しています。具体的な批判点は以下の通りです。

バージョン情報がなく、実装間の相互運用性が保証されていない
拡張性に不合理な点があり、問題がある
フラグや長さフィールドの保護が脆弱である
LZMA2はオリジナルのLZMAよりもデータロスに対して安全性が低く、効率も劣る
無駄な機能が含まれており、破損の誤認識を増加させる
末尾のデータの扱いが一貫していない
エラー検出精度がbzip2、gzip、lzipと比較して低い

用途例



xzは、以下のような用途で利用されています。

GNU Core Utilitiesバージョン7.1以上やLinuxカーネルソースコードアーカイブの圧縮
Fedora、FreeBSD、Slackware Linux、CRUX、Funtoo、Debian (.deb) などの圧縮パッケージ
Arch LinuxUbuntuでは過去に使用されていたが、現在はZstandardに切り替えられている

バックドア事件



XZ Utils 5.6.0および5.6.1にバックドアが仕掛けられていることが判明しました。このバックドアは、sshdの認証を突破し、不正アクセスを可能にするものでした。発覚後、GitHubのリポジトリは一時的に非公開となりましたが、2024年7月22日現在、再び公開されています。

関連情報



XZ Utils
LZMA2
可逆圧縮
lzip

参考資料



* Decompressors: Add XZ decompressor module - Linuxカーネル2.6.38以降で、カーネルイメージ圧縮専用モジュールとしてxzが採用されたことに関する記事。

もう一度検索

【記事の利用について】

タイトルと記事文章は、記事のあるページにリンクを張っていただければ、無料で利用できます。
※画像は、利用できませんのでご注意ください。

【リンクついて】

リンクフリーです。