پرش به محتوای اصلی
پرش به محتوای مقاله

بنچمارک Zerobrew: سرعت نصب بسته‌های Homebrew تا ۱۰۰ برابر افزایش یافت

·۱۶ مهر ۱۴۰۵۷ دقیقه مطالعه
لوگوی پروژه زیروبرو: جایگزینی تا ۱۰۰ برابر سریع‌تر برای هوم‌برو
لوگوی پروژه زیروبرو: جایگزینی تا ۱۰۰ برابر سریع‌تر برای هوم‌برو
اشتراک‌گذاری
واقعاً چه چیز جدید است؟

معرفی اولین کلاینت با کارایی بالا برای Homebrew که با استفاده از ذخیره‌سازی محتوا-محور و کلون‌سازی APFS، گلوگاه‌های اجرای اسکریپت‌های روبی را در زمان نصب حذف می‌کند.

اگر هر روز ده‌ها بسته نرم‌افزاری را نصب و حذف می‌کنید، احتمالاً می‌دانید که انتظار برای اتمام فرآیند Homebrew یکی از خسته‌کننده‌ترین بخش‌های توسعه است. حالا تصور کنید همین انتظار چند دقیقه‌ای به کمتر از ۱۰ ثانیه برسد.

طبق مستندات منتشر شده در ۸ اکتبر ۲۰۲۶، ابزار Zerobrew توانسته است زمان نصب ۱۰۰ بسته نرم‌افزاری در سیستم‌عامل macOS را از ۶۳۸ ثانیه به تنها ۹.۳ ثانیه کاهش دهد. این جهش ۶۸ برابری در نصب‌های «گرم» (Warm Installs)، تجربه مدیریت بسته را از یک انتظار طولانی به فرآیندی تقریباً آنی تبدیل می‌کند.

برای سال‌ها، توسعه‌دهندگان macOS و لینوکس به Homebrew به عنوان استاندارد طلایی مدیریت بسته تکیه کرده‌اند. اما معماری Homebrew سربار زیادی دارد؛ هر نصب باعث اجرای اسکریپت‌های Ruby برای ارزیابی فرمول‌ها، باز کردن فایل‌ها و بازنویسی مسیرهای باینری با استفاده از ابزار install_name_tool می‌شود و سپس هر باینری را به صورت جداگانه دوباره امضا (Re-sign) می‌کند. این بهینه‌سازی‌ها در حالی صورت می‌گیرد که اکوسیستم Homebrew در حال تغییر است و برای مثال در نسخه ۷.۰.۰، پشتیبانی از مک‌های اینتل به سطح Tier 3 منتقل شد تا تمرکز بیشتری بر معماری‌های جدید صورت گیرد.

این تفاوت شبیه این است که هر بار بخواهید از یک مدل لگو استفاده کنید، آن را از ابتدا بسازید، در حالی که Zerobrew مدل تکمیل‌شده را در یک انبار ذخیره کرده و فقط یک لینک سریع به آن می‌دهد. این تغییر بنیادین در نحوه تعامل با اکوسیستم مدیریت بسته است.

معماری سرعت

به نقل از مخزن گیت‌هاب این پروژه، Zerobrew جایگزین زیرساخت Homebrew نیست، بلکه یک کلاینت با کارایی بالا است. این ابزار معماری مشابه uv (مدیریت بسته سریع پایتون) را به اکوسیستم Homebrew در هر دو سیستم‌عامل macOS و لینوکس می‌آورد. Zerobrew کاملاً بر اساس تعاریف فرمول‌های موجود در homebrew-core، فایل‌های پیش‌ساخته (Bottles) و متادیتای Homebrew عمل می‌کند.

سرعت خیره‌کننده این ابزار از بهینه‌سازی مرحله پس از دانلود حاصل می‌شود. در حالی که Homebrew برای ارزیابی فرمول‌ها از روبی استفاده کرده و باینری‌ها را یکی‌یکی امضا می‌کند، Zerobrew این مراحل را به شکل زیر بهینه کرده است:

  • ذخیره‌سازی محتوا-محور (Content-Addressable Storage): استفاده از یک ذخیره بدون تکرار (Deduplicated Store) برای اینکه هیچ فایلی هرگز دوبار ذخیره نشود.
  • کلون‌سازی APFS: بهره‌گیری از قابلیت Clonefiles در سیستم فایل اپل (APFS) برای کپی کردن فایل‌ها با سربار صفر.
  • جابه‌جایی درون-فرآیندی: جایگزینی فرآیند کند و متوالی باز-امضای باینری‌ها با یک سیستم جابه‌جایی درون-فرآیندی و لینک‌دهی مستقیم از انبار ذخیره.
  • پشتیبانی از ساخت از منبع: حفظ سازگاری کامل با استفاده از DSL روبیِ Homebrew برای مواردی که نیاز به کامپایل از سورس (Source Build) است.

جایگاه در اکوسیستم

Zerobrew خود را به عنوان یک کلاینت بهینه‌شده از نظر عملکرد برای اکوسیستم Homebrew معرفی می‌کند. این ابزار طوری طراحی شده است که بر شانه‌های زیرساخت موجود بایستد؛ به این معنا که هیچ فرمول اختصاصی از خود ندارد و بسته‌های جدیدی را کامپایل نمی‌کند. هر بسته‌ای که از طریق Zerobrew نصب می‌شود، همان بسته‌ای است که توسط فارم‌های ساخت (Bottle Build Farm) Homebrew ساخته، تست و منتشر شده است.

این رابطه بسیار حیاتی است زیرا افزایش سرعت ناشی از مکانیسم نصب است، نه تغییر در خودِ فایل‌های بسته. همان‌طور که اندرو نسبیت در یادداشتی با عنوان «ایستادن بر شانه‌های Homebrew» اشاره کرده است، Zerobrew در واقع یک لایه تحویل (Delivery Layer) است که گلوگاه‌های مبتنی بر روبی را حذف می‌کند. بدون وجود فارم‌های ساخت Homebrew، این اعداد و ارقام عملکردی هرگز ممکن نبود.

گیت‌هاب - zerobrewhq/zerobrew: جایگزین هوم‌برو تا ۱۰۰ برابر سریع‌تر

کالبدشکافی بنچمارک‌ها

در آزمایش‌های ۸ اکتبر ۲۰۲۶، با استفاده از نسخه توسعه‌دهندگان zerobrew 0.3.5 و Homebrew 7.0.8 روی سیستم‌عامل macOS 26.6.2، شکاف عملکردی بسیار شدید بود. سخت‌افزار مورد استفاده یک MacBook Pro با تراشه M3 Pro، ۱۸ گیگابایت رم و پهنای باند دانلود حدود ۳۱۸ مگابیت بر ثانیه بود.

توسعه‌دهندگان بین دو نوع نصب تفاوت قائل شده‌اند: نصب «سرد» (Cold Install) که در آن بسته و وابستگی‌ها نصب نیستند و کش دانلود خالی است، و نصب «گرم» (Warm Install) که در آن بسته و وابستگی‌ها حذف شده‌اند اما فایل‌های دانلود شده از اجرای قبلی در کش موجود هستند.

برای مجموعه‌ای از ۱۰۰ بسته، نصب‌های سرد ۶.۶ برابر سریع‌تر (۱۱۷.۴۳ ثانیه در مقابل ۷۷۵.۶۰ ثانیه) بودند. اما در نصب‌های گرم، بهبود خیره‌کننده ۶۸.۳۱ برابری رخ داد (۹.۳۳ ثانیه در مقابل ۶۳۷.۵۰ ثانیه). همچنین میانگین سرعت برای هر بسته در حالت سرد ۵.۳ برابر و در حالت گرم ۵۶ برابر سریع‌تر بود.

جزئیات عملکرد بسته‌ها

برخی بسته‌ها نتایج حتی دراماتیک‌تری داشتند؛ ۲۴ بسته از ۱۰۰ بسته در اجراهای گرم، ۱۰۰ برابر یا بیشتر سریع‌تر نصب شدند:

  • ca-certificates: ۲۵۲.۱۲ برابر سریع‌تر در حالت گرم (۲۶ میلی‌ثانیه در مقابل ۶.۵۵ ثانیه) و ۲۰.۳۵ برابر سریع‌تر در حالت سرد (۳۷۶ میلی‌ثانیه در مقابل ۷.۶۵ ثانیه).
  • p11-kit: ۲۴۸.۵۳ برابر سریع‌تر در حالت گرم (۳۲ میلی‌ثانیه در مقابل ۷.۹۵ ثانیه) و ۹.۳۰ برابر سریع‌تر در حالت سرد (۹۹۶ میلی‌ثانیه در مقابل ۹.۲۶ ثانیه).
  • certifi: ۲۲۵.۰۶ برابر سریع‌تر در حالت گرم (۳۱ میلی‌ثانیه در مقابل ۶.۹۸ ثانیه) و ۱۶.۹۵ برابر سریع‌تر در حالت سرد (۴۶۱ میلی‌ثانیه در مقابل ۷.۸۱ ثانیه).
  • Node: ۱۲۱.۷۲ برابر سریع‌تر در حالت گرم (۲۳۲ میلی‌ثانیه در مقابل ۲۸.۲۴ ثانیه) و ۹.۲۸ برابر سریع‌تر در حالت سرد (۳.۱۶ ثانیه در مقابل ۲۹.۳۱ ثانیه).
  • [email protected]: ۶۹.۴۱ برابر سریع‌تر در حالت گرم (۲۰۷ میلی‌ثانیه در مقابل ۱۴.۳۷ ثانیه) و ۸.۶۲ برابر سریع‌تر در حالت سرد (۱.۹۷ ثانیه در مقابل ۱۶.۹۹ ثانیه).
  • Tesseract: ۶۸.۰۱ برابر سریع‌تر در حالت گرم (۴۷۶ میلی‌ثانیه در مقابل ۳۲.۳۷ ثانیه) و ۱۶.۰۱ برابر سریع‌تر در حالت سرد (۲.۱۶ ثانیه در مقابل ۳۴.۶۳ ثانیه).
  • OpenJDK: ۵۹.۹۶ برابر سریع‌تر در حالت گرم (۴۴۸ میلی‌ثانیه در مقابل ۲۶.۸۶ ثانیه) و ۶.۲۱ برابر سریع‌تر در حالت سرد (۵.۱۷ ثانیه در مقابل ۳۲.۰۹ ثانیه).
  • ffmpeg: ۱۰۷.۴۱ برابر سریع‌تر در حالت گرم (۱۶۴ میلی‌ثانیه در مقابل ۱۷.۶۲ ثانیه) و ۱۰.۵۴ برابر سریع‌تر در حالت سرد (۱.۷۶ ثانیه در مقابل ۱۸.۵۷ ثانیه).
  • imagemagick: ۱۶۰.۹۵ برابر سریع‌تر در حالت گرم (۸۲ میلی‌ثانیه در مقابل ۱۴.۵۱ ثانیه) و ۱۲.۰۰ برابر سریع‌تر در حالت سرد (۱.۲۱ ثانیه در مقابل ۱۴.۵۱ ثانیه).

در مقابل، «باتل‌های» حجیم مانند Go و LLVM در نصب‌های سرد بهبود کمتری داشتند زیرا فرآیند توسط سرعت لینک محدود می‌شود. برای مثال، Go در حالت سرد تنها ۱.۶۱ برابر سریع‌تر بود (۳.۳۶ ثانیه در مقابل ۵.۴۳ ثانیه). در یک اتصال کندتر با سرعت ۶۹ مگابیت بر ثانیه (تست شده در ۷ اکتبر ۲۰۲۶)، نتایج به ۳.۳ برابر در حالت سرد و ۶۹ برابر در حالت گرم تغییر کرد که ثابت می‌کند پهنای باند دانلود، گلوگاه اصلی برای شروع‌های سرد است.

راهنمای پیاده‌سازی

کاربران می‌توانند این ابزار را از طریق یک اسکریپت مستقل نصب کنند (curl -fsSL https://zerobrew.rs/install | bash) که تنظیمات شل را به‌روز می‌کند، یا از طریق خود Homebrew با دستور brew install zerobrewhq/zerobrew/zerobrew اقدام کنند. کاربرانی که از تپ قدیمی lucasgelfond/zerobrew استفاده می‌کردند، باید آن را حذف کرده و به تپ جدید zerobrewhq منتقل شوند تا به‌روزرسانی‌ها را دریافت کنند:

brew uninstall zerobrew
brew untap lucasgelfond/zerobrew
brew install zerobrewhq/zerobrew/zerobrew

این ابزار مجموعه‌ای از دستورات جدید را معرفی می‌کند که در آن از zb به جای brew استفاده می‌شود:

  • نصب: zb install jq برای یک بسته، یا zb install wget git برای چندین بسته.
  • مدیریت باندل: zb bundle برای نصب از یک Brewfile؛ zb bundle install -f myfile برای استفاده از یک فایل سفارشی؛ و zb bundle dump برای خروجی گرفتن از بسته‌های نصب شده به یک Brewfile (از -f out --force برای جایگزینی فایل قبلی استفاده کنید).
  • نگهداری: zb outdated برای لیست کردن نسخه‌های جدیدتر؛ zb upgrade برای به‌روزرسانی همه؛ و zb upgrade jq wget برای به‌روزرسانی بسته‌های خاص.
  • پاک‌سازی: zb reset برای حذف تمامی بسته‌ها؛ و zb gc برای اجرای Garbage Collection روی ورودی‌های استفاده نشده در ذخیره‌ساز.
  • اجرا: zbx jq --version اجازه می‌دهد یک بسته را بدون لینک کردن آن به مسیر سیستم (System Path) اجرا کنید.

وضعیت آزمایشی

توسعه‌دهندگان تأکید می‌کنند که Zerobrew در حال حاضر در وضعیت آزمایشی (Experimental) است، هرچند سازنده آن (@cachebag) به صورت روزانه از آن استفاده می‌کند. توصیه می‌شود آن را در کنار Homebrew اجرا کنید و نه به عنوان جایگزین کامل. کاربران هشدار داده شده‌اند که Homebrew را پاک نکنند مگر اینکه از پیامدهای آن کاملاً مطمئن باشند.

از آنجایی که این ابزار به فارم ساخت باتل‌های Homebrew متکی است، خودش بسته‌ای را کامپایل نمی‌کند و فرمول‌های اختصاصی ندارد. این پروژه تحت لایسنس دوگانه Apache 2.0 یا MIT منتشر شده است. در صورت مشاهده هرگونه ناسازگاری، کاربران تشویق شده‌اند تا Issue یا PR در گیت‌هاب ثبت کنند.

تحلیل تحریریه

این تغییر نشان‌دهنده حرکتی به سمت معماری «uv-style» است (با اشاره به uv، مدیریت بسته فوق‌سریع پایتون). با جداسازی «تعریف» بسته (فرمول) از «استقرار» آرتیفکت (نصب)، Zerobrew گلوگاه مبتنی بر روبی را که یک دهه Homebrew را گرفتار کرده بود، حذف می‌کند.

در مورد رقبا، توسعه‌دهندگان اشاره می‌کنند که برخی اعداد منتشر شده توسط nanobrew در واقع زمان «نصب‌های گرم» برای بسته‌هایی است که از قبل نصب شده‌اند (یک خروج زودهنگام یا Early Exit)، در حالی که بنچمارک‌های Zerobrew بازتاب‌دهنده نصب‌های واقعی از حالت «نصب نشده» است. این امر تضمین می‌کند که داده‌ها نشان‌دهنده عملیات واقعی سیستم فایل هستند، نه صرفاً بررسی‌های منطقی ساده.

برای یک توسعه‌دهنده معمولی، این به معنای آن است که هزینه آزمایش ابزارهای جدید به نزدیک صفر می‌رسد. توانایی ریست کردن یک محیط یا راه‌اندازی مجموعه‌ای از وابستگی‌های تازه در عرض چند ثانیه به جای چند دقیقه، چرخه توسعه را به شدت سریع‌تر می‌کند.

اگر محیط‌های پیچیده‌ای را مدیریت می‌کنید که نیاز به نصب مجدد مکرر دارند، می‌توانید این موضوع را با اجرای دستور bench --full results/ در مخزن پروژه تست کنید. این دستور Zerobrew را ریست کرده، بسته‌های Homebrew را حذف می‌کند و یک جدول بنچمارک دقیق در دایرکتوری results/ ایجاد می‌کند. برای علاقه‌مندان به CI، این پروژه از یک گردش کار Parity برای مقایسه بایت-به-بایت پیشوندهای (Prefixes) حاصله و یک گردش کار Timing استفاده می‌کند که اگر Zerobrew کمتر از ۱.۵ برابر در حالت سرد یا ۳ برابر در حالت گرم سریع‌تر از Homebrew باشد، عملیات را با خطا متوقف می‌کند.

گام بعدی شما

  • اگر محیط‌های توسعه پیچیده‌ای دارید که مدام نیاز به بازسازی دارند، Zerobrew را نصب کنید تا چرخه توسعه‌تان سریع‌تر شود.
  • برای تست واقعی، دستور bench --full results/ را در مخزن پروژه اجرا کنید تا جدول مقایسه‌ای دقیق روی سیستم خودتان بسازید.
  • در صورت مشاهده هرگونه ناسازگاری در اجرای باینری‌ها، گزارش آن را در گیت‌هاب پروژه ثبت کنید.

اما داستان بهینه‌سازی ابزارهای خط فرمان به اینجا ختم نمی‌شود؛ برای درک اینکه چگونه زبان‌های برنامه‌نویسی جدید در حال حذف لایه‌های اضافی هستند، تحلیل ما درباره Rust و جایگزینی C++ را بخوانید.

چرا این موضوع مهم است؟

این ابزار با حذف سربار پردازشی، هزینه زمانی آزمایش ابزارهای جدید را برای توسعه‌دهندگان به صفر می‌رساند. اعتبار این ادعا از بنچمارک‌های دقیق روی سخت‌افزار M3 و استفاده از قابلیت‌های سطح پایین سیستم‌فایل اپل تأیید می‌شود.

تأثیر برای ایران

این ابزار به دلیل متن‌باز بودن و عدم نیاز به APIهای خاص، برای توسعه‌دهندگان ایرانی در macOS کاملاً در دسترس است و سرعت آماده‌سازی محیط‌های توسعه را به شدت افزایش می‌دهد.

·نگاه ما
تحریریه دات‌هوش

جداسازی تعریف بسته (فرمول) از نحوه استقرار آن (نصب)، همان استراتژی‌ای است که uv در دنیای پایتون را متحول کرد. Zerobrew ثابت می‌کند که کندی Homebrew ناشی از ماهیت بسته‌ها نیست، بلکه نتیجه‌ی یک معماری قدیمی مبتنی بر روبی است که با استانداردهای سخت‌افزاری امروز (مثل APFS) همخوانی ندارد. این رویکرد احتمالاً الگوی آینده برای تمام مدیریت‌کننده‌های بسته در سیستم‌های دسکتاپ خواهد بود.

منابع

این گزارش با خط‌لولهٔ خودکار دات‌هوش از منابع معتبر جهانی تدوین و زیر نظر تحریریه منتشر شده است. روش کار ما

گفتگو

پنج‌شنبه‌های هوش‌محور

بسته‌ی هفتگی دات‌هوش

۵ خبر، ۲ ابزار، ۱ پرامپت در هر شماره. به‌زودی راه‌اندازی می‌شود — هر پنج‌شنبه صبح.

خبر کلیدی
ابزار کاربردی
پرامپت حرفه‌ای
تحلیل پژوهش
به‌زودی
زاویه‌ی ایرانی
به‌زودی
تمرین این هفته
به‌زودی

راهنماهای دات‌هوش

راهنماهای کاربردیِ دات‌هوش برای کار با هوش مصنوعی — از همین‌جا شروع کنید:

دات‌هوش

راهنمای فارسی هوش مصنوعی — با نگاه به ایران

اخبار روزانه، معرفی ابزارها و مدل‌ها، و آموزشِ کار با هوش مصنوعی؛ همیشه با این پرسش که از ایران چه چیزی کار می‌کند و چه چیزی نه.