- Debian ने Y2K38 (Unix Epochalypse) समस्या को पहले से रोकने के लिए अगले संस्करण Debian 13 से 32-बिट आर्किटेक्चर तक 64-बिट
time_t लागू करने को आधिकारिक रूप दिया है
- मौजूदा 32-बिट
time_t की सीमा के कारण 19 जनवरी 2038 के बाद समय 1900 में वापस लौटने जैसी स्थिति हो सकती है, इसलिए इस समस्या को अब और टाला नहीं जाएगा
- 64-बिट हार्डवेयर पहले से सुरक्षित है, लेकिन embedded, IoT जैसे लागत-संवेदनशील 32-बिट डिवाइसों में Debian की मांग अभी भी बनी हुई है, इसलिए अग्रिम तैयारी की ज़रूरत पर ज़ोर दिया गया है
- कुल 6,429 पैकेजों में फैले
time_t टाइप को एक साथ ABI compatibility टूटने का जोखिम स्वीकार करते हुए समकालिक रूप से बदलने का बड़ा काम किया गया है
i386, hurd-i386 जैसे कुछ legacy support आर्किटेक्चर अपवाद के रूप में बने रहेंगे, जबकि नए 64-बिट time_t आधारित x86 (i686) आर्किटेक्चर की शुरुआत की संभावना का भी उल्लेख किया गया है
Debian का Y2K38 बग के प्रति जवाब: 64-बिट समय में बदलाव
- Debian आने वाली Y2K38 या Unix Epochalypse समस्या से बचने के लिए, समर्थित सबसे पुराने कुछ हार्डवेयर को छोड़कर सभी वातावरणों में 64-बिट समय पर स्विच कर रहा है
- इसके जरिए 19 जनवरी 2038 को होने वाली 32-बिट signed int सीमा से बाहर जाने के कारण समय मान में त्रुटि को रोका जाएगा
Y2K38 और Unix Epochalypse समस्या की पृष्ठभूमि
- Y2K38 समस्या उन Unix सिस्टमों में होती है जो 1 जनवरी 1970 के बाद बीते सेकंड को 32-बिट signed int के रूप में व्यक्त करते हैं; 2038 के बाद overflow होने पर समय 1900 जैसे अतीत में गलत तरीके से लौट सकता है
- यह पहले के Y2K (2000 समस्या) की तरह छोटे डेटा फ़ॉर्मैट चुनने के आर्किटेक्चरल फैसले से पैदा हुई समस्या है
- Y2K के समय डेवलपर्स की अग्रिम तैयारी की वजह से बड़ी अव्यवस्था टाली जा सकी थी
- 64-बिट हार्डवेयर के लिए सॉफ़्टवेयर पहले से सुरक्षित है, लेकिन Debian अभी भी embedded, low-spec, legacy वातावरणों में व्यापक रूप से इस्तेमाल होता है
Debian की मुख्य प्रतिक्रिया
- Debian 13 "Trixie" रिलीज़ से सभी प्रमुख आर्किटेक्चर में 64-बिट
time_t को डिफ़ॉल्ट के रूप में लागू किया जा रहा है
- 64-बिट हार्डवेयर पहले से सुरक्षित है, लेकिन 32-बिट प्रोसेसर आधारित embedded डिवाइस और legacy हार्डवेयर में यह समस्या ज़्यादा सामने आती है
- ऐसे उपकरण ऑटोमोबाइल कंट्रोल, IoT, TV, राउटर जैसी लागत-संवेदनशील और बड़े पैमाने पर भेजी जाने वाली श्रेणियों में अभी भी इस्तेमाल हो रहे हैं
- कई नए उपकरण OpenEmbedded, Alpine, Android, Gentoo आदि पर आधारित self-built Linux इस्तेमाल करते हैं, लेकिन Debian-आधारित embedded डिवाइसों का उपयोग आने वाले कई वर्षों तक जारी रहने की संभावना है
लागूकरण और बदलाव
time_t वेरिएबल संबंधित कोड में 6,429 पैकेजों में फैला हुआ है, इसलिए यह बड़े पैमाने का काम था
- यह बदलाव ABI (Application Binary Interface) compatibility तोड़ सकता है, इसलिए सभी संबंधित लाइब्रेरी और पैकेजों में इसे एक साथ समायोजित किया गया
- मेंटेनेंस टीम के अनुसार, यह काम पूरा हो चुका है और पर्याप्त परीक्षण भी किया जा चुका है
अपवाद और भविष्य की योजना
i386 पोर्ट (पुराना x86) 32-बिट time_t को जारी रखेगा और मौजूदा बाइनरी चलाने की compatibility के उद्देश्य से बना रहेगा
i686 आर्किटेक्चर पर 64-बिट समय और आधुनिक ISA (instruction set architecture) लागू करने पर अलग से चर्चा हो सकती है
hurd-i386 पोर्ट kernel support की कमी के कारण परिवर्तित नहीं किया जाएगा; इसके बजाय hurd-amd64 पर ले जाने की दिशा में काम चल रहा है
डेवलपर्स के लिए संदर्भ
- डेवलपर्स Debian wiki में दिए गए तरीकों से यह टेस्ट कर सकते हैं कि उनका सॉफ़्टवेयर 64-बिट समय वेरिएबल लागू होने पर टूटता है या नहीं
- अधिक जानकारी और तकनीकी दस्तावेज़ Debian wiki पर उपलब्ध हैं
1 टिप्पणियां
Hacker News टिप्पणियाँ
time_tदेखूँगा, उनकी याद आएगी+1900hardcode वगैरह); मैंने जो Y2K bug सीधे देखा था, उसमें एक internet forum 1999 से 19100 पर चला गया था (सिर्फ़ output error); Y2K सिर्फ़ COBOL की समस्या नहीं थीtime_tशायद Epochalypse को हल कर देगा, लेकिन सभी system बस सीधे 64-bit seconds पर नहीं जा रहे; ext4 पहले ही 30-bit fractional resolution (nanosecond स्तर) और 34-bit seconds resolution पर बदल चुका है, फिर भी कई सौ साल बाद समस्या दोबारा आएगी; लगता है कि कभी न कभी 64-bit seconds + 64-bit fraction वाले 128-bit timestamp पर ठहराव होगा, और तब मानव इतिहास के पूरे अनुमानित भविष्य को cover किया जा सकेगाtime64_tपर migrate हो चुके हैं; सिर्फ़ i386 पुरानी binary compatibility की वजह से अपवाद है, बाक़ी सब, m68k सहित, बदले जा चुके हैं; मैंने खुद m68k, powerpc, sh4, hppa को migrate कियाtime_tvariable नहीं, data type हैtime_tसचमुच हर जगह आता है। 35,960 पैकेजों में से 6,429 के source code में यह आता है। जिन पैकेजों के struct मेंtime_tशामिल है और जो ABI के रूप में expose होते हैं, उन्हें पूरे ABI migration के साथ एकसाथ बदलना पड़ता है”; wiki ने लेख से ज़्यादा स्पष्ट समझाया हैRLIMIT_STACKvalue बढ़ा दीजिए; जैसेulimit -s 4000का मतलब 4MB stack है; इससे ज़्यादा चाहिए तो/etc/security/limits.confबदलना होगा और फिर दोबारा login करना होगाMAX_ARG_STRLENको redefine करके kernel recompile किया जा सकता है; या फिर बड़े page size वाली machine (जैसे 64k page size वाला RHEL Arm kernel) इस्तेमाल की जा सकती है; लेकिन command buffer की जगह pipe से processes के बीच data भेजना कहीं आसान हैtime_tके साथ C++ standard library लिखकर इस्तेमाल की थी