2 Contributor License Agreement Policy
zqpvr01 edited this page 2024-03-22 21:38:25 +01:00

What is the purpose of the Individual Contributor License Agreement?

When you agree to the suyu Nintendo Switch Emulator Individual Contributor License Agreement (CLA), you are effectively granting a copyright of any contribution that you make to the maintainers of the suyu project. You still retain an equal copyright over your own work, and are free to use your own work as you please.

How do I sign the Individual Contributor License Agreement?

  • When you open a Pull Request on the main repository, the bot CLAassistant will prompt you to agree to the CLA.
  • Click the link provided by CLAassistant, or browse to https://cla-assistant.io/suyu/suyu.
  • Login with your GitHub credentials.
  • Read the CLA, provide the required information, and click "Accept" once you agree to the terms of the agreement.
  • The status of your Pull Request (and future Pull Requests) will be updated to indicate that you have agreed to the terms of the CLA.

Why does suyu need a Contributor License Agreement?

As of the time of this document, suyu has around 200 contributors! However, the vast majority of these contributors have written only a few lines of code, are inactive in the project, and have not provided the current team with contact information. There is some precedent that unless otherwise agreed upon, every contributor owns the sole copyright to their contribution. The Contributor License Agreement assigns a shared copyright of each contribution to the set of individuals who actively maintain the project. This is not forfeiting any rights by the contributor, but rather granting rights to suyu. This enables the project to have ownership of the source code without necessarily tracking down every single person that ever made a contribution. It also is a mechanism for the project to keep a record of all of the present and future contributors and their contact information. There are several reasons why this is important:

  • In recent years, emulators have become productized. This has positive and negative effects for end users. On one hand, productizing emulators has meant that emulator developers are getting compensated for their hard work. Compensation means that developers are willing to work on the parts of emulation that aren't necessarily fun, such as usability and polish features that are important to end users. Compensation also means that emulator developers can devote more time to the project. All of these mean faster development, a better product, and a better experience for end users.
  • However, recent closed source emulators have shown that emulation can be successfully monetized. This has resulted in some of the most successful projects becoming closed source, which overall hurts preservation of the hardware and the games. Open preservation is the core of why most suyu developers work on the project. The success of closed source emulators has furthermore shown that the damage to coexisting open source emulators and preservation can be significant: Given the complexity of modern systems, it can be incredibly demotivating for an open source project that is trailing behind to try to stay relevant. By design, closed source emulators benefit from the innovation of open source projects, without having to give back. Consequently, such open source projects fail to attract attention and new developers, and can die off leaving the opportunity for preservation lost.
  • suyu is an open source project. The main repository for the project will always be open source, accessible to new contributors, and purposed with preserving the Nintendo Switch. Furthermore, the main repository will always be a reference implementation for all ancillary releases within the suyu project. However, in order to compete with modern emulators in 2019 and beyond, suyu also needs to be a product. We need to find ways to monetize the project and compensate our developers while also staying open source. This will allow us to share the same benefits of other productized projects, such as by enabling our developers to spend more time working on suyu, or to work on less exciting but necessary features. Unfortunately, this is very difficult without the maintainers of the suyu project having ownership of the source code.
  • While we agree with the spirit of the project's open source license, the GNU General Public License v2.0 (GPL), on its own, the GPL does not provide any legal protection against bad actors. Without any meaningful income stream, an open source project does not have the legal resources to pursue a GPL violation. For example, there have been many instances of GPL emulators being released on the Android Play Store as commercial closed source products without permission from the original authors. The CLA helps protect suyu against such scenarios by allowing suyu to: 1) consolidate the copyright owners of the project as a whole to a smaller, more meaningful, and active set of individuals, 2) more easily monetize the project and therefore have resources to potentially take legal action against bad actors as warranted, 3) restrict the access of non-core parts of the suyu source code that could be used by bad actors to monetize suyu.

Who must agree to the CLA?

Any contributor that opens a Pull Request against the main repository must agree to the CLA before their change can be merged. Similar to how Pull Requests must satisfy build and verification requirements, and must be approved by reviewers, this will be another checkbox within the merge process.

What should contributors do if they do not own their contribution?

If a contributor does not own their contribution, it is their responsibility to get the original author of the code to agree to the CLA or provide written consent granting them shared ownership of the code change. Proof of this consent should be included within the description of the Pull Request for the change.

Who are the maintainers of the suyu project?

The maintainers of the suyu project are the set of individuals that satisfy the following requirements:

  1. Have made at least one meaningful technical contribution to the core suyu emulator within the most recent 12 months. The core suyu emulator is considered the part of the codebase that is responsible for Nintendo Switch emulation, which includes core, audio_core, and video_core. Minor changes to a frontend or common code do not qualify as a meaningful technical contribution to the core suyu emulator.
  2. Have agreed to the Contributor License Agreement.
  3. Expresses willingness to be a maintainer of the suyu project.
  4. Are at least eighteen years of age.
  5. Are a member of the suyu/Maintainers team on GitHub.

How are new maintainers added to the suyu project?

If a contributor satisfies requirements #1, #2, #3, and #4 above, and has shown a pattern of:

  • Making several meaningful technical contributions over a period of at least 6 months.
  • Participating in code reviews and leaving useful technical feedback.
  • Being a technical resource or leader in an area relevant to the project (such as reverse engineering, graphics, audio, CI/build system, etc.).

Then the existing maintainers of the suyu project will discuss adding this contributor to the suyu/Maintainers GitHub team. This decision will be satisfied with a two thirds majority vote of the existing active maintainers. With all requirements satisfied, the contributor is now considered a formal maintainer of the suyu project.

There is an expectation that users with this role are active participants in the project and its community, such as by continuing to satisfy the above criteria.

How are maintainers removed from the suyu project?

  • If an existing maintainer of the suyu project becomes inactive, and therefore no longer satisfies requirement #1 above by failing to make any code change to suyu within the most recent 12 month period, they will lose their formal maintainer status.
  • If an existing maintainer of the suyu project violates the terms of the Contributor License Agreement, or wishes to have their agreement terminated, thereby no longer satisfying requirement #2 above, they will immediately lose their formal maintainer status.
  • If an existing maintainer of the suyu project no longer wishes to be a maintainer, thereby no longer satisfying requirement #3 above, they may immediately resign from this role by notifying the other maintainers.
  • Being a member of the suyu/Maintainers GitHub team alone does not necessarily mean that a contributor is still a maintainer of the suyu project if they fail to satisfy any of the other requirements. Users will be be pruned from the suyu/Maintainers GitHub team if they become inactive.
  • A maintainer that satisfies all requirements may still lose their maintainer status by a two thirds majority vote of the active maintainers of the suyu project.

Privacy

When you agree to the CLA, your acknowledgment of the agreement is public. Any other contact information you enter is private, and will only be available to the project owner bunnei. This information will not be shared with any other individuals under any circumstances.

At the time of this document, most of the suyu code is not under CLA. As such, the maintainers of the suyu project only have authority to act on the copyright of the code they own, not the project as a whole. The expected outcome in adding the CLA is that over time, code will naturally be rewritten and replaced by code that is under CLA. The list of inactive developers that the team would need to contact with regards to code ownership will diminish. At this time, if we were to act on our copyright of the suyu source code (for example, by issuing a dual license), the decision would be made by a two thirds majority vote. This vote will be carried out by the maintainers of the suyu project and the web administrator of the suyu project.

The web administrator of the suyu project is a single individual that:

  • Is at least eighteen years of age.
  • Is designated as web administrator by a two thirds majority vote by the maintainers of the suyu project.
  • Is a member of the suyu/Web-Adminstrator team on GitHub.
  • Maintains suyu's web infrastructure. This is defined as: 1) maintaining the suyu website, 2) managing public-facing online communities for suyu (e.g. Discord, forums, etc.), 3) managing suyu's other web services (e.g. continuous integration and build systems, bots, etc.).

The web administrator of the suyu project may lose their status as such by a two thirds majority vote by the maintainers of the suyu project.