gzip es un formato de archivo y programa libre desarrollado por El Proyecto GNU que reemplaza al programa compress de Unix. Fue creado por Jean-Loup Gailly y Mark Adler, lanzando su primera versión el 31 de octubre de 1992.

Formato de archivo Un archivo gzip (descrito en la tabla siguiente) consta de una cabecera de 10 bytes, campos opcionales de cabecera adicionales, datos comprimidos por Deflate y un tráiler de 8 bytes.

Aunque se pueden concatenar múltiples flujos (los archivos con cierre comprimido simplemente se concatenan como si originalmente fueran un solo archivo), normalmente solo se comprime un único archivo. Los archivos comprimidos suelen crearse ensamblando colecciones de archivos en un único archivo tar (también llamado tarball), y luego comprimiendo ese archivo con gzip. El archivo comprimido final suele tener la extensión .tar.gz, .tgz, .gz, o .gzip.

gzip no debe confundirse con el formato de archivo ZIP, que también utiliza DEFLATE. El formato ZIP puede almacenar 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 .Z. miniaturadeimagen|gzip se puede combinar con el programa tar para comprimir varios archivos.

Estructura del archivo Offset (bytes)CampoTamaño (bytes)Descripción0ID11Número mágico. Debe ser 1F 8B.1ID212CM1Método de compresión. Debe ser 8 (Deflate).3FLG1Flags. Los bits reservados deben ser cero. Bit 0 (LSb): FTEXT. Establecido por el compresor para indicar que la codificación del archivo probablemente es ASCII. Bit 1: FHCRC Bit 2: FEXTRA Bit 3: FNAME Bit 4: FCOMMENT Bit 5: Reservado Bit 6: Reservado Bit 7 (MSb): Reservado4MTIME4Tiempo Unix en el que el archivo fue modificado por última vez. Si los datos comprimidos no provienen de un archivo, MTIME es el tiempo Unix en el que comenzó la compresión. Un valor de 0 significa que no hay una marca temporal disponible.8XFL1Banderas adicionales.

Banderas específicas de Deflate. 0: Ninguna (valor predeterminado) 2: Mejor compresión (nivel 9) 4: Compresión más rápida (nivel 1)9OS1Sistema de archivos en el que se realizó la compresión. 255: Desconocido (valor predeterminado) 0: Sistema de archivos FAT (MS-DOS, OS/2, NT/Win32) 1: Amiga 2: OpenVMS (o VMS) 3: Unix 4: VM/CMS 5: Atari TOS 6: Sistema de archivos HPFS (OS/2, NT) 7: Macintosh 8: Z-System 9: CP/M 10: TOPS-20 11: Sistema de archivos NTFS (NT) 12: QDOS 13: Acorn RISC OS10XLEN0 o 2El campo adicional es una secuencia de subcampos. XLEN indica el tamaño en bytes del campo adicional. Ambos están presentes si la bandera FEXTRA está establecida. Cada subcampo comienza con SI1 SI2 (un identificador de dos bytes; normalmente dos letras ASCII con un valor mnemónico) seguido de un valor de dos bytes LEN que indica el número de bytes restantes en el subcampo. Los identificadores de subcampo con SI2 = 0 están reservados para uso futuro.12Campo adicional0 o XLENVariaNombre del archivoVariaCadena terminada en nulo con el nombre del archivo comprimido. Está presente si la bandera FNAME está establecida. Codificada en ISO 8859-1 (latin-1). Se convierte a minúsculas en sistemas de archivos que no distinguen entre mayúsculas y minúsculas. Está vacía si los datos comprimidos no provienen de un archivo con nombre.Comentario del archivoVariaCadena terminada en nulo con un comentario del archivo destinado al consumo humano. Está presente si la bandera FCOMMENT está establecida. Codificada en ISO 8859-1 (latin-1). Los saltos de línea deben utilizar un único carácter de avance de línea (LF).CRC160 o 2Los dos bytes menos significativos del CRC-32 (ISO 3309) de todos los bytes del archivo gzip hasta (sin incluir) este campo. Está presente si la bandera FHCRC está establecida.Datos comprimidosVariaFlujo Deflate.CRC324CRC-32 (ISO 3309) de los datos sin comprimir.ISIZE4Tamaño (en bytes) de los datos sin comprimir módulo .

Implementaciones Se han escrito diversas implementaciones del programa. La más conocida es la implementación del Proyecto GNU usando código Lempel-Ziv (LZ77). La versión de OpenBSD de gzip es en realidad el programa compress, al que se añadió soporte para el formato gzip en OpenBSD 3.4. La "g" en esta versión específica significa 'gratis'. FreeBSD, DragonFly BSD y NetBSD utilizan una implementación licenciada por 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 de GNU. Estas implementaciones provienen originalmente de NetBSD y soportan la descompresión de bzip2 y el formato Unix, pack.

Un programa alternativo de compresión que logra una mejor compresión entre un 3 y un 8% es Zopfli. Logra una compresión compatible con gzip mediante algoritmos más exhaustivos, a costa del tiempo de compresión requerido. No afecta al tiempo de descompresión.

pigz, escrito por Mark Adler, es compatible con gzip y acelera la compresión utilizando todos los núcleos e hilos de CPU disponibles.

Recuperación de daños Los datos en bloques anteriores a la primera parte dañada del archivo suelen ser completamente legibles. Los datos de bloques no destruidos por daños que se encuentran después pueden recuperarse mediante soluciones difíciles.

Derivados y otros usos La utilidad tar incluida en la mayoría de las distribuciones de Linux puede extraer .tar.gz archivos pasando la opción z, por ejemplo, tar -zxf file.tar.gz, donde -z indica descompresión, -x significa extracción y -f especifica el nombre del archivo comprimido del que se debe extraer. Opcionalmente, -v (verboso) lista los archivos a medida que se extraen.

La librería zlib tiene soporte al formato de archivos de gzip.

El formato gzip se utiliza en la compresión HTTP, una técnica empleada 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 especificados en la 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 cabeceras y remolques. Aun así, a veces se recomienda el formato gzip sobre zlib porque Internet Explorer no implementa correctamente el estándar y no puede manejar el formato zlib especificado en el RFC 1950.

Desde finales de los años 90, bzip2, una utilidad de compresión de archivos basada en un algoritmo de ordenación de bloques, ha ganado cierta popularidad como reemplazo de gzip. Produce archivos considerablemente más pequeños (especialmente para código fuente y otros textos estructurados), pero a costa de memoria y tiempo de procesamiento (hasta un factor de 4).

AdvanceCOMP, Zopfli, libdeflate y 7-Zip pueden producir archivos compatibles con gzip, utilizando una implementación interna de DEFLATE con mejores proporciones de compresión que el propio gzip, a costa de más tiempo de procesador en comparación con la implementación de referencia.

Investigaciones publicadas en 2023 mostraron que técnicas simples de compresión sin pérdidas como gzip podían combinarse con un clasificador K vecinos más próximos 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 métodos convencionales como BERT debido a los bajos requerimientos de recursos, por ejemplo, la ausencia de hardware de GPU.

Referencias

Enlaces externos

Sitio oficial (en inglés)

Categoría:Software del Proyecto GNU Categoría:Software para Linux Categoría:Software para Unix Categoría:Acrónimos de informática Categoría:Compresores de datos libres Categoría:Formatos de archivos informáticos Categoría:Utilidades Unix SUS2008