【引言】开源是一种分布式协作模式,通过对软件源代码的开放,参与者可以使用、修改、再发布,进而共享创新成果。如今,利用开源代码编写软件已成为软件研发的主流模式,然而“天下没有免费的午餐”,这种便利同样也受到开源软件所采用的开源规则的限制,譬如商业使用限制、署名要求、专利保留要求、新增代码开源要求等等。作为开发者,如果你打算开源自己的代码,务必要选择一种开源许可证;作为使用者,也应当了解相应许可证的权利与义务要求,合规创新以避免侵犯他人权利被诉诸赔偿。
GPL规定只要软件中使用了GPL开源许可证的代码,则修改后的源代码或者衍生软件代码也必须采用GPL开源许可证发布,这就是所谓的“传染性”。目前,GPL开源许可证有v1,V2,V3三个主要版本。鉴于现在使用GPL v1许可证的已经比较少了,本文主要分析V2,V3两个版本。
(一)传播未被修改过的完整副本
根据GPLV2许可协议的第一条的规定:开发者复制(copy)和分发(distribute)开源代码需要满足以下三个条件:第一,开发者在每个副本上醒目且适当地发布版权声明和免责声明;第二,完整保留所有涉及该许可证和免责的事先声明;第三,将本许可证的副本与程序一起交给程序的其他接收者。
根据GPL V3许可协议的第四条的规定:开发者传播(convey)其获得的开源软件源代码需要满足以下四个条件:第一,开发者应在每个副本上醒目且适当地发布版权声明;第二,完整保留所有涉及该许可证及任何非许可(non-permissive)条款适用于源代码的事先声明;第三,保留所有免责的事先声明;第四,随程序给所有的接收者一份本授权的副本。
对比来看,在未被修改过的完整副本的传播要求上,GPL V3与GPL V2并无本质区别,仅在用词上略有调整,根据GNU发布的FAQ,分发(distribute)和传播(convey)并无明显差别。
(二)传播经修改过的副本
GPL V2许可协议允许开发者修改程序副本,从而形成新的作品并根据协议第一条的规定复制和分发,同时开发者必须做到以下两点:第一,醒目地说明其更改了文件以及更改日期;第二,开发者应使其作品作为一个整体获得许可且不得向所有第三方收取任何费用,受此限制的作品包括:①全部或部分包含本开源程序的作品,②派生(derive)自开源程序或其任何部分的作品。不过,GPL V2还规定了“独立可分离部分的区分适用规则”(详见下文)。
GPL V3许可协议同样允许开发者修改程序副本,开发者需满足以下条件:第一,醒目地说明其更改了文件以及更改日期;第二,作品必须明确说明它是根据GPL V3发布的,包括协议第7条附加的条件;第三,开发者应使其作品作为一个整体获得许可给第三方。
(三)独立可分离部分的区分适用规则
GPL V2许可协议规定了“独立可分离部分的区分适用规则”——如果作品的可识别部分(identifiable sections)不是来自开源程序,并且可以合理地认为其本身是独立可分离(independent and separate)的,那么当开发者将其作为独立作品发布时,GPL V2不适用于这些部分。但是,如果开发者在发布软件的时候将上述独立的部分与派生作品一起发布,则整体的发布必须遵守GPL V2而不论其作者是谁。
GPL V3没有延续GPL V2规定的“区分适用原则”,GPL V3将修改后的开源软件及其他部分(无论是否独立),均统一视为一个完整的作品,二不论其封装(package)方式如何,对该作品整体均应当适用GPL V3。