blob: 45ba433a583214e8f8a80d1c6065554e1115c481 [file] [log] [blame]
Lasse Collin5d018dc2007-12-09 00:42:33 +02001
Lasse Collin366e4362009-07-18 14:34:08 +03002XZ Utils To-Do List
3===================
Lasse Collin5d018dc2007-12-09 00:42:33 +02004
Lasse Collin366e4362009-07-18 14:34:08 +03005Known bugs
6----------
Lasse Collin5d018dc2007-12-09 00:42:33 +02007
Lasse Collin366e4362009-07-18 14:34:08 +03008 The test suite is too incomplete.
Lasse Collin5d018dc2007-12-09 00:42:33 +02009
Lasse Collinee5ddb82010-01-31 23:41:29 +020010 If the memory usage limit is less than about 13 MiB, xz is unable to
Lasse Collin366e4362009-07-18 14:34:08 +030011 automatically scale down the compression settings enough even though
12 it would be possible by switching from BT2/BT3/BT4 match finder to
13 HC3/HC4.
Lasse Collin5d018dc2007-12-09 00:42:33 +020014
Lasse Collin35b29e42009-08-27 15:23:27 +030015 XZ Utils compress some files significantly worse than LZMA Utils.
16 This is due to faster compression presets used by XZ Utils, and
Lasse Collince34ec42010-10-19 10:21:08 +030017 can often be worked around by using "xz --extreme". With some files
18 --extreme isn't enough though: it's most likely with files that
19 compress extremely well, so going from compression ratio of 0.003
20 to 0.004 means big relative increase in the compressed file size.
Lasse Collin35b29e42009-08-27 15:23:27 +030021
Lasse Collin5f6dddc2009-09-01 20:20:19 +030022 xz doesn't quote unprintable characters when it displays file names
23 given on the command line.
24
Lasse Collinee5ddb82010-01-31 23:41:29 +020025 tuklib_exit() doesn't block signals => EINTR is possible.
26
Lasse Collince34ec42010-10-19 10:21:08 +030027 SIGTSTP is not handled. If xz is stopped, the estimated remaining
28 time and calculated (de)compression speed won't make sense in the
29 progress indicator (xz --verbose).
30
Lasse Collinbd9cc172012-07-04 17:06:49 +030031 If liblzma has created threads and fork() gets called, liblzma
32 code will break in the child process unless it calls exec() and
33 doesn't touch liblzma.
34
Lasse Collin5d018dc2007-12-09 00:42:33 +020035
Lasse Collin366e4362009-07-18 14:34:08 +030036Missing features
37----------------
Lasse Collin5d018dc2007-12-09 00:42:33 +020038
Lasse Collin642f8562014-09-14 21:02:41 +030039 Add support for storing metadata in .xz files. A preliminary
40 idea is to create a new Stream type for metadata. When both
41 metadata and data are wanted in the same .xz file, two or more
42 Streams would be concatenated.
43
44 The state stored in lzma_stream should be cloneable, which would
45 be mostly useful when using a preset dictionary in LZMA2, but
46 it may have other uses too. Compare to deflateCopy() in zlib.
47
Lasse Collinbd9cc172012-07-04 17:06:49 +030048 Support LZMA_FINISH in raw decoder to indicate end of LZMA1 and
49 other streams that don't have an end of payload marker.
50
51 Adjust dictionary size when the input file size is known.
52 Maybe do this only if an option is given.
53
Lasse Collin366e4362009-07-18 14:34:08 +030054 xz doesn't support copying extended attributes, access control
55 lists etc. from source to target file.
Lasse Collin5d018dc2007-12-09 00:42:33 +020056
Lasse Collin14e6ad82011-04-12 11:45:40 +030057 Multithreaded compression:
58 - Reduce memory usage of the current method.
59 - Implement threaded match finders.
60 - Implement pigz-style threading in LZMA2.
Lasse Collin5d018dc2007-12-09 00:42:33 +020061
Lasse Collin366e4362009-07-18 14:34:08 +030062 Multithreaded decompression
Lasse Collin5d018dc2007-12-09 00:42:33 +020063
Lasse Collin366e4362009-07-18 14:34:08 +030064 Buffer-to-buffer coding could use less RAM (especially when
65 decompressing LZMA1 or LZMA2).
Lasse Collin5d018dc2007-12-09 00:42:33 +020066
Lasse Collince34ec42010-10-19 10:21:08 +030067 I/O library is not implemented (similar to gzopen() in zlib).
68 It will be a separate library that supports uncompressed, .gz,
69 .bz2, .lzma, and .xz files.
Lasse Collin5d018dc2007-12-09 00:42:33 +020070
Lasse Collin14e6ad82011-04-12 11:45:40 +030071 Support changing lzma_options_lzma.mode with lzma_filters_update().
72
73 Support LZMA_FULL_FLUSH for lzma_stream_decoder() to stop at
74 Block and Stream boundaries.
75
Lasse Collinee5ddb82010-01-31 23:41:29 +020076 lzma_strerror() to convert lzma_ret to human readable form?
77 This is tricky, because the same error codes are used with
Lasse Collince34ec42010-10-19 10:21:08 +030078 slightly different meanings, and this cannot be fixed anymore.
Lasse Collinee5ddb82010-01-31 23:41:29 +020079
Lasse Collin642f8562014-09-14 21:02:41 +030080 Make it possible to adjust LZMA2 options in the middle of a Block
81 so that the encoding speed vs. compression ratio can be optimized
82 when the compressed data is streamed over network.
83
84 Improved BCJ filters. The current filters are small but they aren't
85 so great when compressing binary packages that contain various file
86 types. Specifically, they make things worse if there are static
87 libraries or Linux kernel modules. The filtering could also be
88 more effective (without getting overly complex), for example,
89 streamable variant BCJ2 from 7-Zip could be implemented.
90
91 Filter that autodetects specific data types in the input stream
92 and applies appropriate filters for the corrects parts of the input.
93 Perhaps combine this with the BCJ filter improvement point above.
94
95 Long-range LZ77 method as a separate filter or as a new LZMA2
96 match finder.
97
Lasse Collin5d018dc2007-12-09 00:42:33 +020098
99Documentation
Lasse Collin366e4362009-07-18 14:34:08 +0300100-------------
Lasse Collin5d018dc2007-12-09 00:42:33 +0200101
Lasse Collin642f8562014-09-14 21:02:41 +0300102 More tutorial programs are needed for liblzma.
Lasse Collin5d018dc2007-12-09 00:42:33 +0200103
Lasse Collin366e4362009-07-18 14:34:08 +0300104 Document the LZMA1 and LZMA2 algorithms.
Lasse Collin5d018dc2007-12-09 00:42:33 +0200105
Lasse Collin642f8562014-09-14 21:02:41 +0300106
107Miscellaneous
108------------
109
110 Try to get the media type for .xz registered at IANA.
111