कंटेनर और कंप्रेसर एक चीज़ नहीं हैं
“आर्काइव” शब्द के नीचे दो अलग-अलग काम आपस में घुल-मिल जाते हैं। बंडल करना यानी कई फ़ाइलों को उनके नाम और फ़ोल्डर बरकरार रखते हुए एक फ़ाइल में रखना। कंप्रेशन यानी बाइट्स को छोटा करना। TAR सिर्फ़ बंडल करता है — एक .tar का साइज़ उसके अंदर की सभी चीज़ों के साइज़ का जोड़ होता है। Gzip सिर्फ़ कंप्रेस करता है, और वह भी एक बार में एक ही स्ट्रीम, इसीलिए .tar.gz मौजूद है: पहले बंडल करें, फिर बंडल को दबाएं। ZIP दोनों काम एक साथ करता है, हर फ़ाइल के लिए अलग से, और अंदर की चीज़ों की एक सूची (कैटलॉग) भी रखता है।
यही फ़र्क़ तय करता है कि फ़ॉर्मैट असल में कैसे बर्ताव करेगा। क्योंकि ZIP अपना कैटलॉग आख़िर में रखता है और हर फ़ाइल को अलग से कंप्रेस करता है, वह दस गीगाबाइट की आर्काइव की सूची तुरंत दिखा सकता है और बीच की किसी एक फ़ाइल को बाक़ी को छुए बिना निकाल सकता है — हमारा ZIP रीडर ठीक यही करता है, और जब तक आप कुछ मांगें नहीं, कुछ भी डीकंप्रेस नहीं करता। एक सॉलिड आर्काइव सब कुछ एक लगातार स्ट्रीम की तरह कंप्रेस करती है, इसलिए फ़ाइलों की सीमाओं के पार का दोहराव भी पकड़ में आता है और नतीजा छोटा होता है — सोर्स कोड या लॉग जैसी कई मिलती-जुलती छोटी फ़ाइलों के लिए कभी-कभी काफ़ी छोटा। क़ीमत यह है कि बीच की किसी एक फ़ाइल तक पहुंचने का कोई सस्ता रास्ता नहीं होता: उससे पहले का सब कुछ पहले डीकंप्रेस करना पड़ता है। TAR.GZ स्वभाव से ही सॉलिड है, 7z सॉलिड ब्लॉक में कंप्रेस करता है, और RAR को यहां कैटलॉग से नहीं, बल्कि शुरू से आख़िर तक पढ़ा जाता है।
जो कंटेंट पहले से कंप्रेस्ड है, वह दोबारा कंप्रेस नहीं होता। JPEG, PNG, MP3, MP4, PDF और हर आधुनिक Office फ़ाइल में कंप्रेशन पहले से मौजूद होता है, और deflate उन पर समय ख़र्च करके कुछ हासिल नहीं करता — कभी-कभी तो उलटे कुछ बाइट्स जोड़ देता है। इसीलिए फ़ोटो वाले फ़ोल्डर की ZIP का साइज़ फ़ोल्डर जितना ही निकलता है और लोग मान लेते हैं कि टूल ख़राब है। “ZIP फ़ाइल बनाएं” इन फ़ॉर्मैट को पहचानता है और दिखावा करने के बजाय उन्हें जस का तस रख देता है, इसीलिए फ़ोटो पर वह तुरंत पूरा हो जाता है और टेक्स्ट पर समय लेता है।
आर्काइव जो मेटाडेटा रखती है, वह वैसा नहीं होता जैसा आपकी डिस्क पर होता है। ZIP बदलाव का समय MS-DOS फ़ॉर्मैट में रखता है, जिसकी सटीकता दो सेकंड की है और जो 1980 से पहले या 2099 के बाद की तारीख़ दिखा ही नहीं सकता — इस दायरे से बाहर की तारीख़ें यहां पूरी आर्काइव को फ़ेल होने देने के बजाय दायरे की सीमा पर सेट कर दी जाती हैं; यह एक असली बग था जो हमें ज़ीरो तारीख़ वाली RAR फ़ाइलें कन्वर्ट करते समय मिला। TAR, Unix परमिशन, ओनरशिप और सिंबॉलिक लिंक रखता है। ब्राउज़र आपकी डिस्क से इनमें से कुछ भी नहीं पढ़ सकता और इनमें से कुछ भी वापस नहीं लिख सकता, इसलिए “TAR फ़ाइल बनाएं” एक समझदारी भरा डिफ़ॉल्ट मोड लिखता है, और हमारे एक्सट्रैक्टर परमिशन और लिंक को रीस्टोर करने के बजाय सिर्फ़ सूची में दिखाते हैं। अगर आर्काइव कोई बैकअप है जिसे बिल्कुल वैसे ही वापस आना है जैसे वह गया था, तो उसे उसी मशीन पर tar से बनाया और रीस्टोर किया जाना चाहिए।
ZIP एन्क्रिप्शन दो तरह का होता है, और उनमें से सिर्फ़ एक ही किसी काम का है। पुरानी ZipCrypto स्कीम इस हद तक टूट चुकी है कि वह बस दिखावटी है — known-plaintext अटैक से साधारण हार्डवेयर पर कुछ ही सेकंड में कंटेंट वापस निकाल लिया जाता है, और ज़्यादातर सॉफ़्टवेयर आज भी डिफ़ॉल्ट रूप से यही देते हैं। बाद में जोड़ा गया AES-256 असली एन्क्रिप्शन है और तोड़ा नहीं जा सकता। यहां इनमें से कोई भी उपलब्ध नहीं है: टूटी हुई स्कीम हम देंगे नहीं, और आधुनिक स्कीम का कोई ऐसा ब्राउज़र-नेटिव इम्प्लीमेंटेशन नहीं है जिसे हम परमिसिव लाइसेंस के तहत इस्तेमाल कर सकें। दोनों ही हालात में जानने लायक बात: ZIP कभी भी फ़ाइलों के नाम एन्क्रिप्ट नहीं करता, इसलिए एन्क्रिप्टेड आर्काइव का कैटलॉग भी कोई भी पढ़ सकता है। “Invoices/2024/Settlement-confidential.pdf” पासवर्ड के बिना भी दिखता है।
आर्काइव ही वह अकेली तरह की फ़ाइल है जिसका कंटेंट उसे खोलने वाले प्रोग्राम पर हमला कर सकता है। अंदर की किसी फ़ाइल का नाम “../../.bashrc” रखा जा सकता है ताकि वह उस फ़ोल्डर से बाहर निकल जाए जिसमें उसे अनपैक किया जा रहा है, और कुछ किलोबाइट को इस तरह गढ़ा जा सकता है कि वे फैलकर टेराबाइट बन जाएं और टैब को क्रैश कर दें। इन दोनों को आपके कुछ भी देखने से पहले ही संभाल लिया जाता है: ख़तरनाक नाम — पैरेंट डायरेक्टरी में ऊपर चढ़ना, एब्सोल्यूट पाथ, Windows ड्राइव लेटर, रिज़र्व्ड डिवाइस नाम, एक्सटेंशन छिपाने के लिए इस्तेमाल होने वाले अदृश्य कैरेक्टर — ठीक कर दिए जाते हैं और हर सुधार सूची में दिखाया जाता है, और फैलाव के अनुपात को मापा जाता है और आज़माने के बजाय मना कर दिया जाता है। आर्काइव के अंदर के सिंबॉलिक लिंक दिखाए जाते हैं, लेकिन उन पर कभी आगे नहीं जाया जाता।