Right now there is no way to check if a plugin will break your WordPress before activating it. So, I propose an approach similar to the one used by Linux package managers:
- plugins advertise the features they need and the ones they provide (function names, PHP extensions or classes)
- when building the list of plugins for the plugins page, we also check the features they need
- if the environment provides the needed features, the plugin info is displayed and the activation link is usable
- if some of the needed features are missing, the plugin info is displayed, together with a warning, and the activation link is inactive (perhaps activeable by a checkbox)
This will improve user experience, reliability, and also allow for more efficiency, since a plugin wouldn't need to check for features every time it's loaded. An alternative to this would be plugins checking themselves for the features they need in the activation hook and abort if something is missing, but it's ugly (and remember that people don't usually read documentation, they rather tend do learn by looking at other plugins, so the activation hook is not very well known).