In a multi-node computer system, a software version management system is
described having a version manager for ensuring that cluster nodes
running completely incompatible software are unable to communicate with
each other. The version manager provides a mechanism for determining when
nodes in the cluster are running incompatible software and providing a
way for determining the exact version of software that each node must
run. The version manager provides support for rolling upgrades to enable
the version management software to ensure the chosen version of software
that runs the cluster stays constant even though the software installed
on individual nodes is changing.