免费下载!由 O’Reilly 出版的《NGINX 完全指南》中文版已正式上线 了解详情
写点什么

这个重要开源项目全靠一位低调的“怪老头”维护!他和比尔盖茨一样撑起了计算机世界

  • 2021-12-03
  • 本文字数:4000 字

    阅读完需:约 13 分钟

这个重要开源项目全靠一位低调的“怪老头”维护!他和比尔盖茨一样撑起了计算机世界

众所周知,时区设置是计算机的基本功能,大多数操作系统的用户界面都提供了该功能。通常,用户只需要手动设置粗略的地理位置来确定时区时间,之后便不需要更改,除非换到了其它国家。

 

时区设置背后有一组大量关于全球许多代表性地点时间历史信息的代码和数据,这些代码和数据被称为时区数据库(即 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 Database, Oracle Solaris 等。

如果你想知道你的计算机在 Ubuntu Linux 中被配置成什么时区,你可以在终端运行'timedatectl'命令。

 

tz 数据库背后,一个人在维护

 

tz 数据库由 David Olson 创立,收集了自 1970 年以来被广泛认可的民用时钟的时区信息。2011 年,互联网域名与数字地址分配机构 ICANN 接管了这个被全球电脑和网站广泛使用的时区数据库,该机构通常只赞助对互联网发展非常重要的项目,

 

现在,具体的维护工作由互联网分配号码管理局(Internet Assigned Numbers Authority, IANA)负责。Paul Eggert 是时区数据库的项目负责人,该职位被称为 TZ 协调员。

 

Paul Eggert,图片来源:加州大学洛杉矶分校官网

 

Paul Eggert 是一位计算机科学家,在加利福尼亚大学洛杉矶分校的计算机科学系任教,也是 GNU/Linux 核心开发者之一。

 

据说,学生们想要从他那里拿到高学分几乎是不可能的。有选过 Eggert 课程的网友表示,Eggert 的课程很有趣,但考试却很让人“抓狂”。他的考试并不考计算机知识,而是哲学。“有一次他期中考试出了一道题他自己也不知道答案,他表示他希望有学生能替他解答这个问题……”“他的考试 open book open notes,还把过去所有他的考试以及答案都发给学生,因为他知道这是没用的。”

 

我和同学在准备期中考试时,一位助教说:“我会给你们一些过去期中考试的题目和答案,但这其实没什么用”。几个学生问助教这是什么意思。“你们会知道的。一定要回答每个问题,把任何能想到的都写上去。” Eggert 一直在教授新东西,他的期中考试题目从来不会重复。有一次,他甚至到了期中考试前一天晚上才开始准备考试题目。班级平均通过率为 30%,因为大多数人拿到了相同的错误答案,所以助教还是给了一些分数。

 

网友“GoatRocketeer”分享道:

 

有一次,我找他寻求家庭作业上的帮助,因为我不确定其中的一个解决方案的方向是否正确。我告诉他之后,他说“这很有趣”,我说“这是一个很好的补充,但不知道是对还是错的”,他回答道“我不知道答案,我只是想看看你们在想什么。” 最后都没有回答我的疑问!

 

当然,Eggert 也会犯错,但他犯的错可能也会成为考试题目。

 

在一次关于汇编的演讲中,Eggert 指出某些编译器会以某种方式翻译代码,并给出了背后的推理。只是他错了。后来,一名学生发邮件向他解释了正确的推理过程。这件事直接成为期中考试的问题: “XXX 是我认为编译器做该优化的原因。说明我错在了哪里,我为什么会犯这个错误,以及正确的推理过程是什么。”

 

Eggert 的考试会有课堂或家庭作业中没有涉及到的内容,这让一些学生感到沮丧。Eggert 解释道:“考试中当然会有新内容。有些学生旷课,写作业也会作弊,所以我只有在考试中才能让所有人全神贯注。这是最好的教学时间!”

 

Eggert 办公室的门总是开着。无论是讲座还是教学时间,他都会留下来回答任何人提出的任何问题。他总是满脸笑容。“我记得有一次,他不得不离开去看眼科医生,但他提出让学生和他去,他在路上甚至到候诊室后仍在回答他们的问题。”GoatRocketeer 在帖子里写道。

 

有网友评论表示,“听起来确实像是那种会维护时区数据库的人。”Eggert 的学生们在谈论他时,都带着尊敬且敬畏的语气。但他的学生们之前可能并不知道 Eggert 数十年来一直参与记录时区数据。

 

在 Eggert 的事迹被广泛传播后,Reddit 用户分享了一部来自xkcd的漫画,该漫画描述了互联网不为人知的另一面:大量互联网程序依赖某个小型项目及其工作人员(如 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 Scott的视频。Tom 在视频里指出,处理时区的最好方法就是不要通过将库集成到代码中来处理时区。最好不惜一切代价避免这种情况发生,不然会引发各种各样的问题。他提到一系列令人发狂的问题、例外情况和矛盾。值得庆幸的是,现在任何开发人员都可以通过简单地集成时区数据库来避免这些问题。

 

维护 tz 数据库的人做着吃力不讨好的工作。Tom 的视频可能让他抓狂了五分钟,但对这些人来说,解决这些问题是他们整个职业生涯都在努力的事。

 

时区管理社区的精英们都是很严肃的人,是科技巨头和重量级人物。Colebourne 在 9 月份写的一篇题为“时区数据库的大问题”的博客中表示:

 

Paul Eggert 是托管在 IANA 的时区数据库的项目负责人,该职位被称为 TZ 协调员。他是该领域的专家,数十年来一直参与记录时区数据。不幸的是,他目前似乎只想解决一个他认为重要的虚构问题,而忽视了所有对他这一行动的反对。

 

Colebourne 的尖锐批评引起了其他人的愤怒,他们指责 Colebourne 的指责过于草率。此外,还有人提出找人替换 Eggert 的 TZ 协调员职务。

 

可以看出,不仅时区大佬们目前还不能就时区数据库向前推进的最佳方式达成一致,时区的编纂和标准化的整个过程也是一项具有长期动荡历史的有争议的政治事务。

 

时区维护者,为什么很难

 

实际上,时区维护过程被严格控制,并与主要的行业利益相关者共享。但最终,时区数据库代表着对其决定的一种最终仲裁,至少在技术上是这么解释时区的。

 

社区里的人爆出了一些非洲国家的事情:在仅仅提前 4 天通知的情况下,这些国家就草率决定了时区。也许他们只是想暗中捉弄 Eggert 这样的人。

 

“政治性”是对这个科技领域小角落的一种威胁,但有时需要政治决策。

 

Y Combinator 在Hacker News中提供了一个罕见的视角,可以看出这个项目的大部分协调工作都发生在晦涩难懂的列表项中,密切参与其中的人都敏感地意识到了这个项目的重要性。正如一位用户在回复另一个质疑时区是否真有那么大意义的帖子时评论道:

 

“我们在阿塞拜疆的一位客户非常生气,他们的时区显示为 Asia/Yerevan。你可能不知道,阿塞拜疆和亚美尼亚处于对战状态。”

 

还有一个知识点:独立前的爱尔兰曾经拥有自己的时区:都柏林时间,后来英国人将其取消,作为对复活节革命(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)

2021-12-03 14:227582

评论 1 条评论

发布
用户头像
直接按经纬度固定划分就完事了,搞得那么复杂,人类的政治是最无聊的东西。
2021-12-17 14:00
回复
没有更多了
发现更多内容

这些react面试题你会吗,反正我回答的不好

beifeng1996

前端 React

TCP协议和UDP协议详细介绍

阿柠xn

TCP 计算机网络 协议族 UDP协议 9月月更

死锁检测实现

C++后台开发

后台开发 线程 多线程 死锁 C++开发

NFTScan 与 ET.XYZ 在 NFT API 数据层面进行深度合作

NFT Research

区块链 NFT web3

关于 Angular 应用 tsconfig.json 中的 lib 属性

Jerry Wang

typescript 前端开发 angular web开发 9月月更

开发者有话说|一名普通大专学历开发者的成长

彭发红

工赋开发者社区 |【数智化】数字化工厂规划与建设方案

工赋开发者社区

关爱2700多万听障者,手语服务助力无声交流

HMS Core

手语

如何在笔记本上安装openEuler 22.03 LTS

openEuler

开源 操作系统 openEuler 安装部署

19道高频vue面试题,顺便写一下自己的答案

bb_xiaxia1998

Vue 前端

大数据调度平台Airflow(七):Airflow分布式集群搭建原因及其他扩展

Lansonli

airflow 9月月更

Serverless遇到 FinOps: Economical Serverless

华为云开发者联盟

云原生 后端 企业号九月金秋榜

[SpringBoot]配置文件格式、yaml配置及读取

十八岁讨厌编程

Java 9月月更

流程图布局在项目中的实践

相续心

openEuler资源利用率提升之道 03:rubik混部引擎简介

openEuler

Linux 开源 cpu 操作系统 openEuler

js常见手写题总结

helloworld1024fd

JavaScript 前端

Http轮询分为长查询和短查询总结

知识浅谈

HTTP 9月月更

[SpringBoot]多环境配置,配置文件分类

十八岁讨厌编程

Java 后端开发 9月月更

NestOS应用案例:容器化部署OpenStack

openEuler

架构 openEuler 开源操作系统 OpenStack

Struts实现登录

Struts2 9月月更

深度剖析Istio共享代理新模式Ambient Mesh

华为云开发者联盟

云计算 云原生 后端 企业号九月金秋榜

跟我学Python图像处理丨带你掌握傅里叶变换原理及实现

华为云开发者联盟

Python 人工智能 企业号九月金秋榜

Code For Better 谷歌开发者之声——Google Cloud谷歌云

Fire_Shield

云原生 Google Cloud 9月月更

开发者有话说|如何写出更加优雅的代码

海风极客

个人成长

探索AI技术应用场景

felix

产业落地 AI探索 API接口 模型管理

面向深度神经网络的特定领域架构

俞凡

深度学习 架构 TPU

js高频手写题总结

helloworld1024fd

JavaScript 前端

融云员工服务台,跟“干不完”说再见

融云 RongCloud

IT职场

SpringBoot初识

十八岁讨厌编程

Java 后端开发 9月月更

物联网实践分享

彭发红

这个重要开源项目全靠一位低调的“怪老头”维护!他和比尔盖茨一样撑起了计算机世界_语言 & 开发_张健欣_InfoQ精选文章