Saya adalah pengguna OpenBSD. Dalam FAQ OpenBSD tertulis:
OpenBSD adalah sistem yang lengkap, dimaksudkan untuk tetap sinkron. Ini bukan utilitas kernel plus yang dapat ditingkatkan secara terpisah satu sama lain.
Ketika Anda meningkatkan sistem, Anda melakukannya dalam sekali jalan; kernel dan sistem basis diganti. Kemudian Anda pergi dan memperbarui paket pihak ke - 3 Anda . Jika dikompilasi dari sumber , Anda mengkompilasi ulang kernel dan mem-bootnya. Kemudian Anda membangun kembali sistem dasar, dan kemudian paket-paket yang telah Anda instal. Jika lebih dari beberapa minggu / bulan telah berlalu sejak terakhir kali Anda membangun kembali semuanya, Anda terlebih dahulu memasang snapshot dan membangun kembali dari sana (jika Anda mengikuti cabang CVS terbaru).
Memiliki kernel yang tidak sinkron, sistem dasar dan / atau paket pihak ke-3 merupakan sumber masalah potensial dan lebih atau kurang mendiskualifikasi Anda dari mendapatkan bantuan serius dari milis resmi.
Saya cukup baik-baik saja dengan ini. Sebenarnya, ini adalah salah satu alasan saya menggunakan OpenBSD. Itu membuat sistem unit yang konsisten dan membuatnya mudah bagi saya untuk membentuk tinjauan mental tentangnya.
Seperti apa di Linux? Sebagian besar Linux yang saya ketahui tidak memiliki "sistem dasar" dalam arti yang sama dengan BSD, melainkan kumpulan paket yang dikumpulkan oleh penyedia distribusi. Perangkat lunak lebih lanjut kemudian ditambahkan ke ini oleh administrator lokal sedemikian rupa sehingga batas antara apa yang ada dari awal dan apa yang ditambahkan kemudian, paling tidak, buram.
Apakah Linux (secara umum) tidak memiliki kopel kernel yang kuat untuk userspace? Kernel diperbarui, sejauh yang saya tahu, seperti paket perangkat lunak lain, dan sedikit membingungkan saya bahwa ini mungkin. Tambahkan ke fakta ini bahwa beberapa bahkan mengkompilasi kernel custom (yang tidak disarankan pada OpenBSD), dan memiliki banyak versi kernel yang terdaftar dalam menu boot mereka.
Siapa atau apa yang menjamin bahwa berbagai subsistem sistem Linux dapat bekerja sama satu sama lain meskipun diperbarui secara terpisah satu sama lain?
Alasan saya bertanya adalah karena pengguna lain di situs ini bertanya kepada saya apakah mengganti kernel di sistem Linux-nya dengan versi yang lebih baru "akan bisa dilakukan". Dari sisi OpenBSD, saya tidak dapat mengatakan bahwa ya, ini dijamin tidak akan merusak sistem.
Saya menggunakan "Linux" di atas sebagai singkatan untuk "distribusi Linux", kernel + utilities.
sumber
Jawaban:
Linus Torvalds memiliki pendapat yang sangat kuat terhadap perubahan kernel yang menghasilkan regresi userspace (lihat pertanyaan " Kernel Linux: memecah ruang pengguna " untuk detailnya).
Antarmuka antara userspace dan kernel disediakan oleh panggilan sistem. Kernel yang lebih baru dapat memiliki lebih banyak panggilan sistem, dan perubahan yang keluar ketika perubahan tersebut tidak merusak aplikasi yang ada. Ketika antarmuka panggilan sistem memiliki parameter flag, kernel baru sering mengekspos fungsionalitas baru dengan flag bit baru. Dengan cara ini kernel mempertahankan kompatibilitas ke belakang ke aplikasi lama.
Ketika tidak mungkin untuk mengubah antarmuka yang ada tanpa melanggar ruang pengguna, panggilan sistem tambahan telah ditambahkan yang menyediakan fungsionalitas yang diperluas. Inilah sebabnya mengapa ada tiga versi
dup
dan dua versiumount
panggilan sistem.Kebijakan memiliki ruang pengguna yang stabil adalah alasan mengapa pembaruan kernel jarang menyebabkan masalah dalam aplikasi userspace dan Anda biasanya tidak mengharapkan masalah setelah memutakhirkan kernel.
Namun stabilitas API yang sama tidak dijamin untuk antarmuka kernel dan detail implementasi lainnya . Sysfs (on
/sys
) dan procsfs (on/proc/
) memaparkan detail implementasi kernel pada konfigurasi runtime, perangkat keras, jaringan, proses dll. Yang digunakan oleh aplikasi tingkat rendah. Adalah mungkin bagi antarmuka tersebut untuk berubah dengan cara yang tidak kompatibel antara versi kernel jika ada alasan yang baik untuk itu. Perubahan masih mencoba untuk meminimalkan ketidaksesuaian jika memungkinkan dan ada aturan untuk bagaimana aplikasi dapat menggunakan antarmuka dengan cara yang paling tidak menyebabkan masalah. Dampaknya juga terbatas karena aplikasi non-level tidak boleh menggunakan antarmuka ini.@PeterCordes menunjukkan jika perubahan dalam procfs atau sysfs merusak aplikasi yang digunakan oleh distribusi Anda dalam skrip init, Anda bisa memiliki masalah.
Ini agak tergantung pada bagaimana distribusi Anda memperbarui kernel (dukungan jangka panjang atau arus utama) dan bahkan masalah itu relatif jarang terjadi karena distribusi biasanya mengirimkan alat yang diperbarui pada saat yang sama.
@StephenKitt menambahkan bahwa userspace yang ditingkatkan mungkin memerlukan versi kernel yang lebih baru, dalam hal ini sistem mungkin tidak dapat melakukan booting dengan kernel lama dan catatan rilis distribusi menyebutkan hal ini jika diperlukan.
sumber
/proc
) dan sysfs (/sys
) dijaga se-stabil mungkin, mengikuti kebijakan / filosofi "jangan putus ruang-pengguna" yang sama. Juga,ioctl()
kode pada file perangkat en.wikipedia.org/wiki/Ioctl . Ini jauh melampaui kompatibilitas sistem-panggilan ABI sederhana, tetapi seperti yang Anda katakan ketika ada alasan bagus, semuanya berubah/proc
dan/sys
. Itu tidak akan merusak sebagian besar program secara langsung, tetapi jika itu merusak program ruang-pengguna tingkat rendah yang digunakan oleh skrip init distro Anda, Anda bisa memiliki masalah. Untungnya ini jarang terjadi.rfkill
saklar IIRC telah mengubah lokasi di beberapa upgrade kernel. Jadi/proc
dan/sys
jauh lebih tidak stabil daripada antarmuka syscall. Untungnya, distribusi biasanya tidak menyertakan peningkatan kernel seperti itu kecuali itu adalah upgrade versi distribusi utama./proc
dan/sys
perubahan biasanya - pemindahan membutuhkan waktu bertahun-tahun). Namun, memutakhirkan userspace dapat membutuhkan kernel baru, dan Anda dapat berakhir dengan sistem yang tidak bisa di-boot jika Anda tidak memiliki kernel yang cukup baru. Catatan rilis distro menyebutkan hal ini bila perlu (jadi jangan upgrade distro secara membabi buta, baca catatan rilis).Kernel Linux dan ruang pengguna distribusi Linux, yang secara historis didominasi oleh alat-alat pengguna yang dikembangkan oleh proyek GNU, secara longgar digabungkan. Sebagian ini karena desain, dan sebagian karena kebutuhan.
Berbeda dengan BSD, di mana kernel serta ruang pengguna basis dirancang dan dikelola bersama-sama, kernel Linux dan ruang penggunanya dikembangkan dan dikelola oleh orang yang berbeda. Jadi menyatukan mereka dengan erat akan menjadi sulit, bahkan jika komunitas menginginkannya, dan saya rasa tidak.
Dan @sebasth juga menunjukkan bahwa kebijakan utama proyek kernel Linux adalah bahwa ia tidak boleh merusak ruang pengguna. Yang tentu saja merupakan faktor lain yang menerapkan kopling longgar.
Namun, masih ada beberapa derajat kopling. Kernel Linux yang cukup lama tidak akan berfungsi dengan distribusi modern.
sumber
glibc
misalnya). (Tapi ya, ini bukan janji kernel, ini janji userspace.)Pemahaman saya adalah bahwa Linux adalah kernel, dan yang lainnya adalah tambahan. Anda pasti dapat memutakhirkan kernel secara independen dari (banyak) paket yang diinstal, karena umumnya terkait dengan pustaka daripada kernel itu sendiri. Anda biasanya hanya akan melihat sambungan antara versi kernel dan driver perangkat keras (mis. Driver GPU). Beberapa perangkat lunak hanya kompatibel dengan versi kernel tertentu, tetapi itu harus ditentukan dalam dokumentasi masing-masing program tersebut.
Agak umum untuk memiliki dua paket paket kernel yang diinstal pada suatu sistem - paket yang saat ini digunakan, dan paket yang diinstal sebelumnya. Saat memutakhirkan, setelah memastikan versi baru berfungsi dengan benar, yang terlama dapat dihapus dan Anda masih memiliki cadangan yang diketahui aman. Red Hat (dan sepupunya) misalnya, harus
package-cleanup --oldkernels --count 2
melakukan ini secara otomatis.sumber
Selain semua argumen bagus di sini, saya dapat menambahkan beberapa poin yang akan membantu.
Kami sudah mengetahui kebijakan tim kernel, dan sebagai distribusi Linux, kami berusaha menjaga kode sumber kernel semurni mungkin. Ini berarti, setiap kali kerentanan muncul, atau sesuatu yang membutuhkan tambalan, kami memberi tahu tim kernel dan mencoba membantu dengan tambalan, tetapi pada akhirnya, keputusan akhir berasal dari tim kernel.
Beberapa distribusi menambahkan lebih banyak tambalan daripada yang lain, tetapi idenya adalah untuk mempertahankannya karena berasal dari pengembang hulu. Jelas, ada beberapa program yang membutuhkan konfigurasi kernel khusus, terutama virtualisasi dan driver pihak ketiga dan biasanya, keduanya digunakan untuk bekerja dengan versi kernel tertentu atau setidaknya versi yang tidak terlalu lama ... alasannya adalah mereka mencoba untuk bekerja dengan fitur-fitur kernel terbaru dan karena itu, jika Anda mencoba menjalankannya dengan kernel lama, mereka mungkin tidak berjalan dengan benar.
Satu elemen tambahan yang perlu diingat adalah bahwa semua distribusi Linux memiliki tim pengelola, orang-orang yang memastikan bahwa semua perangkat lunak kompatibel dengan sistem. Itu sebabnya hampir setiap distribusi memiliki versi stabil dan tidak stabil. Pengembang bekerja dengan perangkat lunak "tidak stabil" dan ketika semua diuji mereka menandainya stabil, hanya setelah itu pengguna normal dapat memutakhirkan paket, jadi jika orang yang bertanya kepada Anda adalah pengguna normal adalah 90% aman bahwa perangkat lunak diuji dengan baik .
Jadi siapa itu, komunitas, dan kemudian apa yang seharusnya menjadi pendekatan umum, kita perlu perangkat lunak bekerja bersama, dan tidak merusak sistem, itu sebabnya kami mencoba mengikuti beberapa standar seperti Filesystem Hierarchy Standard .
sumber