文|三易生活
2022年刚开始没几天,开源社区就发生了一件大事,一个知名开源库Faker.js的作者Marak Squires,选择主动恶意破坏自己的这个项目,并且不仅“删库跑路”、还注入了导致程序死循环的恶意代码,使得全球大量使用该项目的个人与企业都受到了不小的影响。
作为GitHub上的知名开源库,Faker.js的主要作用是能快速为项目生成可用于测试的假数据,包括用户名、密码、邮件、日期、地址、文章等内容。对于开发者而言,在实际的软件开发过程中使用假数据进行测试是一个必要环节,其同时也能够帮助开发者验证前端设计的合理性。
如今打开GitHub上的Faker.js页面,所有配置文件最后的提交信息都是“endgame(游戏结束)”。并且耐人寻味的是,Marak Squires在Readme中写下了“What really happened with Aaron Swartz”这句话。据悉,Aaron Swartz是传记电影《互联网之子》的主角,作为Reddit的联合创始人,他用生命捍卫了互联网的开放、自由和共享。
发生在Faker.js这个项目上的故事,简单来说,就是这一项目的开发者Marak Squires去年因为公寓失火,导致各种贵重物品丢失、无家可归,因此他提供了自己的PayPal账号寻求捐赠。但显然依靠网友捐款并不是长久之计,因此他还选择了在Faker.js的基础上,探索付费增值服务Faker Cloud,而这也是开源软件的一种重要商业模式。
然而意想不到的事情发生了,Marak Squires开发的Faker Cloud是提供在线“假数据”生成的云服务工具,而作为Faker.js的第二大捐助者,Retool.com在每月捐出500美元后,随即也以Faker.js为基础开发了与Faker Cloud一模一样的工具,并且还完全免费。更绝的是,Retool.com引用的CDN域名是cdn.fakercloud.com,简直是“杀人还要诛心”。
事实上,Retool.com是一家已融资7500万美元的公司,这也使得Marak Squires的Faker Cloud在商业竞争中几乎是毫无胜算的。不过Marak Squires也很“识时务”,直接就给Retool.com的CEO写了封邮件,表示既然你们如此喜欢这个项目,要不就把Faker.js与Faker Cloud直接买了。而Retool.com随后做的,则是嘴上说着这个提议我们会认真考虑,然后就没有然后了。
这一操作就相当于是把Marak Squires当成了猴耍,所以难怪他会心态“爆炸”,最终不但删库“跑路”,还要往库里注入恶意代码,实实在在地恶心使用者。
而现在的情况也已经十分明了,结果是开源项目的参与者尽管嘴上喊着支持、在实际行动上却并非如此。更何况,Faker.js也并不是没价值,其在GitHub上一共获得了3.4万颗star、全球有近千万的开发者在使用、共计2万余个项目依赖它,并且每周下载量超过250万次、总计被下载了超过1.21亿次。
上亿的下载量以及千万级的活跃用户群体,这样的数据即便是放到消费级市场都是相当出色的,更遑论Faker.js属于生产力工具。如今对于Marak Squires的这一操作,开源社区的风向则是相当分裂,有人认为“开源就是这样的,玩不起别玩,放恶意代码属于恶意破坏”,但也有认为“代码是人家的,人家有权在开源协议的范畴内任意处置”。
显然,这两种说法都有一定的正确性。毕竟开源代表的开放包容,是互联网精神在现实中的投射,开源追求是的降低技术门槛、避免重复造轮子、用价值回馈社区,是一种开放和共享的软件开发方式。开源精神讲究的是“人人为我,我为人人”,所以一旦将代码开源后,自己作品的命运可就不完全掌握在自己手中,变为了属于所有开源参与者或社区的了。
具体到Faker.js这个项目,Marak Squires所使用的开源协议是MIT License,并且其应该是所有开源协议里最宽松的,除了必须包含许可声明外、再无任何限制,也就意味着开发者和使用者各自自行承担一切的责任和后果。开发者不需要肩负为社区提供可信引用源的责任,使用者也没有为开发者付费的义务。
但之所以会造成开源社区里对Marak Squires这一行为的态度分裂,其实也是开源软件先天性的缺陷所导致。开源软件带有鲜明的乌托邦色彩,然而现实却是“人人为我,我为人人”,并且这一切在利益面前也变得极为脆弱。对于商业公司而言,开源是展示技术实力、对行业产生影响力的一种方式,是服务于公司战略,属于实现商业利益中的一环。
而对于个人开发者而言,开源软件则更像是属于程序员的自媒体。在过去的很长一段时间里,有不少程序员因为开源获益,主要途径都是用开源软件在社区里打响名声、获得声望,然后借助声望来获得高薪的工作,或者是去创业。但做一个出色的开源项目与挣大钱之间并没有因果关系,个人开发者直接借助开源软件来挣钱也是少之又少。
并且开源与商业化也并不冲突,其中最著名的例子,应该算是Red Hat Linux(红帽)了。他们免费提供Linux发行版,企业也可以通过付费订阅来获得技术支持,最终其更是在2018年被IBM以340亿美元的价格收购。然而问题就在于,依靠Linux挣大钱的红帽并不是Linux的创始团队,Linux的创始人Linus Torvalds也只是在红帽上市时被赠送了50万美元的期权而已。所以这就是问题所在了,并非所有的开发者,都有着如同Spring框架创始人Rod Johnson一样出色的营销能力。
发生在Faker.js作者Marak Squires身上的悲剧,就在于换取影响力是开源的核心收益,但在影响力的变现上,个人开发者甚至还不如自媒体,毕竟自媒体的受众是读者,而开源的受众却是同行。自媒体将流量卖给广告主等甲方,而开源软件作者的同行就是一个个的甲方,这就很尴尬了。
当然,发生在Marak Squires身上的事情,其实对于开源本身的影响并不大。毕竟开源软件能够存在数十年,自然是有着可取之处的,开源软件作者与社区之间的相互成就关系还是能维持的,但其对Faker.js所使用的MIT许可证协议,却可能带来很大的影响。
前文中曾提及,Faker.js项目采用的MIT协议是所有开源许可中最宽松的一个,基本上等于开发者将自己的知识产权提供给所有人免费使用。因此这件事势必会让许多开发者意识到,如果Faker.js使用的是GPL协议来开源,情况则可能会大有不同。
由于MIT协议对双方都毫无约束力,导致Retool.com复制Faker Cloud也完全任何阻碍。而自由软件基金会(FSF)发行的GPL协议中,则是这样规定的,如果你使用了GPL协议发布的代码后,在法律上你的代码也得依据GPL开源出来,这就是在软件开发领域中GPL许可证拥有“传染性”的来源,也就是所谓“我开放了我的代码,所以也要求你开放的代码”。
GPL的“传染性”导致了相当多的商业公司,会在自己的项目中想方设法隔离GPL,例如当初谷歌为了将Android隔离GPL,直接重写了作为Linux系统中最底层API的glibc。所以GPL协议的意义,就在于开源软件的作者在向社区付出善意的同时,还可以避免商业公司利用开源获益、却不回报社区。
但不管怎么说,为众人抱薪者、不可使其冻毙于风雪。
评论