gzip es un formato de archivo y una aplicación de software que se utiliza para la compresión y descompresión de archivos . El programa fue creado por Jean-Loup Gailly y Mark Adler como un reemplazo de software libre para el programa de compresión utilizado en los primeros sistemas Unix , y destinado a ser utilizado por GNU (de donde se deriva la "g" de gzip). La versión 0.1 se lanzó públicamente por primera vez el 31 de octubre de 1992, y la versión 1.0 le siguió en febrero de 1993.
La descompresión del formato gzip se puede implementar como un algoritmo de streaming , una característica importante para protocolos web , intercambio de datos y aplicaciones ETL (en tuberías estándar ).
gzip se basa en el algoritmo DEFLATE , que es una combinación de codificación LZ77 y Huffman . DEFLATE fue pensado como reemplazo de LZW y otros algoritmos de compresión de datos sujetos a patentes que, en ese momento, limitaban la usabilidad de la utilidad de compresión y otros archivadores populares.
"gzip" también se utiliza a menudo para referirse al formato de archivo gzip, que es:
1f 8b
), el método de compresión ( 08
para DEFLATE), 1 byte de indicadores de encabezado, una marca de tiempo de 4 bytes, indicadores de compresión y el ID del sistema operativo.Aunque su formato de archivo también permite la concatenación de múltiples flujos de este tipo (los archivos comprimidos con gzip simplemente se descomprimen y concatenan como si fueran originalmente un solo archivo), [5] gzip se utiliza normalmente para comprimir solo archivos individuales. [6] Los archivos comprimidos se crean normalmente ensamblando colecciones de archivos en un solo archivo tar (también llamado tarball ), [7] y luego comprimiendo ese archivo con gzip. El archivo comprimido final suele tener la extensión .tar.gz o .tgz .
gzip no debe confundirse con el formato de archivo ZIP , que también utiliza DEFLATE . El formato ZIP puede contener colecciones de archivos sin un archivador externo, pero es menos compacto que los tarballs comprimidos que contienen los mismos datos, porque comprime los archivos individualmente y no puede aprovechar la redundancia entre archivos ( compresión sólida ). El formato de archivo gzip tampoco debe confundirse con el de la utilidad de compresión, basada en LZW, con extensión .Z ; sin embargo, la utilidad gunzip puede descomprimir archivos .Z. [8]
Se han escrito varias implementaciones del programa. La más conocida es la implementación del Proyecto GNU que utiliza la codificación Lempel-Ziv (LZ77). La versión de gzip de OpenBSD es en realidad el programa de compresión , al que se agregó soporte para el formato gzip en OpenBSD 3.4. La 'g' en esta versión específica significa gratis . [9] FreeBSD , DragonFly BSD y NetBSD usan una implementación con licencia BSD en lugar de la versión GNU; en realidad es una interfaz de línea de comandos para zlib destinada a ser compatible con las opciones de las implementaciones GNU. [10] Estas implementaciones provienen originalmente de NetBSD y admiten la descompresión de bzip2 y el formato Unix pack .
Un programa de compresión alternativo que logra una compresión entre un 3 y un 8 % mejor es Zopfli . Logra una compresión compatible con gzip utilizando algoritmos más exhaustivos, a expensas del tiempo de compresión requerido. No afecta el tiempo de descompresión.
pigz
, escrito por Mark Adler, es compatible con gzip y acelera la compresión al utilizar todos los núcleos y subprocesos de CPU disponibles. [11]
Los datos de los bloques anteriores a la primera parte dañada del archivo suelen ser totalmente legibles. Los datos de los bloques que no fueron destruidos por el daño y que se encuentran después pueden recuperarse mediante soluciones alternativas difíciles. [12]
La utilidad tar incluida en la mayoría de las distribuciones Linux puede extraer archivos .tar.gz al pasar la opción z , por ejemplo, tar -zxf file.tar.gz , donde indica la descompresión, significa la extracción y especifica el nombre del archivo comprimido del que se extraerá. Opcionalmente, ( verbose ) enumera los archivos a medida que se extraen. [13]-z
-x
-f
-v
zlib es una abstracción del algoritmo DEFLATE en forma de biblioteca que incluye compatibilidad con el formato de archivo gzip y un formato de flujo de datos liviano en su API. El formato de flujo zlib, DEFLATE y el formato de archivo gzip se estandarizaron respectivamente como RFC 1950, RFC 1951 y RFC 1952.
El formato gzip se utiliza en la compresión HTTP , una técnica utilizada para acelerar el envío de HTML y otros contenidos en la World Wide Web . Es uno de los tres formatos estándar para la compresión HTTP, tal como se especifica en el RFC 2616. Este RFC también especifica un formato zlib (llamado "DEFLATE"), que es igual al formato gzip, excepto que gzip añade once bytes de sobrecarga en forma de encabezados y finales. Aun así, a veces se recomienda el formato gzip en lugar de zlib porque Internet Explorer no implementa el estándar correctamente y no puede manejar el formato zlib como se especifica en el RFC 1950. [14]
zlib DEFLATE es utilizado internamente por el formato Portable Network Graphics (PNG).
Desde finales de los años 1990, bzip2 , una utilidad de compresión de archivos basada en un algoritmo de ordenamiento por bloques, ha ganado cierta popularidad como reemplazo de gzip. Produce archivos considerablemente más pequeños (especialmente para el código fuente y otros textos estructurados), pero a costa de la memoria y el tiempo de procesamiento (hasta un factor de 4). [15]
AdvanceCOMP, Zopfli , libdeflate y 7-Zip pueden producir archivos compatibles con gzip, utilizando una implementación interna de DEFLATE con mejores índices de compresión que el propio gzip, a costa de un mayor tiempo de procesador en comparación con la implementación de referencia. [ cita requerida ]
Una investigación publicada en 2023 mostró que las técnicas de compresión sin pérdidas simples como gzip podrían combinarse con un clasificador de k vecinos más cercanos para crear una alternativa atractiva a las redes neuronales profundas para la clasificación de texto en el procesamiento del lenguaje natural . Se ha demostrado que este enfoque iguala y, en algunos casos, supera a los enfoques convencionales como BERT debido a los bajos requisitos de recursos, por ejemplo, no requiere hardware de GPU . [16]
Actualmente, gunzip puede descomprimir archivos creados con gzip, zip, compress o pack. La detección del formato de entrada es automática.