Dalam istilah yang sangat sederhana, apa yang membuat lintas platform program adalah kemampuan Anda untuk mengambil sumber dari satu lingkungan, mengompilasinya di lingkungan lain dan membuat produk jadi berfungsi seperti yang diharapkan.
Dalam istilah yang kurang sederhana, program ini memiliki tumpang tindih penuh antara apa yang diharapkan tersedia oleh program dan apa yang disediakan oleh lingkungan target Anda. Setelah Anda melakukan apa pun yang membuat tumpang tindih kurang dari 100%, seperti menggunakan perpustakaan khusus lingkungan atau fitur bahasa dengan perilaku tidak terdefinisi, Anda telah mengikat program Anda ke lingkungan yang dapat menyediakan fitur yang tidak tumpang tindih.
("Platform" adalah kata yang agak licin. Orang-orang dapat berbicara tentang Windows dan Unix sebagai platform atau Linux, OS X, BSD dan Solaris sebagai platform meskipun mereka semua secara nominal Unix. Aduk menjalankan semua hal di atas dengan berbeda arsitektur perangkat keras dan hal-hal menjadi lebih samar. Karena itu, saya akan mulai menggunakan kata.)
Untungnya, ada standar untuk meringankan masalah ini:
Bahasa. Anda sedang menulis C ++, yang pertama kali distandarisasi oleh ISO pada tahun 1998. Program apa pun yang Anda tulis yang sesuai dengan standar itu dapat dikompilasi dan dijalankan dengan hasil yang diharapkan pada platform apa pun dengan kompiler dan runtime yang sesuai. Tidak ada batasan untuk ukuran atau kecanggihan program selama tidak menyimpang dari standar. Jika suatu program yang terbukti memenuhi standar tidak berjalan seperti yang diharapkan pada platform tertentu, implementasi bahasa pada platform tersebut menjadi tersangka. Banyak bahasa memiliki suite tes yang dirancang dengan cermat yang dapat digunakan untuk memverifikasi kesesuaian.
Java mendapat perhatian khusus karena tidak hanya membakukan suatu bahasa, Java juga membakukan kode objek, yang membuat programnya dapat dijalankan di mana saja tanpa kompilasi ulang. Ini dilakukan dengan mendorong titik kesesuaian ke lapisan tambahan ke mesin virtual platform-disesuaikan (atau bahkan perangkat keras) yang mampu menjalankan kode objek.
Lebah. Panggilan yang Anda buat agar program Anda melakukan hal-hal tertentu dapat distandarisasi juga. Seperti bahasa, API dan pustaka yang mengimplementasikannya dapat diatur untuk berperilaku seperti yang diharapkan oleh penelepon menggunakan implementasi mendasar yang sesuai untuk platform tertentu. Salah satu API tersebut adalah standar POSIX IEEE , yang muncul sebagai cara untuk membendung fragmentasi yang terjadi di Unix selama 1980-an. (Saya ada sekitar waktu itu; aspek itu tidak menyenangkan.) Dengan mendefinisikan panggilan dan perilaku standar, vendor sistem dapat memberikan kepercayaan pelanggan mereka bahwa bermigrasi ke OS mereka tidak akan memerlukan banyak pekerjaan seperti yang terjadi di lalu. POSIX secara luas diadopsi dan masih digunakan secara luas hampir 30 tahun kemudian.
Saya telah melakukan banyak proyek yang dengan patuh berpegang pada standar karena saya tahu mereka harus dijalankan pada berbagai platform. Apa yang saya dapatkan untuk masalah saya adalah kode yang bekerja di mana-mana saya berencana untuk menjalankannya dan mengejutkan saya pada beberapa di mana saya tidak.