Wine是不是一个模拟器?


23

据我了解,仿真器(以一种简单的方式)将使用系统X的功能将程序的函数调用转换或替换为正在运行该程序的系统Y的功能。Wine项目声称Wine不是模拟器,因为:

Wine不会像虚拟机或仿真器那样模拟内部Windows逻辑,而是将Windows API调用即时转换为POSIX调用,从而消除了其他方法的性能和内存损失,并允许您将Windows应用程序干净地集成到桌面中。

那么,模拟器和虚拟机如何在非Windows主机系统上模拟内部Windows逻辑?难道不是通过将Windows系统调用转换为主机自己的调用来实现的吗?仿真器和非仿真器(例如Wine)之间的区别在于,仿真器仿真整个操作系统,然后应用程序使用该系统API,而无需知道它正在与仿真器进行通信,而非仿真器则直接将应用程序的调用转换为主机的(并且应用程序也可能不知道)?额外的间接级别是模拟器和Wine之间的唯一区别吗?


7
通常,当计算机专家使用“仿真器”一词时,他们指的是硬件仿真器,即模拟硬件的软件。从这个意义上说,Wine不是模拟器。但是,从字典的意义上来说,Wine确实模仿Windows,从这个意义上讲,您可以将Wine称为Windows模拟器。
ChristofferHammarström'13年

1
WINE还是一个稍微延伸的反义词,一种幽默感,首先吸引了创建WINE所需的个性。
RBerteig

Answers:


29

那么,模拟器和虚拟机如何在非Windows主机系统上模拟内部Windows逻辑?难道不是通过将Windows系统调用转换为主机自己的调用来实现的吗?

不,或者至少不是在WINE的意义上–通过在用户空间中将系统调用一对一地转换。模拟器通过一条更circuit回的路线抽象地完成此操作。它不会直接转换系统调用。

真正的模拟器会创建虚拟(例如x86-64),而不是虚拟操作系统。从理论上讲,您可以运行针对该计算机样式的任何操作系统。通常,“仿真器”包括操作系统,但这并不是它所仿真的。它包含的OS与在真实计算机上运行的OS相同。

模拟器有时用于模拟与主机不同的硬件,但也可以模拟在一个操作系统内部运行时完全相同的硬件。

WINE与此不同之处在于它实际上不是Windows。您可以运行带有Windows真实副本的x86-64仿真器,但这不是WINE。他们声称它实际上比仿真器更有效,这是有道理的-仅翻译系统调用的开销可能比运行VM的开销低。缺点是WINE只能是Windows; WINE只能是Windows。您不能像使用普通VM那样将其与其他OS一起使用。


13

考虑Java虚拟机。没有JVM可以模仿其他任何东西,它们都是规范的实现。Wine不是在模仿win32 api,而是它的实现。规范和现实不一定匹配,Microsoft的实现和Wine的实现都有解决方法,可以使错误的代码正常工作,并且对于任何给定的项目而言,哪种实现都是更好的目标并不一定很明显。


4

Wine是一种垫片,它会拦截Windows API调用并将其即时转换为相应的Linux API调用。模拟器或虚拟机模拟物理机。显然,填充程序效率更高,但可能无法完全模仿所需的功能。


0

模拟器通过在本身运行在另一个OS /处理器平台之上的模拟器应用程序中创建OS /处理器平台的逻辑和行为,来虚拟化通常运行Windows应用程序的处理器和/或OS。Wine不会虚拟化Windows操作系统/处理器的行为,而是以与Windows操作系统相同的抽象级别运行Windows应用程序。它通过重新实现Windows API以直接在基于Unix的OS /处理器平台上运行来实现此目的。也就是说,Wine是Windows OS核心元素的重新实现,Windows OS是一组编译的DLL,它们将Windows API调用请求直接转换为等效的基于Unix的代码,这些代码直接与物理处理器进行通信。

这意味着有时存在运行时上下文,这些上下文使Wine + Linux能够比Windows本身更快地运行Windows应用程序!仿真器永远不可能有这种可能性,因为它的代码将在更高抽象级别上忙于在基于Unix的平台之上模拟CPU / WinOS平台。在这种情况下,运行Windows应用程序需要更多的翻译和接口。(参见下图)

简而言之,Wine是Windows的重新实现,而不是Windows的仿真。

在此处输入图片说明

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.