sábado, 12 de enero de 2008

Entendiendo el kernel

Cuando uno entra en el mundillo del software libre y lo hace de la mano de Linux se encontrará con una palabreja que se puede leer y escuchar en todos los canales de información: kernel. Por degeneración del lenguaje decimos que Linux es un SO pero nos equivocamos, Linux es el kernel de un sistema operativo. El SO es GNU/Linux y Ubuntu, Red Hat, Suse y demás son distribuciones de GNU que usan de kernel a Linux. Otros núcleos son XNU (el kernel de Mac OS) o GNU Hurd (que está incompleto), por ejemplo.

¿Y qué es el kernel?

El núcleo de un sistema operativo es la base por la que un ordenador funciona, hablando poco y pronto. Sus funciones más básicas son:
  • conecta el hardware con el software, es decir, administra los dispositivos y les enlaza con el sistema para que nosotros podamos utilizarlos.
  • distribuye y gestiona la memoria que se le asigna a cada proceso del sistema, al igual que determina qué proceso se ejecuta en qué momento y por cuanto tiempo.
Es lo que en la jerga informática se llama gestión de memoria y gestión de procesamiento. Es decir, un kernel es un gobierno del computador. Sin él no sería nada.

Todo lo demás que pueda integrar un SO son programas de aplicaciones, servidores o daemons. Se suele decir que el kernel es el SO en sí; si entendemos que un ordenador está compuesto por hardware, software y datos, el kernel es el pegamento que une y proporciona mecanismos a esos tres componentes para desempeñar tareas útiles.

Por tanto es importante saber que el núcleo de nuestro sistema operativo (en este caso Linux, en Mac será XNU) es la parte más importante de nuestro sistema. Hay que cuidarlo y tratarlo con cariño.

¿Y los números del kernel qué significan?

Voy a poner una pequeña guía para entender los números de versiones del kernel linux, pues es normal no entender absolutamente nada. En mi caso yo tengo corriendo el kernel 2.6.22-14.46-generic.

Antes de nada decir que generic indica que es la versión genérica para todos los chips que el kernel soporta (x86, x86_64, Sparc, Mips...). La versión del kernel, como podemos ver, se divide actualmente en cuatro números, digamos AA.BB.CC.DD. Esos números denotan versiones, revisiones y otras cosas. Pero para entender por qué son cuatro números tenemos que entender lo que había antes.

Hasta la salida del kernel 2.6 (2003) el modelo de desarrollo era diferente y la numeración de versiones se hacía con tres dígitos, no cuatro. Existían dos líneas de desarrollo:
  • estable: así se denotaba a las líneas de producción que tenían totalmente testeadas las funciones del sistema y que servían para el uso cotidiano del SO.
  • de desarrollo: estas eran las versiones que partiendo de la estable incluían nuevas características aún inestables; es decir, las que usaban los desarrolladores para poder probar sus creaciones.
Así, la versión del kernel se dividía en AA.BB.CC.
  • AA: el primer número es el número de serie del kernel en sí. Sólo hay dos, la 1 (1994) y la 2 (1996). Denotan cambios muy radicales en el planteamiento del kernel, y como veis desde hace más de diez años no ha habido.
  • BB: indica la versión y el tipo de la misma. Si era par era estable, si era impar era de desarrollo.
  • CC: revisión dentro de la versión, para superar fallos de programación, normalmente.
Por tanto, como ejemplo, podemos decir que la 1.3.5 era la versión 1, de desarrollo y con cinco revisiones a su programación.

A partir de la 2.6, se prefirió (Linus Torvalds prefirió) cambiar el tipo de numeración e incluir otro número más, por lo que la versión ahora se numera con el formato AA.BB.CC.DD y con un nuevo significado:
  • AA: sigue siendo lo mismo, la serie principal del núcleo.
  • BB: versión. Ya no hay impares ni pares, todas son lo mismo.
  • CC: revisiones menores dentro de la versión, que suelen ser adiciones de nuevas funcionalidades, como nuevos controladores de dispositivos.
  • DD: son las correcciones a la versión (BB) concernientes a problemas de seguridad o fallos de programación.
Observamos pues que en la actualidad se separan las revisiones para nuevas funcionalidades (CC) y solución de problemas (DD).

Pero aquí no acaba la cosa. Dado que hay infinidad de distribuciones se adoptó una manera de trabajar diferente. Ahora es cada casa la que distribuye su distribución con un núcleo estable, ella es la encargada de proveérnoslo por el canal específico (los repositorios) a partir de la última versión estable que Linus Torvalds y su equipo de desarrollo saca, la llamada vanilla.

La última versión vanilla a día de hoy es la 2.6.23.13, que podéis descargar sin alteraciones por parte de ninguna distribución desde la web oficial del kernel, The Linux Kernel Archives.

Por tanto hemos de entender que el kernel Linux no es lo que nosotros tenemos en casa realmente, pues éso son las distribuciones de software libre (adheridas normalmente al proyecto GNU) que usan como kernel a Linux. Hay otras distribuciones de software libre que usan otro kernel y se adhieren a otras licencias, como la BSD, de la que ya hablaré, pues tengo en mente poner una distribución de este tipo como tercer SO en el equipo. Pero con tiempo ;)

No hay comentarios: