混沌周刊 #25 | 认真提交

周日晚上好,欢迎来到《混沌周刊》第25期。《混沌周刊》是一个试图从开发者角度为你带来这个世界上发生着什么,发生过什么,以及未来可能会发生什么的栏目,每周更新。您可以通过首页的RSSTwitterTelegram频道和电子邮件等方式订阅。如果您觉得本周刊对自己有所帮助,请不吝推荐给其他人,多谢。


AngularJS(也就是初代的Angular,发布于2010年)框架的长期支持已经停止,因为疫情原因,这个期限其实已被延长过。AngularJS和后来新版的Angular存在许多根本性的不同,因此虽然在版本号上有延续性,但实际上被看作是两个框架。

你知道Git这个版本管理工具的来历吗?在最初的十年里,Linux内核并没有使用CVS或者SVN这样的版本管理软件,而是由Linus Torvalds手动收集来自贡献者的补丁,并维护每个版本。后来,一个叫做BitKeeper的商业版本管理软件向内核开发者免费提供授权。其间,一个叫Andrew Tridgell的程序员(也是rsync的作者)试图破解BitKeeper的协议。因为此事,BitKeeper公司撤销了对Linux内核开发者的授权。BitKeeper作为一个「分布式」的源码管理系统,其效率对Linus留下的印象十分深刻。在试图与BitKeeper斡旋无果后,Linus用了大约十天时间,写出了一个可以「自我管理」的分布式源码管理工具原型,并用打趣的态度命名为Git:早期的Git和也今天颇为不同,包含的是今日的Git用户们不常接触到的底层命令。关于Git诞生的更多细节,可以参考Linux基金会对Linus的这篇采访。讽刺的是,十余年后的2016年5月,BitKeeper也决定开源。商业软件因为渐渐落后于时代而选择开源,这事不只发生在BitKeeper身上,有类似经历的还有macOS上曾经辉煌的文本编辑器TextMate.

说起Linus和Git,另一件不得不提起的趣事就是上周的这个恶作剧:有人提供了一个GitHub的URL,里面是作者为Linus的一个GitHub提交详情页面,内容大致是「我删除了Linux,因为它很烂,你应该去用Windows XP,它真的很棒」。

这是如何做到的呢?它利用了GitHub的两个「漏洞」(标注引号是因为GitHub不认为它们是漏洞):可以以任意E-mail作为提交作者来伪造提交人,和提交的hash会在所有fork里共享。要验证第二点,我们可以在torvalds/linux的fork列表里找到任意一个fork了Linux仓库的用户名,并用它替换掉最初那个URL里的torvalds,也有一样的效果。当然,对于 github.com/USER/REPO/commit/HASH 这样的URL,GitHub还是会给出这样的提示:

This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.


你应该知道的33个JavaScript概念,有多种语言翻译。

众所周知,macOS(更早时候叫Mac OS X和OS X)是一个通过了UNIX认证的操作系统。但你清楚早年Apple为了通过这个认证所做的工作吗?曾经领导这项任务的Apple员工回忆了当年的经历:为了满足要求,大量系统库和头文件被更新,导致几乎整个系统的软件(包括iTunes)都要重新构建,他们甚至重写了4%的内核代码,还贡献了若干开源项目。为何要如此大费周章?因为Apple在宣传中用到了UNIX商标,如果OS X没有通过UNIX认证,他们可能就会输掉官司并赔偿两亿美元!

在Mac平台上开发,Xcode是避不开的东西(尽管因为体积庞大和丰富的bug而被开发者们诟病)。而今天的Xcode是早年Interface Builder和Project Builder两个软件的合体,这两者的历史都能追溯到乔布斯回归苹果之前的NeXT时代。这篇文章带我们回顾了Xcode的历史,以及迄今为止主要版本的变化。或许,今天的Xcode(或者Visual Studio)里真的还有90年代的代码?

对网络程序员而言,async/await是救人于水火的利器(不过async标记的传染性也是缺点——我们在往期周刊里提到过),但你又好奇过它的实现原理吗?Rust利用状态机实现的做法很有代表性。

1Password又融资了,他们想要把业务扩展到更大的「认证服务」层面。结合此前LastPass的新闻,商业化的密码管理器可能不是那么好盈利。

言及安全。也许是因为此前Log4Shell漏洞的影响,Google向美国政府表示,希望能得到更多对开源项目的支持,尤其是那些基础性和事关安全的项目。听上去是个好倡议,但在国际政治波谲云诡的今天,这对大洋彼岸的我们会有什么影响亦未可知。毕竟连Vue这样的纯前端项目,都难免卷入风波

时间是神奇的东西,当时间和现实现象结合构成历法,事情就变得更复杂了。你有思考过为什么会存在不同的历法吗?没点地理知识,可能还真不好理解原因。在农历新年到来之际,希望大家在新的一年写代码时永远也不会遇到时间和日期相关的问题。

虎年再见吧!


2 comments

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注