-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathNEWS
More file actions
161 lines (151 loc) · 8.6 KB
/
Copy pathNEWS
File metadata and controls
161 lines (151 loc) · 8.6 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
Release notes for xpar. See ChangeLog for source-level changes.
v2.0 (26-08-2026)
- Version 2 uses a new, incompatible container and has no v1 decoder.
It identifies and refuses v1 files. Decode with xpar 1.x, then protect
the result with xpar 2; there is no in-place upgrade.
- Verbs replace mode flags. The v1 flags '-J',
'-W', '-L', '-s', '-t', '--interlacing', '-H / --integrity' and
'--auth' are gone, as are v1 shard files. V1 scripts require changes.
- doc/xpar-format.tex is the normative format specification.
- xpar now protects file sets and directory trees. Manifests record
names, sizes, modes, four timestamps, POSIX ownership, extended
attributes, hard links and symbolic links; '--preserve' controls
recording and extraction.
- Two Reed-Solomon layers: an outer cell erasure code limits sector
damage to one (slice, column) cell, while inner armour corrects bit
errors within slices. '--cell', '--burst' and '--depth' configure
erasure units and interleaving.
- FFT and systematic Cauchy-matrix outer codecs support GF(2^8) and
GF(2^16). Selection is automatic or fixed with '--codec' and '--field'.
- In-place repair preserves names, inodes and hard links while rewriting
only damaged cells. A durable undo journal precedes destructive writes;
'xpar undo' replays journals left by interruption. Other policies use
'--backup', '--to', '--dry-run' and '--paranoid'.
- 'consolidate --replace' and 'prune' write a durable maintenance journal,
'base.xparmaint', before renaming a chain aside: an interrupted run is
reported as such rather than as a missing set, and 'xpar repair'
completes or rolls it back.
- A read the host refuses is an I/O error (status 5) and never damage: a
volume that fails under its mapping names its file instead of dying as
a defect, and repair never writes over a file it could not read.
- 'verify' and 'repair' can resynchronise after inserted or deleted bytes
with '--resync'.
- Layouts: sidecar (default) leaves data in place; split writes bare data
volumes that concatenate exactly; armoured writes one self-contained,
inner-coded file with a replicated prologue.
- '--armour=all' now works in the sidecar and split layouts, wrapping each
slice-table and recovery-slice packet in an inner code of its own so bit
rot in a recovery volume costs parity symbols, not whole slices.
- Generations: 'add' records changes while inheriting unchanged data;
'prune' removes unneeded generations; 'consolidate' collapses a chain;
'info --deps' shows dependencies.
- '--dedup' supports whole-file and content-defined chunk deduplication.
- New verbs: 'scrub' reports inner-code corrections; 'recover' rebuilds
a lost volume; 'addrecovery' adds redundancy; 'extract' unpacks owned
layouts; 'explain' prints a dd(1) recovery recipe; 'recover-prologue'
reconstructs an armoured prologue; 'benchmark' checks and times SIMD.
- Integrity uses BLAKE3-256 content hashes, 8- or 16-byte BLAKE3 slice
tags, and CRC32C per slice and cell. '--auth-key=FILE' uses a keyed
BLAKE3 MAC; authenticated operations require the correct key.
- Packet checksums and strict length validation reject truncated or
corrupted containers before parsing their bodies.
- A planner enforces the '-m' working-set limit and reports parameters
that would fit when no plan does.
- Output supports JSON Lines ('--json'), progress and ETA ('--progress'),
colour control ('--color') and reproducible sets ('--reproducible').
Exit codes 0-8 distinguish clean, repairable, unrepairable, not found,
usage, I/O, authentication, no-plan and internal errors.
- SIMD support: SSSE3, SSE4.2, AVX2, GFNI, GFNI-512 and VBMI
on x86; NEON, PMULL and SVE on ARM; VSX on POWER; shuffle and clmul
RISC-V vectors. Runtime selection can be fixed with '--simd'. Portable
threading uses '-j'; Linux may use dependency-free io_uring batching.
- Ports: POSIX, Windows NT, i486 Windows 95 and DJGPP/MS-DOS. The format
is identical across platforms. CI covers x86-64, aarch64, ppc64le,
riscv64, big-endian s390x, armhf, macOS, Windows and DOS with sanitizers.
- Tests include unit, codec, container, damage, fault and safety suites at
three depths: 'make check', 'make check-full' and 'make check-torture'.
v1.1 (20-04-2026)
- The format is unchanged and fully compatible with v1.0 in both
directions.
- '--progress' reports throughput and ETA during joint, systematic,
Leopard-sharded and Vandermonde-sharded encoding and decoding.
- Optional Linux io_uring batches parallel I/O in joint and sharded
pipelines. '--enable-liburing' enables it; Linux auto-detects liburing.
Other builds retain the portable POSIX/Win32 backend.
- Joint encoding now requires '-f / --force' to overwrite output.
- Keyed MAC and tag comparisons are constant-time.
- Sharded decoders now share bounded consensus voting and stricter
layout validation, including truncated or mismatched final shards.
- Leopard fixes single-data-shard decoding and verifies durable output
before success. Vandermonde fixes an error-path buffer leak. Shard-count
errors are clearer.
- Hardened yarg allocation and formatting paths. Reworked the legacy
Windows command-line parser for safe growth and OOM cleanup.
- POSIX descriptors use FD_CLOEXEC; I/O retries short transfers and EINTR.
DJGPP gains a higher-precision PIT timer and <io.h> I/O. DOS releases use
LTO, function sections and section garbage collection.
- Release tarballs have reproducible mtimes. CI adds Win95 and DOS release
workflows.
v1.0 (16-04-2026)
- Format bump to v1.0. v0.x archives are rejected and must be re-encoded;
future v1.x releases remain decodable by v1.0+ tools.
- Joint headers record total input size and lace sequence numbers,
rejecting archives truncated at a lace boundary or with reordered laces.
- Sharded-header CRC32C covers the version, shard count and number, total
size and body, detecting field corruption and swaps between shards.
- '-H / --integrity' selects hardware-accelerated 32-bit CRC32C tags
(default) or 128-bit BLAKE2b tags in joint, systematic, Vandermonde and
Leopard modes.
- '--auth=<keyfile>' accepts a 1-64 byte key and uses a BLAKE2b-128 MAC,
implying '-H blake2b'. Decoding rejects wrong, missing or spurious keys.
- '-s / --systematic' writes a parity-only .xpa, about 18% of the input,
while leaving the original unchanged. Decoding combines both files and
writes corrected data to stdout. It is incompatible with interlacing.
- '-t / --test' runs correction without writing for '-J', '-Js', '-W' and
'-L'. It reports unrecoverable blocks, shard shortfalls, tag mismatches
and archives that require correction.
- BLAKE2b uses runtime-dispatched SSE4.1, AVX2 or AArch64 sse2neon kernels,
with a portable fallback. '--disable-blake2b' removes BLAKE2b and MAC
support.
- Accelerated Leopard decoding on AArch64. Fixed a missing return in the
SSSE3 xor_mem4 path that could overflow the heap when rebuilding shards.
- Self-check covers truncation, reordering and shard-number swaps. A C
error-injection helper removes the test suite's Python dependency.
- CI adds AddressSanitizer and UndefinedBehaviorSanitizer on Linux and
macOS. Releases add a KERNEL32-only Win95 i686 binary and a DJGPP/MS-DOS
binary with CWSDPMI, alongside existing Windows binaries.
v0.7 (19-09-2025)
- Rename sharded mode to Vandermonde-sharded mode ('-S' to '-W').
- Add architecture- and OS-specific build instructions.
- Include benchmarks in the repository.
- Enforce a minimum shard size.
- Improve stability when mmap is enabled.
- Add linearithmic FFT-based Reed-Solomon codecs (@catid).
- Fix a gf256mat_inv leak in Vandermonde-sharded mode.
- Update the man page.
v0.6 (10-09-2025)
- Move the project page to iczelia/xpar.
- Fix command parsing and clean up its style.
v0.5 (17-10-2024)
- Add OpenMP to sharded mode; performance remains I/O-bound.
- Switch command-line parsing to yarg and remove the getopt_long dependency.
- Freeze the v0 file format except for critical defects.
v0.4 (16-10-2024)
- Stop providing static x86_64 Linux binaries.
- Add OpenMP for joint mode with high interlacing factors.
- Add three-way saturating CRC32C for x86_64 with SSE4.2.
- Improve sharded-mode performance.
- Fix undefined integer shifts in sharded mode.
v0.3 (16-10-2024)
- Improve joint encoding performance on x86_64 machines.
- Support aarch64 Linux.
- Improve cross-platform compatibility of the sharded mode.
v0.2 (15-10-2024)
- Add the xpar manual page.
- Add AArch64 code, enabled with '--enable-aarch64'.
v0.1 (14-10-2024)
- Initial release.
- Support joint and sharded error and erasure correction.
- Add x86_64 code, enabled with '--enable-x86_64'.
- Test on x86_64 Linux, x86_64 and AArch64 macOS, and x86_64 and i686
Windows.