پکیجمنیجرهایی که پکیجمنیجرهای دیگه را نصب میکنن
خلاصهٔ کاملتر
این یادداشت از یک ایدهی بامزه شروع میشه: پکیجمنیجرهایی که پکیجمنیجرهای دیگه را نصب میکنن. نویسنده ماتریسی از ۴۲ کلاینت پکیجمنیجر ساخته و در هر خانه نشون میده آیا فلان مدیر بسته میتونه دیگری را نصب کنه؛ دادهها از ecosyste.ms برای رجیستریهای زبانی و از Repology برای توزیعهای لینوکس گرفته شده و هر خانهی پرشده به همان بسته لینک میده.
خطی که چشم را میگیره، پکیجمنیجرهای سیستمیان؛ بستهبندی هر باینری دلخواه دقیقاً کار همینهاست. AUR بهتنهایی ۴۰ تا از ۴۲ را پوشش میده و nixpkgs، Homebrew، DNF و دبیان هم عقب نیستن. همینها بهعنوان «ستون» تقریباً خالیان، چون چیزی لازم نیست apt یا DNF را بازتوزیع کنه؛ آنها همراه سیستمعامل میان.
در میان رجیستریهای زبانی، PyPI متراکمترین منبعه، چون بخش زیادی از ابزارهای بینزبانی به پایتون نوشته شدن (مثل Conan برای C++ و سیستم ساخت meson). npm چهار کلاینت جاوااسکریپت و Elm را داره، RubyGems میزبان Bundler و CocoaPods است و crates.io هم uv را داره چون uv یک باینری Rust است. جالب اینکه Maven Central با WebJars و mvnpm حتی npm و Yarn و Bun را بهشکل jar بازتوزیع میکنه. ۲۵ تا از ۴۲ ابزار هم خودشون را روی رجیستری خودشون منتشر میکنن (مثل pip install --upgrade pip).
یک نکتهی امنیتی هم هست: یک CVE علیه pip ممکنه بهشکل pkg:pypi/pip ثبت بشه، اما همان نرمافزار با همان باگ در Homebrew و conda-forge و nixpkgs هم هست و هر بازتوزیعکننده باید ورودی خودش را نگاشت کنه؛ کاری که به گفتهی نویسنده آنقدر دردسرساز بود که برایش ابزار نوشته.
برجستهترین بخش، طولانیترین زنجیرهی بدون تکرار کلاینت است: ۱۴ مرحله از یک سیستم Arch تا یک کامپایلر Elm کارآمد. شروعش اینطوریه:
yay -S brew-git
brew install spack
spack install miniconda3
conda install -c conda-forge rust
cargo install --locked uv
uv tool install pip
pip install poetryو همینطور با poetry و pdm و conan و nodejs و npm و yarn و pnpm و bun ادامه پیدا میکنه تا در نهایت bun add -g elm. نویسنده میگه اگه کسی بتونه زنجیرهای بلندتر از ۱۴ پیدا کنه، CSV روی گیتهابه و pull request پذیرفته میشه.
نکات کلیدی:
- ماتریسی از ۴۲ پکیجمنیجر که نشون میده کدوم کدوم را نصب میکنه
- AUR بهتنهایی ۴۰ تا از ۴۲ را پوشش میده و PyPI متراکمترین رجیستری زبانیه
- ۲۵ تا از ۴۲ خودشون را روی رجیستری خودشون منتشر میکنن
- طولانیترین زنجیرهی بدون تکرار، ۱۴ مرحله از Arch تا کامپایلر Elm است




