悦动青春项目组群里讨论了一个在我看来很有意思的话题:如果我们用的开源库有漏洞,可能出现安全问题并造成损失,应该由谁来承担责任?这个洞是我们修还是contributors修?
我的观点是我们和contributors都得修,只是谁先修谁后修的问题。并且简单说明了理由。当然,我的想法是很幼稚的,也并不希望获得大家的赞同。
这就涉及到一个开源库的安全责任问题。开源当然好,大家贡献,集思广益。但是出现了问题,也是大家有难同当。总不能说,库是某些人开发的,出了问题就要由他们去承担责任,赔钱!因为人家从来也没承诺过这个库100%安全,并且也没有要求你用,更没有收钱,甚至你还可以改。是你自己选择去用,出了问题怎么能怪人家呢?
所以从中可以看出,「互联网不是法外之地」,这句话某种程度上是错的——互联网就是法外之地。出了问题没有人承担责任,而是所有的开发者共同稀释责任。之前人们说开源精神实际上就是共产主义精神,但是真正到了「有难同当」的时候,大家难道真的就那么舒服?
这种精神将所有的开发者绑定在一起了,再也不可能有个别一群人为一个严重问题负责。开发者群体在实质上是风险共同体。
比如我们开发了一个产品,普通用户使用的过程中,出现了安全问题,被人攻击,导致数据泄露或经济损失。经过调查发现,问题出在我们用的一个开源库中。按照一些人的想法,这时候我们应该发表一条声明,称「该问题由第三方库所致,并非本团队责任」,然后事不关己高高挂起。
但是用户不会相信我们的鬼话。按照常人的逻辑,这就像买了一辆汽车,结果里面的零件出了问题,当然要同时追究汽车商和零件商的责任。因此用户觉得也应该同时追究我们和开源库作者的责任。但是对于主张发声明的那些持有「开源精神」的人来说,这怎么能是我们的责任呢?明明是开源库作者提供产品给我们用,我们也是用户呀!
汽车商和零件商之间一般有订货合同,约定出现质量问题当由双方共同负责。我们和开源作者间一般也有一份「合同」,那就是各种各样的开源协议。这些协议充满了共产主义精神,却唯独没有说明责任的分配。甚至很多协议明确指出,开源作者不承担任何后果。
因此最后导致的结果,往往是大家共担风险。没有任何法律可以告诉我们,谁是真正的责任方。换言之,当没有一个明确责任方的时候,所有人都是责任方。
如果大家谁都不愿修,时间就这样一分一秒地流逝,损失就这样一步一步地扩大。最后我们发现,开源作者损失的是信誉,而我们作为产品开发方,损失的不仅有信誉,还有真金白银。
因此我们不得不着手自己修复漏洞、给开源库提交pull request。虽然在开源社区里,我们的无私奉献获得了同行的赞誉,可惜付出的代价却只对自己和股价可见。
「共产主义可能首先在少数几个国家取得胜利」,这时候我们不禁怀疑这个著名论断。
在我看来,真正正确的做法是:先自己修复漏洞,弥补用户的损失,再发表声明,说明问题出在开源库,而不是我们自身。物质上要给予补偿,精神上要正本清源。
从前我认为一些企业花钱去买软件是一种很傻的做法:这么多的免费开源库为什么不用呢?现在想来,这才是一种大智慧:那份合同所能规避的损失远比使用一个开源库所能节省的成本多得多。