GZ

Che cos’è un file GZ?

Comprime un file solo. Insieme a TAR forma l’archivio abituale su Unix.

Che cos’è GZ

GZ è un formato di flusso, scritto e letto dall’inizio alla fine. Si usa per il web e l'archiviazione.

L’estensione è .gz e il nome per esteso è Gzip Archive. Contano entrambi meno di ciò che il file può contenere, ed è di questo che parla il resto della pagina.

Da dove viene GZ

Risale al 1992. La specifica è RFC 1952.

A un formato rimasto leggibile così a lungo si può affidare qualcosa che vuoi ritrovare fra dieci anni.

La specifica è pubblica

È pubblicata per intero, quindi la si può implementare partendo dal documento invece che per osservazione: è per questo che il formato compare in così tanti programmi, ed è per questo che file scritti vent’anni fa si aprono ancora. Una specifica pubblicata però non è la stessa cosa di una esente da royalty: dove un formato incapsula un codec, le licenze sui brevetti restano una questione a parte che lo standard non risolve.

Non si butta via niente

GZ conserva il suo contenuto esattamente. Risalvarlo non cambia nulla, quindi puoi aprirlo, modificarlo e risalvarlo quante volte vuoi senza accumulare danni: è questo che ne fa un formato di lavoro e non di consegna.

Contiene esattamente un file

GZ comprime un solo flusso e non ha alcuna nozione di nome di file o di cartella. È per questo che lo si vede così spesso in coppia con TAR, che fornisce la struttura che gli manca.

Che altro può portare

GZ può contenere una disposizione che gli permette di partire prima di essere arrivato per intero.

Conta soprattutto in conversione: quello che la destinazione non può contenere viene lasciato cadere, di solito senza avvisare.

Da dove viene il suo rapporto di compressione

Lavora su 32 KB alla volta: la ripetizione deve cadere tutta dentro questo spazio perché possa essere compressa via.

Quel solo numero spiega quasi tutta la differenza fra un formato di archivio e un altro. Uno spazio più grande trova più ripetizioni e ci mette più tempo e più memoria a farlo: tutto lo scambio è qui.

Che cosa fa per proteggersi

GZ porta con sé un codice di controllo, così un file danneggiato viene rilevato invece che letto male in silenzio.

Un codice di controllo non ripara nulla. Ti dice che il file è rovinato, ed è la differenza fra scoprirlo adesso e scoprirlo da chi te lo fa notare dopo averlo ricevuto.

Che cosa apre GZ

gzip, 7-Zip e Keka lo leggono, e così fanno quasi tutti i programmi dello stesso tipo.

Quando un file non si apre, il formato è raramente il problema: più spesso è il programma a essere più vecchio di lui. Convertire in qualcosa di più vecchio è la via d’uscita affidabile, ed è a questo che serve il resto di questo sito.

Aprirlo nel browser

Nessun browser lo legge.

È di gran lunga il motivo più comune per convertirlo: non che il formato sia scadente, ma che il posto in cui vuoi mostrare il file non sappia leggerlo.

È un formato di consegna

GZ è pensato per essere consegnato, non per lavorarci dentro. Modificarne uno è possibile e raramente piacevole; la strada sensata passa dall’originale e da una nuova esportazione.

Che cosa va storto con lui

Le lamentele ricorrenti: tiene un solo flusso e non sa descrivere una cartella.

Nessuna di queste è un motivo per evitare il formato. Sono le cose che conviene conoscere prima che una di loro ti sorprenda, che è un’affermazione diversa e più utile.

Entra un file ed esce un file: non è un contenitore di più elementi

Gzip comprime un solo flusso. Non ha directory, né lista di nomi, né la nozione che ci possano essere più file. Comprimete note.txt e ottenete note.txt.gz; dentro non c’è altro, e decomprimendolo recuperate esattamente un file.

Ecco perché la forma abituale è .tar.gz e l’estensione ha due parti. Tar riunisce un albero di cartelle in un unico flusso e gzip comprime quel flusso, e la catena si legge da destra a sinistra. Se decomprimete un .gz aspettandovi una cartella, ciò che esce è il singolo file che era stato compresso, tutto ciò che il formato ha mai salvato.

La maggior parte del gzip nel mondo non è un file

È una risposta HTTP. Praticamente tutti i server web comprimono con gzip HTML, CSS, JavaScript e JSON prima di inviarli, il browser li decomprime senza che nessuno se ne accorga e su nessuno dei due lati viene scritto un .gz. Questo avviene miliardi di volte al giorno ed è invisibile.

È il motivo per cui gzip è dappertutto e per cui la sua velocità conta più del suo rapporto di compressione. Un server che comprime una risposta ha millisecondi, non secondi: un compressore che stringesse un dieci per cento in più al prezzo di dieci volte lo sforzo sarebbe lo scambio sbagliato a quella scala, ed è esattamente lo scambio che xz accetta e gzip rifiuta.

DEFLATE, lo stesso algoritmo dentro ZIP e PNG

Gzip usa DEFLATE: ricerca di ripetizioni in stile LZ77 su una finestra di 32 kB, seguita da codifica Huffman. Lo stesso algoritmo comprime ogni file dentro uno ZIP e ogni immagine PNG, motivo per cui i tre formati si comportano in modo così simile durante la compressione.

La finestra di 32 kB è il limite che lo definisce. Una ripetizione separata da una distanza maggiore non si può trovare, ed è per questo che gzip perde ampiamente contro xz e 7z sui file grandi con struttura a lungo raggio, e anche per questo costa così poco eseguirlo, perché lo spazio di ricerca è piccolo per progetto.

È nato per aggirare un brevetto

Jean-loup Gailly e Mark Adler pubblicarono gzip nel 1992 per sostituire il compress di Unix, che usava LZW: l’algoritmo su cui Unisys deteneva brevetti e cominciò a farli valere, la stessa disputa da cui nacque il PNG come sostituto del GIF.

DEFLATE fu progettato per essere libero da vincoli e pubblicato come RFC 1951 così che chiunque potesse implementarlo. Questa decisione lo ha portato dentro ZIP, PNG, HTTP e innumerevoli protocolli: era il compressore abbastanza buono che nessuno doveva chiedere il permesso di usare.

I livelli, e perché quello predefinito va bene

Gzip offre livelli da 1 a 9. L’1 è veloce e sommario, il 9 cerca tutto ciò che può e il 6 è il valore predefinito. La differenza fra 6 e 9 è di solito un paio di punti percentuali di dimensione in cambio di un aumento sostanziale di tempo, un cattivo affare in quasi ogni situazione.

La velocità di decompressione è praticamente costante indipendentemente dal livello usato, ed è alta: centinaia di megabyte al secondo su hardware comune. Questa asimmetria definisce il formato: economico da leggere, ragionevolmente economico da scrivere, e mai notevole in nessuno dei due aspetti.

Che cosa conserva sull’originale

L’intestazione può portare il nome originale del file, una data di modifica e un commento, e alla fine viene posta una somma di controllo CRC32 dei dati non compressi. Questa somma fa sì che la corruzione venga rilevata alla decompressione invece di produrre in silenzio un risultato sbagliato.

Il nome salvato spiega perché a volte, decomprimendo, compaia un file con un nome diverso da quello che aveva il .gz. Ed è anche un dettaglio di privacy da conoscere: un .gz può ancora portare al suo interno il nome o il percorso originali anche se lo avete rinominato prima di inviarlo.

Si può concatenare, il che è raro e molto utile

Unire due file gzip con una semplice copia produce un file gzip valido che li contiene entrambi, in ordine. I decompressori lo gestiscono senza bisogno di alcun avviso.

Ecco perché su questo si appoggiano la rotazione dei log, le pipeline di dati in streaming e i sistemi di raccolta: un processo può continuare ad aggiungere blocchi compressi man mano che arrivano senza riscrivere né rileggere ciò che c’era prima. Né ZIP né 7z sanno farlo, ed è buona parte del motivo per cui gzip resta installato nell’infrastruttura.

Dove vincono le alternative

xz comprime circa il trenta per cento in più su testo e impiega molto più tempo, il che si adatta a un download fatto molte volte. zstd eguaglia la velocità di gzip comprimendo vicino a xz, motivo per cui lo sta soppiantando nei formati pacchetto e nei sistemi di backup. Brotli lo batte sul web ed è supportato da qualsiasi browser.

Il vantaggio che resta a gzip è essere presente ovunque senza installarlo, configurarlo o spiegarlo. Non è poco, ma per un sistema nuovo piuttosto che uno esistente, oggi zstd è di solito la scelta predefinita più sensata.

Quando convertirlo in ZIP e quando lasciarlo stare

Quando è destinato a una persona e non a una macchina. ZIP è ciò che apre senza aiuto un’installazione appena tolta dalla scatola di Windows o macOS, e mandare un .tar.gz a qualcuno non tecnico significa chiedergli in silenzio di risolvere un problema.

Non convertitelo quando torna a un sistema Unix. Reimpacchettare come ZIP scarta i permessi, la proprietà e i collegamenti simbolici che tar portava con sé, e il risultato estratto può non funzionare. Per una copia di un server o una distribuzione di codice sorgente, il .tar.gz non è un ostacolo da aggirare: è il motivo per cui il file funziona. Ciò che comunque esce intatto sono i file: escono byte per byte, e l’unica cosa che non sopravvive è ciò che il contenitore sapeva su di essi e non dentro di essi.

Queste conversioni caricano davvero il file, fino a 25 MB

Il lavoro con gli archivi compressi lo fa 7-Zip, che non gira in un browser, quindi qui il file viene inviato. Va su api.quinvert.com, viene scritto in una cartella temporanea appena creata sotto un nome neutro, così il vostro nome di file non arriva sul disco, e quella cartella viene cancellata al termine, comprese tutte le vie di errore. Il contenitore che esegue gli strumenti non ha accesso a internet.

I numeri di questa via sono diversi dal resto del sito: 25 MB per file invece di 100, e un tetto di 100 conversioni server al giorno che si azzera a mezzanotte UTC. Un .gz compresso da 25 MB può contenere molto di più una volta espanso, ed è per questo che l’espansione dichiarata è limitata a 2 GiB.

I dati, in un posto solo

Identificativi e provenienza del formato GZ.
Estensione.gz, .tgz
Tipo di mediaapplication/gzip
Prima pubblicazione1992
SpecificaRFC 1952