Iklan
Anda baru saja mengunduh pembaruan penuh fitur ke aplikasi open source favorit Anda. Semuanya berfungsi dengan baik, dan Anda menggunakannya di perangkat lain - jadi sekarang saatnya untuk meluncurkannya juga.
Kecuali laptop Linux mengkilap Anda yang baru tidak kompatibel dengan paket instalasi Windows Anda. Bagaimana dengan tablet Android Anda? iPhone? PS4? Mengapa Anda tidak bisa mengambil perangkat lunak itu dan menggunakannya di mana pun Anda suka? Mari kita jelajahi beberapa penghalang berbeda untuk mimpi "beli sekali, jalankan di mana saja."
Pengembangan Perangkat Lunak dan Arsitektur OS
Memahami mengapa perangkat lunak tidak berfungsi di seluruh sistem operasi memerlukan sedikit (hanya sedikit, saya berjanji) pengetahuan tentang bagaimana perangkat lunak dibuat.
Proses Pengembangan Perangkat Lunak
Dalam alur pengembangan perangkat lunak yang sangat mendasar untuk desktop, server, dan seluler (mis. bukan web Pemrograman vs Pengembangan Web: Apa Perbedaannya?Anda mungkin berpikir programmer aplikasi dan pengembang web melakukan pekerjaan yang sama, tetapi itu jauh dari kebenaran. Berikut adalah perbedaan utama antara programmer dan pengembang web. Baca lebih lajut ), seorang programmer akan:
- Ketikkan beberapa kode menjadi satu atau lebih file.
- Menyusun kode menjadi sesuatu yang dapat dieksekusi komputer.
- Uji untuk memastikan program bekerja seperti yang diharapkan.
- Paket dan distribusi / penyebaran perangkat lunak.
Ini adalah kombinasi dari langkah pertama dan kedua yang menjadi perhatian kami di sini. Proses dari kompilasi perangkat lunak, atau mengubahnya dari kode menjadi kode dan nol yang dimengerti oleh komputer (bahasa mesin) kompleks. Kami tidak akan membahasnya dengan sangat terperinci, tetapi berguna untuk memahami pada tingkat tinggi apa yang terjadi.
Arsitektur OS
Satu poin penting untuk dipahami adalah bahwa sistem operasi bukan merupakan entitas tunggal. Sebaliknya, itu terdiri dari lapisan perangkat lunak.
Kernel Sistem Operasi
Sistem operasi inti bertanggung jawab untuk berkomunikasi dengan perangkat keras komputer. Perangkat lunak mengkomunikasikan perintahnya ke kernel, yang pada gilirannya mengeluarkan perintah ke perangkat keras untuk (misalnya) membaca file dari hard disk, atau menggambar jendela di layar. Ini pada dasarnya mengoordinasikan semua informasi (apakah itu menyimpan data, perhitungan, atau input pengguna) antara perangkat keras dan berbagai perangkat lunak. Kernel menyediakan semua fungsi ini untuk perangkat lunak via panggilan sistem.
Setiap kernel sistem operasi akan menerapkan panggilan sistem secara berbeda, dalam hal mana yang tersedia, apa yang mereka sebut, atau opsi apa yang mereka ambil. Akibatnya, perangkat lunak perlu memperhitungkan panggilan sistem yang didukung oleh kernel dari setiap OS yang ditargetkan. Panggilan sistem yang Anda gunakan untuk mengirim data ke GPU di Linux mungkin memiliki nama yang berbeda, daftar informasi yang perlu Anda berikan, atau keduanya di Windows. Panggilan persis itu bahkan mungkin tidak ada sama sekali.
Perpustakaan Sistem
Dalam banyak kasus, perangkat lunak tidak memanggil langsung ke kernel. Sebaliknya, panggilan ke perpustakaan sistem, atau koleksi fungsi dasar. Perpustakaan ada sehingga (misalnya) masing-masing dan setiap program yang menyimpan file ke hard drive tidak perlu menulis fungsi untuk melakukannya. Sebaliknya, itu sederhana tautan ke perpustakaan sistem dan menggunakan fungsi yang ada. Perpustakaan GLibC untuk Linux adalah contoh utama, seperti file .DLL di Win32 API atau isi direktori Mac / Sistem / Perpustakaan Cara Mengakses Folder Perpustakaan OS X & Mengapa BergunaSebagian besar folder Perpustakaan OS X sebaiknya dibiarkan sendiri, tetapi berguna untuk mengetahui jalan Anda di dalam dan di sekitar Perpustakaan Pengguna. Baca lebih lajut .
Pustaka sistem bertindak sebagai semacam penerjemah antara aplikasi dan kernel untuk tugas-tugas rutin. Aplikasi membuat panggilan fungsi ke perpustakaan ini, yang menangani banyak detail tingkat rendah. Mereka juga dapat melakukan panggilan sistem ke kernel untuk kenyamanan. Seperti yang sudah Anda duga, ini berarti perpustakaan ini ditulis untuk kernel tertentu, dan karena itu tidak dapat digunakan di seluruh sistem operasi dengan kernel yang berbeda.
Header Eksekusi Sistem Operasi
Penghalang terakhir untuk perangkat lunak universal adalah format file yang dapat dieksekusi untuk sistem operasi. OS mengharapkan file yang dijalankannya mengikuti yang tertentu format file biner Segala sesuatu yang perlu Anda ketahui tentang format file dan propertinyaKami menggunakan file kata secara bergantian: musik, gambar, spreadsheet, rangkai salindia, dan sebagainya. Tapi apa yang membuat file menjadi "file"? Mari kita coba dan pahami bagian dasar komputasi ini. Baca lebih lajut . Misalnya, file Executable dan Linkable Format (ELF) yang berjalan pada sistem operasi seperti Linux dan FreeBSD harus menentukan properti file tertentu dalam byte tertentu, seperti yang ditunjukkan di bawah ini gambar.
Itu antarmuka biner aplikasi (ABI) ditunjukkan mampu adalah sangat penting. Kombinasi panggilan yang tersedia dari prosesor, kernel, dan perpustakaan sistem, ABI mirip dengan sebuah antarmuka pemrograman aplikasi (API) dalam hal ini mendefinisikan bagaimana dua program berkomunikasi satu sama lain. Tetapi API adalah sesuatu yang digunakan oleh programmer (manusia) dalam kode sumber untuk menunjukkan dua buah perangkat lunak Sebaiknya berbicara satu sama lain. ABI adalah apa yang sebenarnya memungkinkan mereka untuk melakukannya begitu perangkat lunak dikompilasi dan dijalankan. Setiap sistem operasi mengimplementasikan ABI tertentu, yang mungkin atau mungkin tidak berubah antara versi OS yang sama.
Secara umum, sistem operasi mengimplementasikan ABI mereka sendiri, yang ditentukan oleh kombinasi jenis prosesor, kernel, dan pustaka sistem standar. Namun terkadang OS akan mengimplementasikan lebih dari satu. FreeBSD memiliki dukungan untuk binari Linux, misalnya, karena menyediakan ABI Linux sebagai tambahan untuk kernel FreeBSD (bukan kernel Linux). Ini berbeda dari program virtualizatiton Apa itu Mesin Virtual? Semua yang Perlu Anda KetahuiMesin virtual memungkinkan Anda untuk menjalankan sistem operasi lain di komputer Anda saat ini. Inilah yang harus Anda ketahui tentang mereka. Baca lebih lajut seperti VMWare atau VirtualBox, yang menggunakan perangkat lunak untuk mensimulasikan seluruh mesin (perangkat keras dan semua). Akibatnya jenis kompatibilitas ABI lebih cepat, tetapi lebih banyak upaya untuk mempertahankan. Inilah mengapa itu jarang terjadi Microsoft baru-baru ini melihat nilainya Ubuntu Sekarang Tersedia di Windows StoreWindows Insiders sekarang dapat mengunduh dan menginstal Ubuntu ke Windows 10. Ini menyatukan Linux dan Windows dalam sebuah persatuan yang tidak suci yang tidak pernah dibayangkan mereka hidup cukup lama untuk menyaksikan. Baca lebih lajut dalam melakukannya.
Pengecualian: Perangkat Lunak yang Diterjemahkan
Berdasarkan hal di atas, kami mengetahui bahwa pengembang menulis perangkat lunak untuk satu, dan hanya satu, jenis sistem target. Kecuali ketika mereka tidak melakukannya. Ada banyak aplikasi yang dapat Anda unduh dan jalankan di Mac, lalu salin dan jalankan di Windows, dan mungkin bahkan salin lagi dan jalankan di Linux tanpa masalah. Bagaimana ini mungkin?
Apakah saya berbaring sampai sekarang?
Ternyata, ada kategori perangkat lunak yang terlihat di permukaan seolah-olah "berjalan di mana-mana." Anda dapat mengunduh dan menjalankannya di mana saja platform yang didukung - kata kunci yang "didukung." Bahkan, Anda mengunduh kode sumber untuk aplikasi tersebut, sedangkan aplikasi lain (itu penerjemah) adalah semacam menjalankan kode sumber langsung di waktu nyata. Ini adalah penyederhanaan yang berlebihan, jadi mari kita lihat bagaimana cara kerjanya dengan beberapa bahasa.
Jawa
Ketika Java pertama kali dirilis, janji itu adalah (secara harfiah) "menulis sekali, jalankan di mana saja." Idenya adalah menciptakan aplikasi dengan menggunakan fungsi Java untuk cara menyimpan file, membuat perhitungan, atau membuat aplikasi jendela. Lalu a Java Runtime Enviornment (JRE) untuk setiap platform komputer yang didukung akan menjalankan kode, dan menerjemahkannya ke fungsi OS asli. Trik untuk Java, maka, adalah bahwa itu tidak berjalan "langsung" pada sistem operasi. Ini berjalan di bagian JRE yang disebut itu Mesin Virtual Java dan itulah yang berjalan pada sistem operasi.
Dengan menyisipkan lapisan perangkat lunak tambahan ini antara aplikasi dan OS, Java memungkinkan Anda untuk fokus pada serangkaian fungsi yang sama di seluruh sistem operasi. Anda memberi tahu Java apa yang ingin Anda lakukan, dan membiarkan JVM untuk sistem Anda khawatir tentang bagaimana sebenarnya melakukannya. Gambar di bawah ini menunjukkan ini dalam aksi, di mana Kerangka Aplikasi Java Desktop Perangkat Lunak JIDE menampilkan aplikasi yang sama untuk Mac (atas), Windows (kiri tengah), “pure Java” (kanan tengah), dan Linux (bawah).
Program Java tidak tepat "mengkompilasi" diri mereka secara realtime. Sebaliknya, kompiler Java akan membuat mereka menjadi "bytecode." Anda dapat menganggap bytecode sebagai program setengah matang. Ketika pengembang merilis aplikasi itu dikompilasi sebanyak mungkin tanpa mengetahui OS yang akan dijalankan. Ketika Anda benar-benar meluncurkannya, JVM akan "memanggangnya sepanjang jalan" agar sesuai dengan fungsi-fungsi tertentu dari OS host.
Python
Bahasa yang ditafsirkan populer adalah Python 5 Alasan Mengapa Pemrograman Python Tidak BergunaPython - Anda menyukainya atau membencinya. Anda bahkan dapat mengayun dari satu ujung ke ujung lainnya seperti pendulum. Terlepas dari itu, Python adalah bahasa yang sulit untuk dibengkokkan. Baca lebih lajut . Saat Anda menjalankan skrip Python, interpreter Python akan menerjemahkan kode menjadi instruksi untuk OS. Itu juga dapat berfungsi mirip dengan Java: ketika Anda "mengimpor" kode dari luar aplikasi Anda itu dikompilasi untuk bytecode saat pertama kali dijalankan. Kemudian interpreter akan tahu jika, pada proses selanjutnya, kode asli telah berubah, pada titik mana ia akan mengkompilasi ulang ke bytecode baru.
Produk sampingan keren dari menjalankan "sesuai permintaan" ini adalah Anda dapat menggunakan penerjemah untuk mengembangkan skrip Anda secara interaktif. Dengan hanya mengetik "python" di baris perintah Anda akan memulai juru bahasa, dan Anda dapat menjalankan kode dan melihat hasilnya segera.
Ini berarti pengembang dapat bermain-main dan men-tweak hal-hal "hidup." Kemudian, begitu satu baris kode melakukan apa yang mereka inginkan, salin dan tempel ke file skrip (yang jauh lebih efisien daripada siklus "code-compile-test" yang harus dilakukan oleh pemrogram bahasa yang tidak ditafsirkan).
Bahkan Ketika Perangkat Lunak Sama, Mungkin Tidak
Sayangnya untuk pengguna, industri teknologi belum mengembangkan format yang benar-benar "universal". Dan mungkin tidak pernah melakukannya. Memperkenalkan jenis-jenis standar ini sering kali menghasilkan solusi "penyebut paling tidak umum", dengan konsesi untuk mendapatkan persetujuan semua orang.
Bagaimana menurut anda? Apakah Anda lebih suka memiliki perangkat lunak yang kompatibel secara universal, bahkan jika itu berarti itu tidak sebagus? Atau apakah Anda setuju dengan sistem operasi yang Anda gunakan, dan tidak tertarik dengan aplikasi dari platform lain? Beri tahu kami di bawah di komentar!
Kredit Gambar: Masterchief_Productions / Shutterstock
Aaron telah sangat jauh dalam teknologi sebagai analis bisnis dan manajer proyek selama lima belas tahun, dan telah menjadi pengguna setia Ubuntu selama hampir selama (sejak Breezy Badger). Minatnya termasuk open source, aplikasi bisnis kecil, integrasi Linux dan Android, dan komputasi dalam mode teks biasa.