Linux

:*Para o sistema operativo libre composto principalmente polo kernel Linux e GNU, véxase GNU/Linux.*

[miniatura|[Tux (un pingüín) é a mascota oficial de Linux.]]
**Linux** é un kernel, ou núcleo, monolítico libre, inspirado en Unix, e que empregan os sistemas operativos GNU/Linux. Linux é un exemplo paradigmático de software libre no que contribúen centos de desenvolvedores e que ten soporte a longo prazo, de ata seis anos. Desenvólvese con git en github e debatendo en listas de correos, fundamentalmente na lista *Linux kernel mailing list* (LKML: "*lista de desenvolvemento do kernel de Linux*"). O kernel de Linux libérase coa licenza GPL v2.

A familia de sistemas GNU/Linux que empregan este kernel, e que se distribúen como distribucións GNU/Linux, engádenlle recursos ao kernel, como ferramentas de empaquetado de software, e distribúeno. As distribucións de GNU/Linux empréganse tanto en computadores persoais como en servidores; e está implementado para dispositivos como routers, puntos de acceso de rede sen fíos, sistemas de telefonía como a PBX, decodificador de televisión, FTA, smart TVs, gravadores de vídeo dixitais PVR ou sistema de almacenamento en rede NAS. Ademais, o sistema operativo Android, que está en tabletas e teléfonos e reloxos; usa os servizos que lle ofrece o kernel de Linux. Aínda que o uso no escritorio de Linux está arredor do 3%, Linux domina todos os demais usos de sistemas operativos: desde os dispositivos móbiles e televisión ás supercomputadoras. A comezos do 2018 Linux estaba presente en todos e cada un dos 500 supercomputadoras máis potentes do planeta. Pensouno para uso persoal e sen pensar en interaccións entre plataformas, mais axiña se popularizou o seu proxecto e adaptouse para múltiples arquitecturas de computadores, por riba de calquera outro sistema operativo ou kernel.

A API do kernel de Linux, é a interface para programar aplicacións (API) coa que os programas interactúan co kernel. Está deseñada para ser estable e non dar erros no contorno de aplicacións do usuario, como as aplicacións con interfaces gráficas (GUIs) ou as que dependen doutras aplicacións. É función do kernel controlar o hardware, polo que os principais dispositivos inténtanse que sexa implementados e estables. Porén, a interface entre o kernel e os módulos de carga do kernel (LKMs) son a parte que non está directamente pensada para ser a máis estable.

O kernel de Linux segue recibindo a contribución de miles de programadores e empresas de todo o mundo. En 2017 contribuíron no seu desenvolvemento máis de 15.600 desenvolvedores de máis de 1.400 empresas, o que supuxo o aumento nun ano de 4.300 de 500 empresas. As compañías aportan máis do 80% dos desenvolvedores do kernel e as que destacaron no seu desenvolvemento no ano 2017 foron Intel, Red Hat, Linaro, IBM, Samsung, SUSE, Google, AMD, Renesas, Mellanox, Texas Instruments e ARM.. Máis do 37% das webs fornécenas equipos con sistemas Linux.

## Historia 
Na década de 1980 UNIX deixou de distribuírse de balde cando era o sistema operativo preferido nas universidades. Estas reaccionaron e optaron por usar Minix, unha versión barata e limitada creada para o ensino. En abril de 1991, Linus Torvalds, de 21 anos, empezou a traballar nunhas simples ideas para un núcleo dun sistema operativo. Naquel entón Linus estudaba na Universidade de Helsinqui e usaba Minix na casa. 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 de 1991 lanzaron a versión 0.02 e en decembro a versión 0.11. Esta versión foi a primeira en ser *self-hosted* (autoalbergada): podía ser compilada por unha computadora que executase Linux 0.11. As versións anteriores precisaban de ser compiladas noutros sistemas operativos. Cando lanzou a seguinte versión, Linus 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 fora 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. A versión 2 liberouse n 1996, a versión 3 fíxoo en 2011 e a versión 4 en 2015. En maio de 1996 Torvalds decidiu adoptar ao pingüín Tux como mascota para Linux.

## Aspectos técnicos 
### Arquitecturas 
200px|miniatura|Diagrama do kernel 2.4.0.
O kernel de Linux é un kernel monolítico, cun verdadeiro soporte para o soporte de prioridades multitarefas (tanto no modo de usuario como, desde a serie 2.6, no modo de kernel)), con memoria virtual, con librarías compartidas, carga baixo demanda, e executables de copy-on-write por KMS, xestión de memoria, protocolo de Internet e fíos de tarefas.

Os controladores de dispositivos e os engadidos de kernel execútanse no espazo do kernel (que é ring 0 en moitas das arquitecturas de CPU), e con total acceso ao hardware. Nalgúns casos funcionan no espazo de usuario, como por exemplo o sistema de ficheiros FUSE/CUSE e partes da UIO. O sistema gráfico que a meirande parte dos usuarios usa non se executa co kernel. Ao contrario doutros kernels mololíticos estándares, os controladores de dispositivo configúranse dun xeito sinxelo con módulos e cárganse ou retíranse cando o sistema está en funcionamento. Do mesmo xeito, ós controladores de dispositivos pódeselle dar prioridades baixo certas condicións. Esta función engadiuse no kernel para manexar as interrupcións do uso de hardware correctamente e para dar un mellor soporte aos multiprocesos simétricos.

O hardware tamén se incorpora no sistema xerárquico de ficheiros. A interface de dispositivos de controladores para as aplicacións de usuarios está na entrada dos cartafoles */dev* ou */sys*. A información dos procesos está rexistrada no sistema de ficheiros grazas ao cartafol de */proc*.

### Linguaxes de programación 
Linux está escrito na linguaxe de programación C para o compilador GCC (esta ten unha serie de cambios e engadidos para a linguaxe C estándar) e con algunhas seccións curtas escritas na Assembly (coa sintaxe do estilo AT&T de GCC) e C++ e para a arquitectura que se precise. Polo uso das súas extensións á linguaxe, GCC foi durante moito tempo o único compilador capaz de compilar correctamente Linux. Assembly e C++ en 2018 supoñían un 1,7 e 1,8% do código total do kernel de Linux.

Outras linguaxes (como Perl, Python e varias linguaxes shell scripting) pódense empregar dalgunha forma para as conexións co procesos de construción do núcleo (o método a través do cal as imaxes de inicio son creadas desde un código fonte). Algúns controladores escríbense en C++, Fortran ou outras linguaxes. O sistema de construción de Linux oficialmente só soporta GCC como núcleo e compilador de controlador.

### Portabilidade 
[miniatura|[Ipod executando un iPodLinux.]]
Aínda cando Linus Torvalds non ideou orixinalmente Linux como un kernel portable,  evolucionou nesa dirección. Linux agora é un dos núcleos máis amplamente portados e que funciona nun amplo abano de sistemas que van desde as arquitecturas ARM ás computadoras centrais z/Architecture de IBM.

A primeira adaptación de Linux fóra da arquitectura orixinal, a 386, foi a que fixeron usuarios de Commodore Amiga para a plataforma Motorola 68000, para a cal fixeron substitucións importantes do kernel. As modificacións foron sempre tan fundamentais que Torvalds viu esa versión de Motorola como un *fork*, un «*un sistema operativo semellante a linux*» Esa adaptación aceptaba tanto as plataformas 386 como as Alpha nunha mesma árbore de desenvolvemento.

Linux é o sistema operativo principal do Blue Gene de IBM e outras supercomputadoras rápidas, incluídas as chinesas. A xaneiro de 2018 todos os 500 supercomputadores máis rápidos do mundo empregaban algunha variante de Linux. Linux tamén se adaptou para dispositivos iPod e iPhone de Apple. Algúns sistemas operativos que se desenvolveron para os móbiles usan algunha versión do kernel de Linux, como o fixeron Android, Firefox OS, HP webOS, Maemo de Nokia e Sailfish de Jolla.

Algunhas das principais arquitecturas que ten Linux implementadas 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.

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

## Desenvolvemento 
Só uns poucos programadores traballan directamente nas funcionalidades básicas do núcleo e moitas destas achegas están feitas por empresas. A maior parte do código constitúena os controladores, dos que hai miles, cada un coas súas particularidades. Como non interactúan entre eles, senón co núcleo, o desenvolvemento de código para que funcionen déixase a colaboradores voluntarios que vexan a necesidade de utilizar dispositivos que necesiten deses controladores. Isto permite que Linux se probe efectivamente en moitos sistemas moi variados pero trae o inconveniente de que, en xeral, hai que esperar semanas ou ata meses a que un dispositivo acabado de saír ao mercado podía ser usado –en parte tamén porque moitas empresas non queren desvendar o funcionamento interno dos seus produtos, aínda que isto sucede cada vez menos–.

O factor principal no proceso de desenvolvemento de Linux é que o código fonte está dispoñible publicamente baixo unha licenza que permite a súa modificación e distribución libre. Por esta razón, ao poder ser visto por moita xente, se se atopa un problema resulta máis doado solucionalo e se falta unha funcionalidade pódese engadir.

### 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
* Linus Torvalds

### Ligazóns externas 
* Sitio web oficial do kernel Linux .