近日,一位 18 岁的新手因向 GitHub 仓库提交 PR(Pull Request,Pull 请求),结果一个“@”让 GitHub 变身“僵尸网络”向近 40 万开发者狂发骚扰邮件的“reply-all 风暴”热度席卷了开源圈。
一个“@”,让 40 万开发者共收到 6000+ 万封电子邮件
据悉,这位新手名叫 Rohith Sreedharan ,起初本来是想向游戏公司 Epic Games 的 GitHub 存储库推送一个虚假的 Pull 请求(向 UE 提交新代码)以获取一些贡献历史记录(试图在自述中更改 3 个单词)来“练练手”。
但在这样做的过程中,Rohith Sreedharan 为了让自己提交的 PR 尽快被合并,他在评论中 “@”了与 Epic Games 组织相关的所有开发者,其中就包括加入该组织以查看虚幻引擎(Unreal Engine)源代码的任何人。
结果,他的“@EpicGames/developers”这一操作触发了 reply-all 事件:向加入 Epic Games 组织的所有 GitHub 用户发送关于此 PR 的邮件通知。
也就是说,Rohith Sreedharan 错误地“@”了与 Epic Games 组织相关的所有开发者,即加入该组织以查看虚幻引擎(Unreal Engine)源代码的任何人。
结果,这个“@”一下子导致了大约 40 万使用虚幻引擎 (Unreal Engine) 的开发者收到了来自 GitHub 有关此 Pull 请求的通知邮件。
同时,Rohith Sreedharan 的这个操作还让所有这些开发者们都订阅到 Pull 请求的注释线程 —— 即只要这 40 万名开发者中有人对 Rohith Sreedharan 的 Pull 请求进行评论,那么这条评论也会被以邮件的方式通知并发送给其他 Epic Games 组织的所以成员,由此引发邮件“轰炸”事件。
关键是,Rohith Sreedharan 提交的这个 Pull 请求被开发者发现存在着不少问题,因此又引发了大量评论及相应的邮件通知。不幸的是,电子邮件通知中的退订链接实际上并没有退订用户的 Pull 请求,因此不少开发者都收到了 150 多封电子邮件,更有甚者收到了多达 200-400 封邮件。
也就是说, GitHub 当天晚上共发送了 6000+ 万封的电子邮件。
随着该邮件“轰炸”事件的不断发展,终于有开发者发现了退订该 Pull 请求的方法 —— “右栏中位于底部、参与者列表的正上方有一个‘退订’按钮,单击它并忽略即将传入的大量通知。”
到了这里,Epic Games 也才了解到事情的来龙去脉,并立即锁定了该 Pull 请求,关闭了其评论功能,才终于结束了这场“闹剧”。
GitHub 邮件机制受质疑
目前,此次事件已经在 reddit、Hacker News 等知名社区被大量开发者热议。
其中,在 reddit 上一位名为@TomSwirly 的开发者就对此事件表示愤慨,表示“我敢打赌,在这 40 万开发者中,有很多是初学者,如果我是初学者,我很容易浪费很多时间去弄清楚到底发生了什么。”但是“走开,垃圾邮件发送者,不管你是谁。”
此外,在 linustechtips 上也有名为 @trag1c 的开发者对此次事件以及该事件的“始作俑者” —— 新手 Rohith Sreedharan 进行了点评:
“老实说,我不知道是该称这孩子为“传奇”还是“脑残”(可能两者兼有)。假设这孩子正试图在软件开发领域找到一份工作,有可能他在 Github 上有学校项目啥的,他可能认为自己可能会对一些项目做出虚假承诺,试图说自己对一些复杂的大型项目做出了贡献,比如虚幻引擎。但他犯了一个致命的错误,即“@”了整个组织,而不仅仅是审查 Pull 请求的人员...可惜的是,这可能不会对他的职业生涯方面有所帮助哦~"
另外一个值得被重视的问题,就是 —— “为什么 GitHub 允许向 40 万人发送邮件通知?”
开发者 @trag1c 认为,“真的想不出有什么好的理由允许以这种方式@整个组织,这也是 Epic 隐藏代码的方式的部分问题。为了查看虚幻代码源,你必须加入 GitHub 上的该游戏组织才行,当然该组织也会允许你成为被标记为组织的一部分。但这样的话整个设置都会导致‘灾难’后果,因为您可能可以使用这样的设置使用 GitHub 来对 GitHub 进行 DDOS 攻击..."
同时,还有不少开发者也提出了关于 GitHub 应优化机制的建议,以避免此类事件再次发生。对此,GitHub 高级工程总监 Shay Frendt 也留言回应称:“很抱歉,我们当前的系统设计导致你们陷入这种情况。我们正在努力发布补丁,以尝试中断你们都陷入的反馈循环。”
推特道歉:
“我错了,保证以后不会再发生了”
事件发生之后,这位 18 岁的新手开发者终于在 6 月 5 日上推特发文道歉:
“Am extremely sorry, I wasn't knowing that would be tagging a 400k members, Extremely sorry for the spam from whole heartedly, I Apologize to all the team including @EpicGames and @github, never expected this would happen, thanks for notifying me! I promise it won't happen again”
推文中,他表示对此非常抱歉,称自己不知道这个操作会标记(@)约 40 万成员,对由此产生的垃圾邮件“轰炸”事件发自内心的道歉,并向 @EpicGames 游戏、@github 公司所有团队道歉,“没想到会这样,谢谢你通知我!我保证不会再发生了”。
相信对于这位年仅 18 岁的 Rohith Sreedharan 而言,此次“邮件轰炸”近 40 万开发者的事件,一定会让他学到不少。
目前,有关此次邮件“轰炸”事件的热度在推特及各大开发者社区仍旧持续发酵,关于 GitHub 优化机制的问题我们也将持续关注。