xref: /freebsd/contrib/xz/TODO (revision 128836d304d93f2d00eb14069c27089ab46c38d4)
181ad8388SMartin Matuska
281ad8388SMartin MatuskaXZ Utils To-Do List
381ad8388SMartin Matuska===================
481ad8388SMartin Matuska
581ad8388SMartin MatuskaKnown bugs
681ad8388SMartin Matuska----------
781ad8388SMartin Matuska
8*128836d3SXin LI    The test suite is incomplete.
981ad8388SMartin Matuska
1081ad8388SMartin Matuska    XZ Utils compress some files significantly worse than LZMA Utils.
1181ad8388SMartin Matuska    This is due to faster compression presets used by XZ Utils, and
12542aef48SMartin Matuska    can often be worked around by using "xz --extreme". With some files
13542aef48SMartin Matuska    --extreme isn't enough though: it's most likely with files that
14542aef48SMartin Matuska    compress extremely well, so going from compression ratio of 0.003
15542aef48SMartin Matuska    to 0.004 means big relative increase in the compressed file size.
1681ad8388SMartin Matuska
1781ad8388SMartin Matuska    tuklib_exit() doesn't block signals => EINTR is possible.
1881ad8388SMartin Matuska
1953200025SRui Paulo    If liblzma has created threads and fork() gets called, liblzma
2053200025SRui Paulo    code will break in the child process unless it calls exec() and
2153200025SRui Paulo    doesn't touch liblzma.
2253200025SRui Paulo
2381ad8388SMartin Matuska
2481ad8388SMartin MatuskaMissing features
2581ad8388SMartin Matuska----------------
2681ad8388SMartin Matuska
2753200025SRui Paulo    Add support for storing metadata in .xz files. A preliminary
2853200025SRui Paulo    idea is to create a new Stream type for metadata. When both
2953200025SRui Paulo    metadata and data are wanted in the same .xz file, two or more
3053200025SRui Paulo    Streams would be concatenated.
3153200025SRui Paulo
3253200025SRui Paulo    The state stored in lzma_stream should be cloneable, which would
3353200025SRui Paulo    be mostly useful when using a preset dictionary in LZMA2, but
3453200025SRui Paulo    it may have other uses too. Compare to deflateCopy() in zlib.
3553200025SRui Paulo
3653200025SRui Paulo    Adjust dictionary size when the input file size is known.
3753200025SRui Paulo    Maybe do this only if an option is given.
3853200025SRui Paulo
3981ad8388SMartin Matuska    xz doesn't support copying extended attributes, access control
4081ad8388SMartin Matuska    lists etc. from source to target file.
4181ad8388SMartin Matuska
4253200025SRui Paulo    Multithreaded compression:
4353200025SRui Paulo      - Reduce memory usage of the current method.
4453200025SRui Paulo      - Implement threaded match finders.
4553200025SRui Paulo      - Implement pigz-style threading in LZMA2.
4681ad8388SMartin Matuska
4781ad8388SMartin Matuska    Buffer-to-buffer coding could use less RAM (especially when
4881ad8388SMartin Matuska    decompressing LZMA1 or LZMA2).
4981ad8388SMartin Matuska
50542aef48SMartin Matuska    I/O library is not implemented (similar to gzopen() in zlib).
51542aef48SMartin Matuska    It will be a separate library that supports uncompressed, .gz,
52542aef48SMartin Matuska    .bz2, .lzma, and .xz files.
5381ad8388SMartin Matuska
5453200025SRui Paulo    Support changing lzma_options_lzma.mode with lzma_filters_update().
5553200025SRui Paulo
5653200025SRui Paulo    Support LZMA_FULL_FLUSH for lzma_stream_decoder() to stop at
5753200025SRui Paulo    Block and Stream boundaries.
5853200025SRui Paulo
59*128836d3SXin LI    Error codes from lzma_code() aren't very specific. A more detailed
60*128836d3SXin LI    error message (string) could be provided too. It could be returned
61*128836d3SXin LI    by a new function or use a currently-reserved member of lzma_stream.
6281ad8388SMartin Matuska
6353200025SRui Paulo    Make it possible to adjust LZMA2 options in the middle of a Block
6453200025SRui Paulo    so that the encoding speed vs. compression ratio can be optimized
6553200025SRui Paulo    when the compressed data is streamed over network.
6653200025SRui Paulo
6753200025SRui Paulo    Improved BCJ filters. The current filters are small but they aren't
6853200025SRui Paulo    so great when compressing binary packages that contain various file
6953200025SRui Paulo    types. Specifically, they make things worse if there are static
7053200025SRui Paulo    libraries or Linux kernel modules. The filtering could also be
7153200025SRui Paulo    more effective (without getting overly complex), for example,
7253200025SRui Paulo    streamable variant BCJ2 from 7-Zip could be implemented.
7353200025SRui Paulo
7453200025SRui Paulo    Filter that autodetects specific data types in the input stream
7553200025SRui Paulo    and applies appropriate filters for the corrects parts of the input.
7653200025SRui Paulo    Perhaps combine this with the BCJ filter improvement point above.
7753200025SRui Paulo
7853200025SRui Paulo    Long-range LZ77 method as a separate filter or as a new LZMA2
7953200025SRui Paulo    match finder.
8053200025SRui Paulo
8181ad8388SMartin Matuska
8281ad8388SMartin MatuskaDocumentation
8381ad8388SMartin Matuska-------------
8481ad8388SMartin Matuska
8553200025SRui Paulo    More tutorial programs are needed for liblzma.
8681ad8388SMartin Matuska
8781ad8388SMartin Matuska    Document the LZMA1 and LZMA2 algorithms.
8881ad8388SMartin Matuska
89