Spaces:
Running
Running
XZ Utils To-Do List | |
=================== | |
Known bugs | |
---------- | |
The test suite is too incomplete. | |
If the memory usage limit is less than about 13 MiB, xz is unable to | |
automatically scale down the compression settings enough even though | |
it would be possible by switching from BT2/BT3/BT4 match finder to | |
HC3/HC4. | |
XZ Utils compress some files significantly worse than LZMA Utils. | |
This is due to faster compression presets used by XZ Utils, and | |
can often be worked around by using "xz --extreme". With some files | |
--extreme isn't enough though: it's most likely with files that | |
compress extremely well, so going from compression ratio of 0.003 | |
to 0.004 means big relative increase in the compressed file size. | |
xz doesn't quote unprintable characters when it displays file names | |
given on the command line. | |
tuklib_exit() doesn't block signals => EINTR is possible. | |
SIGTSTP is not handled. If xz is stopped, the estimated remaining | |
time and calculated (de)compression speed won't make sense in the | |
progress indicator (xz --verbose). | |
If liblzma has created threads and fork() gets called, liblzma | |
code will break in the child process unless it calls exec() and | |
doesn't touch liblzma. | |
Missing features | |
---------------- | |
Add support for storing metadata in .xz files. A preliminary | |
idea is to create a new Stream type for metadata. When both | |
metadata and data are wanted in the same .xz file, two or more | |
Streams would be concatenated. | |
The state stored in lzma_stream should be cloneable, which would | |
be mostly useful when using a preset dictionary in LZMA2, but | |
it may have other uses too. Compare to deflateCopy() in zlib. | |
Support LZMA_FINISH in raw decoder to indicate end of LZMA1 and | |
other streams that don't have an end of payload marker. | |
Adjust dictionary size when the input file size is known. | |
Maybe do this only if an option is given. | |
xz doesn't support copying extended attributes, access control | |
lists etc. from source to target file. | |
Multithreaded compression: | |
- Reduce memory usage of the current method. | |
- Implement threaded match finders. | |
- Implement pigz-style threading in LZMA2. | |
Multithreaded decompression | |
Buffer-to-buffer coding could use less RAM (especially when | |
decompressing LZMA1 or LZMA2). | |
I/O library is not implemented (similar to gzopen() in zlib). | |
It will be a separate library that supports uncompressed, .gz, | |
.bz2, .lzma, and .xz files. | |
Support changing lzma_options_lzma.mode with lzma_filters_update(). | |
Support LZMA_FULL_FLUSH for lzma_stream_decoder() to stop at | |
Block and Stream boundaries. | |
lzma_strerror() to convert lzma_ret to human readable form? | |
This is tricky, because the same error codes are used with | |
slightly different meanings, and this cannot be fixed anymore. | |
Make it possible to adjust LZMA2 options in the middle of a Block | |
so that the encoding speed vs. compression ratio can be optimized | |
when the compressed data is streamed over network. | |
Improved BCJ filters. The current filters are small but they aren't | |
so great when compressing binary packages that contain various file | |
types. Specifically, they make things worse if there are static | |
libraries or Linux kernel modules. The filtering could also be | |
more effective (without getting overly complex), for example, | |
streamable variant BCJ2 from 7-Zip could be implemented. | |
Filter that autodetects specific data types in the input stream | |
and applies appropriate filters for the corrects parts of the input. | |
Perhaps combine this with the BCJ filter improvement point above. | |
Long-range LZ77 method as a separate filter or as a new LZMA2 | |
match finder. | |
Documentation | |
------------- | |
More tutorial programs are needed for liblzma. | |
Document the LZMA1 and LZMA2 algorithms. | |
Miscellaneous | |
------------ | |
Try to get the media type for .xz registered at IANA. | |