Add backend abstractions as needed to minimize module coupling. These should be abstractions that are friendly to in- and multi-process implementations. We will need at least:
publish/subscribe{,/acknowledge}.
(See https://en.wikipedia.org/wiki/Publish%E2%80%93subscribe_pattern. The 'acknowledge' abstraction allows the publisher to wait for every subscriber to acknowledge receipt. More on this in section 4 below.)
Maybe ZeroMQ can do this. See:
https://en.wikipedia.org/wiki/ZeroMQ
and:
Question: how are these modules you write about implemented? Do you plan to make each module a Dll? Will it be possible to only load a Dll if its functions are needed? I ask this because I currently have Tor running on my router and much of its functions (hidden services, node, etc.) are not needed.