`

程序员需要了解的几个开源协议

阅读更多
许多开发者和设计者希望把他们的作品作为开源项目共享,他们希望其他人能够利用和共享他们的代码。 而各种开源社区就是因为这个原因而充满活力。开源软件可以用于你能想象得到的任何应用程序,许多web设计人员使用开源软件作为开发基础(例如 WordPress,Drupal等等许多CMS系统都是开源的)。

但是许多开发者和设计者并没有对开源License有清楚的了解,不清楚当他们选择开发自己的源代码时,他们有什么权利。如果不知道明确的 License的内容,他们就不知道如何做出最明智的选择,如何做对他们最有利。

对于中国的开发者来说,因为中国发达的盗版文化,泛滥的盗版软件,大部分人恐怕都完全没有License或者版权这个概念,都是奉行拿来主义。如果我们一直都是这样的话,中国软件何来进步。所以对于国内的开发者来说,第一课就是应该学习如何使用和遵守License。

什么是License
许多混乱就始于你不知道License到底是什么,到底有什么含义。当你对你的产品使用License时,并不意味着你放弃了任何权利,你依然对其拥有原著作权。License只是授予他们于特定权利来使用你的产品。

License只是把你的作品释放到公有领域,或者给各个拷贝赋予权限。也意味着你放弃了版权收入,别人也没有义务把你列为原作者或贡献者。

开放源代码许可协议更容易为他人作出贡献,而不必寻求特别的许可。它也可以保护你作为原创者的权利,至少确认了你的贡献。它还可以保证你的工作不为别人所剽窃。

GNU General Public License
GNU General Public License (GPL)的可能是开源项目最常用的许可证。GPL赋予和保证了开源项目开发者广泛的权利。基本上,它允许用户合法复制,分发和修改软件。 这意味着你可以:

复制软件
复制软件到自己的服务器,客户端的服务器,你自己的电脑,几乎任何你想要的地方,而且没有数量限制。

发布软件
发布你想要的软件,例如,在你的网站提供下载链接,刻成光盘,打印出来等等。

收取费用
如果你想在向别人提供软件时收费,如设置在别人的网站上或者其他用途时。GPL允许你这么做,但是你必须给客户提供一个GPL副本,告诉他们可以在其他地方得到免费版本。当然最好在此之前,告诉客户,你为什么收费。

可以任意修改
如果你想添加或删除功能,没问题。如果想在其他项目中使用部分代码,也是可以的,但是唯一的限制是此项目也必须按GPL发布。

商业软件不能使用GPL协议的代码。



GNU Lesser General Public License
还有另一个GNU License:GNU Lesser General Public License (LGPL)。比起GPL它授予的权限较少。一般来说,LGPL比较适合连接到非GPL或者非开源文件的库文件。由于GPL的规定,使用到部分GPL代码的软件,必须也使用GPL,开发人员不能使用GPL来开发收费软件或者专有软件。LGPL则没有这方面的要求,不要求使用与部分代码相同的 License。



商业软件可以使用,但不能修改LGPL协议的代码。



BSD License
BSD License与其他自由软件License相比,如GPL,限制更少。但是请注意到BSD License两种版本之间的差别:New BSD License/Modified BSD License 和Simplified BSD License/FreeBSD License。它们两者都是于GPL兼容的自由软件License。

New BSD License (”3-clause license”) 可以用于任何作为版权声明和保证许可的免责声明的目的,可以通过无限长的再分发来得以维持,也就是说如果再发布的产品中包含源代码,则在源代码中必须带有原来代码中的BSD协 议。它还有一个特殊限制条款,不用特别的许可就是限制使用派生工作的工作者名字,也就是说不可以用开源代码的作者/机构名字和原来产品的名字做市场推广。

New BSD License和Simplified BSD License的主要区别是,后者忽略了非认可条款。



商业软件可以使用,也可以修改使用BSD协议的代码。



MIT License
MIT是和BSD一样宽松的许可协议,作者只想保留版权,而无任何其他了限制.也就是说,你必须在你的发行版里包含原许可协议的声明,无论你是以二进制发布的还是以源代码发布的。

你可以使用,复制和修改软件
你可以免费使用软件或出售
唯一的限制是,它是必须附有MIT授权协议
商业软件可以使用,也可以修改MIT协议的代码,甚至可以出售MIT协议的代码。



Mozilla Public License 1.1
Mozilla Public License 1.1 (MPL)协议允许免费重发布、免费修改,但要求修改后的代码版权归软件的发起者。这种授权维护了商业软件的利益,,它要求基于这种软件得修改无偿贡献版权给该软件。这样,围绕该软件得所有代码得版权都集中在发起开发人得手中。但MPL是允许修改,无偿使用得。MPL软件对链接没有要求。



商业软件可以使用,也可以修改MPL协议的代码,但修改后的代码版权归软件的发起者。



Common Development and Distribution License
CDDL(Common Development and Distribution License,通用开发与销售许可)开源协议,是MPL(Mozilla Public License)的扩展协议,它允许公共版权使用,无专利费,并提供专利保护,可集成于商业软件中,允许自行发布许可。



商业软件可以使用,也可以修改CDDL协议的代码。



Apache License
Apache Licence是著名的非盈利开源组织Apache采用的协议。该协议和BSD类似,同样鼓励代码共享和尊重原作者的著作权,同样允许代码修改,再发布 (作为开源或商业软件)。需要满足的条件:

需要给代码的用户一份Apache License。
如果你修改了代码,需要在被修改的文件中说明。
在延伸的代码中(修改和有源代码衍生的代码中)需要带有原来代码中的协议,商标,专利声明和其他原来作者规定需要包含的说明。
如果再发布的产品中包含一个Notice文件,则在Notice文件中需要带有Apache License。你可以在Notice中增加自己的许可,但不可以表现为对Apache License构成更改。
Apache Licence也是对商业应用友好的许可。使用者也可以在需要的时候修改代码来满足需要并作为开源或商业产品发布/销售。



商业软件可以使用,也可以修改使用Apache协议的代码。



Eclipse Public License
Eclipse Public License(EPL)是一个与CPL相类似的许可证,任何扩展自Eclipse源码的代码也必须是开源的。



Creative Commons
Creative Commons(CC)的许可证不太开放源代码授权,它们通常用于设计项目。 CC许可证有着宽广的定义,每个定义都会授予一定的权利。它有四个基本部分,可以单独或者组合使用。下面是部分概述:

署名
作者必须是作品的原创者。 除此之外,作品可以修改,分发,复制和以其他方式使用。

相同方式共享
工作可以修改,分发等等,但必须在一个许可证下。

非商业
可以修改,分发等,但不用于商业目的。 关于什么是“商业”,说法比较含糊(没有提供明确的定义),因此您可能需要在自己的项目中澄清这一点。

禁止修改
这意味着您可以复制和分发许可工作,但你不能以任何方式修改,或在原有的基础开发。

商业软件的使用要遵从CC协议的具体规定,最严格的许可证将是“署名,非商业,不能修改”的授权。这意味着你可以自由共享的工作,但不能改变它,你必须把它归功于原创者。



Common Public License 1.0
Common许可证有一些细节性的规定值得参考:

明确了专利授权。一般的开源软件都明确源代码的版权人将自己的修改权、复制权等版权权利向公众许可,但保留署名权,而Common许可证在此基础上还明确假如源代码中含有专利权,源代码专利权人将复制、使用的专有权利向公众许可。
规定可以将源代码及修改过的源代码与其他类型的不受本许可证约束的代码结合,以新产品的形式发布,只要其中经该许可证获得的源代码及修改过的源代码能按该许可证的要求发布即可。
细化了该许可证终止的情形,包括发生专利侵权诉讼。
明确了一个独立承担责任的原则,就是假如按该许可证使用源代码的使用者将获得的源代码应用于商业使用,那么他就要对在商业应用中出现的由于使用该源代码程序而产生的侵权诉讼承担完全责任。这一条规定是比较特殊的,绝大多数开源软件许可证都不这么要求。
商业软件可以使用,也可以修改Common协议的代码,但要承担代码产生的侵权责任。


转自:http://www.iteye.com/topic/624384
分享到:
评论

相关推荐

    Java程序员需要了解的几个开源协议

    Java程序员需要了解的几个开源协议 Java程序员需要了解的几个开源协议

    Java程序员需要了解的几个开源协议介绍.rar

    本篇文章将详细介绍几个Java程序员必须了解的开源协议,帮助开发者更好地理解和遵循这些规则。 1. **Apache License 2.0**: Apache License 2.0 是一个非常宽松的开源协议,它允许用户自由地使用、修改、复制、...

    Java程序员需要了解的几个开源协议 .txt

    以下是Java程序员需要深入了解的几个关键开源协议,包括它们的特点、适用场景以及可能带来的影响。 ### Mozilla Public License (MPL) MPL是一种弱复制许可协议,允许开发者修改和扩展源代码,同时要求如果发布...

    Java程序员必须了解的七大开源协议

    ### Java程序员必须了解的七大开源协议 在软件开发领域,开源协议扮演着极其重要的角色,它们不仅定义了软件如何被使用、修改和分发,还为开发者提供了合法使用开源组件的基础。对于Java程序员而言,了解并熟悉常见...

    Python-开源协议说明

    首先,我们需要了解什么是开源协议。开源协议(Open Source Licenses)是一系列法律文件,它们规定了开源软件的使用、修改、复制和分发的条件。这些协议保障了开源软件的开放性和共享性,同时也保护了作者的知识产权...

    how_a_programmer_grow_up.rar_Grow Up

    《程序员如何成长——Java程序员需要了解的几个开源协议》 在快速发展的信息技术行业中,程序员的成长不仅关乎技术的积累,还涉及到对行业规则的理解与运用。本文将深入探讨Java程序员在成长过程中应关注的几个关键...

    如何成为优秀的程序员

    总之,成为一名优秀的程序员需要系统学习,持续实践,不断适应新技术,并具备良好的团队精神。亚嵌老师的讲解会提供一个良好的起点,但真正的成长在于自己的努力和不断的探索。通过不断积累和提升,你也能在编程世界...

    高级程序员复习资料--适合有志于参加高程考试的同志

    8. **法律法规与职业道德**:高级程序员需要了解软件知识产权、数据保护等相关法律法规,并遵循职业操守。 9. **最新技术趋势**:随着技术的不断发展,复习资料可能还会包含云计算、大数据、人工智能、物联网等新兴...

    macOS内核darwin的开源项目

    在XNU内核中,有以下几个关键组成部分: 1. **Mach微内核**:负责进程间通信(IPC)和硬件抽象,提供低级别的调度和内存管理。 2. **BSD子系统**:包括文件系统、网络、进程控制等,这部分与传统的Unix系统高度兼容...

    程序员成熟的标志

    具体表现在以下几个方面: 1. **逻辑性**:成熟的程序员编写代码时逻辑清晰,易于理解和维护。 2. **思维方式**:成熟的程序员倾向于自顶向下的思维方式,即先整体规划再逐步细化,这种方式更适合大型项目的开发。 ...

    Java程序员职业规划.zip

    首先,Java程序员的职业路径通常分为几个阶段:初级程序员、中级程序员、高级程序员、系统架构师,再到团队领导和技术主管。每个阶段都有其特定的知识和技能要求。 1. **初级Java程序员**:这个阶段主要集中在学习...

    成为一名更好的程序员

    成为更好的程序员需要不断学习和实践,涵盖编程技巧、软件开发最佳实践、个人习惯和团队协作等多个方面。根据提供的文件内容,以下是详细的知识点: 1. 编程实践 - 代码层面的技术:学习如何编写代码行,进行测试...

    怎样才能快速的成为一名高级程序员呢?

    根据提供的文件信息,我们可以将关键知识点归纳为以下几个方面: ### 一、基础编程技能 1. **脚本语言**: 包括但不限于ASP、JSP、PHP等。这些语言虽然在语法上有所不同,但它们的基本逻辑和设计理念是相通的。了解...

    java程序员简历模板

    7. **jbpm工作流**:jbpm是一个开源的工作流程管理系统,求职者对其有一定的了解,意味着具备处理业务流程自动化的能力。 8. **Lucene全文检索框架**:Lucene是Apache的一个开源全文搜索引擎库,求职者熟悉这个工具...

    优秀程序员所具备的几项本领

    ### 优秀程序员所具备的几项本领 在IT行业中,成为一名优秀的程序员不仅仅意味着掌握高超的技术,还需要具备一系列软技能和个人素质。以下将详细介绍成为优秀程序员所需要的关键能力: #### 一、掌握语言与工具...

    对程序员的忠告 txt文档

    虽然多学几种语言总是好的,但深入掌握至少一种主流编程语言(如Java、C#、Python等)对于程序员来说非常关键。这样不仅可以提高工作效率,还能更好地理解该语言背后的编程思想和设计理念。 #### 10. 跨领域学习和...

    程序员06第2期

    【标签】"06第2期 程序员"则突出了这个出版物的时间节点和受众定位,"06"可能指的是2006年,而“程序员”标签明确了内容是为程序员量身打造的,涵盖了可能包括但不限于以下几大知识点: 1. **编程语言**:可能会有...

    程序员面试宝典--程序员面试必备!

    - **案例准备**:准备几个能够体现自己技术水平的项目案例。 #### 3. 行为面试准备 - **STAR法则**:Situation(情境)、Task(任务)、Action(行动)、Result(结果),这是一种有效的回答行为面试问题的方法。 -...

    程序员面试攻略.pdf

    面试通常分为几个阶段:简历筛选、电话初筛、技术面试、HR面试以及可能的项目或实战测试。在这个过程中,程序员需要清楚地展示自己的项目经验、技术能力以及团队协作精神。简历应真实、简洁,突出关键技能和成就。...

    java开源包6

    MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包 jSIP.tar jSIP这个Java包目标是用Java实现SIP(SIP:...

Global site tag (gtag.js) - Google Analytics