Por estos días estoy con poco tiempo para redactar largos y originales artículos para nuestro espacio Web, pero hoy voy a hacer el esfuerzo para tocar un tema que puede ser de interés para muchos: hoy hablaremos de Formatos de Compresión de Archivos. No estaremos brindando una guía de uso ni nada por el estilo, simplemente tocaré el tema y dejaré lo poco que conozco al respecto y ustedes podrán con sus comentarios enriquecer al artículo, así todos nos beneficiaremos y aprenderemos, ya que el libre flujo del conocimiento es la principal premisa y razón de ser de nuestro Portal.
Hablando de formatos de compresión de archivos
Comprimir archivos y descomprimirlos, es una tarea clave para cualquier usuario de computadoras. Los backups o respaldos de datos muchas veces no se hacen con programas complejos y costosos, sino con compresión de carpetas y archivos en lugares seguros donde guardarlos, sean cabinas de discos, discos duros externos o en la nube.
Según nos dice nuestra amiga Wikipedia:
En ciencias de la computación la compresión de datos es la reducción del volumen de datos tratables para representar una determinada información empleando una menor cantidad de espacio. Al acto de compresión de datos se denomina compresión, y al contrario descompresión.
Existen muchos formatos de compresión unos son más famosos que otros. Podemos decir que unos son muy rápidos comprimiendo y usan pocos recursos para ese proceso, y otros son más lentos comprimiendo y usan más recursos, pero tienen mucho mejor nivel de compresión.
La compresión es un caso particular de la codificación, cuya característica principal es que el código resultante tiene menor tamaño que el original. Cuando hablamos de compresión de archivos no solo nos referimos a formatos como RAR o ZIP, también incluimos formatos de compresión multimedia o de imágenes (ej.: MP3, JPG)
Algoritmos de compresión de archivos
Inicialmente, cada formato de compresión estaba diseñado para seguir un determinado algoritmo de compresión. Actualmente, la mayoría de los formatos pueden utilizar diferentes algoritmos. Por ejemplo, varios programas permiten comprimir en formato ZIP pudiendo elegir algoritmo LZMA, deflate o bzip2. Esto explica un problema con el que podemos encontrarnos con frecuencia: algunos compresores comprimen (en formato ZIP, por ejemplo) y los archivos no son reconocidos por otros compresores.
Cuando hablamos de un buen compresor de archivos, debemos basarnos en 3 factores principales (no sólo en el tamaño):
- Tasa o ratio de compresión: Obviamente, cuando más pequeño sea el archivo comprimido, mejor es el compresor.
- Velocidad de compresión: Cuanto menos tarde en realizar la compresión, mejor. También es importante la velocidad de descompresión, que se suele tener en cuenta a parte.
- Memoria RAM utilizada: Otro factor importante es la cantidad de memoria que necesitamos para realizar la descompresión.
Hace algún tiempo alguien en la zona de preguntas y respuestas de humanOS pedía información sobre los mejores sistemas de compresión. Definitivamente la mayoría de los usuarios sólo conoce los formatos más comunes (ZIP, RAR, ACE…), pero existen muchísimos formatos de compresión destinados al almacenamiento de archivos. Tratemos de separarlos en grupos:
Grupo 1: Los más populares o conocidos
El formato más conocido es el ZIP, debido a que, a pesar de ya estar bastante extendido, Microsoft lo incorporó de serie en Windows XP como Carpeta comprimida.
Formato .ZIP
El formato ZIP tiene una triste historia. Originalmente, este formato fue desarrollado por Phil Katz, mediante su famosa utilidad para MSDOS PKZip. Sin embargo, el origen de este formato siempre estuvo marcado por la controversia. Antes de PKZip, pasó por otros nombres como PKPAK y PKARC, este último en referencia a ARC, otro conocido compresor de los años 80, de Thom Henderson.
Thom demandó a Phil, argumentando que PKARC era un plagio de ARC, sólo que era mucho más rápido porque Phil lo tradujo a lenguaje ensamblador. Efectivamente, se encontraron en el código fuente de PKARC comentarios prácticamente idénticos a los de ARC, incluso las mismas faltas de ortografía. Aunque Thom ganó el juicio, no le sirvió de mucho. Phil haría algunas modificaciones y PKZip (debido a su mejor rendimiento) ya era el programa más popular y extendido.
Años más tarde, Phil Katz moriría debido a sus problemas con el alcohol.
Formato .ZIPX
Uno de los programas que más popularizaron el formato ZIP fue WinZip. Phil Katz no era amigo del sistema Windows, por lo que le tomaron ventaja. Más tarde, en WinZip 12 se introdujo el formato ZIPX que no es más que el formato ZIP con distintos algoritmos de compresión (BZip, LZMA, PPMd, JPEG y WAVPack).
Existen muchos formatos que realmente son archivos ZIP renombrados con otra extensión, como por ejemplo, los archivos JAR (Java), APK (aplicaciones Android), CBZ (Comics) o el formato EPA. Te propongo este ejemplo: elige un archivo ODT (un documento de Libre u openOffice), cámbiale la extensión a .zip y ábrelo a ver que tal.
Formato .RAR
Otro de los titanes indiscutibles en el mundo de la compresión fue el formato RAR. A pesar de mejorar sustancialmente la compresión de ZIP, siempre se mantuvo a la sombra del formato ZIP en la época del MSDOS, hasta la actualidad, donde WinRAR lo propulsó hasta convertirse en uno de los más populares (estamos hablando de un formato no abierto, pero como hoy tratamos de un poco de historia, pues haremos la excepción).
Formato .CAB
Aunque para instalaciones y un público más reducido, Microsoft tiene su propio formato de compresión: CAB o Cabinet. Aunque no mucha gente la conoce, existe una herramienta en Windows llamada IExpress que no es más que un interfaz gráfico del comando makecab, que permite crear archivos CAB o, incluso, sencillos programas de instalación. Sin embargo, las tasas de compresión de CAB suelen ser bajas.
Formato .ACE
Quizás, otro de los formatos más conocidos fue el formato ACE, el cuál superaba (en su momento) los ratios de compresión de RAR. Desgraciadamente, su apuesta por ser un formato privativo (junto a su escasa innovación y renovación del formato y programa), poco a poco lo han ido sumiendo en el olvido.
Formato .LHA
LHA fue distribuido como código abierto desde sus primeros años, cuando luchaba por ganar terreno contra el ARJ en plataformas MS-DOS. Aunque el formato LZH/LHA de Haruyasu Yoshizaki se puede considerar como un formato olvidado, este formato sigue siendo muy popular en Japón y varios de los programas mencionados en este artículo permiten comprimir con él. De hecho, en la versión japonesa de Windows 7, se incorpora un complemento para utilizar los archivos LZH como carpetas comprimidas.
Formato .SITX
Por último, no podemos dejar de mencionarel formato SITX (no confundir con Sith), utilizado en sistemas de Apple por la empresa Smith Micro Software en su programa Stuffit.
Grupo 2: Pasaje a lo desconocido (formatos misteriosos)
Formato .ALZ
AlZip es un compresor coreano que se creó en base a la frustración local por tener que utilizar el idioma inglés de WinZip. Poco más tarde, incluirían el formato propio ALZ.
La interfaz del programa permite realizar las tareas más comunes en este tipo de aplicaciones. Destaca también la utilización de unos iconos animados con su mascota, un huevo con ojos que hace referencia a su segundo formato de compresión.
Formato .EGG
Como se contaba en el apartado anterior, AlZip incorpora un segundo formato propio, el formato EGG (huevo), que analiza los tipos de ficheros a comprimir, para aplicarles el mejor método de compresión.
Formato .UHA
Otro formato, quizás de los más conocidos de esta categoría es UHArc, el cuál suele tener un buen rendimiento de compresión y posee una interfaz gráfica, llamada WinUHA.
Formato .NZ
Uno de los compresores que suele liderar las tablas comparativas de compresores es NanoZip. A pesar de ser un compresor aún experimental, sus resultados suelen ser siempre muy buenos.
Otros formatos
Existen muchos otros formatos desconocidos dignos de mención, como por ejemplo CCM, FLZ de FlashZip o DGCA, los cuales consiguen generalmente buenas tasas de compresión y rendimiento.
Grupo 3: Abuelos que siguen dando batalla (formatos antiguos que siguen dando batalla)
Existen varios formatos que se pueden considerar como obsoletos, ya que o no poseen interfaz gráfica y han dejado de utilizarse o han sido reemplazados por otros compresores mejores. Aún así, comentaré brevemente los más relevantes.
Formato .ARJ
Quizás el más famoso de esta categoría sea ARJ. Se popularizó bastante en la época de MS-DOS (debido a su soporte multivolumen que permitía guardar en varios diskettes), pero sufrió la extensión masiva de PKZip, que acabó reemplazándolo. La falta de interfaz gráfica para Windows acabó matándolo, ya que la única existente fue WinARJ y era más fea que los administradores de ventanas que usa mi hermanito @Hyuuga_Neji.
Formato .AIN
Otro compresor muy utilizado en la época de MSDOS fue AIN Archiver, de Transas Marine, el cual mejoraba los ratios de compresión de ARJ (no siempre).
Formato .ZOO
Otro de los clásicos de mediados de los 80 fue el formato ZOO, aún soportado como lectura en algunos programas de compresión. Fue desarrollado por Rahul Dhesi y se basaba en el algoritmo LZW de compresión.
Formato .ACB
Por último, otro de los compresores que quizás te podrían sonar, fue el ACB, de George Buyanovsky. Conseguía muy buenos resultados, a cambio de un tiempo de compresión bastante superior.
Grupo 4: Los pesos pesados (comprimen mucho pero se chupan nuestros recursos)
Uno de los factores importantes a tener en cuenta es el del uso de la memoria RAM del equipo. Los compresores de este apartado se basan en ese punto. Consiguen unas tasas de compresión increíblemente buenas (comparadas con otros), sin embargo el nivel de recursos (tanto memoria RAM como tiempo de compresión, o incluso descompresión) suele ser muy exigente.
Formato .PAQ
Este formato, de código abierto, es uno de los que consiguen ratios de compresión más altos, y se han creado multitud de forks utilizando PAQ como base. La mayoría de los formatos comentados a continuación en este grupo, parten de una base de PAQ.
Dos implementaciones podrían ser FrontPAQ y ZPAQ. El primero de ellos no necesita instalación, permite comprimir y descomprimir archivos desde Windows simplemente arrastrándolos hasta su icono. Se basa en PAQ8P, de Andreas Morphis. El segundo es un compresor en línea de comandos.
Formato .RK
WinRK utiliza el formato RK, otro de los pesos pesados que se basa en una implementación cerrada derivada del formato PAQ: PWCM.
Formato .KGB
Otro de los formatos conocidos de este grupo es KGB, de Tomasz Pawlak. KGB Archiver (su interfaz gráfica) permite cómodamente comprimir archivos y/o carpetas, estimando la cantidad de RAM que va a utilizar.
Grupo 5: Los modernos y rebeldes
Los formatos y tecnologías libres (que utilizan formatos sin patentes o restricciones) siempre se terminan por extender con más rapidez que otros. En esta sección veremos dos ejemplos (aunque no son los únicos) de como un formato y programa de compresión de código abierto, puede llegar a ser la opción más interesante (incluso si usas un sistema operativo no libre.
Formato .7Z
Uno de los formatos que ya tardaba en aparecer era 7z. Es el formato propio del compresor 7zip, el cuál es de código abierto y superior en redimiento a los clásicos formatos zip o rar. Se trata de un compresor muy eficiente y sencillo. Además, 7zip permite comprimir con diferentes algoritmos: 7z (LZMA, LZMA2, PPMd y bzip2) y zip (deflate, deflate64, bzip2, LZMA y PPMd).
Formato .ARC
Por otra parte, tenemos ARC (no confundir con el formato ARC de SEA). Se trata de un nuevo formato ARC que gestiona el compresor de código abierto FreeARC.
Una de las cosas que destacan de este compresor es que tiene un formato de alto rendimiento que utiliza algoritmos conocidos para crear sus archivos ARC. En la pestaña de compresión se puede elegir los siguientes perfiles:
Nivel de | Método | RAM necesaria para | Velocidad | ||
---|---|---|---|---|---|
Compresión | Comprimir | Descomprimir | Comprimir | Descomp. | |
Máximo | ccm | 2,5GB | 1GB | 3MB/s | 3-40MB/s |
Alta | uharc | 288MB | 192MB | 3MB/s | 3-40MB/s |
Normal | 7z | 288MB | 160MB | 5MB/s | 5-60MB/s |
Rápida | rar | 288MB | 160MB | 10MB/s | 10-60MB/s |
Muy rápida | bzip2 | 288MB | 192MB | 20MB/s | 15-100MB/s |
Ultra rápida | zip | 4MB | 8MB | 50MB/s | 120MB/s |
Junto a NanoZip suele quedar en los primeros puestos de rendimiento y eficiencia, en las comparativas de compresión.
Otros formatos
Existen otros formatos menos extendidos también dignos de mención, como pueden ser el formato QUAD, BALZ y LZPX, los tres diseñados por Ilya Muravyov.
Grupo 6: Los holgazanes (hay que darles todo junto)
Existen ciertos compresores (como bzip2 o gzip) que sólo son capaces de realizar la compresión sobre un sólo fichero. A esto se le denomina compresión sólida. No hay mayor problema, ya que lo que se suele hacer es empaquetar todos los archivos en un sólo fichero (utilizando tar, por ejemplo).
Es por eso que estos archivos se suelen denominar tar.gz o tar.bz2, para diferenciarlos de si están sólo empaquetados (.tar), o empaquetados y comprimidos.
Formato .GZ
Probablemente, uno de los formatos más extendidos es gz (gzip), el cuál es una evolución del formato z (compress). Es muy utilizado en entornos GNU/Linux y se basa en el algoritmo deflate (utiliza la popular librería zlib).
Desde hace un tiempo, Google ha publicado zopfli, un compresor que mejora el ratio de gzip (un 5%) manteniendo la compatibilidad y la velocidad de descompresión. Eso sí, la velocidad de compresión es 100 veces más lenta, por lo que es ideal para compresión de archivos estáticos y desaconsejable para compresiones al vuelo (on-the-fly).
También existen pigz (gzip paralelo) y snappy, el primero de ellos orientado a «heavy-users» que soporta múltiples procesadores y núcleos, mientras que el segundo podría ser considerado el inverso de zopfli, ya que está orientado para conseguir una mayor velocidad.
Formato .BZ2
Si hablamos de gzip es obligatorio hablar de bzip2, el cuál tiene un mejor ratio de compresión, pero es más lento y utiliza más memoria RAM.
Otros formatos
Algunos formatos destacables similares a gzip o bzip2 son LZ, de Lzip (basado en LZMA), LZO, de Lzop (uno de los compresores más rápidos) o XZ (basada en LZMA2), que es básicamente el mismo formato que 7z, pero con soporte para metadatos. Este último es muy utilizado en distribuciones como Arch Linux.
Un excelente compresor que soporta multitud de formatos y además tiene un interfaz gráfica impecable y un formato de compresión propio (PEA) es PeaZip.
Además, permite utilizar algoritmos concretos en formatos como 7z (LZMA, LZMA2, PPMd y bzip2), zip (deflate, deflate64, bzip2, LZMA y PPMd) o PAQ (LPAQ8, PAQ8o y ZPAQ). También permite personalizar y establecer tu propio formato con el compresor y parámetros externos que especifiques, útil para nuevos formatos.
Grupo 7: Las ratas de laboratorio (es obvio que no son muy usados)
Por último, aunque sólo están disponible en versión de linea de comandos y están en fase experimental, han obtenido muy buenos resultados algunos compresores como CSC32 (de Fu Siyuan) o Hook, ZCM, LZSR, Rings y Yzx.
Conclusiones
Hay mucho más de que hablar en este interesante y variado universo de algoritmos y formatos de compresión de archivos. Se que he dejado muchas cosas sin mencionar, algunas por falta de tiempo y otras (la mayoría) por desconocimiento, o mejor dicho por ignorancia. No obstante, si estás interesado en ver el rendimiento de los diferentes formatos de compresión, sería bueno que veas las siguientes comparativas (visita la Web de cada enlace) donde puedes ver dichos resultados:
- Compression Ratings: Contiene listas técnicas y calculadoras para obtener datos a partir de los parámetros indicados. De las más técnicas y completas. Ofrece los parámetros exactos utilizados y ofrecen los datos reales listos para descargar y comprobar por uno mismo. (2012)
- Squeeze Chart: Comparativa con todo lujo de detalles, separada en tipos de datos y con multitud de información sobre cada compresor. (2013)
- Maximum Compression: Datos organizables por rendimiento, ratio de compresión o velocidad de compresión o descompresión. (2011)
Ahora, los dejo a ustedes para que profundicen más en los comentarios y así aprendemos todos
Google ha estado trabajando paralelamente en Brotli, que aunque no es compatible con Zopfli, logra una compresión rápida y considerablemente alta en contenido web, que es por lo que muchos navegadores lo están integrando como sustituto de gzip. Creo que aun asi no es tan rápido como LZ4 y similares