Pregunta:
Tengo algunos miles de archivos que están comprimidos individualmente con GZip (pasando, por supuesto, el indicador -n
para que la salida sea determinista). Luego van a un repositorio de Git. Acabo de descubrir que para 3 de estos archivos, Gzip no produce el mismo resultado en macOS que en Linux. He aquí un ejemplo:
Mac OS
$ 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.
¿Cómo es esto posible? Pensé que la implementación de GZip era completamente estándar.
ACTUALIZACIÓN: Solo para confirmar que las versiones de macOS y Linux producen el mismo resultado la mayor parte del tiempo, ambos sistemas operativos generan el mismo hash para:
$ echo "Vive la France" | gzip --fast -n | shasum -a 256
af842c0cb2dbf94ae19f31c55e05fa0e403b249c8faead413ac2fa5e9b854768 -
Respuesta:
Tenga en cuenta que el algoritmo de compresión (Deflate) en GZip no es estrictamente biyectivo. Para elaborar: para algunos datos, hay más de una salida comprimida posible según la implementación algorítmica y los parámetros utilizados. Por lo tanto, no hay garantía de que Apple GZip y gzip 1.6 devuelvan la misma salida comprimida . Todas estas salidas son transmisiones GZip válidas, el estándar solo garantiza que todas estas salidas posibles se descomprimirán en los mismos datos originales.