Now that Module::Install is "stable" it should prepare for what happens when it wants to change the interface in an incompatible way. Fortunately, there's an easy way to prepare for this. Have an "api_version" which is set in the Makefile.PL by the user of MI. This indicates which API version of Module::Install they wrote their Makefile.PL with. Internally it would instantiate a Module::Install::v$api_version object which implements that API. Then MI can change or remove functionality without breaking things. If there's no api_version then v1 is assumed (the current API). This allows MI to smoothly change and deprecate features in incompatible ways without breaking the many, many existing deployments out there. This is similar to the "backwards incompatibility plan" which perl5i employs. This also removes a reason for not deferring to an installed Module::Install of a higher version: incompatible changes to MI will not break existing releases.