2018 年的圣诞节,让素有 IT 娱乐圈称谓的前端圈着实又热闹了一把。事件起因是蚂蚁金服的开源项目 Ant Design 框架(react-ui)的开发者别出心裁地在 button 组件上埋下了一个在圣诞节当天触发的“彩蛋”。
Ant Design 项目在 9 月 10 日的一个 commit 中增加了 button 的圣诞彩蛋样式(见下图)
也就是说在这次 commit 后下载或更新此项目的用户都会在 isChristmas12 月 25 日的 button 会自动变成 christmas 样式
而这样突如其来的变化,让诸多开发者“一脸懵逼”。因为 Ant Design 项目本身已经有非常大量的用户,在 GitHub 上有超过 3.7 万的 Star,而 NPM 上也展示每周有超过 30 万次下载。
该代码会在 12 月 25 日当天给所有按钮添加积雪效果,并增加 Ho Ho Ho! 的浏览器默认提示信息。
而随之而来的,是部分开发者的愤怒和指责
也有部分开发者表示理解
Ant Design 的开发者显然没想到这个彩蛋会引起如此的渲染大波,并且以千万级别的热点迅速冲上了知乎热榜第二名。
![clipboard.p
Ant Design 的项目 issue 也瞬间被点燃
项目的开发者也第一时间作了说明并且进行道歉
回归理性,事实上,作为开发者,我们是打心里应该感谢 Ant Design 的开发者们,我们可以在 github 上看到该项目高达 38000 左右的 star,这无疑是全球前端开发者对该项目的认可和肯定。正是因为该项目在前端圈中有大量的使用者,才导致事件影响巨大。
然而让笔者担忧的并非是这个彩蛋,结合还没过去多久的被污染的 npm 包 event-stream 事件(一个著名的 npm 包 event-stream 的作者,将其转让给了一个恶意用户 right9ctrl。这个包每个月有超过 150 万 次下载,同时其被 1,600 个其它的 npm 包依赖。),真正应该引起开发者担忧和思考的是什么?就是如何保障引用第三方模块的安全。
很多软件由于长期使用第三方库文件,导致了持续的安全问题。而在程序开发设计阶段,开发者又经常忽略了第三方库代码的漏洞审查,甚至有些资源库(repositories)直接被信手拈来使用,从根本上就缺乏了安全审计。
如果某个库文件存在漏洞,那么,大量使用了该库文件的软件程序都将面临安全威胁。
这种场景,在现实世界中已经有了血淋淋的证明:如 OpenSSL 中出现的心脏滴血漏洞(Heartbleed)、GNU Bash 出现的破壳漏洞(Shellshock)和 Java 中的反序列化漏洞(Deserialization),这些都是实际应用程序中,存在第三方资源库或应用框架漏洞的典型案例。
Github 作为最大的开源资源库,它托管着 4900 万个公共和私人项目,拥有 1800 万用户。
据其安全负责人 Shawn Davenport 介绍,Github 不对托管代码进行审查或警告,用户可以根据需求使用第三方工具,如 Gemnasium、Brakeman 和 Code Climate 等,进行代码动态或静态分析。
Davenport 说,“很多托管项目都存在安全隐患,我们只能尽量保证整个资源库的安全,同时让用户明白他们需要什么样的代码审查工具。从项目角度来说,安全并不是开发者的首要责任”。
据 Davenport 估计,Github 上只有少数用户在使用代码安全审查工具。
而对于绝大部分开发者而言,阅读第三方库的代码更是很难完成的一件事情,这意味着你要投入巨大的精力,何况对于部分开发者而言,并不具备代码审查技术能力。
因此,面对这样的局面,我们能指望的,更多是靠开源作者们遵循某种开源精神,至少像圣诞彩蛋事件,是应该可以避免的。
开源的责任
开源是为了更好地协作开发出解决用户需求的软件
一但一个高复杂度的项目获得了高市占率,开发者则难以迁移
为什么开源即责任?因为一个好的软件项目是为了服务好用户,选择开源模式,本身就是选择了一个为解决复杂问题提供通用(高市占率)解决方案的途径。选择开源模式,即提高了普及项目的速度,也就提高了你的软件被更多人依赖的可能。这也就是为什么,开源即责任。当数亿台服务器运行着 Linux 服务的时候,那些躺在 Mailing List 里的一次次为哪怕一行代码的长篇争论,都让人无比敬畏。
就像部分开发者对事件的评论一样,我们知道也并理解 Ant Design 开发者是出于一种好意而埋下的彩蛋,但是作为 Ant Design 的最终使用者,这个彩蛋的开启与否的决定权应当交到使用者手里。希望经过这次事件,Ant Design 的开发者能从更专业的角度和严谨的态度去评估他们每一个改动对数以万计的开发者的影响。
最后
感谢开源,感谢贡献!愿春节没有彩蛋。
微信扫一扫关注早读君,每天早晨为你推送前端知识,度过挤地铁坐公交的时光。