와인은 어떻게 에뮬레이터가 아닌가?


23

에뮬레이터를 이해하면 (간단한 방법으로) 시스템 X의 함수를 사용하여 프로그램의 함수 호출을 프로그램이 실행되는 시스템 Y에서 사용하는 함수로 변환하거나 대체합니다. 와인 프로젝트는 와인이 에뮬레이터가 아니라고 주장합니다.

Wine은 가상 머신이나 에뮬레이터와 같은 내부 Windows 로직을 시뮬레이션하는 대신 Windows API 호출을 POSIX 호출로 즉시 변환하여 다른 방법의 성능 및 메모리 불이익을 제거하고 Windows 응용 프로그램을 데스크탑에 깔끔하게 통합 할 수 있습니다.

글쎄, 에뮬레이터와 가상 머신이 비 Windows 시스템 호스트에서 내부 Windows 로직을 어떻게 시뮬레이트합니까? Windows 시스템 호출을 호스트의 개별 호출로 변환하지 않습니까? 에뮬레이터와 에뮬레이터가 아닌 와인과 같은 에뮬레이터의 차이점은 에뮬레이터가 전체 운영 체제를 에뮬레이트 한 다음 에뮬레이터와 통신하고 있다는 것을 알지 않고 해당 시스템 API를 사용한다는 것입니다. 응용 프로그램도 알지 못할 수 있습니다)? 에뮬레이터와 와인의 추가 간접 수준이 다른가?


7
일반적으로 컴퓨터를 염두에 둔 사람들이 "에뮬레이터"라는 단어를 사용할 때 하드웨어 에뮬레이터, 즉 하드웨어를 에뮬레이트하는 소프트웨어를 의미합니다. 그런 의미에서 와인은 에뮬레이터가 아닙니다. 그러나 사전의 의미에서 Wine은 Windows를 에뮬레이트하며, 그 의미에서 Wine을 Windows 에뮬레이터라고 부를 수 있습니다.
Christoffer Hammarström

1
WINE은 처음에는 WINE을 만드는 데 필요한 성격에 호소하는 일종의 유머입니다.
RBerteig

답변:


29

글쎄, 에뮬레이터와 가상 머신이 비 Windows 시스템 호스트에서 내부 Windows 로직을 어떻게 시뮬레이트합니까? Windows 시스템 호출을 호스트의 개별 호출로 변환하지 않습니까?

문자 그대로 시스템 호출을 사용자 공간에서 일대일로 번역함으로써 WINE이 의미하는 바는 아닙니다. 에뮬레이터는보다 회로적인 경로를 통해이를 추상적으로 수행합니다. 시스템 호출을 직접 번역하지는 않습니다.

진정한 에뮬레이터 는 가상 운영 체제가 아닌 가상 시스템 (예 : x86-64)을 만듭니다 . 그런 다음 이론적으로 해당 스타일의 컴퓨터를 대상으로하는 모든 운영 체제를 실행할 수 있습니다. 일반적으로 "에뮬레이터"에는 운영 체제가 포함되지만 실제로는 에뮬레이션이 아닙니다. 포함 된 OS는 실제 시스템에서 실행되는 것과 동일합니다.

에뮬레이터는 때때로 호스트 시스템과 다른 하드웨어를 시뮬레이션하는 데 사용되지만 한 OS를 다른 OS에서 실행하기 위해 정확히 동일한 하드웨어도 시뮬레이션합니다.

와인은 실제로 윈도우가 아니라는 점에서 이것과 다릅니다. 내부에 실제 윈도우 복사본으로 x86-64 에뮬레이터를 실행할 수는 있지만 WINE이 아닙니다. 에뮬레이터보다 실제로 더 효율적이라고 주장합니다. 시스템 호출을 번역하는 데 드는 오버 헤드는 아마도 VM을 실행하는 것보다 낮습니다. 단점은 WINE이 창일 수 있다는 것입니다. 일반적인 VM 처럼 다른 OS에서는 사용할 수 없습니다 .


13

Java 가상 머신을 고려하십시오. JVM은 다른 것을 에뮬레이션하지 않으며 모두 사양의 구현입니다. 와인은 win32 API를 모방하지 않고 구현합니다. 스펙과 현실이 반드시 일치하는 것은 아니며, Microsoft의 구현과 Wine의 구현 모두 버그가있는 코드를 작동시키는 해결 방법이 있으며 어떤 구현이 특정 프로젝트에 더 적합한 대상인지는 분명하지 않습니다.


4

Wine은 Windows API 호출을 가로 채서 해당 Linux API 호출로 즉시 변환하는 shim입니다. 에뮬레이터 또는 가상 머신은 대신 물리적 머신을 에뮬레이션합니다. 분명히 심이 더 효율적이지만 원하는 기능을 완전히 흉내낼 수있는 것은 아닙니다.


0

에뮬레이터는 다른 OS / 프로세서 플랫폼 위에서 실행되는 에뮬레이터 응용 프로그램에서 OS / 프로세서 플랫폼의 논리와 동작을 만들어 일반적으로 Windows 응용 프로그램을 실행하는 프로세서 및 / 또는 OS를 가상화합니다. Wine은 Windows OS / 프로세서 동작을 가상화하지 않고 Windows OS와 동일한 추상화 수준에서 Windows 응용 프로그램을 실행합니다. Windows API를 다시 구현하여 Unix 기반 OS / 프로세서 플랫폼에서 직접 실행합니다. 즉, Wine은 Windows API 호출 요청을 물리적 프로세서와 직접 통신하는 동등한 Unix 기반 코드로 직접 변환하는 컴파일 된 DLL 세트 인 Windows OS의 핵심 요소를 다시 구현 한 것입니다.

즉, Wine + Linux가 Windows보다 Windows 응용 프로그램을 더 빨리 실행할 수있는 런타임 컨텍스트가 있음을 의미합니다! 에뮬레이터는 코드가 더 높은 수준의 추상화로 유닉스 기반 플랫폼 위에서 CPU / WinOS 플랫폼을 시뮬레이션하는 데 바쁠 것이므로 그 가능성을 결코 가질 수 없었습니다. 이 경우 Windows 응용 프로그램을 실행하려면 더 많은 번역과 인터페이스가 필요합니다. (아래 다이어그램 참조)

간단히 말해서 Wine은 Windows를 에뮬레이션하는 것이 아니라 Windows를 다시 구현 한 것입니다.

여기에 이미지 설명을 입력하십시오

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.