首页
学习
活动
专区
圈层
工具
发布

别等2038年“大崩溃”!Debian提前13年“避坑”:全面切换64位时间格式!

整理 | 屠敏

出品 | CSDN(ID:CSDNnews)

曾经“千年虫”(Y2K)问题的出现,让不少老程序员时至今日仍记忆犹新:回看 20 世纪的大多数计算机程序,出于节省存储空间的考虑,年份通常用两位数来表示,如 1999 年写作 99 年。然而,当时间从 1999 年跳到 2000 年时,许多旧系统把 00 误解为1900 年,从而引发日期计算、排序、有效期判断等逻辑错误,甚至导致有些系统因此宕机。

如果说 Y2K 是上个世纪的麻烦,那么它的“进阶版”也快来了。很多开发者现在担心,到 2038 年,全球还在运行的一些老系统会被一个叫Y2K38的问题拖垮。

为避免重蹈 Y2K 覆辙,历史悠久的 Linux 发行版 Debian 已决定从系统底层做出调整,全面迈向 64 位时间格式,为即将到来的“2038 年”提前布局。

何为 Y2K38?

简单来看,Y2K38 也被称为——“2038 年问题” 或“Unix 时间溢出”,指的是将在2038 年 1 月 19 日 03:14:07(UTC)发生的一个计算机时间溢出问题。

至于为什么会有这个问题的出现,是因为其根源在于Unix 和类 Unix 系统(如 Linux)使用的时间表示方式:

Unix 时间戳(time_t)表示是从 1970 年 1 月 1 日 00:00:00 UTC 起经过的秒数。

在很多旧系统中,这个时间戳是用32 位有符号整数(signed 32-bit int)存储的。

然而,32 位有符号整数的最大值是( 2³¹ - 1),即:

2,147,483,647

也就是:

2038-01-19 03:14:07 UTC

再往后加一秒,就会溢出,变成负数:

-2,147,483,648 表示 1901 年 12 月 13 日

这会造成严重错误,比如许多使用旧库或旧系统的程序会认为:

时间倒退了 137 年

日期变得非法或未定义

导致排序、日志、计划任务、证书、支付系统等出现严重错误

如果到了 2038 年,那些还在使用32 位系统(尤其是嵌入式设备、老旧 Linux 系统)的程序、依赖旧的 C 标准库(glibc)和数据结构的应用,以及某些数据库、网络协议、调度系统和长期运行服务都将受到最为直接的影响。

Debian 提前 13 年开始行动:切换到 64 位时间戳

那要问有没有办法避开这个问题?

事实上,最直接的解决方案,就是将时间戳从 32 位改为64 位整数(int64_t),这可以把时间表示范围大幅扩展到公元 292,277,026 年,彻底告别溢出问题。

正因此,Debian 计划在即将发布的Debian 13 “Trixie”中,除最老旧架构外,全面切换至 64 位时间戳格式。

不少人疑惑,现在才 2025 年,距离 2038 还有 13 年,为什么要这么早动手?对此,Debian 给出了解释:

距离 2038 年其实已经不到 15 年了,而一些容易出问题的系统早就已经出厂、投入使用了,我们真的该停止“继续制造麻烦”了。

现在大多数计算设备——尤其是使用 Debian 或其衍生版本的——已经是 64 位架构,不会受到 Y2K38 的影响。

但还是有不少对成本比较敏感的设备还在用 32 位架构,甚至还在不断出货,比如汽车上的系统、物联网设备、电视、路由器、工业控制、楼宇监控,甚至一些便宜的安卓手机。

这类设备虽然大多数跑的是像 OpenEmbedded、Alpine、Android 或 Gentoo 这样从源码构建的系统,但基于 Debian 的设备还是有一定市场,而且这些设备一旦部署,可能会运行很多年,很容易就撑到 2038 年出问题。

虽然“把 time_t 的定义从 32 位有符号整数改成 64 位有符号整数”听起来简单,实际上是一个工程量巨大的改动。Debian 指出:

Debian 当前有3 万多个软件包,其中6429 个直接使用了 time_t

改动将影响所有相关库和软件的 ABI(二进制兼容性),无法局部更新,必须整体协调升级

即使在 32 位平台上,也必须使用 64 位时间戳来规避问题

好消息是,Debian 开发团队已经完成了这部分的代码清理工作,尽管他们也承认仍可能有“漏网之鱼”。

老硬件怎么办?

不过,出于兼容性考虑,Debian 也在 wiki 页面中指出,i386 架构(32 位 x86)暂时还会继续使用原有的 32 位时间戳。不过其提到,至于是否新建一个支持 64 位时间戳的i686 架构变种,还得看是否有开发者愿意继续维护这一“前景黯淡”的平台。

至于另一个架构hurd-i386,则不会切换到 64 位时间戳,因为其内核当前根本不支持这种格式。Debian 表示正在推动转向 amd64 版本(hurd-amd64)以解决该问题。

写在最后

继千年虫之后,Y2K38 被认为是下一个“定时炸弹”式的系统危机。虽然它还有十余年才会真正“爆炸”,但系统底层的改动周期长、影响范围广,必须提前应对。Debian 的主动出击,正是为了不给未来的世界留下更多隐患。

参考:

https://www.theregister.com/2025/07/25/y2k38_bug_debian/

https://wiki.debian.org/ReleaseGoals/64bit-time

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OhSbISE-j7eM0lcd8YOaxpog0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。
领券