4

Clause 3 (D) of the Microsoft Public License says:

If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license.

So, what are the FSF-approved and OSI-approved licenses that comply with the Microsoft Public License? Can I use a Microsoft Public License library together with 2/3/4-clause BSD, X11 (MIT), Apache 2.0, or MPL 2.0 (with Exhibit B) licensed code to produce an executable which I then distribute to others?

1

1 Answer 1

7

Binary-only distributions

If you make a binary-only distribution (that is, you distribute the program solely "in compiled or object code form" in the words of the License), then the MS-PL says that you may do that, as long as the other license does not require distribution of the source code as well. So, basically it means that the other license cannot be something like (A)GPL or MPL, since those licenses require source code distribution.

The problem with the MS-PL is the condition that if you distribute any portion of the software in source code form, then you may do so "only under this license":

If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license.

However, if you release your program solely in executable form ("in compiled or object code form" in the words of the License itself), then the MS-PL itself says that you may do what you describe in the next sentence ("If you distribute any portion of the software in compiled or object code form, ...).

So, from the licenses you mentioned, using an MS-PL library together with BSD, X11/MIT or Apache 2.0 code would be fine, since those licenses also allow binary-only distributions. MPL 2.0 probably would not work, because that license requires distributing the source code as well; however, see below for a possible technical workaround, if you really want to attempt this.

See also: https://www.gnu.org/licenses/license-list.html#ms-pl

See also: https://www.mend.io/resources/blog/top-10-microsoft-public-license-ms-pl-questions-answered/

Source code distribution

For some programming languages and environments, there may be a technical workaround to deliver the "source code" of the main program (under a license other than MS-PL) while also satisfying the MS-PL license requirement for the MS-PL portions of the program:

If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license.

For programming languages that support combining portions of compiled or object code together with other source code, you could conceivably arrange your project tree in such a way that the MS-PL portions of the code are maintained only in compiled or object code form (for example, only .o files for the C/C++ code, only .class files for compiled Java code, only .pyc files for compiled Python code, and so on).

Such an arrangement would be technically possible, but it would make it very inconvenient to make changes to the MS-PL portions of the main program. Also, such an arrangement would be forbidden by licenses like the GPL, which require releasing the complete corresponding source code of the entire program, including all components.

6
  • What does keeping MS-PL covered part as binary solve? What about having a separate directory and labeling "Code in directory X is licensed under MS-PL, code in directory Y is licensed under MIT"?
    – jpa
    Aug 4 at 17:23
  • @jpa The license says "if you distribute any portion of the [MS-PL-licensed software] in source code form, you may do so only under this license [the MS-PL license]." Putting them in separate directories might be enough, but if you read the MS-PL license's definitions section, especially "contribution", it makes it sound like even separate directories would not be enough -- based on the wording of the license, one could still claim that the other directory is a "contribution" to the MS-PL code and therefore must also be MS-PL-licensed.
    – Brandin
    Aug 5 at 5:49
  • @jpa Thus, by avoiding distribution of any portions of the MS-PL software in source code forms, you can avoid the "you may do so only under this license" condition of the MS-PL.
    – Brandin
    Aug 5 at 6:02
  • Hmm, yeah, the MS-PL license reads quite different from many open source licenses. And very difficult to interpret, like most software licenses.
    – jpa
    Aug 5 at 6:18
  • 1
    @Flux The sentence "If you distribute any portion of the software in compiled or object code form...". Does that clarify it?
    – Brandin
    Aug 7 at 5:15

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.