在全世界搞IT的程序员中间广泛流传着一句谚语:“开源使用一时爽,版本发布火葬场。”不明就里的吃瓜群众们可能会问,开源软件到底有什么毒,让程序员们连秃顶都不怕,却唯独对它心有余悸呢?要回答这个问题,就要从开源软件的定义说起。
所谓开源软件,是一种源代码免费开放的软件,任何组织都可以在其License(译:许可)的规定下对其进行使用、复制、传播及修改,并可以将该修改形成的软件再次发布。
这段话看似人畜无害,其实暗藏杀机,关键点就是所谓的License。如果稍不注意,轻则破财消灾,严重的就倒闭破产。
举个真实的案例,美国芯片巨头Broadcom在某款802.11芯片中使用了License类型为GPL的linux系统,随后该芯片被另一家叫做Linksys的通信设备公司集成在了自家的WRT54G无线路由器中,再后来Linksys公司在2003年被业界巨头思科收购。理论上,由于WRT54G使用的芯片采用了GPL License的Linux系统,那么包括芯片源码、集成了芯片的产品源码都要免费开源出去。显然,思科不打算这么做。不久,思科就被FSF(自由软件基金会:业界最大的开源软件维权组织)投诉,起初双方互不让步,经过数年交涉,思科被迫开放了一百多款路由器的源代码,并捐款数千万美元给FSF基金会才把事件平息。
通过这个图可以看出,License具有很强的传染性,一旦产品中使用了GPL License的开源软件,那么整个产品就会受到感染,哪怕产品被收购,收购方也要承担对应的开源义务。
当然,开源软件的License并非都向GPL一样“流氓”,目前主流的License主要分为BSD类、MPL类、GPL类,其中BSD类最宽松,MPL类次之,GPL类坑最多。
BSD类License
如Apache V2.0、BSD、MIT等,典型的项目有ACE、Tomcat、FreeBSD,这类开源软件基本上允许开发者“想怎么用就怎么用”,不用履行开源义务,是所有公司都非常喜欢的License类型,BAT以及华为、思科等等公司的产品集成了大量的这类开源软件。
MPL类License
如CPL V1.0、EPL V1.0、MPL V1.0、CDDL V1.0等,典型的项目有JUnit、Eclipse、FireFox、OpenSolaris,这类开源软件可以通过动态或者静态链接的方式使用,如果没有对开源代码进行修改,则产品无需开放代码;如果修改了部分开源代码,只需开放修改部分的源代码即可,因此MPL类License是相对友好的,相关的开源软件在业界也流行甚广。
GPL类License
如GPL V2 、LGPL V2等,典型的项目有Linux、Jboss、Openoffice、SDL,GPL类License对使用者约束甚多,其中LGPL V2 License相对宽松,如果产品通过动态链接的方式使用,则不用履行开源义务,静态链接则不行。GPL V2 License的开源软件,无论是通过动态链接方式使用还是静态链接方式使用,都需要对整个产品代码开源,上面例子中的思科就是在这种License上中招的。不过GPL V2 License的开源软件也不是不能用,一个比较好的方式是,将产品和开源软件分在不同的进程里,因为GPL V2 License的开源软件只能污染同进程里的代码。
事实上,即使开源软件是最宽松的BSD类License,也要瞪大眼睛看清楚才能用,因为有时候会有另外的坑等着你,典型的例子是马克·扎克伯格的Facebook。几年前,Facebook 曾在Git hub上发布了一系列开源项目,由于其先进的技术和宽松的License(BSD)使得其项目广受用户欢迎。不过Facebook在BSD license之外,还额外增加一份专利授权license,将这些软件可能存在的Facebook专利授权给用户使用,但也正是这份专利icense ,给这些软件的商业应用埋下了“地雷”。如果某公司使用了该软件,那么如果Facebook在其业务范围内与该公司有任何其他专利冲突,该公司则不得向Facebook发起专利诉讼,导致无法保护自身的专利,够狠的吧,华为就差点踩到这个坑,后来公司法务部审核时识别到了风险,及时踩了刹车才避免了损失。
有朋友说,既然开源软件这么多坑,那我干脆不用不就完了,这个想法的初衷是好的,事实上并不可行。现代社会的科技产品,讲究的是敏捷开发、快速迭代,一个很普通的产品可能涉及到网络通信、文件系统、多媒体处理等等多个方面,如果这些都靠自己来实现,那么可能这辈子都看不到产品上市的那一天了。
大公司已经有了一套规范的开源软件使用流程,比如IBM、阿里、华为等等,整体来讲,这些公司主要从三个方向着手来实现安全、高效、低风险的使用开源软件。
(1)创建完善的开源软件选型系统,端到端跟踪开源软件的申请、使用和退库,将风险挡在门外
(2)通过IT流程保证开源软件漏洞和补丁的更新机制,确保所使用的开源软件始终处于最安全的版本
(3)严格遵从license要求,履行license的开源义务
随着国内中小型科技企业的逐步崛起,中国会孕育出更多的像华为、阿里、腾讯这种跨国科技巨头,如何筛好、用好开源软件,是所有科技企业需要思考的问题,这关系到企业能否有效保护自己的知识产权、能否快速推出有竞争力的产品,能否占领市场持续领先。