Discussion for implementing an internal extension browser and installer.
The idea is to create a means for users to browse and install assets for GIMP from within GIMP.
A user will be able to invoke a new GUI window for browsing available assets.
Assets can be:
- Interpreted/dynamic scripting language plugins
- Tool Presets
- MyPaint bruses
- Icon Themes
Not all of these may be supported initially.
A user will be able to install, uninstall, update and activate any of the assets from this GUI. There will be 2 types of extensions: system extensions and user extensions.
System extensions are extensions installed by default (therefore read-only). One will be able to:
- Deactivate them: they will not be loaded anymore so that one can get rid of features one really don't care about.
- Update then: since they are rid only, it actually means "overriding them by installing a new version as user extension". For instance suppose that when you installed GIMP, you had the extension "Foobar" v1.2 installed as system extension (maintained by upstream GIMP developers). GIMP developers could update this extension and release foobar v1.3 without releasing a new version of GIMP. So you could install foobar v1.3 as a user extension, which would deactivate and override foobar v1.2.
User extensions are installed by the user and are usually provided by a GIMP extension repository. One will be able to:
- Search them using keywords.
- Install them.
- Uninstall them.
- Deactivate them (keeping them installed, yet not loaded).
The user will interact with the system through a new GUI.
The data for the assets will be stored on a server controlled by the GIMP team. It may be the same server that the main website resides on.
The website will primarily allow 3 main functions:
- Query and download assets
- Upload assets
All available assets should be searchable and listed, probably categorized by type or other tags.
Each asset will have its own page.
The page should show:
- Date uploaded
- GIMP Version required
The page might also show:
- # of installed/users
- URL or external link
You can actually read the full list of metadata an extension creator can provide, since we are using the AppStream specification: see the [Generic part of the spec](https://www.freedesktop.org/software/appstream/docs/chap-Metadata.html#sect-Metadata-GenericComponent) and the [section about addons](https://www.freedesktop.org/software/appstream/docs/sect-Metadata-Addon.html).
The mandatory sections of the appstream files are:
- an `<id>` following reverse-DNS scheme, and which has to be unique.
- A `<name>`
- `<requires>` to tell exactly which GIMP version it is meant to work with.
- `<release>` to tell the version of the extension, allowing updates.
- It should be possible to add `<requires>` to set dependencies to other extensions.
- For better understanding, we recommend adding a `<summary>` and a `<description>` as well as `<screenshots>` (when applying, i.e. with extensions having a GUI or graphical outputs).
- The upstream GIMP repository may accept non-Free Software extensions (to be discussed) but we will definitely give preference to FLOSS. A `<project_license>` tag is therefore recommended.
The server should also have a means for delivering data to GIMP when queried, such as:
- XML (or other) response of a list of all assets (for the GUI to parse) + global metadata
- Specific information about a particular asset (name, type, description, rating(?), thumbnail or extended metadata)