The substrate /client/* and sc-* code is licenced under GPL3.

GPL3 contains this clause (emphasis mine):

5. Conveying Modified Source Versions.

You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions:

a) ..

b) ..

c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it.

d) ..

Is the /client/* and sc-* code fundamental to the operation of a substrate node (seems to be from my reading)?

Does this mean that if someone uses substrate (with /client/* and sc-* code) then their entire project must become GPL3?

See also:

How should we choose a license?

2 Answers 2


Any software distributed which builds upon the Substrate Client part of the codebase must have its source code published as per GPLv3.

Substrate Frame and the Substrate Primitives are licensed under Apache, implying that software building upon only those (and not relying on changes to the Substrate Client) would not need to have its source code published.

Basically, if you're just using Substrate to launch your own chain with some new business logic in the runtime, then you're under the very permissive Apache license. However, if you're making underlying improvements to the internals of Substrate then they should make their way back into the Substrate community.

Currently when altering the runtime, you do generally need to rebuild a binary which includes both the new runtime and the old client code, potentially implying the creation of what the GPL calls a "derivate work". This is legally untested and in this case I personally would probably argue otherwise since the runtime essentially functions as an "input programme" to the client, in much the same way as an interpreter accepts code to run without it being considered a derivative work.


Yes, any project that uses GPL3 licensed code (i.e. is a "derivative work") must in turn be GPL3 licensed. The exact definition of what constitutes a "derivative work" has not been thoroughly tested in courts, but the most common understanding is that linking your own code with GPL3 code means that your own code must also be GPL3. Put differently, if your project can be distributed separately from /client/* and sc-* then it would not be required to be GPL3 but I don't see how that is possible in Rust today.

This property of GPL is why it is often referred to as a "viral" license: it propagates.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

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