Apa artinya perangkat lunak berjalan secara asli?

27

Saya bertanya-tanya apa artinya perangkat lunak berjalan secara asli. Apa sebenarnya perangkat lunak itu dan bagaimana bedanya dengan perangkat lunak yang tidak berjalan secara asli? Bagaimana saya bisa tahu jika suatu bagian perangkat lunak akan berjalan secara native di komputer saya? Apakah mungkin sudah ada perangkat lunak di komputer saya yang berjalan secara asli?

Throsby
sumber
2
"asli" menyiratkan itu dirancang untuk berjalan pada platform apa pun / os on
yuritsuki
Saya juga ... sepertinya para moderator kesulitan membaca pertanyaan
5
@faB Anda benar-benar menyadari bahwa tidak ada moderator yang terlibat dalam menutup pertanyaan?
slhck
Saya akui, judul pertanyaan membuat saya berpikir tentang perbedaan antara menjalankan "program" di bawah "sistem operasi" atau pada prosesor itu sendiri (misalnya akses perangkat keras langsung).
Terobosan
Bukan berarti pertanyaannya buruk , tetapi tidak baik untuk situs ini. Sebagaimana dibuktikan oleh jawaban, itu bukanlah sesuatu yang dapat dijawab dengan bersih dan memiliki sejumlah argumen di sekitarnya, yang membuat penutupannya sepenuhnya sesuai menurut FAQ.
Afrazier

Jawaban:

43

Suatu perangkat lunak adalah asli dari suatu platform jika ia dirancang untuk berjalan pada platform itu.

Sebuah platform biasanya mengacu pada sistem operasi, tetapi juga dapat diterapkan ke perangkat seperti Nintendo Game Boy.

Menggunakan Game Boy sebagai contoh, ia mendapatkan perangkat lunaknya dari kartrid. Kartrid ini berisi kode yang berjalan secara asli di Game Boy.

Emulator adalah lapisan yang memungkinkan perangkat lunak yang dirancang untuk satu platform dijalankan di platform lain. Misalnya, ada emulator yang dapat mengeksekusi gambar kartrid Game Boy dan memungkinkan Anda untuk memainkan game Game Boy di komputer Anda atau bahkan ponsel Anda.

Sebuah lapisan kompatibilitas adalah jenis seperti sebuah emulator. Ketika komputer 64-bit dan sistem operasi menjadi arus utama, mereka harus kompatibel dengan teknologi 32-bit yang ada. Karena arsitektur 64-bit dan 32-bit sangat berbeda, lapisan kompatibilitas sering diperlukan untuk menjalankan perangkat lunak 32-bit pada mesin 64-bit. Untuk Microsoft Windows edisi 64-bit, Microsoft perlu menulis lapisan kompatibilitas agar program 32-bit tetap bekerja pada sistem 64-bit yang baru. Inilah sebabnya mengapa beberapa program sering diinstal ke folder bernama Program Files (x86), di mana x86berarti "32-bit".

Lapisan kompatibilitas cenderung lebih intim dengan sistem asli daripada emulator. VirtualBox mengemulasi perangkat keras untuk sistem operasi * , dan sistem yang ditiru tidak memiliki banyak interaksi langsung dengan sistem host. WoW64 adalah lapisan kompatibilitas yang memungkinkan program 32-bit berjalan pada Windows 64-bit secara lebih terintegrasi. WoW64 membantu membuat program yang kompatibel daripada meniru mereka di lingkungan yang terisolasi.

Sebuah perpustakaan terjemahan adalah komponen lapisan kompatibilitas. Setiap kali kode biner berjalan secara non-asli, perpustakaan terjemahan membantu mengalihkan panggilan asing, non-asli ke panggilan asli yang dapat dipahami oleh sistem. Program perakitan yang ditulis untuk TI-83 asli mungkin tidak kompatibel dengan kalkulator TI-83/84 Plus yang lebih baru karena beberapa panggilan yang masuk akal dalam arsitektur TI-83 mungkin tidak lagi berlaku di TI-83/84 +. Pustaka terjemahan (mungkin termasuk dalam cangkang seperti MirageOS ) memastikan bahwa panggilan untuk TI-83 pergi ke tempat-tempat baru yang diperbarui dalam kalkulator TI-83/84 +.

Kode platform-independent ditulis dalam bahasa yang ditafsirkan oleh sesuatu yang biasanya berjalan secara native. Sebagai contoh, PHP adalah bahasa pemrograman yang ditafsirkan dan dieksekusi oleh biner PHP yang diinstal, yang telah dikompilasi secara native untuk sistem operasi berbasis Windows, Mac, dan Unix. Kode PHP yang ditulis oleh penulis web tidak tergantung pada platform, memungkinkan kode untuk bekerja pada beberapa sistem operasi selama PHP diinstal untuk sistem operasi tersebut.


Lain-lain

Koreksi

* Terima kasih, Michael Kjörling , karena menangkap beberapa masalah dengan jawaban ini .

Lain

Perbedaan antara "asli" dan "non-pribumi" bukanlah hitam dan putih . (Kredit untuk afrazier )

Deltik
sumber
3
Nitpick kecil: (ini VirtualBox, bukan VirualBox, dan) VirtualBox tidak mengemulasi sistem operasi, ini mengemulasi perangkat keras . Jadi Anda dapat menginstal sistem operasi apa pun yang Anda suka di VirtualBox (tunduk pada batasan virtualisasi), atau bahkan menulis sendiri dari awal.
CVn
1
Native juga sering menyiratkan bahwa itu menggunakan set pustaka primer dan API untuk platform yang mendasarinya, yang dapat membuat perbedaan sedikit kabur. Ada beberapa orang yang tidak menganggap aplikasi .NET sebagai "asli" seperti aplikasi Win32 API adalah "asli", dan demikian pula beberapa orang tidak menganggap program KDE berjalan di desktop "asli" Gnome.
afrazier
@afrazier: Itu karena aplikasi .NET dirancang untuk berjalan pada "Common Language Runtime", dan memerlukan lapisan kompatibilitas untuk dijalankan pada Windows. Atau lapisan kompatibilitas yang berbeda untuk dijalankan di Linux.
Ben Voigt
@Ben Voigt: Ini masih API pihak pertama, binari dikompilasi ke kode x86 / amd64 asli (apakah pada saat runtime oleh CLR atau di muka dengan ngen), dan kerangka kerja telah dikirim dengan versi Windows terbaru. Ini adalah bagian dari argumen yang lebih besar, dan tidak terlalu tepat di sini.
afrazier
Virtual Box bukan secara teknis emulator tetapi Virtualizer. Emulator waktu yang berlalu selalu meniru perangkat keras yang sama sekali berbeda. Di bawah virtualizer, OS & perangkat lunak sebenarnya berjalan secara native pada CPU host. Perbedaannya adalah bahwa perangkat tersebut virtual atau dicontoh. Ini adalah perbedaan teknis kecil yang ditunjukkan oleh situs web Virtual Box di sini: virtualbox.org/wiki/Virtualization
Matt H
4

Kode asli biasanya digunakan sebagai kebalikan dari kode platform-indepedent. Jika Anda menjalankan perangkat lunak asli, Anda menjalankan biner yang dikompilasi dan bukan, misalnya, skrip platform-independen seperti javascript atau Java bytecode. Kompilasi C atau kompilasi C ++ adalah contoh kode asli yang bagus.

Niklas Rosencrantz
sumber
3

Secara mengejutkan ada beberapa kemungkinan jawaban, tetapi standar biasanya adalah: kode dikompilasi ke opcodes untuk CPU, dan berjalan melawan pustaka pemrograman OS yang mem-boot komputer. Dalam hal ini, sebagian besar kode yang Anda jalankan adalah kode asli. Mungkin beberapa contoh tandingan akan menjelaskan semuanya.

Java bukan kode asli. Itu dikompilasi ke bytecode menengah, yang kemudian dijalankan pada chipset tertentu. Java dapat memanggil kode asli. Eclipse adalah contoh yang bagus - untuk kecepatan, Java memanggil beberapa panggilan grafis asli platform.

Jika Anda menjalankan WINE , emulator MS Windows API, itu bukan kode asli. Meskipun Anda mengeksekusi kode yang dirancang untuk chipset itu (x86), Anda tidak menjalankan kode untuk OS yang mem-boot-nya, tetapi mengganti pustaka. MAME menjalankan binari untuk berbagai CPU dan sistem operasi.

Skrip bukan kode asli. Mereka ditulis dalam bahasa tingkat yang lebih tinggi yang kemudian harus dikonversi pada saat runtime ke kode yang berjalan pada CPU Anda.

Ada beberapa garis buram. Browser web Anda berjalan sebagai kode asli ,, tetapi juga dapat menjalankan Java (dikompilasi untuk bytecode) atau Javascript (bahasa yang diartikan skrip).

Homolka yang kaya
sumber
.NET, VBA, XUL , IA-32 (pada CPU AMD64, setidaknya), ...
CVn
3

Itu sangat tergantung pada konteksnya. Bagi saya, "asli" berarti aplikasi menggunakan fitur dan mekanisme yang disediakan sistem operasi, daripada menggulirkannya sendiri. Itu dapat berlaku untuk fitur antarmuka pengguna (tombol, jendela, dialog pemilih file), serta fitur di bawah tenda (mis integrasi dengan "Buka dengan ...").

Misalnya, pada Windows, aplikasi asli akan menggunakan "WinAPI" untuk mendapatkan tombol, scrollbars, dll yang sama seperti aplikasi lain. Mereka berperilaku persis sama di aplikasi sistem (notepad) seperti di aplikasi pihak ketiga asli.

Aplikasi Java sering menggunakan "Swing" dan terlihat sangat berbeda, karena mereka menggambar kontrol mereka sendiri, daripada menggunakan yang sistem. Manfaatnya adalah bahwa program terlihat sama di setiap OS.

Opsi lain untuk membangun GUI adalah toolkit lintas platform seperti "QT". QT akan meminta OS untuk menggambar kontrol untuk itu, sehingga mereka harus terlihat sangat asli, tidak peduli apakah Anda menjalankan Windows, OSX, atau Linux. Sebuah kotak teks QT akan terlihat seperti kotak teks windows, namun itu bukan yang asli, tetapi semacam emulasi. Anda mungkin melihat perbedaan kecil dalam detail (misalnya menu konteks, metode input, dll.).

Catatan ketika orang mengatakan "asli", mereka sering berarti program dikompilasi ke kode mesin daripada kode perantara, yang dijalankan di mesin virtual (seperti program Java dan .NET). Dalam contoh di atas, aplikasi WinAPI dan QT menggunakan kode mesin, sedangkan program Java dikompilasi ke bytecode Java. Penggunaan ini agak bermasalah saat ini, karena banyak pengguna akan mempertimbangkan aplikasi asli .NET untuk Windows - itu hanya sebuah .exe, menggunakan kontrol dan API yang persis sama di bawah tenda, dan hampir tidak dapat dibedakan dari program yang dikompilasi untuk kode mesin.

Demikian juga, saya akan mempertimbangkan program yang menggunakan GTK, tahu tentang struktur sistem file Unix dan mungkin datang dalam paket .deb asli untuk Ubuntu atau Gnome. Bahkan ada aplikasi Gnome pihak pertama yang ditulis dalam javascript yang bisa disebut orang asli! Hal yang sama berlaku untuk aplikasi Windows 8 "Metro", yang dapat ditulis dalam berbagai bahasa, beberapa dikompilasi, beberapa tidak.

jdm
sumber
2

Untuk memasukkan istilah yang lebih abstrak, itu seperti membiarkan orang lain mempercayai Anda menjalankan program dalam bahasa yang berbeda.

  • Asli berarti OS akan menggunakan dialek tercepat dan termudah yang ia tahu, biner.

    Kelebihan: ketersediaan bahasa yang cepat dan besar yang dapat saling berbicara satu sama lain karena itu adalah masalah logam. Cons: keamanan, API kompleks, terbatas pada kemampuan OS, juga kompiler sulit dibuat, karena suatu program, setelah dikompilasi, dilepaskan ke alam liar.

  • Bukan asli, berarti kode Anda tidak akan dieksekusi langsung oleh OS. Ia dapat dieksekusi dengan berbagai cara, yang utama ditafsirkan dan menjalankan versi bytecode program Anda di mesin virtual.

    Pro: API hampir selalu berubah, jadi jauh lebih mudah bagi programmer untuk bekerja (setidaknya ketika mereka tetap menggunakan bahasa khusus ini). Kontra: kinerja (sering kali sedikit menurun, jarang bisa menjadi masalah), dan tidak semua orang benar-benar akan menggunakan bahasa khusus ini, jadi itu juga bisa menjadi masalah untuk mengadopsi teknologi ini. Keamanan juga bisa menjadi masalah, tetapi jauh lebih terkendali. Entah bagaimana.

jokoon
sumber