十问十答 CDDL 许可证

今天我们来整理一下通用开发和发行许可证 CDDL 的十大问题清单。

通用开发与发行许可证(Common Development and Distribution License,CDDL)由已被甲骨文公司收购的太阳微系统公司(Sun Microsystems)发布的一种开源许可证,用于取代 Sun Public License(SPL)。SUN 公司(即现在的甲骨文公司)认为 CDDL 许可证是 SPL 许可证的 2.0 版本,是受 Mozilla 公共许可证(Mozilla Public License,MPL)启发而来的。在 2004 年前,SUN 公司曾根据其 SPL 发行其自由软件/开源项目。CDDL 通常被称作 MPL 的整洁版本,旨在促进可重用性。

01

通用开发和发行许可证

CDDL 的条款和条件是什么?

你可以复制和分发 CDDL 许可的任何软件的任何原始或其衍生作品,但不能删除或更改软件中所包含的任何版权、专利或商标声明。

你还必须保留其它贡献者或初始开发者的许可声明或其它描述性文字。

当你的软件以可执行文件的形式(除源码外的任何形式)分发时,要求你的软件也处于 CDDL 的许可之下。可执行文件在释出时可以使用 CDDL 许可证,或其他任何与 CDDL 兼容的许可证。

如果你的贡献只是在原有的文件中增加、删除或修改内容,或者在新的文件中包含了部分原始的程序,那么你就必须释出这部分贡献的源代码。这就意味着,如果你添加的内容在独立文件中,并不包含原始代码,则不必在 CDDL 下释出。如果你愿意在 CDDL 下释出,你可以这么做,但这不是你的义务。

此外,你必须在分发的源码中包含 CDDL 副本。对于你所做的每次修改,你都应该在修改的文件中加一个告知信息,表明自己是修改者。

02

CDDL 是版权向左的吗?

CDDL 属于弱版权向左许可证(weak copyleft license)

诸如 GNU GPL、MPL 或 Eclipse 许可证这样的 Copyleft 许可证,要求你向下游用户授予与你相同的权利。为此,你需要在同一许可证下分发程序,包括程序的所有修改版本和扩展版本。这意味着在代码中使用 Copyleft 许可的组件,会导致你必须将整个程序以开源的形式发布。从本质上讲,这意味着要以与原始软件所携带的相同许可证来分发原始或修改后的软件。

CDDL 仅要求你在 CDDL 许可证下发布你软件中使用到或修改了 CDDL 许可组件的那部分源代码。如果是以可执行文件的形式分发软件,则必须包含源码,但可执行软件可以以 CDDL 许可证或其他任何兼容许可证的形式分发。

03

CDDL 是否授予专利权?

是的。任何贡献者均授予你使用其贡献所体现的专利权利。CDDL 在专利方面持明确立场,你可以使用、修改和再分发 CDDL 许可的组件,而不必担心代码贡献者可能对所贡献的技术拥有任何专利。

CDDL 通过终止对开发者提出的关于任何人使用其所贡献代码的专利主张来阻止针对开发者的专利诉讼。

04

CDDL 的 1.0 版本和 1.1 版本的区别

CDDL 1.1 版本在 2005 年 1 月初发布第一份草案,并于次年发表。其中包括一些更正,用于防止 CDDL 与欧洲版权法(European Copyright law)相抵触,并允许独立开发者在其工作中使用 CDDL。

05

CDDL 与 GNU GPL 有什么区别?

是否兼容?

GNU GPL 会将你的程序视为原始软件的衍生产品,这意味着你必须提供源代码——这被视为强互惠性(strong reciprocity)。CDDL 采用软件方法(software approach)——如我们所见——如果你在独立的不包含原始程序任何部分的文件中添加内容,那么这些文件就不受 CDDL 的约束。这就意味着——除此以外(amongst other things)——你无需释出这些文件的源码。

此外,GPL 在变更许可证条件可条件方面持强硬立场,尽管 GPLv3 增加了某些变通,但一般规则是不能引入其他变更。对此,CDDL 仅要求软件的源码部分遵循其规定。对于可执行文件的许可证,你可以选择任何许可证的条款进行分发,只要它符合 CDDL 的条款,且不试图限制或更改源码下游使用者的权利。

正是由于这些差异,CDDL 被认为与 GNU GPL 不兼容。

06

CDDL 与 Mozilla 公共许可证

(MPL)有什么区别?

CDDL 基于 Mozilla 公共许可证(MPL)1.1 版本,但进行了一些修改,使其更易于被开发者所使用,而且 MPL 2.0 版本也做了重大修改。

CDDL 和 MPL 这两个许可证的主要区别是与 GPL 的兼容性和简单性:

  • 尽管它们都属于弱版权向左许可证,但 MPL 2.0 与 GNU GPL 兼容,而 CDDL 与 GNU GPL 不兼容;

  • CDDL 具有更好的结构,并特意使用一种更简洁、更一致的语言,使许可证更易于理解,并提高了在开发者中的采用率。

07

CDDL 与 Apache 及 BSD 许可证

有什么区别?

Apache 和 BSD 许可证是宽松开源许可证,当你选择分发使用这些许可证的程序时无需做额外的修订。而对 CDDL 来说,如上文所述,CDDL 会使你的某些贡献受到条款和条件的约束。表面上看上去,Apache 许可证 2.0 和 BSD 都被认为与 GNU GPL 相兼容,不像 CDDL。实际上,CDDL 与 Apache 和 BSD 许可证是兼容的。

08

我可在商业产品中使用

CDDL 许可的组件吗?

是的,你可以在商业产品中使用 CDDL 许可的组件,甚至可以出售、转售带有 CDDL 许可组件的软件。但在这过程中,请确保在 CDDL 许可证下释出使用原始或经过修改的 CDDL 许可组件,并满足上述许可的其他条款和条件。

09

我可以根据 CDDL

许可我的软件吗?

是的,CDDL 被设计为可重用,因此你可以根据 CDDL 许可你的软件。实际上,当初对 MPL 进行修改并形成 CDDL 时,就特意维持它的简单性,以便开发者们能轻易重用。

10

是否可以将 CDDL 许可的组件与

专有代码或根据其他开源许可证

获得许可的源代码结合使用?

CDDL 许可的组件可以与其他许可证(开源许可或专有)许可的组件混合使用。如果与其他开源许可的组件一同编译,那么这些许可证必须与 CDDL 相兼容。建议你要格外小心,在将自有软件和专有代码(或其他开源许可证)结合使用时,如果有必要,请咨询专门的律师。

至此,这十个关于通用开发与发行许可证(CDDL)的问题回答完毕,如果你还有其他问题,我(此处指作者)十分乐意帮你找到答案。

本文作者和译者均不是律师(或其他意义上的法律工作者),所以你不应将本文(原文和译文)视作任何形式的法律建议。如果需要法律咨询,请联系你的法律顾问,或咨询具有相关资质和从业经验的法律工作者。

原题:

Top 10 Common Development and Distribution License (CDDL) Questions Answered

原文:

https://resources.whitesourcesoftware.com/blog-whitesource/top-10-common-development-and-distribution-license-cddl-questions-answered

作者:Rami Sass


END

开源许可证相关推荐:

1)一文读懂常用开源许可证
2)一文读懂开源许可证异同

3)一文读懂 Copyleft 开源许可证

4)十问十答 Apache 许可证

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/310948.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

浅谈java spring_浅谈Spring(一)

Spring是当前比较流行的基于Java语言的MVC框架,所谓框架也就是它已经实现好了诸多东西,使java开发人员能把精力尽量放在业务逻辑上.Spring技术的特点是IOC, 即反向注入,主要应用的是XML技术和POJO(简单Java对象),Spring要达到的目的其实很简单,就是尽量简化原来Java中的地层数据…

Http Server API路由请求到web程序

引言接上文,容器内web程序一般会绑定到http://0.0.0.0:{某监听端口}或http://:{某监听端口},以确保使用容器IP可以访问到web应用。正如我们在ASP.NET Core官方镜像显示的,ASP.NET Core程序在容器内80端口监听请求This image sets the ASPNETC…

mysql 多行拼接注入_MySQL注入汇总

Mysql注释符:单行注释: # 在对URL使用过程中可能遇到Unicode编码问题,可常用%23代替多行注释:/**/单行注释: -- 此处需要注意后面存在空格,否则报错0.万能密码(基于SQL验证,SQL注入)aaa or 1#aa…

《C++ Primer》13.1.6节练习(部分)

练习13.18: #include <iostream> #include <string> using namespace std;class Employee {private:static int sn;public:Employee() {mysn sn;}Employee(const string &s) {name s;mysn sn;}const string &get_name() {return name;}int get_mysn() …

用Azure Custom Vision 零代码创建一个口罩识别模型

新冠肺炎下&#xff0c;地球是一家&#xff0c;不分国籍&#xff0c;不分种族&#xff0c;或者现在只能呆在家中&#xff0c;但是也是一种对抗疫的支持。停课不停学留在家中&#xff0c;不仅是对学生&#xff0c;对于所有人都是有用的。在现阶段&#xff0c;大家可能最需要的不…

C++拷贝构造函数调用时机分析

让我们来分析下面这段代码&#xff1a; #include <iostream> #include <string> using namespace std;class Employee {private:static int sn;public:Employee() {cout << "Employee()" << endl;mysn sn;}Employee(const string &s) …

java开发中准则怎么写_Java开发中通用的方法和准则20条

1. 不要在常量和变量中出现易混淆的字母包名全小写、类名首字母全大写、常量全部大写并下划线分割、变量采用驼峰命名等&#xff0c;这些是最基本的Java编码规范。public class TestDemo {public static void main(String[] args) {long i 1l;System.out.println("i的两倍…

百万年薪程序员的7点能力

作者介绍findyi&#xff0c;腾讯、360码农&#xff0c;前哒哒少儿英语技术VP&#xff0c;现任土豆教育CTO。几周前&#xff0c;微盟爆了个大雷&#xff0c;数据库让内部员工删库跑路。写了篇文章&#xff0c;做了一些我的判断&#xff1a;从微盟36小时故障&#xff0c;谈谈数据…

《C++ Primer》13.1.1节练习

练习13.1: 如果构造函数的第一个参数是自身类类型的引用&#xff0c;且所有其他参数&#xff08;如果有的话&#xff09;都有默认值&#xff0c;则此构造函数是拷贝构造函数。拷贝构造函数在以下几种情况下会被使用&#xff1a; ●拷贝初始化&#xff08;用定义变量&#xff09…

Java将五个整数存入整形数组_异常处理:从命令行输入5个整数,放入一整型数组,然后打印输出。。。...

从命令行输入5个整数&#xff0c;放入一整型数组&#xff0c;然后打印输出。要求&#xff1a;如果输入数据不为整数&#xff0c;要捕获输入不匹配异常&#xff0c;显示“请输入整数”&#xff1b;如果输入数据多余5个&#xff0c;捕获数组越界异常&#xff0c;显示“请输入5个整…

优秀的开发者从命名开始

有人说&#xff0c;命名能力也能体现一个程序员的基本编程素养。我很赞成这句话&#xff01;作为开发人员逃不过起名字这一关的,大到项目名、模块名&#xff0c;小到类名、方法名、参数名、参数名、变量名。而命名又对代码的质量和可读性起到很关键的决定。如何码出高质量的代码…

《C++ Primer》13.1.2节练习

练习13.6&#xff1a; 拷贝赋值运算符本身是一个重载的赋值运算符&#xff0c;定义为类的成员函数&#xff0c;左侧运算对象绑定到隐含的this参数&#xff0c;而右侧运算对象是所属类类型的&#xff0c;作为函数的参数&#xff0c;函数返回指向其左侧运算对象的引用。 当对类对…

PHP自动判断用户会员过期,php,_定时扣除用户过期积分,但平台用户量比较大,有没有好的解决方法?,php - phpStudy...

定时扣除用户过期积分&#xff0c;但平台用户量比较大&#xff0c;有没有好的解决方法&#xff1f;最近网站实行用户积分过期制度&#xff0c;只保留用户近三月积分&#xff0c;三月前未使用积分进行扣除但平台用户量比较大&#xff0c;感觉这样做会出问题&#xff0c;有没有好…

【复杂系统迁移 .NET Core平台系列】之认证和授权

源宝导读&#xff1a;微软跨平台技术框架—.NET Core已经日趋成熟&#xff0c;已经具备了支撑大型系统稳定运行的条件。本文将介绍明源云ERP平台从.NET Framework向.NET Core迁移过程中的实践经验。一、背景随着ERP的产品线越来越多&#xff0c;业务关联也日益复杂&#xff0c;…

《C++ Primer》13.1.3节练习

练习13.9: 析构函数完成与构造函数相反的工作&#xff1a;释放对象使用的资源&#xff0c;销毁非静态数据成员。从语法上看&#xff0c;它是类的一个成员函数&#xff0c;名字是波浪号接类名&#xff0c;没有返回值&#xff0c;也不接受参数。 当一个类没有定义析构函数时&…

php冒泡程序讲解,PHP冒泡排序程序代码与源代码

冒泡排序是php中众多排序中的一个最简单的排序方法了下面一聚教程小伙伴就同各位介绍一个冒泡排序的例子&#xff0c;希望能帮助到各位。冒泡排序简介&#xff1a;冒泡排序(Bubble Sort)&#xff0c;是一种计算机科学领域的较简单的排序算法。它重复地走访过要排序的数列&#…

.NET Core开发实战(第30课:领域事件:提升业务内聚,实现模块解耦)--学习笔记...

30 | 领域事件&#xff1a;提升业务内聚&#xff0c;实现模块解耦我们在领域的抽象层定义了领域事件和领域事件处理的接口IDomainEventnamespace GeekTime.Domain {public interface IDomainEvent : INotification{} }这是一个空接口&#xff0c;它只是标记出来某一个对象是否是…

《C++ Primer》8.1.2节练习

练习8.1: #include <iostream> #include <stdexcept> using namespace std;istream &f(istream &in) {int v;while (in >> v, !in.eof()) {if (in.bad())throw runtime_error("IO流错误");if (in.fail()) {cerr << "数据错误&…

mac升级php7,MAC更新自带php版本到7.0

说一下我最近更新mac自带php版本的经历&#xff0c;我是按照网上的教程更新的&#xff0c;主要参考的是这篇博客http://blog.csdn.net/takunha/article/details/52484769&#xff0c;通过Homebrew来安装&#xff0c;安装过程除了速度有点慢之外&#xff0c;其他都还算顺利。可装…

.NET 5 Preview 1的深度解读和跟进

这几天微软.NET 团队发布了.NET 5 Preview 1, 如约而至。很兴奋&#xff0c;因为.NET Core和.NET Framework终于实现了大一统&#xff0c;同时也很期待&#xff0c;期待.NET 5能给我们带来哪些好的新特性。让我们先把时间拨回到2019年...一、2019年.NET 5的提前剧透去年2019年 …