Skip to content

Commit df1ec4f

Browse files
committed
License updates
1 parent ea55317 commit df1ec4f

File tree

3 files changed

+102
-24
lines changed

3 files changed

+102
-24
lines changed

LICENSE-FAQ.md

+72-20
Original file line numberDiff line numberDiff line change
@@ -4,56 +4,92 @@
44

55
Statiq is licensed differently depending on the particular project:
66

7-
- [Statiq Web](https://github.com/statiqdev/Statiq.Web) and other Statiq applications are dual-licensed under the [License Zero Prosperity Public License](https://licensezero.com/licenses/prosperity) (referred to below as the _Prosperity License_) and the [License Zero Private License](https://licensezero.com/licenses/private) (referred to below as the _Private License_). The Prosperity License limits commercial use to a 32 day trial period, after which a license fee must be paid to obtain a Private License. A [License Zero Waiver](https://licensezero.com/licenses/waiver) (referred to below as a _Waiver_) may also be granted waiving the non-commercial clause of the Prosperity License without requiring the purchase of a Private License. These are granted on a case-by-case basis to friends, family, contributors, folks who do good things in their community, and when the person requesting one makes a compelling case about why the non-commercial clause shouldn’t apply to them.
7+
- [Statiq Web](https://github.com/statiqdev/Statiq.Web) and other Statiq projects
8+
that build on top of [Statiq Framework](https://github.com/statiqdev/Statiq.Framework) are dual-licensed under
9+
a [public license](https://github.com/statiqdev/Statiq.Web/blob/main/LICENSE.md)
10+
for public use and a [private license](https://github.com/statiqdev/Statiq.Web/blob/main/LICENSE-PRIVATE.md)
11+
for commercial use.
12+
Both licenses are similar to other open licenses like MIT with additional restrictions on use.
13+
- The public license limits commercial use to fewer than 10 total individuals
14+
working as employees and independent contractors and less than 100,000 USD total revenue in the prior tax year.
15+
It also has exceptions for non-commercial use and trial use.
16+
- The private license is similar to open licenses such as MIT with additional limits on assignment and sublicensing.
817
- [Statiq Framework](https://github.com/statiqdev/Statiq.Framework) and most other peripheral Statiq projects such as the [web site](https://github.com/statiqdev/statiqdev.github.io) are provided under a permissive MIT open-source license. This scheme is commonly referred to as "[open-core](https://en.wikipedia.org/wiki/Open-core_model)" because the core of the project is available as open-source while expanded capabilities are offered under more restrictive terms.
918

10-
## How much is the license fee for the Private License?
19+
## How much is the license fee for the private license?
1120

12-
The license fee for a Private License is currently $50 per developer, per major version. Obtaining a Private License for a particular major version of Statiq gives you the right to use that major version and all minor and patch versions after it for commercial purposes, forever, across all Statiq projects that are publicly licensed under the Prosperity License. In addition, if a new major version of Statiq is released within a one year grace period of purchasing a Private License, a new Private License covering the newly released major version will be provided. When a new major version of Statiq is released outside your one year grace period, you must obtain a new license to continue using it commercially.
21+
The license fee for a private license is currently $50 per developer, per major version.
22+
Obtaining a private license for a particular major version of Statiq gives you the right
23+
to use that major version and all minor and patch versions after it for commercial purposes,
24+
forever, across all Statiq projects that are publicly licensed under the public license.
25+
In addition,
26+
if a new major version of Statiq is released within a one year grace period of purchasing a private license,
27+
a new private license covering the newly released major version will be provided.
28+
When a new major version of Statiq is released outside your one year grace period,
29+
you must obtain a new license to continue using it commercially.
1330

14-
**Note that only commercial use requires a license**. If you are not using Statiq Web or other Statiq projects licenses under the Prosperity License commercially you don't need a Private License or Waiver. Other than the non-commercial clause, the Prosperity License is essentially the same as any other permissive open-source license.
31+
**Note that only commercial use requires a license**. If you are only using Statiq Framework or are using Statiq Web or other Statiq projects that are licensed under the public license but aren't exceeding the small business thresholds of employees and revenue, you don't need a private license. Other than the small business employee and revenue clause, the public license is essentially the same as any other permissive open-source license. Explicit exceptions are also provided in the public license for non-commercial and trial use to make that distinction clear.
1532

1633
## I still have concerns about the vagueness and lack of legalese in the license.
1734

18-
The simplicity of the license is intentional. It uses [flipped form](https://flippedform.com/) in everyday English specifically to make it easier for laypeople to understand and agree to. An individual developer shouldn't have to enlist a lawyer every time they need to decide if they can use an open source project. Likewise, open source projects should be free to choose more sophisticated licenses without resulting in such legal review for users. Making all projects stick to traditional OSI/FSF licenses that cannot apply restrictions on use greatly limits the ability of projects to identify and use sustainability and funding strategies that work for them.
35+
The simplicity of the license is intentional.
36+
It uses everyday English specifically to make it easier for laypeople to understand and agree to.
37+
An individual developer shouldn't have
38+
to enlist a lawyer every time they need to decide if they can use an open source project.
39+
Likewise,
40+
open source projects should be free to choose more sophisticated licenses
41+
without resulting in complex legal review for users.
42+
Making all projects
43+
adhere to traditional OSI/FSF licenses that cannot apply restrictions on use greatly limits the ability of projects
44+
to identify and use sustainability and funding strategies that work for them.
1945

20-
Here's the thing: I get it. The license is short and in the absence of lots of comforting legal jargon, how can it possibly be sound? If you don't agree that simple [flipped form](https://flippedform.com/) licenses provide the necessarily legal protections, how about this:
21-
22-
> I, David Glick (alias Dave Glick), hereby proclaim henceforth that no legal suit, pantsuit, or leisure suit shall be brought against any persons or animals engaged in the use of this software without exclusion, all jams and jellies preserved.
23-
24-
In short, **I won't sue you**. The license is primarily designed to express intent. The intent is that if you are commercially benefiting from the work that I've performed, I would like to share in that prosperity. If the language of the license combined with my assurances here does not provide you adequate legal protection, then I suggest you either purchase a Private License which removes all uncertainty and/or [make suggestions on how to improve the Prosperity Public License](https://github.com/licensezero/prosperity-public-license).
46+
Here's the thing: I get it. The license is short and in the absence of lots of comforting legal jargon, how can it possibly be sound? If you don't agree that simple licenses provide the necessarily legal protections, how about this: **I won't sue you**. The license is primarily designed to express intent. The intent is that if you are commercially benefiting from the work that I've performed, I would like to share in that prosperity. If the language of the license combined with my assurances here does not provide you adequate legal protection, then I suggest you purchase a private license which removes uncertainty.
2547

2648
## What if I want to use Statiq on a server?
2749

2850
That's fine as long as all developers that created and provisioned everything have a license.
2951

3052
## What if I work for a non-profit?
3153

32-
The Prosperity License addresses that directly (one of the reasons I like it):
54+
The public license addresses that directly:
3355

34-
> Use by any charitable organization, educational institution, public research organization, public safety or health organization, environmental protection organization, or government institution doesn't count as use for a commercial purpose regardless of the source of funding or obligations resulting from the funding.
56+
> Use by any charitable organization, educational institution,
57+
public research organization, public safety or health
58+
organization, environmental protection organization,
59+
or government institution is use for a permitted purpose
60+
regardless of the source of funding or obligations resulting
61+
from the funding.
3562

3663
## Do content writers and other people that work on the inputs to the tool need licenses?
3764

38-
No. Unless the user is running Statiq directly, using Statiq Web in a library or application, or instructing a server how to run Statiq they do not need a license because they are not a "user" of the project. It's expected that at least one person in each entity subject to the non-commercial clause would require a license.
65+
No.
66+
Unless the user is running Statiq directly, using Statiq Web in a library or application,
67+
or instructing a server how to run Statiq they do not need a license because they are not a "user" of the project.
68+
It's expected that at least one person in each entity subject to the small business clause would require a license.
3969

40-
## What software does the Private License cover?
70+
## What software does the private license cover?
4171

42-
The Private License granted upon paying the license fee covers all software and projects under the Statiq organization that are licensed under the Prosperity License and require licensing. For example, it grants you the right to use both Statiq Web and Statiq Docs for commercial purposes. Statiq Framework, official themes, and other extensions are often licensed under more permissive terms and don't require a Private License in any case.
72+
The private license
73+
granted upon paying the license fee covers all software and projects under the Statiq organization.
74+
For example, it grants you the right to use both Statiq Web and Statiq Docs for commercial purposes.
75+
Statiq Framework, official themes,
76+
and other extensions are often licensed under more permissive terms and don't require a private license in any case.
4377

44-
There are no other additional rights or privileges granted under the Private License. Specifically, it does not guarantee enhanced (or even any) support or priority issue resolution.
78+
There are no other additional rights or privileges granted under the private license. Specifically, it does not guarantee enhanced (or even any) support or priority issue resolution.
4579

4680
## You mean after I pay the license fee I don't get support?
4781

4882
That's correct. This is still a notionally open-source project and a small licensing fee does not cover an increased support burden. That said, I do my best to respond to every support request eventually (if not right away).
4983

5084
## If I purchase a license, do other users of the application I built with Statiq also require one?
5185

52-
No. In general the Private License includes provisions for sublicensing to your users as long as they don't then use the tools to create their own software.
86+
No. In general the private license includes provisions for sublicensing to your users as long as they don't then use the tools to create their own software.
5387

5488
## But this isn't actually open-source!
5589

56-
You're correct, at least for the "official" definition of open source. Both the [Free Software Foundation](https://www.gnu.org/philosophy/free-sw.en.html) and the [Open Source Initiative](https://opensource.org/osd-annotated) explicitly exclude software that contains limits on use from the definition of "open source". For this reason, the Prosperity License this project uses is not, and likely never will be, an OSI-approved license.
90+
You're correct, at least for the "official" definition of open source.
91+
Both the [Free Software Foundation](https://www.gnu.org/philosophy/free-sw.en.html) and the [Open Source Initiative](https://opensource.org/osd-annotated) explicitly exclude software that contains limits on use from the definition of "open source".
92+
For this reason, the public license this project uses is not, and likely never will be, an OSI-approved license.
5793

5894
I understand that "free software" and "open source" generate a lot of feelings. If you prefer to call this project proprietary because of the way it's licensed, so be it. This is _"a proprietary project with freely available source code that can be used without restriction for non-commercial purposes and that engages with its community of users and accepts and encourages their contributions to source code, documentation, and support when they feel it's in their best interest to do so"_. Call that model whatever you want.
5995

@@ -67,10 +103,26 @@ There's also a practical matter in that copyleft licenses only work well with li
67103

68104
## I want to contribute, why do you make me sign a CLA?
69105

70-
When an open source project uses a non-permissive license the question of how to deal with contributions comes up. A contributor license agreement (CLA) clarifies what will happen to the contributed code and requires the contributor to agree to it, waiving some of their own copyrights in the process. It's unfortunate and does add a burden to the contribution process but it's necessary to ensure the entire project stays properly licensed and contributions can be licensed under the terms of the Prosperity License _and_ the Private License. [Statiq's Contributor Agreement](https://gist.github.com/daveaglick/c7cccacdf7f3d57d05462a64d578d0a5) is designed to be as simple as possible while granting the broadest rights to the project under a non-exclusive agreement (it was developed using [Contributor Agreements](http://contributoragreements.org/) and then slightly modified).
106+
When an open source project uses a non-permissive license the question of how to deal with contributions comes up.
107+
A contributor license agreement (CLA)
108+
clarifies what will happen to the contributed code and requires the contributor to agree to it,
109+
waiving some of their own copyrights in the process.
110+
It's unfortunate and does add a burden to the contribution process
111+
but it's necessary to ensure the entire project stays properly licensed and contributions
112+
can be licensed under the terms of the public license _and_ the private license.
113+
Statiq's Contributor Agreement](https://gist.github.com/daveaglick/c7cccacdf7f3d57d05462a64d578d0a5) is designed
114+
to be as simple as possible while granting the broadest rights to the project under a non-exclusive agreement
115+
(it was developed using [Contributor Agreements](http://contributoragreements.org/) and then slightly modified).
71116

72117
I hope that you understand why a CLA is needed and that it doesn't keep you from contributing. That said, you need to decide if you derive enough value from submitting a contribution (such as adding support for a feature you need) to agree to the terms of the CLA. If not then I would caution you not to undertake performing work on the project.
73118

74119
## What about the contributions back when Statiq was Wyam?
75120

76-
Wyam was licensed under a permissive MIT license and so all contributions prior to the release of Statiq would have also fallen under that license. To put it another way, the MIT licensing of the project meant that anyone, including the project itself, could come along, take the code, and do whatever they wanted with it including re-licensing or charging for it. I'm more than happy to grant a Waiver to anyone who previously contributed to Wyam and would like to remove the non-commercial clause of the Prosperity License.
121+
Wyam was licensed under a permissive MIT license
122+
and so all contributions prior to the release of Statiq would have also fallen under that license.
123+
To put it another way, the MIT licensing of the project meant that anyone,
124+
including the project itself, could come along,
125+
take the code, and do whatever they wanted with it including re-licensing or charging for it.
126+
I'm more than happy
127+
to grant a Waiver to anyone who previously contributed to Wyam
128+
and would like to remove the non-commercial clause of the public license.

README.md

+2
Original file line numberDiff line numberDiff line change
@@ -16,4 +16,6 @@ Statiq Framework is a flexible and extensible static content generation framewor
1616

1717
Statiq Framework is licensed under the MIT License and is open source software.
1818

19+
Note that projects which build on Statiq Framework such as [Statiq Web](https://github.com/statiqdev/Statiq.Web) and [Statiq Docs](https://github.com/statiqdev/Statiq.Docs) have different licenses.
20+
1921
Please see the [licensing FAQs](LICENSE-FAQ.md) for more information.

src/core/Statiq.App/Bootstrapper/BootstrapperPipelineExtensions.cs

+28-4
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,31 @@ namespace Statiq.App
88
public static class BootstrapperPipelineExtensions
99
{
1010
/// <summary>
11-
/// Adds a pipeline of type <typeparamref name="TPipeline"/>.
11+
/// Registers a pipeline of type <typeparamref name="TPipeline"/>.
1212
/// </summary>
13+
/// <remarks>
14+
/// Note that this method registers the pipeline with the dependency injection container
15+
/// which the engine uses to populate the initial set of pipelines on instantiation. Therefore
16+
/// any pipelines added through this method will take effect before anything that happens in
17+
/// <c>ConfigureEngine()</c>, even if the call to this method is after the call to that one.
18+
/// To add pipelines after <c>ConfigureEngine</c> is called you will need to manipulate the
19+
/// <see cref="IEngine.Pipelines"/> collection directly.
20+
/// </remarks>
1321
public static Bootstrapper AddPipeline<TPipeline>(this Bootstrapper bootstrapper)
1422
where TPipeline : IPipeline =>
1523
bootstrapper.ConfigureServices(x => x.AddSingleton(typeof(IPipeline), typeof(TPipeline)));
1624

1725
/// <summary>
18-
/// Adds a pipeline of type <typeparamref name="TPipeline"/> with the specified name.
26+
/// Registers a pipeline of type <typeparamref name="TPipeline"/> with the specified name.
1927
/// </summary>
28+
/// <remarks>
29+
/// Note that this method registers the pipeline with the dependency injection container
30+
/// which the engine uses to populate the initial set of pipelines on instantiation. Therefore
31+
/// any pipelines added through this method will take effect before anything that happens in
32+
/// <c>ConfigureEngine()</c>, even if the call to this method is after the call to that one.
33+
/// To add pipelines after <c>ConfigureEngine</c> is called you will need to manipulate the
34+
/// <see cref="IEngine.Pipelines"/> collection directly.
35+
/// </remarks>
2036
public static Bootstrapper AddPipeline<TPipeline>(this Bootstrapper bootstrapper, string name)
2137
where TPipeline : class, IPipeline
2238
{
@@ -31,8 +47,16 @@ public static Bootstrapper AddPipeline<TPipeline>(this Bootstrapper bootstrapper
3147
}
3248

3349
/// <summary>
34-
/// Adds all pipelines defined in <typeparamref name="TParent"/>.
50+
/// Registers all pipelines defined in <typeparamref name="TParent"/>.
3551
/// </summary>
52+
/// <remarks>
53+
/// Note that this method registers the pipeline with the dependency injection container
54+
/// which the engine uses to populate the initial set of pipelines on instantiation. Therefore
55+
/// any pipelines added through this method will take effect before anything that happens in
56+
/// <c>ConfigureEngine()</c>, even if the call to this method is after the call to that one.
57+
/// To add pipelines after <c>ConfigureEngine</c> is called you will need to manipulate the
58+
/// <see cref="IEngine.Pipelines"/> collection directly.
59+
/// </remarks>
3660
public static Bootstrapper AddPipelines<TParent>(this Bootstrapper bootstrapper) =>
3761
bootstrapper.AddPipelines(typeof(TParent));
3862

@@ -625,4 +649,4 @@ private enum PipelineType
625649
Deployment
626650
}
627651
}
628-
}
652+
}

0 commit comments

Comments
 (0)