کنٹینر اور کمپریسر ایک چیز نہیں ہیں
لفظ “آرکائیو” کے تحت دو الگ کام آپس میں گڈمڈ ہو جاتے ہیں۔ بنڈلنگ کا مطلب ہے بہت سی فائلوں کو ایک فائل میں ڈالنا، ان کے نام اور فولڈرز برقرار رکھتے ہوئے۔ کمپریشن کا مطلب ہے بائٹس کو چھوٹا کرنا۔ 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 یونکس پرمیشنز، ملکیت اور سمبولک لنکس محفوظ کرتا ہے۔ براؤزر ان میں سے کچھ بھی آپ کی ڈسک سے نہیں پڑھ سکتا اور نہ واپس لکھ سکتا ہے، اس لیے TAR فائل بنائیں ایک معقول ڈیفالٹ موڈ لکھتا ہے، اور ہمارے ایکسٹریکٹرز پرمیشنز اور لنکس کو بحال کرنے کے بجائے ان کی فہرست دکھاتے ہیں۔ اگر آرکائیو ایک بیک اپ ہے جسے بالکل ویسے ہی واپس آنا ہے جیسے گیا تھا، تو اسے اسی مشین پر tar سے بنانا اور بحال کرنا ضروری ہے۔
ZIP انکرپشن دو قسم کی ہوتی ہے اور ان میں سے صرف ایک کسی کام کی ہے۔ پرانی ZipCrypto اسکیم اس حد تک ٹوٹ چکی ہے کہ محض دکھاوا رہ گئی ہے — known-plaintext حملہ عام ہارڈ ویئر پر سیکنڈوں میں مواد نکال لیتا ہے، اور زیادہ تر سافٹ ویئر اب بھی اسے ڈیفالٹ کے طور پر پیش کرتے ہیں۔ AES-256، جو بعد میں شامل کی گئی، اصل انکرپشن ہے اور توڑی نہیں جا سکتی۔ یہاں دونوں میں سے کوئی پیش نہیں کی جاتی: ٹوٹی ہوئی اسکیم ہم دیں گے نہیں، اور جدید اسکیم کا کوئی براؤزر نیٹو امپلیمنٹیشن ایسا نہیں جو ہم پرمیسو لائسنس کے تحت استعمال کر سکیں۔ دونوں صورتوں میں یہ جاننا مفید ہے: ZIP کبھی فائلوں کے نام انکرپٹ نہیں کرتا، اس لیے انکرپٹڈ آرکائیو کا کیٹلاگ کوئی بھی پڑھ سکتا ہے۔ "Invoices/2024/Settlement-confidential.pdf" پاس ورڈ کے بغیر نظر آتا ہے۔
آرکائیو وہ واحد فائل ہے جس کا مواد اسے کھولنے والے پروگرام پر حملہ کر سکتا ہے۔ اندر موجود کسی فائل کا نام "../../.bashrc" رکھا جا سکتا ہے تاکہ وہ اس فولڈر سے باہر نکل جائے جس میں اسے کھولا جا رہا ہے، اور چند کلوبائٹس کو اس طرح تیار کیا جا سکتا ہے کہ وہ ٹیرابائٹس میں پھیل کر ٹیب کو بند کر دیں۔ آپ کے کچھ دیکھنے سے پہلے ہی دونوں سے نمٹ لیا جاتا ہے: خطرناک نام — پیرنٹ ڈائریکٹری کی طرف چڑھائی، مکمل پاتھ، Windows ڈرائیو لیٹرز، مخصوص ڈیوائس نام، ایکسٹینشن چھپانے کے لیے استعمال ہونے والے غیر مرئی حروف — درست کر دیے جاتے ہیں اور ہر درستگی کی فہرست دکھائی جاتی ہے، اور پھیلاؤ کا تناسب ناپ کر ایسی آرکائیو کو کھولنے کی کوشش کے بجائے رد کر دیا جاتا ہے۔ آرکائیو کے اندر سمبولک لنکس دکھائے جاتے ہیں مگر ان پر کبھی عمل نہیں کیا جاتا۔