2038年1月19日(火)の協定世界時(UTC)午前3時14分8秒に世界は終焉(しゅうえん)を迎える。と言ってもこれは「ヨハネの黙示録」に記されているような意味合いのものではない。この時点から、Linuxや旧版の「macOS」といった、32ビット版のUNIXベースのOSが使用している時刻の保存領域が桁あふれを起こす結果、負の数値を刻み始めるのだ。これは良いことではない。こういったOSが稼働している32ビットコンピューターは誤動作するだろう。だが幸いなことに、Linuxの開発者らは既に準備を整えている。
この問題は、UNIXにおける時刻の計数方法に端を発している。UNIXとその親戚筋にあたるOS、つまりLinuxやmacOS、その他のPOSIX互換OSの日付は、エポックと呼ばれる1970年1月1日00時00分00秒UTCから開始されている。UNIXファミリーはそのエポックからの経過秒数を測定している。
ここまでは何の問題もない。しかしUNIXファミリーは、32ビットのOSから始まったという歴史があり、その関係からか時刻を単精度符号付き32ビット整数として保存するようになっていた。これでも非常に大きな秒数まで保存できるのだが、2000年におけるY2K問題と同様、十分ではなかった。
Linuxの開発者らは、この問題の到来を数十年前から予見していた。このため、Linuxのカーネル開発者Arnd Bergmann氏をはじめとする人々が対処に取り組んできている。そして、間もなく登場するLinuxカーネル「Linux 5.6」で、その修正が利用可能になる。Bergmann氏は、「Linux 5.6、あるいは5.4向けのバックポートパッチは、2038年以降での稼働を想定した32ビットシステムのベースとして機能する初めてのリリースだ」と説明している。
ただし、注意点がいくつかある。
- あらゆるユーザー空間は、間もなくリリースされるmusl-1.2およびglibc-2.32でサポートされる、64ビットのtime_t型とともに、Linux 5.6以降でインストールされるカーネルヘッダーを用いてコンパイルされていなければならない。
- システムコールインターフェースを直接用いているアプリケーションは、既存のシステムコールの代わりに、「Linux 5.1」で追加されたtime64システムコールを呼び出すようにする必要がある。