112 lines
5.7 KiB
Markdown
112 lines
5.7 KiB
Markdown
[Documentation](../../README.md#documentation) → Introduction → Author and License
|
|
|
|
-----
|
|
|
|
[Читать на русском](author.ru.md)
|
|
|
|
# Author and License
|
|
|
|
Copyright (c) Vitaliy Filippov (vitalif [at] yourcmc.ru), 2019+
|
|
|
|
Join Vitastor Telegram Chat: https://t.me/vitastor
|
|
|
|
License: VNPL 1.1 for server-side code and dual VNPL 1.1 + GPL 2.0+ for client tools.
|
|
|
|
Server-side code is licensed only under the terms of VNPL.
|
|
|
|
Client libraries (cluster_client and so on) are dual-licensed under the same
|
|
VNPL 1.1 and also GNU GPL 2.0 or later to allow for compatibility with GPLed
|
|
software like QEMU and fio.
|
|
|
|
## VNPL
|
|
|
|
Vitastor Network Public License 1.1 (VNPL 1.1) is a copyleft license based on
|
|
GNU GPLv3.0 with the additional "Network Interaction" clause which requires
|
|
opensourcing all programs directly or indirectly interacting with Vitastor
|
|
through a computer network and expressly designed to be used in conjunction
|
|
with it ("Proxy Programs"). Proxy Programs may be made public not only under
|
|
the terms of the same license, but also under the terms of any GPL-Compatible
|
|
Free Software License, as listed by the Free Software Foundation.
|
|
This is a stricter copyleft license than the Affero GPL.
|
|
|
|
The idea of VNPL is, in addition to modules linked to Vitastor code in a single
|
|
binary file, to extend copyleft action to micro-service modules only interacting
|
|
with it over the network.
|
|
|
|
Basically, you can't use the software in a proprietary environment to provide
|
|
its functionality to users without opensourcing all intermediary components
|
|
standing between the user and Vitastor or purchasing a commercial license
|
|
from the author 😀.
|
|
|
|
At the same time, VNPL doesn't impose any restrictions on software *not specially designed*
|
|
to be used with Vitastor, for example, on Windows running inside a VM with a Vitastor disk.
|
|
|
|
## Explanation
|
|
|
|
Network copyleft is governed by the clause **13. Remote Network Interaction** of VNPL.
|
|
|
|
A program is considered to be a "Proxy Program" if it meets both conditions:
|
|
- It is specially designed to be used with Vitastor. Basically, it means that the program
|
|
has any functionality specific to Vitastor and thus "knows" that it works with Vitastor,
|
|
not with something random.
|
|
- It interacts with Vitastor directly or indirectly through any programming interface,
|
|
including API, CLI, network or any wrapper (also considered a Proxy Program itself).
|
|
|
|
If, in addition to that:
|
|
- You give any user an apportunity to interact with Vitastor directly or indirectly through
|
|
any computer interface including the network or any number of wrappers (Proxy Programs).
|
|
|
|
Then VNPL requires you to publish the code of all above Proxy Programs to all above users
|
|
under the terms of any GPL-compatible license - that is, GPL, LGPL, MIT/BSD or Apache 2,
|
|
because "GPL compatibility" is treated as an ability to legally include licensed code in
|
|
a GPL application.
|
|
|
|
So, if you have a "Proxy Program", but it's not open to the user who directly or indirectly
|
|
interacts with Vitastor - you are forbidden to use Vitastor under the terms of VNPL and you
|
|
need a commercial license which doesn't contain open-source requirements.
|
|
|
|
## Examples
|
|
|
|
- Vitastor Kubernetes CSI driver which creates PersistentVolumes by calling `vitastor-cli create`.
|
|
- Yes, it interacts with Vitastor through vitastor-cli.
|
|
- Yes, it is designed specially for use with Vitastor (it has no sense otherwise).
|
|
- So, CSI driver **definitely IS** a Proxy Program and must be published under the terms of
|
|
a free software license.
|
|
- Windows, installed in a VM with the system disk on Vitastor storage.
|
|
- Yes, it interacts with Vitastor indirectly - it reads and writes data through the block
|
|
device interface, emulated by QEMU.
|
|
- No, it definitely isn't designed specially for use with Vitastor - Windows was created long
|
|
ago before Vitastor and doesn't know anything about it.
|
|
- So, Windows **definitely IS NOT** a Proxy Program and VNPL doesn't require to open it.
|
|
- Cloud control panel which makes requests to Vitastor Kubernetes CSI driver.
|
|
- Yes, it interacts with Vitastor indirectly through the CSI driver, which is a Proxy Program.
|
|
- May or may not be designed specially for use with Vitastor. How to determine exactly?
|
|
Imagine that Vitastor is replaced with any other storage (for example, with a proprietary).
|
|
Do control panel functions change in any way? If they do (for example, if snapshots stop working),
|
|
then the panel contains specific functionality and thus is designed specially for use with Vitastor.
|
|
Otherwise, the panel is universal and isn't designed specially for Vitastor.
|
|
- So, whether you are required to open-source the panel also **depends** on whether it
|
|
contains specific functionality or not.
|
|
|
|
## Why?
|
|
|
|
Because I believe into the spirit of copyleft (Linux wouldn't become so popular without GPL!)
|
|
and, at the same time, I want to have a way to monetize the product.
|
|
|
|
Existing licenses including AGPL are useless for it with an SDS - SDS is a very deeply
|
|
internal software which is almost definitely invisible to the user and thus AGPL doesn't
|
|
require anyone to open the code even if they make a proprietary fork.
|
|
|
|
And, in fact, the current situation in the world where GPL is though to only restrict direct
|
|
linking of programs into a single executable file, isn't much correct. Nowadays, programs
|
|
are more often linked with network API calls, not with /usr/bin/ld, and a software product
|
|
may consist of dozens of microservices interacting with each other over the network.
|
|
|
|
That's why we need VNPL to keep the license sufficiently copyleft.
|
|
|
|
## License Texts
|
|
|
|
- VNPL 1.1 in English: [VNPL-1.1.txt](../../VNPL-1.1.txt)
|
|
- VNPL 1.1 in Russian: [VNPL-1.1-RU.txt](../../VNPL-1.1-RU.txt)
|
|
- GPL 2.0: [GPL-2.0.txt](../../GPL-2.0.txt)
|