Repository navigation
PJA 0.9.0
The formats are fixed. A .pja, a 7-Zip archive with PJA or a zpaq-std block written by 0.9.0 or any earlier release opens in every release after it, and none of these formats changes again: doc/STABILITY.md lists them (the .pja file, the codec streams 5, 6 and 7, the filter's streams and the C interface, the 7-Zip methods, and the thirty zpaq-std codecs with their index, stream, ZPAQL size and release). 1.0.0 will add 7-Zip method IDs of PJA's own; archives with today's experimental IDs keep opening. A new kind of file (JPEG 2000 is being studied) would come as a new stream version beside these.
- A thread the system refuses no longer ends PJA. Under a real limit (systemd's TasksMax),
pja a -th 16died with "EThread: Failed to create new thread", and the 7-Zip plugin answered "Can't allocate required memory". Both now go on with the threads they get, down to none but the main one, with the same output. - No truncated output on FAT or exFAT. A new output is written to a temporary and takes its name only if the name is free. That used hard links, which FAT and exFAT (camera cards, USB sticks) do not have, so there the file was written in place and a run cut short left it truncated. On Linux it now uses
renameat2(RENAME_NOREPLACE), which they support. - PATCH's bounds (a repaired JPEG) saturate instead of raising an overflow for an absurd declared size.
- Checked before fixing the formats: 1,500 damaged segments through the ten 8 codecs' ZPAQL decoders (no hang, no crash); a JPEG with 270 MB after it, round trip past 256 MiB; 135,730 damaged
.pja, 18,348 damaged JPEG and JPEG-LS files and 15,994 damaged 7-Zip archives (no crash, no hang, nothing taken that did not come back). - The same bytes. The streams and the zpaq-std codecs are 0.8.0's; the command writes the same
.pjafiles. - Benchmarks: the compressors table now has Lepton and brunsli too (README and the wiki).
Downloads
| platform | the pja command |
the zpaq-std plugin | libpja (C library, 7-Zip plugin) |
|---|---|---|---|
| Linux x86-64 | pja-0.9.0-linux-x86_64.tar.gz |
pja-0.9.0-zpaqstd-plugin-linux-x86_64.tar.gz |
pja-0.9.0-lib-linux-x86_64.tar.gz |
| Linux x86 (32-bit) | pja-0.9.0-linux-x86.tar.gz |
pja-0.9.0-zpaqstd-plugin-linux-x86.tar.gz |
pja-0.9.0-lib-linux-x86.tar.gz |
| Linux arm64 | pja-0.9.0-linux-arm64.tar.gz |
pja-0.9.0-zpaqstd-plugin-linux-arm64.tar.gz |
pja-0.9.0-lib-linux-arm64.tar.gz |
| macOS arm64 | pja-0.9.0-macos-arm64.tar.gz |
pja-0.9.0-zpaqstd-plugin-macos-arm64.tar.gz |
pja-0.9.0-lib-macos-arm64.tar.gz |
| Windows x64 (7 and later) | pja-0.9.0-windows-x64.zip |
pja-0.9.0-zpaqstd-plugin-windows-x64.zip |
pja-0.9.0-lib-windows-x64.zip |
| Windows x86 (XP and later) | pja-0.9.0-windows-x86.zip |
pja-0.9.0-zpaqstd-plugin-windows-x86.zip |
pja-0.9.0-lib-windows-x86.zip |
pja-0.9.0-zpaqstd.tar.gz holds the plugin's sources as zpaq-std vendors them, with VENDOR.md. CI builds and checks every binary on its own platform (.github/workflows/release.yml); libpja is checked with its C test and, on Linux x86-64, through a real 7-Zip. SHA256SUMS has the checksums. The Linux builds need glibc 2.34 or later. The macOS ones are not signed: run xattr -d com.apple.quarantine after unpacking.