ประสบความสำเร็จในการรันโปรแกรมจำเป็นต้องมีสามสิ่งที่ตรงกับ:
- ชุดคำสั่ง 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)