Warum werden Betriebssystem und Kernel unter Linux getrennt behandelt? [geschlossen]

9

Wenn es um ein Linux-Betriebssystem geht, einschließlich Ubuntu, werden häufig die Begriffe Kernel und Betriebssystem unterschieden . Dies ist für Windows und die OS X-Familie richtig, aber warum ist es in der Linux-Community so weit verbreitet? Gibt es eine Möglichkeit, den Betriebssystemkernel zu aktualisieren, ohne dass das Betriebssystem selbst aktualisiert wird? Oder umgekehrt? Wenn ja, wie kann das nützlich sein?

Der Traumwind
quelle
3
Einfach: Freiheit. Die Freiheit, Ihre eigene Version von allem zu erstellen, was Sie für nötig halten. Kernel? Schale? Desktop. Tue es.
Rinzwind
6
Weil sie sind getrennte? Der gleiche Grund, warum der Fenstermanager getrennt vom X-Server behandelt wird (weil sie getrennt sind) und warum die Shell getrennt vom Terminalemulator behandelt wird (weil sie auch getrennt sind). Nun, wenn Sie fragen sollten, warum sie so entworfen wurden ...
user253751
Ubuntu läuft jetzt auch auf dem Windows 10-Kernel, was zeigt, dass es sich um eine echte Trennung handelt. Natürlich wird Windows nicht mit einem X-Server geliefert, was die Dinge etwas kompliziert, aber das ist zu erwarten, wenn Teile fehlen.
MSalters
@MSalters Der Fenstermanager in Windows ist etwas knifflig, ja; Wenn jedoch jemand X unter Windows ausführen möchte, gibt es viele Möglichkeiten, damit umzugehen. Am einfachsten für einen Außenstehenden wäre wahrscheinlich ein Server- "Emulator" über dem vorhandenen Fenstermanager, obwohl ich keine Ahnung habe, wie gut das abgebildet werden kann (das letzte Mal, als ich X-Interna gesehen habe, war ich nicht sehr hoffnungsvoll). Ich würde meinen Atem nicht anhalten - es hört sich für mich nicht so an, als ob viele Leute daran interessiert wären, X unter Windows laufen zu lassen.
Luaan

Antworten:

12

Das gesamte GNU / Linux-System wird nach dem modularen Ansatz aufgebaut. Sie können ein einzelnes Modul meistens aktualisieren ( im Allgemeinen ersetzen ), ohne andere zu berühren. Das betreffende Modul kann ein Bootloader, ein Kernel, eine Shell, ein Befehl, eine Desktop-Umgebung, eine GUI-Anwendung usw. sein.

Dies gilt natürlich, solange Sie Abhängigkeiten korrekt verwalten können. In den Distributionen rund um Ubuntu wird APT verwendet, um Abhängigkeiten automatisch aufzulösen.

Sie können eine andere Kernelversion mit dem folgenden Befehl installieren:

sudo apt install linux-image-<version>

Solange APT dies zulässt, sollten Sie in der Lage sein, eine ausgewählte Version des Kernels neu zu starten und zu verwenden, sei es generisch, mit geringer Latenz usw. Oder Sie erstellen selbst eine Kernelversion, z. B. das Echtzeit-Linux , und verwenden sie mit Ihrem aktuellen System .

Melebius
quelle
Vielen Dank, aber wäre es konsequent? Angenommen, Ubuntu 14.04 LTS hat die Kernel-Version 3.19.0, und im Falle einer Aktualisierung des Kernels ist es nicht mehr die 14.04 LTS, oder? Wenn ich also versuche, das gesamte System später zu aktualisieren, oder der integrierte Aktualisierungsmechanismus (Software Updater) mir die neue Version bringt, wird ihm dann die aktualisierte Kernelversion bekannt sein? Kann es die Module separat prüfen und nur die erforderlichen Änderungen vornehmen, ohne dass bereits aktualisierte Module betroffen sind?
The Dreams Wind
1
Unter packages.ubuntu.com/search?keywords=linux-image finden Sie eine lange Liste der Kernelversionen, die jede Ubuntu-Version unterstützt. Die Ubuntu-Version wird von anderen Dingen als die Kernel-Version bestimmt, aber ich weiß nicht genau, welche ... Wenn Sie daran interessiert sind, können Sie eine andere Frage stellen.
Melebius
1
@AleksandrMedvedev Viel später fand ich es! Die Ubuntu-Version ist in der Datei vermerkt, die /etc/issuevom base-filesPaket bereitgestellt wird . Wie ich bereits geschrieben habe, hat es nichts mit der Kernel-Version zu tun.
Melebius
5

Wie Sie wissen, ist der Kernel ein wichtiger Bestandteil des Betriebssystems. In GNU / Linux-Distributionen können Sie den Kernel problemlos aktualisieren, ohne einen anderen Teil des Betriebssystems zu berühren. Wir aktualisieren jedoch einfach einen Teil unseres Betriebssystems.

Ein Betriebssystem besteht aus zwei Teilen: Kernel Space und User Space.

Ja, Sie können Ihren Kernel-Speicherplatz aktualisieren, ohne Ihren Benutzerbereich zu berühren, wenn nur die neue Version mit Ihrem aktuellen Benutzerbereich kompatibel ist.

Und was das Aktualisieren von User Space-Tools betrifft, ist es ein weiteres Ja.

Wenn Sie laufen:

sudo apt-get upgrade

Wenn ein Update für den Kernel verfügbar war, erhalten Sie:

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

Sie aktualisieren also nur Ihren Benutzerbereich und wenn Sie so etwas ausführen

sudo apt-get dist-upgrade

Sie aktualisieren alles, einschließlich des Kernels.

Um nur Ihren Kernel auf eine neuere Version zu aktualisieren, verwenden Sie Folgendes:

$ 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

Um eine Liste neuerer Kernel zu finden, installieren Sie sie als neues Paket. Beispiel:

sudo apt install linux-image-4.10.0-14-generic
Ravexina
quelle
Das ist definitiv nicht wahr.
mook765
Korrigiere mich;) damit ich etwas Neues lerne :)
Ravexina
3
sudo apt upgradeaktualisiert auch den Kernel, wenn neue Versionen verfügbar sind. sudo apt full-upgradePackeges Arsch gut entfernen, was asudo apt upgradenicht tun wird.
Soren A
Da ich jetzt ein Upgrade auf einen neuen Kernel durchführe, handelt es sich um eine Art Installation, und während upgradeich den Unterbefehl verwende, werden keine neuen Pakete installiert. Außerdem werden keine Pakete entfernt. Deshalb verwenden wir diese Option dist-upgrade. apt-getfunktioniert zumindest so;) also habe ich meine befehle aktualisiert, um verwirrungen zu vermeiden.
Ravexina
1
Ich bin erfahrener mit dem aptBefehl, nach einer kurzen Recherche sieht es so aus, als ob Ihre Antwort jetzt korrekt ist aptund Sie apt-getdie Sache anders behandeln, siehe hiroom2.com/2016/05/20/ubuntu-16-04-debian-8-apt -Befehl /… . Also etwas Wissen für uns beide ...
mook765
3

Zunächst ein paar Klarstellungen, weil ich spüre, dass Sie nicht verstehen, wie GNU / Linux-Systeme entstanden sind. Nehmen Sie mit, wenn dies für Sie nichts Neues ist:

"Kernel" ist nicht nur ein anderes Programm, das ausgeführt wird, sondern es ist der Teil des Betriebssystems, der die Basisfunktionen bereitstellt: Wenn Sie ein Programm starten möchten (z. B. geben Sie "ls" in die Befehlszeile ein), muss die Binärdatei geladen werden Von der Festplatte (einschließlich einiger Dateisystemoperationen zum Auffinden und einiger Dateiverwaltung zum Lesen) wird eine "Prozessumgebung" erstellt: Speicher wird zugewiesen, eine Prozessnummer wird ausgegeben usw. usw. Alle früheren Aktivitäten (FS, Lesen aus Datei, ...) werden von Systembibliotheken verarbeitet, letztere sind Kernelfunktionen. In gewissem Sinne ist der Kernel "das Betriebssystem" und alles andere ist nur eine Dekoration.

"Linux" ist in der Tat (nur!) Ein Kernel ohne andere Teile eines Betriebssystems. Linus Torvalds begann mit dem Schreiben, indem er Andrew Tanenbaums MINIX Template OS-Kernel nahm und vervollständigte, so dass es ein ausgewachsener und wirklich funktionsfähiger Kernel war. Bis heute gibt es Linus (und viele andere, die dazu beitragen / beigetragen haben), die diesen Kernel entwickeln. Dieser Kernel ist UNIX immer noch sehr ähnlich, aber KEIN UNIX-Kernel.

"GNU" wurde als Initiative gestartet, um viele gängige UNIX-Befehle zu "verbessern". Ich werde nicht diskutieren, ob sie erfolgreich waren oder nicht, aber sie haben definitiv viel Software geschrieben und hatten irgendwann eine Sammlung von Hilfsprogrammen. Sie begannen sogar, einen eigenen OS-Kernel (HURD) zu entwickeln, der weitgehend auf UNIX basierte, aber definitiv anders war. Aber bis heute ist HURD in seiner frühen Entwicklung und kaum eine funktionierende Lösung. "GNU" übrigens. ist die Abkürzung für "GNU (is) Not UNIX" - sie haben versucht, einige (wahrgenommene oder reale) Einschränkungen von UNIX zu überwinden, um einen Nachfolger für UNIX zu schaffen (wieder: Ich möchte nicht an der Diskussion teilnehmen, wenn sie erfolgreich waren oder nicht - es ist mir egal, ob es "besser" oder "schlechter" ist, aber es ist definitiv anders!).

Bei einer Reihe von Tools ohne Kernel und einem Kernel ohne Toolset war es eine natürliche Entwicklung, diese beiden zusammenzufügen: GNU / Linux wurde erstellt.

Um ein funktionierendes (und funktionsfähiges) Betriebssystem zu haben, benötigen Sie jedoch mehr als nur einen Kernel und ein Toolset: Sie benötigen ein Paketverwaltungssystem, Sie benötigen Installationsverfahren, Sie benötigen Vorlagenkonfigurationen, Sie benötigen ...

Mehrere verschiedene Personen (oder Gruppen davon) kamen zu diesem Schluss und verwendeten die GNU / Linux-Kombination, um ein GNU / Linux-System nach ihren Wünschen zu erstellen, indem sie genau die Dinge hinzufügten, über die ich oben gesprochen habe: Sie erstellten einen Paketmanager, ein Verpackungssystem , Installationsverfahren und was mehr. Diese verschiedenen Gruppen (bzw. die Ergebnisse ihrer Bemühungen) sind die verschiedenen Verteilungen. Heute gibt es drei verschiedene Paketmanager (passend für Debian und abgeleitete Systeme wie * ubuntu, rpm für RedHat und abgeleitete Systeme wie Fedora, CentOS und mehr, pacman für ArchLinux), aber alle diese verwalten nur Softwarepakete, die (im Wesentlichen) das gleiche: was heißt, wenn Sie "ls" oder "df" usw. ausgeben,

"Im Prinzip" können Sie also den Kernel alleine aktualisieren, so wie es die Leute getan haben, die eine Distribution aus verschiedenen Versionen aller oben genannten Software erstellt haben.

Aber, und das ist ein wirklich großes ABER: weil es nicht nur den Kernel und einige zusätzliche Software gibt, sondern auch viele andere Dinge, die zu beachten sind, wie Systemkonfigurationstools (systemd, die einige Distributionen verwenden und andere nicht), Netzwerk Management-Tools wie NetworkManager, die wiederum von einigen Versionen der GNOME-Bibliothek usw. usw. abhängen - eine "Distribution" ist eine ziemlich komplexe Sache, und wenn Sie versuchen, den Kernel zu aktualisieren, werden Sie wahrscheinlich viele aktualisieren andere Dinge wegen der vielen Abhängigkeiten.

Trotzdem und auch "im Prinzip" wie oben: Sie können auch Ihre eigene Distribution erstellen, indem Sie alle Quellen herunterladen, kompilieren, einen funktionierenden Satz von Versionskombinationen finden, ein Verpackungssystem einrichten (oder eines der vorhandenen verwenden) ) - und so weiter, bis Sie ein verteilbares, installierbares und konfigurierbares System haben. Dies ist, was die Entwickler von Distributionen wie Ubuntu tun, und es ist kein Wunder - nur eine Menge komplexer Arbeit. In Wirklichkeit scheuen die meisten Benutzer dies und verwenden etwas, das sie können, indem sie es verwenden.

Ich hoffe das beantwortet deine Frage.

Bakunin
quelle
GNU startete nicht als Initiative, um viele gängige UNIX-Befehle zu "verbessern". GNU war von Anfang an ein Betriebssystem zum Zweck der freien Software als Reaktion darauf, dass UNIX restriktiv proprietär ist. Sie können mehr von ihrer Website lesen . Sie beschlossen, ihre gesamte Software auf Linux zu portieren, da GNU zum Zeitpunkt der Erstellung von Linux noch keinen funktionierenden Kernel hatte.
Ian Emnace
3

Die einfachste Antwort hat nichts mit Ubuntu zu tun. Es hängt mit der Art und Weise zusammen, wie GNU / Linux erstellt wird. Wenn Sie versuchen, es als Systementwickler zu betrachten, sehen Sie zwei Welten, die jeweils durch einen scharfen Rand (ABI) getrennt sind.

Die Kernel-Welt, in der Low-Level-Entwickler arbeiten, ist ein eigenständiges System. Es hat alles, was Sie normalerweise in einer regulären Anwendung finden würden. Der einzige Unterschied besteht darin, dass der Benutzer nicht die tatsächliche Person ist, die die Maschine verwendet, sondern die Welt des Benutzerraums. Die "Anwendung" des Kernels ist der Middle-Man, der Server, der die Maschine verwendet - der Geist in der Shell.

Jetzt ist der Benutzerraum die normale Welt, auf der alltägliche Benutzer und Entwickler spielen. Es verfügt über starre APIs, Regeln, Dateien und vor allem über ein abstraktes, kindisches Image des Computers, auf dem es ausgeführt wird. Da der Benutzer nur diesen Teil sieht und dieser 99% der Verteilungsgröße ausmacht, kann er leicht als Betriebssystem falsch bezeichnet werden. Die richtige Nomenklatur besteht darin, es als Software-Distribution zu bezeichnen, die von einer Entität (Canonical, Fedora usw.) unter Verwendung eines Kernels (Linux, HURD, BSD usw.) erstellt und mit einer Reihe von Tools (normalerweise von GNU bereitgestellt) erstellt wurde ).

Um Ihre Frage zu beantworten, können Sie in GNU / Linux (genau wie in Windows und OSX, vertrauen Sie mir) den Kernel ändern, nicht nur die Version, sondern die gesamte Architektur (Linux-Kernel, vs HURD-Kernel) und solange Der ABI wird nicht berührt, nehmen Sie niemals eine einzige Änderung in der Benutzerwelt vor ... Früher, als der echte Mann den Kernel aus Quellen erstellen musste, konnten Sie mehrere Änderungen wie diese vornehmen, um eine beschissene USB-Webcam zu erhalten um zu arbeiten ... Jetzt müssen Sie mit dem modularen Kernel nur noch ein Modul installieren und erhalten eine brandneue Kernelwelt, in der der ABI (manchmal) um neue Funktionen erweitert wird ...

Wieder das gleiche für den Userspace. Wenn Sie eine neue Anwendung installieren, beispielsweise aus einem Ubuntu-Repository, besteht Ihre größte Sorge in 99% der Fälle in der Kompatibilität der anderen Userspace-Komponenten und nicht des eigentlichen Kernels. Es gibt Fälle, in denen die Kernel-Version (über ABI) den Umfang der Dinge vorschreibt, die im Benutzerbereich installiert werden können, aber das Ziel (zumindest für die Entwickler) ist es, dies zu beseitigen ...

Eine andere Sache, über die Sie nachdenken sollten: Sie können (und es ist ziemlich einfach) Ihre eigene, spezielle, einzigartige GNU / Linux-Distribution erstellen. Holen Sie sich einen Kernel, einige einfache Skripte, mehrere Apps und schon sind Sie fertig. Es ist einfach so einfach (werfen Sie einen Blick auf die OpenWRT GNU / Linux-Distributionen, für Netzwerkgeräte passt die gesamte Distribution in etwa 16 MB).

rftghost
quelle
"eine scharfe Grenze (der ABI)." Ich denke du meinst die API. Das ABI ist mangels eines besseren Begriffs eine Code-zu-Hardware-Schnittstelle. Die API hingegen ist eine Code-zu-Code-Schnittstelle.
Sam
1

Ich denke, sie werden getrennt gehalten, weil der Kernel ein kritischer Teil ist. Ein Kernel mit einer Regression oder nur einem fehlgeschlagenen Update kann ziemlich viel Schaden anrichten. Möglicherweise möchten Sie es weniger häufig aktualisieren. oder erst, nachdem Sie einige Zeit gewartet haben, um sicherzustellen, dass niemand besorgniserregende Fehler meldet.

Einige fortgeschrittene oder professionelle Benutzer kompilieren den Kernel neu, um sein Verhalten an ihre Bedürfnisse anzupassen. In diesem Fall möchten Sie natürlich nicht, dass es bei jedem Upgrade automatisch durch die Werksversion ersetzt wird.

Francesco Dondi
quelle