Para o sistema operativo libre composto principalmente polo núcleo Linux e GNU, véxase GNU/Linux. miniatura|300px|Núcleo Linux Linux é un núcleo libre de sistema operativo baseado en Unix. É un dos principais exemplos de software libre e de código aberto. Linux está licenciado baixo a GPL v2 e está desenvolvido por colaboradores de todo o mundo. O desenvolvemento do día a día ten lugar na Linux Kernel Mailing List Arquive

O núcleo Linux foi concibido polo entón estudante de ciencias da computación finlandés, Linus Torvalds, en 1991. Linux conseguiu rapidamente desenvolvedores e usuarios que adoptaron códigos doutros proxectos de software libre para usalo co novo sistema operativo. O núcleo Linux recibiu contribucións de miles de programadores de todo o mundo. Normalmente Linux utilízase xunto a un empaquetado de software, chamado distribución Linux e servidores.

Historia En abril de 1991, Linus Torvalds, de 21 anos, empezou a traballar nunhas simples ideas para un núcleo dun sistema operativo. Comezou cun intento por obter un núcleo de sistema operativo gratuíto similar a Unix que funcionase con microprocesadores Intel 80386. Logo, o 25 de agosto de 1991, Torvalds escribiu no grupo de noticias comp.vos.minix:Linus Torvalds (25-08-1991) Message from discussion What would you like to see most in minix? Newsgroups: comp.vos.minix, Google Groups (en inglés).

Despois disto, moitas persoas axudaron co código. En setembro de 1991 lanzouse a versión 0.01 de Linux. Tiña 10.239 liñas de código. En outubro dese ano(1991), lanzouse a versión 0.02 de Linux; logo, en decembro lanzouse a versión 0.11(1991). Esta versión foi a primeira en ser self-hosted (autoalbergada). É dicir, Linux 0.11 podía ser compilado por unha computadora que executase Linux 0.11, mentres que as versións anteriores de Linux se compilaban usando outros sistemas operativos. Cando lanzou a seguinte versión, Torvalds adoptou a GPL como o seu propio bosquexo de licenza, a cal non permitía a súa redistribución con outra licenza que non sexa GPL.

Iniciouse un grupo de noticias chamado alt.vos.linux e o 19 de xaneiro de 1992 publicouse nese grupo o primeiro post. O 31 de marzo, alt.vos.linux converteuse en comp.vos.linux. XFree86, unha implementación do X Window System, foi portada a Linux, a versión do núcleo 0.95 foi a primeira en ser capaz de executala. Este gran salto de versións (de 0.1x a 0.9x) foi pola sensación de que unha versión 1.0 acabada non parecía estar lonxe. Con todo, estas previsións resultaron ser un pouco optimistas: desde 1993 a principios de 1994, desenvolvéronse 15 versións diferentes de 0.99 (chegando á versión 0.99r15).

O 14 de marzo de 1994, lanzouse Linux 1.0.0, que constaba de 176.250 liñas de código. En marzo de 1995 lanzouse Linux 1.2.0, que xa estaba composto de 310.950 liñas de código.

Maio de 1996: Torvalds decidiu adoptar ao pingüín Tux como mascota para Linux. 9 de xuño de 1996: Lanzouse a versión 2 de Linux, cunha recepción positiva. 25 de xaneiro de 1999: Lanzouse Linux 2.2.0 con 1.800.847 liñas de código. 18 de decembro de 1999: publicáronse parches de IBM Mainframe para 2.2.13, permitindo desta forma que Linux fose usado en computadores corporativos. 4 de xaneiro de 2001: lanzouse Linux 2.4.0 con 3.377.902 liñas de código. 17 de decembro de 2003: lanzouse Linux 2.6.0 con 5.929.913 liñas de código. 24 de decembro de 2008: lanzouse Linux 2.6.28 con 10.195.402 liñas de código."Linux Kernel Data 2.6.28." 20 de outubro de 2010: lanzouse Linux 2.6.36 con 13.499.457 liñas de código."Linux Kernel Data 2.6.36." 30 de maio de 2011: Linus Torvalds anunciou que a versión do núcleo dará o salto á 3.0 na seguinte publicación. 21 de xullo de 2011: Torvalds publicou no seu perfil na rede social Google+ que o núcleo versión 3.0 estaba listo coa frase "3.0 Pushed Out". 22 de xullo de 2011: Foi lanzada a versión 3.0 do núcleo en http://www.kernel.org 12 de maio e 13 de maio de 2012 foron lanzadas as versións 3.3.6 e 3.4-rc7 do núcleo en http://www.kernel.org respectivamente.

O seu código fonte está dispoñible para descarga no sitio web oficial: http://www.kernel.org

Aspectos técnicos

Arquitecturas 200px|miniatura|Diagrama do núcleo 2.4.0. Actualmente Linux é un núcleo monolítico híbrido. Os controladores de dispositivos e as extensións do núcleo normalmente execútanse nun espazo privilexiado coñecido como anel 0 (ring 0), con acceso irrestricto ao hardware, aínda que algúns se executan en espazo de usuario. A diferenza dos núcleos monolíticos tradicionais, os controladores de dispositivos e as extensións ao núcleo pódense cargar e descargar facilmente como módulos, mentres o sistema continúa funcionando sen interrupcións. Tamén, a diferenza dos núcleos monolíticos tradicionais, os controladores poden ser prevolcados (detidos momentaneamente por actividades máis importantes) baixo certas condicións. Esta habilidade foi agregada para xestionar correctamente interrupcións de hardware, e para mellorar o soporte de multiprocesamiento simétrico.

O feito de que Linux non fose desenvolvido seguindo o deseño dun micronúcleo (deseño que, naquela época, era considerado o máis apropiado para un núcleo por moitos teóricos informáticos) foi asunto dunha famosa e acalorada discusión entre Linus Torvalds e Andrew S. Tanenbaum.GNU/Linux Kernel Híbrido (en español)Resumo da afamada discusión entre Linus Torvalds e Andrew Tanenbaum (en inglés)

Xerarquía de directorios En Linux existe un sistema de arquivos que carga e contén todos os directorios, redes, programas, particiones, dispositivos etc. que o sistema sabe recoñecer, ou polo menos, identificar. Este sistema de ficheiros e directorios, ten como base ao carácter (/); ese mesmo carácter serve tamén para demarcar os directorios, por exemplo: "/home/usuario/imaxe.jpg". O directorio especificado por unha ruta consistente só por este carácter contén toda a xerarquía dos directorios que constitúen todo o sistema. A este directorio adoita chamarllo directorio raíz. En Linux, aos discos non se lles asigna unha letra como en Windows (p.e. "C:"), senón que se lles asigna un directorio da xerarquía do directorio raíz (/), por exemplo: "/media/floppy". É práctica común no sistema de ficheiros de Linux, utilizar varias sub-xerarquías de directorios, segundo as diferentes funcións e estilos de utilización dos arquivos.Organización dos directorios en Linux Estes directorios poden clasificarse en: Estáticos: Contén arquivos que non cambian sen a intervención do administrador (root), con todo, poden ser lidos por calquera outro usuario. (/bin, /sbin, /opt, /boot, /usr/bin...) Dinámicos: Contén arquivos que son cambiantes, e poden lerse e escribirse (algúns só polo seu respectivo usuario e o root). Conteñen configuracións, documentos etc. Para estes directorios, é recomendable unha copia de seguridade con frecuencia, ou mellor aínda, deberían ser montados nunha partición á parte no mesmo disco, por exemplo, montar o directorio /home noutra partición do mesmo disco, independente da partición principal do sistema; desta forma, pode repararse o sistema sen afectar ou borrar os documentos dos usuarios. (/var/mail, /var/spool, /var/run, /var/lock, /home...) Compartidos: Contén arquivos que se poden atopar nun computador e utilizarse noutro, ou mesmo compartirse entre usuarios. Restrinxidos: Contén ficheiros que non se poden compartir, só son modificables polo administrador. (/etc, /boot, /var/run, /var/lock...)

Kernel panic

miniatura|Kernel panic. En Linux, un panic é un erro case sempre insalvable do sistema detectado polo núcleo en oposición aos erros similares detectados no código do espazo de usuario. É posible para o código do núcleo indicar estas condicións mediante unha chamada á función de pánico situada no arquivo header sys/system.h. Con todo, a maioría das alertas son o resultado de excepcións no código do núcleo que o procesador non pode manexar, como referencias a direccións de memorias inválidas. Xeralmente isto é indicador da existencia dun bug nalgún lugar da cadea de alerta. Tamén poden indicar un fallo no hardware como un fallo da RAM ou erros nas funcións aritméticas no procesador, ou por un erro no software. En moitas ocasións é posible reiniciar ou apagar adecuadamente o núcleo mediante unha combinación de teclas como ALT+SysRq+REISUB.

Linguaxes de programación Linux está escrito na linguaxe de programación C, na variante utilizada polo compilador GCC (que introduciu un número de extensións e cambios ao C estándar), xunto a unhas pequenas seccións de código escritas co linguaxe ensamblador. Polo uso das súas extensións á linguaxe, GCC foi durante moito tempo o único compilador capaz de construír correctamente Linux. Con todo, Intel afirmou modificar o seu compilador C de forma que permitise compilarlo correctamente.

Así mesmo úsanse moitos outras linguaxes nalgunha forma, basicamente na conexión co proceso de construción do núcleo (o método a través do cal as imaxes arrancables son creadas desde o código fonte). Estes inclúen a Perl, Python e varias linguaxes shell scripting. Algúns drivers tamén poden ser escritos en C++, Fortran, ou outras linguaxes, pero isto non é aconsellable. O sistema de construción de Linux oficialmente só soporta GCC como núcleo e compilador de controlador.

Portabilidade miniatura|Ipod executando un núcleo Linux. Aínda cando Linus Torvalds non ideou orixinalmente Linux como un núcleo portable, evolucionou nesa dirección. Linux é agora de feito, un dos núcleos máis amplamente portados, e funciona en sistemas moi diversos que van desde iPAQ (unha handheld) até un zSeries (un mainframe masivo). Está planeado que Linux sexa o sistema operativo principal das novas supercomputadoras de IBM, Blue Gene cando o seu desenvolvemento complétese.

De todos os xeitos, é importante notar que os esforzos de Torvalds tamén estaban dirixidos a un tipo diferente de portabilidade. Segundo o seu punto de vista, a portabilidad é a habilidade de compilar facilmente nun sistema aplicacións das orixes máis diversas; así, a popularidade orixinal de Linux debeuse en parte ao pouco esforzo necesario para ter funcionando as aplicacións favoritas de todos, xa sexan GPL ou de Código aberto.

As arquitecturas principais soportadas por Linux son DEC Alpha, ARM, AVR32, Blackfin, ETRAX CRIS, FR-V, H8, IA64, M32R, m68k, MicroBlaze, MIPS, MN10300, PA-RISC, PowerPC, System/390, SuperH, SPARC, x86, x86 64 e Xtensa/pub/scm / linux/kernel/git/torvalds/linux-2.6.git / tree

Arquitectura de máquina virtual O núcleo Linux pode correr sobre moitas arquitecturas de máquina virtual, tanto como host do sistema operativo ou como cliente. A máquina virtual usualmente emula a familia de procesadores Intel x86, aínda que nalgúns casos tamén son emulados procesadores de PowerPC ou ARM.

Formatos binarios soportados Linux 1.0 admitía só o formato binario a.out. A seguinte serie estable (Linux 1.2) agregou a utilización do formato ELF, o cal simplifica a creación de bibliotecas compartidas (usadas de forma extensa polos actuais ambientes de escritorio como GNOME e KDE). ELF é o formato usado de forma predeterminada polo GCC desde ao redor da versión 2.6.0. O formato a.out actualmente non é usado, convertendo a ELF no formato binario utilizado por Linux na actualidade.

Linux ten a capacidade de permitir ao usuario engadir o manexo doutros formatos binarios. Tamén binfmt_misc permite correr o programa asociado a un arquivo de datos.

Versións Máis aló de desenvolver o seu propio código e de integrar os cambios realizados por outros programas, Linus Torvalds continua lanzando novas versións do núcleo Linux. Estes son chamados núcleos ?vanilla?, o que significa que non foron modificados por ninguén.

Numeración A versión do núcleo Linux orixinal constaba de catro números. Por exemplo, asumamos que o número da versión está composta desta forma: A.B.C[.D] (ex.: 2.2.1, 2.4.13 ó 2.6.12.3).