Simple Public License (SimPL)

Preamble

This Simple Public License 2.0 (SimPL 2.0 for short) is a plain language implementation of GPL 2.0.  The words are different, but the goal is the same - to guarantee for all users the freedom to share and change software.  If anyone wonders about the meaning of the SimPL, they should interpret it as consistent with GPL 2.0.

Simple Public License (SimPL) 2.0

The SimPL applies to the software's source and object code and comes with any rights that I have in it (other than trademarks). You agree to the SimPL by copying, distributing, or making a derivative work of the software.

You get the royalty free right to:

- Use the software for any purpose;
- Make derivative works of it (this is called a "Derived Work");
- Copy and distribute it and any Derived Work.

If you distribute the software or a Derived Work, you must give back to the community by:

- Prominently noting the date of any changes you make;
- Leaving other people's copyright notices, warranty disclaimers, and license terms  in place;
- Providing the source code, build scripts, installation scripts, and interface definitions in a form that is easy to get and best to modify;
- Licensing it to everyone under SimPL, or substantially similar terms (such as GPL 2.0), without adding further restrictions to the rights provided;
- Conspicuously announcing that it is available under that license.

There are some things that you must shoulder:

- You get NO WARRANTIES. None of any kind;
- If the software damages you in any way, you may only recover direct damages up to the amount you paid for it (that is zero if you did not pay anything). You may not recover any other damages, including those called "consequential damages." (The state or country where you live may not allow you to limit your liability in this way, so this may not apply to you);

The SimPL continues perpetually, except that your license rights end automatically if:

- You do not abide by the "give back to the community" terms (your licensees get to keep their rights if they abide);
- Anyone prevents you from distributing the software under the terms of the SimPL.

License for the License

You may do anything that you want with the SimPL text; it's a license form to use in any way that you find helpful.  To avoid confusion, however, if you change the terms in any way then you may not call your license the Simple Public License or the SimPL (but feel free to acknowledge that your license is "based on the Simple Public License").
