Dormant at the core: Inactivity, dependence and exit among the most downloaded npm packages
यह अध्ययन प्रकट करता है कि सबसे अधिक डाउनलोड किए गए npm पैकेजों के बीच निष्क्रियता व्यापक और काफी हद तक शांत है, जहाँ रखरखाव करने वालों द्वारा स्पष्ट रूप से डिप्रिकेशन (deprecation) करना ही प्राथमिक संकेत होता है जो आश्रित परियोजनाओं को इन निष्क्रिय निर्भरताओं को हटाने के लिए प्रेरित करता है, बावजूद इसके कि बहुत कम निष्क्रिय पैकेज ज्ञात कमजोरियों को वहन करते हैं।
मूल पेपर CC BY 4.0 (https://creativecommons.org/licenses/by/4.0/) के तहत लाइसेंस किया गया है। नीचे दिए गए पेपर की यह व्याख्या AI से तैयार की गई है। इसे लेखक ने न तो लिखा है, न इसका समर्थन किया है। तकनीकी सटीकता के लिए मूल पेपर देखें। पूरा डिस्क्लेमर पढ़ें
आधुनिक सॉफ़्टवेयर शायद ही कभी शून्य से बनाया जाता है। इसके बजाय, इसे पूर्व-निर्मित भागों से बनी एक विशाल संरचना की तरह जोड़ा जाता है, जहाँ प्रत्येक भाग किसी और द्वारा लिखा गया कोड का एक छोटा सा हिस्सा होता है। जावास्क्रिप्ट की दुनिया में, इन भागों को एक साथ रखने वाली प्रणाली को npm कहा जाता है, जो एक डिजिटल गोदाम है जहाँ डेवलपर्स वेबसाइटों से लेकर मोबाइल ऐप तक सब कुछ बनाने के लिए इन कोड पैकेजों को डाउनलोड करते हैं। इनमें से अधिकांश भाग उन स्वयंसेवकों द्वारा बनाए जाते हैं जो अपने खाली समय में उन पर काम करते हैं। जब कोई स्वयंसेवक किसी भाग पर काम करना बंद कर देता है, तो वह कोड का टुकड़ा सुप्त (dormant) हो जाता है। यह तुरंत नहीं टूटता, लेकिन इसे अपडेट, बग फिक्स या सुरक्षा पैच मिलना बंद हो जाता है। यह एक छिपा हुआ जोखिम पैदा करता है: यदि एक व्यापक रूप से उपयोग किया जाने वाला भाग अपडेट होना बंद हो जाता है, तो उन हजारों प्रोजेक्ट्स के पास एक ऐसा घटक रह जाता है जिसे कुछ गलत होने पर सुधारा नहीं जा सकता। प्रश्न केवल यह नहीं है कि ये भाग अपडेट होना बंद हो गए हैं या नहीं, बल्कि यह है कि वास्तव में कितने सुप्त हैं, कितने लोग उनका उपयोग कर रहे हैं, और क्या उनका उपयोग करने वाले लोग यह जानते हैं कि उन्हें इसका उपयोग बंद कर देना चाहिए।
रेवंथ कृष्णा मड्डुल नामक एक शोधकर्ता ने इस प्रणाली के सबसे लोकप्रिय भागों का परीक्षण करने का निर्णय लिया। उन्होंने लगभग सोलह हजार ऐसे पैकेजों का अध्ययन किया जो हर सप्ताह कम से कम दस लाख बार डाउनलोड किए जाते हैं। ये जावास्क्रिप्ट इकोसिस्टम के मुख्य घटक हैं, वे भाग जो सबसे अधिक भार वहन करते हैं। अक्टूबर 2026 तक इन पैकेजों के संपूर्ण इतिहास का अध्ययन करके, वह यह देखना चाहते थे कि कितने ने नए संस्करण जारी करना बंद कर दिया है, कितने लोग अभी भी उनका उपयोग कर रहे हैं, और जब कोई भाग शांत हो जाता है तो सिस्टम कैसे प्रतिक्रिया करता है। अध्ययन ने सुप्तता (dormancy) की एक विशिष्ट परिभाषा पर ध्यान केंद्रित किया: एक पैकेज जिसने पिछले दो वर्षों में कोई स्थिर, पूर्ण संस्करण प्रकाशित नहीं किया है। यह समय सीमा उन भागों के बीच अंतर करने के लिए चुनी गई थी जो केवल समाप्त (finished) हो चुके हैं और उन भागों के बीच जिन्हें छोड़ दिया गया है।
निष्कर्ष बताते हैं कि सुप्तता उतनी आम है जितनी कि कई लोग उम्मीद भी नहीं करते। अध्ययन अवधि के अंत में, इन शीर्ष पैकेजों में से लगभग पैंतीस प्रतिशत ने दो वर्षों में कोई नया संस्करण जारी नहीं किया था। यह चुप्पी केवल अस्पष्ट या कम उपयोग किए जाने वाले उपकरणों तक सीमित नहीं थी; यह प्रणाली के बिल्कुल केंद्र तक पहुँच गई थी। सबसे अधिक डाउनलोड किए जाने वाले सौ पैकेजों में से छब्बीस प्रतिशत सुप्त थे। वास्तव में, इनमें से कुछ शांत पैकेजों को आठ वर्षों से अधिक समय से अपडेट नहीं किया गया था। इस व्यापक निष्क्रियता के बावजूद, यह चुप्पी लगभग हमेशा अटूट रही। जब शोधकर्ता ने इन पैकेजों के साथ जुड़ी सार्वजनिक टिप्पणियों, जिन्हें README फाइलें कहा जाता है, की जाँच की, तो उन्होंने पाया कि केवल लगभग तीन प्रतिशत सुप्त पैकेजों में स्पष्ट रूप से कहा गया था कि वे अब रखरखाव (maintain) नहीं किए जा रहे हैं। अधिकांश मामलों में, कोड बस बदलना बंद हो गया, जिससे उपयोगकर्ताओं को यह अनुमान लगाने के लिए छोड़ दिया गया कि प्रोजेक्ट समाप्त हो गया है या भुला दिया गया है।
इस चुप्पी का खतरा यह है कि सिस्टम के सक्रिय भाग इन सुप्त भागों से गहराई से जुड़े हुए हैं। अध्ययन ने पैकेजों के बीच संबंधों का मानचित्रण किया और पाया कि एक चौथाई से अधिक सक्रिय रूप से बनाए रखे जाने वाले पैकेज सीधे तौर पर कम से कम एक सुप्त पैकेज पर निर्भर थे। इनमें से कुछ शांत पैकेज इतने केंद्रीय थे कि वे एक हजार अन्य उच्च-ट्रैफ़िक वाले पैकेजों के डिपेंडेंसी चेन (dependency chains) के माध्यम से सुलभ थे। इनमें से कई छोटे, सरल उपकरण थे जो वर्षों पहले पूरे हो गए होंगे, लेकिन अन्य महत्वपूर्ण मॉड्यूल थे जिन्होंने बहुत से सॉफ़्टवेयर टूलिंग की नींव रखी थी। समस्या यह है कि उपयोगकर्ता आसानी से एक समाप्त हुए उपकरण और एक छोड़े गए उपकरण के बीच अंतर नहीं कर सकते, क्योंकि सिस्टम के पास दोनों के बीच अंतर करने के लिए कोई स्पष्ट संकेत नहीं है।
जब एक डिपेंडेंसी (dependency) सुप्त हो जाती है, तो इसका उपयोग करने वाले लोग आमतौर पर जल्दी प्रतिक्रिया नहीं देते हैं। अध्ययन ने ट्रैक किया कि उपयोगकर्ताओं को सुप्त पैकेज पर डिपेंडेंसी हटाने में कितना समय लगा। दो साल की अवधि में, उपयोगकर्ताओं ने सुप्त पैकेजों पर अपनी केवल लगभग सत्ताईस प्रतिशत डिपेंडेंसी हटाई। यह दर सक्रिय पैकेजों पर उनकी डिपेंडेंसी हटाने की दर से केवल थोड़ी ही अधिक थी, जो बताता है कि केवल एक पैकेज के अपडेट होना बंद होने मात्र से कार्रवाई करने के लिए पर्याप्त प्रोत्साहन नहीं मिला। शोधकर्ताओं ने परीक्षण किया कि क्या विभिन्न प्रकार की चेतावनियों ने इस व्यवहार को बदला। उन्होंने पाया कि प्रोजेक्ट के दस्तावेज़ीकरण में एक नोट का कोई पता लगाने योग्य प्रभाव नहीं था कि उपयोगकर्ताओं ने पैकेज को हटाया या नहीं। एकमात्र संकेत जिसने विश्वसनीय रूप से उपयोगकर्ताओं को कार्य करने के लिए प्रेरित किया, वह रजिस्ट्री द्वारा जारी आधिकारिक डिप्रिकेशन नोटिस (deprecation notice) था। जब एक सुप्त पैकेज को सिस्टम द्वारा औपचारिक रूप से डिप्रिकेट किया गया, तो उपयोगकर्ताओं ने इसे हटाने की दर साठ प्रतिशत हो गई। यह आधिकारिक चेतावनी, जो सॉफ्टवेयर इंस्टॉल करते समय डेवलपर्स को दिखाई देती है, एकमात्र ऐसी प्रक्रिया थी जिसने सफलतापूर्वक इकोसिस्टम को शांत कोड से दूर जाने के लिए प्रेरित किया।
सुप्तता का एक सुरक्षा आयाम भी है। जबकि अधिकांश सुप्त पैकेजों में उनके नवीनतम संस्करणों में ज्ञात सुरक्षा खामियां नहीं थीं, लेकिन जिनमें थीं, वे एक नाजुक स्थिति में थे। अध्ययन में पाया गया कि कुछ सुप्त पैकेजों में ज्ञात कमजोरियां थीं जिन्हें उनके मूल रखभक्षकों द्वारा ठीक नहीं किया जा सकता था। क्योंकि कोड को अब अपडेट नहीं किया जा रहा था, इसलिए इन खामियों को ऊपर से पैच (patch) नहीं किया जा सकता था। इन पैकेजों पर भरोसा करने वाले उपयोगकर्ताओं को या तो उन्हें हटाना था, उन्हें अन्य उपकरणों से बदलना था, या सुरक्षा छिद्रों को स्वयं ठीक करना था। यह स्थिति सिस्टम में एक महत्वपूर्ण अंतराल को उजागर करती है: जब एक व्यापक रूप से उपयोग किया जाने वाला भाग रखरखाव के बिना रह जाता है, तो इसकी सुरक्षा की जिम्मेदारी पूरी तरह से उसका उपयोग करने वाले लोगों पर स्थानांतरित हो जाती है, जो अक्सर उनकी जानकारी के बिना होता है।
अध्ययन निष्कर्ष निकालता है कि सुप्तता सॉफ़्टवेयर इकोसिस्टम के एक बड़े हिस्से के लिए एक सामान्य, शांत अवस्था है। यह आवश्यक नहीं कि एक दोष हो यदि कोई छोटा उपकरण समाप्त हो गया है, लेकिन संचार की कमी उपयोगकर्ताओं को अंतर करने में असमर्थ बनाती है। शोध सुझाव देता है कि वर्तमान प्रणाली बहुत अधिक उपयोगकर्ताओं के अपने उपकरणों की स्थिति का अनुमान लगाने पर निर्भर करती है। इस जोखिम को प्रबंधित करने का सबसे प्रभावी तरीका यह है कि रखरखाव करने वाले पैकेज को छोड़ते समय आधिकारिक डिप्रिकेशन तंत्र का उपयोग करें, और आदर्श रूप से उपयोगकर्ताओं को एक विकल्प की ओर संकेत करें। इकोसिस्टम के स्वस्थ रहने के लिए, रजिस्ट्री को सुप्तता और डिप्रिकेशन को अधिक दृश्यमान बनाने की आवश्यकता है, यह सुनिश्चित करते हुए कि संकेत उन डेवलपर्स तक पहुँचे जिन्हें इसकी आवश्यकता है, इससे पहले कि एक शांत पैकेज समस्या बन जाए।
अपने क्षेत्र के पेपरों की भीड़ में उलझे हुए हैं?
आपके रिसर्च कीवर्ड से मेल खाने वाले सबसे नए और अलग सोच वाले पेपरों का रोज़ाना Digest पाएँ—तकनीकी सारांश के साथ, आपकी भाषा में।