glibc में अभी भी Y2038 समर्थन डिफ़ॉल्ट नहीं है
(ariadne.space)-
2038-01-09 3:14:07 UTC के बाद 32-bit
time_tओवरफ्लो हो जाता है -
Linux kernel ने कुछ साल पहले आंतरिक रूप से इसे 64-bit में बदल दिया था, और Alpine ने 3.13 से
time_tको 64-bit में बदल दिया -
GNU glibc ने 2.34 से 64-bit
time_tका समर्थन शुरू तो किया, लेकिन इसका तरीका तकनीकी रूप से पूरी तरह संतोषजनक नहीं है -
musl या अन्य UNIX C library implementations में नए code में
time_tहमेशा 64-bit होता है, और पुराने 32-bit code के लिए compatibility stubs दिए जाते हैं
→ यानी समय के साथ यह अपने-आप Y2038 compatible हो जाता है
-
Microsoft ने msvcrt में इससे एक कदम आगे जाकर डिफ़ॉल्ट रूप से 64-bit
time_tका उपयोग किया, और_USE_32BIT_TIME_Tmacro इस्तेमाल करने पर पुराने 32-bit functions तक पहुंच मिलती है -
GNU glibc ठीक ऊपर के दोनों तरीकों के उलट तरीका अपनाता है
→ इसे इस्तेमाल करने के लिए -D_TIME_BITS=64 को स्पष्ट रूप से निर्दिष्ट करना पड़ता है
→ हो सकता है कभी इसका डिफ़ॉल्ट बदल जाए, लेकिन अब तक ऐसा बिल्कुल नहीं हुआ है
⇨ इसी तरह 2GiB से बड़ी files को handle करने के लिए ज़रूरी -D_FILE_OFFSET_BITS=64 भी अभी तक स्पष्ट रूप से देना पड़ता है
→ साथ ही 32-bit systems पर -D_TIME_BITS=64 के साथ build नहीं किया जा सकता (यानी Y2038 compatibility संभव नहीं है)
1 टिप्पणियां
अभी लगभग 16 साल बचे हैं, लेकिन Linux ऐसे उपकरणों में भी बहुत इस्तेमाल होता है जिन्हें लंबे समय तक बदला नहीं जाता..