در دنیای مدیریت نرمافزار یک فلسفهٔ ترسناک وجود دارد به اسم «جهنم وابستگیها». به عبارت دیگر، نرمافزار شما بزرگتر شده و رشد میکند و پکیجهای بسیاری به نرمافزار شما افزوده میشود (احتمالاً شما یک روز خود را در این گودال ناامیدی ببینید که به معنای واقعی کلمه دیگر دیر شده است).
سیستمی که وابستگیهای آن بسیار پیچیده است، انتشار پکیجهای نسخه جدید در آن میتواند به یک کابوس تبدیل شود و در صورتی که وابستگیهای نرمافزار خیلی بالا باشد، نرمافزار با خطر قفل نسخه مواجه است (برای ارتقاء یک پکیج، نیاز به انتشار نسخههای جدید پکیجهای وابسته است).
جهنم وابستگی جایی است که در آن قفل نسخه (Version Lock) و یا بیقاعدگی نسخه (Version Promiscuity)، مانع پیشبرد پروژهٔ بهصورت ایمن و آسان میشود.
برای حل این مشکل، مجموعه قوانین سادهای ارائه شده است که تعیین میکند از کدام شمارهٔ نسخه استفاده شود. برای کار با این سیستم، ابتدا باید یک API عمومی، واضح و دقیق داشته باشید. پس از مشخص کردن یک API عمومی، تغییرات لازم در آن با افزایش شمارهٔ نسخه، اعمال میشود. به طور مثال، سه نسخهٔ Major ،Minor و Patch را در نظر بگیرید به طوری که:
- نسخههای Major در صورت ایجاد تغییرات ناسازگار ایجاد میشوند.
- نسخههای Minor در صورت اضافه کردن قابلیتها به شیوهٔ Backward Compatible و
- نسخههای Patch در صورتی که باگ به شیوهٔ Backward Compatible حل شود.
این سیستم Semantic Versioning نام دارد. با این طرح، شمارهٔ نسخهها و نحوه تغییر آنها مفهوم کد مربوطه و تغییری که در نسخهٔ جدید حاصل شده است را منتقل خواهند کرد.