stringtranslate.com

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 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 kernel 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 kernel tiene un diseño modular , de modo que los módulos se pueden integrar como componentes de software , incluso cargados dinámicamente. El kernel es monolítico en un sentido arquitectónico, ya que todo el sistema operativo se ejecuta en el espacio del kernel .

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 , 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 ) 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]

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
IBM
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 comprende alrededor de 5000 a 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, alrededor de 1500 desarrolladores contribuyeron de unas 200 a 250 empresas 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:

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 , 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 tamaño, los desarrolladores deben adherirse al 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 la maneja 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 incluido en el 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 a la vez 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.

La mayoría de los controladores de dispositivos y extensiones del kernel se ejecutan en el espacio del kernel ( 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 kernel. De manera diferente, la interfaz real con las GPU de las tarjetas gráficas es un subsistema dentro del kernel 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:

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 hacer cumplir 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 originalmente no fue diseñado 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]

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 , 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 kernel 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 la seguridad del sistema. [296] Con frecuencia se implementan nuevas características para mejorar la seguridad del kernel. [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.

Legal

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]

There was considerable debate about how easily the license could be changed to use later GPL versions (including version 3), and whether this change is even desirable.[307] Torvalds himself specifically indicated upon the release of version 2.4.0 that his own code is released only under version 2.[308] However, the terms of the GPL state that if no version is specified, then any version may be used,[309] and Alan Cox pointed out that very few other Linux contributors had specified a particular version of the GPL.[310]

In September 2006, a survey of 29 key kernel programmers indicated that 28 preferred GPLv2 to the then-current GPLv3 draft. Torvalds commented, "I think a number of outsiders... believed that I personally was just the odd man out because I've been so publicly not a huge fan of the GPLv3."[311] This group of high-profile kernel developers, including Torvalds, Greg Kroah-Hartman and Andrew Morton, commented on mass media about their objections to the GPLv3.[312] They referred to clauses regarding DRM/tivoization, patents, "additional restrictions" and warned a Balkanisation of the "Open Source Universe" by the GPLv3.[312][313] Torvalds, who decided not to adopt the GPLv3 for the Linux kernel, reiterated his criticism even years later.[314]

Loadable kernel modules

It is debated whether some loadable kernel modules (LKMs) are to be considered derivative works under copyright law, and thereby whether or not they fall under the terms of the GPL.

In accordance with the license rules, LKMs using only a public subset of the kernel interfaces[221][222] are non-derived works, thus Linux gives system administrators the mechanisms to load out-of-tree binary objects into the kernel address space.[11]

There are some out-of-tree loadable modules that make legitimate use of the dma_buf kernel feature.[315] GPL compliant code can certainly use it. However, a different possible use case would be Nvidia Optimus that pairs a fast GPU with an Intel integrated GPU, where the Nvidia GPU writes into the Intel framebuffer when it is active. But, Nvidia cannot use this infrastructure because it necessitates bypassing a rule that can only be used by LKMs that are also GPL.[223] Alan Cox replied on LKML, rejecting a request from one of Nvidia's engineers to remove this technical enforcement from the API.[316] Torvalds clearly stated on the LKML that "[I] claim that binary-only kernel modules ARE derivative "by default"'".[317]

On the other hand, Torvalds has also said that "[one] gray area in particular is something like a driver that was originally written for another operating system (i.e., clearly not a derived work of Linux in origin). THAT is a gray area, and _that_ is the area where I personally believe that some modules may be considered to not be derived works simply because they weren't designed for Linux and don't depend on any special Linux behaviour".[318] Proprietary graphics drivers, in particular, are heavily discussed.

Whenever proprietary modules are loaded into Linux, the kernel marks itself as being "tainted",[319] and therefore bug reports from tainted kernels will often be ignored by developers.

Firmware binary blobs

The official kernel, that is the Linus git branch at the kernel.org repository, contains binary blobs released under the terms of the GNU GPLv2 license.[6][11] Linux can also search filesystems to locate binary blobs, proprietary firmware, drivers, or other executable modules, then it can load and link them into kernel space.[320]

When it is needed (e.g., for accessing boot devices or for speed) firmware can be built-in to the kernel, this means building the firmware into vmlinux; however this is not always a viable option for technical or legal issues (e.g., it is not permitted to do this with firmware that is non-GPL compatible, although this is quite common nonetheless).[321]

Trademark

Linux is a registered trademark of Linus Torvalds in the United States, the European Union, and some other countries.[322][323] A legal battle over the trademark began in 1996, when William Della Croce, a lawyer who was never involved in the development of Linux, started requesting licensing fees for the use of the word Linux. After it was proven that the word was in common use long before Della Croce's claimed first use, the trademark was awarded to Torvalds.[324][325][326]

See also

Notes

  1. ^ As a whole, Linux source is provided under the terms of the GPL-2.0-only license with an explicit syscall exception.[9][10] Aside from that, individual files can be provided under a different license which is required to be compatible with the GPL-2.0-only license (i.e., the GNU General Public License version 2) or a dual license, with one of the choices being the GPL version 2 or a GPLv2 compatible license.[11]

References

  1. ^ "Linux Logos and Mascots". Linux Online. 2008. Archived from the original on 15 August 2010. Retrieved 11 August 2009.
  2. ^ Linus Torvalds (15 September 2024). "Linux 6.11". Retrieved 15 September 2024.
  3. ^ Linus Torvalds (8 September 2024). "Linux 6.11-rc7". Retrieved 8 September 2024.
  4. ^ Bergmann, Arnd (3 March 2022). "Kbuild: move to -std=gnu11". git.kernel.org.
  5. ^ a b Proven, Liam. "Linux 6.1: Rust to hit mainline kernel". The Register. Retrieved 12 May 2023.
  6. ^ a b c d "COPYING". git.kernel.org. Archived from the original on 2 September 2021. Retrieved 2 September 2021.
  7. ^ "GPL-2.0-only". spdx.org. Retrieved 2 September 2021.
  8. ^ "Linux-syscall-note". spdx.org. Retrieved 2 September 2021.
  9. ^ a b "GPL-2.0". git.kernel.org.
  10. ^ a b "Linux-syscall-note". git.kernel.org.
  11. ^ a b c d e f "Linux kernel licensing rules — The Linux Kernel documentation". www.kernel.org. Archived from the original on 7 March 2020. Retrieved 6 January 2020.
  12. ^ a b c d e f g h i j k l m n Love, Robert (2010). Linux kernel development (3rd ed.). Upper Saddle River, NJ: Addison-Wesley. ISBN 978-0-672-32946-3. OCLC 268788260.
  13. ^ "C Extensions (Using the GNU Compiler Collection (GCC))". gcc.gnu.org. Archived from the original on 20 November 2020. Retrieved 13 November 2020.
  14. ^ a b Richardson, Marjorie (1 November 1999). "Interview: Linus Torvalds". Linux Journal. Archived from the original on 14 May 2011. Retrieved 20 August 2009.
  15. ^ a b Torvalds, Linus Benedict (26 August 1991). "What would you like to see most in minix?". Newsgroup: comp.os.minix. Usenet: [email protected]. Archived from the original on 9 May 2013. Retrieved 14 September 2016.
  16. ^ a b Welsh, Matt; Dalheimer, Matthias Kalle; Kaufman, Lar (1999). "1: Introduction to Linux". Running Linux (3rd ed.). Sebastopol, California: O'Reilly Media, Inc. p. 5. ISBN 1-56592-976-4. OCLC 50638246.
  17. ^ "Free minix-like kernel sources for 386-AT - Google Groups". groups.google.com. 5 October 1991. Archived from the original on 1 March 2021. Retrieved 19 March 2020.
  18. ^ Williams, Sam (March 2002). "Chapter 9: The GNU General Public License". Free as in Freedom: Richard Stallman's Crusade for Free Software. O'Reilly. ISBN 0-596-00287-4. Retrieved 12 November 2010.
  19. ^ a b c Christine Bresnahan & Richard Blum (2016). LPIC-2: Linux Professional Institute Certification Study Guide: Exam 201 and Exam 202. John Wiley & Sons. p. 107. ISBN 9781119150794.
  20. ^ a b Torvalds, Linus. "Release Notes for Linux v0.12". The Linux Kernel Archives. Archived from the original on 19 August 2007. Retrieved 21 February 2007.
  21. ^ Fred Hantelmann (2016). LINUX Start-up Guide: A self-contained introduction. Springer Science & Business Media. p. 1. ISBN 9783642607493.
  22. ^ a b c Fred Hantelmann (2016). LINUX Start-up Guide: A self-contained introduction. Springer Science & Business Media. p. 16. ISBN 9783642607493.
  23. ^ Summers, David W. (19 January 1992). "Troubles with Partitions". Newsgroup: alt.os.linux. Usenet: [email protected]. Archived from the original on 2 June 2013. Retrieved 7 January 2007.
  24. ^ Clegg, Alan B. (31 March 1992). "It's here!". Newsgroup: comp.os.linux. Usenet: [email protected]. Archived from the original on 2 June 2013. Retrieved 7 January 2007.
  25. ^ "Appendix A: The Tanenbaum-Torvalds Debate". Open Sources: Voices from the Open Source Revolution. O'Reilly. 1999. ISBN 1-56592-582-3. Retrieved 22 November 2006.
  26. ^ Tanenbaum, Andy (29 January 1992). "LINUX is obsolete". Newsgroup: comp.os.minix. Usenet: [email protected]. Archived from the original on 17 October 2011. Retrieved 10 May 2006.
  27. ^ Tanenbaum, Andy (12 May 2006). "Tanenbaum-Torvalds Debate: Part II". VU University Amsterdam. Archived from the original on 5 August 2015. Retrieved 6 January 2007.
  28. ^ Hayward, David (22 November 2012). "The history of Linux: how time has shaped the penguin". TechRadar. Archived from the original on 19 March 2020. Retrieved 19 March 2020.
  29. ^ Hayward, David (22 November 2012). "The history of Linux: how time has shaped the penguin". TechRadar. Archived from the original on 19 March 2020. Retrieved 26 March 2020.
  30. ^ a b c Christine Bresnahan & Richard Blum (2016). LPIC-2: Linux Professional Institute Certification Study Guide: Exam 201 and Exam 202. John Wiley & Sons. p. 108. ISBN 9781119150794.
  31. ^ Torvalds, Linus (9 June 1996). "Linux 2.0 really _is_ released." LKML (Mailing list). Archived from the original on 2 April 2015. Retrieved 8 March 2015.
  32. ^ a b "Kernel Build System — The Linux Kernel documentation". Kernel.org. Archived from the original on 22 July 2020. Retrieved 17 July 2020.
  33. ^ a b "Kconfig make config — The Linux Kernel documentation". Kernel.org. Archived from the original on 17 July 2020. Retrieved 13 September 2020.
  34. ^ Torvalds, Linus (20 January 1999). "2.2.0-final". LKML (Mailing list). Archived from the original on 2 April 2015. Retrieved 8 March 2015.
  35. ^ a b "The Wonderful World of Linux 2.2". 26 January 1999. Archived from the original on 6 November 2014. Retrieved 27 October 2008.
  36. ^ "Linux/390 Observations and Notes". linuxvm.org. Archived from the original on 26 February 2019. Retrieved 29 March 2020.
  37. ^ Torvalds, Linus (4 January 2001). "And oh, btw." LKML (Mailing list). Archived from the original on 26 January 2016. Retrieved 8 March 2015.
  38. ^ "The Wonderful World of Linux 2.4". Archived from the original on 17 March 2005. Retrieved 27 October 2008.
  39. ^ Torvalds, Linus (17 December 2003). "Linux 2.6.0". LKML (Mailing list). Archived from the original on 2 April 2015. Retrieved 28 February 2015.
  40. ^ "proc(5) - Linux manual page" (see /proc/sys/kernel/pid_max). Archived from the original on 7 February 2014. Retrieved 19 February 2014.
  41. ^ "btrfs Wiki". btrfs.wiki.kernel.org. Archived from the original on 25 April 2012. Retrieved 17 July 2020.
  42. ^ Fred Hantelmann (2016). LINUX Start-up Guide: A self-contained introduction. Springer Science & Business Media. pp. 1–2. ISBN 9783642607493.
  43. ^ Linux Kernel Mailing List (17 June 2005). "Linux 2.6.12". git-commits-head (Mailing list). Archived from the original on 26 January 2016. Retrieved 23 January 2008.
  44. ^ Kroah-Hartman, Greg (3 August 2006). "Adrian Bunk is now taking over the 2.6.16-stable branch". LKML (Mailing list). Archived from the original on 26 January 2016. Retrieved 21 February 2015.
  45. ^ Rothwell, Stephen (12 February 2008). "Announce: Linux-next (Or Andrew's dream :-))". LKML (Mailing list). Archived from the original on 24 November 2010. Retrieved 30 October 2010.
  46. ^ Corbet, Jonathan (21 October 2010). "linux-next and patch management process". LWN.net. Eklektix, Inc. Archived from the original on 21 June 2010. Retrieved 30 October 2010.
  47. ^ "The Linux Kernel Archives". Kernel.org. Archived from the original on 30 January 1998. Retrieved 22 January 2014.
  48. ^ "Add a personality to report 2.6.x version numbers [LWN.net]". lwn.net. Archived from the original on 16 July 2020. Retrieved 15 July 2020.
  49. ^ a b Torvalds, Linus (21 July 2011). "Linux 3.0 release". Linux kernel mailing list. Archived from the original on 18 October 2019. Retrieved 16 May 2013.
  50. ^ Torvalds, Linus (30 May 2011). "Linux 3.0-rc1". LKML (Mailing list). Archived from the original on 31 May 2011. Retrieved 1 July 2013.
  51. ^ Torvalds, Linus (10 April 2001). "Re: [PATCH] i386 rw_semaphores fix". yarchive.net. Retrieved 26 May 2024.
  52. ^ Vaughan-Nichols, Steven J. (13 December 2012). "Good-Bye 386: Linux to drop support for i386 chips with next major release". ZDNet. CBS Interactive. Archived from the original on 17 February 2015. Retrieved 6 February 2013.
  53. ^ Fingas, Jon (15 December 2012). "Linux to drop i386 support in the 3.8 kernel, make us upgrade our Doom rig". Engadget. AOL. Archived from the original on 2 April 2015. Retrieved 22 March 2015.
  54. ^ Vaughan-Nichols, Steven J. (11 December 2012). "Linux 3.7 arrives, ARM developers rejoice". ZDNet. CBS Interactive. Archived from the original on 5 November 2014. Retrieved 6 February 2013.
  55. ^ Torvalds, Linus (12 April 2015). "Linux 4.0 released". LKML (Mailing list). Archived from the original on 13 April 2015. Retrieved 12 April 2015.
  56. ^ Torvalds, Linus (2 September 2013). "Linux 3.11". LKML (Mailing list). Archived from the original on 26 February 2014. Retrieved 3 September 2013.
  57. ^ "Linux 3.11". kernelnewbies.org. 2 September 2013. Retrieved 21 January 2014.
  58. ^ "The Linux Foundation Releases Linux Development Report". Linux Foundation. 18 February 2015. Archived from the original on 19 July 2016. Retrieved 20 February 2015.
  59. ^ Michael Larabel (23 June 2014). "Linux Kernel At 19.5 Million Lines Of Code, Continues Rising". Phoronix. Archived from the original on 23 November 2020. Retrieved 23 June 2015.
  60. ^ a b Torvalds, Linus (3 March 2019). "Linus Torvalds: Linux 5.0". LKML. Archived from the original on 25 August 2024. Retrieved 25 August 2024.
  61. ^ Prakash, Abhishek (11 January 2023). "Linux Kernel 5.0 Released! Check Out The New Features". It's FOSS. Retrieved 25 August 2024.{{cite news}}: CS1 maint: url-status (link)
  62. ^ Larabel, Micheal (6 January 2019). "The Many New Features & Improvements Of The Linux 5.0 Kernel". www.phoronix.com. Retrieved 25 August 2024.
  63. ^ Corbet, Jonathan (3 August 2020). "Some statistics from the 5.8 kernel cycle". LWN - Linux Weekly News. Archived from the original on 4 September 2020. Retrieved 11 August 2020.
  64. ^ "Stack Overflow Developer Survey 2019 - most popular technologies". Stack Overflow. Archived from the original on 8 October 2020. Retrieved 17 March 2020.
  65. ^ "Stack Overflow Developer Survey 2019 - development environments and tools". Stack Overflow. Archived from the original on 7 March 2020. Retrieved 17 March 2020.
  66. ^ "Usage Statistics and Market Share of Operating Systems for Websites, March 2020". w3techs.com. Retrieved 17 March 2020.
  67. ^ "Usage Statistics and Market Share of Unix for Websites, March 2020". w3techs.com. Retrieved 17 March 2020.
  68. ^ "TOP500 Supercomputer Sites: Operating system Family / Linux". Top500.org. Archived from the original on 19 November 2012. Retrieved 5 October 2019.
  69. ^ "Gartner Says Sales of Tablets Will Represent Less Than 10 Percent of All Devices in 2014" (Press release). Egham, UK: Gartner. 15 October 2014. Archived from the original on 17 October 2014. Retrieved 19 October 2014.
  70. ^ Lunden, Ingrid (15 October 2014). "Tablet Sales Growth Plummets In 2014 As Android Smartphones Continue To Soar: Gartner". TechCrunch. AOL. Archived from the original on 23 October 2014. Retrieved 23 October 2014.
  71. ^ "Global PC Shipments Exceed Forecast with Mild Improvement in Consumer Demand, While Apple Moves to #5 Spot, According to IDC" (Press release). Framingham, MA: IDC. 8 October 2014. Archived from the original on 11 October 2014. Retrieved 19 October 2014.
  72. ^ Wheeler, David A. "Linux Kernel 2.6: It's Worth More!". Archived from the original on 20 August 2011. Retrieved 18 January 2007.
  73. ^ "Economic impact of FLOSS on innovation and competitiveness of the EU ICT sector" (PDF) (Table 3 on page 50). Archived (PDF) from the original on 15 February 2010. Retrieved 8 January 2011.
  74. ^ "Estimating Total Development Cost Of a Linux Distribution" (PDF) (Table on page 6). Archived from the original (PDF) on 11 July 2010.
  75. ^ "The Billion Dollar Kernel". Linux.slashdot.org. 24 February 2010. Archived from the original on 15 May 2011. Retrieved 12 November 2010.
  76. ^ Wheeler, David. "The Linux Kernel: It's Worth More!". Archived from the original on 24 February 2021. Retrieved 17 September 2012.
  77. ^ "The Linux Kernel Archives". www.kernel.org. Retrieved 28 February 2023.
  78. ^ a b "2017 State of Linux Kernel Development". The Linux Foundation. 25 October 2017. Archived from the original on 27 May 2020. Retrieved 27 May 2020.
  79. ^ "Why I quit: kernel developer Con Kolivas". APC Magazine. ACP Magazines. 24 July 2007. Archived from the original on 7 July 2011. Retrieved 15 August 2011.
  80. ^ Corbet, Jonathan (25 July 2007). "Re: -mm merge plans for 2.6.23". LWN.net. Archived from the original on 11 February 2018. Retrieved 10 February 2018.
  81. ^ Cox, Alan (28 July 2009). "Re: [PATCH] kdesu broken". Archived from the original on 11 February 2018. Retrieved 10 February 2018.
  82. ^ Rodrigues, Goldwyn (22 January 2011). "A tale of two SCSI targets". Archived from the original on 15 February 2018. Retrieved 14 February 2018.
  83. ^ Steinmetz, Andreas (17 January 2013). "LIO - the broken iSCSI target implementation". Archived from the original on 15 February 2018. Retrieved 14 February 2018.
  84. ^ Paul, Ryan (19 June 2012). "Linus Torvalds says "f–k you" to NVIDIA". Archived from the original on 15 February 2018. Retrieved 14 February 2018.
  85. ^ John Gold (3 April 2014). "Linus Torvalds suspends key Linux developer: Kernel panic as Systemd dev pokes the bear". Archived from the original on 24 March 2019. Retrieved 24 March 2019.
  86. ^ Poettering, Lennart (6 October 2014). "On the sickness of the Linux Kernel Community". Google+. Archived from the original on 27 May 2018. Retrieved 10 February 2018.
  87. ^ Brodkin, Jon (6 March 2015). "VMware alleged to have violated Linux's open source license for years". Ars Technica. Archived from the original on 15 February 2018. Retrieved 14 February 2018.
  88. ^ McCarthy, Kieren (26 August 2016). "Having offended everyone else in the world, Linus Torvalds calls own lawyers a 'nasty festering disease'". The Register. Archived from the original on 15 February 2018. Retrieved 14 February 2018.
  89. ^ Kroah-Hartman, Greg. "[PATCH 000/190] Revertion of all of the umn.edu commits". Linux Kernel Mailing List Archive. Retrieved 13 January 2022.
  90. ^ Chin, Monica (30 April 2021). "How a university got itself banned from the Linux kernel". The Verge. Retrieved 13 January 2022.
  91. ^ Corbet, Jonathan (10 September 2007). "KS2007: Developer relations and development process". LWN.net. Archived from the original on 12 February 2018. Retrieved 11 February 2018.
  92. ^ Brodkin, Jon (16 July 2013). "Linus Torvalds defends his right to shame Linux kernel developers". ARS Technica. Archived from the original on 17 February 2018. Retrieved 11 February 2018.
  93. ^ Corbet, Jonathan (9 March 2015). "The kernel's code of conflict". LWN.net. Archived from the original on 12 February 2018. Retrieved 11 February 2018.
  94. ^ Corbet, Jonathan (18 September 2018). "Code, conflict, and conduct". LWN.net. Archived from the original on 19 September 2018. Retrieved 19 September 2018.
  95. ^ Cohen, Noam (19 September 2018). "After Years of Abusive E-mails, the Creator of Linux Steps Aside". The New Yorker. Archived from the original on 20 February 2020. Retrieved 24 September 2018.
  96. ^ Larabel, Michael. "Dropping Profanity In Kernel Code Comments: Linux Gets "Hugs"". Phoronix. Archived from the original on 21 April 2019. Retrieved 15 June 2019.
  97. ^ "Code of Conflict". Retrieved 4 February 2018.[permanent dead link]
  98. ^ Sharwood, Simon (6 October 2015). "Linux kernel dev who asked Linus Torvalds to stop verbal abuse quits over verbal abuse". The Register. Archived from the original on 29 March 2020. Retrieved 4 February 2018.
  99. ^ Edge, Jake (31 January 2018). "Too many lords, not enough stewards". LWN.net. Archived from the original on 9 November 2020. Retrieved 4 February 2018.
  100. ^ Corbet, Jonathan (6 November 2017). "Bash the kernel maintainers". LWN.net. Archived from the original on 26 January 2021. Retrieved 4 February 2018.
  101. ^ "Linux Evolution" (PDF). 26 March 2008. Archived (PDF) from the original on 14 December 2013. Retrieved 6 November 2013.
  102. ^ "Perpetual Development: A Model of the Linux Kernel Life Cycle" (PDF). 25 October 2011. Archived (PDF) from the original on 17 October 2013. Retrieved 6 November 2013.
  103. ^ Kroah-Hartman, Greg (12 February 2008). "Re: Announce: Linux-next (Or Andrew's dream :-))". Linux Kernel Mailing List (Mailing list). Archived from the original on 2 February 2017. Retrieved 30 January 2017.
  104. ^ Robert Love (2010). Linux Kernel Development: Linux Kernel Development. Pearson Education. p. 11. ISBN 9780768696790.
  105. ^ Robert Love (2010). Linux Kernel Development: Linux Kernel Development. Pearson Education. p. 12. ISBN 9780768696790.
  106. ^ "How the development process works". Archived from the original on 9 December 2017. Retrieved 4 February 2018.
  107. ^ Robert Love (2010). Linux Kernel Development: Linux Kernel Development. Pearson Education. p. 13. ISBN 9780768696790.
  108. ^ "Contributor Covenant Code of Conduct". The Linux Kernel documentation. Retrieved 6 October 2021.
  109. ^ "Linux Kernel Contributor Covenant Code of Conduct Interpretation". The Linux Kernel Documentation. Retrieved 6 October 2021.
  110. ^ Williams, Dan. "[PATCH] CodingStyle: Inclusive Terminology". Linux Kernel Mailing List.
  111. ^ Tim Anderson. "Linux kernel minimum compiler raised to GCC 5.1, allowing potential C11 use". The Register. Retrieved 12 May 2023.
  112. ^ Larabel, Michael. "The Switch Has Been Made From C89 To C11/GNU11 With Linux 5.18". www.phoronix.com. Retrieved 12 May 2023.
  113. ^ Sharwood, Simon (11 December 2022). "Linus Torvalds reveals Linux kernel 6.1". The Register. Retrieved 12 May 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 embedded Linux systems (2nd ed.). Sebastopol [Calif.]: O'Reilly Media. p. 387. ISBN 978-0-596-52968-0. OCLC 273049576.
  149. ^ Yaghmour, Karim (2011). Embedded Android. Sebastopol, CA: O'Reilly Media. p. 44. ISBN 978-1-4493-2798-9. OCLC 812180000.
  150. ^ "SoC (System on a Chip)". OpenWrt Wiki. 6 November 2014. Archived from the original on 23 August 2022. Retrieved 15 March 2021.
  151. ^ "What to do about CVE numbers [LWN.net]". lwn.net. Retrieved 15 March 2021.
  152. ^ Amadeo, Ron (20 November 2019). "Google outlines plans for mainline Linux kernel support in Android". Ars Technica. Retrieved 31 March 2021.
  153. ^ Bruchon, Jody (24 April 2021), jbruchon/elks, retrieved 27 April 2021
  154. ^ "The state of preempt-rt". linuxplumbersconf.org. Archived from the original on 15 October 2016. Retrieved 14 June 2016.
  155. ^ Meyer, David (3 February 2010). "Linux developer explains Android kernel code removal". ZDNet. CBS Interactive. Archived from the original on 15 October 2016. Retrieved 3 February 2010.
  156. ^ "Chapter 03: maemo Platform Overview". maemo Technology Overview. Nokia. 2008. Archived from the original on 16 June 2008. Retrieved 9 April 2010.
  157. ^ Kroah-Hartman, Greg (2 February 2010). "Android and the Linux kernel community". Archived from the original on 27 April 2019. Retrieved 3 February 2010.
  158. ^ a b Roger Ye (2017). Android System Programming. Packt Publishing. p. 14. ISBN 9781787120389.
  159. ^ Torvalds, Linus (19 September 2001). "The Origins of Linux—Linus Torvalds". YouTube. Archived from the original on 15 December 2021. Retrieved 6 December 2020.
  160. ^ "Linux MAINTAINERS file". Archived from the original on 12 January 2013.
  161. ^ Alexandru Vaduva, Alex Gonzalez & Chris Simmonds (2016). Linux: Embedded Development. Packt Publishing. p. 663. ISBN 9781787124455.
  162. ^ "README". git.kernel.org. Archived from the original on 24 July 2012. Retrieved 24 March 2021.
  163. ^ "KernelBuild - Linux Kernel Newbies". kernelnewbies.org. Archived from the original on 19 October 2020. Retrieved 13 September 2020.
  164. ^ "The Sysctl Interface". Linux.it. Archived from the original on 17 February 2020. Retrieved 13 September 2020.
  165. ^ "sysctl(8) - Linux manual page". man7.org. Archived from the original on 30 September 2020. Retrieved 13 September 2020.
  166. ^ "procfs(5) - Linux manual page". man7.org. Archived from the original on 24 September 2020. Retrieved 13 September 2020.
  167. ^ "sched(7) - Linux manual page". man7.org. Archived from the original on 17 July 2020. Retrieved 27 July 2020.
  168. ^ "FAQ: Preemption". kernelnewbies.org. 22 August 2009. Archived from the original on 7 August 2020. Retrieved 7 May 2015.
  169. ^ a b Jonathan Corbet (24 February 2003). "Driver porting: the preemptible kernel". LWN.net. Archived from the original on 10 August 2020. Retrieved 7 May 2015.
  170. ^ "EEVDF Scheduler Merged For Linux 6.6, Intel Hybrid Cluster Scheduling Re-Introduced". Phoronix.
  171. ^ a b Molnár, Ingo (13 April 2007). "[patch] Modular Scheduler Core and Completely Fair Scheduler [CFS]". LKML (Mailing list). Archived from the original on 3 November 2020. Retrieved 30 March 2020.
  172. ^ "Completely Fair Scheduler | Linux Journal". Linuxjournal.com. Archived from the original on 3 August 2020. Retrieved 30 March 2020.
  173. ^ "ioctl(2) - Linux manual page". man7.org. Archived from the original on 20 July 2020. Retrieved 11 August 2020.
  174. ^ "aio(7) - Linux manual page". man7.org. Archived from the original on 12 April 2020. Retrieved 11 August 2020.
  175. ^ "io_setup(2) - Linux manual page". man7.org. Archived from the original on 20 August 2020. Retrieved 11 August 2020.
  176. ^ "KVM". Linux-kvm.org. Archived from the original on 28 March 2020. Retrieved 29 March 2020.
  177. ^ "TechComparison - Linux Virtualization Wiki". Virt.kernelnewbies.org. Archived from the original on 3 August 2020. Retrieved 29 March 2020.
  178. ^ "Virtualization_support_through_KVM in Linux_2_6_20 - Linux Kernel Newbies". Kernelnewbies.org. Archived from the original on 29 November 2019. Retrieved 29 March 2020.
  179. ^ Coekaerts, Wim. "Linux mainline contains all the Xen code bits for Dom0 and DomU support". blogs.oracle.com. Archived from the original on 3 August 2020. Retrieved 29 March 2020.
  180. ^ "Xen celebrates full Dom0 and DomU support in Linux 3.0 – blog.xen.org". 7 June 2011. Archived from the original on 7 June 2011. Retrieved 29 March 2020.
  181. ^ Wilk, Konrad Rzeszutek (31 January 2014). "Linux 3.14 and PVH". Xen Project. Archived from the original on 29 March 2020. Retrieved 29 March 2020.
  182. ^ "Introduction to Xen Virtualization | Virtualization Guide | openSUSE Leap 15.2". doc.opensuse.org. Archived from the original on 28 September 2020. Retrieved 29 September 2020.
  183. ^ "Virtualization technology | Virtualization Guide | openSUSE Leap 15.3". doc.opensuse.org. Retrieved 30 September 2021.
  184. ^ a b "SELinux Project". GitHub. Archived from the original on 12 December 2019. Retrieved 10 January 2020.
  185. ^ a b "AppArmor — The Linux Kernel documentation". Kernel.org. Archived from the original on 8 May 2020. Retrieved 10 January 2020.
  186. ^ Jake Edge (25 November 2008). "Character devices in user space". LWN.net. Archived from the original on 26 January 2021. Retrieved 7 May 2015.
  187. ^ Jonathan Corbet (2 May 2007). "UIO: user-space drivers". LWN.net. Archived from the original on 11 November 2020. Retrieved 7 May 2015.
  188. ^ a b c d "stable-api-nonsense - Linux kernel source tree". git.kernel.org. Archived from the original on 5 March 2021. Retrieved 18 April 2020.
  189. ^ Gorman, Mel (15 February 2004). Understanding the Linux Virtual Memory Manager (PDF). Prentice Hall. p. 26. ISBN 0-13-145348-3. Archived (PDF) from the original on 3 May 2019. Retrieved 27 January 2020.
  190. ^ Greg Ungerer. "uClinux mainline Announcement". Archived from the original on 31 October 2007. Retrieved 15 January 2008.
  191. ^ a b Nguyen, Binh (30 July 2004). "Linux Filesystem Hierarchy: Chapter 1. Linux Filesystem Hierarchy". The Linux Documentation Project. Archived from the original on 2 December 2020. Retrieved 28 November 2012.
  192. ^ "Admin Guide README". Kernel.org git repositories.
  193. ^ "Linux kernel release 5.x — The Linux Kernel documentation". Kernel.org. Archived from the original on 7 March 2020. Retrieved 4 January 2020.
  194. ^ "README\ABI\Documentation - kernel/git/torvalds/linux.git - Linux kernel source tree". git.kernel.org. Archived from the original on 1 October 2020. Retrieved 18 April 2020.
  195. ^ "syscalls\stable\ABI\Documentation - kernel/git/torvalds/linux.git - Linux kernel source tree". git.kernel.org. Archived from the original on 2 October 2020. Retrieved 18 April 2020.
  196. ^ a b "1.Intro.rst - Documentation/process/1.Intro.rst - Linux source code (v5.8) - Bootlin". elixir.bootlin.com. Retrieved 8 August 2020.
  197. ^ a b "syscalls". man7. Archived from the original on 15 January 2020. Retrieved 28 January 2020.
  198. ^ "intro(2) - Linux manual page". man7.org. Archived from the original on 17 July 2020. Retrieved 16 July 2020.
  199. ^ "clone". man7.org. Archived from the original on 18 January 2020. Retrieved 28 January 2020.
  200. ^ "feature_test_macros". man7.org. Archived from the original on 19 January 2020. Retrieved 28 January 2020.
  201. ^ "vdso(7) - Linux manual page". man7.org. Archived from the original on 2 February 2020. Retrieved 2 February 2020.
  202. ^ a b "futex(2) - Linux manual page". man7.org. Archived from the original on 31 January 2020. Retrieved 2 February 2020.
  203. ^ "syscall(2) - Linux manual page". man7.org. Archived from the original on 21 January 2020. Retrieved 2 February 2020.
  204. ^ "sysfs(5) - Linux manual page". man7.org. Archived from the original on 18 January 2020. Retrieved 6 January 2020.
  205. ^ "Rules on how to access information in sysfs — The Linux Kernel documentation". Kernel.org. Archived from the original on 7 March 2020. Retrieved 6 January 2020.
  206. ^ "Linux Foundation Referenced Specifications". refspecs.linuxbase.org. Retrieved 3 February 2020.
  207. ^ "LSB Specifications". refspecs.linuxbase.org. Retrieved 3 February 2020.
  208. ^ "Linux Standard Base Desktop Specification, Generic Part". refspecs.linuxbase.org. Retrieved 3 February 2020.
  209. ^ "Normative References". refspecs.linuxfoundation.org. Archived from the original on 12 August 2020. Retrieved 3 February 2020.
  210. ^ "Linux Standard Base Core Specification, Generic Part". refspecs.linuxfoundation.org. Archived from the original on 29 November 2019. Retrieved 3 February 2020.
  211. ^ "System V Application Binary Interface - Edition 4.1" (PDF). Sco.com. Archived (PDF) from the original on 13 December 2019. Retrieved 3 February 2020.
  212. ^ "Xinuos Inc. | Developers | Gabi | 17 December 2003 | System V Application Binary Interface - DRAFT". Sco.com. Archived from the original on 3 February 2020. Retrieved 3 February 2020.
  213. ^ "Executable And Linking Format (ELF)". Refspecs.linuxbase.org. Retrieved 3 February 2020.
  214. ^ "elf(5) - Linux manual page". man7.org. Archived from the original on 30 November 2020. Retrieved 18 November 2020.
  215. ^ "Linux Standard Base Core Specification for X86-64". Refspecs.linuxbase.org. Retrieved 3 February 2020.
  216. ^ "System V Application Binary Interface - DRAFT". Refspecs.linuxbase.org. Retrieved 3 February 2020.
  217. ^ Seyfarth, Ray (2012). Introduction to 64 Bit Intel Assembly Language Programming for Linux. CreateSpace Independent Publishing Platform. p. 170. ISBN 9781478119203.
  218. ^ "Anatomy of a system call, part 1 [LWN.net]". lwn.net. Archived from the original on 18 August 2020. Retrieved 16 July 2020.
  219. ^ "Anatomy of a system call, part 2 [LWN.net]". lwn.net. Archived from the original on 6 August 2020. Retrieved 16 July 2020.
  220. ^ Deucher, Alex (7 October 2014). "AMD's New Unified Open Source Driver". X.Org Foundation. Archived from the original on 21 January 2015. Retrieved 21 January 2015.
  221. ^ a b "Symbols - Unreliable Guide To Hacking The Linux Kernel — The Linux Kernel documentation". Kernel.org. Archived from the original on 3 August 2020. Retrieved 8 February 2020.
  222. ^ a b "Exported symbols and the internal API [LWN.net]". Lwn.net. Archived from the original on 31 March 2020. Retrieved 15 March 2020.
  223. ^ a b "Unexporting kallsyms_lookup_name() [LWN.net]". Lwn.net. Archived from the original on 1 April 2020. Retrieved 15 March 2020.
  224. ^ "Trees I: Radix trees [LWN.net]". lwn.net. Archived from the original on 8 November 2020. Retrieved 13 November 2020.
  225. ^ "Trees II: red-black trees [LWN.net]". lwn.net. Archived from the original on 13 November 2020. Retrieved 13 November 2020.
  226. ^ "Unreliable Guide To Hacking The Linux Kernel". Kernel.org (1st ed.). 2005. Archived from the original on 16 February 2020. Retrieved 15 March 2020.
  227. ^ "Unreliable Guide To Hacking The Linux Kernel — The Linux Kernel documentation". Kernel.org. Archived from the original on 7 March 2020. Retrieved 15 March 2020.
  228. ^ "Unreliable Guide To Locking — The Linux Kernel documentation". Kernel.org. Archived from the original on 7 March 2020. Retrieved 15 March 2020.
  229. ^ "SCSI Interfaces Guide — The Linux Kernel documentation". Kernel.org. Archived from the original on 2 June 2020. Retrieved 11 June 2020.
  230. ^ "libATA Developer's Guide — The Linux Kernel documentation". Kernel.org. Archived from the original on 30 May 2020. Retrieved 11 June 2020.
  231. ^ "DRM Internals — The Linux Kernel documentation". Kernel.org. Archived from the original on 1 June 2020. Retrieved 11 June 2020.
  232. ^ "Kernel Mode Setting (KMS) — The Linux Kernel documentation". Kernel.org. Archived from the original on 11 June 2020. Retrieved 11 June 2020.
  233. ^ "Introduce DMA buffer sharing mechanism [LWN.net]". lwn.net. Archived from the original on 11 June 2020. Retrieved 11 June 2020.
  234. ^ "Sharing CPU and GPU buffers on Linux*". 01.org. 12 May 2016. Archived from the original on 11 June 2020. Retrieved 11 June 2020.
  235. ^ "Buffer Sharing and Synchronization — The Linux Kernel documentation". Kernel.org. Archived from the original on 1 June 2020. Retrieved 11 June 2020.
  236. ^ "About mac80211". Linux Kernel Organization, Inc. Archived from the original on 1 February 2021. Retrieved 8 June 2014.
  237. ^ "Linux 802.11 Driver Developer's Guide — The Linux Kernel documentation". Kernel.org. Retrieved 19 November 2021.
  238. ^ "[PATCH v3 1/2] fork: add clone3 [LWN.net]". lwn.net. Archived from the original on 16 July 2020. Retrieved 16 July 2020.
  239. ^ "clone(2) - Linux manual page". man7.org. Archived from the original on 15 July 2020. Retrieved 15 July 2020.
  240. ^ "clone3(), fchmodat4(), and fsinfo() [LWN.net]". lwn.net. Archived from the original on 15 June 2020. Retrieved 15 July 2020.
  241. ^ "ld-linux.so(8) - Linux manual page". man7.org. Archived from the original on 26 November 2020. Retrieved 18 November 2020.
  242. ^ "nptl(7) - Linux manual page". man7.org. Archived from the original on 25 July 2020. Retrieved 25 July 2020.
  243. ^ "futex(7) - Linux manual page". man7.org. Archived from the original on 15 July 2020. Retrieved 25 July 2020.
  244. ^ "Kernel threads made easy [LWN.net]". lwn.net. Archived from the original on 31 March 2020. Retrieved 15 August 2020.
  245. ^ a b Bar, Moshe (1 April 2000). "The Linux Scheduler". Linux Journal. Belltown Media, Inc. Archived from the original on 2 February 2021. Retrieved 14 April 2012.
  246. ^ BKK19-TR03 - The Linux Kernel Scheduler - Overview, 23 April 2019, archived from the original on 15 December 2021, retrieved 17 May 2021
  247. ^ "Lowering Latency in Linux: Introducing a Preemptible Kernel | Linux Journal". Linuxjournal.com. Archived from the original on 9 August 2020. Retrieved 17 August 2020.
  248. ^ "CFS Scheduler — The Linux Kernel documentation". Kernel.org. Retrieved 1 May 2021.
  249. ^ "IEEE Standard for Information Technology – Portable Operating System Interface, POSIX.1b, Real-time extensions (IEEE Std 1003.1b-1993)". Archived from the original on 16 November 2010. Retrieved 17 March 2016.
  250. ^ Larabel, Michael (24 January 2014). "The Linux 3.14 Kernel Already Has Many Exciting Features". Phoronix. Archived from the original on 13 August 2020. Retrieved 3 February 2014.
  251. ^ "Linux kernel 3.14, Section 1.1. Deadline scheduling class for better real-time scheduling". kernelnewbies.org. 30 March 2014. Archived from the original on 15 January 2021. Retrieved 2 April 2014.
  252. ^ "RT-mutex implementation design — The Linux Kernel documentation". Kernel.org. Retrieved 17 December 2021.
  253. ^ "RT-mutex subsystem with PI support — The Linux Kernel documentation". Kernel.org. Retrieved 17 December 2021.
  254. ^ McKenney, Paul (10 August 2005). "A realtime preemption overview". LWN.net. Archived from the original on 10 August 2020. Retrieved 5 February 2012.
  255. ^ "OSADL Project: Realtime Linux". OSADL. Archived from the original on 4 February 2021. Retrieved 5 February 2012.
  256. ^ a b "Steven-Rostedt_on_PREEMPT_RT" (PDF).
  257. ^ "EEVDF Scheduler May Be Ready For Landing With Linux 6.6". Phoronix. Retrieved 31 August 2023.
  258. ^ "[PATCH 00/10] sched: EEVDF using latency-nice [LWN.net]". LWN.net.
  259. ^ "An EEVDF CPU scheduler for Linux [LWN.net]". LWN.net. Retrieved 31 August 2023.
  260. ^ "EEVDF Scheduler Merged For Linux 6.6, Intel Hybrid Cluster Scheduling Re-Introduced". Phoronix.
  261. ^ "locking — The Linux Kernel documentation". Kernel.org. Retrieved 17 December 2021.
  262. ^ "locking.rst - Documentation/kernel-hacking/locking.rst - Linux source code (v5.11.10) - Bootlin". elixir.bootlin.com. Retrieved 29 March 2021.
  263. ^ "What is RCU, Fundamentally? [LWN.net]". lwn.net. Retrieved 29 March 2021.
  264. ^ "What is RCU? Part 2: Usage [LWN.net]". lwn.net. Retrieved 29 March 2021.
  265. ^ "RCU part 3: the RCU API [LWN.net]". lwn.net. Retrieved 29 March 2021.
  266. ^ "Linux-Kernel Memory Model". open-std.org. Retrieved 29 March 2021.
  267. ^ "A formal kernel memory-ordering model (part 1) [LWN.net]". lwn.net. Retrieved 29 March 2021.
  268. ^ "A formal kernel memory-ordering model (part 2) [LWN.net]". lwn.net. Retrieved 29 March 2021.
  269. ^ Stern, Alan. "Explanation of the Linux-Kernel Memory Consistency Model".
  270. ^ "kernel/git/torvalds/linux.git - Linux kernel source tree". git.kernel.org. Retrieved 17 December 2021.
  271. ^ a b "Lock types and their rules — The Linux Kernel documentation". Kernel.org. Retrieved 17 December 2021.
  272. ^ "Short subjects: Realtime, Futexes, and ntfs3". Lwn.net. Retrieved 20 February 2022.
  273. ^ "RT-mutex subsystem with PI support — The Linux Kernel documentation". Kernel.org. Retrieved 20 February 2022.
  274. ^ "RT-mutex implementation design — the Linux Kernel documentation".
  275. ^ "Runtime locking correctness validator — The Linux Kernel documentation". Kernel.org. Retrieved 17 December 2021.
  276. ^ "Interrupts, threads, and lockdep [LWN.net]". lwn.net. Retrieved 17 December 2021.
  277. ^ "Page Tables — The Linux Kernel documentation". www.kernel.org. Retrieved 21 July 2024.
  278. ^ "Physical Memory — The Linux Kernel documentation". www.kernel.org. Retrieved 21 July 2024.
  279. ^ "The Linux Storage Stack Diagram". Thomas-krenn.com. Archived from the original on 3 August 2020. Retrieved 19 March 2020.
  280. ^ "The SLUB allocator". Lwn.net. 11 April 2007. Retrieved 20 February 2022.
  281. ^ a b "Slab allocators in the Linux Kernel: SLAB, SLOB, SLUB" (PDF). Events.static.linuxfound.org. Retrieved 20 February 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

External links