KiCad Library License and design-local libraries

The KiCad Libraries License says the following:

Use of the library data in a project does not (by itself) require that the design or any files generated from the design are licensed under the CC-BY-SA 4.0 License. You are free to use the library data in your own projects without the obligation to share your project files under this or any other license agreement.

However, if you wish to redistribute the KiCad libraries, or parts thereof (including in modified form) as a collection then the exception above does not apply. Redistributed library collections must be shared under the same license agreement. Under these circumstances, the libraries must also retain attribution information, including the license documents which are distributed with the library files.

If I include individual symbols from the official KiCad libraries inside of a design-local library, are these symbols still subject to the exception in the KiCad Library License? e.g.

my-project/
└── LICENSE (CERN-OHL-P, MIT, etc)
└── my-project.kicad_sch
└── my-project.kicad_pcb
└── my-library/
    └── LICENSE <-- Is KiCad Library License Required?
    └── my-library.kicad_sym (contains some symbols from the official KiCad libraries)

In this case, I would be distributing the design-local library as part of a “project”, but it’s not clear to me if a design-local library is considered “redistributing the KiCad libraries”.

My understanding is that as long as the symbols/footprints are used in the design then you are just distributing design files, not kicad library and you don’t need to include license.

But I’m not a layer.

Also not a lawyer, but per conversation with the team: Symbols/footprints embedded within your design are part of your design. A project-local library that you distribute next to your design is not part of your design. The exception would be the symbol cache libraries used in KiCad 5.1 and earlier; these are technically part of the schematic and not a stand-alone library.

So: KiCad library symbols that are automatically copied into a cache library for your project in 5.1 and before: fall under your project’s license per the license exception.

KiCad library symbols that you copy into a different library file and then distribute with your project: do not fall under the exception and must be distributed under the original license.

I am not sure why you would want to do the second thing in 5.99/6.0, but if you did, I would not recommend doing so (or if you do, I would not recommend mixing in other symbols that weren’t from the KiCad libraries and may have different license terms)

2 Likes

@craftyjon thanks for the clarification on this. As you also mentioned here, it sounds like the license exception is really only valid while the symbol/footprint data is embedded inside the design files.

I am not sure why you would want to do the second thing in 5.99/6.0, but if you did, I would not recommend doing so (or if you do, I would not recommend mixing in other symbols that weren’t from the KiCad libraries and may have different license terms)

I’m trying to figure out how to publish a design as OSHW in a way that also includes the libraries so others can modify/remix/contribute to the project (including contributing changes to the library used in the design).

Some context:

I have been building up a KiCad library where some of the symbols/footprints in my library are modified derivatives of symbols/footprints from the official KiCad libraries. This library is currently used in multiple PCB designs. I include this library as a git submodule under each design so that I can maintain the library in one place and easily sync library changes to each in-progress design. Keeping the library checked in as a git submodule guarantees that when I clone the project in the future, I’ll also get a copy of the library at the exact revision that was used to create the design. In other words, I want to be able to git clone --recurse-submodules and have a fully portable copy of my project including all the libraries used to create it (no dependencies on libraries that come bundled with KiCad installer).

Now, I’m trying to figure out how to publish some of these designs as OSHW on GitHub/GitLab/etc in a way that easily enables others to contribute/remix that design. In order for other people to be able to contribute/remix the project, they need to have access to the libraries in addition to the schematic/layout (if they don’t have easy access to the source libraries, I don’t really think the design fulfils the spirit of OSHW). I was hoping to publish my PCB designs and the library under the CERN-OHL-P license, but the fact that the library would have to be published as a separate stand-alone repository requires that I publish it under the original KiCad libraries license.

In my original question above, I was trying to see if I instead just created a separate design-local library for each design, and only included the symbols/footprints that were actually used in that design, whether I could release the entire project under the CERN-OHL-P license. From your response, it sounds like that’s not possible.

However, it sounds like as long as I publish my library repository under the KiCad Libraries License, I can include it as a public submodule in a project published under a different license:

my-library/
└── LICENSE (KiCad Library License)
└── my-library.kicad_sym (contains some modified symbols from the official KiCad libraries)

my-project/
└── LICENSE (CERN-OHL-P)
└── my-project.kicad_sch
└── my-project.kicad_pcb
└── my-library/ <-- git submodule
    └── LICENSE (KiCad Library License)
    └── my-library.kicad_sym

Hopefully that all made sense. If you see any legal/licensing issues with this approach, LMK.

Just providing the schematic and layout files (since you are using the 6.0 format) is sufficient that people who have access to your design will be able to further remix your design. You do not need to also provide a separate library for this purpose since with the 6.0 file formats, the symbols and footprints are embedded in the design.

I think this looks good (as long as my-library.kicad_sym only contains symbols originally licensed under the KiCad Library License), but I’m not sure it’s necessary. If this were my project, I would release it without the library files. People will still be free to modify (further remix) the design.

You do not need to also provide a separate library for this purpose since with the 6.0 file formats, the symbols and footprints are embedded in the design […] If this were my project, I would release it without the library files. People will still be free to modify (further remix) the design.

I guess I’m trying to imagine how this would work in the case where multiple people are collaborating on an OSHW design. If somebody else clones the design and wants to extend it without having access to the library, the symbols/footprints embedded in the design files wont show up in the “Add Symbol”/“Add Footprint” dialogs for them, right? I guess if they needed to place more instances of those symbols, they could just copy/paste from an existing one in the editor (although if you deleted the original symbol and then wanted to place it again, I don’t know if there is an easy way to get it back).

I think the distinction I’m making is more about highlighting how difficult it is to collaborate on a design when the libraries are not shared vs. just ensuring that the schematic/board can be opened successfully by another person in the future. If the design is public but the library is not, others can clone & modify the design, but they can’t easily contribute back any of their changes to the library used by the design.

For example, imagine if a collaborator clones the design and notices a silkscreen bug in one of the footprints. If the library is not accessible to all collaborators, they can’t easily submit a PR to fix the footprint in the library so that everybody who uses that footprint on the design moving forward will have the fixed version.

Since you are distributing this project using an open-source license, it might make the most sense to just include the KiCad libraries license with any KiCad-based libraries that you create.

If you insist on CERN license for your contributions, then you would only need to make multiple library files, one with the KiCad footprints/symbols and one with your CERN-licensed ones.

In this case, I think the best option is to maintain separate libraries where you keep any symbols that you used but modified from the upstream KiCad libraries (and include the appropriate license, as you showed in your example). You should have one set of libraries with modified KiCad symbols/footprints, and another with any symbols/footprints that you make from scratch.

Thanks guys, sounds like splitting out separate libraries and using the KiCad libraries license for anything derived from the official libraries is the safe way to go.

The most problematic detail is that when a component is added normally through the schematic, even copypasting from an existing symbol doesn’t allow adding it automatically to the layout if the footprint library isn’t available. The user has to either copy the footprint, too, and link it manually to the symbol, or to extract the similar footprint from the board to a library. That’s why it’s reasonable to have at least every footprint in a project local footprint library. There’s also a wishlist issue for making a project truly standalone, but I can’t find it right now.


As for licencing – I think it’s another problem that licences can’t be embedded to library files/component descriptions.

(BTW, there’s the same problem with the new icons. KiCad run into licencing problem because the original files didn’t include copyright and licencing information. Now KiCad continues that same problem with the new icon set. If someone wants to reuse even one file they must remember to copy the copyright and licencing information externally and share it with the icon. Which can lead them to the same situation where KiCad just was. And this can happen with libraries, too.)

If the use-case is collaborating on a design in the open using Git, sure, this makes sense.

I’m not sure what you mean here, license information is embedded into the icon source files, and the attribution info is in-tree.

Well, yeah. That’s the terms of the license. That’s the case if you want to reuse a lot of open-source stuff.

By the way:

The user has to either copy the footprint, too, and link it manually to the symbol, or to extract the similar footprint from the board to a library.

Maybe you know this already, but Roberto’s changes to how annotation can work in V6 make it so that this manual process is actually quite easy. It was a real pain in V5, but these days the copy/paste on both sides approach works very well.

This is a good point that I haven’t seen mentioned yet. Can you open an issue on Gitlab so that we can address it in v7?

1 Like

Oh, yeah, this would be nice to have. I just came across https://reuse.software when looking for ways to properly support multiple licenses in the same project/repo. Might be one way to address this in the meantime before licenses can be embedded in the files (see https://reuse.software/tutorial/#binary-and-uncommentable-files)

Ah, the last time I looked, I didn’t find it in some file(s). Now there’s pretty detailed licencing info in the source svg files, at least in “about.svg”. I would appreciate having also the copyright owner info there.

Maybe https://gitlab.com/kicad/code/kicad/-/issues/2007#note_476710214 is relevant?

I added an issue here https://gitlab.com/kicad/code/kicad/-/issues/9731

2 Likes

This topic was automatically closed 90 days after the last reply. New replies are no longer allowed.