GZipはmacOSとLinuxで異なる圧縮結果を生成します。

GZipはmacOSとLinuxで異なる圧縮結果を生成します。

数千の個別のGZip圧縮ファイルがあります(もちろん、-n出力は決定的なのでフラグを渡します)。その後、Gitリポジトリに移動します。 3つのファイルについて、GzipがmacOSとLinuxで異なる出力を生成することがわかりました。例は次のとおりです。

アップルシステム

$ cat Engine/Extras/ThirdPartyNotUE/NoRedist/EnsureIT/9.7.0/bin/finalizer | shasum -a 256
0ac378465b576991e1c7323008efcade253ce1ab08145899139f11733187e455  -

$ cat Engine/Extras/ThirdPartyNotUE/NoRedist/EnsureIT/9.7.0/bin/finalizer | gzip --fast -n | shasum -a 256
6e145c6239e64b7e28f61cbab49caacbe0dae846ce33d539bf5c7f2761053712  -

$ cat Engine/Extras/ThirdPartyNotUE/NoRedist/EnsureIT/9.7.0/bin/finalizer | gzip -n | shasum -a 256
3562fd9f1d18d52e500619b4a5d5dfa709f5da8601b9dd64088fb5da8de7b281  -

$ gzip --version
Apple gzip 272.250.1

Linux

$ cat Engine/Extras/ThirdPartyNotUE/NoRedist/EnsureIT/9.7.0/bin/finalizer | shasum -a 256
0ac378465b576991e1c7323008efcade253ce1ab08145899139f11733187e455  -

$ cat Engine/Extras/ThirdPartyNotUE/NoRedist/EnsureIT/9.7.0/bin/finalizer | gzip --fast -n | shasum -a 256
10ac8b80af8d734ad3688aa6c7d9b582ab62cf7eda6bc1a0f08d6159cad96ddc  -

$ cat Engine/Extras/ThirdPartyNotUE/NoRedist/EnsureIT/9.7.0/bin/finalizer | gzip -n | shasum -a 256
cbf249e3a35f62a4f3b13e2c91fe0161af5d96a58727d17cf7a62e0ac3806393  -

$ gzip --version
gzip 1.6
Copyright (C) 2007, 2010, 2011 Free Software Foundation, Inc.
Copyright (C) 1993 Jean-loup Gailly.
This is free software.  You may redistribute copies of it under the terms of
the GNU General Public License <http://www.gnu.org/licenses/gpl.html>.
There is NO WARRANTY, to the extent permitted by law.

Written by Jean-loup Gailly.

どうやってこれができますか? GZipの実装は完全に標準だと思いましたか?

修正する:ほとんどの場合、macOSとLinuxのバージョンが同じ出力を生成することを確認するために、両方のオペレーティングシステムは同じハッシュを出力します。

$ echo "Vive la France" | gzip --fast -n | shasum -a 256
af842c0cb2dbf94ae19f31c55e05fa0e403b249c8faead413ac2fa5e9b854768  -

答え1

GZipの圧縮アルゴリズムは厳密にせん断的ではありません。詳細な説明:一部のデータでは、アルゴリズムの実装と使用されるパラメーターによっては、複数の圧縮出力がある場合があります。したがって、Apple GZipとgzip 1.6が同じ結果を返すという保証はありません。圧縮出力。これらの出力はすべて有効なGZipストリームであり、標準ではこれらの可能な各出力解凍された同じ元データに。

答え2

フォーマットは非常に安定しているはずですが、以下を参照してください。説明。これにはオペレーティングシステムIDフィールドが含まれています。明らかに、これはmacOS、Linux、FreeBSDでは異なる可能性があります。

答え3

Gzip形式は標準ですが、実装は必ずしもそうではありません。 Wikipediaには、独自の実装だけでなく、少なくとも5つのfree / oss独立した実装がリストされています。 Appleは明らかに異なるバージョン文字列を出力します。

フォーマットとアルゴリズムの両方が多くの自由と多様なデザインの選択を可能にします。

バラよりZipファイル:履歴、説明、実装

私は通常、小さなファイルセットに対してのみ異なる実装間で結果が同じであることを期待しています。

答え4

圧縮前のファイルは同じですか? UTF8、Windows、またはLinuxの改行を使用するかどうかにかかわらず、一部のVCSチェックアウトテキストファイルは異なって表示されます。

ソースファイルでSHAコマンドを実行して同じことを確認してください。

圧縮レベル0を試して、機能していることを確認してください。

両方のシステムで異なるエンコードされた単純なファイルをここに公開できます。

両方のシステムでファイルの圧縮が正しく解放されますか? SHAコマンドを再実行してください。

そしていつも自分に聞いてください。それは重要ですか? :)

関連情報