XZ

XZ फ़ाइल क्या होती है?

Unix पर चलन में मौजूद कंप्रेसरों में सबसे ताक़तवर। सोर्स कोड और पैकेज डाउनलोड करने का मानक।

XZ

XZ है क्या

XZ एक स्ट्रीम फ़ॉर्मेट है, जो शुरू से आख़िर तक लिखा और पढ़ा जाता है। इसका इस्तेमाल सहेजना के लिए होता है।

एक्सटेंशन .xz है और पूरा नाम XZ Archive। दोनों उतना नहीं बताते जितना यह कि फ़ाइल अंदर क्या-क्या रख सकती है — और इस पन्ने का बाक़ी हिस्सा इसी के बारे में है।

XZ आया कहाँ से

यह 2009 तक पीछे जाता है।

उम्र एक व्यावहारिक वजह से काम की है: फ़ॉर्मेट जितना पुराना, उतने ज़्यादा प्रोग्रामों को उसे सीखने का वक़्त मिला है।

विनिर्देश सार्वजनिक है

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

कुछ भी फेंका नहीं जाता

XZ फ़ाइल अपना अंदरूनी हिस्सा हूबहू सहेजती है। दोबारा सहेजने से कुछ नहीं बदलता, इसलिए इसे जितनी बार चाहें खोलिए, बदलिए और फिर से सहेजिए — नुक़सान जमा नहीं होता। यही बात इसे सौंपने का नहीं, काम करने का फ़ॉर्मेट बनाती है।

यह ठीक एक फ़ाइल रखती है

XZ फ़ाइल एक ही धारा को कंप्रेस करती है और फ़ाइल के नाम या फ़ोल्डर जैसी कोई चीज़ नहीं जानती। इसीलिए यह इतनी बार TAR के साथ दिखती है, जो यही छूटा हुआ ढाँचा जोड़ देता है।

इसका कंप्रेशन अनुपात आता कहाँ से है

यह एक बार में 8 MB पर काम करता है: दोहराव जितनी दूरी में फैला हो, उसे इसी दायरे के अंदर आना पड़ता है, तभी उसे दबाया जा सकता है।

यही एक संख्या एक आर्काइव फ़ॉर्मेट और दूसरे के बीच का ज़्यादातर फ़र्क़ समझा देती है। बड़ा दायरा ज़्यादा दोहराव ढूँढ़ लेता है और उसके लिए ज़्यादा वक़्त और ज़्यादा मेमोरी लेता है — पूरा सौदा बस इतना है।

अपनी हिफ़ाज़त के लिए यह क्या करती है

XZ फ़ाइल अपने साथ एक चेकसम, जिससे ख़राब हुई फ़ाइल चुपचाप ग़लत पढ़े जाने के बजाय पकड़ में आ जाए लाती है।

चेकसम कुछ ठीक नहीं करता। वह आपको बताता है कि फ़ाइल ख़राब है — और यही फ़र्क़ है अभी पता चलने में और उससे पता चलने में जिसे आपने वह फ़ाइल भेज दी थी।

XZ को खोलता कौन है

xz, 7-Zip और Keka इसे पढ़ते हैं, और इसी तरह के ज़्यादातर दूसरे प्रोग्राम भी।

फ़ाइल न खुले तो कसूर फ़ॉर्मेट का शायद ही कभी होता है — अक्सर प्रोग्राम ही फ़ॉर्मेट से पुराना होता है। किसी पुरानी चीज़ में बदल लेना इससे निकलने का भरोसेमंद रास्ता है, और इस वेबसाइट का बाक़ी हिस्सा इसी के लिए है।

इसे ब्राउज़र में खोलना

इसे कोई भी ब्राउज़र नहीं पढ़ता।

इसे बदलने की सबसे आम वजह यही है: फ़ॉर्मेट ख़राब है, ऐसा नहीं — बात यह है कि जहाँ आप फ़ाइल दिखाना चाहते हैं वह जगह उसे पढ़ ही नहीं सकती।

यह सौंपने का फ़ॉर्मेट है

XZ सौंपने के लिए बना है, इसके अंदर काम करने के लिए नहीं। इसे बदलना मुमकिन है और शायद ही कभी सुखद; समझदारी का रास्ता मूल फ़ाइल से होकर और एक नए निर्यात से होकर जाता है।

इसके साथ ग़लत क्या होता है

बार-बार आने वाली शिकायतें: यह एक ही धारा सँभालता है और फ़ोल्डर बयान नहीं कर सकता।

इनमें से कोई भी फ़ॉर्मेट से दूर रहने की वजह नहीं है। ये वे बातें हैं जिन्हें इनमें से कोई आपको चौंकाए उससे पहले जान लेना चाहिए — यह अलग दावा है, और ज़्यादा काम का।

एक स्ट्रीम, कोई फ़ाइलनाम नहीं, कोई आर्काइव नहीं

यही 7z से पूरा फ़र्क़ है और बाक़ी सब समझा देता है। xz फ़ाइल ठीक एक कंप्रेस्ड स्ट्रीम रखती है। इसमें कोई डायरेक्ट्री नहीं, नामों की कोई सूची नहीं, कई फ़ाइलों की कोई अवधारणा नहीं। `report.txt` कंप्रेस कीजिए और `report.txt.xz` मिलती है; उसमें और कुछ नहीं।

यही वजह है `.tar.xz` सामान्य रूप है। Tar डायरेक्ट्री पेड़ को एक स्ट्रीम में बाँधता है और xz उस स्ट्रीम को कंप्रेस करता है, जो `.tar.gz` जैसा ही काम-बँटवारा है। `.7z` को tar नहीं चाहिए क्योंकि 7z ख़ुद आर्काइव फ़ॉर्मेट है, और `.xz` को चाहिए क्योंकि यह नहीं है।

7z जैसा ही कंप्रेशन, अलग लपेटन में

दोनों LZMA2 इस्तेमाल करते हैं, तो एक जैसे डेटा पर वे बहुत मिलते-जुलते आकार देते हैं। xz टेक्स्ट, सोर्स कोड और लॉग पर gzip को आम तौर पर तीस प्रतिशत या ज़्यादा से हराता है — इतना फ़र्क़ कि 100 MB का डाउनलोड 65 बन जाता है।

यह समय और मेमोरी की क़ीमत पर मिलता है। ऊँची preset पर compress करना gzip से कई गुना ज़्यादा समय ले सकता है और कई सौ मेगाबाइट working मेमोरी माँग सकता है। Decompression हर हाल में तेज़ और सस्ता है, जो एक बार कंप्रेस होकर बहुत बार डाउनलोड होने वाली चीज़ के लिए सही शक्ल है।

Linux डिस्ट्रीब्यूशन ने इसे मानक क्यों बनाया

Linux kernel `.tar.xz` के तौर पर बाँटा जाता है। ज़्यादातर डिस्ट्रीब्यूशन पैकेज आर्काइव और सोर्स रिलीज़ का बड़ा हिस्सा भी। हिसाब सादा है: लाखों बार डाउनलोड होने वाली फ़ाइल लगभग किसी भी कंप्रेशन मेहनत को जायज़ ठहराती है, क्योंकि क़ीमत एक बार चुकती है और बचत हर डाउनलोड से गुणा होती है।

यही वजह है xz आम तौर पर सॉफ़्टवेयर लाते समय मिलता है, किसी के भेजने पर नहीं। यह वितरण फ़ॉर्मेट है, साझा करने वाला नहीं, और यह फ़र्क़ इसके इर्द-गिर्द के टूलिंग में दिखता है।

2024 का backdoor, जिसे साफ़ समझना ज़रूरी है

मार्च 2024 में xz-utils सॉफ़्टवेयर में एक backdoor मिला — वर्ज़न 5.6.0 और 5.6.1, CVE-2024-3094 के तौर पर दर्ज। इसे जान-बूझकर एक contributor ने डाला था जिसने प्रोजेक्ट में भरोसा बनाने में क़रीब दो साल लगाए, और इसका निशाना उन सिस्टम पर SSH daemon था जहाँ xz से जुड़ी लाइब्रेरी लोड होती थी।

इसे Andres Freund नाम के डेवलपर ने पकड़ा, जिसने देखा SSH लॉगिन उम्मीद से क़रीब आधा सेकंड ज़्यादा ले रहा था और उस असामान्यता का पीछा किया, कंधे उचकाने की बजाय। प्रभावित वर्ज़न testing शाखाओं में थे और stable डिस्ट्रीब्यूशन तक बमुश्किल पहुँचे थे।

इसका आपकी फ़ाइलों के लिए क्या मतलब है, क्या नहीं

फ़ाइल फ़ॉर्मेट के बारे में कुछ भी compromise नहीं हुआ। Backdoor किसी ख़ास प्रोग्राम की किसी ख़ास रिलीज़ में था, इसने xz फ़ाइल की बनावट नहीं बदली, और उस दौर से पहले, दौरान या बाद बनी `.xz` एक सादी कंप्रेस्ड स्ट्रीम है। किसी सादी xz फ़ाइल में यह exploit ढोने का कोई तरीक़ा नहीं।

स्थायी अहमियत ओपन-सोर्स सॉफ़्टवेयर के रख-रखाव के बारे में है, कंप्रेशन के बारे में नहीं। यह इस फ़ॉर्मेट के साथ हुई सबसे अहम घटना बनी रहती है, और इसे अफ़वाह की बजाय सटीक तौर पर जानना ज़रूरी है।

Integrity जाँच, जो यहाँ असामान्य है

xz एक checksum रखता है — CRC32, CRC64 या SHA-256 — और decompress करते समय उसे परखता है। अगर रास्ते में या ख़राब डिस्क पर कोई बाइट बदला, extraction साफ़ त्रुटि के साथ नाकाम होता है, चुपचाप ग़लत नतीजा देने की बजाय।

यह सादे gzip पर असली फ़ायदा है, जिसकी जाँच कमज़ोर है, और यही एक वजह है डिस्ट्रीब्यूशन सॉफ़्टवेयर डिलीवरी के लिए इस पर भरोसा करते हैं। यह क्षति पकड़ता है; उसे ठीक नहीं करता।

zstd कहाँ फ़िट होता है, और कुछ प्रोजेक्ट क्यों बदले

Zstandard, जिसे Facebook ने 2016 में जारी किया, gzip जैसी रफ़्तार पर xz जितना ही अच्छे से कंप्रेस करता है। जहाँ कंप्रेशन समय मायने रखता है — पैकेज बनाना, रोज़ रात बैकअप, लगातार लिखा जा रहा डेटा — वह जोड़ी बहस से परे है, और कई डिस्ट्रीब्यूशन अपना पैकेज फ़ॉर्मेट इसमें बदल चुके हैं।

xz अपनी सबसे ऊँची सेटिंग पर शुद्ध अनुपात में अब भी जीतता है, जो इसे सोर्स रिलीज़ और kernel आर्काइव में जगह देता है जहाँ फ़ाइल एक बार बनती है। दोनों असल में एक ही काम के लिए होड़ नहीं कर रहे।

इसे खोलना, और असल में क्या मिलता है

हर Linux सिस्टम कमांड-लाइन से xz संभालता है। मूल macOS `xz` बाइनरी नहीं भेजता — Homebrew या MacPorts इसे देता है — पर उसका libarchive-आधारित `tar` बिना मदद के `.tar.xz` खोल देता है। Windows को 7-Zip जैसी उपयोगिता चाहिए, जो इसे आसानी से पढ़ती है।

सादी `.xz` को decompress करने से फ़ोल्डर की उम्मीद मत रखिए। ठीक एक फ़ाइल वापस मिलती है — जो कंप्रेस की गई थी — क्योंकि फ़ॉर्मेट कभी इससे ज़्यादा नहीं रखता। अगर आपको डायरेक्ट्री ट्री चाहिए थी, जो आर्काइव आप चाहते थे वह भीतर की `.tar` है।

कब इस्तेमाल करें

तब इस्तेमाल कीजिए जब कुछ एक बार कंप्रेस होकर कई बार लाया जाता है: कोई रिलीज़, डाउनलोड, लंबे समय के भंडारण में जाने वाला आर्काइव जहाँ हर गीगाबाइट की क़ीमत चुकानी है। कंप्रेशन के समय के अतिरिक्त मिनट हर बार लाने पर बँट जाते हैं।

किसी इंसान को फ़ाइल भेजने के लिए इसे इस्तेमाल न करें। ZIP वह है जो उनका कंप्यूटर बिना मदद के खोल लेता है, और एक ट्रांसफ़र पर आकार का फ़र्क़ शायद ही कभी `.xz` क्या है और कैसे खोलें यह समझाने की झंझट लायक़ हो।

ज़रूरी जानकारी, एक जगह

XZ फ़ॉर्मेट की पहचान और उसका स्रोत।
एक्सटेंशन.xz
मीडिया टाइपapplication/x-xz
पहली बार प्रकाशित2009