The ability to run multiple versions of the same assembly simultaneously is referred to as side-by-side execution. The NGWS runtime provides the infrastructure to allow multiple versions of the same assembly to be run on the same machine, or even in the same process!
Supporting side-by-side execution is the basis for the robust versioning in the NGWS runtime. Code that is side-by-side capable has more flexibility it terms of providing compatibility with previous versions. Code that cannot run side-by-side must remain completely backward compatible with all previous versions because only one version (typically the latest) can be running on the system at the same time. Given the robust versioning support in NGWS, side-by-side components do not need to maintain strict backwards compatibility. Consider the situation where ClassX supports side-by-side and makes an incompatible change between version 1 and version 2. Callers of ClassX that expressed a dependency on version 1 will always get version 1 regardless of how many later versions of ClassX are installed on the machine. The caller would only get version 2 if it specifically "upgraded" using version policy.
Writing code that is capable of running side by side obviously requires some awareness on the part of the developer. For example, side by side components can not use shared state without some form of synchronization.