PAX (प्री-एलोकेट एक्सटेंशन) एक ओपन-सोर्स कंप्रेस्ड आर्काइव फॉर्मेट है जिसे माइक्रोसॉफ्ट द्वारा ZIP, RAR और tar जैसे मौजूदा फॉर्मेट के आधुनिक विकल्प के रूप में विकसित किया गया है। इसे आधुनिक सिस्टम और डिवाइस पर आर्काइव हैंडलिंग की कम्प्रेशन, परफॉर्मेंस, सिक्योरिटी और कार्यक्षमता को संबोधित करने और सुधारने के लिए डिज़ाइन किया गया था।
PAX फॉर्मेट की प्रमुख विभेदक विशेषताओं में आधुनिक एल्गोरिदम का उपयोग करके बढ़ी हुई कम्प्रेशन, आर्काइव के भीतर फाइलों तक कुशल रैंडम एक्सेस, नेटिव मल्टी-थ्रेडिंग सपोर्ट, एक्सटेंसिबल मेटाडेटा, बिल्ट-इन एन्क्रिप्शन और इंटीग्रिटी चेकिंग और व्यापक अ पनाने और इंटरऑपरेबिलिटी को प्रोत्साहित करने के लिए एक प्रलेखित ओपन स्पेसिफिकेशन शामिल है।
PAX आर्काइव .pax फाइल एक्सटेंशन का उपयोग करते हैं और एक मल्टी-पार्ट इंटरनल स्ट्रक्चर होता है जिसमें एक हेडर, सेंट्रल डायरेक्टरी, कंप्रेस्ड डेटा ब्लॉक और एक फुटर होता है। यह आर्काइव कंटेंट, कम्प्रेशन पैरामीटर और इंटीग्रिटी हैश जैसी प्रमुख जानकारी को वास्तविक कंप्रेस्ड फाइल डेटा से अलग से स्टोर करने की अनुमति देता है।
PAX हेडर पहचान के लिए 4-बाइट मैजिक नंबर (हेक्स में 50 41 58 00) से शुरू होता है। इसमें PAX वर्जन, कम्प्रेशन मेथड, एन्क्रिप्शन मेथड, हैश मेथड, ब्लॉक साइज, पैरेलल कम्प्रेशन थ्रेड की संख्या और विभिन्न फ्लैग के लिए फील्ड होते हैं। हेडर आर्काइव के बारे में विवरण प्रदान करने वाले एक्सटेंसिबल XML मेटाडेटा के साथ समाप्त होता है।
हेडर के बाद PAX सेंट्रल डायरेक्टरी है। इसमें आर्काइव में प्रत्य ेक कंप्रेस्ड फाइल/फोल्डर के लिए एक एंट्री होती है, जो फुल पाथ, एट्रिब्यूट, साइज, ब्लॉक ऑफसेट और हैश को स्टोर करती है। इसे एक जगह रखने से आर्काइव कंटेंट को कुशलतापूर्वक लिस्ट करने और कंप्रेस्ड डेटा को स्कैन किए बिना अलग-अलग फाइलों तक रैंडम एक्सेस की अनुमति मिलती है।
PAX आर्काइव का बड़ा हिस्सा कंप्रेस्ड डेटा ब्लॉक की एक श्रृंखला है। प्रत्येक ब्लॉक में एक छोटा हेडर होता है जो अनकंप्रेस्ड और कंप्रेस्ड साइज को इंगित करता है, इसके बाद कॉन्फ़िगर किए गए एल्गोरिदम के साथ कंप्रेस्ड फाइल डेटा का एक हिस्सा होता है। ब्लॉक डिफ़ॉल्ट रूप से 1 एमबी आकार के होते हैं लेकिन यह आर्काइव हेडर में ट्यूनेबल है।
यदि कोई एन्क्रिप्शन मेथड निर्दिष्ट है तो कंप्रेस्ड डेटा ब्लॉक वैकल्पिक रूप से एन्क्रिप्ट किए जाते हैं। PAX, AES-256 जैसी आधुनिक एन्क्रिप्शन योजनाओं का समर्थन करता है। आर्काइव पासवर्ड का उपयोग एक कुंजी प्राप्त करने के लिए किया जाता है जो प्रत्येक ब्लॉक को स्वतंत्र रूप से एन्क्रिप्ट करती है, जिससे कुशल रैंडम एक्सेस की अनुमति मिलती है। प्रमाणीकरण के लिए, PAX एक सुरक्षित KDF के साथ पासवर्ड को हैश करता है।
कम्प्रेशन के लिए, PAX विभिन्न प्रकार के आधुनिक सामान्य-उद्देश्य वाले कोडेक का समर्थन करता है जो तेजी से डीकम्प्रेशन के लिए अनुकूलित हैं: LZMA, LZ4, Brotli, Zstandard, आदि। यह विशिष्ट फाइलटाइप पर आकार को और कम करने के लिए प्रीप्रोसेसर की भी अनुमति देता है (जैसे EXEs/DLLs पर डेल्टा एन्कोडिंग, x86 कोड पर E8E9 एन्कोडिंग)। कोडेक और प्रीप्रोसेसर एक पाइपलाइन में लागू किए जाते हैं।
कुशल मल्टी-थ्रेडेड कम्प्रेशन को सक्षम करने के लिए, फाइलों को स्वतंत्र रूप से कंप्रेस्ड ब्लॉक में विभाजित किया जाता है जिन्हें समानांतर कोडेक इंस्टेंस द्वारा संसाधित किया जा सकता है। PAX कंप्रेसर सभी उपलब्ध CPU कोर का उपयोग करने के ल िए स्वचालित रूप से स्केल करता है। इसी तरह का विभाजन तेजी से निष्कर्षण के लिए समानांतर डीकम्प्रेशन की अनुमति देता है।
PAX मूल और कंप्रेस्ड डेटा के हैश को स्टोर करके डेटा इंटीग्रिटी और छेड़छाड़ का पता लगाता है। आर्काइव में ट्रंकेशन का पता लगाने के लिए एक हेडर हैश होता है। फाइल मेटाडेटा के साथ छेड़छाड़ को रोकने के लिए सेंट्रल डायरेक्टरी को भी हैश किया जाता है। कंप्रेस्ड डेटा में बिट रोट को प्रत्येक ब्लॉक को हैश करके पकड़ा जाता है।
PAX आर्काइव के अंत में फुटर होता है। इसमें हेडर फील्ड की एक कॉपी, सेंट्रल डायरेक्टरी का ऑफसेट/साइज और एक संपूर्ण-आर्काइव हैश होता है। फुटर एक निश्चित आकार का होता है और हमेशा फाइल के अंत में होता है, जिससे PAX आर्काइव का आसान स्थान और सत्यापन होता है।
PAX आर्काइव को सेंट्रल डायरेक्टरी को संशोधित करके और बदले हुए डेटा ब्लॉक को जोड़कर कुशलतापूर्वक अपडेट क िया जा सकता है, बनाम ZIP जैसे संपूर्ण आर्काइव को फिर से लिखना। मेटाडेटा को अपडेट करके और प्रासंगिक ब्लॉक को जोड़ने/हटाने से पूरी फाइलों को डाला, हटाया या बदला जा सकता है। आर्काइव को भी जल्दी से जोड़ा जा सकता है।
ज़िप-स्लिप भेद्यताओं को कम करने के लिए, PAX को स्पष्ट पथ (कोई ../ ट्रैवर्सल नहीं) की आवश्यकता होती है और निष्कर्षण रूट के बाहर लिखने से रोकता है। लंबे ZIP मेटाडेटा फ़ील्ड जो सेवा से इनकार को सक्षम करते हैं, प्रतिबंधित हैं। कम्प्रेशन अनुपात और मेमोरी उपयोग पर सीमा के माध्यम से कम्प्रेशन बम को कम किया जाता है।
PAX आर्काइव में फ़ाइल टाइमस्टैम्प 1-सेकंड की सटीकता के साथ तिथियों की एक विस्तृत श्रृंखला को कवर करने वाले एक मानक 64-बिट प्रारूप का उपयोग करते हैं। POSIX अनुमतियों और Windows ACL के लिए विशेषताएँ समर्थित हैं। PAX NTFS वैकल्पिक डेटा स्ट्रीम और संसाधन फोर्क को स्टोर कर सकता है। सिम्लिंक और हार्डलिंक भी प्रतिनिधित्व योग्य हैं।
ओपन-सोर्स PAX SDK, PAX आर्काइव को प्रोग्रामेटिक रूप से बनाने, निकालने, अपडेट करने और सत्यापित करने के लिए सरल API प्रदान करता है। यह PAX फॉर्मेट के सभी निम्न-स्तरीय विवरणों को हैंडल करता है। SDK कई भाषाओं में उपलब्ध है जिनमें C, C++, C#, Java, Python, JavaScript, Go और Rust शामिल हैं।
सारांश में, PAX आर्काइव फॉर्मेट ZIP जैसे सिद्ध फॉर्मेट की नींव पर बनाता है, जबकि आधुनिक विशेषताओं और अनुकूलन - कुशल कम्प्रेशन, मल्टी-थ्रेडिंग, रैंडम एक्सेस, सुरक्षा और एक खुले विनिर्देश को पेश करता है। यह PAX को आज के सिस्टम पर आर्काइवल परिदृश्यों की एक विस्तृत श्रृंखला के लिए आदर्श बनाता है।
फ़ाइल कंप्रेशन রিডन्डेंसी को कम करता है ताकि वही जानकारी कम बिट्स ले। आप कितनी दूर जा सकते हैं इसकी ऊपरी सीमा सूचना सिद्धांत द्वारा नियंत्रित होती है: दोषरहित कंप्रेशन के लिए, सीमा स्र ोत की एन्ट्रॉपी है (शैनन का स्रोत कोडिंग प्रमेय और उनका मूल 1948 का पेपर “संचार का एक गणितीय सिद्धांत”देखें)। दोषपूर्ण कंप्रेशन के लिए, दर और गुणवत्ता के बीच का ट्रेड-ऑफ दर-विरूपण सिद्धांत द्वारा कब्जा कर लिया गया है।
अधिकांश कंप्रेशर्स के दो चरण होते हैं। सबसे पहले, एक मॉडल डेटा में संरचना की भविष्यवाणी करता है या उजागर करता है। दूसरा, एक कोडर उन भविष्यवाणियों को लगभग-इष्टतम बिट पैटर्न में बदल देता है। एक क्लासिक मॉडलिंग परिवार लेम्पेल-ज़िव है: LZ77 (1977) और LZ78 (1978) बार-बार आने वाले सबस्ट्रिंग का पता लगाते हैं और कच्चे बाइट्स के बजाय संदर्भ उत्सर् जित करते हैं। कोडिंग पक्ष पर, हफमैन कोडिंग (मूल पेपर देखें 1952) अधिक संभावित प्रतीकों को छोटे कोड प्रदान करता है। अरिथमैटिक कोडिंग और रेंज कोडिंग बारीक-बारीक विकल्प हैं जो एन्ट्रॉपी सीमा के करीब निचोड़ते हैं, जबकि आधुनिक असममित अंक प्रणाली (ANS) तेज तालिका-चालित कार्यान्वयन के साथ समान कंप्रेशन प्राप्त करता है।
DEFLATE (gzip, zlib, और ZIP द्वारा उपयोग किया जाता है) LZ77 को हफमैन कोडिंग के साथ जोड़ता है। इसके स्पेक्स सार्वजनिक हैं: DEFLATE RFC 1951, zlib रैपर RFC 1950, और gzip फ़ाइल प्रारूप RFC 1952. Gzip स्ट्रीमिंग के लिए बनाया गया है और स्पष्ट रूप से यादृच्छिक पहुँच प्रदान करने का प्रयास नहीं करता है. PNG छवियां DEFLATE को अपनी एकमात्र कंप्रेशन विधि के रूप में मानकीकृत करती हैं (अधिकतम 32 KiB विंडो के साथ), PNG स्पेक के अनुसार “संपीड़न विधि 0… डिफ्लेट/इन्फ्लेट… अधिकतम 32768 बाइट्स” और W3C/ISO PNG दूसरा संस्करण.
Zstandard (zstd): एक नया सामान्य-उद्देश्य कंप्रेसर है जिसे बहुत तेज डीकंप्रेसन के साथ उच्च अनुपात के लिए डिज़ाइन किया गया है। प्रारूप RFC 8878 (यह भी HTML मिरर) और संदर्भ स्पेक GitHub परमें प्रलेखित है। Gzip की तरह, मूल फ्रेम यादृच्छिक पहुँच का लक्ष्य नहीं रखता है. zstd की महाशक्तियों में से एक शब्दकोश है: आपके कॉर्पस से छोटे नमूने जो कई छोटी या समान फ़ाइलों पर संपीड़न में नाटकीय रूप से सुधार करते हैं (देखें python-zstandard शब्दकोश डॉक्स और निगेल ताओ का काम किया हुआ उदाहरण)। कार्यान्वयन “असंरचित” और “संरचित” दोनों शब्दकोशों को स्वीकार करते हैं (चर्चा).
Brotli: वेब सामग्री के लिए अनुकूलित (जैसे, WOFF2 फोंट, HTTP)। यह एक स्थिर शब्दकोश को एक DEFLATE-जैसे LZ+एन्ट्रॉपी कोर के साथ मिलाता है। स्पेक RFC 7932