人不能两次踏进同一条河流。Facebook:但我们能时隔两月栽在同一个坑里。

Facebook iOS SDK 再引故障

5 月 7 日,Facebook iOS SDK 故障引发北美主流 App 大规模崩溃,从海外风头强劲的 TikTok 到 Google、Netflix、Spotify 等知名 App 再到游戏 GTA5、使命召唤无一幸免。

一个SDK引发的“血案”

图源见水印

Facebook iOS SDK 的 GitHub issue 显示,SDK 6.5.0、SDK 5.6.0、SDK CoreKit 6.0.0 等等都会导致应用崩溃。

一个SDK引发的“血案”

仅仅两个月时间,上周五 Facebook iOS SDK 再次导致大量应用崩溃,Spotify,TikTok,Tinder 和 Waze 等应用无法使用持续数小时。此次崩溃的罪魁祸首是 Facebook SDK 5.0.2 等版本。Facebook 在一份声明中说:

“……代码变更触发了某些 iOS 应用程序的崩溃。我们迅速发现并解决了该问题。对于由此带来的不便,我们深表歉意。”

一家独大的隐忧

Facebook 的 SDK,就像开发者托管在云上的服务一样,一旦出现故障,引发的很可能是多米诺骨牌级的连锁崩溃反应。

这两起由 Facebook SDK 故障引发的大规模应用程序崩溃事件凸显了一个隐忧:当 Facebook 拥有一个“核弹”级别的开关,只要摁下去就造成大规模的杀伤,开发者如何保护自己不受无差别攻击?

答案很可能是:无法保护。

因为此次事件明确地给了外界一个信号:不管有意还是无意,Facebook 都有这个能力,他们确实可以控制包含其代码的其他应用程序。

Facebook 以工程师文化闻名于世,其工程团队认为,他们的开发工作永远没有到头的那一天,代码库的增长永不停止,2013 年时就有超过 1000 万行代码(850 万 PHP 代码),而到 2019 年时,其代码库已经突破一亿行。

不断开发新的功能,迅速上线,满足用户需求,这是 Facebook 的持续部署的开发模式。Move fast,break things 是他们的一贯信条,更为激进的是,长久以来 Facebook 甚至没有专门的测试工程师:所有的测试工作都交由自动测试工具和开发团队自己。

两次栽在同一个坑里,开发者笑言 Facebook 的信条是 Move fast and break the whole mobile iOS App ecosystem。还有人在 issue 区留言道:Facebook,等等你的人民吧(Please move slower and break fewer things)。

当然,没有一家企业是完美的,在持续更新的软件开发领域,要做到不出错、少出错更是难上加难,每一个开发团队、开源项目维护者乃至个人开发者,都应该敬畏每一行代码,每一份托付。

回到 Facebook SDK 这个故障本身来看,官方团队给出的原因是“代码变更”,不知道这变更的代码是 black/white list 吗?