Files
uc2/ROADMAP.md
T
Eremey Valetov d121c2083f Add benchmark mode: uc2 -B tests all methods on input
$ uc2 -B textfile.txt allbytes.bin zeros.bin
  UC2 Benchmark: 67511 bytes input (3 files)

  Method           Compressed    Ratio   Enc (ms)
  Huffman Fast           9938    14.7%       6.3 ms
  Huffman Tight          9938    14.7%       6.0 ms
  rANS Tight             4360     6.5%       7.7 ms
  LZ4 Ultra-fast         1905     2.8%       0.6 ms

Tests all 8 Huffman/rANS levels (2-9) plus LZ4 on the input files,
reporting compressed size, ratio percentage, and encoding time.

Completes Phase 4 (Modern Compression Backends).
2026-03-30 04:48:18 -04:00

241 lines
12 KiB
Markdown

# UC2 Roadmap
## Phase 1: Decompression MVP (DONE)
- [x] Port Bobrowski's libunuc2 decompression engine
- [x] CLI tool with list/extract/test/pipe modes
- [x] CMake build system (Linux, MSVC fallback for super.bin)
- [x] Win32 compat layer carried over
- [x] Tagged v3.0.0-alpha.1
## Phase 2: Original Compression Engine (DONE)
- [x] Port LZ77+Huffman compressor from `ULTRACMP.CPP`, `TREEGEN.CPP`, `TREEENC.CPP`
- [x] Write as the inverse of the decompressor (Bobrowski's code is the spec)
- [x] Compression levels 2=Fast, 3=Normal, 4=Tight, 5=Ultra
- [x] CLI create mode (`uc2 -w`), compression level flag (`-L`)
- [x] SuperMaster dictionary support (built-in 49 KB dictionary)
- [x] Round-trip testing: 37 unit tests + CLI integration tests
- [x] Round-trip testing vs original `uc2pro.exe` in DOSBox
(Direction: original creates → UC2 v3 extracts — verified.
Reverse direction is a known limitation: the original UC2 Pro
cannot read UC2 v3 archives due to compression bitstream
differences.)
- [x] Backward compatibility with original UC2 Pro (listing +
extraction verified for multi-file archives in both directions
in automated DOSBox-X test).
- [x] Custom Huffman tree optimization: use default tree for first
small block (< 256 ibuf entries), custom trees for larger
blocks. Matches the original's bFlag logic. 37% compression
improvement on text data while maintaining backward compat.
- [x] UC2 personality: status messages continuing the original's
tradition ("Everything went OK", compression level names,
"Fast, reliable and superior compression"). Suppressed by -q.
## Phase 3: Modernized Master-Block Deduplication
UC2's signature feature from 1992, ahead of its time. Modernize into
something no mainstream archiver offers.
- [x] Content-fingerprint file grouping (FNV-1a hash of first 4096 bytes)
- [x] Custom master-block generation from largest file in each group
- [x] MASMETA central directory records with full metadata
- [x] Masters compressed with SuperMaster, files compressed with custom master
- [x] CLI integration test validating master deduplication round-trip
- [x] Content-defined chunking (CDC) with Gear rolling hash
(`uc2_cdc.h`): chunker library + integration into archive
creation. Files sharing content at ANY position (not just
identical prefixes) are now grouped for master-block dedup.
- [x] Merkle DAG of deduplicated blocks (`uc2_merkle.h`):
content-addressable chunk trees with 64-bit FNV-1a hashes,
structural similarity comparison, single-byte-change resilience.
8 unit tests including partial overlap detection.
- [x] Cross-archive dedup via shared block store (`uc2_blockstore.h`):
content-addressable chunk storage with two-level directory
layout, dedup statistics, read-back verification.
6 unit tests including cross-archive dedup scenario.
- [x] Near-duplicate detection via SimHash (`uc2_simhash.h`):
64-bit locality-sensitive fingerprint with Hamming distance,
detects patched executables (16 changed bytes in 8KB: dist <= 8).
6 unit tests.
- [x] Delta compression (`uc2_delta.h`): binary diff with COPY/INSERT
instructions, hash-based source matching. 96-byte patch in 16KB
file → >50% size savings. 6 unit tests including round-trip.
## Phase 4: Modern Compression Backends
Pluggable algorithms behind new method IDs; original Method 4 kept for
backward compatibility.
- [x] rANS entropy coder (`uc2_rans.h`) integrated into archive format
as method 10. Levels 6-9 use rANS (vs 2-5 Huffman). 32-bit
table-based rANS, <5% overhead vs Shannon entropy. End-to-end
round-trip verified (create/list/extract/verify).
- [x] zstd-inspired dictionary compression (`uc2_dict.h`): formal
dictionary metadata with content-hash IDs, integrity checksums,
serialization format, and cross-archive sharing via block store.
6 unit tests including round-trip and corruption detection.
- [x] LZ4 ultra-fast mode (`uc2_lz4.h`): single-probe hash table,
O(1) match finding, 4-byte minimum match, variable-length
literal/match token encoding. 6 unit tests including
text, binary, all-same, incompressible, and small inputs.
- [x] Content-aware preprocessing (`uc2_preprocess.h`):
BCJ (E8/E9 x86 address normalization), BWT (Burrows-Wheeler
for text), delta filter (byte-wise with configurable stride),
automatic content detection (text/x86/structured/binary).
11 unit tests.
- [x] Built-in benchmark mode (`uc2 -B files...`): tests all 8 Huffman/rANS
levels plus LZ4, reports compressed size, ratio, and timing.
## Phase 5: Quantum-Resistant Encryption
No mainstream archiver offers post-quantum encryption.
- [ ] CRYSTALS-Kyber (NIST PQC standard) for key encapsulation, pure C
(PQClean project, public domain)
- [ ] AES-256-GCM for authenticated payload encryption
- [ ] Hybrid mode: classical ECDH + Kyber for transition period
- [ ] Passphrase-based key derivation via Argon2
- [ ] Per-file selective encryption within archives
- [ ] Plausible deniability: multi-archive-in-one with separate passwords.
Each password decrypts a different archive layer. Under hostile
pressure, revealing one password gives access to a decoy layer
while the real archive remains hidden and indistinguishable from
random padding. (Inspired by VeraCrypt hidden volumes.)
## Phase 6: DOS / FreeDOS / Retro-Computing
- [ ] DJGPP cross-compilation toolchain
- [ ] Test on real vintage hardware and DOSBox/FreeDOS
- [ ] Method 80 (Turbo) support
- [ ] Multi-volume archive spanning across physical media (floppies)
- [ ] Self-extracting archives per platform (DOS COM/EXE, Linux ELF, Windows PE)
- [ ] ANSI art progress display, CP850 codepage handling
- [ ] Position as the archiver for retrocomputing preservation:
disk images, ROM collections, BBS archive redistribution
## Phase 7: Cryptographic Integrity & Timestamping
- [x] BLAKE3 content hashing (`uc2_blake3.h`): pure C implementation,
256-bit digests, incremental and one-shot API, constant-time
comparison, tree hashing structure. 7 unit tests including
avalanche, incremental-vs-oneshot, and single-byte updates.
- [ ] OpenTimestamps integration: cryptographic proof of archive creation
time anchored to Bitcoin blockchain (one HTTP call, small proof blob
stored in archive metadata)
- [ ] Useful for legal/forensic archiving, software provenance, digital
preservation
## Phase 8: Decentralized & Cloud Integration
- [ ] IPFS pinning: `uc2 --ipfs-pin archive.uc2` to publish,
`uc2 --ipfs-get <CID>` to retrieve
- [ ] Content-addressable dedup maps directly to IPFS CIDs;
master blocks become sharable across users ("swarm dedup")
- [ ] Cloud archiving backend: `uc2 --s3 s3://bucket/path` for
streaming compress-to-cloud with dedup-aware incremental uploads
- [ ] Filecoin/Sia for decentralized paid storage (optional)
## Phase 9: Zero-Knowledge Proofs (Experimental)
ZK proofs extend the Merkle DAG and encryption layers with
privacy-preserving verification. Most valuable for decentralized and
compliance scenarios; heavyweight, so implemented as an optional module.
- [ ] **Prove archive integrity without revealing contents** — ZK proof
that the archive's Merkle root matches claimed file hashes, without
exposing the tree structure. Enables auditing of IPFS-shared
encrypted archives.
- [ ] **Selective disclosure from encrypted archives** — prove a specific
file (by hash) exists in an encrypted archive without decrypting
anything else. Useful for collaborative encrypted team archives.
- [ ] **Verifiable deduplication** — ZK proof that master-block dedup was
performed correctly across archives without revealing block contents.
Builds trust in distributed dedup without data leaks.
- [ ] **Compliance proofs** — prove properties ("archive created before
date Y", "archive does not contain file with hash H") without
revealing contents. For regulatory/legal use cases.
- [ ] Implementation: Halo2 or Bulletproofs (no trusted setup) via
Rust-to-C wrapper or WASM bridge; compile-time optional module.
STARKs preferred over SNARKs for quantum resistance alignment
with Phase 5.
### ZK Feasibility Notes
ZK adds genuine value for privacy-focused decentralized archiving (Phases
7--8) but is heavyweight for a CLI tool. SNARKs require pairing-friendly
curves (not quantum-resistant); **STARKs are preferred** as they align
with the post-quantum direction and need no trusted setup. Proof
generation is slow (seconds to minutes for complex circuits) so this is
an opt-in feature, not on the critical path. Prototype in a fork first.
## Phase 10: Ecosystem Integrations
### libarchive plugin
Highest-leverage integration. Adding UC2 read/write support to libarchive
makes `.uc2` a first-class format for `bsdtar`, `cmake`, `pkg(8)`,
file-roller, Ark, and dozens of other tools across the Linux ecosystem.
- [ ] libarchive read handler (decompression/listing)
- [ ] libarchive write handler (compression, once Phase 2 is done)
### Streaming dedup ingestion
Position UC2 as a deduplicating storage layer that other tools pipe into.
No other CLI archiver offers this.
```sh
rsync -a /data/ | uc2 --ingest repo.uc2 # dedup on receive
tar cf - /project | uc2 --ingest backup.uc2 # dedup tar stream
cp -a /snapshot/ | uc2 --ingest backup.uc2 # incremental dedup
```
- [ ] `uc2 --ingest` mode: streaming input with master-block dedup
- [ ] Incremental snapshots: `uc2 snapshot /path repo.uc2`
(borg/restic-style deduplicating backups without filesystem support)
### Foreign archive format support
Read (and optionally write) other archive formats, enabling UC2 as a
universal archive tool and migration path for legacy collections.
- [ ] ZIP read/write (deflate, store; the universal baseline format)
- [ ] RAR read (v4/v5; for extraction from existing collections)
- [ ] TGZ/tar.gz read/write (tar + gzip; Unix ecosystem staple)
- [ ] ISO 9660 read (CD/DVD images; retro-computing preservation)
### File manager plugins
Bobrowski already shipped prototypes; update for UC2 v3.
- [ ] Midnight Commander VFS plugin (update `misc/mc.ext` and `misc/uuc2`)
- [ ] Total Commander WCX plugin (update `misc/unuc2-wcx.c`)
## Phase 11: Advanced Features
- [ ] Archive-as-filesystem: FUSE mount for `.uc2` on Linux (read-only,
decompress-on-the-fly with master-block caching)
- [ ] Compression tournaments / community challenges
- [ ] Neural/learned compression preprocessor (modern platforms only,
not DOS — optional compile-time module)
- [ ] Jupyter kernel for interactive archive exploration and compression
research (Python, building on foxkernel experience):
- Rich HTML tables for archive listings with compression ratios
- Interactive dedup graph visualization (master-block DAG: which
files share blocks, space savings)
- Inline benchmark charts comparing methods/levels (ratio vs speed)
- Version diff visualization between archive snapshots
- Huffman tree / ANS state table visualization for algorithm
development
## Testing Strategy
- Create reference UC2 archives using original `uc2pro.exe` in DOSBox
- Unit tests: magic detection, Fletcher checksum, CP850->UTF-8
- Integration: extract test archives, compare SHA-256 against manifest
- Phase 2: round-trip (new compress -> old extract in DOSBox, and vice versa)
- Phase 3+: dedup correctness, cross-archive block sharing
- Phase 5: encryption round-trip, key derivation vectors
- Phase 9: ZK proof soundness and completeness