I may be misunderstanding this, but it looks to me like the interpreted language I used - PHP - has an interpreter and a set of common extensions that provide the base functions. If the core interpreter or any of the extensions is an older or newer version than what you expected, it still tries to execute your code. It might throw errors if you're using one of the features that changed, but otherwise it would work.

With Windows, if you don't have the same version in your dev environment as you have on the server it compiles into executables/dlls that won't even load on the server - even if you're not using any of the changed features. I believe this is a design decision, as it forces the upgrade treadmill.

VS also seems to encourage monolithic assemblies so you can't pull in just the libraries you need. Add one thing and it pulls in the world with it. This may have some theoretical performance improvements, as you only need to load each component once for all the apps using it, but at the expense of dependency trees that are a bear to maintain.