# BSD style Open Source alternatives to CMSIS?

Since the licenses on CMSIS is unclear when it comes to open source, it is probably a violation to include the CMSIS in a open source project regardless if it using a GPL or BSD style license.

Is there any CMSIS alternative out there for the Cortex M based MCU:s out there that is compatible with a BSD or Apache2.0 license?

Or does anyone know if it is ok to include the CMSIS in a open source project?

Thanks

Many of the CMSIS software components are now released under a BSD license.

In the official CMSIS package, this is the relevant content of the "CMSIS END USER LICENCE AGREEMENT.pdf":

The package also includes the components contained in the following directories:
(a) ./CMSIS/DSP_Lib - DSP Library sources and examples;
(B) ./CMSIS/Include - Header files;
(c) ./CMSIS/Lib - DSP Library build for various toolchains;
(d) ./CMSIS/RTOS - Header file template for CMSIS-RTOS implementation; and
(e) ./Device - Template files and implementations for Cortex-M class processors.

All of the above components are licensed to you under the terms of the BSD licence,
which is incorporated within or alongside the above components.


We are using many of these CMSIS software components in the open source, Apache licensed, mbed SDK: http://mbed.org/blog/entry/CMSIS-Components-BSD-Licensed/

From the reading the current CMSIS 2.0 license, it seems the intention is not to prevent you from developing your software as open-source or otherwise, but more about covering ARM's ass. I.e. they want to make sure that you don't claim ownership of the code itself or any IP that might be in it, and also that it's used to develop code complying to CMSIS and not for some other purpose.

1. Subject to the provisions of Clauses 2, 3, 4 and 5, ARM hereby grants to you under any intellectual property that is (a) owned or freely licensable by ARM without payment to unaffiliated third parties and (b) either embodied in either or both the Source Code and Specification, as applicable, or Necessary (defined in Clause 4 below) to copy or implement an applications binary interface compliant with the Specification, a perpetual, non-exclusive, non-transferable, royalty free, worldwide licence to:
(i)       use and copy the Specification for the purpose of developing, having developed, manufacturing, having manufactured, offering to sell, selling, supplying or otherwise distributing products which comply with the Specification;
(ii)       use, copy, modify and sublicence the Source Code (in source or object code form) solely for the purpose of developing, having developed, manufacturing, having manufactured, offering to sell, selling, supplying or otherwise distributing products which comply with the Specification, provided that you preserve all copyright notices included in the Source Code.

2. The Source Code and Specification are owned by ARM or its licensors and are protected by copyright laws and international copyright treaties as well as other intellectual property laws and treaties. The Source Code and Specification are licensed not sold. Except as specifically licensed in accordance with Clause 1, you acquire no right, title or interest in the Source Code and Specification or any intellectual property embodied therein. In no event shall the licences granted in accordance with Clause 1 be construed as granting you, expressly or by implication, estoppel or otherwise, a licence to use any ARM technology except the Source Code and Specification. Except as provided in Clause 1, no right is granted to you to sublicense the rights granted to you under this Licence.

That said, if you're still uncomfortable with those terms, you can just take the datasheet and make the headers yourself. Guys from microbuilder.eu has done just that, and released their LPC1114 and LPC1343 codebase under BSD.

• nice links to microbuilder.eu and those project. – Johan Apr 13 '11 at 19:38
• @Johan, they have 13xx codebase also: code.google.com/p/lpc1343codebase – max taldykin Apr 14 '11 at 10:30

I don't think there is a problem. The individual files have this statement:

"* ARM Limited (ARM) is supplying this software for use with Cortex-M * processor based microcontrollers. This file can be freely distributed * within development tools that are supporting such ARM based processors."

and I don't see anything in the license that precludes it, either.

There is a gcc directory in the CMSIS distribution, which implies that it can be supplied with open-source tools.

This statement:

(i) use and copy the CMSIS Specification for the purpose of developing, having developed, manufacturing, having manufactured, offering to sell, selling, supplying or otherwise distributing products that comply with the CMSIS Specification, provided that you preserve any copyright notices which are included with, or in, the CMSIS Specification and provided that you do not use ARM's name, logo or trademarks to market such products;

implies that you can incorporate CMSIS in your open source project.

• But is a open source project a "development tool"? Let's say I'm writing a open source blinky program, and push that code onto github. Can that really be defined as be "distributed within development tools"? – Johan Apr 13 '11 at 15:40
• And down at "(iii) use, copy, modify and sublicense the Example Code". I think the magic word is sublicense, since that must mean that I can modify and redistribute with a open source license? – Johan Apr 13 '11 at 16:36
• The important part is 'for use with Cortex-M *'. Chip makers want you to use their chips! The license permits this - as you noticed in subpoint iii. The important part is that anything you sell with it or any sublicensing you do must incorporate ARM Cortex * chips. So just don't modify the files to work with an MSP430 and redistribute them and you're fine. – AngryEE Apr 14 '11 at 0:23
• I believe the first quote is absolutely against GPL (in spirit) as it limits your freedom to use and distribute the software. – XTL Jan 14 '14 at 5:41