GZ

¿Qué es un archivo GZ?

Comprime un único archivo. Junto con TAR forma el archivo comprimido habitual en Unix.

Qué es GZ

GZ es un formato de flujo, que se escribe y se lee de principio a fin. Se usa para la web y el archivado.

La extensión es .gz y el nombre completo, Gzip Archive. Ambos importan menos que lo que el archivo puede contener, y de eso trata el resto de esta página.

De dónde viene GZ

Se remonta a 1992. La especificación es RFC 1952.

A un formato que lleva tanto tiempo siendo legible se le puede confiar algo que quieras recuperar dentro de diez años.

La especificación es pública

Está publicada entera, así que cualquiera puede implementarla leyendo el documento en vez de a base de inspeccionar archivos. Por eso aparece en tantos programas, y por eso los archivos escritos hace veinte años siguen abriéndose hoy. Publicada no quiere decir libre de regalías: cuando un formato envuelve un códec, la licencia de las patentes es un asunto aparte que la norma no resuelve.

No se tira nada

GZ guarda su contenido exactamente. Volver a guardarlo no cambia nada, así que puedes abrirlo, editarlo y guardarlo tantas veces como quieras sin acumular daño; eso es lo que lo convierte en un formato de trabajo y no de entrega.

Contiene exactamente un archivo

GZ comprime un solo flujo y no tiene ninguna noción de nombre de archivo ni de carpeta. Por eso se ve tan a menudo junto a TAR, que aporta la estructura que le falta.

Qué más puede llevar

GZ puede contener una disposición que le permite empezar a reproducirse antes de haber llegado entero.

Eso importa sobre todo al convertir: lo que el destino no puede contener se descarta, casi siempre sin aviso.

De dónde sale su ratio de compresión

Trabaja por tramos de 32 KB: para que una repetición se pueda comprimir, tiene que caber entera dentro de uno.

Ese único número explica la mayor parte de la diferencia entre un formato de archivo comprimido y otro. Un tramo mayor encuentra más repetición y tarda más y gasta más memoria en hacerlo: ese es todo el intercambio.

Qué hace para protegerse

GZ lleva una suma de verificación, para que un archivo dañado se detecte en vez de leerse mal en silencio.

Una suma de verificación no repara nada. Te dice que el archivo está mal, que es la diferencia entre enterarte ahora y enterarte por la persona a la que se lo enviaste.

Qué abre GZ

gzip, 7-Zip y Keka lo leen, y también la mayoría de programas del mismo tipo.

Cuando un archivo no se abre, el formato rara vez es el problema: lo más habitual es que el programa sea anterior al formato. Convertir a algo más antiguo es la salida fiable, y para eso está el resto de este sitio.

Abrirlo en el navegador

Ningún navegador lo lee.

Ese es el motivo más frecuente para convertirlo: no que el formato sea malo, sino que el sitio donde quieres mostrar el archivo no sabe leerlo.

Es un formato de entrega

GZ está pensado para entregarse, no para trabajar dentro. Editar uno es posible y rara vez agradable; lo sensato es cambiar el original y volver a exportar.

Qué sale mal con él

Las quejas recurrentes: guarda un único flujo y no sabe describir una carpeta.

Nada de esto es motivo para evitar el formato. Son las cosas que conviene conocer antes de que una de ellas te sorprenda, que es una afirmación distinta y más útil.

Entra un archivo y sale un archivo: no es un contenedor de varios

Gzip comprime un solo flujo. No tiene directorio, ni lista de nombres, ni la noción de varios archivos. Comprime notas.txt y obtienes notas.txt.gz; dentro no hay nada más, y al descomprimirlo recuperas exactamente un archivo.

De ahí que la forma habitual sea .tar.gz y que la extensión tenga dos partes. Tar reúne un árbol de carpetas en un único flujo y gzip comprime ese flujo, y la cadena se lee de derecha a izquierda. Si descomprimes un .gz esperando una carpeta, lo que sale es el archivo único que se comprimió, que es todo lo que el formato ha guardado nunca.

La mayor parte del gzip del mundo no es un archivo

Es una respuesta HTTP. Prácticamente todos los servidores web comprimen con gzip el HTML, el CSS, el JavaScript y el JSON antes de enviarlos, el navegador los descomprime sin que nadie se entere y en ningún extremo se escribe un .gz. Eso ocurre miles de millones de veces al día y es invisible.

Es la razón de que gzip esté en todas partes y de que su velocidad importe más que su ratio. Un servidor que comprime una respuesta tiene milisegundos, no segundos: un compresor que apretara un diez por ciento más a cambio de diez veces el esfuerzo sería el intercambio equivocado a esa escala, y ese es exactamente el intercambio que xz acepta y gzip rechaza.

DEFLATE, el mismo algoritmo que hay dentro de ZIP y de PNG

Gzip usa DEFLATE: búsqueda de repeticiones al estilo LZ77 contra una ventana de 32 kB, seguida de codificación Huffman. Ese mismo algoritmo comprime cada archivo dentro de un ZIP y cada imagen PNG, que es la razón de que los tres formatos se comporten de forma tan parecida al comprimir.

La ventana de 32 kB es el límite que lo define. Una repetición separada por más distancia que esa no se puede encontrar, y de ahí que gzip pierda con holgura frente a xz y a 7z en archivos grandes con estructura de largo alcance, y también que cueste tan poco ejecutarlo, porque el espacio de búsqueda es pequeño por diseño.

Nació para esquivar una patente

Jean-loup Gailly y Mark Adler publicaron gzip en 1992 para sustituir al compress de Unix, que usaba LZW: el algoritmo sobre el que Unisys tenía patentes y empezó a hacerlas valer, la misma disputa de la que salió PNG como sustituto de GIF.

DEFLATE se diseñó para estar libre de cargas y se publicó como RFC 1951 para que cualquiera pudiera implementarlo. Esa decisión es la que acabó metiéndolo dentro de ZIP, de PNG, de HTTP y de innumerables protocolos: era el compresor suficientemente bueno que nadie tenía que pedir permiso para usar.

Los niveles, y por qué el que trae por defecto está bien

Gzip ofrece niveles del 1 al 9. El 1 es rápido y descuidado, el 9 busca todo lo que puede y el 6 es el valor por defecto. La diferencia entre el 6 y el 9 suele ser de un par de puntos porcentuales de tamaño a cambio de un aumento sustancial de tiempo, que es un mal negocio en casi cualquier situación.

La velocidad de descompresión es prácticamente constante sea cual sea el nivel usado, y es alta: cientos de megabytes por segundo en hardware corriente. Esa asimetría define al formato: barato de leer, bastante barato de escribir y nunca notable en ninguna de las dos cosas.

Qué guarda sobre el archivo original

La cabecera puede llevar el nombre original del archivo, una marca de tiempo de modificación y un comentario, y al final se coloca una suma de comprobación CRC32 de los datos sin comprimir. Esa suma hace que la corrupción se detecte al descomprimir en lugar de producir en silencio un resultado incorrecto.

El nombre guardado explica que al descomprimir aparezca a veces un archivo con un nombre distinto del que llevaba el .gz. Y es además un detalle de privacidad que merece la pena conocer: un .gz puede seguir llevando dentro el nombre o la ruta originales aunque lo hayas renombrado antes de enviarlo.

Se puede concatenar, que es raro y muy útil

Unir dos archivos gzip con una simple copia produce un archivo gzip válido que contiene los dos, en orden. Los descompresores lo resuelven sin que haya que avisarles de nada.

Por eso se apoyan en él la rotación de registros, las tuberías de datos en continuo y los sistemas de recolección: un proceso puede ir añadiendo trozos comprimidos según llegan sin reescribir ni volver a leer lo anterior. Ni ZIP ni 7z saben hacer eso, y es buena parte de la razón de que gzip siga instalado en la infraestructura.

Dónde ganan las alternativas

xz comprime alrededor de un treinta por ciento más en texto y tarda mucho más, lo que encaja con una descarga que se hace muchas veces. zstd iguala la velocidad de gzip comprimiendo cerca de xz, y por eso está desplazándolo en formatos de paquete y en sistemas de copia de seguridad. Brotli le gana en la web y lo admite cualquier navegador.

La ventaja que le queda a gzip es estar presente en todas partes sin instalarlo, configurarlo ni explicarlo. No es poco, pero para un sistema nuevo en lugar de uno existente, hoy zstd suele ser el valor por defecto más sensato.

Cuándo pasarlo a ZIP y cuándo no tocarlo

Cuando va dirigido a una persona y no a una máquina. ZIP es lo que abre sin ayuda una instalación de Windows o de macOS recién salida de la caja, y mandarle un .tar.gz a alguien que no es técnico es pedirle en voz baja que resuelva un problema.

No lo conviertas cuando vuelve a un sistema Unix. Reempaquetar como ZIP descarta los permisos, la propiedad y los enlaces simbólicos que llevaba el tar, y el resultado extraído puede no funcionar. Para una copia de un servidor o una distribución de código fuente, el .tar.gz no es un obstáculo que rodear: es la razón de que el archivo sirva. Lo que sí sale intacto en cualquier caso son los archivos: salen byte a byte, y lo único que no sobrevive es lo que el contenedor guardaba sobre ellos y no dentro de ellos.

Estas conversiones sí suben el archivo, y hasta 25 MB

El trabajo con archivos comprimidos lo hace 7-Zip, que no corre en un navegador, así que aquí el archivo se envía. Va a api.quinvert.com, se escribe en una carpeta temporal recién creada bajo un nombre neutro, de modo que tu nombre de archivo no llega al disco, y esa carpeta se borra al terminar, incluidas todas las rutas de error. El contenedor que ejecuta las herramientas no tiene salida a internet.

Los números de ese camino son distintos de los del resto de la web: 25 MB por archivo en lugar de 100, y un tope de 100 conversiones de servidor al día que se reinicia a medianoche UTC. Un .gz comprimido de 25 MB puede contener mucho más una vez expandido, y por eso la expansión declarada está limitada a 2 GiB.

Los datos, en un solo sitio

Identificadores y procedencia del formato GZ.
Extensión.gz, .tgz
Tipo de medioapplication/gzip
Primera publicación1992
EspecificaciónRFC 1952