Actually I think the main compatibility concern is calls to Jenkins.getJDKs and similar methods. For example, these are called from maven-plugin, matrix-project, etc. However you can simply switch such calls to JDK.DescriptorImpl.getInstallations, which then would behave smoothly after a split, assuming we found some way to migrate the Jenkins.jdks field, which seems tractable. ant and pipeline-maven appear to use the sane call already.
envinject does call AbstractProject.getJDK. This jdk field also needs to be migrated to the plugin, I suppose as a JobProperty.
MatrixProject.getJDKs should be deleted, and PromotionProcess should be fixed.