Eremey Valetov 6d59bc27db Add dictionary metadata for zstd-inspired cross-archive sharing
New library (uc2_dict.h / uc2_dict.c) formalizes master blocks as
proper dictionaries with:

- 64-bit content hash ID (FNV-1a) for cross-archive sharing
- 32-bit integrity checksum with verification
- Portable serialization format (24-byte header + data)
- Deserialization with magic number and size validation

Combined with the block store (uc2_blockstore.h), this enables
distributed dedup: archives in different locations can reference
shared dictionaries by content hash, with integrity verification
before decompression.

6 unit tests including serialization round-trip, corruption
detection, and bad-magic rejection.

Also added plausible deniability (multi-archive with separate
passwords) to Phase 5 roadmap.
2026-03-29 19:39:56 -04:00

UC2 v3.0.0 — UltraCompressor II

A cross-platform revival of UltraCompressor II, the DOS-era archiver by Nico de Vries (1992--1996). UC2 was notable for its advanced deduplication ("master blocks"), file versioning, and competitive compression ratios on the hardware of its day.

This project brings UC2 back as a modern, portable C99 tool. Phase 1 (current) provides decompression and archive listing, built on Jan Bobrowski's clean-room portable decompressor (unuc2/libunuc2). Phase 2 will add compression using the original algorithms.

Building

Requires CMake >= 3.16 and a C99 compiler (GCC, Clang, or MSVC).

cmake -B build
cmake --build build

The binary is at build/cli/uc2.

Usage

uc2 archive.uc2                       # Extract all files
uc2 -l archive.uc2                    # List contents
uc2 -t archive.uc2                    # Test archive integrity
uc2 -d /tmp/out archive.uc2           # Extract to directory
uc2 -l archive.uc2 '*.txt'            # List matching files
uc2 -p archive.uc2 readme.txt         # Extract to stdout

Options

Flag Description
-l List archive contents
-t Test archive integrity
-a Include all file versions (not just latest)
-d path Extract to specified directory
-f Overwrite existing files
-p Extract to stdout
-D Skip directory metadata; -DD also skips file metadata
-T Tab-separated output (for scripting)

Project Structure

UC2/
  lib/            libuc2 decompression library
  cli/            uc2 command-line tool
  original/       preserved original sources (reference only)
  cmake/          build system modules
  tests/          test archives and test programs

History

  • v1.0--v2.3 (1992--1996) Original DOS releases by Nico de Vries
  • 2015 Source code released under LGPL-3.0 by Danny Bezemer
  • 2020--2021 Jan Bobrowski writes unuc2/libunuc2 (portable decompressor)
  • 2026 UC2 v3.0.0: cross-platform revival

License

GPL-3.0. See LICENSE and CREDITS.md for full attribution.

Description
Cross-platform revival of UltraCompressor II (Nico de Vries, 1992-1996). C99, GPL-3.0.
Readme GPL-3.0 2.1 MiB
Languages
C++ 49.1%
C 41.8%
Batchfile 3.6%
CMake 2.3%
Python 1.6%
Other 1.6%