Bir programı başarılı bir şekilde çalıştırmak, üç şeyin eşleşmesini gerektirir:
- CPU komut seti ( PC'nizde x86 , cep telefonunuzda ARM , bazı Apple Mac'lerde PowerPC , Java Appletleri için Java bayt kodu , ".Net" / Mono uygulamaları için CLI )
- İkili Dosya Biçimi ( Microsoft Windows için PE / COFF ".exe", Java Uygulamaları için .jar , PE32 ".exe", Unix / Linux'ta ELF )
- Uygulama Programlama Arabirimi ; (Örn. Linux / Unix üzerindeki POSIX , Mac OSX için Kakao , Microsoft Windows'daki Win32 , ".Net" / Mono uygulamaları için Temel Sınıf Kütüphanesi ).
Her ikisini de eşleştirici olma şansını, emülatörlere / tercümanlara (diğer CPU komut setleri için), ekstra dosya yükleyicilere (yabancı dosya formatları için) ve daha fazla API sağlayan ek programlama kitaplıklarına sahip olarak artırabilirsiniz.
Ayrıca, bazı işlemcilerin yerel olarak birden fazla komut setini çalıştırabileceğine dikkat edin; bir PC oldukça sık x86 ve amd64 komut setine sahiptir; Bir ARM işlemcisi dört yürütebilir: ARM32 / Thumb / Java bytecode / ThumbEE . Bazı işletim sistemleri de birden fazla API sağlayabilir (Microsoft Windows, Win32 ve POSIX sağlar ).
Her şey için ekstra bir yazılıma ihtiyacınız var. Java programlarını çalıştırmak için çalışması için yukarıda listelenen üç bölüme ihtiyacınız vardır: bayt kodunu çalıştırmak için bir Java Sanal Makinesi programı ; Java programlarını başlatmanın bir yolu ve programların çağrılması için bir Java Sınıf Kütüphanesi. "Java", burada Sun tarafından geliştirilen, ancak bir kullanıcı olarak sık sık indirilen birkaç ayrı teknoloji için burada bir markadır.
Aynısı, Microsoft tarafından geliştirilen ve farklı teknolojiler için bir pazarlama markası olan ".Net" için de geçerlidir: Ortak Dil Çalışma Zamanı / Temel Sınıf Kütüphanesi (CLR) API; VES yükleyici ve Ortak Dil Arabirimi (CLI) komut setidir.
Bu teknolojileri Microsoft'tan, Sun'dan veya Intel'den, aslında bir şey icat ettikleri için indirmeniz gerekmez. AMD, işlemcileri Intel'in standartlarıyla uyumlu hale getirir; Hem Apache ("Harmony") hem de Google ("Android Dalvik") Java biçiminde bir paket oluşturuyor. ve Mono bir CLR / CLI / VES paketi sunar. Önemli olan, herkesin aynı standartları kullanması ve bunları uyumlu hale getirmesidir. Bir DVD disk, standardı karşılayan herhangi bir DVD oynatıcıda oynatılır ve bir HTML web sayfası, HTML standartlarını karşılayan herhangi bir Web Tarayıcısında oluşturulur.
- Mono , Mac OSX, MS Windows ve Linux üzerinde çalışabilen bir CLR / CLI / VES paketidir.
- Wine , Mac OSX, MS Windows ve Linux üzerinde çalışabilen bir Win32 API uygulamasıdır.
- Kaçabilirsiniz Mono üstünde Şarap herhangi bir işletim sisteminin üzerinde.
- Kaçabilirsiniz Wine üstünde QEMU herhangi işlemci mimarisi üstüne,.
Böylece Mono , CLR .exe uygulamalarını çalıştırır ve Wine , Win32 .exe uygulamalarını çalıştırır. Ortak olan tek şey, dosya adlarının ".exe" ile bitmesidir; içerikler tamamen farklı ve uyumsuz, bu yüzden doğru olana ihtiyacınız var .
Tıpkı bir Python yorumlayıcısı Perl ile sunulduğunda hata verir (ve tersi), bir CLR yorumlayıcısı x86 + Win32 veya JVM + Java bayt kodu ile sunulduğunda hata verir. Çalıştırmak istediğiniz belirli bir programa bağlantı gönderebiliyorsanız, kendim veya bir başkası size tam komut setini, dosya formatını ve onun için tasarlandığı API'yi ve Linux'ta ne yüklemeniz gerektiğini söyleyebilmelidir. çalıştırmak için. Umarım yardımcı olur!
(Bazen ikisine de ihtiyacınız olabilir. Örneğin, Openbve train simülatörü C # ve PE / COFF + CLI + CLR'ye derlenmiştir, ancak isteğe bağlı olarak PE / COFF + Win32 + x86 için derlenmiş C ikili eklentilerini de kullanabilirsiniz. Bu durumda, Wine altında Mono'nun bir Win32 sürümüne ihtiyacınız var.İşlemci mimarisi de öyleyse, öykünmesi gerekenden farklı, bu yüzden Qemu altındaki Wine altında Mono).