احتمالاً هزاران فایل ZIP را باز کردهام، بیآنکه چندان به خود قالب فکر کنم: دوبار کلیک، استخراج، و تمام. اما بعد فهمیدم اگر از آیکون خوشظاهر پوشه بگذرید و یک بایگانی معمولی ZIP را در ویرایشگر هگز باز کنید، نشان کوچکی در دل سازوکارش پنهان است: ۵۰ 4B. این بایتها در ASCII بهصورت PK خوانده میشوند؛ همان حروف آغازین نام فیل کتز، برنامهنویس سازندهٔ PKZIP و یکی از پدیدآورندگان قالب ZIP.
این حروف از سال ۱۹۸۹ همراه بایگانیهای ما بودهاند و هنوز هم در فایلهایی دیده میشوند که حتی پسوند .zip ندارند.
ZIP keeps saying "PK" in hex
بایگانی شما مدام نام کتز را پیش میکشد

یک بایگانی معمولی ZIP را در ویرایشگر هگز باز کنید؛ به احتمال زیاد چهار بایت نخست آن ۵۰ 4B ۰۳ ۰۴ خواهد بود. ۵۰ در ASCII با P و 4B با K متناظر است. این دو همراه با ۰۳ ۰۴، امضای سرآیند محلی فایل را میسازند؛ رکوردی که پیش از یک فایل بایگانیشده قرار میگیرد و آنچه در پی میآید را توصیف میکند. این همچنین نمونهای خوشساخت از آن است که چگونه شناسایی فایلها با امضاهای هگز میتواند قالب نهفته در پشت نام فایل را آشکار کند.
ZIP uses a whole family of these signatures. A central-directory entry begins 50 4B 01 02 , while the end-of-central-directory record begins 50 4B 05 06 . PKWARE’s APPNOTE notes that these record signatures share a two-byte constant representing the characters PK. The remaining bytes distinguish the different records that make up an archive, including file headers, central-directory entries, and the archive’s ending record.
اینجا یک نکتهٔ فنی جالب وجود دارد: فایل ZIP الزاماً با PK آغاز نمیشود. بایگانیهای خوداستخراج میتوانند پیش از ساختارهای ZIP دادههای اجرایی داشته باشند و دادههای آغازین دیگری نیز ممکن است وجود داشته باشد. آنچه ZIP واقعاً نیاز دارد، رکورد پایان پوشهٔ مرکزی است. حتی یک ZIP خالی نیز از همین رکورد تشکیل میشود؛ بنابراین ۵۰ 4B همچنان جایی درون آن پیدا میشود.
خودتان میتوانید در چند ثانیه این موضوع را بررسی کنید. یک ZIP کوچک بسازید و آن را در ویرایشگر هگز باز کنید؛ در یک بایگانی معمولی، احتمالاً ۵۰ 4B ۰۳ ۰۴ درست در ابتدای فایل قرار گرفته است. وقتی بدانید این دو بایت نخست چه چیزی را هجی میکنند، دیگر بهسختی میتوان آن را نادیده گرفت.
یک شکایت قضایی، کتز را بهسوی قالبی تازه راند
هیچچیز مانند شکایت شدن انگیزه نمیآفریند

کتز با این تصمیم ناگهانی که رایانهها به قالب بایگانی دیگری نیاز دارند، به ZIP نرسید. او پیش از PKZIP، برنامهٔ PKARC را نوشت؛ بایگانیسازی سازگار با ARC که تا حدی بهدلیل سرعتش در دنیای سامانههای تابلوی اعلانات محبوب شد. ARC پیشتر روشی رایج برای بستهبندی فایلها و توزیعشان در BBSها بود، بنابراین سازگاری، برای PKARC اکوسیستمی آماده فراهم کرد. ARC متعلق به شرکت System Enhancement Associates یا SEA بود و شباهتها سرانجام کتز و PKWARE را به دادگاه کشاند.
SEA از PKWARE و کتز بر سر نرمافزار سازگار با ARC شکایت کرد و این اختلاف در اوت ۱۹۸۸ با توافقی پایان یافت. بر پایهٔ این توافق، PKWARE تنها تا ۳۱ ژانویهٔ ۱۹۸۹ اجازه داشت برنامههای سازگار با ARC را تحت مجوز توزیع کند. پس از آن، شرکت پذیرفت که برنامههای سازگار با ARC را منتشر یا توزیع نکند.
این گسست، کتز را بهسوی قالب خودش سوق داد. او ZIP را همراه گری کانوی از شرکت Infinity Design Concepts توسعه داد و این قالب در سال ۱۹۸۹ همزمان با PKZIP بهطور عمومی عرضه شد. اسناد نخستینی که همراه نرمافزار توزیع میشدند، صراحتاً هم قالب فایل ZIP و هم پسوند .ZIP را به مالکیت عمومی واگذار میکردند.
این گشودگی، اطلاعات کافی را در اختیار دیگر توسعهدهندگان گذاشت تا بدون وابستگی به خود PKZIP، نرمافزارهای سازگار بسازند؛ عاملی که به گسترش ZIP بسیار فراتر از ابزارهای خود PKWARE کمک کرد. سرعت و اکوسیستم نرمافزارهای اشتراکی نیز مؤثر بودند. گردانندگان BBS و کاربران رایانههای شخصی پیشتر نرمافزار کتز را میشناختند و ZIP در زمانی از راه رسید که جابهجایی سریعتر فایلهای کوچکتر از راه اتصالهای دایلآپ، پیشنهادی واقعاً جذاب بود.
یک جزئیات که اغلب در روایت این ماجرا فشرده و حذف میشود، DEFLATE است. ZIP محفظهای است که میتواند از روشهای گوناگون فشردهسازی استفاده کند؛ و همینجا تفاوت میان بایگانیسازی و فشردهسازی اهمیت پیدا میکند. گاهشمار کتابخانهٔ کنگره، معرفی DEFLATE را در APPNOTE ۲.۰ و در سال ۱۹۹۳ ثبت کرده است. کتز DEFLATE را نیز طراحی کرد، اما این روش بخشی از مشخصات اولیهٔ ZIP در سال ۱۹۸۹ نبود.
حروف اول نام او از پسوند .zip فراتر رفتند
اسناد واژه، این نشانه را با خود حمل میکنند





بهنظر من خندهدارترین بخش ماجرا این است که برای برخوردن به حروف اول نام کتز، لازم نیست فایل .zip بسازید. ZIP به زیرساخت قالبهای دیگر تبدیل شد.
قالبهای Office Open XML مایکروسافت از بستهبندی مبتنی بر ZIP استفاده میکنند؛ به همین دلیل میتوانید یک فایل .docx، .xlsx یا .pptx را همچون بایگانی باز کنید و درونش مجموعهای از فایلها و پوشههای XML بیابید. EPUB ۳.۳ نیز الزام میکند که محفظهٔ انتشار آن از قالب ZIP با محدودیتهای مشخص استفاده کند. مستندات جاوای اوراکل هم JAR را قالبی مبتنی بر ZIP توصیف میکند.
یعنی همان امضاهای PK میتوانند درون یک سند ورد، یک کتاب الکترونیکی یا یک بایگانی جاوا قرار بگیرند، بیآنکه کاربر هیچ دلیلی برای فکر کردن به ZIP داشته باشد. پسوند فایل عوض شده، کارکردش تغییر کرده و استانداردهای پیرامونش بسیار فراتر از ابزار DOSی رفتهاند که کتز در سال ۱۹۸۹ منتشر کرد. با این همه، ساختار زیرین آنقدر پیوستگی خود را حفظ کرد که آن دو بایت همچنان باقی ماندند.
دو بایت با عمری بهطرزی باورنکردنی طولانی
بیشتر میراثهای نرمافزاری را میتوان در تصویرهای صفحه، سختافزارهای قدیمی یا کدی دید که هنوز کسی ناچار است نگهداریاش کند. میراث کتز عجیبتر است، چون هر روز در فایلهای تازه کپی میشود. میتوانم در سال ۲۰۲۶ یک سند ورد تازه ذخیره کنم، لایههای بستهبندیاش را کنار بزنم و همان نشانگر PK را ببینم که به طراحی ZIP در سال ۱۹۸۹ بازمیگردد. برای دو بایت شانزدهشانزدهی، این کارنامهای بهراستی شگفتانگیز است.
منبع: این مطلب ترجمه و بومیسازی مقالهای از MakeUseOf به قلم Oluwademilade Afolabi است. مشاهده مقاله اصلی