I’m interested in developing custom network and storage drivers for Incus, but I don’t expect these contributions to be a good fit for upstream inclusion in Incus itself. I would like to maintain them as separate modules and implement them in the languages I primarily work with (Rust or TypeScript).
Does Incus provide any extensibility mechanisms or plugin architecture that would allow me to develop these drivers externally, or would I need to maintain a set of Git patches on top of each Incus release?
We tend to be pretty anti-plugin in our design as we’ve generally found that making a bunch of generic interfaces and supporting external integrations with that as a tendency to both limit the kind of changes that can be done internally without breaking those interfaces as well as generally making things pretty brittle due to a lack of testing of all of those external integrations.
So while we have a reasonable-enough abstraction layer around storage drivers, all storage drivers must be baked directly into Incus.
On the networking front, it’s in a worse state than storage mostly due to only having one real SDN (OVN) and so not having had to spend much time on setting up clean internal interfaces and abstractions.