个人理解:
操作系统的一大任务是抹平硬件差异并给软件开发者提供方便的开发环境.就是说操作系统是软件运行的基础.软件告诉操作系统自己想要什么,然后操作系统调动硬件去做.
不同版本的windows可以运行同样的程序是因为操作系统本身的接口没变,说得白点就是操作系统与软件交流的语言没有变.而win vista不能兼容某些老程序是因为微软在搞革命,大改系统内核,最终导致旧版本的软件说的话vista听不懂,就像是汉语的文言文和白话文,知道软件在调用什么命令,但是命令的实现及产生的效果已经完全不一样了.至于mac...从一开始就不是一个体系,就像是说汉语的和说英语的绝对无法交流的,windows下写的软件当然不能在mac下运行.当然可以通过虚拟机等弥补一下,但是效率及稳定性就.......至于java程序,java本身的vm抹平了操作系统差异,所以说java的适应性很强.java理论上可以做到跨操作系统
总之基本上不要指望能够直接拷贝.exe到mac下直接运行.越大的程序越是这样.
最开始的时候程序每换一台计算机都要将源代码重新编译链接生成,现在能够在同系列操作系统上直接运行程序已经是谢天谢地了....