Articulo de referencia

Núcleo de Linux

El núcleo de Linux es un núcleo libre y de código abierto , [12] : 4 similar a UNIX que se utiliza en muchos sistemas informáticos en todo el mundo. El núcleo fue creado por Lin...

El núcleo de Linux es un núcleo libre y de código abierto , [12] : 4  similar a UNIX que se utiliza en muchos sistemas informáticos en todo el mundo. El núcleo fue creado por Linus Torvalds en 1991 y pronto fue adoptado como el núcleo del sistema operativo GNU (OS) que fue creado para ser un reemplazo libre para Unix . Desde finales de la década de 1990, se ha incluido en muchas distribuciones de sistemas operativos , muchas de las cuales se llaman Linux . Uno de esos sistemas operativos de núcleo Linux es Android , que se utiliza en muchos dispositivos móviles e integrados.

La mayor parte del código del núcleo está escrito en C, tal como lo admite la colección de compiladores GNU (GCC), que tiene extensiones más allá del C estándar. [12] : 18  [13] El código también contiene código ensamblador para la lógica específica de la arquitectura, como la optimización del uso de la memoria y la ejecución de tareas. [12] : 379–380  El núcleo tiene un diseño modular , de modo que los módulos se pueden integrar como componentes de software , incluso cargados dinámicamente. El núcleo es monolítico en un sentido arquitectónico, ya que todo el sistema operativo se ejecuta en el espacio del núcleo .

Linux se proporciona bajo la Licencia Pública General GNU versión 2 , aunque contiene archivos bajo otras licencias compatibles . [11]

Historia

Linus Torvalds en la LinuxCon Europe 2014 en Düsseldorf

En abril de 1991, Linus Torvalds, un estudiante de informática de 21 años de la Universidad de Helsinki , comenzó a trabajar en un sistema operativo, inspirado en UNIX, para un ordenador personal. [14] Comenzó con un conmutador de tareas en lenguaje ensamblador Intel 80386 y un controlador de terminal . [14] El 25 de agosto de 1991, Torvalds publicó lo siguiente en comp.os.minix , un grupo de noticias de Usenet : [15]

Estoy haciendo un sistema operativo (gratuito) (sólo un hobby, no será grande ni profesional como gnu) para clones AT 386(486) . Esto se ha estado gestando desde abril y está empezando a estar listo. Me gustaría recibir comentarios sobre las cosas que a la gente le gustan o no le gustan de minix, ya que mi sistema operativo se le parece un poco (la misma disposición física del sistema de archivos (debido a razones prácticas) entre otras cosas).
Actualmente he portado bash (1.08) y gcc (1.40), y las cosas parecen funcionar. Esto implica que conseguiré algo práctico en unos meses [...]
Sí, está libre de cualquier código minix y tiene un sistema de archivos multiproceso. NO es portátil [ sic ] (usa conmutación de tareas 386, etc.) y probablemente nunca soportará nada más que discos duros AT, ya que eso es todo lo que tengo :-(.

El 17 de septiembre de 1991, Torvalds preparó la versión 0.01 de Linux y la colocó en el servidor FTP "ftp.funet.fi" de la Red Universitaria e Investigadora Finlandesa ( FUNET ). Ni siquiera era ejecutable, ya que su código aún necesitaba Minix para compilarlo y probarlo. [16]

El 5 de octubre de 1991, Torvalds anunció la primera versión "oficial" de Linux, la versión 0.02. [17] [16]

Como mencioné hace un mes, estoy trabajando en una versión gratuita de un programa similar a Minix para computadoras AT-386. Finalmente ha llegado a la etapa en la que es incluso utilizable (aunque puede que no, dependiendo de lo que quieras), y estoy dispuesto a publicar las fuentes para una distribución más amplia. Es solo la versión 0.02... pero he ejecutado bash, gcc, gnu-make, gnu-sed, compress, etc. con éxito.

Linux creció rápidamente a medida que muchos desarrolladores, incluida la comunidad MINIX , contribuyeron al proyecto. [ cita requerida ] En ese momento, el Proyecto GNU había completado muchos componentes para su reemplazo gratuito de UNIX, el sistema operativo GNU , pero su núcleo, GNU Hurd , estaba incompleto. El proyecto adoptó el núcleo Linux para su sistema operativo. [18]

Torvalds etiquetó el núcleo con la versión principal 0 para indicar que aún no estaba destinado al uso general. [19] La versión 0.11, lanzada en diciembre de 1991, fue la primera versión alojada automáticamente ; compilada en una computadora que ejecutaba el núcleo Linux.

Cuando Torvalds lanzó la versión 0.12 en febrero de 1992, adoptó la Licencia Pública General GNU versión 2 (GPLv2) sobre su licencia anterior, redactada por él mismo, que no permitía la redistribución comercial. [20] A diferencia de Unix , todos los archivos fuente de Linux están disponibles gratuitamente, incluidos los controladores de dispositivos . [21]

El éxito inicial de Linux fue impulsado por programadores y probadores de todo el mundo. Con el apoyo de las API POSIX , a través de la libC que, cuando es necesaria, actúa como punto de entrada al espacio de direcciones del núcleo, Linux podía ejecutar software y aplicaciones que habían sido desarrollados para Unix. [22]

El kernel de Linux admite varias arquitecturas de hardware, proporcionando una plataforma común para el software, incluido el software propietario .

El 19 de enero de 1992 se envió el primer mensaje al nuevo grupo de noticias alt.os.linux . [23] El 31 de marzo de 1992, el grupo de noticias pasó a llamarse comp.os.linux . [24]

El hecho de que Linux sea un núcleo monolítico en lugar de un micronúcleo fue el tema de un debate entre Andrew S. Tanenbaum , el creador de MINIX, y Torvalds. [25] El debate Tanenbaum-Torvalds comenzó en 1992 en el grupo de Usenet comp.os.minix como una discusión general sobre arquitecturas de núcleo. [26] [27]

La versión 0.95 fue la primera capaz de ejecutar el sistema X Window . [28] En marzo de 1994, Linux 1.0.0 fue lanzado con 176.250 líneas de código. [29] Como lo indica el número de versión, fue la primera versión considerada adecuada para un entorno de producción . [19] En junio de 1996, después del lanzamiento de la versión 1.3, Torvalds decidió que Linux había evolucionado lo suficiente como para justificar un nuevo número mayor, y por eso etiquetó la siguiente versión como versión 2.0.0. [30] [31] Las características significativas de la versión 2.0 incluían multiprocesamiento simétrico (SMP), soporte para más tipos de procesadores y soporte para seleccionar objetivos de hardware específicos y para habilitar características y optimizaciones específicas de la arquitectura. [22] La familia de comandos make *config de kbuild habilita y configura opciones para construir ejecutables de kernel ad hoc ( vmlinux ) y módulos cargables. [32] [33]

La versión 2.2, publicada el 20 de enero de 1999, [34] mejoró la granularidad de bloqueo y la gestión de SMP, agregó soporte para m68k , PowerPC , Sparc64 , Alpha y otras plataformas de 64 bits. [35] Además, agregó nuevos sistemas de archivos , incluida la capacidad de solo lectura NTFS de Microsoft . [35] En 1999, IBM publicó sus parches al código Linux 2.2.13 para el soporte de la arquitectura S/390 . [36]

La versión 2.4.0, publicada el 4 de enero de 2001, [37] contenía soporte para ISA Plug and Play , USB y PC Cards . Linux 2.4 agregó soporte para Pentium 4 e Itanium (este último introdujo el ISA ia64 que fue desarrollado conjuntamente por Intel y Hewlett-Packard para reemplazar al antiguo PA-RISC ), y para el nuevo procesador MIPS de 64 bits . [38] El desarrollo para 2.4. x cambió un poco en el sentido de que se pusieron a disposición más funciones en toda la serie, incluido el soporte para Bluetooth , Logical Volume Manager (LVM) versión 1, soporte RAID , InterMezzo y sistemas de archivos ext3 .

La versión 2.6.0 se lanzó el 17 de diciembre de 2003. [39] El desarrollo de la versión 2.6. x cambió aún más hacia la inclusión de nuevas características en toda la serie. Entre los cambios que se han realizado en la serie 2.6 se encuentran: integración de μClinux en las fuentes del núcleo principal, soporte para PAE , soporte para varias líneas nuevas de CPU , integración de Advanced Linux Sound Architecture (ALSA) en las fuentes del núcleo principal, soporte para hasta 2 32 usuarios (en lugar de 2 16 ), soporte para hasta 2 29 identificadores de proceso (solo 64 bits, las arquitecturas de 32 bits aún están limitadas a 2 15 ), [40] aumento sustancial del número de tipos de dispositivos y el número de dispositivos de cada tipo, soporte de 64 bits mejorado, soporte para sistemas de archivos que admiten tamaños de archivo de hasta 16 terabytes , preempción en el núcleo , soporte para la biblioteca de subprocesos POSIX nativos (NPTL), integración de Linux en modo usuario en las fuentes del núcleo principal, integración de SELinux en las fuentes del núcleo principal, soporte para InfiniBand y mucho más.

A partir de las versiones 2.6.x, el núcleo admitió una gran cantidad de sistemas de archivos; algunos diseñados para Linux, como ext3 , ext4 , FUSE , Btrfs , [41] y otros nativos de otros sistemas operativos como JFS , XFS , Minix, Xenix , Irix , Solaris , System V , Windows y MS-DOS . [42]

Aunque el desarrollo no había utilizado un sistema de control de versiones hasta el momento, en 2002, los desarrolladores de Linux adoptaron BitKeeper , que se puso a su disposición de forma gratuita a pesar de que no era software libre . En 2005, debido a los esfuerzos por aplicarle ingeniería inversa , la empresa propietaria del software revocó su apoyo a la comunidad Linux. En respuesta, Torvalds y otros escribieron Git . El nuevo sistema se escribió en cuestión de semanas y en dos meses se lanzó el primer núcleo oficial creado con él. [43]

En 2005 se formó el equipo estable como respuesta a la falta de un árbol de kernel donde la gente pudiera trabajar en correcciones de errores , y que mantendría actualizadas las versiones estables . [44] En febrero de 2008 se creó el árbol linux-next para servir como un lugar donde se reunieran los parches que se pretendían fusionar durante el siguiente ciclo de desarrollo. [45] [46] Varios mantenedores de subsistemas también adoptaron el sufijo -next para árboles que contienen código que pretenden enviar para su inclusión en el próximo ciclo de lanzamiento. A partir de enero de 2014 [update], la versión en desarrollo de Linux se mantiene en una rama inestable llamada linux-next . [47]

En julio de 2011, Torvalds celebró el 20º aniversario de Linux con el lanzamiento de la versión 3.0.0. [30] Como 2.6 había sido el número de versión durante 8 años, se tuvo que agregar al núcleo una nueva personalidad uname26 que informa 3.x como 2.6.40+x para que los programas antiguos pudieran funcionar. [48]

La versión 3.0 fue lanzada el 22 de julio de 2011. [49] El 30 de mayo de 2011, Torvalds anunció que el gran cambio era "NADA. Absolutamente nada" y pidió: "... asegurémonos de que realmente hacemos que la próxima versión no sea sólo un número nuevo y brillante, sino también un buen núcleo". [50] Después de las esperadas 6-7 semanas del proceso de desarrollo, se lanzaría cerca del 20 aniversario de Linux.

El 11 de diciembre de 2012, Torvalds decidió reducir la complejidad del núcleo eliminando el soporte para los procesadores i386 , específicamente al no tener que emular [51] la instrucción atómica CMPXCHG introducida con el i486 para permitir mutex confiables , haciendo que la serie de núcleos 3.7 sea la última que aún soporta el procesador original. [52] [53] La misma serie unificó el soporte para el procesador ARM . [54]

El cambio de numeración de 2.6.39 a 3.0, y de 3.19 a 4.0, no implicó ninguna diferenciación técnica significativa; el número de versión principal se incrementó simplemente para evitar grandes números secundarios. [49] [55] Los núcleos estables 3.xy se lanzaron hasta 3.19 en febrero de 2015. La versión 3.11, lanzada el 2 de septiembre de 2013, [56] agregó muchas características nuevas como el nuevo indicador O_TMPFILEopen(2) para reducir las vulnerabilidades de archivos temporales, la administración de energía dinámica experimental AMD Radeon , sondeo de red de baja latencia y zswap (caché de intercambio comprimido). [57]

En abril de 2015, Torvalds lanzó la versión 4.0 del kernel. [30] Para febrero de 2015, Linux había recibido contribuciones de casi 12.000 programadores de más de 1.200 empresas, incluidos algunos de los proveedores de software y hardware más grandes del mundo. [58] La versión 4.1 de Linux, lanzada en junio de 2015, contiene más de 19,5 millones de líneas de código aportadas por casi 14.000 programadores. [59]

Linus Torvalds anunció que la versión del kernel 4.22 se numeraría 5.0 en marzo de 2019, afirmando que "'5.0' no significa nada más que los números 4.x comenzaron a ser lo suficientemente grandes como para que me quedara sin dedos de las manos y de los pies". [60] Presentó muchas adiciones importantes, como soporte para la pantalla AMD Radeon FreeSync y NVIDIA Xavier, correcciones para F2FS , EXT4 y XFS , soporte restaurado para archivos de intercambio en el sistema de archivos Btrfs y trabajo continuo en los gráficos Intel Icelake Gen11 y en los SoC NXP i.MX8 . [61] [62] Esta versión fue notablemente más grande que el resto, Torvalds mencionó que "Los cambios generales para toda la versión 5.0 son mucho más grandes". [60]

Un total de 1.991 desarrolladores, de los cuales 334 colaboraron por primera vez, agregaron más de 553.000 líneas de código a la versión 5.8, rompiendo el récord que anteriormente tenía la versión 4.9. [63]

Popularidad

Según la Encuesta anual para desarrolladores de Stack Overflow de 2019, más del 53% de todos los encuestados han desarrollado software para Linux y alrededor del 27% para Android , [64] aunque solo alrededor del 25% desarrolla con sistemas operativos basados ​​en Linux. [65]

La mayoría de los sitios web funcionan con sistemas operativos basados ​​en Linux , [66] [67] y las 500 supercomputadoras más poderosas del mundo utilizan algún tipo de sistema operativo basado en Linux. [68]

Las distribuciones de Linux agrupan el núcleo con el software del sistema (por ejemplo, la biblioteca GNU C , systemd y otras utilidades y demonios de Unix ) y una amplia selección de software de aplicación , pero su participación en el uso en los escritorios es baja en comparación con otros sistemas operativos.

Dado que Android , que es Linux, representa la mayoría de los sistemas operativos de dispositivos móviles, [69] [70] [71] y debido a su creciente uso en dispositivos integrados , Android es significativamente responsable del aumento del uso de Linux en general. [22]

Valor

Costos de rediseño del kernel de Linux

Se ha estimado que el coste de rediseñar la versión 2.6.0 del núcleo Linux en un entorno de desarrollo propietario tradicional es de 612 millones de dólares (467 millones de euros, 394 millones de libras esterlinas) a precios de 2004 utilizando el modelo de estimación de persona-mes COCOMO . [72] En 2006, un estudio financiado por la Unión Europea estimó el coste de rediseño de la versión 2.6.8 del núcleo en 882 millones de euros (1.140 millones de dólares, 744 millones de libras esterlinas). [73]

En octubre de 2008, Amanda McPherson, Brian Proffitt y Ron Hale-Evans volvieron a tratar este tema. Utilizando la metodología de David A. Wheeler, calcularon que el rediseño del núcleo 2.6.25 cuesta ahora 1.300 millones de dólares (parte de un total de 10.800 millones de dólares para rediseñar Fedora 9). [74] De nuevo, García-García y Alonso de Magdaleno, de la Universidad de Oviedo (España), calculan que el valor añadido anualmente al núcleo fue de unos 100 millones de euros entre 2005 y 2007 y de 225 millones de euros en 2008; costaría también más de 1.000 millones de euros (unos 1.400 millones de dólares a febrero de 2010) desarrollarlo en la Unión Europea. [75]

Al 7 de marzo de 2011 , utilizando las líneas de código ( LOC[update] ) actuales de un núcleo Linux 2.6.x y las cifras salariales con los cálculos de David A. Wheeler, costaría aproximadamente $3 mil millones (alrededor de €2,2 mil millones) volver a desarrollar el núcleo Linux a medida que sigue creciendo. Un cálculo actualizado al 26 de septiembre de 2018 , utilizando las 20,088,609 LOC (líneas de código) actuales para el núcleo Linux 4.14.14 y el salario promedio nacional actual de programador de EE. UU. de $75,506 muestra que costaría aproximadamente $14,725,449,000 (£11,191,341,000) reescribir el código existente. [76][update]

Distribución

La mayoría de quienes usan Linux lo hacen a través de una distribución Linux . Algunas distribuciones incluyen el núcleo vanilla o estable. Sin embargo, varios proveedores (como Red Hat y Debian ) mantienen un árbol de fuentes personalizado. Estos suelen actualizarse a un ritmo más lento que la rama vanilla y suelen incluir todas las correcciones de la rama estable relevante, pero al mismo tiempo también pueden agregar soporte para controladores o características que no se habían publicado en la versión vanilla en la que el proveedor de la distribución comenzó a basar su rama.

Desarrolladores

Comunidad

[77]
Ninguno
Desconocido
Consultores
SUSE
Google
Casi otras 500
empresas
Afiliación corporativa de las contribuciones al núcleo Linux, 4.8–4.13 [78]

La comunidad de desarrolladores del kernel de Linux está formada por unos 5000–6000 miembros. Según el estudio "2017 State of Linux Kernel Development", publicado por la Linux Foundation y que abarca las confirmaciones de las versiones 4.8 a 4.13, unos 1500 desarrolladores de unas 200–250 empresas contribuyeron en promedio. Los 30 principales desarrolladores contribuyeron con un poco más del 16% del código. En cuanto a las empresas, los principales contribuyentes son Intel (13,1%) y Red Hat (7,2%), Linaro (5,6%), IBM (4,1%), el segundo y quinto lugar los ocupan las categorías "ninguno" (8,2%) y "desconocido" (4,1%). [78]

En lugar de una hoja de ruta, existen directrices técnicas. En lugar de una asignación central de recursos, existen personas y empresas que tienen un interés en el desarrollo futuro del núcleo Linux, de forma bastante independiente entre sí: personas como Linus Torvalds y yo no planificamos la evolución del núcleo. No nos sentamos a pensar en la hoja de ruta para los próximos dos años y luego asignamos recursos a las distintas características nuevas. Esto se debe a que no tenemos recursos. Los recursos son propiedad de las distintas empresas que utilizan y contribuyen a Linux, así como de los distintos contribuyentes independientes que hay por ahí. Son esas personas las que poseen los recursos y las que deciden...

—Andrew  Morton , 2005

Conflicto

Conflictos notables entre los desarrolladores del kernel de Linux:

  • En julio de 2007, Con Kolivas anunció que dejaría de desarrollar para el kernel de Linux. [79] [80]
  • En julio de 2009, Alan Cox renunció a su rol como mantenedor de la capa TTY después de un desacuerdo con Torvalds. [81]
  • En diciembre de 2010, hubo una discusión entre el mantenedor de SCSI de Linux, James Bottomley, y el mantenedor de SCST, Vladislav Bolkhovitin, sobre qué pila de destino SCSI debería incluirse en el núcleo de Linux. [82] Esto molestó a algunos usuarios de Linux. [83]
  • En junio de 2012, Torvalds dejó muy claro que no estaba de acuerdo con que NVIDIA publicara sus controladores como cerrados. [84]
  • En abril de 2014, Torvalds prohibió a Kay Sievers enviar parches al kernel de Linux por no solucionar errores que causaban que systemd interactuara negativamente con el kernel. [85]
  • En octubre de 2014, Lennart Poettering acusó a Torvalds de tolerar el estilo de discusión brusco en las listas de correo relacionadas con el kernel de Linux y de ser un mal modelo a seguir. [86]
  • En marzo de 2015, Christoph Hellwig presentó una demanda contra VMware por infracción de los derechos de autor sobre el núcleo de Linux. [87] Linus Torvalds dejó en claro que no estaba de acuerdo con esta y otras iniciativas similares al calificar a los abogados de enfermedad purulenta. [88]
  • En abril de 2021, se descubrió que un equipo de la Universidad de Minnesota estaba enviando parches de "mala fe" al núcleo como parte de su investigación. Esto dio lugar a la reversión inmediata de todos los parches enviados por un miembro de la universidad. Además, un responsable de mantenimiento de alto nivel emitió una advertencia de que cualquier parche futuro de la universidad sería rechazado de inmediato. [89] [90]

Los desarrolladores destacados del kernel de Linux han sido conscientes de la importancia de evitar conflictos entre desarrolladores. [91] Durante mucho tiempo no hubo un código de conducta para los desarrolladores del kernel debido a la oposición de Torvalds. [92] Sin embargo, el 8 de marzo de 2015 se introdujo un Código de conflicto del kernel de Linux. [93] Fue reemplazado el 16 de septiembre de 2018 por un nuevo Código de conducta basado en el Pacto del colaborador . Esto coincidió con una disculpa pública de Torvalds y una breve pausa en el desarrollo del kernel. [94] [95] El 30 de noviembre de 2018, cumpliendo con el Código de conducta , Jarkko Sakkinen de Intel envió parches que reemplazaban las instancias de "fuck" que aparecían en los comentarios del código fuente con versiones adecuadas centradas en la palabra "hug". [96]

Los desarrolladores que se sientan tratados injustamente pueden informar esto al Consejo Asesor Técnico de la Fundación Linux . [97] En julio de 2013, el mantenedor del controlador USB 3.0, Sage Sharp, le pidió a Torvalds que abordara los comentarios abusivos en la comunidad de desarrollo del kernel. En 2014, Sharp se retiró del desarrollo del kernel de Linux, diciendo que "el enfoque en la excelencia técnica, en combinación con mantenedores sobrecargados y personas con diferentes normas culturales y sociales, significa que los mantenedores del kernel de Linux a menudo son bruscos, groseros o brutales para hacer su trabajo". [98] En la conferencia linux.conf.au (LCA) en 2018, los desarrolladores expresaron la opinión de que la cultura de la comunidad ha mejorado mucho en los últimos años. Daniel Vetter, el mantenedor del controlador de kernel de gráficos Intel drm/i915, comentó que el "lenguaje y la discusión bastante violentos" en la comunidad del kernel han disminuido o desaparecido. [99]

Laurent Pinchart pidió a los desarrolladores comentarios sobre sus experiencias con la comunidad del kernel en la Embedded Linux Conference Europe de 2017. Los problemas planteados se discutieron unos días después en la Cumbre de Mantenedores. Shuah Khan, el mantenedor del marco de autoprueba del kernel, se hizo eco de las preocupaciones sobre la falta de coherencia en la forma en que los mantenedores respondían a los parches enviados por los desarrolladores. Torvalds sostuvo que nunca habría coherencia en el manejo de los parches porque los diferentes subsistemas del kernel han adoptado, con el tiempo, diferentes procesos de desarrollo. Por lo tanto, se acordó que cada mantenedor del subsistema del kernel documentaría las reglas para la aceptación de parches. [100]

Desarrollo

¡Linux es evolución, no diseño inteligente !

—  Linus Torvalds, 2005 [101] [102] [103]

Código base

El código fuente del núcleo, también conocido como árbol de fuentes, se administra en el sistema de control de versiones Git , también creado por Torvalds. [104]

En 2021 [update], la versión 5.11 del kernel de Linux tenía alrededor de 30,34 millones de líneas de código. Aproximadamente el 14 % del código forma parte del "núcleo" (directorios arch, kernel y mm), mientras que el 60 % son controladores.

Contribuciones

Las contribuciones se envían como parches, en forma de mensajes de texto en la lista de correo del núcleo Linux (LKML) (y a menudo también en otras listas de correo dedicadas a subsistemas particulares). Los parches deben cumplir un conjunto de reglas y un lenguaje formal que, entre otras cosas, describe qué líneas de código se deben eliminar y qué otras se deben agregar a los archivos especificados. Estos parches se pueden procesar automáticamente para que los administradores de sistemas puedan aplicarlos para realizar algunos cambios en el código o para actualizar gradualmente a la siguiente versión. [105] Linux también se distribuye en formatos GNU zip (gzip) y bzip2 .

Un desarrollador que desea cambiar el núcleo de Linux escribe y prueba un cambio de código. Dependiendo de lo significativo que sea el cambio y de cuántos subsistemas modifique, el cambio se enviará como un solo parche o en múltiples parches de código fuente . En el caso de un solo subsistema que es mantenido por un solo mantenedor, estos parches se envían como correos electrónicos al mantenedor del subsistema con la lista de correo adecuada en Cc. El mantenedor y los lectores de la lista de correo revisarán los parches y proporcionarán comentarios. Una vez que el proceso de revisión ha terminado, el mantenedor del subsistema acepta los parches en el árbol del núcleo de Git relevante . Si los cambios en el núcleo de Linux son correcciones de errores que se consideran lo suficientemente importantes, se enviará una solicitud de extracción para los parches a Torvalds en unos pocos días. De lo contrario, se enviará una solicitud de extracción a Torvalds durante la siguiente ventana de fusión. La ventana de fusión generalmente dura dos semanas y comienza inmediatamente después del lanzamiento de la versión anterior del núcleo. [106] El árbol de código fuente del kernel de Git nombra a todos los desarrolladores que han contribuido al kernel de Linux en el directorio Créditos y todos los mantenedores del subsistema aparecen en Mantenedores . [107]

Al igual que con muchos proyectos de software de código abierto de gran escala, los desarrolladores deben cumplir con el Pacto del Colaborador , un código de conducta destinado a abordar el acoso a los colaboradores pertenecientes a minorías. [108] [109] Además, para evitar ofensas, se exige el uso de terminología inclusiva dentro del código fuente. [110]

Lenguaje de programación

Linux está escrito en un lenguaje de programación C especial compatible con GCC , un compilador que extiende el estándar C de muchas maneras, por ejemplo, utilizando secciones en línea de código escritas en lenguaje ensamblador (en la sintaxis "estilo AT&T" de GCC) de la arquitectura de destino.

En septiembre de 2021, el requisito de versión GCC para compilar y construir el kernel de Linux aumentó de GCC 4.9 a 5.1, lo que permite la posibilidad de que el kernel pase de usar código C basado en el estándar C89 a usar código escrito con el estándar C11 , [111] y la migración al estándar tendrá lugar en marzo de 2022, con el lanzamiento de Linux 5.18. [112]

El soporte inicial para el lenguaje de programación Rust se agregó en Linux 6.1 [5] que se lanzó en diciembre de 2022, [113] con versiones de kernel posteriores, como Linux 6.2 y Linux 6.3, mejorando aún más el soporte. [114] [115]

Estilo de codificación

Desde 2002, el código debe cumplir las 21 reglas que componen el estilo de codificación del kernel de Linux. [116] [117]

Control de versiones

Como ocurre con la mayoría del software, el núcleo está versionado como una serie de números separados por puntos.

En las primeras versiones, la versión constaba de tres o cuatro números separados por puntos llamados versión principal , versión secundaria y revisión. [12] : 9  En ese momento, las versiones secundarias con números impares eran para desarrollo y pruebas, mientras que las versiones secundarias con números pares eran para producción. El cuarto dígito opcional indicaba un nivel de parche. [19] Las versiones de desarrollo se indicaban con un sufijo de candidato a versión ( -rc ).

Las convenciones de versiones actuales son diferentes. El número par/impar que implica dev/prod ha sido eliminado, y una versión principal se indica con los dos primeros números juntos. Mientras que el marco de tiempo está abierto para el desarrollo de la próxima versión principal, el sufijo -rcN se utiliza para identificar el candidato de lanzamiento n-ésimo para la próxima versión. [118] Por ejemplo, el lanzamiento de la versión 4.16 fue precedido por siete 4.16-rcN (de -rc1 a -rc7). Una vez que se lanza una versión estable, su mantenimiento se pasa al equipo estable . Las actualizaciones a una versión estable se identifican con un esquema de tres números (por ejemplo, 4.16.1, 4.16.2, ...). [118]

Cadena de herramientas

El núcleo se construye generalmente con la cadena de herramientas GNU . El compilador C de GNU, GNU cc, parte de la Colección de compiladores GNU (GCC), es el compilador predeterminado para Linux principal. La secuenciación es manejada por GNU make . El ensamblador GNU (a menudo llamado GAS o GNU as) genera los archivos de objeto a partir del código ensamblador generado por GCC . Finalmente, el enlazador GNU (GNU ld) produce un archivo de núcleo ejecutable enlazado estáticamente llamado vmlinux . Tanto as como ld son parte de las utilidades binarias GNU (binutils).

Durante mucho tiempo, GNU cc fue el único compilador capaz de compilar Linux correctamente. En 2004, Intel afirmó haber modificado el núcleo para que su compilador de C también fuera capaz de compilarlo. [119] Hubo otro éxito similar en 2009, con una versión 2.6.22 modificada. [120] [121] El soporte para el compilador de Intel se ha eliminado en 2023. [122]

Desde 2010, se ha estado trabajando para construir Linux con Clang , un compilador alternativo para el lenguaje C; [123] al 12 de abril de 2014, el núcleo oficial casi podía ser compilado por Clang. [124] [125] El proyecto dedicado a este esfuerzo se llama LLVMLinux en honor a la infraestructura del compilador LLVM sobre la que se construyó Clang. [126] LLVMLinux no tiene como objetivo bifurcar ni Linux ni LLVM, por lo tanto, es un metaproyecto compuesto de parches que finalmente se envían a los proyectos originales. Al permitir que Linux sea compilado por Clang, los desarrolladores pueden beneficiarse de tiempos de compilación más cortos. [127]

En 2017, los desarrolladores completaron la instalación de parches para soportar la creación del kernel de Linux con Clang en la versión 4.15, y trasladaron el soporte para X86-64 y AArch64 a las ramas 4.4, 4.9 y 4.14 del árbol de kernel estable. El Pixel 2 de Google se envió con el primer kernel de Linux creado con Clang , [128] aunque existían parches para Pixel (1.ª generación) . [129] En 2018, ChromeOS pasó a crear núcleos con Clang de forma predeterminada, [130] mientras que Android (sistema operativo) hizo que Clang [131] y el enlazador LLD de LLVM [132] fueran necesarios para las compilaciones de núcleos en 2019. Google pasó de construir su núcleo de producción utilizado en todos sus centros de datos a construirse con Clang en 2020. [133] Hoy, el grupo ClangBuiltLinux coordina las correcciones tanto para Linux como para LLVM para garantizar la compatibilidad, ambos compuestos por miembros de LLVMLinux y con parches ascendentes de LLVMLinux .

Depuración

Salida de pánico del kernel de Linux

Al igual que con cualquier software, los problemas con el núcleo de Linux pueden ser difíciles de solucionar . Los desafíos más comunes están relacionados con el acceso al espacio de usuario y al espacio del núcleo, el uso incorrecto de las primitivas de sincronización y la administración incorrecta del hardware. [12] : 364 

Un error oops es un error no fatal en el núcleo. Después de un error de este tipo, las operaciones continúan con una fiabilidad sospechosa. [134]

Un pánico (generado por panic() ) es un error fatal. Después de un error de este tipo, el núcleo imprime un mensaje y detiene la computadora. [12] : 371 

El núcleo permite la depuración mediante la impresión a través de printk () , que almacena los mensajes en un búfer circular (sobrescribiendo las entradas más antiguas con las más nuevas). La llamada al sistema syslog(2) permite leer y borrar el búfer de mensajes y establecer el nivel máximo de registro de los mensajes que se enviarán a la consola. [135] Los mensajes del núcleo también se exportan al espacio de usuario a través de la interfaz /dev/kmsg . [136]

El mecanismo ftrace permite la depuración mediante rastreo. Se utiliza para supervisar y depurar Linux en tiempo de ejecución y puede analizar latencias en el espacio de usuario debido al mal comportamiento del núcleo. [137] [138] [139] [140] Además, ftrace permite a los usuarios rastrear Linux en el momento del arranque. [141]

kprobes y kretprobes pueden irrumpir en la ejecución del núcleo (como los depuradores en el espacio de usuario) y recopilar información sin interrupciones. [142] kprobes se pueden insertar en el código en (casi) cualquier dirección, mientras que kretprobes funcionan en el retorno de la función. uprobes tienen propósitos similares pero también tienen algunas diferencias en el uso y la implementación. [143]

Con KGDB, Linux se puede depurar de la misma manera que los programas de espacio de usuario. KGDB requiere una máquina adicional que ejecute GDB y que esté conectada al objetivo que se va a depurar mediante un cable serial o Ethernet . [144]

Proceso de cambio

El proyecto del núcleo Linux integra código nuevo de forma continua. El procedimiento operativo estándar es que el software incorporado al proyecto debe funcionar y compilarse sin errores.

A cada subsistema del kernel se le asigna un mantenedor que es responsable de revisar los parches frente a los estándares del código del kernel y de mantener una cola de parches que se pueden enviar a Torvalds dentro de una ventana de fusión que suele ser de varias semanas.

Torvalds fusiona los parches con el código fuente de la versión estable anterior del núcleo Linux, creando así el candidato a versión (-rc) para la próxima versión estable. Una vez que se cierra la ventana de fusión, solo se aceptan correcciones al nuevo código en la versión de desarrollo. La versión de desarrollo -rc del núcleo pasa por pruebas de regresión y, una vez que Torvalds y los encargados del mantenimiento del subsistema la consideran estable, se publica una nueva versión y el proceso de desarrollo comienza de nuevo. [145]

Linux de línea principal

El árbol Git que contiene el código fuente del núcleo Linux se conoce como mainline Linux . Cada versión estable del núcleo se origina en el árbol mainline, [146] y se publica con frecuencia en kernel.org . Mainline Linux solo tiene soporte sólido para un pequeño subconjunto de los muchos dispositivos que ejecutan Linux. El soporte no principal lo brindan proyectos independientes, como Yocto o Linaro , pero en muchos casos se necesita el núcleo del proveedor del dispositivo. [147] El uso de un núcleo de un proveedor probablemente requiera un paquete de soporte de placa .

Mantener un árbol de núcleo fuera del sistema principal de Linux ha demostrado ser difícil. [148]

Mainlining se refiere al esfuerzo de agregar soporte para un dispositivo al núcleo principal, [149] mientras que anteriormente solo había soporte en una bifurcación o no había soporte en absoluto. Esto generalmente incluye agregar controladores o archivos de árbol de dispositivos . Cuando esto termina, la característica o corrección de seguridad se considera mainlining . [150]

Kernel similar a Linux

El mantenedor de la rama estable, Greg Kroah-Hartman , ha aplicado el término similar a Linux a las bifurcaciones del núcleo descendente realizadas por los proveedores que agregan millones de líneas de código al núcleo principal. [151] En 2019, Google declaró que quería utilizar el núcleo Linux principal en Android para reducir la cantidad de bifurcaciones del núcleo. [152] El término similar a Linux también se ha aplicado al Subconjunto del núcleo Linux integrable , que no incluye el núcleo Linux principal completo sino un pequeño subconjunto modificado del código. [153]

Bifurcaciones de Linux

Un iPod arrancando iPodLinux

Existen ciertas comunidades que desarrollan núcleos basados ​​en el Linux oficial. Algunos fragmentos de código interesantes de estas bifurcaciones , que incluyen Linux-libre , Compute Node Linux , INK , L4Linux , RTLinux y User-Mode Linux (UML), se han fusionado en la línea principal. [154] Algunos sistemas operativos desarrollados para teléfonos móviles inicialmente usaban versiones muy modificadas de Linux, incluidos Google Android , Firefox OS , HP webOS , Nokia Maemo y Jolla Sailfish OS . En 2010, la comunidad Linux criticó a Google por iniciar efectivamente su propio árbol de núcleos: [155] [156]

Esto significa que cualquier controlador escrito para plataformas de hardware Android no puede fusionarse en el árbol principal del núcleo porque tiene dependencias de código que solo se encuentra en el árbol del núcleo de Google, lo que hace que no pueda compilarse en el árbol kernel.org. Debido a esto, Google ha impedido que una gran parte de los controladores de hardware y el código de la plataforma se fusionen en el árbol principal del núcleo, creando así una rama del núcleo en la que ahora confían varios proveedores diferentes. [157]

—  Greg Kroah-Hartman , 2010

En la actualidad, Android utiliza un sistema operativo Linux personalizado [158] , en el que se implementan cambios importantes en los controladores de dispositivos, pero se requieren algunos cambios en el código del núcleo. Los desarrolladores de Android también envían parches al sistema operativo Linux oficial que finalmente puede iniciar el sistema operativo Android. Por ejemplo, un Nexus 7 puede iniciar y ejecutar el sistema operativo Linux principal. [158]

En una presentación en 2001 en el Museo de Historia de la Computación , Torvalds dijo lo siguiente en respuesta a una pregunta sobre las distribuciones de Linux que utilizan o no exactamente las mismas fuentes de kernel:

No lo son... bueno, lo son y no lo son. No hay un único núcleo. Cada distribución tiene sus propios cambios. Eso ha estado sucediendo desde prácticamente el primer día. No sé si recordarás que Yggdrasil era conocido por tener cambios bastante extremos en el núcleo e incluso hoy en día todos los principales proveedores tienen sus propios ajustes porque tienen una parte del mercado en la que están interesados ​​y, francamente, así es como debería ser. Porque si todo el mundo espera que una persona, yo, pueda rastrear todo, ese no es el objetivo de la GPL. Ese no es el objetivo de tener un sistema abierto. Así que, en realidad, el hecho de que una distribución decida que algo es tan importante para ellos que agregarán parches incluso cuando no está en el núcleo estándar, eso es una muy buena señal para mí. Así es, por ejemplo, cómo se agregó algo como ReiserFS. Y la razón por la que ReiserFS es el primer sistema de archivos con registro que se integró en el núcleo estándar no fue porque ame a Hans Reiser. Fue porque SUSE empezó a distribuir ReiserFS como su núcleo estándar, lo que me dijo "ok". Esto está en uso en producción. La gente normal lo está haciendo. Deben saber algo que yo no sé. Así que, en un sentido muy real, lo que hacen muchas casas de distribución es que son parte de este "hagamos nuestra propia rama" y "hagamos nuestros cambios en esto". Y debido a la GPL, puedo tomar las mejores partes de ellos. [159]

—  Linus Torvalds , 2001

Apoyo a largo plazo

Mensajes de arranque de un kernel Linux 2.6.25.17

La última versión y las versiones anteriores se mantienen por separado. La mayoría de las últimas versiones del núcleo fueron supervisadas por Torvalds. [160]

La comunidad de desarrolladores del kernel de Linux mantiene un kernel estable aplicando correcciones a errores de software que se han descubierto durante el desarrollo del kernel estable posterior. Por lo tanto, www.kernel.org siempre enumera dos kernels estables. El siguiente kernel estable de Linux se publica entre 8 y 12 semanas después.

Algunas versiones están diseñadas para brindar soporte a largo plazo , como versiones con corrección de errores durante dos o más años. [161]

Arquitectura y características

Mapa del kernel de Linux
Diagrama de Sankey de las líneas de código fuente del kernel de Linux

Aunque parezca contradictorio, el núcleo de Linux es monolítico y modular. El núcleo se clasifica como un núcleo monolítico arquitectónicamente, ya que todo el sistema operativo se ejecuta en el espacio del núcleo. El diseño es modular, ya que se puede ensamblar a partir de módulos que, en algunos casos, se cargan y descargan en tiempo de ejecución. [12] : 338  [162] Admite características que antes solo estaban disponibles en núcleos de código cerrado de sistemas operativos no libres.

El resto del artículo utiliza la convención de sistemas operativos UNIX y similares a Unix de las páginas del manual . El número que sigue al nombre de un comando, interfaz u otra característica especifica la sección (es decir, el tipo de componente o característica del sistema operativo) a la que pertenece. Por ejemplo, execve(2) se refiere a una llamada del sistema y exec(3) se refiere a un contenedor de biblioteca de espacio de usuario.

A continuación se presenta una descripción general del diseño arquitectónico y de las características notables.

  • Computación concurrente e incluso (con la disponibilidad de suficientes núcleos de CPU para tareas que estén listas para ejecutarse) ejecución paralela real de muchos procesos a la vez (cada uno de ellos con uno o más hilos de ejecución ) en arquitecturas SMP y NUMA .
  • Selección y configuración de cientos de características y controladores del núcleo (utilizando uno de los comandos de la familia make *config antes de la compilación), [163] [33] [32] modificación de los parámetros del núcleo antes del arranque (normalmente insertando instrucciones en las líneas del menú de GRUB2 ) y ajuste fino del comportamiento del núcleo en tiempo de ejecución (utilizando la interfaz sysctl(8) para /proc/sys/ ). [164] [165] [166]
  • Configuración (de nuevo usando los comandos make *config ) y modificaciones en tiempo de ejecución de las políticas [167] (a través de nice(2) , setpriority(2) y la familia de llamadas al sistema sched_*(2) ) de los programadores de tareas que permiten la multitarea preventiva (tanto en modo de usuario como, desde la serie 2.6, en modo kernel [168] [169] ); el programador de primera programación virtual con fecha límite elegible más temprana (EEVDF), [170] es el programador predeterminado de Linux desde 2023 y usa un árbol rojo-negro que puede buscar, insertar y eliminar información de proceso ( estructura de tarea ) con complejidad de tiempo O(log n) , donde n es el número de tareas ejecutables. [171] [172]
  • Gestión avanzada de memoria con memoria virtual paginada .
  • Mecanismo de comunicación y sincronización entre procesos .
  • Un sistema de archivos virtual sobre varios sistemas de archivos concretos ( ext4 , Btrfs , XFS , JFS , FAT32 y muchos más).
  • Programadores de E/S configurables, llamada al sistema ioctl(2) [173] que manipula los parámetros de dispositivo subyacentes de archivos especiales (es una llamada de sistema no estándar, ya que los argumentos, retornos y semántica dependen del controlador de dispositivo en cuestión), soporte para E/S asincrónica POSIX [174] (sin embargo, debido a que escalan pobremente con aplicaciones multiproceso, se tuvo que crear una familia de llamadas de sistema de E/S específicas de Linux ( io_*(2) [175] ) para la gestión de contextos de E/S asincrónicas adecuados para el procesamiento concurrente).
  • Virtualización a nivel de SO (con Linux-VServer ), paravirtualización y virtualización asistida por hardware (con KVM o Xen , y usando QEMU para emulación de hardware); [176] [177] [178] [179] [180] [181] En el hipervisor Xen , el kernel de Linux proporciona soporte para construir distribuciones de Linux (como openSUSE Leap y muchas otras) que funcionan como Dom0 , que son servidores host de máquinas virtuales que proporcionan el entorno de gestión para las máquinas virtuales del usuario ( DomU ). [182]
  • Virtualización de E/S con VFIO y SR-IOV . La E/S de función virtual (VFIO) expone el acceso directo del dispositivo al espacio del usuario en un entorno protegido de memoria segura (IOMMU). Con VFIO, un invitado de VM puede acceder directamente a los dispositivos de hardware en el servidor host de VM. Esta técnica mejora el rendimiento, si se compara con la virtualización completa y la paravirtualización. Sin embargo, con VFIO, los dispositivos no se pueden compartir con varios invitados de VM. La virtualización de E/S de raíz única (SR-IOV) combina las ganancias de rendimiento de VFIO y la capacidad de compartir un dispositivo con varios invitados de VM (pero requiere hardware especial que debe ser capaz de aparecer ante dos o más invitados de VM como dispositivos diferentes). [183]
  • Mecanismos de seguridad para el control de acceso discrecional y obligatorio (SELinux, AppArmor, POSIX ACL y otros). [184] [185]
  • Varios tipos de protocolos de comunicación en capas (incluido el conjunto de protocolos de Internet ).
  • Multiprocesamiento asimétrico a través del subsistema RPMsg .

La mayoría de los controladores de dispositivos y extensiones del núcleo se ejecutan en el espacio del núcleo ( anillo 0 en muchas arquitecturas de CPU ), con acceso completo al hardware. Algunas excepciones se ejecutan en el espacio del usuario ; ejemplos notables son los sistemas de archivos basados ​​en FUSE /CUSE y partes de UIO. [186] [187] Además, el sistema X Window y Wayland , el sistema de ventanas y protocolos de servidor de visualización que la mayoría de las personas usan con Linux, no se ejecutan dentro del núcleo. De manera diferente, la interfaz real con las GPU de las tarjetas gráficas es un subsistema dentro del núcleo llamado Direct Rendering Manager (DRM).

A diferencia de los núcleos monolíticos estándar, los controladores de dispositivos se configuran fácilmente como módulos y se cargan o descargan mientras el sistema está en funcionamiento y también se pueden interrumpir en determinadas condiciones para manejar correctamente las interrupciones de hardware y soportar mejor el multiprocesamiento simétrico . [169] Por elección propia, Linux no tiene una interfaz binaria de aplicación de controlador de dispositivo estable . [188]

Linux generalmente utiliza protección de memoria y memoria virtual y también puede manejar acceso a memoria no uniforme , [189] sin embargo, el proyecto ha absorbido μClinux , que también hace posible ejecutar Linux en microcontroladores sin memoria virtual. [190]

El hardware se representa en la jerarquía de archivos. Las aplicaciones de usuario interactúan con los controladores de dispositivos a través de entradas en los directorios /dev o /sys . [191] La información del proceso se asigna al directorio /proc . [191]

Interfaces

Se distinguen cuatro interfaces: dos internas al núcleo y dos entre el núcleo y el espacio de usuario.

Linux comenzó como un clon de UNIX y apunta a cumplir con POSIX y Single UNIX Specification . [193] El núcleo proporciona llamadas al sistema y otras interfaces que son específicas de Linux. Para ser incluido en el núcleo oficial, el código debe cumplir con un conjunto de reglas de licencia. [6] [11]

La interfaz binaria de la aplicación Linux (ABI) entre el núcleo y el espacio de usuario tiene cuatro grados de estabilidad (estable, en prueba, obsoleto, eliminado); [194] Se espera que las llamadas del sistema nunca cambien para preservar la compatibilidad de los programas del espacio de usuario que dependen de ellas. [195]

Los módulos de kernel cargables (LKM), por diseño, no pueden depender de una ABI estable. [188] Por lo tanto, siempre deben volver a compilarse cada vez que se instala un nuevo ejecutable de kernel en un sistema, de lo contrario no se cargarán. Los controladores en árbol que están configurados para convertirse en una parte integral del ejecutable de kernel ( vmlinux ) están vinculados estáticamente por el proceso de compilación.

No existe garantía de estabilidad de la API interna del núcleo a nivel de fuente [188] y, debido a esto, el código del controlador de dispositivo , así como el código de cualquier otro subsistema del núcleo, debe mantenerse actualizado con la evolución del núcleo. Cualquier desarrollador que realice un cambio en la API debe corregir cualquier código que falle como resultado de su cambio. [196]

API de kernel a espacio de usuario

El conjunto de la API del núcleo Linux que se refiere a las interfaces expuestas a las aplicaciones de usuario se compone fundamentalmente de llamadas al sistema específicas de UNIX y Linux . [197] Una llamada al sistema es un punto de entrada al núcleo Linux. [198] Por ejemplo, entre las específicas de Linux se encuentra la familia de llamadas al sistema clone(2) . [199] La mayoría de las extensiones deben habilitarse definiendo la macro en un archivo de encabezado o cuando se compila el código del espacio de usuario. [200]_GNU_SOURCE

Las llamadas al sistema solo se pueden invocar a través de instrucciones de ensamblaje que permiten la transición desde el espacio de usuario sin privilegios al espacio de kernel privilegiado en el anillo 0. Por esta razón, la biblioteca estándar de C (libC) actúa como un contenedor para la mayoría de las llamadas al sistema Linux, al exponer funciones de C que, si es necesario, [201] ingresan de manera transparente al kernel que se ejecutará en nombre del proceso que realiza la llamada. [197] Para las llamadas al sistema que no están expuestas por libC, como el mutex rápido del espacio de usuario , [202] la biblioteca proporciona una función llamada syscall(2) que se puede usar para invocarlas explícitamente. [203]

Los pseudo sistemas de archivos (por ejemplo, los sistemas de archivos sysfs y procfs ) y los archivos especiales (por ejemplo, /dev/random, /dev/sda, /dev/ttyy muchos otros) constituyen otra capa de interfaz para las estructuras de datos del núcleo que representan dispositivos de hardware o lógicos (software). [204] [205]

ABI del kernel al espacio de usuario

Debido a las diferencias existentes entre los cientos de implementaciones del sistema operativo Linux, los objetos ejecutables, aunque estén compilados, ensamblados y vinculados para ejecutarse en una arquitectura de hardware específica (es decir, utilizan la ISA del hardware de destino), a menudo no pueden ejecutarse en diferentes distribuciones de Linux. Este problema se debe principalmente a configuraciones específicas de la distribución y a un conjunto de parches aplicados al código del núcleo de Linux, diferencias en las bibliotecas del sistema, servicios (daemons), jerarquías del sistema de archivos y variables de entorno.

El estándar principal en materia de compatibilidad binaria y de aplicaciones de las distribuciones Linux es el Linux Standard Base (LSB). [206] [207] Sin embargo, el LSB va más allá de lo que concierne al núcleo Linux, ya que también define las especificaciones del escritorio, las bibliotecas X y Qt que poco tienen que ver con él. [208] La versión 5 del LSB se basa en varios estándares y borradores (POSIX, SUS, X/Open, File System Hierarchy (FHS) y otros). [209]

Las partes del LSB más relevantes para el núcleo son la ABI general (gABI), [210] especialmente la ABI del sistema V [211] [212] y el formato ejecutable y de enlace (ELF), [213] [214] y la ABI específica del procesador (psABI), por ejemplo la especificación central para X86-64. [215] [216]

La ABI estándar para la forma en que los programas de usuario x86_64 invocan llamadas del sistema es cargar el número de llamada al sistema en el registro rax , y los otros parámetros en rdi , rsi , rdx , r10 , r8 y r9 , y finalmente poner la instrucción de ensamblaje de llamada al sistema en el código. [217] [218] [219]

API en el núcleo

En XDC2014, Alex Deucher de AMD anunció el controlador de modo kernel unificado. [220] El controlador gráfico propietario de Linux, libGL-fglrx-glx , compartirá la misma infraestructura DRM con Mesa 3D . Como no hay una ABI estable en el kernel , AMD tuvo que adaptar constantemente el antiguo blob binario utilizado por Catalyst.

Existen varias API internas del núcleo entre los subsistemas del núcleo. Algunas están disponibles sólo dentro de los subsistemas del núcleo, mientras que un conjunto algo limitado de símbolos internos del núcleo (es decir, variables, estructuras de datos y funciones) está expuesto a módulos cargables dinámicamente (por ejemplo, controladores de dispositivos cargados a pedido) ya sea que se exporten con las macros EXPORT_SYMBOL() y EXPORT_SYMBOL_GPL() [221] [222] (la última reservada para módulos publicados bajo una licencia compatible con GPL). [223]

Linux proporciona API en el núcleo que manipulan estructuras de datos (por ejemplo, listas enlazadas , árboles de base , [224] árboles rojo-negros , [225] colas ) o realizan rutinas comunes (por ejemplo, copiar datos desde y hacia el espacio del usuario, asignar memoria, imprimir líneas en el registro del sistema, etc.) que se han mantenido estables al menos desde la versión 2.6 de Linux. [226] [227] [228]

Las API dentro del núcleo incluyen bibliotecas de servicios comunes de bajo nivel utilizados por los controladores de dispositivos:

  • Interfaces SCSI y libATA  : respectivamente, un protocolo de comunicación basado en paquetes punto a punto para dispositivos de almacenamiento conectados a dispositivos USB, SATA, SAS, Fibre Channel, FireWire, ATAPI, [229] y una biblioteca en el núcleo para soportar controladores y dispositivos host [S]ATA. [230]
  • Direct Rendering Manager (DRM) y Kernel Mode Setting (KMS): para interactuar con GPU y satisfacer las necesidades del hardware de video acelerado en 3D moderno, [231] y para configurar la resolución de pantalla, la profundidad de color y la frecuencia de actualización [232]
  • Búferes DMA ( DMA-BUF ): para compartir búferes para el acceso directo a la memoria de hardware entre múltiples controladores de dispositivos y subsistemas [233] [234] [235]
  • Video4Linux  – para hardware de captura de vídeo
  • Arquitectura avanzada de sonido Linux (ALSA): para tarjetas de sonido
  • Nueva API  : para controladores de interfaz de red
  • mac80211 y cfg80211 – para controladores de interfaz de red inalámbrica [236] [237]

ABI en el núcleo

Los desarrolladores de Linux decidieron no mantener una ABI estable dentro del núcleo. Los módulos compilados para una versión específica del núcleo no se pueden cargar en otra versión sin volver a compilarlos. [188]

Multiprocesamiento

Linux crea procesos mediante las llamadas al sistema clone(2) o la más reciente clone3(2) [238] . Estas llamadas al sistema crean nuevas entidades que van desde nuevos procesos independientes (cada uno con un identificador especial llamado TGID dentro de la estructura de datos task_struct en el espacio del núcleo, aunque ese mismo identificador se llama PID en el espacio del usuario), hasta nuevos subprocesos dentro del proceso que realiza la llamada. [239] [240]

Si el ejecutable está vinculado dinámicamente a bibliotecas compartidas, se utiliza un vinculador dinámico para encontrar y cargar los objetos necesarios, preparar el programa para su ejecución y luego ejecutarlo. [241]

La biblioteca de subprocesos POSIX nativos (NPTL) [242] proporciona la interfaz de subprocesos estándar POSIX ( pthreads ) al espacio de usuario.

El núcleo proporciona los mecanismos futex(7) (mutex rápido en el espacio de usuario) para el bloqueo y sincronización en el espacio de usuario. [243] La mayoría de las operaciones se realizan en el espacio de usuario, pero puede ser necesario comunicarse con el núcleo mediante la llamada al sistema futex(2) . [202]

A diferencia de los hilos del espacio de usuario descritos anteriormente, los hilos del núcleo se ejecutan en el espacio del núcleo. [244]

Programación

El programador de procesos de Linux es modular, en el sentido de que permite diferentes clases y políticas de programación. [245] [246] Las clases del programador son algoritmos de programación conectables que se pueden registrar con el código base del programador. Cada clase programa diferentes tipos de procesos. El código central del programador itera sobre cada clase en orden de prioridad y elige el programador de mayor prioridad que tenga una entidad programable de tipo struct sched_entity lista para ejecutarse. [12] : 46–47  Las entidades pueden ser subprocesos, grupos de subprocesos e incluso todos los procesos de un usuario específico.

Linux proporciona tanto preempción de usuario como preempción de kernel completo . [12] : 62–63  La preempción reduce la latencia , aumenta la capacidad de respuesta, [247] y hace que Linux sea más adecuado para aplicaciones de escritorio y en tiempo real .

Para las tareas normales, por defecto, el núcleo utiliza la clase Completely Fair Scheduler (CFS), introducida en la versión 2.6.23. [171] El planificador se define como una macro en un encabezado de C como SCHED_NORMAL. En otros núcleos POSIX, una política similar conocida como SCHED_OTHERasigna porciones de tiempo de CPU (es decir, asigna porciones absolutas del tiempo de procesador dependiendo de la prioridad predeterminada o calculada dinámicamente de cada proceso). El CFS de Linux elimina las porciones de tiempo absolutas y asigna una proporción justa de tiempo de CPU, como una función de parámetros como el número total de procesos ejecutables y el tiempo que ya se han ejecutado; esta función también tiene en cuenta un tipo de peso que depende de sus prioridades relativas (valores nice). [12] : 46–50 

Con la preempción del usuario, el planificador del núcleo puede reemplazar el proceso actual con la ejecución de un cambio de contexto a uno diferente que, por lo tanto, adquiere los recursos informáticos para ejecutarse (CPU, memoria y más). Lo hace de acuerdo con el algoritmo CFS (en particular, utiliza una variable llamada vruntime para ordenar las entidades y luego elige la que tiene el vruntime más pequeño, es decir, la entidad programable que ha tenido la menor participación del tiempo de CPU), a la política activa del planificador y a las prioridades relativas. [248] Con la preempción del núcleo, el núcleo puede preemptarse a sí mismo cuando un manejador de interrupciones regresa, cuando las tareas del núcleo se bloquean y siempre que un subsistema llama explícitamente a la función schedule().

El núcleo también contiene dos clases de programación en tiempo real compatibles con POSIX [249]SCHED_FIFO llamadas (realtime first-in-first-out ) y SCHED_RR(realtime round-robin ), ambas tienen prioridad sobre la clase predeterminada. [245] Una política de programación adicional conocida como SCHED DEADLINE, que implementa el algoritmo de fecha límite más temprana primero (EDF), se agregó en la versión 3.14 del núcleo, lanzada el 30 de marzo de 2014. [250] [251] SCHED_DEADLINE tiene prioridad sobre todas las demás clases de programación.

Los parches en tiempo real PREEMPT_RT, incluidos en la línea principal de Linux desde la versión 2.6, proporcionan un programador determinista , la eliminación de la preempción y la desactivación de interrupciones (cuando sea posible), PI Mutexes (es decir, primitivas de bloqueo que evitan la inversión de prioridad), [252] [253] soporte para temporizadores de eventos de alta precisión (HPET), lectura-copia-actualización preemptiva (RCU), subprocesos IRQ (forzados) y otras características menores. [254] [255] [256]

En 2023, Peter Zijlstra propuso reemplazar CFS con un programador de fecha límite virtual elegible más temprano (EEVDF), [257] [258] para evitar la necesidad de parches de "latencia agradable" de CFS. [259] El programador EEVDF reemplazó a CFS en la versión 6.6 del kernel de Linux. [260]

Sincronización

El núcleo tiene diferentes causas de concurrencia (por ejemplo, interrupciones, mitades inferiores, prelación de tareas del núcleo y de los usuarios, multiprocesamiento simétrico). [12] : 167 

Para proteger regiones críticas (secciones de código que deben ejecutarse atómicamente), ubicaciones de memoria compartida (como variables globales y otras estructuras de datos con alcance global) y regiones de memoria que son modificables asincrónicamente por hardware (por ejemplo, que tienen el calificador de tipo C ), Linux proporciona un gran conjunto de herramientas. Consisten en tipos atómicos (que solo pueden manipularse mediante un conjunto de operadores específicos), spinlocks , semáforos , mutexes , [261] [12] : 176–198  [262] y algoritmos sin bloqueo (por ejemplo, RCUs ). [263] [264] [265] La mayoría de los algoritmos sin bloqueo se construyen sobre barreras de memoria con el propósito de imponer el orden de la memoria y evitar efectos secundarios no deseados debido a la optimización del compilador . [266] [267] [268] [269]volatile

PREEMPT_RTEl código incluido en la línea principal de Linux proporciona RT-mutexes , un tipo especial de Mutex que no deshabilita la preempción y tiene soporte para herencia de prioridad. [270] [271] Casi todos los bloqueos se cambian a bloqueos inactivos cuando se usa la configuración para operación en tiempo real. [272] [256] [271] La herencia de prioridad evita la inversión de prioridad al otorgar a una tarea de baja prioridad que mantiene un bloqueo en disputa la prioridad de un bloqueo en espera de mayor prioridad hasta que se libere ese bloqueo. [273] [274]

Linux incluye un validador de bloqueo del núcleo llamado Lockdep . [275] [276]

Interrupciones

Aunque la gestión de interrupciones podría verse como un único trabajo, se divide en dos. Esta división en dos se debe a las diferentes restricciones de tiempo y a las necesidades de sincronización de las tareas que componen la gestión. La primera parte está formada por una rutina de servicio de interrupciones asíncrona que en Linux se conoce como mitad superior , mientras que la segunda parte la lleva a cabo uno de los tres tipos de las llamadas mitades inferiores ( softirq , tasklets y colas de trabajo ). [12] : 133–137 

Las rutinas de servicio de interrupción de Linux se pueden anidar. Una nueva IRQ puede entrar en una ISR de alta prioridad que prevalezca sobre cualquier otra ISR de menor prioridad.

Memoria

Linux implementa memoria virtual con tablas de páginas de 5 niveles . [277] El kernel no es paginable (lo que significa que siempre reside en la memoria física y no se puede intercambiar con el disco) y no hay protección de memoria (no hay señales SIGSEGV , a diferencia del espacio de usuario), por lo tanto, las violaciones de memoria conducen a inestabilidad y fallas del sistema. [12] : 20  La memoria de usuario es paginable de forma predeterminada, aunque la paginación para áreas de memoria específicas se puede deshabilitar con la familia mlock() de llamadas del sistema .

La información del marco de página se mantiene en estructuras de datos apropiadas (del tipo struct page ) que se rellenan inmediatamente después del arranque y se conservan hasta el apagado, independientemente de si están asociadas con páginas virtuales. El espacio de direcciones físicas se divide en diferentes zonas, según las limitaciones arquitectónicas y el uso previsto. También se admiten sistemas NUMA con múltiples bancos de memoria. [278]

Se pueden asignar dinámicamente pequeños fragmentos de memoria en el espacio del núcleo a través de la familia de kmalloc()API y liberarlos con la variante adecuada de kfree(). vmalloc()y kvfree()se utilizan para fragmentos grandes prácticamente contiguos. alloc_pages()asigna la cantidad deseada de páginas enteras.

Diagrama de la pila de almacenamiento de Linux [279]

El kernel solía incluir los asignadores SLAB, SLUB y SLOB como alternativas configurables. [280] [281] El asignador SLOB se eliminó en Linux 6.4 [282] y el asignador SLAB se eliminó en Linux 6.8. [283] El único asignador restante es SLUB, que apunta a la simplicidad y la eficiencia, [281] es PREEMPT_RTcompatible [284] y se introdujo en Linux 2.6.

Arquitecturas soportadas

TiVo DVR , un dispositivo de consumo que ejecuta Linux

Aunque no fue diseñado originalmente para ser portable , [15] [285] Linux es ahora uno de los núcleos de sistemas operativos más ampliamente portados, y se ejecuta en una amplia gama de sistemas, desde la arquitectura ARM hasta los mainframes IBM z/Architecture . El primer puerto se realizó en la plataforma Motorola 68000. Las modificaciones al núcleo fueron tan fundamentales que Torvalds consideró la versión de Motorola como una bifurcación y un "sistema operativo similar a Linux". [285] Sin embargo, eso llevó a Torvalds a liderar una importante reestructuración del código para facilitar la portabilidad a más arquitecturas informáticas. El primer Linux que, en un solo árbol de fuentes, tenía código para más de i386 solo, era compatible con la plataforma DEC Alpha AXP de 64 bits. [286] [287] [285]

Linux se ejecuta como el sistema operativo principal en Summit de IBM ; a partir de octubre de 2019 , las 500 supercomputadoras más rápidas del mundo ejecutan algún sistema operativo basado en el núcleo Linux, [288] un gran cambio desde 1998, cuando la primera supercomputadora Linux se agregó a la lista. [289][update]

Linux también ha sido portado a varios dispositivos portátiles como el iPhone 3G y el iPod de Apple . [290]

Dispositivos compatibles

En 2007, se inició el proyecto LKDDb para crear una base de datos completa de hardware y protocolos conocidos por los núcleos de Linux. [291] La base de datos se crea automáticamente mediante el análisis estático de las fuentes del núcleo. Más tarde, en 2014, se lanzó el proyecto Linux Hardware para recopilar automáticamente una base de datos de todas las configuraciones de hardware probadas con la ayuda de los usuarios de varias distribuciones de Linux. [292]

Parcheo en vivo

Las actualizaciones sin reinicio pueden incluso aplicarse al núcleo mediante el uso de tecnologías de parcheo en vivo como Ksplice , kpatch y kGraft . Las bases minimalistas para el parcheo en vivo del núcleo se fusionaron en la línea principal del núcleo Linux en la versión 4.0 del núcleo, que se lanzó el 12 de abril de 2015. Esas bases, conocidas como livepatch y basadas principalmente en la funcionalidad ftrace del núcleo, forman un núcleo común capaz de soportar parcheo en caliente tanto por kGraft como por kpatch, al proporcionar una interfaz de programación de aplicaciones (API) para los módulos del núcleo que contienen parches en caliente y una interfaz binaria de aplicación (ABI) para las utilidades de administración del espacio de usuario. Sin embargo, el núcleo común incluido en el núcleo Linux 4.0 solo admite la arquitectura x86 y no proporciona ningún mecanismo para garantizar la coherencia a nivel de función mientras se aplican los parches en caliente. A partir de abril de 2015 [update], hay un trabajo en curso para portar kpatch y kGraft al núcleo común de parcheo en vivo proporcionado por la línea principal del núcleo Linux. [293] [294] [295]

Seguridad

Los errores del núcleo presentan problemas potenciales de seguridad. Por ejemplo, pueden permitir la escalada de privilegios o crear vectores de ataque de denegación de servicio . A lo largo de los años, se han encontrado y solucionado numerosos errores que afectaban a la seguridad del sistema. [296] Con frecuencia se implementan nuevas características para mejorar la seguridad del núcleo. [297] [298]

Las capacidades (7) ya se han presentado en la sección sobre procesos e hilos. Android hace uso de ellas y systemd ofrece a los administradores un control detallado sobre las capacidades de los procesos. [299]

Linux ofrece una gran cantidad de mecanismos para reducir la superficie de ataque del núcleo y mejorar la seguridad, que se conocen colectivamente como los Módulos de seguridad de Linux (LSM). [300] Comprenden el módulo Security-Enhanced Linux (SELinux), cuyo código fue desarrollado originalmente y luego publicado al público por la NSA , [301] y AppArmor [185] entre otros. SELinux ahora se desarrolla y mantiene activamente en GitHub . [184] SELinux y AppArmor brindan soporte para políticas de seguridad de control de acceso, incluido el control de acceso obligatorio (MAC), aunque difieren profundamente en complejidad y alcance.

Otra característica de seguridad es Seccomp BPF (SECure COMPuting con filtros de paquetes Berkeley) que funciona filtrando parámetros y reduciendo el conjunto de llamadas del sistema disponibles para las aplicaciones del usuario. [302]

Los críticos han acusado a los desarrolladores del kernel de encubrir fallas de seguridad, o al menos de no anunciarlas; en 2008, Torvalds respondió a esto con lo siguiente: [303] [304]

Personalmente, considero que los errores de seguridad son simplemente "errores normales". No los oculto, pero tampoco tengo ningún motivo para pensar que sea una buena idea rastrearlos y anunciarlos como algo especial... una de las razones por las que me niego a molestarme con todo el circo de la seguridad es que creo que glorifica (y, por lo tanto, fomenta) el comportamiento incorrecto. Convierte en "héroes" a la gente de seguridad, como si la gente que no se limita a solucionar los errores normales no fuera tan importante. De hecho, todos los aburridos errores normales son mucho más importantes, simplemente porque hay muchos más. No creo que se deba glorificar o preocuparse por algún agujero de seguridad espectacular como si fuera más "especial" que un espectacular fallo aleatorio debido a un mal bloqueo.

Las distribuciones de Linux suelen publicar actualizaciones de seguridad para corregir vulnerabilidades en el núcleo de Linux. Muchas ofrecen versiones de soporte a largo plazo que reciben actualizaciones de seguridad para una determinada versión del núcleo de Linux durante un período prolongado.

Condiciones de licencia

Inicialmente, Torvalds publicó Linux bajo una licencia que prohibía cualquier uso comercial. [305] Esto cambió en la versión 0.12 con un cambio a la Licencia Pública General GNU versión 2 (GPLv2). [20] Esta licencia permite la distribución y venta de versiones de Linux, tanto modificadas como no modificadas, pero requiere que todas esas copias se publiquen bajo la misma licencia y estén acompañadas por el código fuente completo correspondiente (o que, si se solicita, se dé acceso gratuito al mismo). [306] Torvalds ha descrito el licenciamiento de Linux bajo la GPLv2 como "lo mejor que he hecho en mi vida". [305]

El núcleo Linux está licenciado explícitamente bajo la Licencia Pública General GNU versión 2 únicamente (GPL-2.0-only) con una excepción explícita de llamada al sistema (Linux-syscall-note), [6] [9] [10] sin ofrecer al licenciatario la opción de elegir cualquier versión posterior, que es una extensión común de la GPL. El código contribuido debe estar disponible bajo una licencia compatible con la GPL . [11] [196]

Hubo un debate considerable sobre cuán fácilmente se podría cambiar la licencia para usar versiones posteriores de la GPL (incluida la versión 3), y si este cambio es incluso deseable. [307] El propio Torvalds indicó específicamente en el lanzamiento de la versión 2.4.0 que su propio código se publica solo bajo la versión 2. [308] Sin embargo, los términos de la GPL establecen que si no se especifica ninguna versión, se puede usar cualquier versión, [309] y Alan Cox señaló que muy pocos otros contribuyentes a Linux habían especificado una versión particular de la GPL. [310]

En septiembre de 2006, una encuesta a 29 programadores clave del kernel indicó que 28 preferían la GPLv2 al borrador vigente de la GPLv3. Torvalds comentó: "Creo que varios forasteros... creían que yo personalmente era el extraño porque públicamente no he sido un gran fan de la GPLv3". [311] Este grupo de desarrolladores de kernel de alto perfil, incluidos Torvalds, Greg Kroah-Hartman y Andrew Morton , comentaron en los medios de comunicación sus objeciones a la GPLv3. [312] Hicieron referencia a cláusulas relacionadas con DRM / tivoización , patentes, "restricciones adicionales" y advirtieron sobre una balcanización del "Universo de Código Abierto" por la GPLv3. [312] [313] Torvalds, que decidió no adoptar la GPLv3 para el kernel de Linux, reiteró sus críticas incluso años después. [314]

Módulos de kernel cargables

Se debate si algunos módulos de kernel cargables (LKM) deben considerarse trabajos derivados según la ley de derechos de autor y, por lo tanto, si caen o no bajo los términos de la GPL.

De acuerdo con las reglas de la licencia, los LKM que utilizan solo un subconjunto público de las interfaces del núcleo [221] [222] son ​​trabajos no derivados, por lo que Linux brinda a los administradores del sistema los mecanismos para cargar objetos binarios fuera del árbol en el espacio de direcciones del núcleo. [11]

Hay algunos módulos cargables fuera del árbol que hacen un uso legítimo de la característica del kernel dma_buf . [315] El código compatible con GPL ciertamente puede usarlo. Sin embargo, un posible caso de uso diferente sería Nvidia Optimus que combina una GPU rápida con una GPU integrada de Intel, donde la GPU de Nvidia escribe en el framebuffer de Intel cuando está activo. Pero, Nvidia no puede usar esta infraestructura porque necesita eludir una regla que solo puede ser utilizada por LKM que también son GPL. [223] Alan Cox respondió en LKML , rechazando una solicitud de uno de los ingenieros de Nvidia para eliminar esta aplicación técnica de la API. [316] Torvalds afirmó claramente en LKML que "[Afirmo] que los módulos de kernel solo binarios SON derivados "por defecto"'". [317]

Por otra parte, Torvalds también ha dicho que "[una] zona gris en particular es algo así como un controlador que fue escrito originalmente para otro sistema operativo (es decir, claramente no un trabajo derivado de Linux en su origen). ESA es un área gris, y _esa_ es el área donde personalmente creo que algunos módulos pueden ser considerados como no trabajos derivados simplemente porque no fueron diseñados para Linux y no dependen de ningún comportamiento especial de Linux". [318] Los controladores de gráficos propietarios , en particular, son ampliamente discutidos.

Cada vez que se cargan módulos propietarios en Linux, el núcleo se marca a sí mismo como "contaminado" [319] y, por lo tanto, los informes de errores de núcleos contaminados a menudo serán ignorados por los desarrolladores.

Blobs binarios de firmware

El kernel oficial, que es la rama git de Linus en el repositorio kernel.org, contiene blobs binarios publicados bajo los términos de la licencia GNU GPLv2. [6] [11] Linux también puede buscar sistemas de archivos para localizar blobs binarios, firmware propietario, controladores u otros módulos ejecutables, y luego puede cargarlos y vincularlos al espacio del kernel. [320]

Cuando es necesario (por ejemplo, para acceder a dispositivos de arranque o para mayor velocidad), el firmware se puede integrar al kernel, lo que significa integrar el firmware en vmlinux ; sin embargo, esta no siempre es una opción viable por cuestiones técnicas o legales (por ejemplo, no está permitido hacer esto con firmware que no sea compatible con GPL, aunque esto es bastante común de todos modos). [321]

Marca

Linux es una marca registrada de Linus Torvalds en los Estados Unidos, la Unión Europea y algunos otros países. [322] [323] Una batalla legal por la marca registrada comenzó en 1996, cuando William Della Croce, un abogado que nunca estuvo involucrado en el desarrollo de Linux, comenzó a solicitar tarifas de licencia para el uso de la palabra Linux . Después de que se demostró que la palabra era de uso común mucho antes del primer uso reclamado por Della Croce, la marca registrada fue otorgada a Torvalds. [324] [325] [326]

Véase también

Notas

  1. ^ En general, el código fuente de Linux se proporciona bajo los términos de la licencia GPL-2.0-only con una excepción explícita de llamada al sistema. [9] [10] Además de eso, los archivos individuales se pueden proporcionar bajo una licencia diferente que debe ser compatible con la licencia GPL-2.0-only (es decir, la Licencia Pública General GNU versión 2) o una licencia dual, siendo una de las opciones la GPL versión 2 o una licencia compatible con GPLv2. [11]

Referencias

  1. ^ "Logotipos y mascotas de Linux". Linux Online. 2008. Archivado desde el original el 15 de agosto de 2010. Consultado el 11 de agosto de 2009 .
  2. ^ Greg Kroah-Hartman (30 de septiembre de 2024). «Linux 6.11.1» . Consultado el 30 de septiembre de 2024 .
  3. ^ Linus Torvalds (29 de septiembre de 2024). «Linux 6.12-rc1» . Consultado el 29 de septiembre de 2024 .
  4. ^ Bergmann, Arnd (3 de marzo de 2022). "Kbuild: mover a -std=gnu11". git.kernel.org .
  5. ^ ab Proven, Liam. "Linux 6.1: Rust llegará al núcleo principal". The Register . Consultado el 12 de mayo de 2023 .
  6. ^ abcd "COPIANDO". git.kernel.org . Archivado desde el original el 2 de septiembre de 2021 . Consultado el 2 de septiembre de 2021 .
  7. ^ "GPL-2.0-only". spdx.org . Consultado el 2 de septiembre de 2021 .
  8. ^ "Linux-syscall-note". spdx.org . Consultado el 2 de septiembre de 2021 .
  9. ^ desde "GPL-2.0". git.kernel.org .
  10. ^ ab "Nota de llamada al sistema de Linux". git.kernel.org .
  11. ^ abcdef «Reglas de licencias del kernel de Linux: documentación del kernel de Linux». www.kernel.org . Archivado desde el original el 7 de marzo de 2020 . Consultado el 6 de enero de 2020 .
  12. ^ abcdefghijklmn Love, Robert (2010). Desarrollo del núcleo de Linux (3.ª ed.). Upper Saddle River, Nueva Jersey: Addison-Wesley . ISBN 978-0-672-32946-3.OCLC 268788260  .
  13. ^ "Extensiones de C (utilizando la colección de compiladores GNU (GCC))". gcc.gnu.org . Archivado desde el original el 20 de noviembre de 2020 . Consultado el 13 de noviembre de 2020 .
  14. ^ ab Richardson, Marjorie (1 de noviembre de 1999). "Entrevista: Linus Torvalds". Linux Journal. Archivado desde el original el 14 de mayo de 2011. Consultado el 20 de agosto de 2009 .
  15. ^ ab Torvalds, Linus Benedict (26 de agosto de 1991). "¿Qué es lo que más le gustaría ver en minix?". Grupo de noticias : comp.os.minix. Usenet:  1991Aug25.205708.9541@klaava.Helsinki.FI. Archivado desde el original el 9 de mayo de 2013. Consultado el 14 de septiembre de 2016 .
  16. ^ ab Welsh, Matt; Dalheimer, Matthias Kalle; Kaufman, Lar (1999). "1: Introducción a Linux". Running Linux (3.ª ed.). Sebastopol, California: O'Reilly Media, Inc. pág. 5. ISBN 1-56592-976-4.OCLC 50638246  .
  17. ^ "Fuentes de kernel gratuitas similares a minix para 386-AT - Grupos de Google". groups.google.com . 5 de octubre de 1991. Archivado desde el original el 1 de marzo de 2021 . Consultado el 19 de marzo de 2020 .
  18. ^ Williams, Sam (marzo de 2002). "Capítulo 9: La licencia pública general de GNU". Libre como en libertad: la cruzada de Richard Stallman por el software libre . O'Reilly . ISBN 0-596-00287-4. Recuperado el 12 de noviembre de 2010 .
  19. ^ abc Christine Bresnahan y Richard Blum (2016). LPIC-2: Guía de estudio para la certificación del Linux Professional Institute: Examen 201 y Examen 202. John Wiley & Sons. pág. 107. ISBN 9781119150794.
  20. ^ ab Torvalds, Linus . "Notas de la versión de Linux v0.12". Archivos del núcleo de Linux. Archivado desde el original el 19 de agosto de 2007 . Consultado el 21 de febrero de 2007 .
  21. ^ Fred Hantelmann (2016). Guía de inicio de LINUX: una introducción independiente . Springer Science & Business Media. pág. 1. ISBN 9783642607493.
  22. ^ abc Fred Hantelmann (2016). Guía de inicio de LINUX: una introducción independiente . Springer Science & Business Media. pág. 16. ISBN 9783642607493.
  23. ^ Summers, David W. (19 de enero de 1992). "Problemas con particiones". Grupo de noticias : alt.os.linux. Usenet:  1992Jan19.085628.18752@cseg01.uark.edu. Archivado desde el original el 2 de junio de 2013. Consultado el 7 de enero de 2007 .
  24. ^ Clegg, Alan B. (31 de marzo de 1992). "It's here!". Grupo de noticias : comp.os.linux. Usenet:  1992Mar31.131811.19832@rock.concert.net. Archivado desde el original el 2 de junio de 2013. Consultado el 7 de enero de 2007 .
  25. ^ "Apéndice A: El debate Tanenbaum-Torvalds". Fuentes abiertas: voces de la revolución del código abierto . O'Reilly . 1999. ISBN 1-56592-582-3. Consultado el 22 de noviembre de 2006 .
  26. ^ Tanenbaum, Andy (29 de enero de 1992). "LINUX está obsoleto". Grupo de noticias : comp.os.minix. Usenet:  12595@star.cs.vu.nl. Archivado desde el original el 17 de octubre de 2011. Consultado el 10 de mayo de 2006 .
  27. ^ Tanenbaum, Andy (12 de mayo de 2006). «Tanenbaum-Torvalds Debate: Part II». Universidad VU de Ámsterdam . Archivado desde el original el 5 de agosto de 2015. Consultado el 6 de enero de 2007 .
  28. ^ Hayward, David (22 de noviembre de 2012). «La historia de Linux: cómo el tiempo ha moldeado al pingüino». TechRadar . Archivado desde el original el 19 de marzo de 2020. Consultado el 19 de marzo de 2020 .
  29. ^ Hayward, David (22 de noviembre de 2012). «La historia de Linux: cómo el tiempo ha moldeado al pingüino». TechRadar . Archivado desde el original el 19 de marzo de 2020. Consultado el 26 de marzo de 2020 .
  30. ^ abc Christine Bresnahan y Richard Blum (2016). LPIC-2: Guía de estudio para la certificación del Linux Professional Institute: Examen 201 y Examen 202. John Wiley & Sons. pág. 108. ISBN 9781119150794.
  31. ^ Torvalds, Linus (9 de junio de 1996). «Linux 2.0 realmente _está_ disponible». LKML (lista de correo). Archivado desde el original el 2 de abril de 2015. Consultado el 8 de marzo de 2015 .
  32. ^ ab "Sistema de compilación del kernel: la documentación del kernel de Linux". Kernel.org . Archivado desde el original el 22 de julio de 2020 . Consultado el 17 de julio de 2020 .
  33. ^ ab "Kconfig make config — La documentación del kernel de Linux". Kernel.org . Archivado desde el original el 17 de julio de 2020 . Consultado el 13 de septiembre de 2020 .
  34. ^ Torvalds, Linus (20 de enero de 1999). «2.2.0-final». LKML (lista de correo). Archivado desde el original el 2 de abril de 2015. Consultado el 8 de marzo de 2015 .
  35. ^ ab "El maravilloso mundo de Linux 2.2". 26 de enero de 1999. Archivado desde el original el 6 de noviembre de 2014. Consultado el 27 de octubre de 2008 .
  36. ^ "Observaciones y notas sobre Linux/390". linuxvm.org . Archivado desde el original el 26 de febrero de 2019 . Consultado el 29 de marzo de 2020 .
  37. ^ Torvalds, Linus (4 de enero de 2001). "Y, ah, por cierto". LKML (lista de correo). Archivado desde el original el 26 de enero de 2016. Consultado el 8 de marzo de 2015 .
  38. ^ "El maravilloso mundo de Linux 2.4". Archivado desde el original el 17 de marzo de 2005. Consultado el 27 de octubre de 2008 .
  39. ^ Torvalds, Linus (17 de diciembre de 2003). «Linux 2.6.0». LKML (lista de correo). Archivado desde el original el 2 de abril de 2015. Consultado el 28 de febrero de 2015 .
  40. ^ "proc(5) - Página del manual de Linux" (véase /proc/sys/kernel/pid_max). Archivado desde el original el 7 de febrero de 2014 . Consultado el 19 de febrero de 2014 .
  41. ^ "btrfs Wiki". btrfs.wiki.kernel.org . Archivado desde el original el 25 de abril de 2012 . Consultado el 17 de julio de 2020 .
  42. ^ Fred Hantelmann (2016). Guía de inicio de LINUX: una introducción independiente . Springer Science & Business Media. págs. 1–2. ISBN 9783642607493.
  43. ^ Lista de correo del kernel de Linux (17 de junio de 2005). «Linux 2.6.12». git-commits-head (Lista de correo). Archivado desde el original el 26 de enero de 2016 . Consultado el 23 de enero de 2008 .
  44. ^ Kroah-Hartman, Greg (3 de agosto de 2006). «Adrian Bunk se hace cargo de la rama estable 2.6.16». LKML (lista de correo). Archivado desde el original el 26 de enero de 2016. Consultado el 21 de febrero de 2015 .
  45. ^ Rothwell, Stephen (12 de febrero de 2008). «Anuncio: Linux-next (o el sueño de Andrew :-))». LKML (lista de correo). Archivado desde el original el 24 de noviembre de 2010. Consultado el 30 de octubre de 2010 .
  46. ^ Corbet, Jonathan (21 de octubre de 2010). «Linux-Next y el proceso de gestión de parches». LWN.net . Eklektix, Inc. Archivado desde el original el 21 de junio de 2010. Consultado el 30 de octubre de 2010 .
  47. ^ "Los archivos del núcleo de Linux". Kernel.org. Archivado desde el original el 30 de enero de 1998. Consultado el 22 de enero de 2014 .
  48. ^ "Añadir una personalidad para informar los números de versión 2.6.x [LWN.net]". lwn.net . Archivado desde el original el 16 de julio de 2020 . Consultado el 15 de julio de 2020 .
  49. ^ ab Torvalds, Linus (21 de julio de 2011). «Lanzamiento de Linux 3.0». Lista de correo del kernel de Linux . Archivado desde el original el 18 de octubre de 2019. Consultado el 16 de mayo de 2013 .
  50. ^ Torvalds, Linus (30 de mayo de 2011). «Linux 3.0-rc1». LKML (lista de correo). Archivado desde el original el 31 de mayo de 2011. Consultado el 1 de julio de 2013 .
  51. ^ Torvalds, Linus (10 de abril de 2001). "Re: [PATCH] i386 rw_semaphores fix". yarchive.net . Consultado el 26 de mayo de 2024 .
  52. ^ Vaughan-Nichols, Steven J. (13 de diciembre de 2012). "Adiós 386: Linux dejará de ofrecer soporte para chips i386 en el próximo lanzamiento principal". ZDNet . CBS Interactive . Archivado desde el original el 17 de febrero de 2015 . Consultado el 6 de febrero de 2013 .
  53. ^ Fingas, Jon (15 de diciembre de 2012). "Linux dejará de ofrecer compatibilidad con i386 en el kernel 3.8, lo que nos obliga a actualizar nuestro sistema Doom". Engadget . AOL . Archivado desde el original el 2 de abril de 2015 . Consultado el 22 de marzo de 2015 .
  54. ^ Vaughan-Nichols, Steven J. (11 de diciembre de 2012). «Llega Linux 3.7, los desarrolladores de ARM se regocijan». ZDNet . CBS Interactive . Archivado desde el original el 5 de noviembre de 2014 . Consultado el 6 de febrero de 2013 .
  55. ^ Torvalds, Linus (12 de abril de 2015). «Lanzamiento de Linux 4.0». LKML (lista de correo). Archivado desde el original el 13 de abril de 2015. Consultado el 12 de abril de 2015 .
  56. ^ Torvalds, Linus (2 de septiembre de 2013). «Linux 3.11». LKML (lista de correo). Archivado desde el original el 26 de febrero de 2014. Consultado el 3 de septiembre de 2013 .
  57. ^ "Linux 3.11". kernelnewbies.org. 2 de septiembre de 2013. Consultado el 21 de enero de 2014 .
  58. ^ "La Fundación Linux publica un informe sobre el desarrollo de Linux". Fundación Linux . 18 de febrero de 2015. Archivado desde el original el 19 de julio de 2016 . Consultado el 20 de febrero de 2015 .
  59. ^ Michael Larabel (23 de junio de 2014). «El núcleo de Linux, con 19,5 millones de líneas de código, sigue creciendo». Phoronix . Archivado desde el original el 23 de noviembre de 2020 . Consultado el 23 de junio de 2015 .
  60. ^ ab Torvalds, Linus (3 de marzo de 2019). «Linus Torvalds: Linux 5.0». LKML . Archivado desde el original el 25 de agosto de 2024 . Consultado el 25 de agosto de 2024 .
  61. ^ Prakash, Abhishek (11 de enero de 2023). "¡Lanzamiento del kernel 5.0 de Linux! Consulta las nuevas características". Es FOSS . Consultado el 25 de agosto de 2024 .{{cite news}}: CS1 maint: url-status (link)
  62. ^ Larabel, Micheal (6 de enero de 2019). "Las numerosas nuevas características y mejoras del núcleo Linux 5.0". www.phoronix.com . Consultado el 25 de agosto de 2024 .
  63. ^ Corbet, Jonathan (3 de agosto de 2020). «Algunas estadísticas del ciclo del kernel 5.8». LWN - Linux Weekly News . Archivado desde el original el 4 de septiembre de 2020. Consultado el 11 de agosto de 2020 .
  64. ^ "Stack Overflow Developer Survey 2019 - most popular technology" (Encuesta para desarrolladores de Stack Overflow 2019: las tecnologías más populares). Stack Overflow . Archivado desde el original el 8 de octubre de 2020 . Consultado el 17 de marzo de 2020 .
  65. ^ "Stack Overflow Developer Survey 2019 - entornos y herramientas de desarrollo". Stack Overflow . Archivado desde el original el 7 de marzo de 2020 . Consultado el 17 de marzo de 2020 .
  66. ^ "Estadísticas de uso y cuota de mercado de sistemas operativos para sitios web, marzo de 2020". w3techs.com . Consultado el 17 de marzo de 2020 .
  67. ^ "Estadísticas de uso y cuota de mercado de Unix para sitios web, marzo de 2020". w3techs.com . Consultado el 17 de marzo de 2020 .
  68. ^ "TOP500 Supercomputer Sites: Operating system Family / Linux" (Sitios TOP500 de supercomputadoras: Familia de sistemas operativos / Linux). Top500.org. Archivado desde el original el 19 de noviembre de 2012. Consultado el 5 de octubre de 2019 .
  69. ^ "Gartner afirma que las ventas de tabletas representarán menos del 10 por ciento de todos los dispositivos en 2014" (nota de prensa). Egham, Reino Unido : Gartner . 15 de octubre de 2014. Archivado desde el original el 17 de octubre de 2014. Consultado el 19 de octubre de 2014 .
  70. ^ Lunden, Ingrid (15 de octubre de 2014). «Tablet Sales Growth Plummets In 2014 As Android Smartphones Continue To Soar: Gartner». TechCrunch . AOL . Archivado desde el original el 23 de octubre de 2014 . Consultado el 23 de octubre de 2014 .
  71. ^ "Los envíos globales de PC superan las previsiones con una leve mejora en la demanda de los consumidores, mientras que Apple pasa al quinto puesto, según IDC" (Comunicado de prensa). Framingham, MA : IDC . 8 de octubre de 2014. Archivado desde el original el 11 de octubre de 2014 . Consultado el 19 de octubre de 2014 .
  72. ^ Wheeler, David A. "Linux Kernel 2.6: ¡Vale más!". Archivado desde el original el 20 de agosto de 2011. Consultado el 18 de enero de 2007 .
  73. ^ "Impacto económico del software libre en la innovación y la competitividad del sector de las TIC de la UE" (PDF) (Tabla 3 en la página 50). Archivado (PDF) desde el original el 15 de febrero de 2010 . Consultado el 8 de enero de 2011 .
  74. ^ "Estimación del costo total de desarrollo de una distribución Linux" (PDF) (Tabla en la página 6). Archivado desde el original (PDF) el 11 de julio de 2010.
  75. ^ "El kernel de mil millones de dólares". Linux.slashdot.org. 24 de febrero de 2010. Archivado desde el original el 15 de mayo de 2011. Consultado el 12 de noviembre de 2010 .
  76. ^ Wheeler, David. "El núcleo Linux: ¡vale más!". Archivado desde el original el 24 de febrero de 2021. Consultado el 17 de septiembre de 2012 .
  77. ^ "Los archivos del núcleo de Linux". www.kernel.org . Consultado el 28 de febrero de 2023 .
  78. ^ ab "Estado del desarrollo del kernel de Linux en 2017". The Linux Foundation . 25 de octubre de 2017. Archivado desde el original el 27 de mayo de 2020. Consultado el 27 de mayo de 2020 .
  79. ^ "Por qué dejé el kernel: el desarrollador del kernel Con Kolivas". Revista APC . Revistas ACP. 24 de julio de 2007. Archivado desde el original el 7 de julio de 2011. Consultado el 15 de agosto de 2011 .
  80. ^ Corbet, Jonathan (25 de julio de 2007). "Re: planes de fusión de -mm para 2.6.23". LWN.net. Archivado desde el original el 11 de febrero de 2018. Consultado el 10 de febrero de 2018 .
  81. ^ Cox, Alan (28 de julio de 2009). «Re: [PATCH] kdesu no funciona». Archivado desde el original el 11 de febrero de 2018. Consultado el 10 de febrero de 2018 .
  82. ^ Rodrigues, Goldwyn (22 de enero de 2011). «Una historia de dos objetivos SCSI». Archivado desde el original el 15 de febrero de 2018. Consultado el 14 de febrero de 2018 .
  83. ^ Steinmetz, Andreas (17 de enero de 2013). «LIO: la implementación de destino iSCSI fallida». Archivado desde el original el 15 de febrero de 2018. Consultado el 14 de febrero de 2018 .
  84. ^ Paul, Ryan (19 de junio de 2012). «Linus Torvalds le dice "que se jodan" a NVIDIA». Archivado desde el original el 15 de febrero de 2018. Consultado el 14 de febrero de 2018 .
  85. ^ John Gold (3 de abril de 2014). «Linus Torvalds suspende a un desarrollador clave de Linux: pánico en el kernel mientras un desarrollador de Systemd se entromete». Archivado desde el original el 24 de marzo de 2019. Consultado el 24 de marzo de 2019 .
  86. ^ Poettering, Lennart (6 de octubre de 2014). "Sobre la enfermedad de la comunidad del núcleo Linux". Google+ . Archivado desde el original el 27 de mayo de 2018 . Consultado el 10 de febrero de 2018 .
  87. ^ Brodkin, Jon (6 de marzo de 2015). «VMware presuntamente ha violado la licencia de código abierto de Linux durante años». Ars Technica . Archivado desde el original el 15 de febrero de 2018. Consultado el 14 de febrero de 2018 .
  88. ^ McCarthy, Kieren (26 de agosto de 2016). «Tras haber ofendido a todos los demás en el mundo, Linus Torvalds llama a sus propios abogados una 'enfermedad purulenta y desagradable'». The Register . Archivado desde el original el 15 de febrero de 2018. Consultado el 14 de febrero de 2018 .
  89. ^ Kroah-Hartman, Greg. "[PATCH 000/190] Reversión de todas las confirmaciones de umn.edu". Archivo de listas de correo del kernel de Linux . Consultado el 13 de enero de 2022 .
  90. ^ Chin, Monica (30 de abril de 2021). «Cómo una universidad se vio excluida del núcleo Linux». The Verge . Consultado el 13 de enero de 2022 .
  91. ^ Corbet, Jonathan (10 de septiembre de 2007). «KS2007: Developer relationships and development process». LWN.net . Archivado desde el original el 12 de febrero de 2018. Consultado el 11 de febrero de 2018 .
  92. ^ Brodkin, Jon (16 de julio de 2013). «Linus Torvalds defiende su derecho a avergonzar a los desarrolladores del kernel de Linux». ARS Technica . Archivado desde el original el 17 de febrero de 2018. Consultado el 11 de febrero de 2018 .
  93. ^ Corbet, Jonathan (9 de marzo de 2015). «El código de conflicto del núcleo». LWN.net . Archivado desde el original el 12 de febrero de 2018. Consultado el 11 de febrero de 2018 .
  94. ^ Corbet, Jonathan (18 de septiembre de 2018). «Código, conflicto y conducta». LWN.net . Archivado desde el original el 19 de septiembre de 2018. Consultado el 19 de septiembre de 2018 .
  95. ^ Cohen, Noam (19 de septiembre de 2018). «Tras años de correos electrónicos abusivos, el creador de Linux se hace a un lado». The New Yorker . Archivado desde el original el 20 de febrero de 2020. Consultado el 24 de septiembre de 2018 .
  96. ^ Larabel, Michael. "Eliminar blasfemias en los comentarios del código del núcleo: Linux recibe "abrazos"". Phoronix . Archivado desde el original el 21 de abril de 2019 . Consultado el 15 de junio de 2019 .
  97. ^ "Código de conflicto" . Consultado el 4 de febrero de 2018 .[ enlace muerto permanente ]
  98. ^ Sharwood, Simon (6 de octubre de 2015). «El desarrollador del kernel de Linux que pidió a Linus Torvalds que dejara de recibir insultos dimite por insultos verbales». The Register . Archivado desde el original el 29 de marzo de 2020. Consultado el 4 de febrero de 2018 .
  99. ^ Edge, Jake (31 de enero de 2018). «Demasiados señores, no suficientes mayordomos». LWN.net . Archivado desde el original el 9 de noviembre de 2020. Consultado el 4 de febrero de 2018 .
  100. ^ Corbet, Jonathan (6 de noviembre de 2017). "Bash the kernel maintainers" (Ataquemos a los mantenedores del núcleo). LWN.net . Archivado desde el original el 26 de enero de 2021. Consultado el 4 de febrero de 2018 .
  101. ^ "Linux Evolution" (PDF) . 26 de marzo de 2008. Archivado (PDF) desde el original el 14 de diciembre de 2013. Consultado el 6 de noviembre de 2013 .
  102. ^ "Desarrollo perpetuo: un modelo del ciclo de vida del núcleo de Linux" (PDF) . 25 de octubre de 2011. Archivado (PDF) desde el original el 17 de octubre de 2013 . Consultado el 6 de noviembre de 2013 .
  103. ^ Kroah-Hartman, Greg (12 de febrero de 2008). "Re: Announce: Linux-next (Or Andrew's dream :-))". Lista de correo del kernel de Linux (Lista de correo). Archivado desde el original el 2 de febrero de 2017 . Consultado el 30 de enero de 2017 .
  104. ^ Robert Love (2010). Desarrollo del núcleo de Linux: Desarrollo del núcleo de Linux . Pearson Education. pág. 11. ISBN 9780768696790.
  105. ^ Robert Love (2010). Desarrollo del núcleo de Linux: Desarrollo del núcleo de Linux . Pearson Education. pág. 12. ISBN 9780768696790.
  106. ^ "Cómo funciona el proceso de desarrollo". Archivado desde el original el 9 de diciembre de 2017. Consultado el 4 de febrero de 2018 .
  107. ^ Robert Love (2010). Desarrollo del núcleo de Linux: Desarrollo del núcleo de Linux . Pearson Education. pág. 13. ISBN 9780768696790.
  108. ^ "Código de conducta del Contributor Covenant". La documentación del kernel de Linux . Consultado el 6 de octubre de 2021 .
  109. ^ "Interpretación del Código de conducta del Pacto de colaboradores del kernel de Linux". La documentación del kernel de Linux . Consultado el 6 de octubre de 2021 .
  110. ^ Williams, Dan. "[PATCH] CodingStyle: Terminología inclusiva". Lista de correo del kernel de Linux .
  111. ^ Tim Anderson. "El compilador mínimo del núcleo Linux se ha elevado a GCC 5.1, lo que permite el uso potencial de C11". The Register . Consultado el 12 de mayo de 2023 .
  112. ^ Larabel, Michael. "Se ha realizado el cambio de C89 a C11/GNU11 con Linux 5.18". www.phoronix.com . Consultado el 12 de mayo de 2023 .
  113. ^ Sharwood, Simon (11 de diciembre de 2022). «Linus Torvalds revela el kernel de Linux 6.1». The Register . Consultado el 12 de mayo de 2023 .
  114. ^ Corbet, Jonathan. "Rust in the 6.2 kernel". LWN.net. Retrieved 12 May 2023.
  115. ^ Larabel, Michael. "More Rust Code Readied For Linux 6.3 - Closer To Having Rust Drivers Upstreamed". Phoronix. Retrieved 12 May 2023.
  116. ^ "HOWTO do Linux kernel development — The Linux Kernel documentation". Kernel.org. Archived from the original on 7 March 2020. Retrieved 4 January 2020.
  117. ^ "Linux kernel coding style — The Linux Kernel documentation". Kernel.org. Archived from the original on 5 January 2020. Retrieved 4 January 2020.
  118. ^ a b "How the development process works — The Linux Kernel documentation". Kernel.org. Archived from the original on 9 December 2017. Retrieved 26 March 2020.
  119. ^ Kubbilun, Ingo A. (2 June 2004). "Linux kernel patch for Intel Compiler" (in German). Pyrillion.org. Archived from the original on 22 July 2011. Retrieved 12 November 2010.
  120. ^ timothy (26 February 2009). "High Performance Linux Kernel Project — LinuxDNA". Slashdot Linux. Dice Holdings. Archived from the original on 18 October 2019. Retrieved 30 October 2010.
  121. ^ Ryan, Justin (25 February 2009). "LinuxDNA Supercharges Linux with the Intel C/C++ Compiler". Linux Journal. Belltown Media, Inc. Archived from the original on 9 November 2020. Retrieved 30 October 2010.
  122. ^ Larabel, Michael (5 March 2023). "Linux 6.3 Drops Support For The Intel ICC Compiler". Phoronix. Retrieved 6 March 2023.
  123. ^ Lelbach, Bryce (25 October 2010). "Clang builds a working Linux Kernel (Boots to RL5 with SMP, networking and X, self hosts)". cfe-dev (Mailing list). Archived from the original on 7 September 2015.
  124. ^ Larabel, Michael (12 April 2014). "Linux 3.15 Can Almost Be Compiled Under LLVM's Clang". Phoronix. Archived from the original on 13 August 2020. Retrieved 10 June 2014.
  125. ^ Larabel, Michael. "Patch By Patch, LLVM Clang Gets Better At Building The Linux Kernel". Phoronix. Archived from the original on 13 August 2020. Retrieved 20 November 2014.
  126. ^ Edge, Jake (7 May 2013). "LFCS: The LLVMLinux project". LWN.net. Archived from the original on 10 August 2020. Retrieved 3 March 2015.
  127. ^ Möller, Jan-Simon (2 February 2014). "LLVMLinux: The Linux Kernel with Dragon Wings" (PDF). LLVM Project. Archived (PDF) from the original on 3 August 2020. Retrieved 3 March 2015.
  128. ^ Desaulniers, Nick; Hackmann, Greg; Hines, Stephen (18 October 2017). "2017 LLVM Developers' Meeting: Compiling Android userspace and Linux kernel with LLVM". YouTube. Archived from the original on 31 December 2020. Retrieved 7 December 2020.
  129. ^ Hackmann, Greg (2 February 2017). "marlin-nougat-mr1-clang Patch Series". Archived from the original on 10 December 2020. Retrieved 6 December 2020.
  130. ^ Kaehlcke, Matthias (22 October 2018). "cros-kernel2: Make clang the default compiler for kernel builds". Archived from the original on 10 December 2020. Retrieved 6 December 2020.
  131. ^ Larabel, Michael (4 February 2019). "Using LLVM Clang To Compile The Linux Kernel Is Heating Up Again Thanks To Google". Phoronix. Archived from the original on 25 November 2020. Retrieved 6 December 2020.
  132. ^ Desaulniers, Nick (10 December 2019). "vts: kernel: enforce vts_kernel_toolchain for all TARGET_ARCH for R". Archived from the original on 10 December 2020. Retrieved 6 December 2020.
  133. ^ Desaulniers, Nick (19 November 2020). "Re: violating function pointer signature". LKML. Retrieved 6 December 2020.
  134. ^ Bradford, John (8 March 2003). "Re: what's an OOPS". LKML (Mailing list). Archived from the original on 31 October 2014. Retrieved 30 October 2010.
  135. ^ "syslog(2) - Linux manual page". man7.org. Archived from the original on 13 October 2020. Retrieved 15 August 2020.
  136. ^ "kmsg: export printk records to the /dev/kmsg interface [LWN.net]". lwn.net. Archived from the original on 2 October 2015. Retrieved 16 August 2020.
  137. ^ See what your computer is doing with Ftrace utilities, 24 January 2019, archived from the original on 15 December 2021, retrieved 9 May 2021
  138. ^ "Debugging the kernel using Ftrace - part 1 [LWN.net]". lwn.net. Archived from the original on 9 November 2020. Retrieved 15 September 2020.
  139. ^ "Debugging the kernel using Ftrace - part 2 [LWN.net]". lwn.net. Archived from the original on 31 March 2020. Retrieved 15 September 2020.
  140. ^ "ftrace - Function Tracer — The Linux Kernel documentation". Kernel.org. Archived from the original on 19 September 2020. Retrieved 15 September 2020.
  141. ^ "Boot-time tracing — The Linux Kernel documentation". Kernel.org. Archived from the original on 31 October 2020. Retrieved 19 September 2020.
  142. ^ "Kernel Probes (Kprobes) — The Linux Kernel documentation". Kernel.org. Archived from the original on 11 October 2020. Retrieved 6 October 2020.
  143. ^ "Uprobe-tracer: Uprobe-based Event Tracing — The Linux Kernel documentation". Kernel.org. Archived from the original on 4 December 2020. Retrieved 6 October 2020.
  144. ^ "Using kgdb, kdb and the kernel debugger internals". mirrors.edge.kernel.org. Archived from the original on 26 January 2021. Retrieved 3 November 2020.
  145. ^ Gene Sally (2010). Pro Linux Embedded Systems. Apress. p. 252. ISBN 9781430272267.
  146. ^ Billimoria, Kaiwan N. (2021). Linux Kernel Programming A Comprehensive Guide to Kernel Internals, Writing Kernel Modules, and Kernel Synchronization. Birmingham: Packt Publishing, Limited. p. 55. ISBN 978-1-78995-592-7. OCLC 1240585605.
  147. ^ Vaduva, Alexandru; Gonzalez, Alex; Simmonds, Chris (2016). Linux : embedded development : leverage the power of Linux to develop captivating and powerful embedded Linux projects : a course in three modules. Birmingham, UK: Packt Publishing. p. 663. ISBN 978-1-78712-445-5. OCLC 960471438.
  148. ^ Karim Yaghmour (2008). Building built-in Linux systems (2.ª ed.). Sebastopol [California]: O'Reilly Media. pág. 387. ISBN 978-0-596-52968-0.OCLC 273049576  .
  149. ^ Yaghmour, Karim (2011). Android integrado. Sebastopol, CA: O'Reilly Media. pág. 44. ISBN 978-1-4493-2798-9.OCLC 812180000  .
  150. ^ "SoC (System on a Chip)". Wiki OpenWrt . 6 de noviembre de 2014. Archivado desde el original el 23 de agosto de 2022 . Consultado el 15 de marzo de 2021 .
  151. ^ "Qué hacer con los números CVE [LWN.net]". lwn.net . Consultado el 15 de marzo de 2021 .
  152. ^ Amadeo, Ron (20 de noviembre de 2019). «Google describe los planes para la compatibilidad del núcleo Linux principal en Android». Ars Technica . Consultado el 31 de marzo de 2021 .
  153. ^ Bruchon, Jody (24 de abril de 2021), jbruchon/elks , consultado el 27 de abril de 2021
  154. ^ "El estado de preempt-rt". linuxplumbersconf.org . Archivado desde el original el 15 de octubre de 2016 . Consultado el 14 de junio de 2016 .
  155. ^ Meyer, David (3 de febrero de 2010). «Desarrollador de Linux explica la eliminación del código del kernel de Android». ZDNet . CBS Interactive . Archivado desde el original el 15 de octubre de 2016 . Consultado el 3 de febrero de 2010 .
  156. ^ "Capítulo 03: Descripción general de la plataforma maemo". Descripción general de la tecnología maemo . Nokia . 2008. Archivado desde el original el 16 de junio de 2008 . Consultado el 9 de abril de 2010 .
  157. ^ Kroah-Hartman, Greg (2 de febrero de 2010). «Android y la comunidad del núcleo Linux». Archivado desde el original el 27 de abril de 2019. Consultado el 3 de febrero de 2010 .
  158. ^ de Roger Ye (2017). Programación del sistema Android . Packt Publishing. pág. 14. ISBN 9781787120389.
  159. ^ Torvalds, Linus (19 de septiembre de 2001). "Los orígenes de Linux: Linus Torvalds". YouTube . Archivado desde el original el 15 de diciembre de 2021 . Consultado el 6 de diciembre de 2020 .
  160. ^ "Archivo MAINTAINERS de Linux". Archivado desde el original el 12 de enero de 2013.
  161. ^ Alexandru Vaduva, Alex Gonzalez y Chris Simmonds (2016). Linux: Embedded Development . Packt Publishing. pág. 663. ISBN 9781787124455.
  162. ^ "README". git.kernel.org. Archivado desde el original el 24 de julio de 2012. Consultado el 24 de marzo de 2021 .
  163. ^ "KernelBuild - Linux Kernel Newbies". kernelnewbies.org . Archivado desde el original el 19 de octubre de 2020. Consultado el 13 de septiembre de 2020 .
  164. ^ "La interfaz Sysctl". Linux.it . Archivado desde el original el 17 de febrero de 2020 . Consultado el 13 de septiembre de 2020 .
  165. ^ "sysctl(8) - Página del manual de Linux". man7.org . Archivado desde el original el 30 de septiembre de 2020 . Consultado el 13 de septiembre de 2020 .
  166. ^ "procfs(5) - Página del manual de Linux". man7.org . Archivado desde el original el 24 de septiembre de 2020 . Consultado el 13 de septiembre de 2020 .
  167. ^ "sched(7) - Página del manual de Linux". man7.org . Archivado desde el original el 17 de julio de 2020 . Consultado el 27 de julio de 2020 .
  168. ^ "Preguntas frecuentes: Preemption". kernelnewbies.org . 22 de agosto de 2009. Archivado desde el original el 7 de agosto de 2020 . Consultado el 7 de mayo de 2015 .
  169. ^ por Jonathan Corbet (24 de febrero de 2003). «Driver porting: the preemptible kernel» (Portación de controladores: el núcleo preemptible). LWN.net . Archivado desde el original el 10 de agosto de 2020. Consultado el 7 de mayo de 2015 .
  170. ^ "El programador EEVDF se fusionó con Linux 6.6 y se reintrodujo la programación de clústeres híbridos de Intel". Phoronix .
  171. ^ ab Molnár, Ingo (13 de abril de 2007). «[parche] Modular Scheduler Core y Completely Fair Scheduler [CFS]». LKML (lista de correo). Archivado desde el original el 3 de noviembre de 2020. Consultado el 30 de marzo de 2020 .
  172. ^ "Programador completamente justo | Linux Journal". Linuxjournal.com . Archivado desde el original el 3 de agosto de 2020. Consultado el 30 de marzo de 2020 .
  173. ^ "ioctl(2) - Página del manual de Linux". man7.org . Archivado desde el original el 20 de julio de 2020 . Consultado el 11 de agosto de 2020 .
  174. ^ "aio(7) - Página del manual de Linux". man7.org . Archivado desde el original el 12 de abril de 2020 . Consultado el 11 de agosto de 2020 .
  175. ^ "io_setup(2) - Página del manual de Linux". man7.org . Archivado desde el original el 20 de agosto de 2020 . Consultado el 11 de agosto de 2020 .
  176. ^ "KVM". Linux-kvm.org . Archivado desde el original el 28 de marzo de 2020 . Consultado el 29 de marzo de 2020 .
  177. ^ "TechComparison - Linux Virtualization Wiki". Virt.kernelnewbies.org . Archivado desde el original el 3 de agosto de 2020. Consultado el 29 de marzo de 2020 .
  178. ^ "Soporte de virtualización a través de KVM en Linux 2.6.20 - Linux Kernel Newbies". Kernelnewbies.org . Archivado desde el original el 29 de noviembre de 2019. Consultado el 29 de marzo de 2020 .
  179. ^ Coekaerts, Wim. «La línea principal de Linux contiene todos los bits de código Xen para compatibilidad con Dom0 y DomU». blogs.oracle.com . Archivado desde el original el 3 de agosto de 2020. Consultado el 29 de marzo de 2020 .
  180. ^ "Xen celebra el soporte completo de Dom0 y DomU en Linux 3.0 – blog.xen.org". 7 de junio de 2011. Archivado desde el original el 7 de junio de 2011. Consultado el 29 de marzo de 2020 .
  181. ^ Wilk, Konrad Rzeszutek (31 de enero de 2014). «Linux 3.14 y PVH». Proyecto Xen . Archivado desde el original el 29 de marzo de 2020. Consultado el 29 de marzo de 2020 .
  182. ^ "Introducción a la virtualización Xen | Guía de virtualización | openSUSE Leap 15.2". doc.opensuse.org . Archivado desde el original el 28 de septiembre de 2020 . Consultado el 29 de septiembre de 2020 .
  183. ^ "Tecnología de virtualización | Guía de virtualización | openSUSE Leap 15.3". doc.opensuse.org . Consultado el 30 de septiembre de 2021 .
  184. ^ ab "Proyecto SELinux". GitHub . Archivado desde el original el 12 de diciembre de 2019 . Consultado el 10 de enero de 2020 .
  185. ^ ab "AppArmor — La documentación del kernel de Linux". Kernel.org . Archivado desde el original el 8 de mayo de 2020 . Consultado el 10 de enero de 2020 .
  186. ^ Jake Edge (25 de noviembre de 2008). «Dispositivos de caracteres en el espacio de usuario». LWN.net . Archivado desde el original el 26 de enero de 2021. Consultado el 7 de mayo de 2015 .
  187. ^ Jonathan Corbet (2 de mayo de 2007). «UIO: controladores de espacio de usuario». LWN.net . Archivado desde el original el 11 de noviembre de 2020. Consultado el 7 de mayo de 2015 .
  188. ^ abcd «stable-api-nonsense - Árbol de código fuente del kernel de Linux». git.kernel.org . Archivado desde el original el 5 de marzo de 2021 . Consultado el 18 de abril de 2020 .
  189. ^ Gorman, Mel (15 de febrero de 2004). Entender el administrador de memoria virtual de Linux (PDF) . Prentice Hall. p. 26. ISBN 0-13-145348-3. Archivado (PDF) del original el 3 de mayo de 2019 . Consultado el 27 de enero de 2020 .
  190. ^ Greg Ungerer. «Anuncio de la línea principal de uClinux». Archivado desde el original el 31 de octubre de 2007. Consultado el 15 de enero de 2008 .
  191. ^ ab Nguyen, Binh (30 de julio de 2004). «Jerarquía del sistema de archivos de Linux: Capítulo 1. Jerarquía del sistema de archivos de Linux». Proyecto de documentación de Linux. Archivado desde el original el 2 de diciembre de 2020. Consultado el 28 de noviembre de 2012 .
  192. ^ "Guía de administración README". Repositorios git de Kernel.org .
  193. ^ "Linux kernel release 5.x — The Linux Kernel documentation" (Versión 5.x del kernel de Linux: documentación del kernel de Linux). Kernel.org . Archivado desde el original el 7 de marzo de 2020. Consultado el 4 de enero de 2020 .
  194. ^ "README\ABI\Documentation - kernel/git/torvalds/linux.git - Árbol de código fuente del kernel de Linux". git.kernel.org . Archivado desde el original el 1 de octubre de 2020 . Consultado el 18 de abril de 2020 .
  195. ^ "syscalls\stable\ABI\Documentation - kernel/git/torvalds/linux.git - Árbol de código fuente del kernel de Linux". git.kernel.org . Archivado desde el original el 2 de octubre de 2020 . Consultado el 18 de abril de 2020 .
  196. ^ ab "1.Intro.rst - Documentación/proceso/1.Intro.rst - Código fuente de Linux (v5.8) - Bootlin". elixir.bootlin.com . Consultado el 8 de agosto de 2020 .
  197. ^ ab "syscalls". man7 . Archivado desde el original el 15 de enero de 2020 . Consultado el 28 de enero de 2020 .
  198. ^ "intro(2) - Página del manual de Linux". man7.org . Archivado desde el original el 17 de julio de 2020 . Consultado el 16 de julio de 2020 .
  199. ^ "clon". man7.org . Archivado desde el original el 18 de enero de 2020 . Consultado el 28 de enero de 2020 .
  200. ^ "feature_test_macros". man7.org . Archivado desde el original el 19 de enero de 2020 . Consultado el 28 de enero de 2020 .
  201. ^ "vdso(7) - Página del manual de Linux". man7.org . Archivado desde el original el 2 de febrero de 2020 . Consultado el 2 de febrero de 2020 .
  202. ^ ab "futex(2) - Página del manual de Linux". man7.org . Archivado desde el original el 31 de enero de 2020 . Consultado el 2 de febrero de 2020 .
  203. ^ "syscall(2) - Página del manual de Linux". man7.org . Archivado desde el original el 21 de enero de 2020 . Consultado el 2 de febrero de 2020 .
  204. ^ "sysfs(5) - Página del manual de Linux". man7.org . Archivado desde el original el 18 de enero de 2020 . Consultado el 6 de enero de 2020 .
  205. ^ "Reglas sobre cómo acceder a la información en sysfs — La documentación del kernel de Linux". Kernel.org . Archivado desde el original el 7 de marzo de 2020 . Consultado el 6 de enero de 2020 .
  206. ^ "Especificaciones de referencia de Linux Foundation". refspecs.linuxbase.org . Consultado el 3 de febrero de 2020 .
  207. ^ "Especificaciones LSB". refspecs.linuxbase.org . Consultado el 3 de febrero de 2020 .
  208. ^ "Especificación de escritorio base estándar de Linux, parte genérica". refspecs.linuxbase.org . Consultado el 3 de febrero de 2020 .
  209. ^ "Referencias normativas". refspecs.linuxfoundation.org . Archivado desde el original el 12 de agosto de 2020 . Consultado el 3 de febrero de 2020 .
  210. ^ "Especificación básica del estándar Linux, parte genérica". refspecs.linuxfoundation.org . Archivado desde el original el 29 de noviembre de 2019 . Consultado el 3 de febrero de 2020 .
  211. ^ "System V Application Binary Interface - Edition 4.1" (PDF) . Sco.com . Archivado (PDF) del original el 13 de diciembre de 2019 . Consultado el 3 de febrero de 2020 .
  212. ^ "Xinuos Inc. | Desarrolladores | Gabi | 17 de diciembre de 2003 | Interfaz binaria de aplicación de System V - BORRADOR". Sco.com . Archivado desde el original el 3 de febrero de 2020. Consultado el 3 de febrero de 2020 .
  213. ^ "Formato ejecutable y de enlace (ELF)". Refspecs.linuxbase.org . Consultado el 3 de febrero de 2020 .
  214. ^ "elf(5) - Página del manual de Linux". man7.org . Archivado desde el original el 30 de noviembre de 2020 . Consultado el 18 de noviembre de 2020 .
  215. ^ "Especificación básica estándar de Linux para X86-64". Refspecs.linuxbase.org . Consultado el 3 de febrero de 2020 .
  216. ^ "Interfaz binaria de aplicación de System V - BORRADOR". Refspecs.linuxbase.org . Consultado el 3 de febrero de 2020 .
  217. ^ Seyfarth, Ray (2012). Introducción a la programación en lenguaje ensamblador Intel de 64 bits para Linux . CreateSpace Independent Publishing Platform. pág. 170. ISBN 9781478119203.
  218. ^ "Anatomía de una llamada al sistema, parte 1 [LWN.net]". lwn.net . Archivado desde el original el 18 de agosto de 2020 . Consultado el 16 de julio de 2020 .
  219. ^ "Anatomía de una llamada al sistema, parte 2 [LWN.net]". lwn.net . Archivado desde el original el 6 de agosto de 2020 . Consultado el 16 de julio de 2020 .
  220. ^ Deucher, Alex (7 de octubre de 2014). «Nuevo controlador unificado de código abierto de AMD». Fundación X.Org . Archivado desde el original el 21 de enero de 2015. Consultado el 21 de enero de 2015 .
  221. ^ ab "Símbolos - Guía poco fiable para hackear el núcleo de Linux - La documentación del núcleo de Linux". Kernel.org . Archivado desde el original el 3 de agosto de 2020 . Consultado el 8 de febrero de 2020 .
  222. ^ ab «Símbolos exportados y API interna [LWN.net]». Lwn.net . Archivado desde el original el 31 de marzo de 2020 . Consultado el 15 de marzo de 2020 .
  223. ^ ab "Anulación de la exportación de kallsyms_lookup_name() [LWN.net]". Lwn.net . Archivado desde el original el 1 de abril de 2020 . Consultado el 15 de marzo de 2020 .
  224. ^ "Árboles I: Árboles de raíz [LWN.net]". lwn.net . Archivado desde el original el 8 de noviembre de 2020 . Consultado el 13 de noviembre de 2020 .
  225. ^ "Árboles II: árboles rojo-negros [LWN.net]". lwn.net . Archivado desde el original el 13 de noviembre de 2020 . Consultado el 13 de noviembre de 2020 .
  226. ^ "Guía poco fiable para hackear el núcleo de Linux". Kernel.org (1.ª ed.). 2005. Archivado desde el original el 16 de febrero de 2020. Consultado el 15 de marzo de 2020 .
  227. ^ "Guía poco fiable para hackear el núcleo de Linux: la documentación del núcleo de Linux". Kernel.org . Archivado desde el original el 7 de marzo de 2020. Consultado el 15 de marzo de 2020 .
  228. ^ "Guía poco fiable para bloquear: la documentación del núcleo de Linux". Kernel.org . Archivado desde el original el 7 de marzo de 2020. Consultado el 15 de marzo de 2020 .
  229. ^ "Guía de interfaces SCSI: la documentación del núcleo de Linux". Kernel.org . Archivado desde el original el 2 de junio de 2020 . Consultado el 11 de junio de 2020 .
  230. ^ "Guía para desarrolladores de libATA: la documentación del núcleo de Linux". Kernel.org . Archivado desde el original el 30 de mayo de 2020 . Consultado el 11 de junio de 2020 .
  231. ^ "DRM Internals — The Linux Kernel documentation" (Información interna de DRM: la documentación del kernel de Linux). Kernel.org . Archivado desde el original el 1 de junio de 2020. Consultado el 11 de junio de 2020 .
  232. ^ "Configuración del modo kernel (KMS) — La documentación del kernel de Linux". Kernel.org . Archivado desde el original el 11 de junio de 2020 . Consultado el 11 de junio de 2020 .
  233. ^ "Introducción del mecanismo de compartición de búfer DMA [LWN.net]". lwn.net . Archivado desde el original el 11 de junio de 2020 . Consultado el 11 de junio de 2020 .
  234. ^ "Compartir buffers de CPU y GPU en Linux*". 01.org . 12 de mayo de 2016. Archivado desde el original el 11 de junio de 2020 . Consultado el 11 de junio de 2020 .
  235. ^ "Uso compartido de búfer y sincronización: documentación del núcleo de Linux". Kernel.org . Archivado desde el original el 1 de junio de 2020 . Consultado el 11 de junio de 2020 .
  236. ^ "Acerca de mac80211". Linux Kernel Organization, Inc. Archivado desde el original el 1 de febrero de 2021 . Consultado el 8 de junio de 2014 .
  237. ^ "Guía para desarrolladores de controladores Linux 802.11: documentación del kernel de Linux". Kernel.org . Consultado el 19 de noviembre de 2021 .
  238. ^ "[PATCH v3 1/2] fork: add clone3 [LWN.net]". lwn.net . Archivado desde el original el 16 de julio de 2020 . Consultado el 16 de julio de 2020 .
  239. ^ "clone(2) - Página del manual de Linux". man7.org . Archivado desde el original el 15 de julio de 2020 . Consultado el 15 de julio de 2020 .
  240. ^ "clone3(), fchmodat4() y fsinfo() [LWN.net]". lwn.net . Archivado desde el original el 15 de junio de 2020 . Consultado el 15 de julio de 2020 .
  241. ^ "ld-linux.so(8) - Página del manual de Linux". man7.org . Archivado desde el original el 26 de noviembre de 2020 . Consultado el 18 de noviembre de 2020 .
  242. ^ "nptl(7) - Página del manual de Linux". man7.org . Archivado desde el original el 25 de julio de 2020 . Consultado el 25 de julio de 2020 .
  243. ^ "futex(7) - Página del manual de Linux". man7.org . Archivado desde el original el 15 de julio de 2020 . Consultado el 25 de julio de 2020 .
  244. ^ "Los hilos del núcleo se vuelven fáciles [LWN.net]". lwn.net . Archivado desde el original el 31 de marzo de 2020 . Consultado el 15 de agosto de 2020 .
  245. ^ ab Bar, Moshe (1 de abril de 2000). "The Linux Scheduler". Linux Journal . Belltown Media, Inc. Archivado desde el original el 2 de febrero de 2021. Consultado el 14 de abril de 2012 .
  246. ^ BKK19-TR03 - El programador del núcleo de Linux: descripción general, 23 de abril de 2019, archivado del original el 15 de diciembre de 2021 , consultado el 17 de mayo de 2021
  247. ^ "Reducción de la latencia en Linux: introducción de un núcleo preemptible | Linux Journal". Linuxjournal.com . Archivado desde el original el 9 de agosto de 2020. Consultado el 17 de agosto de 2020 .
  248. ^ "CFS Scheduler — La documentación del kernel de Linux". Kernel.org . Consultado el 1 de mayo de 2021 .
  249. ^ "Estándar IEEE para tecnología de la información: interfaz de sistema operativo portátil, POSIX.1b, extensiones en tiempo real (IEEE Std 1003.1b-1993)". Archivado desde el original el 16 de noviembre de 2010. Consultado el 17 de marzo de 2016 .
  250. ^ Larabel, Michael (24 de enero de 2014). «El núcleo Linux 3.14 ya tiene muchas características interesantes». Phoronix . Archivado desde el original el 13 de agosto de 2020. Consultado el 3 de febrero de 2014 .
  251. ^ "Linux kernel 3.14, Section 1.1. Deadline scheduling class for better real-time scheduling" (Clase de programación de fechas límite para una mejor programación en tiempo real del kernel 3.14). kernelnewbies.org . 30 de marzo de 2014. Archivado desde el original el 15 de enero de 2021. Consultado el 2 de abril de 2014 .
  252. ^ "Diseño de implementación de RT-mutex — La documentación del kernel de Linux". Kernel.org . Consultado el 17 de diciembre de 2021 .
  253. ^ "Subsistema RT-mutex con soporte PI — La documentación del kernel de Linux". Kernel.org . Consultado el 17 de diciembre de 2021 .
  254. ^ McKenney, Paul (10 de agosto de 2005). "Una visión general de la preempción en tiempo real". LWN.net . Archivado desde el original el 10 de agosto de 2020 . Consultado el 5 de febrero de 2012 .
  255. ^ "Proyecto OSADL: Linux en tiempo real". OSADL . Archivado desde el original el 4 de febrero de 2021 . Consultado el 5 de febrero de 2012 .
  256. ^ ab "Steven-Rostedt_on_PREEMPT_RT" (PDF) .
  257. ^ "El programador EEVDF podría estar listo para su lanzamiento con Linux 6.6". Phoronix . Consultado el 31 de agosto de 2023 .
  258. ^ "[PARCHE 00/10] Programación: EEVDF utiliza latencia-nice [LWN.net]". LWN.net .
  259. ^ "Un programador de CPU EEVDF para Linux [LWN.net]". LWN.net . Consultado el 31 de agosto de 2023 .
  260. ^ "El programador EEVDF se fusionó con Linux 6.6 y se reintrodujo la programación de clústeres híbridos de Intel". Phoronix .
  261. ^ "bloqueo — La documentación del kernel de Linux". Kernel.org . Consultado el 17 de diciembre de 2021 .
  262. ^ "locking.rst - Documentation/kernel-hacking/locking.rst - Código fuente de Linux (v5.11.10) - Bootlin". elixir.bootlin.com . Consultado el 29 de marzo de 2021 .
  263. ^ "¿Qué es RCU, fundamentalmente? [LWN.net]". lwn.net . Consultado el 29 de marzo de 2021 .
  264. ^ "¿Qué es RCU? Parte 2: Uso [LWN.net]". lwn.net . Consultado el 29 de marzo de 2021 .
  265. ^ "RCU parte 3: la API de RCU [LWN.net]". lwn.net . Consultado el 29 de marzo de 2021 .
  266. ^ "Modelo de memoria del núcleo de Linux". open-std.org . Consultado el 29 de marzo de 2021 .
  267. ^ "Un modelo formal de ordenamiento de memoria del núcleo (parte 1) [LWN.net]". lwn.net . Consultado el 29 de marzo de 2021 .
  268. ^ "Un modelo formal de ordenamiento de memoria del núcleo (parte 2) [LWN.net]". lwn.net . Consultado el 29 de marzo de 2021 .
  269. ^ Stern, Alan. "Explicación del modelo de consistencia de memoria del kernel de Linux".
  270. ^ "kernel/git/torvalds/linux.git - Árbol de código fuente del kernel de Linux". git.kernel.org . Consultado el 17 de diciembre de 2021 .
  271. ^ ab "Tipos de bloqueos y sus reglas — La documentación del kernel de Linux". Kernel.org . Consultado el 17 de diciembre de 2021 .
  272. ^ "Temas breves: tiempo real, Futexes y ntfs3". Lwn.net . Consultado el 20 de febrero de 2022 .
  273. ^ "Subsistema RT-mutex con soporte PI — La documentación del kernel de Linux". Kernel.org . Consultado el 20 de febrero de 2022 .
  274. ^ "Diseño de implementación de RT-mutex — la documentación del kernel de Linux".
  275. ^ "Validador de corrección de bloqueo en tiempo de ejecución: documentación del kernel de Linux". Kernel.org . Consultado el 17 de diciembre de 2021 .
  276. ^ "Interrupciones, subprocesos y bloqueos [LWN.net]". lwn.net . Consultado el 17 de diciembre de 2021 .
  277. ^ "Tablas de páginas: la documentación del núcleo de Linux". www.kernel.org . Consultado el 21 de julio de 2024 .
  278. ^ "Memoria física: la documentación del núcleo de Linux". www.kernel.org . Consultado el 21 de julio de 2024 .
  279. ^ "El diagrama de la pila de almacenamiento de Linux". Thomas-krenn.com . Archivado desde el original el 3 de agosto de 2020. Consultado el 19 de marzo de 2020 .
  280. ^ "El asignador SLUB". Lwn.net . 11 de abril de 2007 . Consultado el 20 de febrero de 2022 .
  281. ^ ab "Asignadores de bloques en el núcleo de Linux: SLAB, SLOB, SLUB" (PDF) . Events.static.linuxfound.org . Consultado el 20 de febrero de 2022 .
  282. ^ Corbet, Jonathan (28 April 2023). "6.4 Merge window, part 1 [LWN.net]". LWN.net. Retrieved 12 May 2023.
  283. ^ "The first half of the 6.8 merge window [LWN.net]". lwn.net. Retrieved 21 July 2024.
  284. ^ "Kernel/Git/Torvalds/Linux.git - Linux kernel source tree". Git.kernel.org.
  285. ^ a b c Torvalds, Linus (January 1999). "The Linux Edge". Open Sources: Voices from the Open Source Revolution. O'Reilly. ISBN 1-56592-582-3. Retrieved 13 October 2013.
  286. ^ "Porting Linux to the DEC Alpha: The Kernel and Shell". Archived from the original on 5 September 2019. Retrieved 5 October 2019.
  287. ^ "Linux on Alpha: A Strategic Choice". Archived from the original on 4 September 2019. Retrieved 5 October 2019.
  288. ^ "TOP500 Supercomputer Sites: Operating system Family / Linux". Top500.org. Archived from the original on 19 November 2012. Retrieved 5 October 2019.
  289. ^ "Avalon Cluster | TOP500 Supercomputer Sites". Top500.org. Archived from the original on 5 October 2019. Retrieved 5 October 2019.
  290. ^ Wang, David (6 May 2010). "Android Now Running On iPhone 3G". TechHive. IDG. Archived from the original on 22 July 2010. Retrieved 11 July 2010.
  291. ^ "LKDDb". LKDDb Project. Archived from the original on 25 February 2021. Retrieved 26 January 2021.
  292. ^ "Linux Hardware". Linux Hardware Project. Archived from the original on 26 January 2021. Retrieved 26 January 2021.
  293. ^ "Linux kernel 4.0, Section 1.2. Live patching". kernelnewbies.org. 26 April 2015. Archived from the original on 4 May 2015. Retrieved 27 April 2015.
  294. ^ Jonathan Corbet (25 February 2015). "A rough patch for live patching". LWN.net. Archived from the original on 27 April 2015. Retrieved 27 April 2015.
  295. ^ "kernel/git/torvalds/linux.git: Pull live patching infrastructure from Jiri Kosina (Linux kernel source tree)". kernel.org. 11 February 2015. Archived from the original on 11 June 2015. Retrieved 27 April 2015.
  296. ^ Mookhey, K. K.; Burghate, Nilesh (1 July 2005). Linux: Security, Audit and Control Features. US: ISACA. p. 14. ISBN 1-893209-78-4. Archived from the original on 2 June 2013. Retrieved 31 December 2010.
  297. ^ Hatch, Brian (15 July 2008). Hacking Exposed Linux: Linux Security Secrets and Solutions. McGraw-Hill Osborne Media. p. 524. ISBN 978-0-07-226257-5. Archived from the original on 2 June 2013. Retrieved 31 December 2010.
  298. ^ Jaeger, Trent (7 October 2008). Operating System Security. Morgan and Claypool Publishers. p. 122. ISBN 978-1-59829-212-1. Archived from the original on 2 June 2013. Retrieved 31 December 2010.
  299. ^ "CAP_PERFMON — and new capabilities in general [LWN.net]". lwn.net. Archived from the original on 4 August 2020. Retrieved 2 August 2020.
  300. ^ "Linux Security Module Usage — The Linux Kernel documentation". Kernel.org. Archived from the original on 2 May 2020. Retrieved 10 January 2020.
  301. ^ "National Security Agency | Central Security Service > What We Do > Research > SE Linux > SE Linux FAQs". Nsa.gov. Archived from the original on 18 September 2019. Retrieved 10 January 2020.
  302. ^ "Seccomp BPF (SECure COMPuting with filters) — The Linux Kernel documentation". Kernel.org. Archived from the original on 7 March 2020. Retrieved 10 January 2020.
  303. ^ Andrews, Jeremy (16 July 2008). "Security Bugs and Full Disclosure". KernelTrap. Archived from the original on 19 July 2008. Retrieved 31 December 2010.
  304. ^ Spengler, Brad (16 July 2008). "Linux's unofficial security-through-coverup policy". Full Disclosure (Mailing list). Archived from the original on 7 August 2020. Retrieved 31 December 2010.
  305. ^ a b Yamagata, Hiroo (3 August 1997). "The Pragmatist of Free Software". HotWired. Archived from the original on 10 February 2007. Retrieved 21 February 2007.
  306. ^ "GPL-v2". gnu.org. Archived from the original on 25 December 2019. Retrieved 28 January 2020.
  307. ^ Corbet, Jonathan (31 January 2006). "GPLv3 and the kernel". LWN.net. Archived from the original on 10 August 2020. Retrieved 21 February 2007.
  308. ^ Torvalds, Linus (8 September 2000). "Linux-2.4.0-test8". LKML (Mailing list). Archived from the original on 15 May 2020. Retrieved 21 February 2007.
  309. ^ "gnu.org". Gnu.org. Archived from the original on 2 February 2021. Retrieved 18 October 2017.
  310. ^ Cox, Alan (20 January 2006). "Re: GPL V3 and Linux". LKML (Mailing list). Archived from the original on 26 January 2021. Retrieved 21 February 2007.
  311. ^ Shankland, Stephen (25 September 2006). "Top Linux programmers pan GPL 3". News.com. CNET. Archived from the original on 14 September 2013. Retrieved 21 February 2007.
  312. ^ a b James E.J. Bottomley; Mauro Carvalho Chehab; Thomas Gleixner; Christoph Hellwig; Dave Jones; Greg Kroah-Hartman; Tony Luck; Andrew Morton; Trond Myklebust; David Woodhouse (15 September 2006). "Kernel developers' position on GPLv3: The Dangers and Problems with GPLv3". LWN.net. Archived from the original on 18 January 2021. Retrieved 11 March 2015.
  313. ^ Petreley, Nicholas (27 September 2006). "A fight against evil or a fight for attention?". linuxjournal.com. Archived from the original on 2 March 2018. Retrieved 11 March 2015.
  314. ^ "Linus Torvalds says GPL v3 violates everything that GPLv2 stood for". Debconf 2014. 2014. Archived from the original on 8 May 2018. Retrieved 21 March 2018.
  315. ^ Clark, Rob; Semwal, Sumit (1 November 2012). "DMA Buffer Sharing Framework: An Introduction" (PDF). Embedded Linux Conference. Archived (PDF) from the original on 8 August 2014. Retrieved 2 August 2014.
  316. ^ Cox, Alan (10 October 2012). "[PATCH] dma-buf: Use EXPORT_SYMBOL". Direct Rendering Infrastructure (Mailing list). Archived from the original on 22 January 2013. Retrieved 3 September 2013.
  317. ^ Torvalds, Linus (10 December 2003). "RE: Linux GPL and binary module exception clause?". LKML (Mailing list). Archived from the original on 15 June 2011. Retrieved 31 December 2010.
  318. ^ Torvalds, Linus (3 December 2003). "Re: Linux GPL and binary module exception clause?". LKML (Mailing list). Archived from the original on 28 April 2020. Retrieved 12 November 2010.
  319. ^ "Tainted kernels — The Linux Kernel documentation". Kernel.org. Archived from the original on 7 March 2020. Retrieved 13 January 2020.
  320. ^ "Linux Firmware API — The Linux Kernel documentation". Kernel.org. Archived from the original on 13 January 2020. Retrieved 13 January 2020.
  321. ^ "Built-in firmware — The Linux Kernel documentation". Kernel.org. Archived from the original on 10 June 2020. Retrieved 10 June 2020.
  322. ^ "Linux TM registration in the US". uspto.gov. Archived from the original on 24 February 2021. Retrieved 6 September 2019.
  323. ^ "Linux TM registration in the EU". euipo.europa.eu. Archived from the original on 9 June 2016. Retrieved 28 November 2020.
  324. ^ Hughes, Phil (1 August 1997). "Linux Trademark Dispute". Linux Journal. Belltown Media, Inc. Archived from the original on 30 April 2010. Retrieved 8 December 2010.
  325. ^ Hughes, Phil (1 March 1997). "Action Taken on Linux Trademark". Linux Journal. Belltown Media, Inc. Archived from the original on 3 March 2010. Retrieved 8 December 2010.
  326. ^ Gisselberg, Tonya (2010). "The Trademark History of Linux, the Operating System" (PDF). Gisselberg Law Firm, Inc. Archived from the original (PDF) on 11 July 2011. Retrieved 8 December 2010.

Further reading

  • Torvalds, Linus; Diamond, David (2001). Just for Fun: The Story of an Accidental Revolutionary. HarperBusiness. ISBN 978-0066620732.
  • Bezroukov, Nikolai. "Ch 4: A benevolent dictator". Portraits of Open Source Pioneers (e-book). Softpanorama. Archived from the original on 13 October 2005. Retrieved 3 October 2005.
  • "LinkSys and binary modules". LWN.net Weekly Edition. 16 October 2003. Archived from the original on 1 August 2016. Retrieved 21 July 2016.
  • "Everyone's Favorite Linux Mascot". Archived from the original on 16 August 2005. Retrieved 16 June 2005.
  • Pranevich, Joseph (December 2003). "The Wonderful World of Linux 2.6". Archived from the original on 16 July 2003.
  • "LinuxChanges". Archived from the original on 31 October 2005. Retrieved 31 October 2005.
  • "Seminar Paper on Linux Kernel 2.6". Archived from the original on 2 February 2007.
  • "Linux Device Drivers" (3rd ed.). Archived from the original on 27 July 2016. Retrieved 21 July 2016.
  • "Understanding the Linux Kernel" (Book) (3rd ed.). Archived from the original on 17 December 2005. Retrieved 22 December 2005.
  • Linux Kernel Networking, by Rami Rosen, 2014 (Book). Archived from the original on 12 May 2015. Retrieved 14 June 2015.
  • "Linux: The GPL And Binary Modules". Archived from the original on 23 July 2005.
  • "Anatomy of the Linux kernel". IBM. Archived from the original on 27 June 2007. Retrieved 9 June 2007.
  • Tanenbaum, Andrew; Bos, Herbert (2015). Modern Operating Systems. United States of America: Pearson. p. 722. ISBN 9781292061429. OCLC 892574803.
  • Official website
    • Linux kernel documentation index
    • Linux kernel man pages
    • Kernel bugzilla, and regressions for each recent kernel version
  • Kernel Newbies, a source of various kernel-related information
  • Kernel coverage at LWN.net, an authoritative source of kernel-related information
  • Bootlin's Elixir Cross Referencer, a Linux kernel source code cross-reference
  • Greg Kroah Hartman on the Linux kernel on YouTube
Retrieved from "https://en.wikipedia.org/w/index.php?title=Linux_kernel&oldid=1248535854#Mainline_Linux"