اگر هر روز دهها بسته نرمافزاری را نصب و حذف میکنید، احتمالاً میدانید که انتظار برای اتمام فرآیند 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، این اعداد و ارقام عملکردی هرگز ممکن نبود.

کالبدشکافی بنچمارکها
در آزمایشهای ۸ اکتبر ۲۰۲۶، با استفاده از نسخه توسعهدهندگان 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 zerobrewbrew untap lucasgelfond/zerobrewbrew 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++ را بخوانید.




گفتگو