আমি এই সম্পর্কে কিছুটা উদ্বিগ্ন। এটিকে "বছর 2038 সমস্যা" বলা হয়। লিনাক্স কার্নেল বা উবুন্টু 12.04 তারিখের পরে কি এখনও তারিখগুলি পরিচালনা করতে প্রস্তুত?
আমি এই সম্পর্কে কিছুটা উদ্বিগ্ন। এটিকে "বছর 2038 সমস্যা" বলা হয়। লিনাক্স কার্নেল বা উবুন্টু 12.04 তারিখের পরে কি এখনও তারিখগুলি পরিচালনা করতে প্রস্তুত?
উত্তর:
না, এটি ব্যর্থ হবে না। সবচেয়ে খারাপ ক্ষেত্রে, কোনও প্রোগ্রামারের দৃষ্টিকোণ থেকে এটি প্রত্যাশার মতো কাজ করবে: এটি 1901-12-13 20:45:52 তারিখে পুনরায় পাঠানো হবে:
এটি না হওয়া পর্যন্ত আপনি আপনার বর্তমান বিতরণগুলি আপডেট করবেন না। " আপডেট করা সহজ these এই আপডেটগুলির মধ্যে একটিতে অবশ্যই একটি ফিক্স থাকবে " "যেমন চকোবাই বলেছিলেন।
আমার মনে আছে 2000 এর আগে 16 বিট মেশিনগুলির সাথে এটি একই সমস্যা / প্রশ্ন ছিল এবং শেষ পর্যন্ত এটি কোনও সমস্যা ছিল না।
উইকিপিডিয়া থেকে একটি সমাধান:
Operating৪-বিট হার্ডওয়্যারটিতে চলার জন্য ডিজাইন করা বেশিরভাগ অপারেটিং সিস্টেম ইতিমধ্যে স্বাক্ষরিত -৪-বিট
time_t
পূর্ণসংখ্যা ব্যবহার করে। একটি স্বাক্ষরিত 64৪-বিট মান ব্যবহার করে একটি নতুন মোড়কের তারিখ প্রবর্তিত যা মহাবিশ্বের আনুমানিক বয়সের চেয়ে বিশ গুণ বেশি: এখন থেকে প্রায় 292 বিলিয়ন বছর, রবিবার, 4 ডিসেম্বর 292,277,026,596 এ। খেজুরগুলিতে গণনা করার ক্ষমতা এই কারণে সীমাবদ্ধtm_year
বছরের জন্য 1900 থেকে শুরু করে একটি স্বাক্ষরিত 32 বিট ইনট মান ব্যবহার করে। এটি বছরের সর্বাধিক 2,147,485,547 (2,147,483,647 + 1900) সীমাবদ্ধ করে। যদিও এটি প্রোগ্রামগুলি সম্পাদন করার জন্য সমস্যার সমাধান করে, এটি বাইনারি ডেটা ফাইলগুলির মধ্যে তারিখের মানগুলি সংরক্ষণ করার সমস্যাটিকে সমাধান করে না, যার মধ্যে অনেকগুলি অনমনীয় স্টোরেজ ফর্ম্যাটগুলিকে নিয়োগ করে। এটি সামঞ্জস্যতা স্তরগুলির অধীনে চলমান 32-বিট প্রোগ্রামগুলির জন্য সমস্যাটিও সমাধান করে না এবং যে প্রোগ্রামগুলি ভুলভাবে সময় মানগুলি ব্যতীত অন্য ধরণের ভেরিয়েবেলে সংরক্ষণ করে তা সমস্যার সমাধান করতে পারে নাtime_t
।
আমি 64-বিটে উবুন্টু 13.04 ব্যবহার করি এবং কৌতূহলের দ্বারা আমি নিজে হাতে সময়টি 2038-01-19 03:13:00 এ পরিবর্তিত করি। 03:14:08 এর পরে কিছুই ঘটেনি:
সুতরাং এই সমস্যাটি নিয়ে উদ্বিগ্ন হওয়ার কিছু নেই।
আরও সম্পর্কে:
নিম্নলিখিত পার্ল স্ক্রিপ্টটি ব্যবহার করে আপনার কম্পিউটারের সময় ক্রাশ হবে কিনা তা আপনি পরীক্ষা করতে পারেন:
#!/usr/bin/perl
use POSIX;
$ENV{'TZ'} = "GMT";
for ($clock = 2147483641; $clock < 2147483651; $clock++) {
print ctime($clock);
}
যদি আপনার কম্পিউটারটি ঠিক থাকে তবে আপনি এটি পাবেন:
Tue Jan 19 03:14:01 2038
Tue Jan 19 03:14:02 2038
Tue Jan 19 03:14:03 2038
Tue Jan 19 03:14:04 2038
Tue Jan 19 03:14:05 2038
Tue Jan 19 03:14:06 2038
Tue Jan 19 03:14:07 2038 <-- Last second in 32-bit Unix systems
Tue Jan 19 03:14:08 2038
Tue Jan 19 03:14:09 2038
Tue Jan 19 03:14:10 2038
আপনার কম্পিউটারটি যদি আমার মতো হয় তবে এটি প্রায় এইভাবে মোড়ানো হবে:
Tue Jan 19 03:14:01 2038
Tue Jan 19 03:14:02 2038
Tue Jan 19 03:14:03 2038
Tue Jan 19 03:14:04 2038
Tue Jan 19 03:14:05 2038
Tue Jan 19 03:14:06 2038
Tue Jan 19 03:14:07 2038
Fri Dec 13 20:45:52 1901
Fri Dec 13 20:45:52 1901
Fri Dec 13 20:45:52 1901
এটি এটি করতে পারে:
Tue Jan 19 03:14:01 2038
Tue Jan 19 03:14:02 2038
Tue Jan 19 03:14:03 2038
Tue Jan 19 03:14:04 2038
Tue Jan 19 03:14:05 2038
Tue Jan 19 03:14:06 2038
Tue Jan 19 03:14:07 2038
Tue Jan 19 03:14:07 2038
Tue Jan 19 03:14:07 2038
Tue Jan 19 03:14:07 2038
ctime
?
আমি 1996 সালে এই পিছনে একটি সংক্ষিপ্ত কাগজ লিখেছিলাম এবং প্রকাশ করেছি। এর মধ্যে এটি প্রদর্শনের জন্য একটি ছোট সি প্রোগ্রাম অন্তর্ভুক্ত ছিল। এনটিপি-নেটওয়ার্ক টাইম প্রোটোকলের সাথে একই জাতীয় সমস্যা সম্পর্কে আমার ডেভিড মিলের সাথে ইমেলও ছিল। আমার উবুন্টু 14.04 64৪-বিট ল্যাপটপে পার্ল কোড সীমাবদ্ধতা প্রদর্শন করে নি তাই অন্তর্নিহিত -৪-বিট লিবগুলি সংশোধন করা উচিত।
যাইহোক, আমার দীর্ঘ-পূর্বের পরীক্ষা কোডটি চালানো সময়কে UNIX পর্বের কাছে ফিরে আসে। অতীতে থেকে 32-বিট কোড দিয়ে সমস্ত ঠিকঠাক নয়।
আমার 1996 পত্রিকা, ইউনিক্স সময় 2038 সালে শেষ হবে! আমার ওয়েবসাইটটি প্রায় 2000 সাল থেকে রয়েছে "
-৪-বিট লিনাক্স প্রস্তুত, কমপক্ষে যদি আপনি মূল ওএস ইন্টারফেসের বিষয়ে কথা বলছেন (স্বতন্ত্র অ্যাপ্লিকেশন অবশ্যই এখনও এটি স্ক্রু করতে পারে)। সময়_টি traditionতিহ্যগতভাবে "দীর্ঘ" এবং "বিট" এর জন্য একটি এলিফ হিসাবে সংজ্ঞা দেওয়া হয় 64-বিট লিনাক্সে 64-বিট is
৩২-বিট লিনাক্সের পরিস্থিতি (এবং bit৪-বিট লিনাক্সে 32-বিট বাইনারিগুলির জন্য সামঞ্জস্যতা স্তর) খুব কম রোজাদার। এটি ভেঙে গেছে এবং বিদ্যমান বিদ্যমান বাইনারিগুলি না ভেঙে এটি ঠিক করা সহজ কাজ নয়। পুরো গোছা API গুলি সময়_আত ব্যবহার করে এবং অনেক ক্ষেত্রে এটি ডেটা স্ট্রাকচারের অংশ হিসাবে এম্বেড করা থাকে, তাই কেবল API গুলিই নয় যেগুলি তারা কাজ করে এমন ডেটা স্ট্রাকচারগুলিও খুব বেশি হওয়া উচিত।
এমনকি যদি পিছনের দিকের সামঞ্জস্যের কিছু স্তর থাকে তবে সমস্ত বাইনারি যা সঠিক সময় পেতে চায় তাদের নতুন -৪-বিট সময়ের ইন্টারফেসগুলি ব্যবহার করতে পুনরায় তৈরি করা দরকার।
কিছু কাজ হয়েছে (উদাহরণস্বরূপ দেখুন https://lwn.net/Articles/643234/ এবং http://www.sourceware.org/ML/libc-alpha/2015-10/msg00893.html ) তবে আমরা আফিকা সম্পূর্ণ সমাধান থেকে এখনও অনেক দূরে। Y2K38 সুরক্ষিত 32-বিট বিতরণগুলি সাধারণ উদ্দেশ্য হবে কি না তা পরিষ্কার নয়।