Núcleo Linux

:*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*:

''*

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.
* 20 de outubro de 2010: lanzouse Linux 2.6.36 con 13.499.457 liñas de código.
* 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.

### 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. 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 

### 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).

* O número **A** denota a versión do núcleo. É o que cambia con menor frecuencia e só faio cando se produce un gran cambio no código ou no concepto do núcleo. Historicamente só foi modificado tres veces: en 1994 (versión 1.0), en 1996 (versión 2.0) e en 2011 (versión 3.0).
* O número **B** denota a subversión do núcleo.

:Antes da serie de Linux 2.6.x, os números pares indicaban a versión ?estable? lanzada. Por exemplo unha para uso de fabricación, como o 1.2, 2.4 ó 2.6. Os números impares, en cambio, como a serie 2.5.x, son versións de desenvolvemento, é dicir que non son consideradas de produción.

:Comezando coa serie Linux 2.6.x, non hai gran diferenza entre os números pares ou impares con respecto ás novas ferramentas desenvolvidas na mesma serie do núcleo. Linus Torvalds ditaminou que este será o modelo no futuro.

* O número **C** indica unha revisión maior no núcleo. Na forma anterior de versións con tres números, isto foi cambiado cando se implementaron no núcleo os parches de seguridade, bugfixes, novas características ou drivers. Coa nova política, só é cambiado cando se introducen novos drivers ou características; cambios menores reflíctense no número **D**.
* O número **D** produciuse cando un grave erro, que require dun arranxo inmediato, atopouse no código NFS da versión 2.6.8. Con todo, non había outros cambios como para lanzar unha nova revisión (a cal fose 2.6.9). Entón lanzouse a versión 2.6.8.1, co erro arranxado como único cambio. Con 2.6.11, isto foi adoptado como a nova política de versións. Bug-fixes e parches de seguridade son actualmente manexados polo cuarto número deixando os cambios maiores para o número **C**.

Tamén, algunhas veces logo das versións pode haber algunhas letras como ?rc1? ou ?mm2?. O ?rc? refírese a release candidate e indica un lanzamento non oficial. Outras letras usualmente (pero non sempre) fan referencia ás iniciais da persoa. Isto indica unha bifurcación no desenvolvemento do núcleo realizado por esa persoa, por exemplo ck refírese a Con Kolivas, ac a Alan Cox, mentres que mm refírese a Andrew Morton.

O modelo de desenvolvemento para Linux 2.6 foi un cambio significativo desde o modelo de desenvolvemento de Linux 2.5. Previamente existía unha rama estable (2.4) onde se produciron cambios menores e seguros, e unha rama inestable (2.5) onde estaban permitidos cambios maiores. Isto significou que os usuarios sempre tiñan unha versión 2.4 a proba de fallos e co último en seguridade e case libre de erros, aínda que tivesen que esperar polas características da rama 2.5. A rama 2.5 foi eventualmente declarada estable e renombrada como 2.6. Pero no canto de abrir unha rama 2.7 inestable, os desenvolvedores de núcleos elixiron continuar agregando os cambios na rama ?estable? 2.6. Desta forma non había que seguir mantendo unha rama vella pero estable e podíase facer que as novas características estivesen rapidamente dispoñibles e puidésense realizar máis probas co último código.

Con todo, o modelo de desenvolvemento do novo 2.6 tamén significou que non había unha rama estable para aqueles que esperaban seguridade e bug fixes sen necesitar as últimas características. Os arranxos só estaban na última versión, así que se un usuario quería unha versión con todos os bug fixed coñecidos tamén tería as últimas características, as cales non foran ben probadas. Unha solución parcial para isto foi a versión xa mencionada de catro números (e en 2.6.x.e), a cal significaba lanzamentos puntuais creados polo equipo estable (Greg Kroah-Hartman, Chris Wright, e quizais outros). O *equipo estable* só lanzaba actualizacións para o núcleo máis recente, con todo isto non solucionou o problema do faltante dunha serie estable de núcleo. Distribuidores de Linux, como Red Hat e Debian, manteñen os núcleos que saen cos seus lanzamentos, de forma que unha solución para algunhas persoas é seguir o núcleo dunha distribución.

Como resposta á falta dun núcleo estable e de xente que coordinase a colección de corrección de erros, en decembro de 2005 Adrian Bunk anunciou que continuaría lanzando núcleos 2.6.16 aínda cando o *equipo estable* lanzase 2.6.17. Ademais pensou en incluír actualizacións de controladores, facendo que o mantemento da serie 2.6.16 sexa moi parecido ás vellas regras de mantemento para a serie estables como 2.4. O núcleo 2.6.16 será substituído proximamente polo 2.6.27 como núcleo estable en mantemento durante varios anos.

Dado o novo modelo de desenvolvemento, que mantén fixa a subversión de 2.6, tras durante o Linux Kernel Summit dese ano, Linus Torvalds decidiu modificar o sistema de numeración, substituíndo os dous primeiros números por unha única cifra, de forma que Linux 2.6.39 foi seguida por Linux 3.0&thinsp;

### Datas de publicación 
## Distribucións 
[miniatura|Sharp Zaurus, un [computador de peto con Linux.]]
Unha distribución Linux é un conxunto de software acompañado do núcleo Linux que se enfoca a satisfacer as necesidades dun grupo específico de usuarios. Deste xeito hai distribucións para fogares, empresas e servidores.

As distribucións son ensambladas por individuos, empresas ou outros organismos. Cada distribución pode incluír calquera número de software adicional, incluíndo software que facilite a instalación do sistema. A base do software incluído con cada distribución inclúe o núcleo Linux, na maioría dos casos as ferramentas GNU, ao que adoitan engadirse tamén multitude de paquetes de software.

As ferramentas que adoitan incluírse na distribución deste sistema operativo obtéñense de diversas fontes, e en especial de proxectos de software libre, como: GNU, GNOME (creado por GNU) e KDE. Tamén se inclúen utilidades doutros proxectos como Mozilla, Perl, Ruby, Python, PostgreSQL, MySQL, Xorg, case todas con licenza GPL ou compatibles con esta (LGPL, MPL).

Usualmente utilízase a plataforma X.Org Server, baseada na antiga XFree86, para soster a interface gráfica.

## Copyright 
Inicialmente, Torvalds distribuíu Linux baixo os termos dunha licenza que prohibía a explotación comercial. Pero esta licenza foi substituída, pouco tempo despois, pola GNU GPL (versión 2 exclusivamente). Os termos desta última licenza permiten a distribución e venda de copias ou mesmo modificacións, pero require que todas as copias do traballo orixinal e traballos de autoría derivados do orixinal sexan publicados baixo os mesmos termos, e que o código fonte sempre poida obterse polo mesmo medio que o programa licenciado.

Torvalds referiuse a licenciar Linux baixo a GPL como *"a mellor cousa que fixen"* (en inglés, *"the best thing I ever did"*).

Con todo, a versión oficial do núcleo Linux contén firmware de código pechado, por iso, o Proxecto Linux-libre, auspiciado pola FSFLA, publica e mantén versións modificadas do núcleo Linux ás que se lles quitou todo o software non libre.

## Marca 
A día de hoxe, *Linux* é unha marca rexistrada de Linus Torvalds nos Estados Unidos.

Até 1994 ninguén rexistrou a marca Linux nos Estados Unidos. O 15 de agosto de 1994 cando William R. Della Croce, Jr. rexistrou a marca *Linux'', pediu o pago de regalías aos distribuidores de Linux. En 1996, Torvalds e algunhas organizacións afectadas denunciaron a Della Croce e en 1997 o caso pechouse e a marca foi asignada a Torvalds.

Desde entón, o Linux Mark Institute xestiona a marca. En 2005 o LMI enviou algunhas cartas a empresas distribuidoras de Linux esixindo o pago dunha cota polo uso comercial do nome. Isto é así porque a lexislación estadounidense esixe que o dono dunha marca deféndaa, polo que se tivo que pedir diñeiro por usar a marca Linux, algunhas compañías de forma totalmente voluntaria cumpriron coa devandita esixencia, a propósito de que devandito diñeiro se ía a usar para caridade ou defender a marca Linux.

## Críticas 
### Soporte de hardware 
O núcleo Linux foi criticado con frecuencia por falta de controladores para certo hardware de computadoras de escritorio. Con todo, o progresivo incremento na adopción de Linux no escritorio mellorou o soporte de hardware por parte de terceiros ou dos propios fabricantes, provocando que, nos últimos anos, os problemas de compatibilidade redúzanse.

Empresas como IBM, Intel Corporation, Hewlett-Packard, Dell ou MIPS Technologies teñen programadores no equipo de desenvolvedores do núcleo Linux que se encargan de manter os controladores para o hardware que fabrican. Este grupo de programadores tamén se lle suman os que prové grandes distribuidores de solucións Linux como Novell ou Red Hat.

### Arquitectura monolítica 
Andy Tanenbaum escribiu o 29 de xaneiro de 1992:

## Notas 
## Véxase tamén 
### Outros artigos 
* GNU/Linux
### Ligazóns externas 
* Sitio web oficial de Linux
* Código fonte completo de varias versións de Linux
* Kernel Newbies