nsreed / ouronote

Real-time collaborative whiteboard web app built with Angular, GUN, and paper.js.
17 stars 1 forks source link

Open Source License Review - Why AGPLv3? #35

Open ultimape opened 2 years ago

ultimape commented 2 years ago

Why AGPLv3?

ouronote is for everyone.

The GNU Affero General Public License is a software license provided by the Free Software Foundation. It is a version of the General Public License that includes clauses about providing the source code to users of a product, even if the software is accessed over a network.

Generally speaking this does not cause too many complications if your intention is to release code that is accessible to others, which ouronote intends to do.

While the specific details of the license are contained within the AGPLv3's text (and I am not a lawyer), the basic requirements appear quite simple:

Typically this means little more than including a user-accessible link to your copy of the server's code repository (including changes you've made) and ensuring it is accessible from the internet.

AGPLv3 facilitates peer-to-peer compatibility:

ouronote is for everyone.

Being peer-to-peer, ouronote may run on a diversity of unknown forks all interacting together.

By using a license that demands server forks release their code to the user, it facilitates sharing of features within the ouronote ecosystem as a whole. The intention is for future developers to more freely coordinate around porting network compatibility changes (or upgrade as a collective) without worrying about license conflicts.

This does not mean that network schisms won't occur or that incompatible features won't arise, but it is at least a step toward ensuring that compatibility can be maintained where possible. In fact, we encourage communities to customize their software to their needs!

AGPLv3 helps protect from hostile take-over:

ouronote is for everyone.

Under AGPLv3, the service's code must be shared with everyone who uses it, so as an ouronote user you will always have the right to access the code.

One of the long-term failure states of federated/decentralized platforms is having some corporate behemoth takes over and effectively centralize it. We don't want your access to ouronote (and your artwork) to be artificially restricted in that manner.

By licensing AGPLv3, we effectively scare away centralized providers from co-opting network effects and then gating things behind a closed ecosystem.

AGPLv3 helps to maintain software freedoms:

ouronote is for everyone.

By requiring source code to be released to those who use the software, AGPLv3 ensures the core 'software freedoms' sought by copy-left licensing. This means being able to easily verify, modify, and share the code running on your computer.

And as such, AGPLv3 ensures people can confirm that the JavaScript running in the browser is what it says it is. It also lets people run their own copy of the software if that is a better fit for their needs. We feel these are important toward ensuring that ouronote is as widely available as possible.

Exceptions.

AGPLv3 is an 'infectious license', and this has raised concerns in the past on other creative platforms. We want to ensure you're comfortable using ouronote, so we've listed off some notable exceptions.

Created content is yours and yours alone:

To be very blunt: we are not trying to steal your work. We simply want to ensure the software used to create & view your work stays freely accessible to you (and everyone else) in the future.

Given this is a creative tool intended to allow users to produce their own content, all the content created by the user (and any templates provided by the software used to create that content) will necessarily need to be licensed separately. The GPL documentation highlights how to facilitate this. And we'll be taking steps we to ensure this is possible.

We will choose a CC0 license (or similar) for anything ouronote provides that your work may be considered a derivative of.

We are licensing the software, not your creations. If something we've done with our licensing has gone against this idea, please consider it a mistake.

Embedded applications?

ouronote is for everyone.

Fundamentally, we see ouronote as a tool for users to share their art with others. We believe you should always have access to the direct tools used to create and share content made with it. With that in mind, facilitating the sharing of ouronote creations out over social networks, forums, message boards, imageboards (and various other social web-based applications), makes sense.

If we get to the point in our life-cycle where this is a demand, a possible future exception is using this application in an web embeddable form. To be able to use ouronote this way, will enable access to share your content as openly as possible.

While we want any changes to ouronote itself to remain freely accessible to the users, we recognize that software licensed under AGPLv3 can be challenging to adopt by larger organizations. By allowing for ouronote itself to run as an embeddable widget, it can perhaps be made available to users under the AGPLv3 clause without forcing the larger project to relicense their code.

So one important exception here is that we may release an adapter that has been more permissively licensed. This is so other projects who wish to embed ouronote do not pollute their project as a whole, while still forcing the larger project to give ouronote users the intended software freedoms. This is in line with past conventions for integrating AGPL software with 3rd parties.

If we're unable to resolve the conflicts this may present, we will choose to maintain the rights that AGPLv3 provides.

Concerns over internal libraries.

At the current time, there are libraries contained within this repository that are intended to be released and licensed more permissively. An example being the angular=>gun adapter, and paper.js=>gun adapter.

These boundaries are not clearly marked yet, but will be in the future. They will be separated from the ouronote app itself and made freely available to the larger software developer ecosystem under a different license.


Why you no use license [insert favorite license here]???

To quote the Free Software Foundation: "We recommend that developers consider using the GNU AGPL for any software which will commonly be run over a network."

If you want more information on this license, I recommend reviewing the FSF's "why AGPL" where they discuss the motivations. Also possibly watching John Sullivan talking about how AGPL is being used in the wild.

We realize this choice makes people bristle because we are effectively forcing your hand if you choose to work on ouronote. However, access to these freedoms is something that we feel strongly about, and view it as necessary for enabling the kind of software we want to use ourselves, so it likely won't change in the future.

The only exceptions is possibly deciding to dual-license along with those with similar server-side code publishing requirements, provided they are in line with the ethos described above.


So

This app wouldn't exist without the FOSS community being what it is. We want to ensure we're not being rude other developers who's work we've depended upon. So

ultimape commented 2 years ago

I believe we can tentatively close this issue once we've got dev pushed to the officially launched branch.

Under our dev branch we have readily accessible copyright notices in all our about pages and implemented the LICENSE file. This 'About' will be accessible from all user facing pages soon.

Complying with licenses has been done to the best of our ability. However this is both my and @nsreed's first serious open source project that will be in the hands of users, so we may have overlooked some important aspect here. Feel free to add a comment here if we've missed something important to be in compliance with the licenses.

Shoutout to Dav Glass's License Checker for doing a lot of the leg work to scrape node/npm licenses so we can properly credit them. We also wrote a little clean up tool to massage the .json output to make it easier to generate the data for the app. It's pretty simple to use.


Demo:

ouronote-licences

ultimape commented 2 years ago