[Bf-committers] Some Ideas for a Blender Plugin System
Martin Felke
martin.felke at t-online.de
Tue Nov 3 13:59:46 CET 2015
Hi, today i wrote down a couple of more thoughts regarding a plugin
system. As said earlier, those serve only as discussion starting points
and are not meant yet as design principles made out of cement. :)
Fat VS Slim Core
----------------
- currently we have a fat core which contains all functionality
as monolith
- hard to extend and to maintain because it might be everything depends
on everything else
- idea: a slim, "bootloader like" core, which handles modules and
plugins registration and deregistration and serves as API Hub (of
existing modules)
- modules are not standalone, they communicate via a central core API
Hub so they need the core as well
- this way the core can track module APIs and provide a fallback (as
in exception handler) for missing code / functions (if module or
plugin is not present)
Modules VS Plugins
------------------
- need to distinguish between logical code separation (module) and
"physical" separation (plugin, as in shared library or dll)
- group existing core functionality to modules (like, an editor could
be a module, or even a modifier)
- base modules can be provided by "base" plugins, and extension modules
by external plugins
- plugins can provide parts of modules, entire modules or multiple
modules (like nodes maybe, modifiers, new editors, or extensions to
editors)
Dependencies
------------
- do we want to have inter-plugin dependencies ? For a slim core
approach this might be necessary, if plugin A provides a module or
part where plugin B 's code depends on
- else base modules should be moved / kept in the core, so everyone has
a minimum set of functionality without needing to use plugins
- but in general, should plugin code only use Core API (the Hub ?)
would be better than "directly" accessing other plugins code, because
the core might provide the error fallback in case a plugin isnt
present
Plugin properties
-----------------
- should be "hotpluggable", addable, removable during runtime
- core needs to take care of disabling all related functionality when
module is unloaded (closing editor, saving for example)
- each plugin needs an unique identifier of some kind, and versioning
info
- if basis modules are in a plugin, this plugin needs to be flagged as
important or official or so
- plugins could be classified by their purpose, like provides Module X,
extends Module Y, replaces Module Z, removes Module W
More information about the Bf-committers
mailing list