Mengapa sistem operasi dan kernel diperlakukan secara terpisah di Linux? [Tutup]

9

Ketika datang ke sistem operasi Linux, termasuk Ubuntu, orang cenderung membedakan istilah kernel dan sistem operasi . Ini benar untuk Windows dan keluarga OS X, tetapi mengapa begitu luas di kalangan komunitas Linux? Apakah ada cara untuk memperbarui kernel OS, tanpa OS itu sendiri diperbarui? Atau sebaliknya? Jika demikian, bagaimana itu bisa bermanfaat?

Angin Mimpi
sumber
3
Sederhana: kebebasan. Kebebasan untuk membuat versi Anda sendiri dari apa pun yang Anda rasa Anda butuhkan. Inti? Kulit? Desktop. Lakukan untuk itu.
Rinzwind
6
Karena mereka yang terpisah? Alasan yang sama mengapa window manager diperlakukan secara terpisah dari server X (karena mereka terpisah) dan mengapa shell diperlakukan secara terpisah dari emulator terminal (karena mereka juga terpisah). Sekarang, jika Anda bertanya mengapa mereka dirancang seperti itu ...
user253751
Ubuntu sekarang juga berjalan di atas kernel Windows 10 yang menunjukkan bahwa itu adalah pemisahan yang nyata. Tentu saja, Windows tidak datang dengan server X yang sedikit menyulitkan, tapi itu bisa diharapkan ketika ada bagian yang hilang.
MSalters
@MSalters Window manager pada Windows agak rumit, ya; namun, jika seseorang benar-benar ingin menjalankan X di Windows, ada banyak cara untuk mengatasinya. Yang paling mudah untuk orang luar mungkin adalah "emulator" server di atas window manager yang ada, meskipun saya tidak tahu seberapa baik itu bisa memetakan (terakhir kali saya melihat X internal, saya tidak terlalu berharap). Saya tidak akan menahan nafas - tidak terdengar bagi saya seolah-olah banyak orang yang tertarik menjalankan X di Windows.
Luaan

Jawaban:

12

Seluruh sistem GNU / Linux dibangun menggunakan pendekatan modular. Anda sebagian besar dapat meningkatkan ( mengganti secara umum) satu modul tanpa menyentuh yang lain. Modul yang dimaksud dapat berupa bootloader, kernel, shell, perintah, lingkungan desktop, aplikasi GUI, apa pun ...

Tentu saja, itu benar selama Anda dapat mengelola dependensi dengan benar. Dalam set distribusi di sekitar Ubuntu, APT digunakan untuk menyelesaikan dependensi secara otomatis.

Anda dapat menginstal versi kernel lain menggunakan perintah:

sudo apt install linux-image-<version>

Selama APT mengizinkannya, Anda harus dapat melakukan reboot dan menggunakan versi kernel yang dipilih, apakah itu generik, lowlatency, dll. Atau Anda membangun sendiri versi kernel, mis. Linux Real-Time , dan menggunakannya dengan sistem Anda saat ini .

Melebius
sumber
Terima kasih banyak, tetapi akankah ini konsisten? Katakanlah, Ubuntu 14.04 LTS memiliki kernel versi 3.19.0, dan dalam hal memperbarui kernel, itu bukan 14,04 LTS lagi, kan? Jadi jika saya mencoba memperbarui seluruh sistem nanti, atau mekanisme pembaruan bawaan (Pembaruan Perangkat Lunak) membawakan saya versi baru, apakah itu akan menyadari versi kernel yang diperbarui? Apakah dapat memeriksa modul secara terpisah dan hanya membawa perubahan yang diperlukan, tanpa mempengaruhi modul yang sudah diperbarui?
The Dreams Wind
1
Lihat paket.ubuntu.com/search?keywords=linux-image untuk daftar panjang versi kernel yang didukung oleh setiap versi Ubuntu. Versi Ubuntu ditentukan oleh hal-hal berbeda dari versi kernel tetapi saya tidak benar-benar mengetahui yang mana ... Jika Anda tertarik pada hal itu, Anda dapat memulai pertanyaan lain.
Melebius
1
@AlexandrMedvedev Jauh kemudian saya menemukannya! Versi Ubuntu dicatat dalam file /etc/issueyang disediakan oleh base-filespaket. Seperti yang sudah saya tulis, itu tidak terkait dengan versi kernel.
Melebius
5

Seperti yang Anda ketahui Kernel adalah bagian penting dari OS, dalam distribusi GNU / Linux Anda dapat dengan mudah memperbarui kernel tanpa menyentuh bagian lain dari OS. Namun kami hanya memperbarui bagian dari OS kami.

Sistem operasi terbuat dari dua bagian, ruang kernel dan ruang pengguna.

Jadi ya, Anda dapat memperbarui ruang kernel Anda tanpa menyentuh ruang pengguna Anda jika hanya versi baru yang kompatibel dengan ruang pengguna Anda saat ini.

Dan tentang memperbarui alat ruang pengguna, itu ya lain.

Ketika Anda menjalankan:

sudo apt-get upgrade

Jika ada pembaruan untuk kernel Anda akan mendapatkan:

The following packages have been kept back:
  linux-generic linux-headers-generic linux-image-generic

jadi Anda hanya memperbarui ruang pengguna Anda dan ketika Anda menjalankan sesuatu seperti

sudo apt-get dist-upgrade

Anda memperbarui semuanya termasuk kernel.

Untuk memutakhirkan hanya Kernel Anda ke versi yang lebih baru gunakan sesuatu seperti:

$ apt-cache search "linux-image-[0-9]+.*-generic" | awk '{print $1}' | head -4
linux-image-4.4.0-21-generic
linux-image-4.10.0-14-generic
linux-image-4.10.0-19-generic
linux-image-4.10.0-20-generic

untuk menemukan daftar kernel yang lebih baru, kemudian instal sebagai paket baru, misalnya:

sudo apt install linux-image-4.10.0-14-generic
Ravexina
sumber
Ini jelas tidak benar.
mook765
Koreksi saya;) jadi saya belajar sesuatu yang baru :)
Ravexina
3
sudo apt upgradeakan meningkatkan kernel juga jika versi baru tersedia. sudo apt full-upgradeakan menghapus paket dengan baik, apa yang asudo apt upgradetidak akan dilakukan.
Soren A
Karena saya sekarang memutakhirkan ke kernel baru adalah semacam Instalasi dan saat menggunakan upgradesub - perintah, itu tidak akan menginstal paket baru juga tidak menghapus paket apa pun, itu sebabnya kami menggunakan dist-upgrade. setidaknya apt-getbekerja dengan cara ini;) jadi saya memperbarui perintah saya untuk mencegah kebingungan.
Ravexina
1
Saya lebih berpengalaman dengan aptperintah-, setelah penelitian singkat kelihatannya jawaban Anda benar sekarang, aptdan apt-getmenangani hal yang berbeda, lihat hiroom2.com/2016/05/20/ubuntu-16-04-debian-8-apt -command / ... . Jadi beberapa pengetahuan untuk kita berdua ...
mook765
3

Pertama, beberapa klarifikasi, karena saya rasa Anda tidak mengerti bagaimana sistem GNU / Linux muncul. Bersabarlah dengan saya jika ini bukan hal baru bagi Anda:

"Kernel" bukan hanya program lain yang berjalan, tetapi itu adalah bagian dari OS yang menyediakan fungsi-fungsi dasar: jika Anda ingin memulai program (katakanlah, Anda mengetik "ls" di baris perintah) biner harus dimuat dari disk (yang mencakup beberapa operasi sistem file untuk menemukannya dan beberapa penanganan file to'read), maka "lingkungan proses" dibuat: memori ditugaskan, nomor proses dikeluarkan, dll, dll. Semua aktivitas sebelumnya (FS, membaca dari file, ...) ditangani oleh pustaka sistem, tetapi yang terakhir adalah fungsi kernel. Dalam beberapa hal kernel "adalah OS" dan yang lainnya hanya hiasan di sekitarnya.

"Linux" sebenarnya (hanya!) Sebuah kernel tanpa bagian OS yang lain. Linus Torvalds mulai menulisnya dengan mengambil Andrew Tanenbaums MINIX template OS kernel dan melengkapinya sehingga itu adalah fullblown dan kernel yang bisa dikerjakan nyata. Sampai hari ini ada Linus (dan banyak lainnya yang berkontribusi / berkontribusi) yang mengembangkan kernel ini. Kernel ini masih sangat mirip dengan UNIX, tetapi BUKAN kernel UNIX.

"GNU" dimulai sebagai inisiatif untuk "memperbaiki" banyak perintah UNIX yang umum. Saya tidak akan membahas apakah mereka berhasil atau tidak, tetapi mereka pasti menulis banyak perangkat lunak dan pada satu titik memiliki koleksi program utilitas. Mereka bahkan mulai mengembangkan kernel OS mereka sendiri (HURD), yang sebagian besar didasarkan pada UNIX, tetapi jelas berbeda. Tetapi sampai hari ini HURD sedang dalam pengembangan awal dan hampir tidak merupakan solusi yang berfungsi. "GNU" btw. adalah kependekan dari "GNU (is) Not UNIX" - mereka mencoba untuk mengatasi beberapa batasan (yang dirasakan atau nyata) dari UNIX dengan maksud untuk menciptakan penerus UNIX (sekali lagi: saya tidak ingin memasuki diskusi jika mereka berhasil atau tidak - saya tidak peduli apakah itu "lebih baik" atau "lebih buruk", tetapi pasti berbeda!).

Jadi, dengan seperangkat alat yang tidak memiliki kernel dan kernel yang tidak memiliki toolset, itu adalah pengembangan alami untuk menggabungkan keduanya: GNU / Linux diciptakan.

Namun, untuk memiliki OS yang berfungsi (dan bisa diterapkan), Anda memerlukan lebih dari sekadar kernel dan toolset: Anda memerlukan sistem pengelolaan paket, Anda memerlukan prosedur instalasi, Anda memerlukan konfigurasi templat, ....

Beberapa orang yang berbeda (atau kelompoknya) sampai pada kesimpulan ini dan menggunakan kombinasi GNU / Linux untuk membuat sistem GNU / Linux sesuai dengan keinginan mereka, dengan menambahkan dengan tepat hal-hal yang saya bicarakan di atas: mereka menciptakan manajer paket, sistem pengemasan , prosedur pemasangan dan apa lagi. Kelompok-kelompok yang berbeda ini (masing-masing hasil dari usaha mereka) adalah apa distribusi yang berbeda. Saat ini ada tiga manajer paket yang berbeda (apt untuk Debian dan sistem turunan seperti * ubuntu, rpm untuk RedHat dan sistem turunan seperti Fedora, CentOS dan banyak lagi, pacman untuk ArchLinux) tetapi semua ini hanya mengelola paket perangkat lunak yang (pada dasarnya) sama: apa yang disebut ketika Anda mengeluarkan "ls" atau "df", dll.,

Jadi, "pada prinsipnya" Anda dapat memperbarui kernel saja, seperti orang-orang yang membuat distribusi dari berbagai versi semua perangkat lunak yang saya bicarakan di atas.

Tapi, dan ini benar-benar TETAPI besar: karena tidak hanya kernel dan beberapa perangkat lunak tambahan tetapi banyak hal lain yang perlu diingat, seperti alat konfigurasi sistem (systemd, yang menggunakan beberapa distribusi dan beberapa tidak), jaringan alat manajemen seperti NetworkManager, yang pada gilirannya tergantung pada beberapa versi GNOME-library, dll, dll. - "distribusi" adalah hal yang agak rumit dan kemungkinannya adalah jika Anda mencoba untuk memperbarui kernel Anda akhirnya memperbarui banyak hal-hal lain karena banyaknya saling ketergantungan.

Tetap, dan juga "pada prinsipnya", seperti di atas: Anda juga dapat membuat distribusi Anda sendiri dengan mengunduh semua sumber, mengompilasinya, menemukan kumpulan kombinasi versi yang berfungsi, menempatkan beberapa sistem pengemasan pada tempatnya (atau menggunakan salah satu dari yang sudah ada ) - dan seterusnya, hingga Anda memiliki sistem yang dapat didistribusikan, diinstal, dan dapat dikonfigurasi. Inilah yang dilakukan pencipta distribusi seperti Ubuntu dan ini bukan keajaiban - hanya banyak pekerjaan rumit, jadi pada kenyataannya sebagian besar pengguna menghindarinya dan menggunakan sesuatu yang mereka bisa dengan siap pakai.

Saya harap ini menjawab pertanyaan Anda.

bakunin
sumber
GNU tidak memulai sebagai inisiatif untuk "memperbaiki" banyak perintah UNIX yang umum. GNU adalah sistem operasi sejak awal, untuk tujuan perangkat lunak bebas sebagai tanggapan terhadap UNIX yang secara eksklusif merupakan hak milik. Anda dapat membaca lebih banyak dari situs web mereka . Mereka memutuskan untuk memindahkan semua perangkat lunak mereka ke Linux karena pada saat Linux dibuat, GNU masih belum memiliki kernel yang berfungsi.
Ian Emnace
3

Jawaban paling sederhana tidak ada hubungannya dengan Ubuntu; ini terkait dengan cara GNU / Linux dibangun. Jika Anda mencoba melihatnya sebagai pengembang sistem, Anda akan melihat dua dunia, masing-masing dipisahkan oleh batas tajam (ABI).

Dunia kernel, tempat pengembang tingkat rendah bekerja, adalah sistemnya sendiri. Ini memiliki semua yang biasanya Anda temukan dalam aplikasi reguler. Satu-satunya perbedaan adalah bahwa pengguna bukan orang yang sebenarnya yang menggunakan mesin, tetapi dunia ruang pengguna. Kernel "aplikasi" adalah perantara, server yang menggunakan mesin - hantu di shell.

Sekarang, ruang-pengguna, adalah dunia normal yang dimainkan pengguna dan pengembang sehari-hari. Ini memiliki API kaku, aturan, file, dan, yang paling penting, gambar abstrak, kekanak-kanakan dari mesin yang sedang berjalan. Karena pengguna hanya melihat bagian ini, dan jumlah ini sebesar 99% dari ukuran distribusi, mudah untuk menamainya Sistem Operasi. Nomenklatur yang tepat adalah menyebutnya distribusi perangkat lunak, dibuat oleh beberapa entitas (Canonical, Fedora, dll.), Menggunakan kernel (Linux, HURD, BSD, dll.), Dan dibangun menggunakan seperangkat alat (biasanya disediakan oleh GNU ).

Untuk menjawab pertanyaan Anda, di GNU / Linux (seperti di Windows dan OSX, percayalah), Anda dapat mengubah kernel, bukan hanya versi, tetapi seluruh arsitektur (Linux Kernel, vs HURD Kernel), dan, selama ABI tidak tersentuh, tidak pernah membuat perubahan tunggal di dunia pengguna ... Kembali pada hari, ketika pria sejati harus membangun kernel dari sumber, Anda bisa melalui beberapa perubahan seperti ini, untuk mendapatkan webcam USB jelek untuk bekerja ... Sekarang, dengan kernel modular, Anda hanya perlu menginstal sebuah modul, dan Anda akan mendapatkan dunia kernel baru, dengan ABI (terkadang) diperluas dengan fitur-fitur baru ...

Sekali lagi, sama untuk ruang pengguna. Ketika Anda menginstal aplikasi baru, dari, katakanlah, repositori Ubuntu, 99% dari waktu, masalah terbesar Anda adalah kompatibilitas komponen userspace lain, bukan kernel sebenarnya. Ada beberapa kasus, di mana versi kernel menentukan (melalui ABI) berbagai hal yang dapat diinstal di ruang pengguna, tetapi tujuannya (untuk pengembang, setidaknya) adalah untuk membuat ini hilang ...

Hal lain untuk direnungkan, Anda dapat (dan itu cukup mudah) membangun distribusi GNU / Linux Anda sendiri, khusus, dan sejenis. Dapatkan kernel, beberapa skrip sederhana, beberapa aplikasi, dan Anda siap. Itu hanya semudah itu (lihat distribusi OpenWRT GNU / Linux, untuk gear jaringan, seluruh distribusi cocok dengan 16MB, atau lebih).

rftghost
sumber
"perbatasan yang tajam (ABI)." Saya pikir maksud Anda adalah API. ABI adalah, karena tidak ada istilah yang lebih baik, antarmuka kode ke perangkat keras. API di sisi lain adalah antarmuka kode ke kode.
Sam
1

Saya kira mereka disimpan terpisah karena kernel adalah bagian yang kritis. Kernel dengan regresi, atau hanya pembaruan yang gagal, mungkin melakukan cukup banyak kerusakan. Anda mungkin ingin memperbaruinya lebih jarang; atau hanya setelah menunggu beberapa saat untuk memastikan tidak ada yang melaporkan bug yang mengkhawatirkan.

Juga beberapa pengguna tingkat lanjut atau profesional mengkompilasi ulang kernel untuk memodifikasi perilakunya agar lebih sesuai dengan kebutuhan mereka. Dalam hal demikian, Anda tentu tidak ingin itu secara otomatis diganti dengan versi pabrik setiap kali Anda memutakhirkan.

Francesco Dondi
sumber