ความแตกต่างระหว่างไวน์และโมโน


31

เท่าที่ฉันรู้ทั้ง Wine และ Mono ถูกใช้เพื่อเรียกใช้แอพพลิเคชั่น Windows ภายใต้ Ubuntu

ดังนั้นฉันสงสัย

  1. ความแตกต่างของพวกเขาคืออะไร? พวกเขาเป็นทั้งเครื่องเสมือนหรือไม่? หรือแต่ละคนอยู่ในหมวดหมู่อื่นบ้าง
  2. มันจะดีกว่าเมื่อใดควรใช้กับแอพพลิเคชั่น Windows ประเภทใด ตัวอย่างเช่นแอปพลิเคชันเหล่านั้นที่อาจหรืออาจไม่ต้องการ. net Framework
  3. พวกเขาพึ่งพาซึ่งกันและกันหรือไม่? พวกเขาจำเป็นต้องติดตั้งพร้อมกันไหม? หรือไม่ทำงานแต่ละอย่างอิสระโดยไม่ต้องมีของอื่น ๆ ?

ขอบคุณและขอแสดงความนับถือ!

คำตอบ:


34

ประสบความสำเร็จในการรันโปรแกรมจำเป็นต้องมีสามสิ่งที่ตรงกับ:

  • ชุดคำสั่ง CPU (เช่นx86ในพีซี, ARMในโทรศัพท์มือถือของคุณ, PowerPCใน Apple Mac บางเครื่อง, Java bytecodeสำหรับ Java Applets, CLIสำหรับแอปพลิเคชั่น ".Net" / Mono)
  • รูปแบบไฟล์ไบนารี (เช่นPE / COFF ".exe" สำหรับ Microsoft Windows, .jarสำหรับ Java Applets, PE32 ".exe", ELFบน Unix / Linux)
  • Application Programming Interface ; (เช่นPOSIXบน Linux / Unix, Cocoaสำหรับ Mac OSX, Win32บน Microsoft Windows, Base Class Libraryสำหรับแอปพลิเคชัน ".Net" / Mono)

คุณสามารถเพิ่มโอกาสในการจับคู่ทั้งสามโดยมีอีมูเลเตอร์ / ล่าม (สำหรับชุดคำสั่ง CPU อื่น ๆ ) โดยมีตัวตักไฟล์เพิ่มเติม

โปรดทราบด้วยว่าโปรเซสเซอร์บางตัวสามารถดำเนินการชุดคำสั่งได้มากกว่าหนึ่งชุด พีซีค่อนข้างบ่อยมีชุดคำสั่งx86และamd64 ; ARMโปรเซสเซอร์สามารถดำเนินการที่สี่: ARM32 / Thumb / Java bytecode ระบบปฏิบัติการบางระบบสามารถให้ API ได้มากกว่าหนึ่ง API เช่นกัน (Microsoft Windows มีWin32และPOSIX )

สำหรับทุกสิ่งที่คุณต้องการซอฟต์แวร์เพิ่มเติม สำหรับการรันโปรแกรม Java คุณจำเป็นต้องมีสามส่วนที่ระบุไว้ข้างต้นเพื่อให้มันใช้งานได้: โปรแกรม Java Virtual Machine เพื่อเรียกใช้ bytecode; วิธีเรียกใช้โปรแกรม Java และ Java Classlibrary สำหรับโปรแกรมที่จะโทร "Java" เป็นชื่อแบรนด์ที่นี่สำหรับเทคโนโลยีแยกต่าง ๆ ที่พัฒนาโดย Sun แต่สำหรับผู้ใช้พวกเขามักจะดาวน์โหลดเป็นหนึ่ง

เช่นเดียวกับ ". Net" ซึ่งเป็นชื่อทางการตลาดสำหรับเทคโนโลยีต่างๆที่พัฒนาโดย Microsoft: The Common Language Run-time / Base Class Library (CLR) คือ API; VESเป็นตัวโหลดและCommon Language Interface (CLI) เป็นชุดคำสั่ง

คุณไม่จำเป็นต้องดาวน์โหลดเทคโนโลยีเหล่านั้นจาก Microsoft จาก Sun หรือจาก Intel เพียงเพราะพวกเขาคิดค้นบางสิ่ง AMD ทำให้โปรเซสเซอร์สามารถทำงานร่วมกับมาตรฐานของ Intel ได้ ทั้ง Apache ("Harmony") และ Google ("Android Dalvik") ทั้งคู่ทำชุด Java-like; และ Mono มีชุด CLR / CLI / VES สิ่งสำคัญคือทุกคนใช้มาตรฐานเดียวกันทำให้เข้ากันได้ แผ่น DVD จะเล่นบนเครื่องเล่น DVD ที่ตรงตามมาตรฐานและเว็บเพจ HTML จะแสดงผลในเว็บเบราว์เซอร์ใดก็ได้ที่ตรงตามมาตรฐาน HTML

  • Monoเป็นชุด CLR / CLI / VES ที่สามารถทำงานบน Mac OSX, MS Windows และ Linux
  • Wineเป็นการติดตั้ง Win32 API ที่สามารถทำงานบน Mac OSX, MS Windows และ Linux
  • คุณสามารถเรียกใช้Monoที่ด้านบนสุดของWineได้ที่ด้านบนของระบบปฏิบัติการใด ๆ
  • คุณสามารถเรียกใช้ไวน์ที่อยู่ด้านบนของQemuบนสถาปัตยกรรม CPU ใด ๆ

ดังนั้นMonoทำให้แอปพลิเคชัน CLR .exe ทำงานและไวน์ทำให้แอปพลิเคชัน Win32 .exe ทำงาน สิ่งเดียวที่เหมือนกันคือชื่อไฟล์ลงท้ายด้วย ".exe"; เนื้อหาจะสมบูรณ์แตกต่างและเข้ากันไม่ได้ดังนั้นคุณจึงต้องขวาหนึ่ง

เช่นเดียวกับ Python interpreter จะเกิดข้อผิดพลาดเมื่อแสดงด้วย Perl (และในทางกลับกัน) CLR interpreter จะผิดพลาดเมื่อแสดงด้วย x86 + Win32 หรือ JVM + Java bytecode หากคุณสามารถโพสต์ลิงก์ไปยังโปรแกรมเฉพาะที่คุณต้องการเรียกใช้ตัวฉันเองหรือคนอื่น ๆ ควรจะบอกชุดคำสั่งรูปแบบไฟล์และ API ที่ถูกออกแบบมาและสิ่งที่คุณต้องการติดตั้งบน Linux เพื่อเรียกใช้ หวังว่าจะช่วย!

(บางครั้งคุณอาจจำเป็นต้องใช้ทั้งคู่ตัวอย่างเช่นตัวจำลองOpenbve train เป็น C # และคอมไพล์กับ PE / COFF + CLI + CLR แต่สามารถเลือกใช้ปลั๊กอินไบนารี C ที่คอมไพล์สำหรับ PE / COFF + Win32 + x86 ในกรณีนี้คุณ จำเป็นต้องใช้โมโนเวอร์ชัน Win32 ภายใต้ไวน์หากสถาปัตยกรรม CPU นั้นแตกต่างกันที่จะต้องมีการจำลองดังนั้นโมโนภายใต้ไวน์ภายใต้ Qemu)


22

คำตอบสั้น ๆ :

.NET คือคำตอบของ Microsoft สำหรับ Java และ Mono เป็นการนำโอเพ่นซอร์สมาใช้ ไวน์สำหรับ exes ดั้งเดิมและไม่มีอะไรเกี่ยวข้องกับ Mono ยกเว้นว่าคุณสามารถใช้งานรันไทม์. NET กับมันได้เช่นเดียวกับซอฟต์แวร์ Windows อื่น ๆ


คำตอบที่ยาว:

เพื่อให้เข้าใจถึงความแตกต่างระหว่าง Wine และ Mono (และ. NET) คุณต้องเข้าใจถึงความแตกต่างระหว่างเอ็กซีคิวต์เนทีฟของรหัสเนทีฟและเอ็กซีคิวต์ทั่วไป

รหัสเครื่องแบบเนทีฟใช้รหัสคำสั่งเฉพาะสำหรับโปรเซสเซอร์ของคุณและสั่งการโดยตรง นั่นหมายความว่าพวกเขาจะต้องรวบรวมใหม่สำหรับโปรเซสเซอร์ที่แตกต่างกัน ไวน์สามารถเรียกใช้รหัสเครื่องดั้งเดิมสำหรับ Windows ได้โดยตรงโดยเรียกใช้รหัสปฏิบัติการนี้และตรวจสอบการเรียกใช้ไลบรารี่ใด ๆ

executables "CLR" หรือ "VM" ไม่เฉพาะเจาะจงกับโปรเซสเซอร์เดียว: พวกเขาต้องการซอฟต์แวร์เพิ่มเติมเพื่อเปิดใช้งานโปรเซสเซอร์ Mono / .NET เป็นตัวอย่างหนึ่งของระบบประเภทนี้ โปรแกรม. NET ต้องการ. NET runtime ติดตั้งแม้ว่าคุณจะเรียกใช้บน Windows Java ทำงานในลักษณะเดียวกัน

ดังนั้น:

1) ความแตกต่างระหว่าง Wine และ Mono: Wine ใช้สำหรับการเรียกใช้รหัสเครื่องดั้งเดิมที่สร้างขึ้นสำหรับ Windows และ Mono สำหรับการเรียกใช้ไฟล์ปฏิบัติการ Mono / .NET ซึ่งไม่จำเป็นต้องทำสำหรับแพลตฟอร์มเฉพาะ การติดตั้ง Mono บน Linux เทียบเท่ากับการติดตั้ง. NET runtime บน Windows

2) หากโปรแกรมที่คุณต้องการเรียกใช้ไม่ได้ใช้. NET เลยคุณต้องใช้ Wine โมโนไม่ช่วยอะไรคุณเลย

อย่างไรก็ตามหากโปรแกรมใช้. NET คุณมีสองตัวเลือกซึ่งอาจหรือไม่:

  • คุณสามารถลองใช้งานได้โดยใช้โมโน สิ่งนี้จะล้มเหลวหากโปรแกรม. NET ใช้ฟังก์ชั่นพื้นฐานจาก win32 API ซึ่งแอปพลิเคชั่น. NET หลายรายการ

  • อีกวิธีหนึ่งคุณสามารถติดตั้งรันไทม์ Microsoft .NET สำหรับ windowsใน Wine แล้วเรียกใช้แอปพลิเคชัน. NET ผ่านทางนั้น คุณจะไม่ใช้ Mono เลยในกรณีนี้

3) Wine และ Mono ไม่ได้พึ่งพาซึ่งกันและกัน แต่ตามที่ระบุไว้ข้างต้นคุณสามารถใช้รันไทม์ Microsoft .NET ใน Wine เพื่อรันแอปพลิเคชัน Mono / .NET


ขอบคุณ! (1) ดังนั้นหากแอปพลิเคชันขึ้นอยู่กับทั้ง. NET และ win32 วิธีเดียวคือการติดตั้ง. NET บน Wine แล้วติดตั้งแอปพลิเคชันบน Wine หรือไม่ (2) จะรู้ได้อย่างไรว่าแอปพลิเคชั่นใช้. NET และ / หรือ win32 หรือไม่
ทิม

1
การพิมพ์file *.exeจะแสดงข้อมูลเกี่ยวกับชุดคำสั่ง CPU และประเภทไฟล์ ถ้าเป็น CLI / CLR ( "สุทธิ" / Mono) ที่ยังใช้พื้นเมืองเรียก Win32 API คุณจะต้องใช้มันหรือลักษณะใด ๆfile *.dllไฟล์ที่แสดงให้เห็นว่าเป็น x86 พื้นเมือง + Win32
sladen

คุณยังสามารถติดตั้ง Mono สำหรับ Windows ใน Wine ได้ แต่จากคำถามที่พบบ่อยเกี่ยวกับไวน์นั้นมีโอกาสน้อยที่จะทำงานมากกว่ารันไทม์. NET ไม่มีวิธีง่าย ๆ ที่จะทราบว่าโปรแกรม. NET ใช้การโทร win32 แบบเนทีฟเนื่องจากมีหลายวิธีที่พวกเขาสามารถทำได้ สิ่งที่ดีที่สุดที่ควรทำคือลอง Mono ก่อนถ้าไม่ได้ผลให้ลอง Wine + .NET
Alistair Buxton
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.