I wanted to post this to the Future Development forum but my request to join the group has been pending for a while now so I thought I'd post it here while the ideas are still fresh.
All of the components of ZM are tightly coupled. I'd like to see future versions written more with an eye toward separability. That is, components should be connected by a well-defined, language-neutral API that does not require that the individual components run on the same machine. I'm thinking something like Google's Protocol Buffers and an RPC implementation here.
Further, make fewer assumptions about the data flow between components. Today it's mostly collect and analyze for motion, with tight integration with MySQL. Scalability here is limited. Instead, it should be possible to use something like a pubsub architecture, where you have data sources like cameras publishing images on a pubsub topic, or a pre-existing security system publishing door and window faults, and you have potentially *multiple* consumers of that topic trying to do something interesting with that data, such as motion detection. Those in turn could publish on an occupancy topic, and a consumer of that might decide whether to raise an alarm or attach another node to the camera to start recording a video. Let all of these components run on different machines and simplify how they're configured and how they store state. MySQL is a huge, complex dependency.
You might consider looking at something like ROS ("ros" period "org"; the system isn't letting me provide links) for inspiration, or implementation. The basic idea there is a framework for starting nodes that subscribe to and publish on pubsub topics.
An architecture like this complicates some of the optimizations ZM makes (shared memory), but I question whether or not those optimizations are all that necessary with modern architectures and networks, and you could always optimize your RPC interface to work over shared memory (and other zero-copy IO techniques) and extend the benefits to other parts of the system.
What I'd really like is the ability to plug in my own image analysis stuff, like OpenCV to do background segmentation or even a 3D camera (Kinect) or LIDAR to do object detection from point clouds instead of flat JPEGs for truly next-generation video surveillance / security. A lot of interesting work is being done there in computer vision, but there is a lack of video surveillance frameworks that are sufficiently modular to allow us to leverage that work. Even if you're stuck with old-school CCTV cameras, imagine being able to do motion detection and object recognition with the camera panning around a room.
This is possible, but too hard to implement in ZM today. Make it practical for me to build this.
If no one seems interested I plan to try and start this myself on top of ROS, but it'll probably be a few months before I can get the time.