El núcleo Linux es un núcleo de sistema operativo tipo Unix, monolítico, modular y multitarea. Linux es software libre y de código abierto. Fue originalmente escrito en 1991 por Linus Torvalds para su PC basada en i386, y pronto fue adoptado como el núcleo para el sistema operativo GNU/Linux, que fue creado como un reemplazo libre para Unix.
Linux se proporciona bajo la Licencia Pública General de GNU versión 2, pero contiene archivos bajo otras licencias compatibles. Desde finales de la década de 1990, ha sido incluido como parte de un gran número de distribuciones de sistemas operativos, muchas de las cuales también se denominan comúnmente Linux.
Linux se despliega en una amplia variedad de sistemas informáticos, como sistemas embebidos, dispositivos móviles (incluido su uso en el sistema operativo Android), computadoras personales, servidores, mainframes y supercomputadoras.
Puede ser adaptado para arquitecturas específicas y para varios escenarios de uso utilizando una familia de comandos simples (es decir, sin necesidad de editar manualmente su código fuente antes de la compilación). Usuarios con privilegios también pueden ajustar los parámetros del núcleo en tiempo de ejecución. La mayor parte del código del núcleo de Linux está escrito utilizando las extensiones de GNU del GCC al estándar lenguaje de programación C y con el uso de instrucciones específicas de la arquitectura (ISA) en partes limitadas del núcleo. Esto produce un ejecutable altamente optimizado (vmlinux) con respecto a la utilización del espacio de memoria y los tiempos de ejecución de tareas.
Las discusiones de desarrollo cotidianas tienen lugar en la Linux kernel mailing list (LKML). Los cambios se rastrean utilizando el sistema de control de versiones git, que fue originalmente creado por Torvalds como un reemplazo de software libre para BitKeeper.
Características
En el archivo Léeme de Linux se indica que es un clon del sistema operativo Unix. Sin embargo, Linux es un núcleo semejante al núcleo de un sistema operativo Unix. De hecho, inicialmente se publicó como núcleo semejante a Minix, que a su vez era semejante a Unix, pero con una concepción de micronúcleo en vez de monolítica.
Un micronúcleo contiene una funcionalidad mínima en comparación con un núcleo monolítico tradicional. Darwin y GNU Hurd tienen núcleos que son una versión de Mach. Minix, sistema operativo en el que se basó inicialmente Linux, también es micronúcleo. Todos ellos tienen en común el traslado de parte de la funcionalidad en espacio privilegiado a espacio de usuario.
La parte de un sistema operativo que se ejecuta sin privilegios o en espacio de usuario es la biblioteca del lenguaje C, que provee el entorno de tiempo de ejecución, y una serie de programas o herramientas que permiten la administración y uso del núcleo y proveer servicios al resto de programas en espacio de usuario, formando junto con el núcleo el sistema operativo.
En un sistema con núcleo monolítico como Linux la biblioteca de lenguaje C consiste en una abstracción de acceso al núcleo. Algunas bibliotecas como la biblioteca de GNU proveen funcionalidad adicional para facilitar la vida del programador y usuario o mejorar el rendimiento de los programas.
En un sistema con micronúcleo la biblioteca de lenguaje C puede gestionar sistemas de archivos o controladores además del acceso al núcleo del sistema.
A los sistemas operativos que llevan Linux se les llama de forma genérica distribuciones Linux. Estas consisten en una recopilación de software que incluyen el núcleo Linux y el resto de programas necesarios para completar un sistema operativo. Las distribuciones más comunes son de hecho distribuciones GNU/Linux o distribuciones Android. El hecho de que compartan núcleo no significa que sean compatibles entre sí. Una aplicación hecha para GNU/Linux no es compatible con Android sin la labor adicional necesaria para que sea multiplataforma.
Las distribuciones GNU/Linux usan Linux como núcleo junto con el entorno de tiempo de ejecución del Proyecto GNU y una serie de programas y herramientas del mismo que garantizan un sistema funcional mínimo. La mayoría de distribuciones GNU/Linux incluye software adicional como entornos gráficos o navegadores web así como los programas necesarios para permitirse instalar a sí mismas. Los programas de instalación son aportados por el desarrollador de la distribución. Se les conoce como gestores de paquetes. Los creadores de una distribución también se pueden encargar de añadir configuraciones iniciales de los distintos programas incluidos en la distribución.
Las distribuciones Android incluyen el núcleo Linux junto con el entorno de ejecución y herramientas del proyecto AOSP de Google. Cada fabricante de teléfonos dispone de su propia distribución de Android a la cual modifica, elimina o añade programas extra: interfaces gráficas, tiendas de aplicaciones y clientes de correo electrónico son algunos ejemplos de programas susceptibles de ser añadidos, modificados o eliminados. Además de las distribuciones de los fabricantes de teléfonos existen grupos de programadores independientes que también desarrollan distribuciones de Android. LineageOS (antes CyanogenMod), Replicant y Pixel Experience son tres ejemplos de distribuciones Android independientes también llamadas custom "ROMs" o firmwares no oficiales.
Historia
thumb|Notas de publicación de Linux 0.01 En abril de 1991, Linus Torvalds, de 21 años, empezó a trabajar en unas simples ideas para un núcleo de un sistema operativo. Comenzó intentando obtener un núcleo de sistema operativo gratuito similar a Unix que funcionara con microprocesadores Intel 80386. Para ello tomó como base al sistema Minix (un clon de Unix) e hizo un núcleo monolítico compatible que inicialmente requería software de Minix para funcionar. El 26 de agosto de 1991 Torvalds escribió en el grupo de noticias comp.os.minix:Linus Torvalds (25-08-1991) Message from discussion What would you like to see most in minix? Newsgroups: comp.os.minix, Google Groups (en inglés).
Dicho mensaje despertó mucho interés en la comunidad computacional universitaria. En septiembre de 1991 Linux liberó la versión 0.01 del kernel Linux. Tenía 10.239 líneas de código con el que muchas personas quisieron colaborar. El 5 de octubre de ese año (1991), salió la versión 0.02 del kernel, primera versión "oficial" y utilizable que ya corría herramientas básicas como bash, gcc, make, sed, compress, etc.. Luego, en diciembre se lanzó la versión 0.11(1991). Esta versión fue la primera en ser self-hosted (autoalbergada). Es decir, Linux 0.11 podía ser compilado por una computadora que ejecutase Linux 0.11, mientras que las versiones anteriores de Linux se compilaban usando otros sistemas operativos. Cuando lanzó la siguiente versión, Torvalds adoptó la GPL como su propio boceto de licencia, la cual no permite su redistribución con otra licencia que no sea GPL. Antes de este cambio, se impedía el cobro por la distribución del código fuente.
Se inició un grupo de noticias llamado alt.os.linux y el 19 de enero de 1992 se publicó en ese grupo la primera publicación (post). El 31 de marzo, alt.os.linux se convirtió en comp.os.linux. XFree86, una implementación del X Window System, fue portada a Linux, la versión del núcleo 0.95 fue la primera en ser capaz de ejecutarla. Este gran salto de versiones (de 0.1x a 0.9x) fue por la sensación de que una versión 1.0 acabada no parecía estar lejos. Sin embargo, estas previsiones resultaron ser un poco optimistas: desde 1993 hasta principios de 1994 se desarrollaron 15 versiones diferentes de 0.99 (llegando a la versión 0.99r15).
El 14 de marzo de 1994, salió Linux 1.0.0, que constaba de 176.250 líneas de código. En marzo de 1995 se lanzó Linux 1.2.0, que ya estaba compuesto de 310.950 líneas de código.
Cronología
Desarrolladores principales
Posición 2012 The Linux Foundation Releases Annual Linux Development Report 2013 2017https://www.linuxfoundation.org/publications/2017/10/2017-state-of-linux-kernel-development/ 1 Red Hat Google Intel 2 IBM Linaro Red Hat 3 Texas Instruments SUSE Linaro 4 Broadcom IBM Desconocido 5 Nokia Samsung IBM 6 Samsung Red Hat Consultants 7 Oracle Vision Engraving Systems Consultants Samsung 8 Google Wolfson Microelectronics SUSE
Aspectos técnicos Linux provee controladores, planificadores, gestores de memoria virtual, sistemas de archivos y protocolos de red como IPv4 e IPv6. Además está disponible para múltiples arquitecturas hardware y está diseñado de manera que se facilite su portabilidad a arquitecturas nuevas.
Arquitectura 200px|thumb|Diagrama del núcleo 2.4.0.
Actualmente Linux es un núcleo monolítico híbrido. Los controladores de dispositivos y las extensiones del núcleo normalmente se ejecutan en un espacio privilegiado conocido como anillo 0 (ring 0), con acceso irrestricto al hardware, aunque algunos se ejecutan en espacio de usuario. A diferencia de los núcleos monolíticos tradicionales, los controladores de dispositivos y las extensiones al núcleo se pueden cargar y descargar fácilmente como módulos, mientras el sistema continúa funcionando sin interrupciones. A diferencia de los núcleos monolíticos tradicionales, los controladores también pueden ser pre-volcados (detenidos momentáneamente por actividades más importantes) bajo ciertas condiciones. Esta habilidad fue agregada para gestionar correctamente interrupciones de hardware y para mejorar el soporte de multiprocesamiento simétrico.
El hecho de que Linux no fuera desarrollado siguiendo el diseño de un micronúcleo (diseño que, en aquella época, era considerado el más apropiado para un núcleo por muchos teóricos informáticos), fue motivo de una famosa y acalorada discusión entre Linus Torvalds y Andrew S. Tanenbaum.GNU/Linux Kernel Híbrido (en español)Resumen de la afamada discusión entre Linus Torvalds y Andrew Tanenbaum (en inglés)
Arquitectura de máquina virtual El núcleo Linux puede correr sobre muchas arquitecturas de máquina virtual, tanto como host del sistema operativo o como cliente. La máquina virtual usualmente emula la familia de procesadores Intel x86, aunque en algunos casos también son emulados procesadores de PowerPC o ARM.
Depuración
Para verificar el correcto funcionamiento del núcleo este provee la posibilidad de compilarse contra la arquitectura ficticia bajo «User Mode Linux» (UML). Compilando Linux para UML el núcleo pasa a ejecutarse como un proceso más de usuario ejecutándose en el núcleo Linux del sistema anfitrión. También puede servir como virtualización o para aislar procesos, entre otros usos.
Formatos binarios soportados Linux 1.0 admitía solo el formato binario a.out. La siguiente serie estable (Linux 1.2) agregó la utilización del formato ELF, el cual simplifica la creación de bibliotecas compartidas (usadas de forma extensa por los actuales ambientes de escritorio como GNOME y KDE). ELF es el formato usado de forma predeterminada por el GCC desde alrededor de la versión 2.6.0. El formato a.out actualmente no es usado, convirtiendo a ELF en el formato binario utilizado por Linux en la actualidad.
Linux tiene la capacidad de permitir al usuario añadir el manejo de otros formatos binarios. También binfmt_misc permite correr el programa asociado a un archivo de datos.
Jerarquía de directorios