कंप्रेस (सॉफ़्टवेयर)

कंप्रेस एक यूनिक्स शैल  संपीड़न कार्यक्रम है जो LZW कंप्रेशन एल्गोरिदम पर आधारित है। जी gzip  सबसे तेज़ सेटिंग की तुलना में, कंप्रेसर संपीड़न पर थोड़ा कम है, डीकंप्रेसन पर थोड़ा तेज़ है, और इसमें डेटा संपीड़न अनुपात काफी कम है।  हटर पुरस्कार ़ डेटा को संपीड़ित करने के लिए 1.8 MiB मेमोरी का उपयोग किया जाता है, जो कि gzip की सबसे धीमी सेटिंग से थोड़ा अधिक है। कंप्रेस उपयोगिता का उपयोग करके संपीड़ित करने के बाद अनकंप्रेस उपयोगिता फ़ाइलों को उनकी मूल स्थिति में पुनर्स्थापित कर देगी। यदि कोई फ़ाइल निर्दिष्ट नहीं है, तो मानक इनपुट मानक आउटपुट पर असंपीड़ित हो जाएगा।

आगामी POSIX और सिंगल यूनिक्स विशिष्टता संशोधन में, यह योजना बनाई गई है कि gzip प्रारूप में उपयोग किए जाने वाले DEFLATE एल्गोरिदम को उन उपयोगिताओं में समर्थित किया जाएगा।

कार्यक्रम का विवरण
कंप्रेस द्वारा संपीड़ित फ़ाइलों को आम तौर पर फ़ाइल नाम एक्सटेंशन .Z दिया जाता है (पहले के पैक (संपीड़न) प्रोग्राम के बाद तैयार किया गया था जो फ़ाइल नाम एक्सटेंशन .z का उपयोग करता था)। कमांड लाइन विकल्प दिए जाने पर अधिकांश टार (फ़ाइल प्रारूप) प्रोग्राम अपने डेटा को कंप्रेस के माध्यम से पाइप (यूनिक्स) करेंगे. (टार प्रोग्राम अपने आप में संपीड़ित नहीं होता है; यह बस एक टेप संग्रह के भीतर कई फाइलों को संग्रहीत करता है।)

अनकंप्रेस का उपयोग करके फ़ाइलों को उनकी मूल स्थिति में लौटाया जा सकता है। अनकंप्रेस की सामान्य क्रिया केवल फ़ाइल की एक अनकंप्रेस्ड प्रतिलिपि बनाना नहीं है, बल्कि संपीड़ित फ़ाइल के टाइमस्टैम्प और अन्य विशेषताओं को पुनर्स्थापित करना भी है।

अन्य प्रणालियों पर कंप्रेस द्वारा उत्पादित फ़ाइलों के लिए, अनकंप्रेस 9- से 16-बिट संपीड़न का समर्थन करता है।

इतिहास
LZW एल्गोरिथम का उपयोग किया गया compress को 1983 में स्पेरी कॉर्पोरेशन द्वारा पेटेंट कराया गया था। टेरी वेल्च ने 1984 में एल्गोरिदम पर एक IEEE लेख प्रकाशित किया था, लेकिन यह ध्यान देने में असफल रहे कि उन्होंने एल्गोरिदम पर पेटेंट के लिए आवेदन किया था। यूटा विश्वविद्यालय के स्पेंसर थॉमस ने इस लेख को लिया और लागू किया compress 1984 में, यह जाने बिना कि LZW एल्गोरिथम पर एक पेटेंट लंबित था। ग्राफिक्स बदलाव प्रारूप छवि प्रारूप में भी इस तरह से LZW संपीड़न को शामिल किया गया, और यूनिसिस ने बाद में GIF के कार्यान्वयन पर रॉयल्टी का दावा किया। जोसेफ एम. ओरोस्ट ने टीम का नेतृत्व किया और थॉमस एट अल के साथ काम किया। का 'अंतिम' (4.0) संस्करण बनाने के लिए compress और इसे 1985 में 'net.sources' USENET समूह में मुफ्त सॉफ्टवेयर के रूप में प्रकाशित किया। 1985 में प्रदान किया गया था, और यही कारण है compress का उपयोग स्पेरी रिसर्च को रॉयल्टी का भुगतान किए बिना नहीं किया जा सकता था, जिसे अंततः यूनिसिस में विलय कर दिया गया था।

compress विशेष उपयोगकर्ता-समूहों के पक्ष से बाहर हो गया है क्योंकि यह LZW एल्गोरिथ्म का उपयोग करता है, जिसे यूनिसिस पेटेंट द्वारा कवर किया गया था – इस वजह से, बेहतर फ़ाइल संपीड़न के साथ-साथ अपने वैकल्पिक एल्गोरिदम के कारण लिनक्स-आधारित ऑपरेटिंग सिस्टम पर gzip और bzip2 की लोकप्रियता बढ़ गई। हालाँकि, कॉम्प्रेस ने यूनिक्स और बीएसडी सिस्टम पर उपस्थिति बनाए रखी है compress और uncompress कमांड को IBM i ऑपरेटिंग सिस्टम में भी पोर्ट कर दिया गया है। यूएस एलजेडडब्ल्यू पेटेंट 2003 में समाप्त हो गया, इसलिए यह अब संयुक्त राज्य अमेरिका में सार्वजनिक डोमेन में है। दुनिया भर में LZW पर सभी पेटेंट भी समाप्त हो गए हैं (ग्राफिक्स इंटरचेंज फॉर्मेट#यूनिसिस और LZW पेटेंट प्रवर्तन देखें)।

आगामी POSIX और सिंगल यूनिक्स विशिष्टता संशोधन में, यह योजना बनाई गई है कि gzip प्रारूप में उपयोग किए जाने वाले DEFLATE एल्गोरिदम को उन उपयोगिताओं में समर्थित किया जाएगा।

विशेष आउटपुट स्वरूप
आउटपुट बाइनरी में बिट समूह होते हैं। प्रत्येक बिट समूह में निश्चित मात्रा में बिट्स (9-16) वाले कोड होते हैं। प्रत्येक समूह (अंतिम को छोड़कर) को बिट्स की मात्रा को 8 से गुणा करके और शून्य के साथ दाएं पैड करके संरेखित किया जाना चाहिए। अंतिम समूह को 8 से संरेखित किया जाना चाहिए और शून्य के साथ गद्देदार होना चाहिए। आप ncompress अंक में अधिक जानकारी पा सकते हैं।

उदाहरण:
 * आप दस 9-बिट कोड, पांच 10-बिट कोड और तेरह 11-बिट कोड आउटपुट करना चाहते हैं। अब आपके पास बिट्स के तीन समूह हैं जिन्हें आप आउटपुट करना चाहते हैं: 90 बिट्स, 50 बिट्स और 143 बिट्स।
 * पहले समूह को 72 बिट्स (9 बिट्स × 8) से संरेखित करने के लिए 90 बिट्स डेटा + 54 शून्य बिट्स पैडिंग होना चाहिए।
 * दूसरे समूह में 50 बिट डेटा + 30 शून्य बिट पैडिंग होनी चाहिए ताकि इसे 80 बिट्स (10 बिट्स × 8) पर संरेखित किया जा सके।
 * तीसरे समूह में 143 बिट डेटा + 1 शून्य बिट पैडिंग होनी चाहिए ताकि इसे 8 बिट्स (केवल 1 बाइट, क्योंकि यह आउटपुट में अंतिम समूह है) से संरेखित किया जा सके।

यह वास्तव में एक बग है. LZW को किसी संरेखण की आवश्यकता नहीं है। यह बग मूल UNIX कंप्रेस, ncompress, gzip और यहां तक ​​कि विंडोज़ पोर्ट का भी हिस्सा है। यह 35 वर्षों से अधिक समय से अस्तित्व में है। सभी एप्लिकेशन/एक्स-कंप्रेस फ़ाइलें इस बग का उपयोग करके बनाई गई थीं। इसलिए हमें इसे आउटपुट स्पेसिफिकेशन में शामिल करना होगा।

कुछ कंप्रेस कार्यान्वयन अप्रारंभीकृत बफ़र से यादृच्छिक बिट्स को संरेखण बिट्स के रूप में लिखते हैं। इस बात की कोई गारंटी नहीं है कि संरेखण बिट्स शून्य होंगे। इसलिए 100% अनुकूलता के संदर्भ में डीकंप्रेसर को केवल संरेखण बिट मानों को अनदेखा करना होगा।

मानकीकरण और उपलब्धता
कंप्रेस को 1994 में एक्स/ओपन सीएई विशिष्टता में मानकीकृत किया गया था, और आगे द ओपन ग्रुप बेस स्पेसिफिकेशंस, अंक 6 और 7 में। लिनक्स मानक आधार को कंप्रेस की आवश्यकता नहीं है। कंप्रेस अक्सर लिनक्स वितरण में डिफ़ॉल्ट रूप से स्थापित नहीं होता है, लेकिन एक अतिरिक्त पैकेज से स्थापित किया जा सकता है। कंप्रेस FreeBSD, OpenBSD, MINIX, सोलारिस और AIX के लिए उपलब्ध है।

प्वाइंट-टू-प्वाइंट प्रोटोकॉल के लिए कंप्रेस की अनुमति है और HTTP/1.1 इंच के लिए, हालांकि आधुनिक तैनाती में इसका उपयोग शायद ही कभी किया जाता है क्योंकि बेहतर डिफ्लेट/जीज़िप उपलब्ध है।

यह भी देखें

 * आधार - सामग्री संकोचन
 * छवि संपीड़न
 * यूनिक्स कमांड की सूची
 * गज़िप

बाहरी संबंध

 * ncompress - public domain compress/uncompress implementation for POSIX systems
 * compress - original Unix compress (in a compress'd archive)
 * compress - original Unix compress executable (gzip'd)
 * Source Code for compress v4.0 (gzip'd sharchives)
 * ZIP File containing a Windows port of the compress utility
 * source code to the current version of fcompress.c from compress
 * bit groups alignment - Explanation of bit groups alignment.
 * lzws - New library and CLI, implemented without legacy code.
 * ruby-lzws - Ruby bindings with streaming support.
 * compress.com - official website for file compression.
 * source code to the current version of fcompress.c from compress
 * bit groups alignment - Explanation of bit groups alignment.
 * lzws - New library and CLI, implemented without legacy code.
 * ruby-lzws - Ruby bindings with streaming support.
 * compress.com - official website for file compression.