科技云报道原创。
开源 or 不开源,一直以来都是一个争议性的话题。但不可否认的是,在过去的一两年,开源在全球呈高速发展趋势,越来越成为跨越国界和语言的共识。据GitHub官方数据显示,2021年GitHub活跃用户数和活跃代码仓库数量均有明显增长,其中新增活跃用户数超过1600万,新增活跃代码仓库数量超过6100万。不难发现,象征着“自由”的开源软件,正在逐渐从“开发者亚文化”变成一个主流的软件开发模式。但自由意味着免费吗?近期开源界发生了一则轰动性的事件,将这一问题浮出了水面。近日,一位开源开发者故意破坏自己的开源项目,引发了机构依赖开源库的争议。被破坏的开源库是Marak Squires开发的color.js库和faker.js库。这两个库被广泛使用,其中不乏企业和商业客户。因此,有数千个大型项目受此影响出现了停止运行,包括亚马逊AWS 的Cloud Development Kit。Marak在color.js库的v1.4.44-liberty-2版本中给新的美国国旗模块加入了无限循环,依赖color.js的项目会在控制台看到不停打印的非ASCII字符。
faker v6.6.6版本的情况类似,他将这两个搞破坏的版本推送到GitHub和npm。数据显示,有近19000个项目依赖color.js库;faker的周下载量超过280万次,有超过2500 个项目依赖它。reddit上的热门帖子表示,Marak破坏库代码是因为缺乏资金和被滥用开源项目。事实上,在此次事件之前,这位开发者就曾公开批评,指责使用了这些库的企业对社区没有任何回馈。2020年11月,他曾警告说,自己将不再义务工作支持大企业:“恕我直言,我不会再免费工作来支持《财富》500 强(Fortune 500)公司(以及其他规模较小的公司)了。
趁这个机会,要么发给我一份年薪六位数的合同,要么赶紧分叉项目、找其他人接手”。Marak的大胆举动旋即引发轩然大波,各界纷纷就此事发声。部分开源软件社区成员赞扬了这位开发者的勇敢行为,但也有人对他的过激举动表示震惊,觉得这是“又一个开源开发者造成的流氓案件”。值得注意的是,Marak 的此次过激行为发生在不久前影响巨大的Log4j 漏洞事件之后。作为一套重量级开源库,Log4j在不同企业及商业实体开发的各类Java应用程序当中都有广泛使用。而Log4shell漏洞的曝光,使得不少开源维护者不得不在休假期间无偿帮助修复这些项目。于是开源业界开始普遍担忧,认为大企业们已经习惯于“压榨”开源成果。不少公司以此获利颇丰却不支付费用,也不对开源社区做出相应的回馈,矛盾便日益凸显甚至激化了。回到开头的问题,开源软件是否意味着免费?答案显然是否定的。开源软件是指公开源代码的软件。开源软件在发行的时候会附上软件的源代码,并授权允许用户更改、传播或者二次开发。免费软件就是免费提供给用户使用的软件。但是在免费的同时,通常也会有一些限制,比如源代码不公开,用户不能随意修改、不能二次发布等。免费软件的例子比比皆是,QQ、微信、迅雷、酷狗、360 等都是免费软件,你可以随意使用。但是如果你嫌弃它们复杂,自己删除了一些无用的功能,然后在网上发布了一个精简版本供大家下载,那么你就离法院的传票不远了。开源软件在追求“自由”的同时,不能牺牲程序员的利益,否则将会影响程序员的创造激情。因此世界上现在有60多种被开源促进组织(Open Source Initiative)认可的开源许可协议来保证开源工作者的权益。常见的开源协议包括:GNU通用公共许可证、BSD协议、Apache许可证版本、MIT协议、GNU 宽通用公共许可证等。以GNU通用公共许可证为例,只要软件中包含了遵循GPL协议的产品或代码,该软件就必须也遵循GPL许可协议,也就是必须开源免费,不能闭源收费,因此这个协议并不适合商用软件。遵循GPL协议的开源软件数量极其庞大,包括Linux系统在内的大多数的开源软件都是基于这个协议的。再比如Apache 许可证版本(Apache License Version)协议,是适用于商业软件的。Apache协议在为开发人员提供版权及专利许可的同时,允许用户拥有修改代码及再发布的自由。现在热门的Hadoop、Apache HTTP Server、MongoDB等项目都是基于该许可协议研发的。可以看到,开源协议规定了在使用开源软件时的权利和责任,也就是规定了可以做什么,不可以做什么。开源协议虽然不一定具备法律效力,但是当涉及软件版权纠纷时,开源协议也是非常重要的证据之一。对于开源软件的开发人员而言,了解当前最热门的开源许可协议,选择一个合适的开源许可协议,可以最大限度保护自己的软件权益,或许能避免发生Marak这类的过激行为。事实上,并非所有的开源软件都是免费的,开源的精神和目的也不是免费使用或者对作者源代码”为所欲为”。反过来说,开源软件也是不抵触商业的。开源的目的不是做慈善事业,而是通过更多人的参与,减少软件的缺陷,丰富软件的功能,同时也避免了少数人在软件里留一些不正当的后门。开源软件最终还会反哺商业,让商业公司为用户提供更好的产品。Android就是大众最熟知的一款开源操作系统,它除了用在手机上,还用在汽车、平板电脑、电视、智能手表等其它硬件平台,小米、华为、OPPO、三星等都是 Android 的受益者,他们都赚得盆满钵满。很多著名的开源项目背后都有商业公司支撑,它们的开发者也都有正式的工作,享受和我们一样的社会福利。从IBM鲸吞RedHat,微软收购GitHub,到Elastic、MongoDB等初创公司相继上市,这一系列事件早就不再是对开源本身的认可,而是标志着开源业务作为一种商业行为(business),其价值和模式逐渐复兴,获得了资本市场的广泛承认。如果一个成功的开源项目背后没有商业公司,这反而是不健康的,社会需要开源和商业之间的互补来促进技术的革新。有一点很重要却经常被开发者所忽视的是,开源最开始的出发点可能就是奔着商业化去的。如果没有商业化的动力,团队和个人仅凭热爱是很难长期来维护和迭代开源项目的。
既然开源项目是奔着盈利去的,那么一开始就应该做长远的商业规划。如果仅仅是个人爱好,则没有必要一开始就收费。很多成功商业化的开源项目,在诞生之初是绝对免费的,在提供给用户不可替代的价值贡献和价值提升后,有些用户希望能在用好软件的基础上,提供一些增值服务,如企业版、高级版功能等,这时开源团队就可以建立收费的专业版来盈利,甚至是完成大公司的定制化订单。随着开源项目所在的社区越来越大,迎来更多的用户需求,产品功能越来越完善,适配的功能越来越多,用户的付费意愿到了临界点后,接下来的商业化将是水到渠成的事情。还有一点值得开发者关注的是,光有一个非常优秀的开源项目还远远不够,没有好的宣传和推广也不足以走上商业化的正规,这时候开源项目创始人的个人形象就至关重要。比如以太坊的发起人V神(Vitalik Buterin),在19岁时写了《以太坊白皮书》。他原来在社区就是一个积极写文章的人,他有很强的思考逻辑性,文章写得特别漂亮,在社区里面有很强的影响力。
必须要建立个人信誉,让大家相信这个人,开源项目才能获得成功。开源可能是一种非常理想化的思想,现实总会与其精神出现偏差,但这种理想主义思想是具有现实意义的,只有不断的提倡和传播这种思想,社会才会聚集更多的正能量。开源可以让人们自由享受软件所带来的便利以及思想的交流和创新,但在享受别人带来的福利时,也请尊重别人的劳动成果。
自由传播和使用,不等于免费使用和无偿使用,在打破壁垒,敢于创新的同时,也要遵循基本的开源精神。【关于科技云报道】
专注于原创的企业级内容行家——科技云报道。成立于2015年,是前沿企业级IT领域Top10媒体。获工信部权威认可,可信云、全球云计算大会官方指定传播媒体之一。深入原创报道云计算、大数据、人工智能、区块链等领域。