众所周知,时区设置是计算机的基本功能,大多数操作系统的用户界面都提供了该功能。通常,用户只需要手动设置粗略的地理位置来确定时区时间,之后便不需要更改,除非换到了其它国家。
时区设置背后有一组大量关于全球许多代表性地点时间历史信息的代码和数据,这些代码和数据被称为时区数据库(即 tz、tzdata 或 zoneinfo),该数据库会定期进行更新以反映各政治实体对时区边界、UTC 差值和夏令时规则的更改。对 tz 的更新遵循 BCP 175 流程进行管理。
尽管大多数计算机用户从未听说过时区数据库,但 tz 数据库对全世界的计算机非常重要。所有基于 Linux 和 Mac 的计算机都是从一个极其重要的数据库(时区数据库)中提取时区。目前,使用该数据库的项目包括:the GNU C Library (used in GNU/Linux), Android, FreeBSD, NetBSD, OpenBSD, Chromium OS, Cygwin, MariaDB, MINIX, MySQL, webOS, AIX, BlackBerry 10, iOS, macOS, Microsoft Windows, OpenVMS, Oracle>
如果你想知道你的计算机在 Ubuntu Linux 中被配置成什么时区,你可以在终端运行'timedatectl'命令。
tz 数据库背后,一个人在维护
tz 数据库由 David Olson 创立,收集了自 1970 年以来被广泛认可的民用时钟的时区信息。2011 年,互联网域名与数字地址分配机构 ICANN 接管了这个被全球电脑和网站广泛使用的时区数据库,该机构通常只赞助对互联网发展非常重要的项目,
现在,具体的维护工作由互联网分配号码管理局(Internet Assigned Numbers Authority, IANA)负责。Paul Eggert 是时区数据库的项目负责人,该职位被称为 TZ 协调员。
Paul Eggert 是一位计算机科学家,在加利福尼亚大学洛杉矶分校的计算机科学系任教,也是 GNU/Linux 核心开发者之一。
据说,学生们想要从他那里拿到高学分几乎是不可能的。有选过 Eggert 课程的网友表示,Eggert 的课程很有趣,但考试却很让人“抓狂”。他的考试并不考计算机知识,而是哲学。“有一次他期中考试出了一道题他自己也不知道答案,他表示他希望有学生能替他解答这个问题……”“他的考试 open book open notes,还把过去所有他的考试以及答案都发给学生,因为他知道这是没用的。”
当然,Eggert 也会犯错,但他犯的错可能也会成为考试题目。
在一次关于汇编的演讲中,Eggert 指出某些编译器会以某种方式翻译代码,并给出了背后的推理。只是他错了。后来,一名学生发邮件向他解释了正确的推理过程。这件事直接成为期中考试的问题: “XXX 是我认为编译器做该优化的原因。说明我错在了哪里,我为什么会犯这个错误,以及正确的推理过程是什么。”
Eggert 的考试会有课堂或家庭作业中没有涉及到的内容,这让一些学生感到沮丧。Eggert 解释道:“考试中当然会有新内容。有些学生旷课,写作业也会作弊,所以我只有在考试中才能让所有人全神贯注。这是最好的教学时间!”
Eggert 办公室的门总是开着。无论是讲座还是教学时间,他都会留下来回答任何人提出的任何问题。他总是满脸笑容。“我记得有一次,他不得不离开去看眼科医生,但他提出让学生和他去,他在路上甚至到候诊室后仍在回答他们的问题。”GoatRocketeer 在帖子里写道。
有网友评论表示,“听起来确实像是那种会维护时区数据库的人。”Eggert 的学生们在谈论他时,都带着尊敬且敬畏的语气。但他的学生们之前可能并不知道 Eggert 数十年来一直参与记录时区数据。
在 Eggert 的事迹被广泛传播后,Reddit 用户分享了一部来自的漫画,该漫画描述了互联网不为人知的另一面:大量互联网程序依赖某个小型项目及其工作人员(如 Eggert 等人的工作),来为使用计算机的人提供真正必要的服务。
除了 Eggert,还有一些开发者也是凭一己之力守护着某个重要开源项目。比如开源项目 cURL 真正的核心主力开发 Daniel Stenberg。
cURL 主要包括 curl(命令行工具)和 libcurl(C 语言的 API 库)两大块。curl 和 libcurl 在几乎所有的互联网服务器上都可以使用,并且是 PHP 默认的传输引擎,而在全球近 20 亿个网站中,有近 80% 使用了 PHP。虽然 cURL 项目有不少贡献者,但是 Daniel 为 cURL 提交了16000 次 commit,并在几年前全职维护该项目。目前,curl 完全独立于任何组织和公司。
有句话是这样说的:世界上,有一半的技术大师是像比尔·盖茨和史蒂夫·乔布斯这样的人,另一半的人被称为 Ronald,他们运行着一台叫做 R.u.n.k 的机器,这个机器代表了 Ronald 的通用数字计数器,来为地球上的每台机器做所有的数学运算。总有一些人,不为大众熟悉,但默默为世界做着贡献。
单人维护让社区不“和谐”了吗
一个人维护项目听起来很爽,但社区并没有大家想象的和谐。时区项目也有自己的社区,但如果你认为社区很简单、无聊,甚至很少发生争议的话,那就错了。这个社区目前似乎陷入了如何维护数据库的程序性争议之中。
今年 9 月,tz 数据库社区就对是否合并某些时区的提议发生过激烈争吵。由于担心 ID 剔除可能导致 1970 年之前的数据变得难以获取,Eggert 提议将 1970 年之后具有相同数据的多个地区合并到一个时区。比如,将“Europe/Oslo”作为“Europe/Berlin”的别名后,就意味着奥斯陆在 1970 年以前的数据会被柏林的数据取代。这当然遭到了很多人的反对。
著名的 Java 专家 Stephen Colebourne 表示,“为什么柏林可以保留其状态和完整历史,而奥斯陆却被删除了?”“答案是柏林的人口更多。”在 Colebourne 看来,项目负责人正试图通过时区的合并影响 1970 年以前的时间戳。
要理解为什么社区决策如此反复无常,大家可以先看看的视频。Tom 在视频里指出,处理时区的最好方法就是不要通过将库集成到代码中来处理时区。最好不惜一切代价避免这种情况发生,不然会引发各种各样的问题。他提到一系列令人发狂的问题、例外情况和矛盾。值得庆幸的是,现在任何开发人员都可以通过简单地集成时区数据库来避免这些问题。
维护 tz 数据库的人做着吃力不讨好的工作。Tom 的视频可能让他抓狂了五分钟,但对这些人来说,解决这些问题是他们整个职业生涯都在努力的事。
时区管理社区的精英们都是很严肃的人,是科技巨头和重量级人物。Colebourne 在 9 月份写的一篇题为“时区数据库的大问题”的博客中表示:
Colebourne 的尖锐批评引起了其他人的愤怒,他们指责 Colebourne 的指责过于草率。此外,还有人提出找人替换 Eggert 的 TZ 协调员职务。
可以看出,不仅时区大佬们目前还不能就时区数据库向前推进的最佳方式达成一致,时区的编纂和标准化的整个过程也是一项具有长期动荡历史的有争议的政治事务。
时区维护者,为什么很难
实际上,时区维护过程被严格控制,并与主要的行业利益相关者共享。但最终,时区数据库代表着对其决定的一种最终仲裁,至少在技术上是这么解释时区的。
社区里的人爆出了一些非洲国家的事情:在仅仅提前 4 天通知的情况下,这些国家就草率决定了时区。也许他们只是想暗中捉弄 Eggert 这样的人。
“政治性”是对这个科技领域小角落的一种威胁,但有时需要政治决策。
Y Combinator 在Hacker News中提供了一个罕见的视角,可以看出这个项目的大部分协调工作都发生在晦涩难懂的列表项中,密切参与其中的人都敏感地意识到了这个项目的重要性。正如一位用户在回复另一个质疑时区是否真有那么大意义的帖子时评论道:
还有一个知识点:独立前的爱尔兰曾经拥有自己的时区:都柏林时间,后来英国人将其取消,作为对复活节革命(Easter Rising)的惩罚。
这就是为什么世界时区社区的官方源代码读起来不像文本数据库,更像是一种独特的文学形式:一部分是历史发展(被注释掉的部分),一部分是可由计算机读取的实际代码,还有一部分是琐事参考。
对于那些花费了大量时间跟踪时区演变的人来说,诸如法国试图在采用十进制以及国际原子能机构定期决定在世界时间系统中增加核秒数等,都是他们每天要解决的问题。
时区数据库业内人士表示,每一次高风险的讨论都代表着在避免一场千年虫(Y2K)灾难。这甚至可以成为好莱坞大片的素材。一个无赖国家如果实施了时区骗局,最好在为时未晚时想出应对之策。
写在最后
虽然 Linux 桌面上的许多应用可能会过时或者被取缔,但时区检测程序似乎从未出现过错误。否则,我们可能会错过无数次 Zoom 会议、面试会迟到等。
现在很多创业公司表示做了技术创新,并赚到了很多钱,但许多公司可能在短短数年内就会被遗忘,但时区数据库不会,因为它无法被遗忘。那些处于技术堆栈最底层的人,默默无闻、不知疲倦地维护着这个世界上很多计算机所依赖的开源项目。
相关链接:
The Largely Untold Story Of How One Guy In California Keeps The World’s Computers On The Right Time Zone. (Well, Sort Of)