¿Por qué el sistema operativo y el núcleo se tratan por separado en Linux? [cerrado]

9

Cuando se trata de cualquier sistema operativo Linux, incluido Ubuntu, las personas tienden a distinguir los términos kernel y sistema operativo . Esto es correcto para Windows y la familia OS X, pero ¿por qué está tan extendido entre la comunidad Linux? ¿Hay alguna manera de actualizar el núcleo del sistema operativo, sin tener el sistema operativo actualizado? ¿O viceversa? Si es así, ¿cómo puede ser útil?

El viento de los sueños
fuente
3
Simple: libertad. La libertad de crear tu propia versión de lo que sientes que necesitas. ¿Núcleo? ¿Cáscara? Escritorio. Ve a por ello.
Rinzwind,
66
¿Porque están separados? La misma razón por la cual el administrador de ventanas se trata por separado del servidor X (porque están separados) y por qué el shell se trata por separado del emulador de terminal (porque también están separados). Ahora bien, si se le preguntara por qué fueron diseñados de esa manera ...
user253751
Ubuntu ahora también se ejecuta sobre el kernel de Windows 10, lo que muestra que es una separación real. Por supuesto, Windows no viene con un servidor X que complica un poco las cosas, pero eso es de esperar cuando faltan partes.
MSalters
@MSalters El administrador de ventanas en Windows es un poco complicado, sí; sin embargo, si alguien realmente quiere ejecutar X en Windows, hay muchas formas de manejarlo. Lo más fácil para un extraño probablemente sería un "emulador" de servidor en la parte superior del administrador de ventanas existente, aunque no tengo idea de qué tan bien podría mapearse (la última vez que vi X internos, no tenía muchas esperanzas). No aguantaría la respiración, no me parece que muchas personas estuvieran interesadas en tener X ejecutándose en Windows.
Luaan

Respuestas:

12

Todo el sistema GNU / Linux se construye utilizando el enfoque modular. En su mayoría, puede actualizar ( reemplazar en general) un solo módulo sin tocar otros. El módulo en cuestión puede ser un gestor de arranque, kernel, shell, comando, entorno de escritorio, aplicación GUI, lo que sea ...

Por supuesto, es cierto siempre que pueda administrar las dependencias correctamente. En el conjunto de distribuciones alrededor de Ubuntu, APT se usa para resolver dependencias automáticamente.

Puede instalar otra versión del kernel usando el comando:

sudo apt install linux-image-<version>

Siempre y cuando APT lo permita, debería poder reiniciar y usar la versión seleccionada del núcleo, ya sea genérica, de baja latencia, etc. O puede construir una versión del núcleo usted mismo, por ejemplo , Linux en tiempo real , y usarla con su sistema actual .

Melebio
fuente
Muchas gracias, pero ¿sería coherente? Digamos, Ubuntu 14.04 LTS tiene la versión del kernel 3.19.0, y en caso de actualizar el kernel, ya no es el 14.04 LTS, ¿verdad? Entonces, si intento actualizar todo el sistema más tarde, o el mecanismo de actualización incorporado (Actualizador de software) me trae la nueva versión, ¿estará al tanto de la versión actualizada del kernel? ¿Es capaz de verificar los módulos por separado y traer solo los cambios requeridos, sin que ya hayan afectado los módulos actualizados?
The Dreams Wind
1
Consulte paquetes.ubuntu.com/search?keywords=linux-image para ver la larga lista de versiones de kernel que admite cada versión de Ubuntu. La versión de Ubuntu está determinada por diferentes cosas de la versión del kernel, pero no sé realmente cuáles ... Si está interesado en eso, puede comenzar otra pregunta.
Melebius
1
@AleksandrMedvedev ¡Mucho más tarde lo encontré! La versión de Ubuntu se anota en el archivo /etc/issueproporcionado por el base-filespaquete. Como ya he escrito, no está relacionado con la versión del kernel.
Melebius
5

Como sabe, el núcleo es una parte importante del sistema operativo, en las distribuciones de GNU / Linux puede actualizar fácilmente el núcleo sin tocar otra parte del sistema operativo. Sin embargo, simplemente estamos actualizando una parte de nuestro sistema operativo.

Un sistema operativo se compone de dos partes, espacio de kernel y espacio de usuario.

Entonces, sí, puede actualizar su espacio de kernel sin tocar su espacio de usuario si solo la nueva versión es compatible con su espacio de usuario actual.

Y sobre la actualización de las herramientas de espacio de usuario, es otro sí.

Cuando corres:

sudo apt-get upgrade

Si hubiera una actualización disponible para el núcleo, obtendrá:

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

así que solo está actualizando su espacio de usuario y cuando ejecuta algo como

sudo apt-get dist-upgrade

está actualizando todo, incluido el kernel.

Para actualizar solo su Kernel a una versión más nueva, use algo como:

$ 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

para encontrar una lista de núcleos más nuevos, luego instálelo como un nuevo paquete, por ejemplo:

sudo apt install linux-image-4.10.0-14-generic
Ravexina
fuente
Esto definitivamente no es cierto.
mook765
Corrígeme;) así que aprendo algo nuevo :)
Ravexina
3
sudo apt upgradetambién actualizará el kernel si hay nuevas versiones disponibles. sudo apt full-upgradeeliminará bien el culo de los paquetes, lo que asudo apt upgradeno hará.
Soren A
Como ahora estoy actualizando a un nuevo kernel es algún tipo de Instalación y mientras uso el upgradesubcomando, no instalará ningún paquete nuevo y tampoco elimina ningún paquete, por eso lo usamos dist-upgrade. al menos apt-getfunciona de esta manera;) así que actualicé mis comandos para evitar confusiones.
Ravexina
1
Estoy más experiencia con la apt-command, después de una breve investigación se ve que su respuesta es correcta ahora, apty apt-getocupe de lo diferente, veo hiroom2.com/2016/05/20/ubuntu-16-04-debian-8-apt -command / ... . Así que algo de conocimiento para los dos ...
mook765
3

Primero, algunas aclaraciones, porque siento que no entiendes cómo surgieron los sistemas GNU / Linux. Ten paciencia conmigo si esto no es nada nuevo para ti:

"Kernel" no es solo otro programa que se ejecuta, sino que es la parte del sistema operativo que proporciona las funciones básicas: si desea iniciar un programa (digamos que escribe "ls" en la línea de comando) el binario debe cargarse desde el disco (que incluye algunas operaciones del sistema de archivos para localizarlo y algún manejo de archivos para leerlo), luego se crea un "entorno de proceso": se asigna memoria, se emite un número de proceso, etc., etc. Todas las actividades anteriores (FS, lectura de archivo, ...) son manejados por las bibliotecas del sistema, pero las últimas son funciones del núcleo. En cierto sentido, el núcleo "es el sistema operativo" y todo lo demás es solo decoración a su alrededor.

"Linux" es de hecho (¡solo!) Un núcleo sin otras partes de un sistema operativo. Linus Torvalds comenzó a escribirlo tomando el núcleo del sistema operativo de la plantilla MINIX de Andrew Tanenbaums y completándolo para que fuera un núcleo real y funcional. Hasta el día de hoy, hay Linus (y muchos otros que contribuyen / han contribuido) que desarrollan este núcleo. Este núcleo sigue siendo muy similar a UNIX, pero NO es un núcleo UNIX.

"GNU" comenzó como una iniciativa para "mejorar" muchos comandos comunes de UNIX. No discutiré si tuvieron éxito o no, pero definitivamente escribieron mucho software y en un momento tuvieron una colección de programas de utilidad. Incluso comenzaron a desarrollar un núcleo de sistema operativo propio (HURD), que se basaba en gran medida en UNIX, pero definitivamente era diferente. Pero hasta el día de hoy HURD está en su desarrollo inicial y apenas es una solución que funcione. "GNU" por cierto. es la abreviatura de "GNU (is) Not UNIX" - trataron de superar algunas limitaciones (percibidas o reales) de UNIX con la intención de crear un sucesor para UNIX (de nuevo: no quiero entrar en la discusión si tuvieron éxito o no, no me importa si es "mejor" o "peor", ¡pero definitivamente es diferente!).

Entonces, con un conjunto de herramientas que carecen de un núcleo y un núcleo que carece de un conjunto de herramientas, fue un desarrollo natural juntar estos dos: se creó GNU / Linux.

Aún así, para tener un SO operativo (y viable) necesita algo más que un núcleo y un conjunto de herramientas: necesita un sistema de gestión de paquetes, necesita procedimientos de instalación, necesita configuraciones de plantilla, necesita ...

Varias personas diferentes (o grupos de ellos) llegaron a esta conclusión y usaron la combinación GNU / Linux para crear un sistema GNU / Linux de su agrado, agregando exactamente las cosas de las que hablé anteriormente: crearon un administrador de paquetes, un sistema de empaque , procedimientos de instalación y qué más. Estos diferentes grupos (respectivamente, los resultados de sus esfuerzos) son las diferentes distribuciones. Hoy en día existen tres administradores de paquetes diferentes (aptos para Debian y sistemas derivados como * ubuntu, rpm para RedHat y sistemas derivados como Fedora, CentOS y más, pacman para ArchLinux) pero todos estos solo administran paquetes de software que es (esencialmente) lo mismo: cómo se llama cuando emite "ls" o "df", etc.,

Entonces, "en principio" puede actualizar el núcleo solo, como lo hicieron las personas que crearon una distribución a partir de varias versiones de todo el software que mencioné anteriormente.

Pero, y este es un gran PERO: porque no solo hay el kernel y algún software adicional, sino muchas otras cosas a tener en cuenta, como las herramientas de configuración del sistema (systemd, que algunas distribuciones usan y otras no), la red herramientas de administración como NetworkManager, que a su vez depende de algunas versiones de la biblioteca GNOME, etc., etc. - una "distribución" es algo bastante complejo y es probable que si intentas actualizar el kernel termines actualizando mucho otras cosas debido a las muchas interdependencias.

Aún así, y también "en principio", como arriba: también puede crear su propia distribución descargando todas las fuentes, compilándolas, encontrar un conjunto de combinaciones de versiones que funcionen, poner algún sistema de empaque en su lugar (o usar uno de los existentes) ) - y así sucesivamente, hasta que tenga un sistema distribuible, instalable y configurable. Esto es lo que hacen los creadores de distribuciones como Ubuntu y no es un milagro, solo un montón de trabajo complejo, por lo que en realidad la mayoría de los usuarios evitan eso y usan algo que pueden listos para usar.

Espero que esto responda tu pregunta.

bakunin
fuente
GNU no comenzó como una iniciativa para "mejorar" muchos comandos comunes de UNIX. GNU era un sistema operativo desde el primer momento, con el propósito de que el software libre en respuesta a UNIX fuera estrictamente propietario. Puedes leer más desde su sitio web . Decidieron portar todo su software a Linux porque para cuando se creó Linux, GNU todavía no tenía un núcleo en funcionamiento.
Ian Emnace
3

La respuesta más simple no tiene nada que ver con Ubuntu; está relacionado con la forma en que se construye GNU / Linux. Si intenta verlo como un desarrollador de sistemas, verá dos mundos, cada uno separado por un borde afilado (el ABI).

El mundo del kernel, donde trabajan los desarrolladores de bajo nivel, es un sistema en sí mismo. Tiene todo lo que normalmente encontrarás en una aplicación normal. La única diferencia es que el usuario no es la persona real que usa la máquina, sino el mundo del espacio del usuario. La "aplicación" del núcleo es el intermediario, el servidor que usa la máquina, el fantasma en el shell.

Ahora, el espacio de usuario es el mundo normal en el que están jugando los usuarios y desarrolladores cotidianos. Tiene API rígidas, reglas, archivos y, lo más importante, una imagen abstracta e infantil de la máquina en la que se está ejecutando. Dado que el usuario solo está viendo esta parte, y esto representa el 99% del tamaño de distribución, es fácil nombrarlo mal como Sistema Operativo. La nomenclatura correcta es llamarlo una distribución de software, creada por alguna entidad (Canonical, Fedora, etc.), usando un núcleo (Linux, HURD, BSD, etc.), y construida usando un conjunto de herramientas (generalmente proporcionadas por GNU )

Para responder a su pregunta, en GNU / Linux (al igual que en Windows y OSX, confíe en mí), puede cambiar el kernel, no solo la versión, sino toda la arquitectura (Linux Kernel, vs HURD Kernel) y, siempre que el ABI no se toca, nunca haga un solo cambio en el mundo del usuario ... En el pasado, cuando el hombre real tenía que construir el núcleo desde las fuentes, podía realizar varios cambios como estos, para obtener una cámara web USB horrible. para trabajar ... Ahora, con el kernel modular, solo tiene que instalar un módulo, y obtendrá un nuevo mundo de kernel, con el ABI (a veces) extendido con nuevas características ...

De nuevo, lo mismo para el espacio de usuario. Cuando instala una nueva aplicación, desde, digamos, un repositorio de Ubuntu, el 99% del tiempo, su mayor preocupación es la compatibilidad de los otros componentes del espacio de usuario, no el núcleo real. Hay casos en los que la versión del kernel dicta (a través de ABI) el rango de cosas que se pueden instalar en el espacio de usuario, pero el objetivo (al menos para los desarrolladores) es hacer que esto desaparezca ...

Otra cosa para reflexionar es que puede (y es bastante fácil) construir su propia distribución especial de GNU / Linux única en su tipo. Obtenga un kernel, algunos scripts simples, varias aplicaciones y listo. Es así de fácil (eche un vistazo a las distribuciones OpenWRT GNU / Linux, para el equipo de red, toda la distribución cabe como 16Mb, más o menos).

rftghost
fuente
"un borde afilado (el ABI)". Creo que te refieres a la API. El ABI es, por falta de un término mejor, un código para la interfaz de hardware. La API, por otro lado, es un código para codificar la interfaz.
Sam
1

Supongo que se mantienen separados porque el núcleo es una parte crítica. Un kernel con una regresión, o simplemente una actualización fallida, podría causar mucho daño. Es posible que desee actualizarlo con menos frecuencia; o solo después de esperar un tiempo para asegurarse de que nadie reporte errores preocupantes.

Además, algunos usuarios avanzados o profesionales vuelven a compilar el núcleo para modificar su comportamiento y adaptarlo mejor a sus necesidades. En tal caso, obviamente no querrá que se reemplace automáticamente con la versión de fábrica cada vez que actualice.

Francesco Dondi
fuente