The main idea behind this is to centralize all plugins and make this repository the official distribution of plugins.
There are some major advantages to this, such as:
- Being able to update unmaintained plugins whose authors have left Aliucord
- Security; random plugin authors will be unable to silently distribute malware unlike now
- Allow for breaking changes to Aliucord core, as we would be able to rapidly test and update all affected plugins
- Maintain a base level of code quality
Existing distribution
This does not mean that distributing plugins outside of this repository will become impossible, but that this will become the primary method
to publishing new plugins. As for what it means for the existing distribution methods:
- The existing plugin channels
#new-plugins and #plugins-list will be archived
- A new plugin channel
#unofficial-plugins can be created for the listing of low-quality or meme plugins (ie, /minky, PetPet, etc) to be used with the builtin PluginDownloader.
- The current global plugin repository will be repurposed as an unofficial plugins repository
- The PluginWeb/PluginRepo can still list these plugins under a specific "unofficial" tab or something similar
- Either
PluginWeb or PluginRepo will eventually be turned into a coreplugin, becoming the de-facto way to install Aliucord plugins. (this was a long time coming)
Codeowners
The original authors of plugins should still be able to exert some level of control over their own plugins. Random contributors should still be approved by the original (or currently maintaining) author to ensure that the changes conform to the vision they hold for their own plugins.
As such, we can implement CODEOWNERS control for each plugin to require PR approval to any changes involving the source code for their plugins.
A trusted global plugin maintainer can then additionally review the changes to ensure that no malicious code has been introduced; ignoring the code quality itself in most cases (unless it's egregious), and then merge the changes. This ensure that untrusted plugin developers don't have the ability to silently merge malicious code.
This is still highly up for debate.
Project structure
I plan on following the same structure as the current plugins template, with this being a huge monorepo holding a bunch of isolated Gradle modules under ./plugins/. We currently have around ~280 plugins I believe, and since most of them will be using the same set of dependencies, this shouldn't cause any significant performance issues with syncing. Since Aliucord Gradle Plugin v2 supports configuration caching, this will be even less of an issue.
Migration procedure
- This repository is prepared for migration
- Make a publicly editable spreadsheet of every single plugin
- Allow willing plugin devs/contributors to mark themselves as claiming to migrate a plugin
- Withhold making improvements to plugins, centralizing everything first is more important.
- Plugin is PR'd to central repo, reviewed and approved by a maintainer
- Assign yourself as a codeowner if it is one of your own plugins
- Plugin is marked done in spreadsheet, move on to next one.
Questions
- Licensing? I would prefer to license this entire repository under GPLv3, but what if the original plugin authors did not license their plugins? Should we go track them down to ask for permission?
- Who would be codeowner for unmaintained plugins?
- Who is trustworthy enough to allow direct merge/write perms this repository?
The main idea behind this is to centralize all plugins and make this repository the official distribution of plugins.
There are some major advantages to this, such as:
Existing distribution
This does not mean that distributing plugins outside of this repository will become impossible, but that this will become the primary method
to publishing new plugins. As for what it means for the existing distribution methods:
#new-pluginsand#plugins-listwill be archived#unofficial-pluginscan be created for the listing of low-quality or meme plugins (ie,/minky, PetPet, etc) to be used with the builtin PluginDownloader.PluginWeborPluginRepowill eventually be turned into a coreplugin, becoming the de-facto way to install Aliucord plugins. (this was a long time coming)Codeowners
The original authors of plugins should still be able to exert some level of control over their own plugins. Random contributors should still be approved by the original (or currently maintaining) author to ensure that the changes conform to the vision they hold for their own plugins.
As such, we can implement CODEOWNERS control for each plugin to require PR approval to any changes involving the source code for their plugins.
A trusted global plugin maintainer can then additionally review the changes to ensure that no malicious code has been introduced; ignoring the code quality itself in most cases (unless it's egregious), and then merge the changes. This ensure that untrusted plugin developers don't have the ability to silently merge malicious code.
This is still highly up for debate.
Project structure
I plan on following the same structure as the current plugins template, with this being a huge monorepo holding a bunch of isolated Gradle modules under
./plugins/. We currently have around ~280 plugins I believe, and since most of them will be using the same set of dependencies, this shouldn't cause any significant performance issues with syncing. Since Aliucord Gradle Plugin v2 supports configuration caching, this will be even less of an issue.Migration procedure
Questions