Normalmente, cuando hablamos de Linux, solemos hacerlo en relación a distribuciones como Ubuntu, Debian, Mint, etc. Sin embargo, estas distribuciones no son sistemas operativos como tal, sino más bien son «adaptaciones» de un sistema operativo de código abierto: Linux. Y, por lo tanto, a pesar de las peculiaridades de cada una, todas ellas comparten una misma base, lo que conocemos como Kernel Linux.
Linux, como indica su propia documentación, nació como un clon de otro sistema operativo llamado Unix. Concretamente como un sistema alternativo inspirado en Minix (que, a su vez, clonaba los conceptos de Unix). Por sus propiedades, Linux es un sistema operativo real, aunque nadie lo utiliza como tal, sino que recurre a las distribuciones ya que, con ellas, se vuelve mucho más útil y sencillo de utilizar.
Por ello, no se suele decir «voy a instalar Linux» refiriéndonos a un sistema operativo concreto, sino que lo que instalamos son versiones, o distribuciones, de este núcleo, creadas por empresas o por la comunidad, que comparten una misma base: el Kernel.
Qué es el Kernel y para qué sirve
El Kernel Linux es el núcleo del sistema operativo. Esta es la parte de software más importante de cualquier sistema operativo. Windows tiene su propio núcleo privado, Apple tiene el suyo (basado en Unix, por cierto), y Linux es el Kernel que utilizan todas las distribuciones. Y su principal función es encargarse de controlar el hardware del ordenador.
Concretamente, este núcleo es el responsable de gestionar la memoria del sistema y el tiempo del proceso, gestionar todos los procesos, controlar las llamadas del sistema y las conexiones entre procesos y permitir a todo el software tener acceso al hardware, especialmente a los periféricos conectados al ordenador.
Es tal la importancia del Kernel a la hora de controlar el hardware que, de sus más de 28 millones de líneas de código, la mayor parte de él son drivers. Y esto, aunque es bueno para la compatibilidad, empieza a ser un problema para el rendimiento.
En condiciones normales, los usuarios en ningún momento interactúan con este. Mientras que los usuarios tienen un acceso limitado al hardware, el núcleo tiene acceso y control total sobre el mismo. Es el responsable de que todo funcione bien, que lo haga de forma segura, y de que no haya errores. Si ocurre un fallo con un proceso en el espacio de usuario, Linux sigue funcionando. E incluso puede intentar recuperar el sistema al tener control sobre el PC. Sin embargo, si ocurre un error en el espacio del Kernel, entonces todo el sistema deja de funcionar. Es lo que conocemos como el «Kernel Panic«, el equivalente al pantallazo azul en Linux.
Versiones
Es cierto que las versiones actuales del Kernel no tienen nada que ver con las primeras de 1991. Sin embargo, este núcleo están en constante desarrollo. Y cada pocas semanas solemos ver nuevos lanzamientos. Pero no todos son igual de importantes, ya que depende en gran medida de su numeración.
Las versiones del Kernel Linux pueden tener 4 números que indican la versión: a.b.c.d
- a indica la versión. Este número es el que menos cambia, ya que solo se suele dar el salto cuando hay cambios extremadamente grandes en el sistema. En toda su historia, solo ha cambiado 5 veces, en 2004, para la versión 1.0, en 2006, para la versión 2.0, en 2011, para la versión 3.0, en 2015, para la versión 4.0, y en 2019 para dar lugar a la versión actual, la 5.0.
- b indica la subversión. Cuando se lanzan nuevas versiones, pero realmente son actualizaciones menores (nuevos drivers, optimizaciones, correcciones, etc), entonces en lugar de cambiar la versión, se cambia el número de la subversión.
- c indica el nivel de revisión. Se suele cambiar este número, por ejemplo, cuando se introducen cambios menores, como parches de seguridad, correcciones de errores, etc.
- d es el último subnivel de la versión. Apenas se utiliza, pero está reservado para que, si se lanza una versión con un fallo muy grave, se lance la nueva versión con este subnivel incluyendo exclusivamente la corrección de dicho fallo grave.
Todas las versiones del Kernel Linux son públicas y de código abierto. Podemos encontrarlas en este enlace. Pero no están compiladas, sino que son los propios usuarios quienes tienen que compilarlas para poder usarlas en su distribución. Y esta no es una tarea precisamente sencilla. Por suerte, las comunidades responsables del desarrollo de las distintas distribuciones suelen traernos versiones del Kernel compiladas, y optimizadas, que podemos instalar como un parche cualquiera.
Qué versión de Linux elegir
Cuando hablamos de software, siempre recomendamos tener la última versión de todo. Esta es la mejor forma de asegurarnos de que, por un fallo de seguridad, nuestro PC se pone en peligro. Con el núcleo de Linux es lo mismo, siempre se recomienda tener la última versión. Sin embargo, siempre hay que hacerlo con cuidado.
Una de las razones por las que el Kernel es tan grande es porque no elimina nada. Por viejo que sea. Gracias a ello es posible seguir usando las últimas versiones de Linux en los primeros ordenadores donde se puso en funcionamiento por primera vez en 1991. Cada actualización lo que suele hacer es añadir controladores y cambiar funciones para optimizar el funcionamiento general del PC.
Pero puede ocurrir que una versión traiga un fallo que haga que nuestro PC no funcione correctamente, e incluso que el rendimiento no sea el esperado. En ese caso, simplemente con volver a instalar una versión anterior el sistema operativo debería volver a funcionar con normalidad. Aunque perderemos soporte para los componentes de hardware más nuevos.
Lo mejor, y más fácil para la mayoría, es ir actualizando el Kernel a medida que vamos actualizando la distribución desde sus repositorios. Así evitaremos estos problemas por «estar siempre a la última».
Cómo saber qué versión del Kernel tengo
Poniendo que usemos una distribución común, como, por ejemplo, Ubuntu, podemos comprobar qué versión del núcleo usamos muy fácilmente con un solo comando. Para ello, no tenemos más que abrir una terminal con el atajo de teclado «Ctrl + Alt + T» y ejecutar uno de estos comandos:
Uname
Podemos ejecutar el comando «uname -a» para obtener la información de nuestra distro. Este comando nos mostrará toda la información relacionada con nuestro sistema operativo, entre ella, la versión del Kernel Linux que usamos. Pero si queremos ser mucho más específicos, podemos centrarnos solo en la versión del núcleo podemos hacerlo con:
uname -srm
Neofetch
Neofetch es un programa muy sencillo y utilizado por los usuarios de Linux que nos permite ver detalladamente la información de nuestro sistema instalado. Para poder usarlo, lo primero tenemos que instalar esta herramienta ejecutando el comando:
sudo apt install neofetch
Y, una vez instalada, ejecutarla con «neofetch» para poder ver toda la información relacionada con este comando.
Hostnamectl
Hostnamectl es una herramienta que forma parte de systemd gracias a la cual podemos conocer los detalles sobre nuestro sistema operativo. Entre otras muchas funciones, podemos usarlo para conocer la información técnica sobre el núcleo que estamos usando. Para ello, no tenemos más que ejecutar el siguiente comando:
hostnamectl status | grep "Kernel:"
Si queremos algo más de información, también podemos conseguirla con «hostnamectl status».
/proc/version
Este es otro de los comandos de Linux diseñado para permitirnos conocer toda la información posible sobre nuestro sistema. Como nos muestra información de todo tipo, hay que filtrar la información que nos interesa con el comando «cat» de la siguiente forma:
cat /proc/version
¿Cuál es la última versión de Linux?
El núcleo Linux está en constante desarrollo. Cada pocas semanas podemos ver cómo llega una nueva versión de este núcleo. Y cada una trae, a parte de varias correcciones y novedades, una importante cantidad de nuevos drivers para garantizar el correcto funcionamiento de Linux en todo tipo de hardware.
La primera versión de este SO vio la luz del día en 1990. Desde entonces, tan solo ha habido 5 cambios de versión, siendo las miles de actualizaciones lanzadas hasta la fecha actualizaciones menores del núcleo. La última gran actualización del Kernel es la 5.x, lanzada en 2019. Y se espera que, para finales de 2022, veamos otra gran actualización del núcleo, la 6.x, estando lista para seguir plantando cara a Windows.
A fecha de agosto de 2022, la última subversión disponible de este núcleo es Linux 5.19. Aunque salvo las distribuciones Rolling Release, ninguna utiliza esta versión tan reciente, siendo la más popular la 5.15 en Ubuntu y derivadas, y la 5.18 en las distros que van algo más actualizadas.
Cómo actualizar el núcleo
El Kernel es el elemento más importante del sistema, por lo que tenerlo actualizado a la última versión es vital. Con cada actualización no solo se corrigen posibles fallos de seguridad y errores de funcionamiento, sino que se mejoran los controladores para poder funcionar mejor y ser compatible con el último hardware. Hay varias formas de actualizar el núcleo de nuestro sistema.
Mediante las actualizaciones de la distro
La forma más rápida, y recomendable, de actualizar el núcleo de nuestro Linux es hacerlo mediante las actualizaciones propias del sistema. Cada vez que se lanza un parche, los desarrolladores de las principales distros lo revisan e implementan dentro de los repositorios de software de manera que podamos actualizar el sistema con un simple comando o desde el actualizador incluido.
Hay dos tipos de actualizaciones. Por un lado tenemos el que nos ofrece Ubuntu, que solo nos brinda correcciones menores del Kernel pero nunca nuevas versiones (solo con cada nueva versión de Ubuntu se actualiza el Kernel), y luego las distros Rolling Release que sí nos permiten tener el Kernel siempre a la última.
Usar software como Ukku o Mainline
Un punto intermedio entre las actualizaciones de la distro y compilar e instalar el Kernel a mano es usar un software especializado en esta labor, como es el caso de Ukku o Mainline. Estos programas cuentan con una base de datos con todas las versiones del núcleo y nos permiten bajar e instalar la que nosotros queramos sin tener que preocuparnos por nada más. Cada vez que se lance una nueva versión podremos bajarla e instalarla (si queremos) desde este mismo programa.
Actualizar el Kernel manualmente
Actualizar el núcleo a mano es una tarea complicada reservada solo a usuarios avanzados. Todas las versiones son de código abierto, y se distribuyen tal cual desde la web del Kernel. Por tanto, cualquiera puede bajar la última versión a mano y usar el compilador gcc para compilar el núcleo en su sistema y poder utilizarlo.
Además, Canonical tiene su propio repositorio de Kernels desde donde podemos bajar las versiones ya compiladas y empaquetadas en un paquete DEB. Así podemos instalar en Ubuntu la versión del núcleo que queramos haciendo solo doble clic, como en cualquier otro programa.
¿El último Kernel Linux no va bien? Vuelve atrás
Lo primero que queremos dejar claro es que, siempre que podamos, es mejor usar la última versión del Kernel Linux. El por qué es muy sencillo. Igual que otros sistemas operativos, u otros programas, cuando el núcleo se actualiza se corrigen fallos y problemas, tanto de funcionamiento como de seguridad, que nos permiten que el ordenador funcione de la mejor manera posible y, sobre todo, lo más seguro posible.
Por lo tanto, solo os recomendamos hacer uso de estos trucos cuando, tras instalar una actualización, tengamos problemas. De lo contrario, mejor usar el último Kernel disponible.
Cuando bajamos una actualización del Kernel de Linux, el sistema realiza unas tareas básicas de configuración para ponerlo en marcha. Normalmente, suele compilarlo y configurarlo para funcionar con nuestro hardware y suele lanzar una configuración del gestor de arranque (GRUB) para que, la próxima vez que arranquemos el sistema, carguemos por defecto esta última versión.
Pero no elimina por defecto las versiones antiguas de los núcleos, sino que todas ellas se suelen guardar en el disco duro. Y, además, quedan registradas en GRUB para poder arrancar desde cualquiera de ellas en caso de necesitar abrir una versión antigua.
Para entrar a estas versiones antiguas, lo que debemos hacer es seleccionar la entrada «Advanced Options» dentro del menú de arranque de GRUB, y aquí veremos todas estas versiones antiguas. En caso de que no aparezca el gestor de arranque, porque tengamos configurado un arranque automático, podemos mostrarlo manteniendo pulsada la tecla Shift mientras enciende el PC.
En este apartado podremos encontrar, al menos, dos núcleos diferentes: la última instalada, en modo normal, y la última en modo recuperación. Cuanto más tiempo llevemos con el sistema instalado, más entradas podremos encontrar de cada una de las versiones que se han instalado.
Simplemente debemos usar las flechas del teclado para seleccionar la versión del Kernel que queremos arrancar, y pulsar Enter. En lugar de arrancar el sistema con el núcleo por defecto, lo hará usando la versión elegida de este.
Cambiar el núcleo de arranque por defecto
Cuando instalamos una nueva versión del núcleo de Linux, esta se configura como la versión principal, para arrancar por defecto, y deja las demás versiones en segundo lugar dentro del apartado «Advanced Options«. Lo que no podemos hacer es, cada vez que encendemos el PC, estar pendientes de GRUB para elegir la versión diferente. Por ello, si no queremos usar la última, y queremos usar otra versión concreta del núcleo, tendremos que cambiarlo a mano.
Podemos echar mano de un programa llamado «Grub Customizer», el cual podemos instalar con los siguientes comandos:
sudo add-apt-repository ppa:danielrichter2007/grub-customizer
sudo apt-get update
sudo apt-get install grub-customizer
Y, una vez abierto, podremos ver toda la lista de entradas registradas en este arranque.
Lo que tenemos que hacer es, simplemente, elegir la versión que queramos arrancar como predeterminada desde este programa. También podemos organizar estas entradas como queramos, eliminando las que no queramos que aparezcan en el arranque y colocando, fuera del grupo «Advanced Option», las que queramos tener más a mano.
Eliminar núcleos obsoletos o corruptos
Cuando nuestra distro Linux baja una actualización del Kernel, esta no baja solo las partes que han cambiado, sino que baja de nuevo el núcleo completo en el sistema, y lo instala completo. Además, para evitar problemas, deja todas las versiones antiguas del mismo guardadas en el disco duro de manera que, si la nueva versión no funciona correctamente, podamos arrancar una versión anterior del núcleo desde el menú de arranque de GRUB.
Da igual las versiones del núcleo que tengamos guardadas, ya que solo vamos a arrancar una de ellas y a trabajar de ellas. Para cambiar de núcleo hay que reiniciar el sistema. Por tanto, tener varias versiones no afectará al rendimiento del SO, aunque sí que afectará, notablemente, al espacio libre que tengamos en el disco duro.
Por tanto, como parte del mantenimiento esencial de este sistema operativo, es recomendable eliminar todas las versiones antiguas y que no usemos para tener la mayor cantidad de espacio libre disponible. Así es como se hace.
Cómo ver todos los Kernel instalados en Linux
Lo primero que vamos a hacer es ver todos los núcleos que tenemos guardados en nuestro ordenador. Esto nos permitirá hacernos una idea de cuántas versiones de Linux diferentes tenemos y por dónde empezar a borrar.
Para ello, lo único que debemos hacer es abrir un terminal y ejecutar en él el siguiente comando:
dpkg --list | grep linux-image
Como veremos, nos aparecerá una lista completa con todos los núcleos.
En nuestro caso, tenemos 4 núcleos diferentes instalados en Ubuntu. Lo normal es que estemos usando el más nuevo, es decir, en nuestro caso «linux-image-5.8.0-48-generic«. Pero podemos comprobarlo fácilmente ejecutando el comando:
uname -r
Ya sabemos cuál es el Kernel que estamos usando a diario. Y si no tenemos problemas, todo lo demás sobra, y podemos eliminarlo. No debemos preocuparnos, ya que en caso de necesitar en el futuro instalar otra versión concreta podremos hacerlo.
Eliminar núcleos a mano desde Linux
Hay varias formas de eliminar los núcleos de Linux que no usemos. La más básica, manual y segura es hacerlo mediante «sudo apt purge». Este comando se utiliza principalmente para eliminar programas y paquetes que ya no queremos tener en nuestro sistema. Por lo tanto, si lo vinculamos a un núcleo, podremos eliminarlo sin problemas.
Así, para eliminar uno de los núcleos simplemente debemos ejecutar este comando, seguido del nombre del núcleo que queremos borrar (nombre que hemos visto ya en el punto anterior). En nuestro caso, para eliminar el 5.8.0-44 ejecutaremos:
sudo apt purge linux-image-5.8.0-44-generic
Ahora repetiremos el proceso para todos los demás núcleos que queramos eliminar de nuestro sistema. Debemos asegurarnos de dejar uno al menos instalado, ya que si no no podremos iniciar el sistema, y entonces tendremos un problema.
Una vez terminemos, podemos comprobar que solo tenemos un Kernel instalado ejecutando el comando del primer apartado.
Eliminar Kernel antiguos y componentes no utilizados
El método anterior nos brinda mucho control y nos ayuda a evitar errores al ser un proceso que debemos realizar a mano. Sin embargo, es una tarea bastante tediosa y muchos usuarios prefieren buscar otras formas más automáticas y rápidas de hacer lo mismo.
Podemos aprovecharnos del parámetro «purge» del comando «apt» para eliminar de una pasara todos los núcleos que no utilizamos en la distro, así como de otros paquetes inutilizados en el sistema. Para ello, no tenemos más que ejecutar el siguiente comando en un terminal:
sudo apt --purge autoremove
Apt nos mostrará todas las versiones del Kernel Linux que tenemos instaladas en el ordenador y que, si nos parece bien, se eliminará. Además, también podremos ver otros paquetes (como las actualizaciones de microcódigo) que forman parte del sistema, que no son necesarias y que se van a eliminar también.
Comprobamos todo bien (el Kernel que estamos usando debería estar ignorado), confirmamos con la letra S y dejamos que el programa haga lo suyo. Cuando acabe, ya habremos eliminado unos cuantos cientos de megas.
Eliminar Kernel viejos en distros concretas
En el caso de Ubuntu, y otras distros basadas en ella, debemos ver la lista de los núcleos instalados ejecutando en la consola el siguiente comando:
apt list --installed | grep linux-image
En esta lista veremos todas las versiones del Kernel instaladas.
Ahora, lo que haremos será apuntar el nombre del núcleo, hasta la barra / que aparece, y ejecutar el siguiente comando para borrar dicho núcleo:
sudo apt remove [nombre_kernel]
Confirmamos la eliminación, y esperamos a que se complete el proceso. Tendremos que repetirlo todas las veces que queramos, una por cada núcleo que queramos eliminar.
En el caso de las distros basadas en Arch, tendremos que eliminar estos núcleos de forma similar, pero usando el gestor de paquetes Pacman de la siguiente manera:
sudo pacman -S kernel-name=x.x.x kernel-name-headers=x.x.x
Igual que en Fedora, tendremos que hacerlo con RPM:
rpm -qa kernel-core
sudo dnf remove kernel-core-x.x.x-xxx.fcxx.x86_64
En último lugar, el que más fácil nos lo pone es Linux Mint. Esta distro, basada en Ubuntu, viene de serie con una serie de herramientas pensadas para facilitar la vida a los usuarios. Y, entre ellas, la más interesante es el gestor de actualizaciones del sistema operativo. Dentro de este gestor de actualizaciones encontraremos un apartado especialmente diseñado para configurar los núcleos, elegir el que queremos usar, y eliminar los que no vayamos a utilizar.
Actualizar el GRUB
Independientemente del método que hayamos usado, es importante actualizar el GRUB para acabar. Esto se debe a que, como hemos explicado, el gestor de arranque guarda una copia de todos los núcleos para permitirnos arrancar en otra versión desde sus opciones avanzadas. La opción por defecto cargará el núcleo principal, pero las otras opciones seguirán estando ahí.
Para actualizarlo, y eliminar las referencias a las versiones que ya no usamos, simplemente ejecutaremos el siguiente comando en un terminal:
sudo update-grub
Cuando acabe, podremos reiniciar el ordenador, entrar en GRUB mientras carga y ver como no tenemos más núcleos antiguos.
Qué hacer si se han borrado todos los Kernel
Hemos indicado que es importante asegurarnos de dejar al menos un núcleo, el más actualizado, para poder arrancar. Pero no seremos ni los primeros ni los últimos que, por despiste, los hemos eliminado todos. Y ahora la distro no arranca. ¿Qué podemos hacer?
Si tenemos ya cierto nivel de conocimientos vamos a poder recuperar nuestro Linux sin tener que formatear. Para ello, lo primero que haremos será bajar la ISO de Ubuntu, arrancar el sistema Live, montar el disco duro o partición donde teníamos instalado el sistema, y empezar a trabajar con él usando el comando «chroot».
Una vez tengamos control sobre el terminal de nuestro agonizante Linux, debemos ejecutar el siguiente comando para instalar la versión genérica del núcleo:
apt-get install linux-image-generic
Actualizamos GRUB de nuevo y listo. Cerramos, reiniciamos el ordenador y listo. Eso sí, si al arrancar seguimos entrando a memtest, entonces debemos ejecutar este comando para reconfigurar el sistema:
dpkg --configure -a[<code]
¿El Kernel es el sistema operativo?
El Kernel es una de las partes más importantes del sistema operativo. Pero no es la única necesaria para poder denominar a Linux, hoy en día, un sistema operativo como tal. Como hemos explicado, este núcleo tiene todos los controladores y todo lo necesario para poder controlar el software y permisos al usuario acceder a él. Pero, para que sea realmente útil, debe tener otros componentes por encima de él antes de llegar al usuario.
- Controlador de demonios. Ya sea Init.d, Systemd, o cualquier otro software similar, es necesario tener un subsistema por encima del núcleo que se encargue de arrancar todos los procesos (daemons) necesarios para que el Kernel empiece a funcionar. Sin él no tenemos más que muchas líneas de código que no se ejecutan.
- Los procesos. Los daemons, demonios, o más conocidos como procesos, son todos los componentes que se quedan cargados en la memoria del sistema (controlados por el kernel) y que permiten a Linux funcionar. El servidor gráfico, por ejemplo, es el demonio que controlará el escritorio.
- Servidor gráfico. Conocido como X, es el encargado de poder ver los gráficos en la pantalla. Si vamos a usar Linux en modo texto, desde terminal, no es necesario. Pero si lo vamos a usar con escritorio, es necesario tener un x-server funcionando.
- Escritorio. Como su nombre indica, el escritorio del ordenador, donde tendremos todos nuestros programas y donde se abrirán las ventanas. Hay muchos escritorios para Linux, como GNOME, KDE o LXDE. Cada uno con unas características, ventajas e inconvenientes propios.
- Programas. Todo lo que ejecutemos desde el escritorio. Ya es la capa más elevada, y el punto a través del cual interactuamos con el ordenador.
Cuando el Kernel, y todo lo demás, funciona en concordancia, es cuando podemos hablar de sistema operativo. O lo que es lo mismo, de distribución Linux.