1207753Smm
2207753SmmXZ Utils To-Do List
3207753Smm===================
4207753Smm
5207753SmmKnown bugs
6207753Smm----------
7207753Smm
8207753Smm    The test suite is too incomplete.
9207753Smm
10207753Smm    If the memory usage limit is less than about 13 MiB, xz is unable to
11207753Smm    automatically scale down the compression settings enough even though
12207753Smm    it would be  possible by switching from BT2/BT3/BT4 match finder to
13207753Smm    HC3/HC4.
14207753Smm
15207753Smm    XZ Utils compress some files significantly worse than LZMA Utils.
16207753Smm    This is due to faster compression presets used by XZ Utils, and
17215187Smm    can often be worked around by using "xz --extreme". With some files
18215187Smm    --extreme isn't enough though: it's most likely with files that
19215187Smm    compress extremely well, so going from compression ratio of 0.003
20215187Smm    to 0.004 means big relative increase in the compressed file size.
21207753Smm
22207753Smm    xz doesn't quote unprintable characters when it displays file names
23207753Smm    given on the command line.
24207753Smm
25207753Smm    tuklib_exit() doesn't block signals => EINTR is possible.
26207753Smm
27215187Smm    SIGTSTP is not handled. If xz is stopped, the estimated remaining
28215187Smm    time and calculated (de)compression speed won't make sense in the
29215187Smm    progress indicator (xz --verbose).
30207753Smm
31292588Sdelphij    If liblzma has created threads and fork() gets called, liblzma
32292588Sdelphij    code will break in the child process unless it calls exec() and
33292588Sdelphij    doesn't touch liblzma.
34215187Smm
35292588Sdelphij
36207753SmmMissing features
37207753Smm----------------
38207753Smm
39292588Sdelphij    Add support for storing metadata in .xz files. A preliminary
40292588Sdelphij    idea is to create a new Stream type for metadata. When both
41292588Sdelphij    metadata and data are wanted in the same .xz file, two or more
42292588Sdelphij    Streams would be concatenated.
43292588Sdelphij
44292588Sdelphij    The state stored in lzma_stream should be cloneable, which would
45292588Sdelphij    be mostly useful when using a preset dictionary in LZMA2, but
46292588Sdelphij    it may have other uses too. Compare to deflateCopy() in zlib.
47292588Sdelphij
48292588Sdelphij    Support LZMA_FINISH in raw decoder to indicate end of LZMA1 and
49292588Sdelphij    other streams that don't have an end of payload marker.
50292588Sdelphij
51292588Sdelphij    Adjust dictionary size when the input file size is known.
52292588Sdelphij    Maybe do this only if an option is given.
53292588Sdelphij
54207753Smm    xz doesn't support copying extended attributes, access control
55207753Smm    lists etc. from source to target file.
56207753Smm
57292588Sdelphij    Multithreaded compression:
58292588Sdelphij      - Reduce memory usage of the current method.
59292588Sdelphij      - Implement threaded match finders.
60292588Sdelphij      - Implement pigz-style threading in LZMA2.
61207753Smm
62207753Smm    Multithreaded decompression
63207753Smm
64207753Smm    Buffer-to-buffer coding could use less RAM (especially when
65207753Smm    decompressing LZMA1 or LZMA2).
66207753Smm
67215187Smm    I/O library is not implemented (similar to gzopen() in zlib).
68215187Smm    It will be a separate library that supports uncompressed, .gz,
69215187Smm    .bz2, .lzma, and .xz files.
70207753Smm
71292588Sdelphij    Support changing lzma_options_lzma.mode with lzma_filters_update().
72292588Sdelphij
73292588Sdelphij    Support LZMA_FULL_FLUSH for lzma_stream_decoder() to stop at
74292588Sdelphij    Block and Stream boundaries.
75292588Sdelphij
76207753Smm    lzma_strerror() to convert lzma_ret to human readable form?
77207753Smm    This is tricky, because the same error codes are used with
78215187Smm    slightly different meanings, and this cannot be fixed anymore.
79207753Smm
80292588Sdelphij    Make it possible to adjust LZMA2 options in the middle of a Block
81292588Sdelphij    so that the encoding speed vs. compression ratio can be optimized
82292588Sdelphij    when the compressed data is streamed over network.
83207753Smm
84292588Sdelphij    Improved BCJ filters. The current filters are small but they aren't
85292588Sdelphij    so great when compressing binary packages that contain various file
86292588Sdelphij    types. Specifically, they make things worse if there are static
87292588Sdelphij    libraries or Linux kernel modules. The filtering could also be
88292588Sdelphij    more effective (without getting overly complex), for example,
89292588Sdelphij    streamable variant BCJ2 from 7-Zip could be implemented.
90292588Sdelphij
91292588Sdelphij    Filter that autodetects specific data types in the input stream
92292588Sdelphij    and applies appropriate filters for the corrects parts of the input.
93292588Sdelphij    Perhaps combine this with the BCJ filter improvement point above.
94292588Sdelphij
95292588Sdelphij    Long-range LZ77 method as a separate filter or as a new LZMA2
96292588Sdelphij    match finder.
97292588Sdelphij
98292588Sdelphij
99207753SmmDocumentation
100207753Smm-------------
101207753Smm
102292588Sdelphij    More tutorial programs are needed for liblzma.
103207753Smm
104207753Smm    Document the LZMA1 and LZMA2 algorithms.
105207753Smm
106292588Sdelphij
107292588SdelphijMiscellaneous
108292588Sdelphij------------
109292588Sdelphij
110292588Sdelphij    Try to get the media type for .xz registered at IANA.
111292588Sdelphij
112