कई लोगों को याद होगा कि वर्ष 2000 आने से पहले पूरी दुनिया ‘मिलेनियम बग’ को लेकर चिंतित थी। चिंता यह थी कि वर्ष को केवल दो अंकों में लिखने वाले प्रोग्राम, वर्ष 2000 को गलती से वर्ष 1900 समझ सकते थे। लेकिन कंप्यूटर की दुनिया में इससे मिलती-जुलती तारीख की एक और समस्या अभी बाकी है। यही है ‘2038 वर्ष की समस्या (Year 2038 Problem)’।
सरल शब्दों में, 2038 वर्ष की समस्या वह स्थिति है जिसमें समय को सेकंड की संख्या के रूप में गिनने वाले कंप्यूटर, वर्ष 2038 के 1 महीने की 19 तारीख के बाद का समय सही ढंग से व्यक्त नहीं कर पाते। ऐसा इसलिए होता है क्योंकि संख्या रखने की जगह का आकार तय होता है। अंग्रेज़ी भाषी दुनिया में इसे Y2K38 या युग (epoch) और प्रलय (apocalypse) को मिलाकर बनाए गए नाम ‘एपोकैलिप्स (Epochalypse)’ से भी जाना जाता है।
इस लेख में हम क्रम से देखेंगे कि कंप्यूटर समय कैसे गिनते हैं, 2038 वर्ष की समस्या कैसे पैदा होती है, इसके कौन से उदाहरण पहले ही सामने आ चुके हैं, किन उपकरणों को खतरा है और अब तक कौन से समाधान तैयार किए गए हैं।
जिस दिन घड़ी उलटी चलेगी: 2038 वर्ष की समस्या
कंप्यूटर समय कैसे गिनते हैं

हम तारीख को वर्ष, महीने और दिन के रूप में लिखते हैं, लेकिन कई कंप्यूटर समय को एक बड़ी संख्या के रूप में याद रखते हैं।
(1) यूनिक्स समय
यूनिक्स (Unix) परिवार के ऑपरेटिंग सिस्टम और उनसे प्रभावित अनगिनत प्रणालियाँ, समन्वित सार्वत्रिक समय के अनुसार वर्ष 1970 के 1 महीने की 1 तारीख को 0 घंटे 0 मिनट 0 सेकंड को शुरुआती बिंदु मानती हैं और उसके बाद बीते सेकंड गिनकर समय व्यक्त करती हैं। इस तरीके को ‘यूनिक्स समय (Unix Time)’ और इसके शुरुआती बिंदु को ‘यूनिक्स युग का आरंभ बिंदु (Unix Epoch)’ कहा जाता है।
(2) एक संख्या के रूप में समय सँभालने के लाभ
समय को एक संख्या में व्यक्त करने पर दो समय बिंदुओं के बीच का अंतर केवल एक बार घटाकर निकाला जा सकता है, और उसे सहेजना या उसकी तुलना करना भी आसान होता है। इसलिए फ़ाइल बनने का समय, लॉग रिकॉर्ड और निर्धारित कार्यों जैसी हर उस जगह इस तरीके का उपयोग हुआ जहाँ समय की आवश्यकता थी।
(3) भंडारण की जगह का तय आकार
समस्या इस संख्या को रखने की जगह में है। लंबे समय तक कई प्रणालियाँ यूनिक्स समय को ‘चिह्न सहित 32 बिट पूर्णांक’ में रखती थीं, और इसमें रखी जा सकने वाली सबसे बड़ी संख्या 2,147,483,647 है।
2038 वर्ष की समस्या कैसे पैदा होती है

तय आकार की जगह में संख्या लगातार बढ़ाते रहने पर कभी न कभी वह क्षण आता है जब उसकी सीमा पार हो जाती है।
(1) आखिरी 1 सेकंड
वर्ष 1970 से 2,147,483,647 सेकंड बीतने का क्षण, समन्वित सार्वत्रिक समय के अनुसार वर्ष 2038 के 1 महीने की 19 तारीख को 3 घंटे 14 मिनट 7 सेकंड है। कोरियाई समय के अनुसार यह उसी दिन दोपहर 12 बजकर 14 मिनट 7 सेकंड है। यही वह अंतिम क्षण है जिसे 32 बिट की जगह में व्यक्त किया जा सकता है।
(2) पूर्णांक ओवरफ़्लो
इसमें 1 सेकंड और जोड़ने पर मान 2,147,483,648 हो जाता है, जो चिह्न सहित 32 बिट पूर्णांक की निरूपण सीमा से बाहर है। इसे ‘पूर्णांक ओवरफ़्लो (Integer Overflow)’ कहते हैं, और वास्तविक परिणाम प्रोग्राम तथा समय को सँभालने के कार्यान्वयन पर निर्भर करता है।
(3) कार्यान्वयन के अनुसार अलग परिणाम
कुछ कार्यान्वयनों में मान घूमकर ऋणात्मक हो जाता है और उसे वर्ष 1901 के 12 महीने की 13 तारीख के रूप में समझा जा सकता है। लेकिन सभी प्रणालियाँ इस तारीख पर नहीं लौटतीं; समय को सँभालने के तरीके के अनुसार त्रुटि हो सकती है या गलत तारीख दिखाई दे सकती है।
अंतर यह है कि मिलेनियम बग वर्ष को दशमलव के दो अंकों में लिखने के कारण पैदा हुआ था, जबकि 2038 वर्ष की समस्या समय को द्विआधारी संख्या के 32 अंकों की जगह में रखने के कारण पैदा होती है।

पहले ही सामने आए उदाहरण और जोखिम वाले उपकरण

वर्ष 2038 अभी आया नहीं है, लेकिन दूर भविष्य की तारीखों की गणना करने वाले प्रोग्रामों में समस्या पहले ही सामने आ चुकी है।
- वेब सर्वर का टाइमआउट (AOLserver): वर्ष 2006 के 5 महीने में एक वेब सर्वर प्रोग्राम ने ऐसे अनुरोध की समय सीमा 10 × दस करोड़ सेकंड बाद तय की थी, जिसे ‘कभी समाप्त नहीं होना चाहिए’ था। लेकिन वह समय सीमा वर्ष 2038 के पार पहुँचने से गणना गड़बड़ा गई और प्रोग्राम रुक गया।
- मेल सर्वर में नए साल की त्रुटि (Exchange Server): वर्ष 2022 के 1 महीने की 1 तारीख को कुछ ऑन-प्रिमाइसेस Exchange Server 2016 और 2019 में तारीख पर आधारित जाँच इंजन के संस्करण मान को पूर्णांक में बदलते समय सीमा संबंधी त्रुटि हुई, जिससे ईमेल भेजे जाने की कतार में जमा हो गए। यह स्वयं 2038 वर्ष की समस्या नहीं है, जिसमें यूनिक्स समय का सेकंड मान अपनी सीमा तक पहुँचता है, बल्कि पूर्णांक की सीमा से जुड़ी वैसी ही त्रुटि का उदाहरण है। (Microsoft का स्पष्टीकरण)
- लंबे समय तक उपयोग होने वाले अंतर्निहित उपकरण (Embedded Systems): वाहन के ब्रेक तंत्र, राउटर और नेटवर्क कैमरे जैसे उपकरण, जिन्हें एक बार लगाने के बाद दशकों तक उपयोग किया जाता है और जिनमें अपडेट कम होते हैं, सबसे अधिक चिंता वाले उपकरणों में गिने जाते हैं।
बेशक, सभी उपकरण खतरे में नहीं हैं। जिन उपकरणों को तारीख की आवश्यकता नहीं होती या जो केवल दो समय बिंदुओं का अंतर निकालते हैं, उन्हें संभव है कि कोई बड़ी समस्या न हो।
2038 वर्ष की समस्या रोकने के तरीके

2038 वर्ष की समस्या का ऐसा कोई सर्वसमर्थ समाधान नहीं है जो एक ही बार में सब कुछ ठीक कर दे, इसलिए कई तरीके साथ-साथ अपनाए जा रहे हैं।
(1) भंडारण की जगह को 64 बिट तक बढ़ाना
सबसे अधिक अपनाया जाने वाला तरीका समय रखने की जगह को 64 बिट तक बढ़ाना है। ऐसा करने पर ओवरफ़्लो होने में लगभग 2,920 × दस करोड़ वर्ष लगेंगे, जिससे व्यावहारिक रूप से यह कभी समाप्त न होने वाली घड़ी बन जाती है। 64 बिट कंप्यूटरों के अधिकांश ऑपरेटिंग सिस्टम पहले से इस तरीके का उपयोग कर रहे हैं।
(2) पुराने 32 बिट परिवेश में सुधार
Linux में वर्ष 2020 के संस्करण 5.6 से ऐसा बदलाव किया गया कि 32 बिट उपकरण भी 64 बिट समय का उपयोग कर सकें। NetBSD और OpenBSD जैसे ऑपरेटिंग सिस्टम भी पहले ही 64 बिट समय अपना चुके थे। हालाँकि, भंडारण की जगह का आकार बदलने से मौजूदा प्रोग्रामों के साथ संगतता की समस्या हो सकती है, इसलिए यह बदलाव सावधानी से करना चाहिए।
(3) बचे हुए समय में जाँच करना
ऑपरेटिंग सिस्टम बदलने के बाद भी यदि उस पर चलने वाले प्रोग्राम या डेटाबेस समय को अब भी 32 बिट संख्या में सँभालते हैं, तो समस्या बनी रहती है। इसलिए पुराने कोड और उपकरणों को पहले से पहचानकर सुधारने के लिए लगातार जाँच करना सबसे भरोसेमंद तैयारी है।
2038 वर्ष की समस्या दिखाती है कि डिज़ाइन का एक बहुत छोटा निर्णय दशकों बाद बड़ी चुनौती बनकर लौट सकता है। यह याद रखते हुए पहले से तैयारी करना आवश्यक है कि जो जगह अभी पर्याप्त लगती है, समय बढ़ते रहने पर उसकी सीमा भी कभी न कभी पार हो जाएगी।
यह समझना कि आज का सुविधाजनक चुनाव कल की सीमा बन सकता है, लंबे समय तक चलने वाली प्रणाली के डिज़ाइन की पहली सीढ़ी है।