2038年問題

2038年問題とはUNIXで使用している秒カウンタが 1970年1月1日午前0時(UTC、以下同様)を起点として符号あり32bit整数で管理しているため 2038年1月19日3時14分7秒(以下2038年と略記)を超えると負の数となり以後の日付を正しく表せなくなる問題です。

現在組込みLinuxの主流は32bitOSです。世の中で多く使われているARM系プロセッサもCATシリーズマイコンで使用しているSH4プロセッサも32bit Linuxを搭載して出荷しています。

IntelPCを含め32bit Linuxの2038年問題をまとめました。

  • カーネル内部日付(kernel-2.6.15, kernel-3.0.4)
    • 2038年1月19日3時14分7秒(UTC) を超えると 1901年12月13日20時45分52秒(UTC)に戻る。以後137年周期を繰り返す。
  • ext2、ext3、ReiserFSファイルシステム
    • タイムスタンプが32bitなのでカーネルと同じく2038年以後の日付を記録できない
  • FATファイルシステム
    • 2107年12月31日まで
  • ext4ファイルシステム
    • 2514年まで対応
  • NTPプロトコル
    • 2036年2月6日まで

やってみた

CAT760 linux kernel-2.6.15 (32bit) で実験

http://www.youtube.com/watch?v=wLDVSSx0KNg

結果

  • 2038年1月19日のラウンドアップ時に暴走はしないが1901年に戻る
  • dateコマンドでは2038年以後に設定できない。
  • 追試 kernel-3.0.4, eglibc-2.13 (CAT724)でも同じでした。
  • kernel-3.0.4 でも
    typedef long            __kernel_time_t;
    typedef __kernel_time_t          time_t;
    されているので32bitアーキテクチャなら32bitである。

関連

  • 組込みLinux技術情報
  • CAT724

外部リンク