Opening the compression chapter: where .aerozip stands, and how it gets competitive #7
Replies: 4 comments 5 replies
Naming the format before launch: one format, optional password, and which name is actually freeCompanion to the compression chapter above. One thing up front, with credit where it is due: the name The new compression format has not shipped yet (it lands with the next release), so the name is still open. Two facts shape the decision, and one of them is a hard constraint we just verified. The model: one format, optional password (the 7z model)It is worth being precise about what this format is: it is the same AeroVault container (the So "compression" is a mode of AeroVault, not a separate product:
This reframes the naming question. We are not necessarily inventing a second format; we are deciding how to present AeroVault's open mode, and whether it deserves its own friendlier extension for sharing. The hard constraint: most of the obvious names are already takenBefore debating taste, we checked what already exists. This is decisive.
Important
RecommendationTwo coherent directions, both built on free names:
Short two or three letter extensions ( What we are asking
Naming is reversible only before launch, so this is the moment. @EhudKirsh, over to you first. Availability checked June 2026 via web search. Sources: AeroZip on the Microsoft Store and Pero Software; aero.zip (Capterra); AirZip; the |
Compression progress follow-up: from baseline to bzip2-parity, with the tuning boundary mappedThis follow-up summarizes the work after the original compression baseline in Discussion #7. The short version: the plaintext compression lane is now technically in the file-compressor arena. T-C1 fixed the false-raw regression, T-C2 separated compression level from chunk geometry so we can choose the ratio/dedup tradeoff explicitly, and T-C3 showed that a naive zstd-dictionary path is not worth landing in the real AeroVault pipeline. 1. Development Progress
On Silesia, the important progression is:
The meaningful result is not just "we found a larger chunk size". The meaningful result is that the curve is now mapped:
2. T-C2 Profile Sweep
The best product compromise from this sweep is still the current archive geometry: At zstd level 22 it reaches 3.893x on Silesia, just above bzip2. Increasing only the max from 16 MiB to 32 MiB gives a small extra gain (3.902x), while moving to 8 MiB or 16 MiB average chunks gives stronger ratio but with a more obvious dedup tradeoff. So the product framing should probably be:
3. T-C3 Dictionary Result
We also prototyped a real
The result was negative. Proxy tests looked promising on source-code corpora, but the real container got larger once small-file batching and dictionary storage overhead were included. That is an important engineering result: the existing pack-before-chunk path already captures a lot of the small-file cold-start win that a naive dictionary would otherwise target. We should not land a format-visible dictionary path unless a more selective/class-specific design beats the current pipeline in real container measurements. Current ConclusionThe compression lane is now strong enough to enter the file-compressor comparison honestly:
The next serious push, if we want more ratio beyond archive zstd, should be an explicitly separate high-ratio lane or carefully scoped zstd advanced-parameter work, not a naive dictionary feature. Local Evidence
|
|
In axpdev-lab/aeroftp#276 (reply in thread) you wrote that:
For this reason alone, it might've been interesting to retest compression without encryption. And so you have. |





Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Opening the compression chapter: where
.aerozipstands, and how it gets competitiveWith the
.aeroziplane, AeroVault stops being only an encryption tool and steps into the archiver arena next tozip,7z,tar.gzandtar.bz2. This thread opens the compression chapter: how the format compresses today, how it compares, what we found, and the roadmap to close the gap. The numbers below are our first public benchmark baseline, reproducible, and meant to be the reference future runs are measured against.Note
Scope: this is about the
.aeroziplane (compression + error-correction, no encryption). The encrypted.aerovaultlane is unchanged. All numbers are measured on the standard Silesia corpus (211,938,580 bytes), crateaerovault @ 43a8f86, error-correction OFF,zstd 1.5.5.TL;DR
.aerozip(zstd level 9, per-chunk) compresses Silesia at 3.428x, vstar.bz2 -9at 3.887x: we are +13% bytes behind the target.tar.bz2(3.887x) between 4 and 16 MiB chunks, while keeping deduplication, streaming and error-correction. A trained dictionary reaches it at smaller chunks (keeping finer dedup).tar.xz(4.35x) is a separate, optional high-ratio lane (LZMA), not the default.1. The landscape (measured)
.aerozipL9 (default today)3.428x.aerozipL19/22 (archive profile)3.311xtar.bz2 -9(the bar to beat)3.887xtar.zst -19(solid)4.003xtar.zst -22(solid)4.041xtar.xz -9(solid)4.346xThe root cause is structural:
tar.bz2compresses the whole concatenated stream (solid), while.aerozipcompresses each content-defined chunk independently with a cold dictionary. That independence is what powers per-chunk deduplication, and it is also what costs ratio. This is the central tension of the whole chapter:2. A surprise: the "archive" profile regresses
Bumping zstd to level 19/22 should help. Measured, it does not: the full corpus gets worse. We localized it to a single file (
samba) and a single mechanism.The archive profile widens chunks to 16 MiB. The incompressible-probe samples only the first 64 KiB of a chunk and, if that prefix looks incompressible, stores the entire chunk raw. On
sambathat misfires: a chunk thatzstd -19compresses to 3.97 MB (5.44x) is stored raw at 13.60 MB (1.59x), wasting ~9.6 MB.Reproduce the samba finding (shell)
Important
This is a real bug, not a tuning preference. The level lever itself is fine: on every other content type level 19 helps (text 3.674x -> 4.297x, binary 2.408x -> 2.672x). The fix is in how the probe and chunk-widening interact (sample a representative window, or compress-then-compare, or cap chunk size).
3. How far per-chunk can go
Per-chunk compression is not a dead end. As chunks grow, a per-chunk frame approaches the solid ceiling; measured, it crosses
tar.bz2between 4 and 16 MiB chunks (4 MiB = 3.849x, just under; 16 MiB = 3.963x, clearly over).The model
Bigger
capproachesratio_solidbut coarsens dedup. A trained dictionary shrinksw(L)WITHOUT growingc, so it raises ratio while keeping fine-grained dedup. That is the recommended lever.4. Roadmap
Legend: delta vs today = expected size reduction vs the current level-9 default. All format-visible changes get a new opt-in codec id, coordinated to preserve cross-open with the app.
Tier 1: quick wins (within zstd, no new codec)
windowLogto cover the chunkTier 2: optional high-ratio lane (per-archive)
lzma-rust2(validate encoder)Tier 3: moonshots
Context-mixing / neural compressors reach the ratio ceiling but are non-viable for a portable, deterministic, interactive vault (10^5 to 10^6 ns/byte, GB of RAM, no cross-hardware determinism). A pure-Rust zstd encoder at C parity does not exist yet. Not on the table.
Full benchmark table + reproduction commands
5. A note on the name (pre-launch)
The format name is still open (it ships next release), and the obvious name has a problem: there is already a Microsoft Store archiver called AeroZip. Naming, the candidates, the availability check, and the "one format, optional password" model are covered in a companion comment below, so this thread can stay technical.
6. What we are asking
This thread is the baseline. Next we will: (1) fix the probe bug, (2) land the level lever decoupled from chunk-widening, (3) prototype a trained-dictionary codec id, and re-run this exact benchmark. Feedback on the priority order, and on whether an optional
xz/LZMA lane is wanted, is welcome.Methodology: ratio = input / output (unit-free). Sizes in decimal MB. Per-process measurements, deterministic and load-independent. Sources: Silesia corpus (mattmahoney.net/dc/silesia.html); zstd / xz / bzip2 official docs. External ratio figures for Tier 2 carry the usual corpus caveats and are cited in the engineering notes.
All reactions