十问十答 Ms-PL 许可证

Microsoft 公共许可证(The Microsoft Public License)是微软为释出开源项目而编写和发布的自由开源软件许可证。如果你用 .NET 开发,你会经常碰见 Ms-PL。在微软的自由开源项目托管地 Codeplex(已寿终正寝,微软已战略转进至 GitHub)上也有不少基于 Ms-PL 的项目。

01

Ms-PL 的条款和条件

你可以自由地复制(再制造,reproduce)和分发(distribute)签署了 Ms-PL 许可证的原始软件或衍生产品。但在使用时不能使用任何贡献者的名字(contributors' name)、Logo 或商标。Ms-PL 许可证通过「不为你所使用的代码提供任何明确的保证(warranties)或承诺(guarantees,一般与质量有关)」来保护作者,因此如果代码在某些情况下无法正常工作,作者也不必承担任何责任。

当你使用 Ms-PL 许可证分发软件(整体或部分)时,无需分发其源代码。你也可以分发对应的源码,但这不属于一种义务。但是你需要:

  • 必须保留该软件最初的所有版权、专利、商标和所有权声明。

  • 此外,如果你以源码的形式分发软件的任一部分,则只能在 Ms-PL 下通过在分发时包含此许可证的完整副本来执行此操作。如果以编译或目标代码(object code)的形式分发软件的任一部分,则只能在符合 Ms-PL 的任何其他许可证下才能执行此操作。

需要注意的是,Ms-PL 条款和条件文档都非常简短清晰,且使用非常连贯的语言编写。微软希望与开源社区保持清晰和直接的关系,这有助于提高许可证的采用率(正如我们从 BSD 许可证中了解到的那样)。

02

Ms-PL 是否版权向左?

版权向左(Copyleft)许可证提供了分发修改品和衍生品的权利,但其前提是这些修改品和衍生品必须为下游接收者们暴露相同的权利与自由。你只能以 Ms-PL 来分发源码形式的 Ms-PL 软件的整体或部分。不过,当你以编译后的软件或目标代码分发 Ms-PL 软件时,你可以选择「符合 Ms-PL 条款的许可证」。

因此,当选择以源码形式分发 Ms-PL 软件的修改品或衍生品时,Ms-PL 的版权向左效应非常明显。而在分发经过编译或目标代码的版本时,即使 Ms-PL 关于这一点的文本讲得非常不清楚,也不需要将相同的权利与自由向下传递给下游接收者。微软(Ms-PL 的管理方)支持这种解释(interpretation)。微软公司坚持认为,开发者可以根据自己的选择分发 Ms-PL 软件的编译版本或目标代码版本,但不能对下游 Ms-PL 软件的接收者授予更多权利。

03

Ms-PL 和 Ms-RL 的区别

Ms-RL(Microsoft Reciprocal License)许可证是比 Ms-PL 更为严格的版权向左许可证。只要 Ms-RL 包含并许可了修改后的源文件,你就可以修改与分发任何 Ms-RL 组件。

不过,你可以对软件中的其他(完全由你写的)文件使用任何其他兼容的许可证。

04

商业产品是否允许使用 Ms-PL?

是的。只要你满足许可的条款和条件,你可以在商业产品中使用 Ms-PL 和 Ms-RL 许可的组件。

05

如何在商业项目中使用 Ms-PL 组件?

如果你正使用 Ms-PL 许可的组件并决定发布你产品的源码,那么你将只能在 Ms-PL 下分发该软件。如果你选择发布已编译的软件或目标代码,则可以选择其他与 Ms-PL 兼容的许可证。

如果你正使用 Ms-RL 许可的组件,那么你需要发布修改后的那部分的源文件代码,这对于商业产品来说是个问题。不过,你可以对剩下的其他属于你自己的文件使用其他许可证。

06

Ms-PL 许可证是否兼容 GNU GPL?

不兼容。Ms-PL 与 GNU GPL 并不兼容,因为 GPL 比 Ms-PL 要严格得多,比如 GPL 分发源码的要求就与 Ms-PL 的条款不符,因为后者可以编译程序而无需释出源码。

即便是版权向左的 Ms-RL 也与 GPL 不兼容。可以确信的是,微软故意将它的许可证设计得与 GPL 不兼容的理由与其他许多商业公司一样——如果你根据此许可证提交代码,那么代码便会陷入专有黑洞( proprietary black hole)之中——它们不喜欢这么做。

07

Ms-PL 与 GPL/LGPL 许可证的不同之处

Ms-PL 更倾向于从商业的角度来创建,体现的是微软这类商业公司的想法。

Ms-PL 与 GPL 之间最大的区别在于,Ms-PL 只要求当你以源码的形式发布软件(或其衍生品)时使用 Ms-PL 许可证;而 GPL 的话,只要你的软件利用到任何 GPL 协议的组件,你就得完整发布你的源代码。只要你将你的专有代码和 GPL 组件(不管是原始 GPL 还是经过修改的 GPL 许可证)结合起来,它们之间就没有什么区别了。

LGPL 是 GPL 的弱版权向左版本,允许专有软件使用或连接到 LGPL 组件,而不必将其专有文件置于 LGPL 许可证之下(也就是说,只需要公开对 LGPL 原始文件作过修改的那部分)。Ms-RL 与 LGPL 有点接近。当你软件使用 Ms-RL 时,你必须使用 Ms-RL 修正来发布所有签署了 Ms-RL 的组件。此外, 对于那些对并没有使用 Ms-RL 的组件,你可以对它们选择不同的许可证。

08

Ms-PL 与 MIT/BSD 许可证的不同之处

MIT 是最宽松的自由软件许可证之一。基本上,你只需要添加原始 MIT 许可证和版权声明副本(copy of the original MIT license and copyright notice),就可以自由使用基于 MIT 许可证的软件组件了。

BSD 许可证是另一个高度宽松的许可证,只要将原始 BSD 许可证副本附加上,就能根据需要随意修改并重分发根据 BSD 许可的软件。

MIT 和 BSD 许可证都不要求你发布软件的源码,也不对与其他许可下的源码混用设任何限制。

但是,对于 Ms-PL 来说,如果你选择发布产品的源码,那么源码就必须使用 Ms-PL。

09

Ms-PL 与 Apache 2.0 的不同之处

Apache 2.0 许可证是一个宽松的开源软件许可证,因此你可以将 Apache 许可的代码进行修改后以任何许可证进行发布(一般来讲会继续使用 Apache 许可证)。

但对于 Ms-PL 来讲,如果你选择分发的是产品的源码,那么就只能选择 Ms-PL 许可证。如果你选择分发的是产品的目标代码,那么你可以选择任何与 Ms-PL 兼容的许可证。

10

是否可销售使用 Ms-PL 的开源软件或代码?

是的。你可以销售任何基于 Ms-PL 的开源软件,不过请先确保没有侵犯任何人的商标(trademark)。

&

至此,我们回答了十个最重要的关于 Ms-PL 的问题。如果你还有其他问题,我们很乐意回答你。

本文的作者和译者均不是律师或法律工作者,因此你不应将本文视作任何形式上的法律建议。本文信息按素材原文原样奉上,未经修改。如需法律咨询,请联系你的法律顾问,或有相关从业资质或经验的律师或其他法律工作者。

原题:Top 10 Microsoft Public License (Ms-PL) Questions Answered

原文:

https://resources.whitesourcesoftware.com/blog-whitesource/top-10-microsoft-public-license-ms-pl-questions-answered

作者:Rami Sass


END

开源许可证相关推荐:

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

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

4)十问十答 Apache 许可证

5)十问十答 CDDL 许可证

6)十问十答 GPL 许可证

7)十问十答 BSD 许可证

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

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

相关文章

[剑指offer]面试题17:合并两个排序的链表

面试题17:合并两个排序的链表 题目:输入两个递增排序的链表,合并这两个链表并使新链表中的结点仍然是按照递增排序的。例如输入图3.7中的链表1和链表2,则合并之后的升序链表如链表3所示。链表结点定义如下: struct Li…

网络编程-HTTPS协议的实现原理

HTTP传输协议缺点 之前几篇文章中详细讲解了TCP/IP协议栈中的几个协议,其中个就有对HTTP做了一个比较详细的讲解。HTTP是基于TCP进行传输的,其中传输的内容都是明文报文数据,如果我是一个黑客,我会想办法获取这个HTTP消息体&…

从案例角度解析建模平台动态规则引擎

源宝导读:明源云ERP建模平台提供了强大的页面联动规则引擎,原来需要编写代码完成的联动控制逻辑,现在只需要点点鼠标,通过配置完成。本文从实际案例的角度出发,介绍原始的代码逻辑如何转化为引擎规则的过程。一、背景明…

[剑指offer]面试题18:树的子结构

面试题18:树的子结构 题目:输入两棵二叉树A和B,判断B是不是A的子结构。二叉树结点的定义如下: struct BinaryTreeNode {int value;BinaryTreeNode *lchild;BinaryTreeNode *rchild; };代码如下: bool HasSubtree(BinaryTreeNode…

想基于K8s按需扩展应用程序,可从这几方面入手

马修赫瑟(Matthew Heusser)在花费了十年时间进行编程,测试和项目管理之后,Matt Heusser于2011年创立了自己的公司Excelon Development。该协会前董事会成员Matt还是软件测试人员,是德国波茨坦最具影响力的敏捷测试专业…

windows环境下ELK平台搭建

背景 日志系统主要包括系统日志,应用程序日志和安全日志。系统运维和开发人员可以通过日志了解服务器的软件,硬件信息,检查配置过程中的错误以及错误发生的原因。通常分析日志可以了解服务器的负荷,性能安全性,从而及时…

[剑指offer]面试题19:二叉树的镜像

面试题19:二叉树的镜像 题目:请完成一个函数,输入一个二叉树,该函数输出它的镜像。 二叉树结点的定义如下: struct BinaryTreeNode {int value;BinaryTreeNode *lchild;BinaryTreeNode *rchild; };求一棵树的镜像的过…

EntityFramework Core 3.x上下文构造函数可以注入实例呢?

今天讨论的话题来自一位微信好友遇到问题后请求我的帮助,当然他的意图并不是本文标题,只是我将其根本原因进行了一个概括,接下来我们一起来探索标题的问号最终的答案是怎样的呢?老规矩,首先我们定义如下上下文public c…

SpringCloud常见问题总结(一)

Eureka常见问题 Eureka注册服务慢 默认情况,服务注册到Eureka Server 的过程比较慢。在开发或者测试时候,如果能够加速注册的过程,从而提升工作效率。Spring Cloud官方文档详细描述了该问题的原因并提供了解决方案: //原文 Why…

[剑指offer]面试题21:包含min函数的栈

面试题21:包含min函数的栈 题目:定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数。在该栈中,调用min、push及pop的时间复杂度都是O(1)。 栈内压入3、4、2、1之后接连两次弹出栈顶数字…

SpringCloud常见问题总结(二)

Spring Cloud各组件属性配置 SpringCloud中的大部分问题可以使用配置属性来规避, Spring Cloud的配置 Spring Cloud的所有组件配置都在其官方文档的附录中Spring Cloud 整合了很多类库,例如Eureka, Ribbon, Feign等&#xff0c…

IO 模型知多少

1. 引言同步异步I/O,阻塞非阻塞I/O是程序员老生常谈的话题了,也是自己一直以来懵懵懂懂的一个话题。比如:何为同步异步?何为阻塞与非阻塞?二者的区别在哪里?阻塞在何处?为什么会有多种IO模型&am…

[剑指offer]面试题22:栈的压入、弹出序列

面试题22:栈的压入、弹出序列 题目:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1、2、3、4、5 是某栈的压栈序列,序列4、5、3、2、1…

Ubuntu上安装使用Docker

Docker简介 Docker是一个开源的容器引擎,他有助于更快的交付应用。Docker可以将应用程序和基础设施层做隔离,并且能将基础设施当做程序一样进行管理。使用Docker,可以更快的打包,测试以及部署应用程序,并且可以缩短从…

让 .NET 轻松构建中间件模式代码

让 .NET 轻松构建中间件模式代码Intro在 asp.net core 中中间件的设计令人叹为观止,如此高大上的设计何不集成到自己的代码里呢。于是就有了封装了一个简单通用的中间件模板的想法,以后有需要的时候就可以拿来即用。接口定义这里按执行的委托是同步还是异…

[剑指offer]面试题23:从上往下打印二叉树

面试题23:从上往下打印二叉树 题目:从上往下打印出二叉树的每个结点,同一层的结点按照从左到右的顺序打印。例如输入图4.5中的二叉树,则依次打印出8、6、10、5、7、9、11。 二叉树结点的定义如下: struct BinaryTree…

[剑指offer]面试题26:复杂链表的复制

面试题26:复杂链表的复制 题目:请实现函数ComplexListNodeClone(ComplexListNodepHead),复制一个复杂链表。在复杂链表中,每个结点除了有一个m_pNext指针指向下一个结点外,还有一个m_pSibling 指…

SpringCloud + Docker

Dockerfile构建Docker 镜像 注意这里说的Dockerfile是指的一个文本文件,类似txt,只不过名字是Dockerfile,里面编辑Docker的一些指令,指令作用在于描述构建镜像的细节。如下一个简单的案例,用上一节中下载的nginx镜像来…

从编码层面对比java和c#

java和c#都是面向对象编程高级语言,总体上来讲,它们还是很相似的,因为它们在发展过程中都很大程序上学习了对方不少优秀的特性。所以,一般来说,从其中一门语言转换到另外一门语言应该都不会有很大问题。虽然说这两门语…

[剑指offer]面试题28:字符串的排列

面试题28:字符串的排列 题目:输入一个字符串,打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a、b、c所能排列出来的所有字符串abc、acb、bac、bca、cab和cba。 思路: 这是一个典型的递归问题,考虑…