روشهای احمقانه مرگ پروژههای اوپنسورس
خلاصهٔ کاملتر
وقتی یه پکیج اوپنسورس «میمیره»، لزوماً از رجیستری حذف نمیشه. نصب میشه، رزولو میشه، و لاکفایل پروژهات هم مشکلی باهاش نداره. این مقاله یه دستهبندی کامل از راههایی ارائه میده که یه پروژه میتونه عملاً بمیره بدون اینکه ظاهراً چیزی تغییر کنه.
وقتی نگهدارنده رفته: رایجترین حالت اینه که نگهدارنده فقط رفته و ریپو آرشیو نشده — اصطلاحاً ghost maintainer. در کنارش، شرکتها پروژههایی دارن که تیمشون منحل شده ولی README بهروز نشده (corporate orphan)، یا دانشجوهای دکترا پروژهای ساختن که بعد از فارغالتحصیلی رهاش کردن (thesis orphan). یه حالت جالب دیگه «succession deadlock» یا قفل جانشینیه: نگهدارنده ناپیداست، آدمهای داوطلب هم هستن، ولی دسترسی پابلیش به اکانتی وصله که کسی بهش دسترسی نداره.
وقتی نگهدارنده هست ولی پروژه نه: یکی از بدترین حالتها «benevolent zombie» یا زامبی خیرخواهه — گراف کامیت سبزه، ولی همهچیز بوتهای Dependabot و auto-merge هستن، بدون اینکه انسانی چیزی بخونه. یه حالت دیگه «burnout plateau»ه: نگهدارنده هست، تایپوها رو درست میکنه، ولی هر تصمیم طراحی واقعیای سالهاست باز مونده. از نظر معیارهای رایج سلامت پروژه، هر دو «سالم» به نظر میرسن.
خرابکاری و تصرف: پروژهی xz نمونهی پیچیدهایه از captured maintainer — یه کمپین مهندسی اجتماعی دو ساله که منجر به اضافه شدن یه co-maintainer مخرب شد. event-stream در ۲۰۱۸ سادهتر بود: نویسنده اصلی پکیج رو به یه داوطلب داد که بعداً یه wallet-stealer بهش اضافه کرد. protestware هم دستهی دیگهایه: نگهدارنده قانونی خودش پکیج رو خراب میکنه — مثل colors و faker در ۲۰۲۲.
وقتی پایپلاین انتشار خراب شده: گاهی توسعه ادامه داره ولی نمیشه ریلیز کرد (maintained-not-shipping). شاید اکانت پابلیش گم شده، یا برنچ اصلی از آخرین تگ انقدر فاصله گرفته که ریلیزش یه breaking change برای همهست (unreleasable main). یه حالت جالب «shadow-maintained»ه: توسعهی واقعی داخل مونوریپوی خصوصی یه شرکته و ریپوی پابلیک فقط یه dump دورهای میگیره.
فورس ماژور و مشکلات بیرونی: تحریمها میتونن نگهدارندهای رو که کاملاً مایل به کار هست از پوش کردن منع کنن (sanctions-stranded). درخواستهای DMCA یا اختلافات تجاری میتونن پکیج رو از رجیستری بردارن (takedown casualty). در حدود ۱.۷٪ از پکیجهای npm و ۴٪ از Packagist، آدرس ریپوی سورس در متادیتا ۴۰۴ میده.
وقتی دنیا جلو رفته: پلتفرم عوض شده (platform-stranded)، API ای که پکیج رپش میکرد حذف شده (API rug-pull)، یا زبان برنامهنویسی خودش قابلیت رو بومی کرده (superseded) — مثل object-assign بعد از اضافه شدن Object.assign به جاوااسکریپت. یه حالت خطرناک هم _transitive death_ه: پروژه خودش مشکلی نداره، ولی یه وابستگی چند لایه پایینتر مرده و نمیشه حذفش کرد.
نکات کلیدی:
- مرگ یه پروژه لزوماً قابل تشخیص نیست؛ پکیج همچنان نصب میشه
- گراف کامیت سبز دلیل سلامت پروژه نیست (زامبیهای بوتی)
- مشکل میتونه از بیرون پروژه بیاد: تحریم، DMCA، API حذفشده
- لاکفایل تا وقتی کسی چک نکنه، پکیج مرده رو هم با خودش میکشه
- فورک و تغییر نام اغلب از فرایند رسمی انتقال مالکیت سریعتره




