十问十答 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,一经查实,立即删除!

相关文章

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…

《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) …

百万年薪程序员的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;小到类名、方法名、参数名、参数名、变量名。而命名又对代码的质量和可读性起到很关键的决定。如何码出高质量的代码…

【复杂系统迁移 .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;也不接受参数。 当一个类没有定义析构函数时&…

.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 << "数据错误&…

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

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

程序员羽化之路--假如需要一百万个对象

点击上方蓝字关注我们菜菜哥&#xff0c;救命呀又被产品经理砍了&#xff1f;这次搞不好真要被砍了&#xff0c;线上一个用户系统内存溢出了&#xff0c;占用内存太高了用户基数大&#xff0c;内存占用高正常高的不太正常了&#xff0c;我觉得可能和我的设计有关那说说你的用户…

WTM 3.5发布,VUE来了!

千呼万唤中&#xff0c;WTM的Vue前后端分离版本终于和大家见面了&#xff0c;我曾经跟群里1000多位用户保证过Vue版本会在春天到来&#xff0c;吹过的牛逼总算是圆上了。卧槽&#xff0c;NB啊!我等到花都谢了风太大&#xff0c;吹瞎了朕的双眼我是谁&#xff0c;我在哪儿&#…

java 第三方序列化,11.既然有第三方的序列化方式,说明java官方提供的序列化方式应该有一些很明显或者很致命的缺点……...

序列化是什么&#xff1a;把一个java对象转化为二进制对象&#xff0c;并保存到硬盘&#xff0c;或在网络上传输。反序列化就是把序列化的二进制对象读到内存中。 作用&#xff1a;1、减少内存占用或网络传输。比如web容器中的session&#xff0c;当session数量过大比如10W连接…

2020年,我来盘点下微服务架构技术栈

2020年了&#xff0c;很多小伙伴儿对微服务还比较陌生&#xff0c;说起来很多人可能不敢相信&#xff0c;其实微服务这个概念早在2012年就提出来了&#xff0c;经过了这些年的发展&#xff0c;现在已经成为企业非常主流的架构选项了。今天&#xff0c;我就来带大家一起探讨下微…

2.5w字长文爆肝 C++动态内存与智能指针一篇搞懂!太顶了!!!

动态内存与智能指针1.动态内存与智能指针2.shared_ptr类2.1.make_shared函数2.2.shared_ptr的拷贝和赋值2.3.shared_ptr自动销毁所管理的对象2.4. shared_ptr会自动释放相关联的内存2.5.使用了动态生存期的资源的类2.6.定义StrBlob类2.7. StrBlob构造函数2.8.元素访问成员函数2…

ASP.NET Core应用的7种依赖注入方式

ASP.NET Core框架中的很多核心对象都是通过依赖注入方式提供的&#xff0c;如用来对应用进行初始化的Startup对象、中间件对象&#xff0c;以及ASP.NET Core MVC应用中的Controller对象和View对象等&#xff0c;所以我们可以在定义它们的时候采用注入的形式来消费已经注册的服务…

ASP.NET Core 3.x - 为什么采用新的 Endpoint Routing 路由系统

Endpoint Routing 路由系统ASP.NET Core 3.x 使用了一套叫做 Endpoint Routing 的路由系统。这套路由系统在ASP.NET Core 2.2 的时候就开始露面了。这套Endpoint Routing路由系统提供了更强大的功能和灵活性&#xff0c;以便能更好的处理请求。早期ASP.NET Core的路由系统我们先…