mirror of https://git.tukaani.org/xz.git
Add NEWS for 5.4.0.
This commit is contained in:
parent
c3e94d37e8
commit
cbbd844519
202
NEWS
202
NEWS
|
@ -2,6 +2,208 @@
|
||||||
XZ Utils Release Notes
|
XZ Utils Release Notes
|
||||||
======================
|
======================
|
||||||
|
|
||||||
|
5.4.0 (2022-12-13)
|
||||||
|
|
||||||
|
This bumps the minor version of liblzma because new features were
|
||||||
|
added. The API and ABI are still backward compatible with liblzma
|
||||||
|
5.2.x and 5.0.x.
|
||||||
|
|
||||||
|
Since 5.3.5beta:
|
||||||
|
|
||||||
|
* All fixes from 5.2.10.
|
||||||
|
|
||||||
|
* The ARM64 filter is now stable. The xz option is now --arm64.
|
||||||
|
Decompression requires XZ Utils 5.4.0. In the future the ARM64
|
||||||
|
filter will be supported by XZ for Java, XZ Embedded (including
|
||||||
|
the version in Linux), LZMA SDK, and 7-Zip.
|
||||||
|
|
||||||
|
* Translations:
|
||||||
|
|
||||||
|
- Updated Catalan, Croatian, German, Romanian, and Turkish
|
||||||
|
translations.
|
||||||
|
|
||||||
|
- Updated German man page translations.
|
||||||
|
|
||||||
|
- Added Romanian man page translations.
|
||||||
|
|
||||||
|
Summary of new features added in the 5.3.x development releases:
|
||||||
|
|
||||||
|
* liblzma:
|
||||||
|
|
||||||
|
- Added threaded .xz decompressor lzma_stream_decoder_mt().
|
||||||
|
It can use multiple threads with .xz files that have multiple
|
||||||
|
Blocks with size information in Block Headers. The threaded
|
||||||
|
encoder in xz has always created such files.
|
||||||
|
|
||||||
|
Single-threaded encoder cannot store the size information in
|
||||||
|
Block Headers even if one used LZMA_FULL_FLUSH to create
|
||||||
|
multiple Blocks, so this threaded decoder cannot use multiple
|
||||||
|
threads with such files.
|
||||||
|
|
||||||
|
If there are multiple Streams (concatenated .xz files), one
|
||||||
|
Stream will be decompressed completely before starting the
|
||||||
|
next Stream.
|
||||||
|
|
||||||
|
- A new decoder flag LZMA_FAIL_FAST was added. It makes the
|
||||||
|
threaded decompressor report errors soon instead of first
|
||||||
|
flushing all pending data before the error location.
|
||||||
|
|
||||||
|
- New Filter IDs:
|
||||||
|
* LZMA_FILTER_ARM64 is for ARM64 binaries.
|
||||||
|
* LZMA_FILTER_LZMA1EXT is for raw LZMA1 streams that don't
|
||||||
|
necessarily use the end marker.
|
||||||
|
|
||||||
|
- Added lzma_str_to_filters(), lzma_str_from_filters(), and
|
||||||
|
lzma_str_list_filters() to convert a preset or a filter chain
|
||||||
|
string to a lzma_filter[] and vice versa. These should make
|
||||||
|
it easier to write applications that allow users to specify
|
||||||
|
custom compression options.
|
||||||
|
|
||||||
|
- Added lzma_filters_free() which can be convenient for freeing
|
||||||
|
the filter options in a filter chain (an array of lzma_filter
|
||||||
|
structures).
|
||||||
|
|
||||||
|
- lzma_file_info_decoder() to makes it a little easier to get
|
||||||
|
the Index field from .xz files. This helps in getting the
|
||||||
|
uncompressed file size but an easy-to-use random access
|
||||||
|
API is still missing which has existed in XZ for Java for
|
||||||
|
a long time.
|
||||||
|
|
||||||
|
- Added lzma_microlzma_encoder() and lzma_microlzma_decoder().
|
||||||
|
It is used by erofs-utils and may be used by others too.
|
||||||
|
|
||||||
|
The MicroLZMA format is a raw LZMA stream (without end marker)
|
||||||
|
whose first byte (always 0x00) has been replaced with
|
||||||
|
bitwise-negation of the LZMA properties (lc/lp/pb). It was
|
||||||
|
created for use in EROFS but may be used in other contexts
|
||||||
|
as well where it is important to avoid wasting bytes for
|
||||||
|
stream headers or footers. The format is also supported by
|
||||||
|
XZ Embedded (the XZ Embedded version in Linux got MicroLZMA
|
||||||
|
support in Linux 5.16).
|
||||||
|
|
||||||
|
The MicroLZMA encoder API in liblzma can compress into a
|
||||||
|
fixed-sized output buffer so that as much data is compressed
|
||||||
|
as can be fit into the buffer while still creating a valid
|
||||||
|
MicroLZMA stream. This is needed for EROFS.
|
||||||
|
|
||||||
|
- Added lzma_lzip_decoder() to decompress the .lz (lzip) file
|
||||||
|
format version 0 and the original unextended version 1 files.
|
||||||
|
Also lzma_auto_decoder() supports .lz files.
|
||||||
|
|
||||||
|
- lzma_filters_update() can now be used with the multi-threaded
|
||||||
|
encoder (lzma_stream_encoder_mt()) to change the filter chain
|
||||||
|
after LZMA_FULL_BARRIER or LZMA_FULL_FLUSH.
|
||||||
|
|
||||||
|
- In lzma_options_lzma, allow nice_len = 2 and 3 with the match
|
||||||
|
finders that require at least 3 or 4. Now it is internally
|
||||||
|
rounded up if needed.
|
||||||
|
|
||||||
|
- CLMUL-based CRC64 on x86-64 and E2K with runtime processor
|
||||||
|
detection. On 32-bit x86 it currently isn't available unless
|
||||||
|
--disable-assembler is used which can make the non-CLMUL
|
||||||
|
CRC64 slower; this might be fixed in the future.
|
||||||
|
|
||||||
|
- Building with --disable-threads --enable-small
|
||||||
|
is now thread-safe if the compiler supports
|
||||||
|
__attribute__((__constructor__)).
|
||||||
|
|
||||||
|
* xz:
|
||||||
|
|
||||||
|
- Using -T0 (--threads=0) will now use multi-threaded encoder
|
||||||
|
even on a single-core system. This is to ensure that output
|
||||||
|
from the same xz binary is identical on both single-core and
|
||||||
|
multi-core systems.
|
||||||
|
|
||||||
|
- --threads=+1 or -T+1 is now a way to put xz into
|
||||||
|
multi-threaded mode while using only one worker thread.
|
||||||
|
The + is ignored if the number is not 1.
|
||||||
|
|
||||||
|
- A default soft memory usage limit is now used for compression
|
||||||
|
when -T0 is used and no explicit limit has been specified.
|
||||||
|
This soft limit is used to restrict the number of threads
|
||||||
|
but if the limit is exceeded with even one thread then xz
|
||||||
|
will continue with one thread using the multi-threaded
|
||||||
|
encoder and this limit is ignored. If the number of threads
|
||||||
|
is specified manually then no default limit will be used;
|
||||||
|
this affects only -T0.
|
||||||
|
|
||||||
|
This change helps on systems that have very many cores and
|
||||||
|
using all of them for xz makes no sense. Previously xz -T0
|
||||||
|
could run out of memory on such systems because it attempted
|
||||||
|
to reserve memory for too many threads.
|
||||||
|
|
||||||
|
This also helps with 32-bit builds which don't have a large
|
||||||
|
amount of address space that would be required for many
|
||||||
|
threads. The default soft limit for -T0 is at most 1400 MiB
|
||||||
|
on all 32-bit platforms.
|
||||||
|
|
||||||
|
- Previously a low value in --memlimit-compress wouldn't cause
|
||||||
|
xz to switch from multi-threaded mode to single-threaded mode
|
||||||
|
if the limit cannot otherwise be met; xz failed instead. Now
|
||||||
|
xz can switch to single-threaded mode and then, if needed,
|
||||||
|
scale down the LZMA2 dictionary size too just like it already
|
||||||
|
did when it was started in single-threaded mode.
|
||||||
|
|
||||||
|
- The option --no-adjust no longer prevents xz from scaling down
|
||||||
|
the number of threads as that doesn't affect the compressed
|
||||||
|
output (only performance). Now --no-adjust only prevents
|
||||||
|
adjustments that affect compressed output, that is, with
|
||||||
|
--no-adjust xz won't switch from multi-threaded mode to
|
||||||
|
single-threaded mode and won't scale down the LZMA2
|
||||||
|
dictionary size.
|
||||||
|
|
||||||
|
- Added a new option --memlimit-mt-decompress=LIMIT. This is
|
||||||
|
used to limit the number of decompressor threads (possibly
|
||||||
|
falling back to single-threaded mode) but it will never make
|
||||||
|
xz refuse to decompress a file. This has a system-specific
|
||||||
|
default value because without any limit xz could end up
|
||||||
|
allocating memory for the whole compressed input file, the
|
||||||
|
whole uncompressed output file, multiple thread-specific
|
||||||
|
decompressor instances and so on. Basically xz could
|
||||||
|
attempt to use an insane amount of memory even with fairly
|
||||||
|
common files. The system-specific default value is currently
|
||||||
|
the same as the one used for compression with -T0.
|
||||||
|
|
||||||
|
The new option works together with the existing option
|
||||||
|
--memlimit-decompress=LIMIT. The old option sets a hard limit
|
||||||
|
that must not be exceeded (xz will refuse to decompress)
|
||||||
|
while the new option only restricts the number of threads.
|
||||||
|
If the limit set with --memlimit-mt-decompress is greater
|
||||||
|
than the limit set with --memlimit-compress, then the latter
|
||||||
|
value is used also for --memlimit-mt-decompress.
|
||||||
|
|
||||||
|
- Added new information to the output of xz --info-memory and
|
||||||
|
new fields to the output of xz --robot --info-memory.
|
||||||
|
|
||||||
|
- In --lzma2=nice=NUMBER allow 2 and 3 with all match finders
|
||||||
|
now that liblzma handles it.
|
||||||
|
|
||||||
|
- Don't mention endianness for ARM and ARM-Thumb filters in
|
||||||
|
--long-help. The filters only work for little endian
|
||||||
|
instruction encoding but modern ARM processors using
|
||||||
|
big endian data access still use little endian
|
||||||
|
instruction encoding. So the help text was misleading.
|
||||||
|
In contrast, the PowerPC filter is only for big endian
|
||||||
|
32/64-bit PowerPC code. Little endian PowerPC would need
|
||||||
|
a separate filter.
|
||||||
|
|
||||||
|
- Added decompression support for the .lz (lzip) file format
|
||||||
|
version 0 and the original unextended version 1. It is
|
||||||
|
autodetected by default. See also the option --format on
|
||||||
|
the xz man page.
|
||||||
|
|
||||||
|
- Sandboxing enabled by default:
|
||||||
|
* Capsicum (FreeBSD)
|
||||||
|
* pledge(2) (OpenBSD)
|
||||||
|
|
||||||
|
* Scripts now support the .lz format using xz.
|
||||||
|
|
||||||
|
* A few new tests were added.
|
||||||
|
|
||||||
|
* The liblzma-specific tests are now supported in CMake-based
|
||||||
|
builds too ("make test").
|
||||||
|
|
||||||
|
|
||||||
5.3.5beta (2022-12-01)
|
5.3.5beta (2022-12-01)
|
||||||
|
|
||||||
* All fixes from 5.2.9.
|
* All fixes from 5.2.9.
|
||||||
|
|
Loading…
Reference in New Issue