Dalam debat dengan Andrew Tanenbaum mengenai arsitektur sistem operasi microkernel vs. monolithic, Linus Torvalds berkata,
Portabilitas adalah untuk orang yang tidak dapat menulis program baru.
Apa yang dia maksud?
Dalam debat dengan Andrew Tanenbaum mengenai arsitektur sistem operasi microkernel vs. monolithic, Linus Torvalds berkata,
Portabilitas adalah untuk orang yang tidak dapat menulis program baru.
Apa yang dia maksud?
Jawaban:
Seperti yang ditulis Linus dalam debat, itu dengan lidah di pipi (yaitu jangan dianggap terlalu serius).
Kemudian, dia melanjutkan untuk menjelaskan bahwa sementara portabilitas adalah hal yang baik, itu juga merupakan trade-off; kode unportable bisa lebih sederhana. Artinya, alih-alih membuat kodenya sempurna portabel, buatlah itu sederhana dan cukup portabel ("mematuhi API portabel"), dan kemudian jika perlu porting, tulis ulang sesuai kebutuhan. Membuat kode yang mudah dibawa-bawa juga dapat dilihat sebagai bentuk optimasi prematur - seringkali lebih berbahaya daripada bagus.
Tentu saja itu tidak mungkin jika Anda tidak dapat menulis program baru dan harus tetap dengan yang asli :)
Saya pikir itu berarti bahwa setiap program harus ditulis khusus untuk perangkat keras dan sistem operasi yang dijalankannya.
Saya pikir apa yang dia kendarai adalah bahwa kode tujuan umum yang dapat berjalan di beberapa platform kurang efisien atau lebih rentan kesalahan daripada kode yang ditulis khusus untuk dan dirancang untuk satu platform. Namun, itu berarti bahwa ketika Anda mengembangkan seperti ini Anda harus mempertahankan beberapa baris kode yang berbeda.
Kembali ketika Linux pertama kali ditulis, ia menggunakan fitur yang hanya tersedia pada CPU i386, yang cukup baru dan mahal pada saat itu.
Itulah yang dilakukan linux: ia hanya menggunakan subset yang lebih besar dari 386 fitur yang tampaknya dilakukan kernel. Tentu saja hal ini membuat kernel tidak layakportable, tetapi juga membuat desain / banyak / sederhana. Pertukaran yang dapat diterima, dan yang membuat linux menjadi mungkin sejak awal.
Ketika kami memasuki abad ke-21, fitur-fitur yang membuat i386 unik menjadi arus utama sepenuhnya, memungkinkan Linux menjadi sangat portabel.
Sebagai seseorang yang telah melakukan banyak hal di Jawa, dan mengalami fenomena "tulis sekali, debug di mana-mana" setiap minggu selama bertahun-tahun, saya sepenuhnya dapat mengaitkannya dengan ini.
Dan Jawa mungkin merupakan contoh yang ringan. Saya bahkan tidak dapat mulai membayangkan apa yang orang lalui yang mencoba menggunakan basis kode portabel dalam bahasa / toolkit yang bahkan tidak dirancang untuk portabel dalam dan dari dirinya sendiri.
Saat ini di tempat kerja, kami sedang menyelidiki gagasan untuk menulis versi ringan dari salah satu produk kami untuk perangkat seluler. Saya telah melakukan beberapa penelitian tentang bagaimana melakukan versi portabel untuk J2ME dan Android - yang mencoba berbagi sebanyak mungkin basis kode (jelas tidak bisa sepenuhnya "portabel" per se, tetapi filosofi yang sama ). Ini mimpi buruk.
Jadi ya, kadang-kadang sangat baik untuk bisa berpikir (dan melakukan) dalam hal menggunakan alat yang diberikan untuk pekerjaan yang diberikan. yaitu Bebas berkembang terhadap satu, tunggal, platform / lingkungan monolitik. Dan hanya menulis versi terpisah dan bersih untuk masing-masing.
Meskipun beberapa orang memandang / memperlakukan portabilitas, mengikuti standar, dll., Sebagai unggul secara moral, atau sesuatu pada urutan itu, yang benar-benar bermuara adalah ekonomi.
Menulis kode portabel memiliki biaya dalam hal upaya untuk membuat kode portabel, dan (sering) melepaskan beberapa fitur yang tidak tersedia pada semua target.
Kode non-portabel memiliki biaya dalam hal upaya untuk porting kode ketika / jika Anda peduli dengan arsitektur baru, dan (sering) meninggalkan beberapa fitur yang tidak (atau tidak) tersedia pada target asli.
Kualifikasi besar ada "kapan / jika Anda peduli tentang arsitektur baru". Menulis kode portabel memerlukan upaya di muka dengan harapan hasil akhirnya bisa menggunakan kode itu pada arsitektur baru / berbeda dengan sedikit atau tanpa usaha. Kode non-portabel memungkinkan Anda menunda investasi dalam porting sampai Anda (setidaknya cukup) yakin Anda benar-benar perlu melakukan porting ke beberapa target tertentu.
Jika Anda yakin di muka bahwa Anda akan melakukan porting ke banyak target, biasanya ada baiknya berinvestasi di muka dalam meminimalkan biaya porting jangka panjang. Jika Anda kurang yakin tentang seberapa banyak (atau bahkan jika) Anda perlu mem-porting kode, menulis kode non-portabel memungkinkan meminimalkan biaya di muka, menunda atau bahkan mungkin sepenuhnya menghindari biaya pembuatan kode portabel.
Saya pikir ini juga patut dicatat bahwa saya telah berbicara tentang "portable" dan "non-portable" seolah-olah ada pembagian yang jelas antara keduanya. Pada kenyataannya, itu tidak benar - portabilitas adalah sebuah rangkaian, berjalan dari sepenuhnya non-portabel (misalnya, kode perakitan) hingga sangat portabel (misalnya, Info-zip), dan di mana-mana di antaranya.
Tanenbaum menekankan bahwa banyak Linux ditulis dengan cara non-modular untuk memanfaatkan CPU 386, yang paling mutakhir saat itu, daripada menjadikan interaksi CPU sebagai komponen, dan dengan demikian sangat mudah untuk ditukar. Tanenbaum pada dasarnya percaya bahwa fakta bahwa Kernel sangat monolitik dan terikat pada 386 CPU membuatnya sangat sulit untuk,
Kamp linux membuat beberapa poin, di antaranya:
Jika Anda ingin menulis kode portabel, Anda harus menulis kode portabel.
Apa yang saya maksud dengan itu?
Desain harus mencerminkan tujuannya. Jika bahasa C, misalnya, rancanglah sehingga jumlah baris kode minimum harus diubah agar bisa berfungsi. Ini sering berarti memisahkan tampilan dari perhitungan, yang merupakan filosofi desain yang baik (MVC). Sebagian besar kode C dapat dikompilasi di mana saja, asalkan Anda memiliki akses ke kompiler yang baik. Manfaatkan itu dan tulis sebanyak mungkin untuk menjadi generik.
BTW, jawaban ini hanya akan berlaku untuk aplikasi. OS dan embedded adalah binatang lain sepenuhnya.
Menafsirkan pernyataan ini "secara harfiah" sebagaimana adanya.
Dalam kutipan Linus yang lain ia berkata: "C ++ sedang mencoba untuk menyelesaikan semua Masalah yang salah. Hal-hal yang diselesaikan C ++ adalah hal-hal sepele, ekstensi sintaksis hampir murni untuk C daripada memperbaiki beberapa masalah yang benar-benar mendalam".
Juga dalam biografinya, linus "Just For Fun" ketika mengutip tentang microkernels mengatakan bahwa untuk masalah dengan kompleksitas 'n' jika Anda membagi masalah dalam '1 / n' bagian-bagian unik .. maka total kompleksitas pengembangan sistem seperti itu akan jadilah 'n!' ini sendiri merupakan faktor yang cukup untuk tidak mencoba hal seperti itu, dan mengekstraksi efisiensi dari sistem yang sedemikian kompleks akan sangat sulit.
Anda harus mempertimbangkan fakta bahwa selama perdebatan itu, Linux sangat baru dan sebagian besar hanya 386 OS. Saya pikir jika Anda bertanya pada Linus hari ini, dia akan memiliki pendapat yang berbeda. Mungkin tidak terlalu ekstrem seperti Tannenbaums, tetapi dia kemungkinan akan memberinya anggukan dan mengatakan bahwa dia benar tentang beberapa hal.
Linus dan pengembang kernel lainnya mengalami banyak kesulitan untuk membuat Linux portabel, tetapi sekali lagi, Linux mungkin tidak pernah ada jika Linus harus membuatnya portabel untuk memulainya.