不必要。如果它是为了可移植性而构建的并且平台兼容,那么可以(例如,64 位版本的 Windows 能够执行 32 位和 64 位 Windows 可执行文件,但不再是 16 位版本)。
不必要。它们是为特定指令集而设计的。由于这些通常是扩展并且具有向后兼容性,因此您可能会在较新的处理器上运行较旧的文件,但不一定是相反。例如,为 Windows 95 编译的程序可能仍然可以在当今的硬件上运行,但您无法在旧的 Windows 95 计算机上运行为当今的硬件编译的程序。但是,如果两台机器运行完全不同的指令,则可执行文件将不兼容(例如 Intel 与 ARM)。
首先,Windows 和 Linux 的可执行文件使用不同的格式。但即便如此,还是存在差异,例如整个环境和提供的平台 API/库。例如,Linux 可执行文件通常会尝试与 X11 等窗口管理器通信,而 Windows 程序会尝试调用 Windows API。然而,有一些方法可以让这些事情发挥作用。旧版本的 Windows(NT?)实际上具有 POSIX 扩展,因此据我所知,您可以运行一组有限的 Linux 程序,尽管我从未真正尝试过或仔细研究过。另一方面,对于 Linux,有诸如 Wine 之类的工具,它将尝试模拟 Windows 环境,提供 API 文件、路径转换等。这不是完整的模拟(就像使用虚拟机一样)。