Ok, answers below:
- Pieter has cancer and is dying. He has very little time left in his life, and has had to hand the operating of the 0MQ project over to the community members that have been doing it for ages anyway. See: http://hintjens.com/blog:115
- I'm not sure how a backend system that the daemon doesn't even have to use (unless it has external programs interacting with it) would affect front-facing functionality at all. This point doesn't make much sense.
- I can't find any Github issues, mentioning memory leaks, that are unfixed or are more recent than 2014. Got a citation for that?
- Right now the JSON RPC maxes out at 4-5 instances of simplewallet on a reasonably well-specced machine. Anything above that starts affecting even automatic refreshes, and you've got no chance of quickly catching up on an unsynced wallet. 0MQ, on the other hand, maxes out at whatever your system's ulimit is, normally 1024 per program by default. If you have a specific use-case where you need more than 1024 wallets connected to the daemon, don't worry, you can just increase your system's ulimit.
- You keep using the word "peer", but I've got no idea what peers have to do with this. By definition this is for IPC, Inter-Process Communication. The fact that it uses local TCP instead of domain sockets is only to ensure cross-compatibility with Windows, which doesn't support domain sockets. This means that remote connectivity is possible, as we currently have with simplewallet's
--daemon-address
and related flags. But if your scenario requires complicated proxy routing to get to a remote daemon you should rethink your scenario, not try and force an IPC tool to work for complicated routing. - That's not true; a REQ-REP can time-out if it's incomplete. Also if simplewallet crashes, for instance, then when you bring it back up it wouldn't be using the same connection, so it's irrelevant.
- What other IPC messaging systems are there that are as mature as 0MQ?
I'm not sure why you'd consider 0MQ a vendor lock. That's like saying HTTP is a vendor lock, and you want to be able to just send raw TCP/IP. 0MQ makes things significantly easier for future developers that write pool software or solo miners or wallets.
And you can use 0MQ bindings for everything from C: http://czmq.zeromq.org
to .NET: https://github.com/zeromq/clrzmq4
to Go: https://github.com/pebbe/zmq4
to Scala: https://github.com/zzxx-husky/zeromq-scala-binding
to C++: https://github.com/zeromq/cppzmq
to PHP: https://github.com/mkoppanen/php-zmq
to Fortran: https://github.com/scemama/f77_zmq
to Bash: https://github.com/marianov/zmq-bash-push
to Haskell: https://hackage.haskell.org/package/zeromq4-haskell
The problem we're solving is replacing the IPC layer with something designed to be used for IPC. There will always be a JSON RPC API, but it will be abstracted away into a separate binary, and will use 0MQ to communicate with the daemon under the hood.