前言对于很多刚踏入开源软件行业的小伙伴来说,编码过程中难免会用到别人的成果。如果你足够细心,很容易注意到,即使是一小段代码,优秀作者在文件开头附上了关于版权的声明,比如LicensedundertheMITlicense。同时,一些博客也会注明“本文采用CCBY4.0CN协议”。如果我们抄袭了别人的代码或文章,却不注意版权问题,在国外法律意识特别强的环境下(国内的版权意识也在逐渐加强),那么我们的作品就会违法,因为侵犯了权益和他人的利益。即使是最开放的开源协议,最低要求也是保留原作者对代码的声明,所以开源不代表免费,也不代表没有约束。什么是许可证?LICENSE是软件的授权许可,详细说明了您获得代码后所拥有的权利,哪些操作是允许的,哪些操作是禁止的。软件版权许可的方式有很多种,本文仅限于讨论开源软件协议OpenSourceLicense。对于大多数人来说,没有必要花很多时间来编写许可协议。选择一个流行的开源协议就够了,既省时省力,又方便自己作品的传播,对自己和他人都有好处。PS:说句题外话,很多国外的开发者在尊重别人的劳动成果方面做得很好。如果A的作品受到B的作品的启发,A甚至没有使用B的任何代码,但是A会在作品中声明他的灵感来自B:InspiredbyXXX链接:http://www.xxxx。com。开源协议的快速选择如果您不想了解太多,只想得到一个近乎直接的答案,下面给出的建议可能适合您。本节协议地址来自GitHubchoosealicence。简单松散的协议:如果你只是想要一个简单的协议,没有太多的麻烦。MIT协议相对宽松。本协议允许他人以任何方式使用您的代码并同时署名原作者,但原作者不承担代码使用后的风险,当然也没有技术支持的义务。考虑专利的情况:如果您的工作涉及专利。Apache协议也是一个比较松散的协议,类似于MIT,只是规定了作者对用户专利的一些授权(我的理解是软件作品包含专利,但它授权你免费使用)。促进代码共享:如果你关心你的作品的传播和他人的修改,你希望其他人以相同的协议共享它。GPL(V2或V3)协议要求代码发行商或在此代码基础上开发的衍生作品在同一协议下发布,也必须是开源的。因此,这份协议具有“传染性”。乌克兰程序员PaulBagwell画了一张分析图来说明如何选择。只需两分钟,您就可以找出这六种开源协议之间最大的区别。国内大神阮一峰中文版:主流开源许可协议(OpenSourceLicense)世界上大概有上百种开源许可协议(OpenSourceLicense),常用的开源软件协议大致如下:GPLLGPLBSDMITMozillaApache按照严格顺序,常用的开源协议有:MITBSDApacheLGPLGPL主要区别:MIT和BSD开源协议均起源于大学,体现了简单、开放、包容的特点。MIT、BSD、Apache都支持闭源跟进开发。GPL和LGPL是具有传染性的开源软件。如果在编译代码中使用这里的代码,则必须是开源的。MIT起源于一所大学,MIT开源协议是史上最简洁大方的开源协议之一。作者只想保留版权,没有任何其他限制。也就是说,您必须在您的分发中包含原始许可协议的声明,无论您是将其分发为二进制文件还是源代码。特点:用户可以用你的代码为所欲为。用户应在其项目副本中包含版权声明和许可声明。您无需对任何事情负责。代表作品:jQueryRails等BSDBSD-2-ClauseBSD-3-ClauseBSD认证也是来自大学,类似于MIT,也很简单大方。BSD开源协议是一个给了用户很大自由度的协议。基本上,用户可以“为所欲为”,自由使用和修改源代码,或者将修改后的代码重新发布为开源或专有软件。前提是当你发布使用BSD协议的代码,或者基于BSD协议代码开发自己的产品时,需要满足三个条件:如果重新发布的产品包含源代码,则源代码必须包含原始代码BSD协议中的代码。如果重新分发的只是一个二进制类库/软件,则需要在类库/软件文档和版权声明中的原始代码中包含BSD协议。不得使用开源代码的作者/机构名称和原创产品名称进行营销。BSD开源协议鼓励代码共享,但需要尊重代码作者的版权。BSD开源协议允许用户修改和重新发布代码,也允许使用或开发基于BSD代码的商业软件发布和销售。这是一个非常友好的商业集成协议。因此,很多公司在选择开源产品时更倾向于BSD协议。ApacheLicenseApacheLicense,Version2.0ApacheLicense,Version1.1ApacheLicense,Version1.0来自Apache,类似MIT开源协议,但更看重专利权。ApacheLicense是著名的非营利开源组织Apache采用的协议。该协议类似于BSD,同样鼓励代码共享并尊重原作者的版权,也允许代码修改和再分发(作为开源或商业软件)。需要满足的条件也和BSD类似:使用代码的用户需要提供ApacheLicense。如果修改了代码,需要在修改后的文件中进行说明。在扩展代码(从源代码派生的修改和代码)中有原始作者指定包含在原始代码中的许可证、商标、专利声明和其他描述。如果重新分发的产品中包含通知文件,则通知文件中需要Apache许可证。您可以在通知中添加您自己的许可证,但不能更改Apache许可证。ApacheLicense也是一种对商业应用程序友好的许可证。用户还可以在需要时修改代码以满足他们的需求,并将其作为开源或商业产品发布/销售。代表作品:echartssupersetdubbosparkLGPLLGPL(GNULESSERGENERALPUBLICLICENSE)来自自由软件联盟GNU,可以翻译成更宽松的GPL协议,也是一个有感染力的开源协议。LGPL是GPL的一个开源协议,主要是为类库的使用而设计的。与GPL要求任何使用/修改/派生GPL类库的软件都必须使用GPL协议不同,LGPL允许商业软件通过类库引用(链接)使用LGPL类库,而不需要开源商业软件代码.这使得使用LGPL协议的开源代码可以作为类库被商业软件引用、发布和销售。但是,如果修改了LGPL协议的代码或派生代码,所有修改后的代码、附加代码和涉及修改部分的派生代码都必须采用LGPL协议。因此,LGPL协议的开源代码非常适合商业软件作为第三方库,但不适合想在LGPL协议代码的基础上通过修改、衍生的方式进行二次开发的商业软件。GPL/LGPL都保护原作者的知识产权,防止有人利用开源代码复制开发类似产品。GPLGPL(GNUGENERALPUBLICLICENSE)来自自由软件联盟GNU。GPL/LGPL侧重于代码和派生代码的开源和免费使用。GPL协议的主要内容是只要在软件中使用了GPL协议的产品(“使用”是指类库引用、修改代码或派生代码),该软件产品也必须采用GPL协议,它必须是开源和免费的。.这称为“传染”。由于GPL严格要求使用GPL类库的软件产品必须使用GPL协议,对于使用GPL协议的开源代码,商业软件或对代码有保密要求的部门不适合作为集成/采用的依据类库和二次开发。我们非常熟悉的Linux就是采用了GPL。GPL协议与BSD、ApacheLicense等鼓励代码重用的许可有很大不同。GPL的出发点是代码的开源/免费使用/参考/修改和派生代码的开源/免费使用,但修改和派生的代码不允许作为闭源发布和出售商业软件。其他细节与BSD/Apache等协议类似。代表作品:Linux更多开源协议比较下表中出现的词语解释:Licenseandcopyrightnotice:代码中保留作者提供的license和copyrightnotice。StateChanges:在代码中声明对原代码的重大修改和变更。公开来源:代码必须公开。库用途:该库可用于商业软件。HoldLiable:代码作者承担代码使用后的风险和后果。如果被禁止,那么作者将不承担任何责任,可以理解为免责声明。使用商标:您可以使用作者姓名、作品标志或商标。附加协议(Sublicensing):允许在软件分发和传播过程中增加原有的协议条款等。协议描述要求允许禁止Apache一种更宽松的协议,简洁地标识了专利许可。1.\(\color{#0000FF}{协议及版权信息}\)2.\(\color{#0000FF}{声明变更}\)1.\(\color{#00EE00}{商业使用}\)2.\(\color{#00EE00}{发行}\)3.\(\color{#00EE00}{修改}\)4.\(\color{#00EE00}{专利授权}\)5.\(\color{#00EE00}{私人使用}\)6.\(\color{#00EE00}{附加协议}\)1.\(\color{#FF3030}{责任}\)(作者免责声明)2.\(\color{#FF3030}{Trademarkusage}\)GPL是使用最广泛的开源协议,具有很强的版权自由(copyleft)要求。衍生代码的分发需要开源,同样遵守本协议。该协议有许多变体,每个变体的要求略有不同。1.\(\color{#0000FF}{开源代码}\)2.\(\color{#0000FF}{协议和版权信息}\)3.\(\color{#0000FF}{声明变更}\)1.\(\color{#00EE00}{commercial}\)2.\(\color{#00EE00}{distribution}\)3.\(\color{#00EE00}{modification}\)4.\(\color{#00EE00}{专利授权}\)5.\(\color{#00EE00}{私人使用}\)1.\(\color{#FF3030}{责任}\)2.\(\color{#FF3030}{附加协议}\)MIT这个协议松散而简单。它允许您以任何方式使用代码,并带有适当的属性和免责声明。1.\(\color{#0000FF}{协议及版权信息}\)1.\(\color{#00EE00}{商业用途}\)2.\(\color{#00EE00}{分发}\)3.\(\color{#00EE00}{修改}\)4.\(\color{#00EE00}{私人使用}\)5.\(\color{#00EE00}{附加协议}\)1.\(\color{#FF3030}{Responsibility}\)这个协议是ArtisticPerl社区的最爱。要求修改后的软件不能影响原软件的使用。1.\(\color{#0000FF}{协议及版权信息}\)2.\(\color{#0000FF}{声明变更}\)1.\(\color{#00EE00}{商业使用}\)2.\(\color{#00EE00}{distribution}\)3.\(\color{#00EE00}{modification}\)4.\(\color{#00EE00}{privateuse}\)5.\(\color{#00EE00}{附加协议}\)1.\(\color{#FF3030}{Responsibility}\)2.\(\color{#FF3030}{商标使用}\)BSD是一个比较宽松的协议,有两个变体,BSD2-Clause和BSD3-Clause,都与MIT许可证略有不同。1.\(\color{#0000FF}{协议及版权信息}\)1.\(\color{#00EE00}{商业用途}\)2.\(\color{#00EE00}{分发}\)3.\(\color{#00EE00}{修改}\)4.\(\color{#00EE00}{私人使用}\)5.\(\color{#00EE00}{附加协议}\)1.\(\color{#FF3030}{Responsibility}\)Eclipse是一个对商业非常友好的协议,可以用于软件的商业许可。包括专利的优雅许可,商业协议也可以应用于相关代码。1.\(\color{#0000FF}{开源代码}\)2.\(\color{#0000FF}{协议及版权信息}\)1.\(\color{#00EE00}{商业使用}\)2.\(\color{#00EE00}{发行}\)3.\(\color{#00EE00}{修改}\)4.\(\color{#00EE00}{专利授权}\)5.\(\color{#00EE00}{privateuse}\)6.\(\color{#00EE00}{additionalagreement}\)1.\(\color{#FF3030}{responsibility}\)LGPL主要用于一些代码库。衍生代码可以在本许可(或其他许可)下发布,但与本许可相关的代码必须遵循本许可。1.\(\color{#0000FF}{开源代码}\)2.\(\color{#0000FF}{库参考}\)3.\(\color{#0000FF}{协议和版权信息}\)1.\(\color{#00EE00}{commercial}\)2.\(\color{#00EE00}{distribution}\)3.\(\color{#00EE00}{modification}\)4.\(\color{#00EE00}{专利授权}\)5.\(\color{#00EE00}{私人使用}\)6.\(\color{#00EE00}{附加协议}\)1.\(\color{#FF3030}{责任}\)MozillaMozilla公共许可证(MPL2.0)由Mozilla基金会创建和维护,旨在在更宽松的BSD协议和更互惠的GPL协议之间找到折衷方案。1.\(\color{#0000FF}{开源代码}\)2.\(\color{#0000FF}{协议及版权信息}\)1.\(\color{#00EE00}{商业使用}\)2.\(\color{#00EE00}{发行}\)3.\(\color{#00EE00}{修改}\)4.\(\color{#00EE00}{专利授权}\)5.\(\color{#00EE00}{私人使用}\)6.\(\color{#00EE00}{附加协议}\)1.\(\color{#FF3030}{责任}\)2.\(\color{#FF3030}{商标使用}\)无许可保留所有权利,不允许分发、复制或创作衍生作品。当您在某些网站上发布代码时,您需要遵守网站的协议,该协议可能包含对您的劳动成果的一些授权许可。例如,如果你将代码发布到GitHub,你必须同意其他人查看和fork。1.\(\color{#0000FF}{协议及版权信息}\)1.\(\color{#00EE00}{商业使用}\)2.\(\color{#00EE00}{私人使用}\)1.\(\color{#FF3030}{Distribution}\)2.\(\color{#FF3030}{Modification}\)3.\(\color{#FF3030}{AdditionalAgreement}\)publicdomaindedicationin很多国家默认版权自动归作者所有,所以Unlicense协议提供了一个通用模板。本协议表明作者放弃版权并无私贡献其劳动成果,将失去对该作品的所有权利,包括MIT/X11中定义的无担保权利。
