Os explicaba en Me gusta de la informática mi interés desde hace mucho tiempo por todo lo relativo a la compresión. Empecé con el PC usando PKARC/PKPAK, para luego pasar a LHARC y finalmente PKZIP.

Me gustaba de PKZIP su grado de compresión bueno, con una velocidad increíblemente veloz, tanto para comprimir como para descomprimir. Curiosamente PKZIP no era demasiado popular en aquel tiempo, y la gente solía preferir ARJ, bastante más lento, pero con grados de compresión algo superiores, y sobre todo, muchísimas opciones.

Así que cuando a mediados de los años 90, me topé con AIN, un compresor que pretendía ser casi igual de veloz que PKZIP, con un grado de compresión incluso superior al de ARJ, y casi tantas opciones como éste, me pareció un imposible. Un sueño.

Mencioné a AIN en evolución de los compresores, y a AINEXE en
compresores de ejecutables, pero no había tenido la oportunidad de profundizar en sus virtudes, y su historia.

Resulta cuando menos poco habitual encontrarnos con un nuevo contendiente en un mercado suficientemente maduro, como lo eran las herramientas de compresión para DOS a mediados de los años 1990.

De modo que si se quería obtener cuota de mercado, y poder llegar a triunfar, se necesitaba o algo revolucionario que nadie tuviera, o hacer lo mismo de una manera mejor, y en el caso que nos ocupa, AIN, hacía ambas.

Su documentación, era una declaración de intenciones a ese respecto, incluyendo bencharmarks contra sus contemporáneos ARJ 2.41 (1993), PKZIP 2.04g (1993) y LHA 2.13 (1991), donde en efecto se afirmaban unas capacidades cercanas a las de ARJ, con una velocidad comparable a la de PKZIP, y un grado de compresión que decían podía superar al de LHA y ARJ en hasta 1,5 o 2 veces.

Pese a que era capaz de funcionar en un sencillo 8088, una retrocompatibilidad admirable en los tiempos de DOS, por su parte, hacía uso de las nuevas tecnologías, uso de memoria XMS, y EMS, al igual que hacía PKZIP, mientras que por ejemplo ARJ, solamente usaba XMS, LHA ninguna memoria extendida. Por supuesto ofrecía encriptación, al igual que PKZIP y ARJ, aunque LHA no la ofreciera.

Permitía crear archivos autoextraibles (SFX) de forma directa, como ARJ y LHA. Algo que en PKZIP requería un programa separado. Y era capaz de crear archivos comprimidos multivolumen como ARJ, que LHA no permitía, y PKZIP necesitaba un programa separado.

Por si todo esto nos pareciera poco, era además más barato que sus competidores. Aunque LHA era dominio público, el resto se vendían como shareware, costando AIN 20$, ARJ 40$, y PKZIP 47$.

Incluía 3 herramientas en el paquete: AIN, que permitía comprimir y descomprimir, AINEXT que permitía extraer archivos, y que era de libre distribución, y AINEXE que era el compresor de ejecutables. Todos ellos estaban escritos en Borland C++. Para dar ejemplo, todos los ejecutables estaban comprimidos con el propio AINEXE, e incluso en las versiones recientes, AIN se distribuía como un SFX.

Un detalle que nos puede parecer nimio en la actualidad, es que además del progreso de compresión/descompresión de cada fichero, como era habitual, mostraba el grado de avance del proceso completo, es decir, de todos los archivos involucrados.

En mi caso, luego vendría Ultra Compressor II, que acabaría eclipsando a AIN. Sin embargo, es interesante comprobar, como a día de hoy, herramientas modernas como RAR o 7-Zip, dan cierto soporte, por supuesto a ZIP, pero también LHA/LZH y ARJ, pero ninguno a AIN, ni UC2. Como estamos centrados en AIN, vamos a seguir indagando.

El compresor AIN, se creó en 1993 por Transas Marine (UK) Ltd, y pudimos ver al menos las siguientes versiones:
– 2.0: XX/XX/1993
– 2.1: 10/01/1994
– 2.2: 01/07/1994
– 2.21 XX/XX/1994
– 2.30: XX/XX/XXXX
– 2.31: 15/06/1996
– 2.32: 18/11/1996

No hay changelog al respecto, pero si podemos decir, que probablemente 1993 fue una fase de desarrollo y beta, y la primera versión pública fue la 2.1 de 1994 (sólo en ruso), la 2.0 se menciona, pero su difusión fue en todo caso muy escasa. Por tanto fue un producto efímero con poco más de 2 años de vida.

Quizás una de las claves de su fracaso fuera la poca atención al detalle como estamos viendo con el changelog, pero que también apreciamos en la documentación, heredada de la versión 2.21 sin ni siquiera cambiar el encabezado. Probablemente 1993 fue el período de desarrollo y de fase beta, siendo casi seguro la primera versión oficial 2.2.

Una técnica poco habitual en aquella época, era que las cabeceras estaban comprimidas, lo que permitía ahorrar algunos bytes adicionales en los archivos. Además, utilizaba una aproximación a los archivos sólidos, apenas conocidos en aquella época.

Sin consultamos ORDER.TXT vemos sus datos de contacto:
TRANSAS MARINE (UK) LTD
COMMODORE HOUSE
MOUNTBATTEN BUSINESS CENTRE
16/18 MILLBROOK ROAD EAST
SOUNTHAMPTON SO15 1HY, UK
Phone : +44(0)1703 332730
Fax : +44(0)1703 233439

Pero en cambio en AIN.DOC, nos aparece:
Transas Marine (UK) Ltd.
Saint-Petersburg, Russia

Sorprendentemente AIN.DOC, en la versión 2.1, atribuye la autoría a:
Infoservice LTD / LLP Infoservice

Indicando que buscaban un distribuidor para fuera de Rusia. Realmente existe todavía una empresa llamada Transas Marine LTD, con sedes en San Petersburgo y Reino Unido entre otras ubicaciones. No parece que una empresa de ese tamaño se aventurara en la creación de software shareware, aunque el hecho que en la documentación se mencione que se probaba con voluminosos archivos de contabilidad, podría indicar que de algún modo recibió el apoyo de la empresa.

Es extraño que veamos UK y Rusia, por lo que debemos acudir a README.TXT para tener más datos:
Alexander Kulpin
Transas Marine (Russia) LTD,
21/2 Obukhovskoi Oboroni
Third Floor
St.Petersburg, 193019
RUSSIA
Street View

Transas Marine (UK) LTD,
First Base Enterprise House
Ocean Village
Southampton SO1 1XB
United Kingdom
Street View

Las direcciones no nos aclaran mucho, pero por fin tenemos detalles, su autor fue el ruso Alexander Kulpin, yo podría decir que en exclusiva, y diría que en el Reino Unido estaba la filial que lo comercializaba.

De Readme.txt
POSTAGE TO: Alexander Kulpin
Transas Marine (Russia) LTD,
21/2 Obukhovskoi Oboroni
Third Floor
St.Petersburg, 193019
RUSSIA

POSTAGE TO: Transas Marine (UK) LTD,
First Base Enterprise House
Ocean Village
Southampton SO1 1XB
United Kingdom

Viendo que toda su historia resulta opaca, voy a ir terminando con unos sencillo benchmarks actualizados:

Programa (Año) Argumentos Tamaño comprimido en bytes
ACE 2.6 (2005) ace.exe a -m5 -d4096 -r 1.724.380
AIN 2.32 (1996) ain.exe a -m1 -r 2.572.110
ARJ 2.86 (2012) arj.exe a -jm -r 2.624.994
LHA 2.55 (1992) lha.exe a -r -x 2.662.655
PKZIP 2.50 (1999) pkzip.exe -ex -r 2.543.839
RAR 2.50 (1999) rar.exe a -m5 -mm -r 2.553.202

Claramente vemos como AIN, supera a ARJ en cuanto a grado de compresión. En estas cifras, pierde en comparación con PKZIP, ya que hemos usado la última versiñon de este (1992), en vez de la habitual en aquella época PKZIP 2.04g (1993) o incluso PKZIP 1.1 (1990).

En cuanto a LHA, aunque en la época, probablemente el competidor fuera LHA 2.12 (1991), he optado por la 2.55 que fue la última versión que apareció oficialmente en inglés. Luego vendrían las japonesas LHA 2.66 (1994) y LHA 2.67 (1995).

Indudablemente ACE resulta el líder, no en vano es 10 años más moderno que AIN, incluso comparándolo con la primera versión pública, ACE 1.2 (1998) hubiera salido vencedor.

El más nuevo del lote es ARJ, un producto que sigue comercializándose, y que ha ido actualizándose durante más de 20 años, aunque sin cambios en el algoritmo, lo que explica porque ARJ 2.86 (2012), se comporta de manera casi idéntica al original ARJ 2.00 (1991).

La última versión, se puede encontrar en muchos lugares, por ejemplo en el FTP del SAC (138 Kb. en formato EXE. El homenaje no estaría completo sin su ayuda, y su correspondiente captura de pantalla:

AIN 2.32 Copyright (c) 1993-96 Transas Marine Ltd.

A new archiver. In some cases it compresses twice better than the well-
known ARJ 2.41, which it is similar to by the features it provides. It is
also faster than any other archiver.

Usage

AIN [{/|-}…] [.AIN]
[\] [@|…]

a: Add files to archive
d: Delete files from archive
e: Extract files from archive
f: Freshen files in archive
l: List of contents of archive
m: Move files to archive
t: Test integrity of archive
u: Update files to archive
v: Verbosely list contents of archive
x: eXtract files with full pathname
y: copY archive with new options

-: disables switch char
e: sElf-extracting archive
e-: convert self extractor to normal archive
f: archive Fragment size
f[K] or fM: size of K (or M) bytes
f360, f800K, f1.2M
fa: use all the free space on the disk (default)
h or ?: Help
g: Garble archive with password
g[=]
gJohn – garble with password “John”
g?[=?] – enter password from keyboard
m: Method of compression
m1: maximal compression, slow
m2: normal compression (default)
m3: fast compression
m4: no compression
o: Output directory (with a, f, m, u, y commands)
oa:\ – place the archive updated into directory a:\
p: match using full Pathnames (with e, l, v, x)
p1: match Pathname with subdirectories
r: Recurse subdirectories (with a, f, m, u)
s: (All) set archive time-Stamp
u: archive Update speed
u1: slow update, higher compression (default)
u2: normal update speed
u3: fast update, lower compression
w: assign Work directory
wd:\tmp – place temporary files into d:\tmp directory
x: eXclude files from processing
x{@|}
x*.exe: exclude *.exe files
[email protected]: exclude files listed in file list.txt
y: reply Yes to the program request
yo: overwrite existing file
yf: proceed to next fragment
y: reply Yes to all requests
.: suppress screen messages
.em: enable Expended memory (EMS) usage
.em-: disable Expended memory (EMS) usage
.xm: enable eXtended memory (XMS) usage
.xm-: disable eXtended memory (XMS) usage

Archiver’s options constantly used are recommended to be stored into the
AIN_SW enviroment variable. For example, you may want to place the command:

SET AIN_SW=/WC:

into autoexec.bat in order to avoid “Disk full” message when updating an
archive on a floppy disk.

Examples

1. AIN A ARCHIVE1
Create the ARCHIVE1.AIN archive and store in it all files from the current
directory.

2. AIN E ARCHIVE1
Extract to the current directory all the files stored in the archive.

3. AIN E ARCHIVE1 A:\PROJECT\ *.C *.ASM
Extract to the directory A:\PROJECT all files whose extensions are
either .C or .ASM.

4. AIN F ARCHIVE1
Freshen files of the archive with newer copies (if any).

5. AIN A /R /M3 ARCHIVE2 \BC\ *.EXE *.COM
Create an archive and store *.EXE and *.COM files contained in the \BC direc-
tory and all its subdirectories.

6. AIN X ARCHIVE2
Extract all files restoring their paths. Automatically create all necessary
directories.

7. AIN F ARCHIVE2 \BC\
Freshen files of the archive with newer copies (if any), contained in the \BC
directory without subdirectories.

8. AIN /R F ARCHIVE2 \BC\
Freshen files of the archive with newer copies (if any), contained in the \BC
directory and its subdirectories.

9. AIN /R U ARCHIVE2 \BC\ *.COM *.BAT
Freshen *.COM files and add *.BAT files, contained in the \BC directory and
its subdirectories.

10. AIN D ARCHIVE2 *.EXE
Delete all *.EXE files from the archive.

11. AIN V /P A:ARCHIVE2 \BC\BIN\*.*
Display information about files of the archive’s \BC\BIN directory.

12. AIN V /P1 A:ARCHIVE2 \BC\BIN*.* > ARC.DIR
Display information about files whose full names begin with “\BC\BIN”.

13. AIN Y /M1 /U3 ARCHIVE1
Reproduce the archive using “M1” compression method and fast update option.

14. AIN Y /FA /OA: C:ARCHIVE1
Reproduce the archive existing on C: drive to A: drive archive divided into
fragments, using all free space of every diskette.

15. AIN A /F360 A:ARCHIVE3 @WILDLIST
Create archive on A: divided into 360K fragments and add files whose names and
name templates are contained in WILDLIST file.

16. AIN F /WC:\TMP A:ARCHIVE3.001
Freshen files of the second archive fragment, using C:\TMP for storing tempo-
rary data.

17. AIN M /GEAST /E ARCHIVE4 /X*.OBJ /X*.EXE
Moving all the files from the current directory, except *.OBJ and *.EXE.
Self-extracting ARCHIVE4.EXE archive is encrypted with the password “EAST”.
Files successfully stored in archive will be deleted from the directory.

18. AIN Y /GEAST=WEST ARCHIVE4.EXE
Change the password to “WEST”.

19. AIN Y /GWEST= ARCHIVE4.EXE
Cancel the encryption.

20. AIN /? > AIN.HLP
Write down this Help into the AIN.HLP file.