This issue reminds me of the database deadlocks issue - you can't completely get rid of them but you can do a good job at preventing/reducing them...

I think it has been proposed before but can't we have the very first class of the network Client driver and Server check for a legitimate/compatible version of the common classes (package) via a Version class and a static method being passed the caller's version number  - this can be done with a static block early on on the ClientDriver class for instance (for the client part) - The common Version class could have a compatibilty table (matrix) if we need more advanced compatibility check computations...If the common package is compatible (based on the compatibility table) then all is fine, otherwise a (runtime) exception is raised in ClientDriver. I do _not_  think we need to check for all interfaces as long as we preliminary checked on Version.checkIfCompatible(versionNumber) early on via the static block - I think we could assume that if you get the proper Version class from the common package and it is compatible, then the rest of the common interfaces should be compatible as well since they would get loaded in the same order as the common Version class which has been identified as (version) compatible. Sure people could come up with twisted scenarios shooting themselves in the foot, but at the end I think we want to be able to address the majority of the cases/situations...just some more thoughts...

--francois