와인과 모노의 차이점


31

내가 아는 한 Wine과 Mono는 우분투에서 Windows 응용 프로그램을 실행하는 데 사용됩니다.

그래서 궁금했다

  1. 그들의 차이점은 무엇입니까? 둘 다 가상 머신입니까? 아니면 각각 다른 범주에 속합니까?
  2. 어떤 종류의 Windows 응용 프로그램에 언제 사용해야합니까? 예를 들어 .net Framework가 필요하거나 필요하지 않은 응용 프로그램.
  3. 그들은 서로 의존합니까? 함께 설치해야합니까? 아니면 서로의 존재없이 독립적으로 작동합니까?

감사합니다.

답변:


34

프로그램을 성공적으로 실행하려면 다음 세 가지가 일치해야합니다.

  • CPU 명령어 세트 (예 : PC의 x86 , 휴대폰의 ARM , 일부 Apple Mac의 PowerPC , Java 애플릿의 Java 바이트 코드 , ".Net"/ Mono 응용 프로그램의 CLI )
  • 이진 파일 형식 (예 : Microsoft Windows 용 PE / COFF ".exe", Java 애플릿 용 .jar , PE32 ".exe", Unix / Linux의 ELF )
  • 응용 프로그래밍 인터페이스 ; (예 : Linux / Unix의 POSIX , Mac OSX의 Cocoa , Microsoft Windows의 Win32 , ".Net"/ Mono 응용 프로그램의 기본 클래스 라이브러리 )

에뮬레이터 / 인터프리터 (다른 CPU 명령어 세트의 경우), 추가 파일 로더 (외부 파일 형식의 경우) 및 추가 API를 제공하는 추가 프로그래밍 라이브러리를 통해이 세 가지를 모두 일치시킬 수 있습니다.

또한 일부 프로세서는 기본적으로 둘 이상의 명령어 세트를 실행할 수 있습니다. PC에는 종종 x86amd64 명령 세트가 있습니다. ARM의 : 프로세서는 네 실행할 수 있습니다 / ThumbEE을 ARM32 / 엄지 / 자바 바이트 코드를 . 일부 운영 체제는 기본적으로 둘 이상의 API를 제공 할 수도 있습니다 (Microsoft Windows는 Win32POSIX 제공 ).

다른 모든 것에는 추가 소프트웨어가 필요합니다. Java 프로그램을 실행하려면 위에 나열된 세 부분이 필요합니다 . 바이트 코드 를 실행 하는 Java Virtual Machine 프로그램 ; Java 프로그램을 시작하는 방법 및 프로그램이 호출 할 Java 클래스 라이브러리 "Java"는 원래 Sun에서 개발 한 여러 가지 개별 기술의 브랜드 이름이지만 사용자에게 종종 하나의 기술로 다운로드됩니다.

Microsoft가 원래 개발 한 여러 가지 다른 기술의 마케팅 브랜드 인 ".Net"에도 동일하게 적용됩니다. CLR (공용 언어 런타임 / 기본 클래스 라이브러리 )은 API입니다. VES 는 로더이고 공통 언어 인터페이스 (CLI)는 명령어 세트입니다.

Microsoft, Sun 또는 Intel에서 원래 기술을 개발했다고해서 해당 기술을 다운로드 할 필요는 없습니다. AMD는 프로세서를 인텔 표준과 호환되게합니다. Apache ( "Harmony")와 Google ( "Android Dalvik")은 모두 Java 계열을 만듭니다. Mono는 CLR / CLI / VES 제품군을 제공합니다. 중요한 것은 모든 사람이 동일한 표준을 사용하여 호환되도록한다는 것입니다. DVD 디스크는 표준을 충족하는 모든 DVD 플레이어에서 재생되며 HTML 웹 페이지는 HTML 표준을 충족하는 모든 웹 브라우저에서 렌더링됩니다.

  • Mono 는 Mac OSX, MS Windows 및 Linux에서 실행할 수있는 CLR / CLI / VES 제품군입니다.
  • Wine 은 Mac OSX, MS Windows 및 Linux에서 실행할 수있는 Win32 API 구현입니다.
  • 모든 운영 체제에서 Wine 상단에서 Mono 를 실행할 수 있습니다 .
  • 모든 CPU 아키텍처에서 Qemu 위에서 Wine 을 실행할 수 있습니다 .

따라서 Mono 는 CLR .exe 응용 프로그램을 실행하고 Wine 은 Win32 .exe 응용 프로그램을 실행합니다. 유일한 파일 이름은 ".exe"로 끝나는 것입니다. 내용이 완전히 다르고 호환되지 않으므로 올바른 내용이 필요합니다 .

Perl (및 그 반대로)을 표시 할 때 Python 인터프리터가 오류를 발생시키는 것처럼 x86 + Win32 또는 JVM + Java 바이트 코드를 표시하면 CLR 인터프리터가 오류가 발생합니다. 실행하려는 특정 프로그램에 대한 링크를 게시 할 수있는 경우 본인이나 다른 사람이 정확한 명령어 세트, 파일 형식 및 API, Linux에 설치해야하는 내용을 알려줄 수 있어야합니다. 그것을 실행합니다. 희망이 도움이됩니다!

(때로는 둘 다 필요할 수도 있습니다. 예를 들어 Openbve 기차 시뮬레이터는 C #이며 PE / COFF + CLI + CLR로 컴파일되지만 PE / COFF + Win32 + x86 용으로 컴파일 된 C 바이너리 플러그인을 선택적으로 사용할 수 있습니다.이 경우 Win32 버전의 Mono under Wine이 필요합니다 .CPU 아키텍처도 에뮬레이션이 필요한 것과 다르면 Qemu에서는 Wine의 Mono입니다.


22

짧은 대답 :

.NET은 Java에 대한 Microsoft의 답변이며 Mono는 그에 대한 오픈 소스 구현입니다. Wine은 기본 exe를위한 것이며 다른 기본 Windows 소프트웨어와 마찬가지로 .NET 런타임을 실행할 수 있다는 점을 제외하고는 Mono와 아무 관련이 없습니다.


긴 대답 :

Wine과 Mono (및 .NET)의 차이점을 이해하려면 기본 머신 코드 실행 파일과 "가상 머신"실행 파일 인 "공용 언어 런타임"의 차이점을 이해해야합니다.

기본 머신 코드 실행 파일은 프로세서에 특정한 명령어 코드를 사용하며 직접 실행합니다. 즉, 다른 프로세서에 맞게 다시 컴파일해야합니다. Wine은이 실행 코드를 직접 실행하고 라이브러리 호출을 잡아서 Win32 API의 자체 구현으로 경로 재지 정하여 Windows 용 기본 기계 코드 실행 파일을 실행할 수 있습니다.

"CLR"또는 "VM"실행 파일은 하나의 프로세서에만 국한된 것이 아닙니다. 프로세서를 실행하려면 추가 소프트웨어가 필요합니다. Mono / .NET은 이러한 종류의 시스템 중 하나입니다. .NET 프로그램은 Windows에서 실행할 때도 .NET 런타임이 설치되어 있어야합니다. 자바도 같은 방식으로 작동합니다.

그래서:

1) Wine과 Mono의 차이점 : Wine은 Windows 용으로 만들어진 기본 머신 코드 실행 파일을 실행하기위한 것이고 Mono는 특정 플랫폼 용으로 반드시 만들어 질 필요는없는 Mono / .NET 실행 파일을 실행하기위한 것입니다. Linux에 Mono를 설치하는 것은 Windows에 .NET 런타임을 설치하는 것과 같습니다.

2) 실행하려는 프로그램이 .NET을 전혀 사용하지 않으면 Wine을 사용해야합니다. 모노는 전혀 도움이되지 않습니다.

그러나 프로그램에서 .NET을 사용하는 경우 두 가지 옵션 중 하나가 작동하거나 작동하지 않을 수 있습니다.

  • Mono를 사용하여 실행할 수 있습니다. .NET 프로그램이 win32 API의 기본 기능을 사용하는 경우에는 실패합니다. Windows 용으로 제작 된 많은 .NET 응용 프로그램이 전부는 아닙니다.

  • 또는 Wine 내부의 Windows 용 Microsoft .NET 런타임 설치 한 다음이를 통해 .NET 응용 프로그램을 실행할 수 있습니다. 이 경우 모노를 전혀 사용하지 않습니다.

3) Wine과 Mono는 서로 의존하지 않지만 위에서 언급 한대로 Wine에서 Microsoft .NET 런타임을 사용하여 Mono / .NET 응용 프로그램을 실행할 수 있습니다.


감사! (1) 응용 프로그램이 .NET과 win32에 의존하는 경우 유일한 방법은 와인에 .NET을 설치 한 다음 와인에 응용 프로그램을 설치하는 것입니까? (2) 응용 프로그램이 .NET 및 / 또는 win32에 의존하는지 확인하는 방법은 무엇입니까?
Tim

1
입력 file *.exe하면 CPU 명령어 세트 및 파일 유형에 대한 정보가 표시됩니다. 기본 Win32 API 호출 사용 하는 CLI / CLR ( ". Net"/ Mono) 응용 프로그램 인 경우이를 실행하거나 file *.dll기본 x86 + Win32로 표시되는 파일을 찾아야합니다 .
Sladen

Wine에 Windows 용 Mono를 설치할 수도 있지만 Wine FAQ에 따르면 .NET 런타임보다 작동하기가 쉽지 않습니다. .NET 프로그램이 네이티브 win32 호출을 사용하는지 여부를 알 수있는 간단한 방법은 없습니다. 가장 좋은 방법은 Mono를 먼저 사용하고, 작동하지 않으면 Wine + .NET을 사용하는 것입니다.
Alistair Buxton
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.