Seperti yang saya pahami emulator (dengan cara sederhana), mereka menerjemahkan atau mengganti pemanggilan fungsi suatu program menggunakan fungsi sistem X menjadi fungsi yang digunakan oleh sistem Y di mana program dijalankan. Proyek Wine mengklaim bahwa Wine Bukan Emulator, karena:
Alih-alih mensimulasikan logika Windows internal seperti mesin virtual atau emulator, Wine menerjemahkan panggilan Windows API menjadi panggilan POSIX on-the-fly, menghilangkan kinerja dan hukuman memori dari metode lain dan memungkinkan Anda untuk mengintegrasikan aplikasi Windows ke desktop Anda.
Nah, bagaimana emulator dan mesin virtual mensimulasikan logika Windows internal pada sistem host bukan Windows? Bukankah itu dengan menerjemahkan panggilan sistem Windows ke masing-masing panggilan tuan rumah? Apakah perbedaan antara emulator dan non-emulator (seperti Wine) adalah bahwa emulator mengemulasi keseluruhan sistem operasi maka aplikasi tersebut menggunakan API sistem tanpa mengetahui bahwa itu berbicara ke emulator, sedangkan non-emulator secara langsung menerjemahkan panggilan aplikasi ke dalam host ( dan aplikasinya juga mungkin tidak mengetahuinya)? Apakah level tambahan tipuan adalah satu-satunya yang berbeda antara emulator dan Wine?
Jawaban:
Tidak, atau setidaknya tidak dalam arti yang dilakukan WINE - dengan menerjemahkan sistem secara harfiah memanggil satu lawan satu di ruang pengguna. Emulator melakukan ini secara abstrak melalui rute yang lebih berputar; itu tidak menerjemahkan panggilan sistem secara langsung.
Emulator sejati menciptakan mesin virtual (mis. X86-64), bukan sistem operasi virtual . Anda kemudian dapat secara teori menjalankan sistem operasi apa pun yang menargetkan gaya mesin itu. Biasanya "emulator" termasuk sistem operasi, tetapi itu tidak benar-benar seperti apa yang ditiru; OS yang disertakannya sama dengan OS yang dijalankan pada mesin nyata.
Emulator kadang-kadang digunakan untuk mensimulasikan perangkat keras yang berbeda dari mesin host, tetapi juga perangkat keras yang persis sama dengan tujuan menjalankan satu OS di dalam yang lain.
WINE berbeda dari ini karena sebenarnya bukan windows. Anda dapat menjalankan emulator x86-64 dengan salinan windows asli di dalamnya, tetapi bukan itu WINE. Klaim mereka bahwa itu sebenarnya lebih efisien daripada emulator masuk akal - overhead untuk hanya menerjemahkan panggilan sistem mungkin lebih rendah daripada menjalankan VM. Kerugiannya adalah bahwa WINE hanya bisa berupa windows; Anda tidak dapat menggunakannya dengan beberapa OS lain karena Anda dapat menggunakan VM normal .
sumber
Pertimbangkan Java Virtual Machines. Tidak ada JVM yang mengemulasi yang lain, mereka semua adalah implementasi dari spesifikasi. Anggur tidak meniru api win32, ini adalah implementasi dari itu. Spesifikasi dan kenyataan belum tentu cocok, baik implementasi Microsoft maupun implementasi Wine memiliki solusi untuk membuat kode buggy berfungsi, dan belum tentu implementasi mana yang merupakan target yang lebih baik untuk setiap proyek tertentu.
sumber
Wine adalah shim yang memotong panggilan API Windows dan mengubahnya dengan cepat ke panggilan API Linux yang sesuai. Sebuah emulator atau mesin virtual bukannya meniru mesin fisik. Jelas shim lebih efisien, tetapi mungkin tidak sepenuhnya mampu meniru fungsi yang diinginkan.
sumber
Emulator memvirtualkan prosesor dan / atau OS yang biasanya menjalankan aplikasi Windows dengan membuat logika dan perilaku platform OS / prosesor dalam aplikasi emulator yang berjalan di atas platform OS / prosesor lain. Wine tidak memvirtualisasikan perilaku OS Windows / prosesor tetapi menjalankan aplikasi Windows pada tingkat abstraksi yang sama dengan OS Windows. Ini dilakukan dengan mengimplementasikan kembali Windows API untuk berjalan langsung pada platform OS / prosesor berbasis Unix. Yaitu, Wine adalah implementasi ulang dari elemen inti OS Windows, satu set DLL yang dikompilasi yang secara langsung menerjemahkan permintaan panggilan API Windows ke dalam kode setara berbasis Unix yang berkomunikasi langsung dengan prosesor fisik.
Ini berarti bahwa kadang-kadang ada konteks run-time yang memungkinkan Wine + Linux menjalankan aplikasi Windows lebih cepat daripada Windows itu sendiri! Sebuah Emulator tidak akan pernah memiliki kemungkinan itu karena kodenya akan sibuk mensimulasikan platform CPU / WinOS di atas platform berbasis Unix pada tingkat abstraksi yang lebih tinggi. Dalam hal ini, lebih banyak terjemahan dan antarmuka diperlukan untuk menjalankan aplikasi Windows. (Lihat diagram di bawah)
Singkatnya, Wine adalah implementasi ulang Windows, bukan emulasi Windows.
sumber