Compress (software)


compress is a shell command for compressing data based on the LZW algorithm. uncompress is a companion shell command that restores files to their original state from a file created with.
Although once popular, has fallen out of favor because it uses the patented LZW algorithm. Its use has been replaced by commands such as gzip and bzip2 that use other algorithms and provide better data compression. Compared to gzip at its fastest setting, is slightly slower at compression, slightly faster at decompression, and has a significantly lower compression ratio. 1.8 MiB of memory is used to compress the Hutter Prize data, slightly more than at its slowest setting.
and have maintained a presence on Unix and BSD systems and have been ported to IBM i.
was standardized in X/Open CAE Specification in 1994, and further in The Open Group Base Specifications, Issue 6 and 7. Linux Standard Base does not require.
is often excluded from the default installation of a Linux distribution but can be installed from a separate package. is available for FreeBSD, OpenBSD, MINIX, Solaris and AIX.
is allowed for Point-to-Point Protocol in and for HTTP/1.1 in, though it is rarely used in modern deployments as the better deflate/gzip is available.

Use

Files compressed by are typically named with extension ".Z" and therefore sometimes called.Z files. The extension derives from the earlier pack program which used extension ".z".
Most tar implementations support compression by piping data through when given the -Z command line option.
can decompress.Z files.

Algorithm

The LZW algorithm used in was patented by Sperry Research Center in 1983. Terry Welch published an IEEE article on the algorithm in 1984, but failed to note that he had applied for a patent on the algorithm. Spencer Thomas of the University of Utah took this article and implemented in 1984, without realizing that a patent was pending on the LZW algorithm. The GIF image format also incorporated LZW compression in this way, and Unisys later claimed royalties on implementations of GIF. Joseph M. Orost led the team and worked with Thomas et al. to create the final version of and published it as free software to the net.sources USENET group in 1985. was granted in 1985 making unusable without paying royalties to Sperry Research.
The US LZW patent expired in 2003, so it is now in the public domain in the United States. Today, all LZW patents worldwide are expired.
As of POSIX.1-2024 supports the DEFLATE algorithm used in gzip.

File format

The compressed output consists of bit groups. Each bit group consists of codes with fixed amount of bits. Each group, except the last group, is aligned to the number of bits per code multiplied by 8 and right padded with zeroes. The last group is aligned to 8 bit octets and padded with zeroes. More information can be found at an issue on the ncompress GitHub repository.
Example:
The existence of padding bits is actually a bug, as LZW does not require any alignment. This bug existed for more than 35 years and was in the original UNIX compress, ncompress, gzip and the Windows port. All application/x-compress files were created using this bug.
Some implementations write random bits from uninitialized buffer in paddings. There is no guarantee that the paddings will be zeroes. The decompressor must ignore the values in the paddings for compatibility.