Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add forking guidelines #324

Open
wants to merge 6 commits into
base: master
Choose a base branch
from
Open

Conversation

dffdff2423
Copy link
Contributor

Adds a page outlining forking guidelines and best practices. A large amount of content in this is derived from https://gist.github.com/moonheart08/2d3945faf3cf691437e1e1fa0e922420. I have permission from the author to use their work in this PR. It also incorporates some of my own advice gained from working on Cosmatic Drift.

src/en/general-development/tips/forking.md Outdated Show resolved Hide resolved
src/en/general-development/tips/forking.md Outdated Show resolved Hide resolved
src/en/general-development/tips/forking.md Outdated Show resolved Hide resolved
@Jezithyr
Copy link
Contributor

Jezithyr commented Oct 22, 2024

This looks great so far! But it's missing a section on licensing and attribution. We should at the very least give people a basic idea of what copyright is/does, since not everyone is familiar with it and there are a ton of common misconceptions that can get you into trouble.
I'll write something up and run it by a couple of my industry connections to make sure that it's accurate to how copyright works. Licensing stuff shouldn't be a problem for most forks since they'll likely just going to keep the MIT license but it's still a good idea to make sure people are aware of misconceptions and common pitfalls.

Actually, I might just make a separate doc on copyright/licensing and then just include a brief summary in the forking guidelines. Great work on this :)

@Jezithyr Jezithyr added Changes Needed This Design/PR needs some changes before it can be merged Policy/Organizational Relevant to documentation of Wizden Policy or Organizational information Guides/Onboarding Related to guide/tutorial documentation and/or onboarding/developer setup labels Oct 22, 2024
@Jezithyr Jezithyr self-assigned this Oct 22, 2024
@dffdff2423 dffdff2423 requested a review from Jezithyr October 22, 2024 03:22
@dffdff2423
Copy link
Contributor Author

dffdff2423 commented Oct 22, 2024

I actually ended up writing a short copyright gide. Let me know if you want me to change anything. My goal was to take as neutral of a stance as possible while giving a basic explanation of all of the licenses that I am aware of ss14 forks using. If people don't understand the basics of software copyright I think they should be referred elsewhere given it is such a complex topic and most (all?) of the people who work on ss14 are not experts in it and such should not be writing a guide on copyright.

@Everturning
Copy link

we need some more forking guidelines around here I'm forking sick of it

@dffdff2423
Copy link
Contributor Author

@Jezithyr Could you take another look at this given that it has been a month? I think it would be useful even without the legal stuff as this covers the most common mistakes most forks make.

Copy link
Member

@deathride58 deathride58 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Regarding the licensing section: you'd probably want to detail some best practices on how to apply a license to a fork, as the current prominent methods (namely, the act of laying down a all commits after X are AGPL in the readme) are ones that make it trivial to accidentally violate the MIT license through the accidental relicensing of MIT code (the MIT license can only be sublicensed, not relicensed, so any commit containing MIT-licensed code needs to explicitly declare it when using the all commits after X are AGPL route)

A particularly good standard that's increasingly common across the open source dev community as a whole is SPDX IDs (https://spdx.dev/learn/handling-license-info/). These are quite easy to copy-paste across files, and make it incredibly explicit what license a given file is under, which makes lawyers happy due to how cut-and-dry violations become with 'em (and similarly makes hub rule enforcement far easier to investigate). For licenses like the AGPL, use of SPDX IDs should be paired with an explicit declaration somewhere reasonable (like the readme) that the codebase is subject to the terms of the AGPL (just without the all-commits-after-x statement, as that's a legal pitfall)

src/en/general-development/tips/forking.md Outdated Show resolved Hide resolved
Comment on lines +51 to +53
The AGPL and MPL licenses are "copyleft" licenses, meaning they require any modifications of your code to be released under the same license. The AGPL requires the resulting binary of your project to be licensed under the AGPL which means every user is entitled to a copy of the *entire* source tree. This prevents you from having hidden content. AGPL code can be licensed in two different ways: AGPL-3.0-only, or AGPL-3.0-or-later. The difference between them is that AGPL-3.0-or-later code will be licensed under any future version of the AGPL that the Free Software Foundation publishes. The MPL has no "v2 only" option, your license will always be the latest version published by Mozilla.

The MPL only requires that files under the MPL license be released to users which makes it suitable for projects that include hidden content. Note that the MPL has an optional term called "Exhibit B". Code which is licensed under the MPL and the Exhibit B clause cannot be combined with code licensed under the AGPL.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It'd be worth being a bit more in-depth about the pros and cons of AGPL compared to the MPL. For instance:

  • The AGPL is compatible with CLAs that require forfeiting copyright to the repo owner when contributing (this is a fairly common practice among predatory projects), while the MPL is completely incompatible with that due to the MPL explicitly granting individual contributors the rights to exercise enforcement
  • The file-scoped license of the MPL has the additional benefit of making it compatible with every non-viral license, so long as it doesn't conflict with the terms of the MPL. When using the AGPL on the other hand, additional licenses are only compatible if the AGPL explicitly states their added terms to be permitted (see Section 7, Additional Terms). This has particularly huge implications in the context of SS14, as non-commercial licenses (which there's an abundance of) simply aren't permitted by the AGPL. This means that an AGPL codebase would have to do a license audit to replace or remove all existing noncommercial assets in the codebase to be AGPL-compliant. Not doing so can lead to a fork becoming liable to getting either C&D'd or DMCA'd (these won't be from Wizden itself since we're licensees for the most part, but there's nothing stopping contributors, Goonstation, or anyone else behind the noncommercial assets present in SS14 from doing so)
  • The AGPL has a rather infamous loophole where you only need to offer a copy of the source code to those you've distributed the program to, which is something that various SS13 servers have exploited in the past to remain closed-source despite the AGPL license. The MPL lacks this loophole, requiring the MPL-licensed source code to be reasonably and publicly available

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think we should be turning this into a entire guide on open source copyright licenses. There are plenty of other resources online that are written by actual lawyers. I would rather link some other third-party source. Do you know of any good ones?

Co-authored-by: deathride58 <[email protected]>
@dffdff2423
Copy link
Contributor Author

Regarding the licensing section: you'd probably want to detail some best practices on how to apply a license to a fork, as the current prominent methods (namely, the act of laying down a all commits after X are AGPL in the readme) are ones that make it trivial to accidentally violate the MIT license through the accidental relicensing of MIT code (the MIT license can only be sublicensed, not relicensed, so any commit containing MIT-licensed code needs to explicitly declare it when using the all commits after X are AGPL route)

Will add something about it, this is probably the most common mistake forks make in terms of licensing.

A particularly good standard that's increasingly common across the open source dev community as a whole is SPDX IDs (https://spdx.dev/learn/handling-license-info/). These are quite easy to copy-paste across files, and make it incredibly explicit what license a given file is under, which makes lawyers happy due to how cut-and-dry violations become with 'em (and similarly makes hub rule enforcement far easier to investigate). For licenses like the AGPL, use of SPDX IDs should be paired with an explicit declaration somewhere reasonable (like the readme) that the codebase is subject to the terms of the AGPL (just without the all-commits-after-x statement, as that's a legal pitfall)

I fully agree with you about the SPDX (I use the reuse spec in most of my new non-ss14 projects). I opted to not link it because wizden does not use SPDX indicators at all and again, I wanted to keep this very limited in scope. However, if you want, I can add something about it.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Changes Needed This Design/PR needs some changes before it can be merged English Guides/Onboarding Related to guide/tutorial documentation and/or onboarding/developer setup Policy/Organizational Relevant to documentation of Wizden Policy or Organizational information
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants