| |
| XZ Utils To-Do List |
| =================== |
| |
| Known bugs |
| ---------- |
| |
| The test suite is incomplete. |
| |
| 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. |
| |
| tuklib_exit() doesn't block signals => EINTR is possible. |
| |
| 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. |
| |
| 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. |
| |
| 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. |
| |
| Error codes from lzma_code() aren't very specific. A more detailed |
| error message (string) could be provided too. It could be returned |
| by a new function or use a currently-reserved member of lzma_stream. |
| |
| 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. |
| |