কনটেইনার আর কমপ্রেসর এক জিনিস নয়
“আর্কাইভ” শব্দের আড়ালে দুটি আলাদা কাজ গুলিয়ে যায়। বান্ডলিং মানে অনেক ফাইলকে একটি ফাইলে রাখা, তাদের নাম ও ফোল্ডার অক্ষত রেখে। কমপ্রেশন মানে বাইট ছোট করা। TAR শুধু বান্ডল করে — একটি .tar-এর সাইজ ভেতরের সবকিছুর সাইজের যোগফল। Gzip শুধু কমপ্রেস করে, তাও একবারে একটিমাত্র স্ট্রিম, আর এ কারণেই .tar.gz আছে: আগে বান্ডল, তারপর সেই বান্ডলকে চেপে ছোট করা। ZIP দুটোই একসাথে করে, প্রতিটি ফাইল আলাদাভাবে, আর ভেতরে কী আছে তার একটি তালিকা (ক্যাটালগ) রাখে।
এই পার্থক্যই ঠিক করে দেয় ফরম্যাটটি আপনার হাতে কেমন আচরণ করবে। ZIP যেহেতু শেষে একটি ক্যাটালগ রাখে আর প্রতিটি ফাইল আলাদাভাবে কমপ্রেস করে, তাই দশ গিগাবাইটের আর্কাইভের তালিকাও সঙ্গে সঙ্গে দেখাতে পারে, আর বাকিগুলো না ছুঁয়েই মাঝখান থেকে একটি ফাইল বের করতে পারে — আমাদের ZIP রিডার ঠিক এটাই করে, আপনি কিছু না চাওয়া পর্যন্ত কিছুই ডিকমপ্রেস করে না। একটি সলিড আর্কাইভ সবকিছুকে একটি টানা স্ট্রিম হিসেবে কমপ্রেস করে, ফলে ফাইলের সীমানা পেরিয়েও পুনরাবৃত্তি ধরা পড়ে আর ফল হয় ছোট — সোর্স কোড বা লগের মতো একই ধাঁচের অনেক ছোট ফাইলে কখনো কখনো অনেক ছোট। এর মূল্য হলো, মাঝখানের একটি ফাইলে পৌঁছানোর সহজ কোনো উপায় থাকে না: তার আগের সবকিছু আগে ডিকমপ্রেস করতে হয়। TAR.GZ স্বভাবতই সলিড, 7z সলিড ব্লকে কমপ্রেস করে, আর এখানে RAR ক্যাটালগ থেকে নয়, শুরু থেকে পুরোটা পড়ে যাওয়া হয়।
আগে থেকে কমপ্রেস করা কনটেন্ট আবার কমপ্রেস হয় না। JPEG, PNG, MP3, MP4, PDF এবং প্রতিটি আধুনিক Office ফাইলে কমপ্রেশন আগে থেকেই আছে, আর deflate এগুলোর পেছনে সময় খরচ করে কিছুই অর্জন করে না — মাঝে মাঝে উল্টো কয়েক বাইট বাড়িয়ে দেয়। এ কারণেই ছবির একটি ফোল্ডার ZIP করলে ফোল্ডারের সমান সাইজই থাকে, আর মানুষ ভাবেন টুলটি নষ্ট। ZIP ফাইল তৈরি এই ফরম্যাটগুলো চিনে নেয় এবং ভান না করে যেমন আছে তেমনই রেখে দেয় — এ কারণেই ছবিতে এটি সঙ্গে সঙ্গে শেষ হয়, আর টেক্সটে সময় নেয়।
আর্কাইভ যে মেটাডেটা বহন করে, তা আপনার ডিস্কের মেটাডেটা নয়। ZIP পরিবর্তনের সময় রাখে MS-DOS ফরম্যাটে, যার রেজোলিউশন দুই সেকেন্ড এবং যা ১৯৮০-র আগের বা ২০৯৯-এর পরের কোনো তারিখ প্রকাশ করতে পারে না — এই সীমার বাইরের তারিখকে এখানে সীমার মধ্যে এনে রাখা হয়, পুরো আর্কাইভ ব্যর্থ হতে দেওয়া হয় না; শূন্য তারিখওয়ালা RAR কনভার্ট করতে গিয়ে আমরা সত্যিই এই বাগে পড়েছিলাম। TAR রাখে Unix পারমিশন, মালিকানা ও সিম্বলিক লিংক। ব্রাউজার আপনার ডিস্ক থেকে এগুলোর কোনোটিই পড়তে পারে না, ফেরতও লিখতে পারে না, তাই TAR ফাইল তৈরি একটি যুক্তিসংগত ডিফল্ট মোড লেখে, আর আমাদের এক্সট্র্যাক্টরগুলো পারমিশন ও লিংক ফিরিয়ে না দিয়ে শুধু তালিকায় দেখায়। আর্কাইভটি যদি এমন ব্যাকআপ হয় যা হুবহু আগের মতো ফিরে আসতে হবে, তবে সেটি সেই মেশিনেই tar দিয়ে তৈরি ও রিস্টোর করতে হবে।
ZIP এনক্রিপশন দুই রকমের, আর কাজের শুধু একটি। পুরোনো ZipCrypto পদ্ধতি এতটাই ভাঙা যে এটি কার্যত সাজসজ্জা — সাধারণ হার্ডওয়্যারে একটি known-plaintext আক্রমণ কয়েক সেকেন্ডে কনটেন্ট উদ্ধার করে ফেলে, অথচ বেশিরভাগ সফটওয়্যার এখনো ডিফল্ট হিসেবে এটিই দেয়। পরে যোগ হওয়া AES-256 সত্যিকারের এনক্রিপশন, এটি ভাঙা যায় না। এখানে কোনোটিই দেওয়া হয় না: ভাঙাটি আমরা দেব না, আর আধুনিকটির এমন কোনো ব্রাউজার-নেটিভ ইমপ্লিমেন্টেশন নেই যা আমরা পারমিসিভ লাইসেন্সে ব্যবহার করতে পারি। যেভাবেই হোক জেনে রাখা ভালো: ZIP কখনো ফাইলের নাম এনক্রিপ্ট করে না, তাই এনক্রিপ্ট করা আর্কাইভের ক্যাটালগও যে কেউ পড়তে পারে। “Invoices/2024/Settlement-confidential.pdf” পাসওয়ার্ড ছাড়াই দেখা যায়।
আর্কাইভই একমাত্র ধরনের ফাইল, যার ভেতরের কনটেন্ট তাকে খোলা প্রোগ্রামকেই আক্রমণ করতে পারে। ভেতরের কোনো ফাইলের নাম হতে পারে “../../.bashrc”, যাতে যে ফোল্ডারে খোলা হচ্ছে তার বাইরে বেরিয়ে যায়; আবার কয়েক কিলোবাইট এমনভাবে বানানো যায় যে খুললে টেরাবাইট হয়ে ট্যাবটাই বসিয়ে দেয়। আপনি কিছু দেখার আগেই দুটোই সামলানো হয়: ক্ষতিকর নাম — প্যারেন্ট ফোল্ডারে ওঠার চেষ্টা, অ্যাবসোলিউট পাথ, Windows ড্রাইভ লেটার, সংরক্ষিত ডিভাইস নাম, এক্সটেনশন লুকাতে ব্যবহৃত অদৃশ্য অক্ষর — সীমার মধ্যে আনা হয় এবং প্রতিটি সংশোধন তালিকায় দেখানো হয়, আর প্রসারণের অনুপাত মেপে দেখা হয় এবং চেষ্টা না করেই প্রত্যাখ্যান করা হয়। আর্কাইভের ভেতরের সিম্বলিক লিংক দেখানো হয়, কিন্তু কখনো অনুসরণ করা হয় না।