archive formats (zip, tar, gz, 7z, rar, iso, cab)
termoprogramaçãocultura de operaçõessegurança
Formatos de contêiner que juntam arquivos, os comprimem, ou ambos - e a distinção entre esses dois trabalhos é o que a maioria nunca aprende.
Arquivar e comprimir são trabalhos diferentes. O tar junta arquivos e não comprime nada; o gzip comprime um fluxo e não sabe nada sobre arquivos. O ZIP faz os dois, e por isso extrai um arquivo na hora enquanto um .tar.gz não.
A primeira coisa a entender é que arquivar e comprimir são dois trabalhos diferentes, e o mundo Unix os mantém separados enquanto o mundo Windows não. O tar é um arquivador de fita: concatena muitos arquivos em um só, preservando nomes, permissões, propriedade e estrutura de diretórios, e não comprime absolutamente nada. O gzip comprime um único fluxo e não sabe nada sobre arquivos, nomes ou diretórios. Junte os dois e você tem o .tar.gz, a dupla etapa que confunde quem vem da outra tradição: o tar faz de muitos um, o gzip faz o um ficar menor. É por isso que não dá para extrair um único arquivo de um .tar.gz sem descomprimir tudo que vem antes dele, e por que um .zip tira um arquivo entre mil instantaneamente. O ZIP faz os dois trabalhos num formato só, comprimindo cada arquivo separadamente e guardando um índice no final, o que custa um pouco de eficiência de compressão e compra acesso aleatório. Nenhum dos dois projetos está errado; resolviam problemas diferentes, e a diferença ainda aparece toda vez que alguém espera quatro minutos para extrair um arquivo de configuração de um tarball grande. O resto da família se divide pelas mesmas linhas. O 7z é um contêiner com compressão forte, em geral LZMA, ferramentas de código aberto e vantagem real de eficiência em muitos arquivos parecidos, porque consegue comprimir através das fronteiras entre arquivos no que se chama arquivo sólido - o mesmo truque que o deixa lento para extrair um item só. O RAR é proprietário: o descompressor é documentado e livre para implementar, o compressor não, então só o software do fabricante cria um, o que é incomum num mundo de formatos abertos e é a razão de o RAR persistir em algumas comunidades e sumir de outras. O ISO não é compressão nenhuma. É uma imagem setor a setor de um disco óptico, um sistema de arquivos dentro de um arquivo, e por isso montá-lo mostra uma árvore de diretórios em vez de exigir extração, e por isso um ISO de um disco de 700 MB tem 700 MB esteja o disco cheio ou quase vazio. O CAB é o formato cabinet da Microsoft, usado dentro de instaladores e pacotes de driver, e a maioria só o encontra indiretamente. Sobre os utilitários: o 7-Zip é livre, de código aberto e escrito em boa parte por uma pessoa, Igor Pavlov, e lê quase tudo enquanto escreve bem 7z e ZIP; o WinRAR é comercial, é a única coisa que cria arquivos RAR e tem ficha própria aqui por motivos que nada têm a ver com tecnologia; o WinZip foi o padrão comercial dos anos 1990 e é a razão de uma geração usar zipar como verbo; PowerArchiver, PeaZip, Bandizip e outros ocupam o mesmo espaço com equilíbrios diferentes entre preço, cobertura de formatos e quanto tentam lhe vender. Os formatos acima são os sobreviventes, e vale recuperar a era anterior a eles, porque um de seus requisitos sumiu de forma tão completa que o software construído em torno dele foi junto. Nos anos de DOS e BBS a disputa era feroz e os nomes estão meio esquecidos: o ARJ, escrito por Robert Jung, cujo nome ele carrega; o LHA e seu formato LZH, de Haruyasu Yoshizaki, no Japão, que era livre para uso e por isso acabou embutido em uma porção de outros produtos; o ZOO; e o PKZIP defendendo o terreno tomado do ARC. Taxas de compressão eram discutidas como hoje se discute taxa de quadros, e as diferenças eram reais, porque um arquivo que levava nove minutos para baixar a 2400 bauds em vez de onze era melhora concreta. Mas o recurso que decidia qual arquivador você realmente usava era o arquivo multivolume: dividir um arquivo em vários disquetes, cada um deles precisando ser confiável por conta própria, num período em que disquetes falhavam o tempo todo. O ARJ era muito bom nisso, e é por isso que tanta gente que o usou lembra dele com carinho sem conseguir dizer exatamente o que ele fazia melhor - ele fazia a coisa que tornava um arquivo de 20 MB transportável quando nada que você tinha guardava 20 MB. Esse requisito desapareceu por inteiro, primeiro para discos ópticos graváveis e depois para redes, e os formatos otimizados para ele desapareceram junto. Não foram derrotados em compressão nem em licenciamento. O problema que existiam para resolver deixou de ser um problema, que é um tipo de fim mais completo do que perder. Duas notas de segurança pertencem a qualquer descrição honesta. Arquivos compactados são superfície de ataque: uma zip bomb é um arquivo pequeno que se expande em algo enorme, feito para esgotar o que quer que o esteja examinando, e a travessia de caminho em arquivos - extrair um arquivo cujo nome armazenado contém ../ e cai fora do diretório de destino - produziu uma longa linhagem de vulnerabilidades em muitas bibliotecas de extração. Arquivos cifrados também são a forma mais antiga de passar uma carga por um scanner que não consegue ver dentro deles. Se você escreve código que extrai arquivos fornecidos por outra pessoa, trate os nomes lá dentro como entrada hostil, porque são.
Também conhecido como: zip, tar, tar.gz, tarball, gzip, 7z, rar, iso, cab, compressed archive
Fontes
- PKWARE's APPNOTE, the ZIP specification, and the DEFLATE algorithm standardised as RFC 1951
- POSIX tar, GNU tar and gzip documentation; ISO 9660 for optical disc images
- 7-Zip and the LZMA SDK, released by Igor Pavlov under the GNU LGPL