الحاوية والضاغط ليسا الشيء نفسه
تختلط مهمتان منفصلتان تحت كلمة «ملف مضغوط». التجميع هو وضع ملفات كثيرة في ملف واحد مع الحفاظ على أسمائها ومجلداتها. أما الضغط فهو تصغير البايتات. صيغة TAR تجمّع فقط — فحجم ملف .tar يساوي مجموع أحجام كل ما بداخله. وGzip يضغط فقط، ودفقًا واحدًا في كل مرة، ولهذا وُجدت صيغة .tar.gz: التجميع أولًا، ثم ضغط الحزمة. أما ZIP فيقوم بالأمرين معًا، لكل ملف على حدة، ويحتفظ بفهرس لما بداخله.
هذا الفرق هو ما يحدد سلوك الصيغة معك. فلأن ملف ZIP يخزّن فهرسًا في نهايته ويضغط كل ملف على حدة، يمكنه عرض محتويات ملف مضغوط حجمه عشرة غيغابايت فورًا، واستخراج ملف واحد من المنتصف دون المساس بالباقي — وهذا بالضبط ما يفعله قارئ ZIP لدينا، إذ لا يفك ضغط أي شيء حتى تطلب شيئًا. أما الملف المضغوط المُصمَت (solid) فيضغط كل شيء كدفق واحد متصل، فيُكتشف التكرار عبر حدود الملفات وتأتي النتيجة أصغر، وأحيانًا أصغر بكثير عند وجود ملفات صغيرة كثيرة متشابهة مثل الشيفرة المصدرية أو السجلات. والثمن أنه لا توجد طريقة سهلة للوصول إلى ملف واحد في المنتصف: يجب فك ضغط كل ما قبله أولًا. صيغة 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 الأصلي مكسور إلى حد أنه مجرد زينة — فهجوم النص الواضح المعروف يستعيد المحتويات في ثوانٍ على أجهزة عادية، ومع ذلك ما زالت معظم البرامج تعرضه افتراضيًا. أما AES-256، الذي أُضيف لاحقًا، فهو تشفير حقيقي لا يمكن كسره. ولا نوفّر أيًّا منهما هنا: لن نطرح النوع المكسور، والنوع الحديث لا يتوفر له تطبيق أصلي في المتصفح يمكننا استخدامه بترخيص متساهل. ومن المفيد معرفة ذلك في كل الأحوال: ZIP لا يشفّر أسماء الملفات أبدًا، لذا يستطيع أي شخص قراءة فهرس الملف المضغوط المشفّر. فالاسم «Invoices/2024/Settlement-confidential.pdf» يظهر دون كلمة المرور.
الملف المضغوط هو النوع الوحيد من الملفات الذي قد تهاجم محتوياته البرنامج الذي يفتحه. قد يُسمّى ملف بداخله «../../.bashrc» ليهرب من المجلد الذي يُفك فيه، ويمكن تصميم بضعة كيلوبايتات لتتمدد إلى تيرابايتات وتُسقط علامة التبويب. ونتعامل مع الأمرين قبل أن ترى أي شيء: الأسماء العدائية — كالصعود إلى المجلد الأعلى، والمسارات المطلقة، وأحرف محركات أقراص Windows، وأسماء الأجهزة المحجوزة، والأحرف غير المرئية المستخدمة لإخفاء امتداد — تُقيَّد وتُعرض قائمة بكل تصحيح، ونسب التمدد تُقاس ويُرفض الملف بدل محاولة فكه. والروابط الرمزية داخل الملف المضغوط تُعرض لكن لا تُتَّبع أبدًا.