La mayor parte del código del kernel está escrito en C , según lo admite la colección de compiladores GNU (GCC), que tiene extensiones más allá del estándar C. [12] : 18 [13] El código también contiene código ensamblador para lógica específica de la arquitectura, como optimizar el uso de la memoria. y 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 .
Estoy creando un sistema operativo (gratuito) (sólo un hobby, no será grande ni profesional como gnu) para 386(486) clones AT . Esto se viene gestando desde abril y está empezando a prepararse. Me gustaría recibir comentarios sobre las cosas que a la gente le gusta o no le gusta en minix, ya que mi sistema operativo se parece un poco (el mismo diseño físico del sistema de archivos (debido a razones prácticas), entre otras cosas). Actualmente he portado bash (1.08) y gcc (1.40) y todo parece funcionar. Esto implica que obtendré algo práctico dentro de unos meses [...] Sí, no tiene ningún código minix y tiene un fs multiproceso. NO es portátil [ sic ] (usa conmutación de tareas 386, etc.), y probablemente nunca admitirá 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 instaló en el servidor FTP "ftp.funet.fi" de la Red de Universidades e Investigación de Finlandia ( 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 modelo Minix para computadoras AT-386. Finalmente ha llegado a la etapa en la que es incluso utilizable (aunque puede que no dependa de lo que usted quiera), y estoy dispuesto a publicar las fuentes para una distribución más amplia. Es solo la versión 0.02... pero ejecuté con éxito bash, gcc, gnu-make, gnu-sed, compress, etc.
Linux creció rápidamente a medida que muchos desarrolladores, incluida la comunidad MINIX , contribuyeron al proyecto. [ cita necesaria ] 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 kernel de Linux para su sistema operativo. [18]
Torvalds etiquetó el kernel con la versión principal 0 para indicar que aún no estaba destinado a uso general. [19] La versión 0.11, lanzada en diciembre de 1991, fue la primera versión autohospedada ; compilado en una computadora que ejecuta el kernel de Linux.
Cuando Torvalds lanzó la versión 0.12 en febrero de 1992, adoptó la Licencia Pública General GNU versión 2 (GPLv2) en lugar de su licencia anterior, que había elaborado é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 evaluadores de todo el mundo. Con el soporte de las API POSIX , a través de la libC que, si es necesario, actúa como punto de entrada al espacio de direcciones del kernel, Linux podría ejecutar software y aplicaciones que habían sido desarrollados para Unix. [22]
El kernel de Linux admite varias arquitecturas de hardware, lo que proporciona una plataforma común para el software, incluido el software propietario .
El 19 de enero de 1992, se envió la primera publicación 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]
La versión 0.95 fue la primera capaz de ejecutar el sistema X Window . [28] En marzo de 1994, se lanzó Linux 1.0.0 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 1.3, Torvalds decidió que Linux había evolucionado lo suficiente como para garantizar un nuevo número importante, por lo que etiquetó el siguiente lanzamiento como versión 2.0.0. [30] [31] Las características importantes de 2.0 incluyeron multiprocesamiento simétrico (SMP), soporte para más tipos de procesadores y soporte para seleccionar objetivos de hardware específicos y para habilitar funciones y optimizaciones específicas de la arquitectura. [22] La familia de comandos make *config de kbuild habilita y configura opciones para crear ejecutables ad hoc del kernel ( vmlinux ) y módulos cargables. [32] [33]
La versión 2.2, lanzada el 20 de enero de 1999, [34] mejoró la granularidad de bloqueo y la gestión de SMP, agregó compatibilidad con 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 para el código Linux 2.2.13 para el soporte de la arquitectura S/390 . [36]
La versión 2.4.0, lanzada el 4 de enero de 2001, [37] contenía soporte para tarjetas ISA Plug and Play , USB y PC . 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 procesador MIPS de 64 bits más nuevo . [38] Desarrollo para 2.4. x cambió un poco porque se pusieron a disposición más funciones a lo largo de la serie, incluida la compatibilidad con Bluetooth , Logical Volume Manager (LVM) versión 1, compatibilidad con RAID , sistemas de archivos InterMezzo y ext3 .
La versión 2.6.0 se publicó el 17 de diciembre de 2003. [39] El desarrollo de la 2.6. x cambió aún más para incluir nuevas características a lo largo de la serie. Entre los cambios que se han realizado en la serie 2.6 se encuentran: integración de μClinux en las fuentes principales del kernel, soporte PAE , soporte para varias líneas nuevas de CPU , integración de Advanced Linux Sound Architecture (ALSA) en las fuentes principales del kernel, soporte para hasta 2,32 usuarios (antes 2,16 ) , soporte para hasta 2,29 ID de proceso (solo 64 bits, arquitecturas de 32 bits aún limitadas a 2,15 ) , [40] aumentó sustancialmente el número de tipos de dispositivos y el número de dispositivos de cada tipo, soporte mejorado de 64 bits , soporte para sistemas de archivos que admiten tamaños de archivo de hasta 16 terabytes , preferencia en el kernel , soporte para la biblioteca nativa de subprocesos POSIX (NPTL), integración de Linux en modo de usuario en la línea principal fuentes del kernel, integración de SELinux en las fuentes principales del kernel, compatibilidad con InfiniBand y mucho más.
A partir de las versiones 2.6.x, el kernel admitía 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 gratuitamente 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 unas semanas y en dos meses se lanzó el primer núcleo oficial creado con él. [43]
En 2005, el equipo estable se formó como respuesta a la falta de un árbol del kernel donde la gente pudiera trabajar en la corrección de errores y continuara actualizando las versiones estables . [44] En febrero de 2008, se creó el árbol linux-next para que sirviera como lugar donde se reunieran los parches que se fusionarían durante el siguiente ciclo de desarrollo. [45] [46] Varios mantenedores de subsistemas también adoptaron el sufijo -next para los á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 [actualizar], la versión en desarrollo de Linux se mantiene en una rama inestable llamada linux-next . [47]
Torvalds celebró el vigésimo aniversario de Linux en julio de 2011 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 kernel una nueva personalidad uname26 que informa 3.x como 2.6.40+x para que los programas antiguos funcionaran. [48]
La versión 3.0 se publicó el 22 de julio de 2011. [49] El 30 de mayo de 2011, Torvalds anunció que el gran cambio era "NADA. Absolutamente nada". y preguntó: "... asegurémonos de que realmente hagamos que la próxima versión no sea solo un número brillante y completamente nuevo, sino también un buen núcleo". [50] Después de las esperadas 6 a 7 semanas del proceso de desarrollo, se lanzaría cerca del vigésimo aniversario de Linux.
El 11 de diciembre de 2012, Torvalds decidió reducir la complejidad del kernel 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 , lo que convierte a la serie de kernel 3.7 en la última que aún admite el procesador original. [52] [53] La misma serie de soporte unificado 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 aumentó simplemente para evitar números menores grandes. [49] [55] Los kernels estables 3.xy se lanzaron hasta la versión 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, AMD Radeon experimental administración dinámica de energía, 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] En 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]
Un total de 1.991 desarrolladores, de los cuales 334 eran colaboradores nuevos, añadieron más de 553.000 líneas de código a la versión 5.8, batiendo el récord que ostentaba anteriormente la versión 4.9. [60]
Popularidad
Según la Encuesta anual de 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 , [61] aunque solo alrededor del 25% desarrolla con sistemas operativos basados en Linux. [62]
Dado que Android , que es Linux, representa la mayoría de los sistemas operativos de dispositivos móviles, [66] [67] [68] 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 redesarrollo del kernel de Linux
Se ha estimado que el coste de volver a desarrollar la versión 2.6.0 del kernel de 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 mes-persona de COCOMO . [69] En 2006, un estudio financiado por la Unión Europea situó el coste de redesarrollo de la versión 2.6.8 del kernel más alto, en 882 millones de euros (1.140 millones de dólares, 744 millones de libras esterlinas). [70]
Este tema fue retomado en octubre de 2008 por Amanda McPherson, Brian Proffitt y Ron Hale-Evans. Utilizando la metodología de David A. Wheeler, estimaron que el redesarrollo del kernel 2.6.25 ahora cuesta 1.300 millones de dólares (parte de un total de 10.800 millones de dólares para redesarrollar Fedora 9). [71] Nuevamente, García-García y Alonso de Magdaleno de la Universidad de Oviedo (España) estiman que el valor añadido anualmente al kernel fue de unos 100 millones de euros entre 2005 y 2007 y 225 millones de euros en 2008; costaría también más de mil millones de euros ( alrededor de 1.400 millones de dólares en febrero de 2010) para desarrollarse en la Unión Europea. [72]
A partir del 7 de marzo de 2011 , utilizando las LOC[actualizar] (líneas de código) actuales de un kernel Linux 2.6.x y las cifras salariales con los cálculos de David A. Wheeler, costaría aproximadamente 3 mil millones de dólares (alrededor de 2,2 mil millones de euros) volver a desarrollar el kernel Linux como sigue haciéndose más grande. Un cálculo actualizado al 26 de septiembre de 2018 , utilizando 20.088.609 LOC (líneas de código) actuales para el kernel de Linux 4.14.14 y el salario promedio nacional actual de un programador en EE. UU. de 75.506 dólares, muestra que reescribir costaría aproximadamente 14.725.449.000 dólares (£ 11.191.341.000). el código existente. [73][actualizar]
Distribución
La mayoría de los que utilizan Linux lo hacen a través de una distribución de Linux . Algunas distribuciones envían el núcleo básico o estable. Sin embargo, varios proveedores (como Red Hat y Debian ) mantienen un árbol de fuentes personalizado. Por lo general, se actualizan a un ritmo más lento que la rama básica y generalmente incluyen 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 lanzado en la versión básica de la distribución. El proveedor comenzó a basar su sucursal.
Afiliación corporativa de contribuciones al kernel de Linux, 4.8–4.13 [75]
La comunidad de desarrolladores del kernel de Linux está compuesta por entre 5.000 y 6.000 miembros. Según el "Estado del desarrollo del kernel de Linux 2017", un estudio publicado por la Fundación Linux, que cubre los compromisos para las versiones 4.8 a 4.13, alrededor de 1500 desarrolladores de entre 200 y 250 empresas en promedio contribuyeron. Los 30 principales desarrolladores contribuyeron con un poco más del 16% del código. En cuanto a las empresas, las principales contribuyentes son Intel (13,1%) y Red Hat (7,2%), Linaro (5,6%), IBM (4,1%), el segundo y quinto lugar lo ocupan las 'ninguna' (8,2%) y ' categorías desconocidas (4,1%). [75]
En lugar de una hoja de ruta, existen directrices técnicas. En lugar de una asignación central de recursos, hay personas y empresas que tienen un interés en el desarrollo futuro del kernel de Linux, de forma bastante independiente entre sí: personas como Linus Torvalds y yo no planificamos la evolución del kernel. No nos sentamos ahí y pensamos en la hoja de ruta para los próximos dos años y luego asignamos recursos a las distintas funciones nuevas. Eso es porque no tenemos ningún recurso. Todos los recursos son propiedad de las distintas corporaciones que utilizan y contribuyen a Linux, así como de los distintos contribuyentes independientes que existen. Son aquellas personas que poseen los recursos quienes deciden...
Conflictos notables entre los desarrolladores del kernel de Linux:
En julio de 2007, Con Kolivas anunció que dejaría de desarrollar para el kernel de Linux. [76] [77]
En julio de 2009, Alan Cox renunció a su función como mantenedor de la capa TTY después de un desacuerdo con Torvalds. [78]
En diciembre de 2010, hubo una discusión entre el mantenedor de SCSI de Linux, James Bottomley, y el mantenedor de SCST, Vladislav Bolkhovitin, sobre qué pila de destino SCSI debería incluirse en el kernel de Linux. [79] Esto molestó a algunos usuarios de Linux. [80]
En junio de 2012, Torvalds dejó muy claro que no estaba de acuerdo con que NVIDIA publicara sus controladores como cerrados. [81]
En abril de 2014, Torvalds prohibió a Kay Sievers enviar parches al kernel de Linux por no solucionar los errores que provocaban que systemd interactuara negativamente con el kernel. [82]
En octubre de 2014, Lennart Poettering acusó a Torvalds de tolerar el estilo de discusión brusco en las listas de correo relacionadas con el kernel de Linux y de ser un mal modelo a seguir. [83]
En marzo de 2015, Christoph Hellwig presentó una demanda contra VMware por infracción de los derechos de autor sobre el kernel de Linux. [84] Linus Torvalds dejó claro que no estaba de acuerdo con esta y otras iniciativas similares al llamar a los abogados una enfermedad enconada. [85]
En abril de 2021, se descubrió que un equipo de la Universidad de Minnesota estaba enviando parches de "mala fe" al núcleo como parte de su investigación. Esto resultó en la reversión inmediata de todos los parches enviados por un miembro de la universidad. Además, un responsable de mantenimiento senior emitió una advertencia de que cualquier parche futuro de la universidad sería rechazado en cuanto lo viera. [86] [87]
Destacados desarrolladores del kernel de Linux han sido conscientes de la importancia de evitar conflictos entre desarrolladores. [88] Durante mucho tiempo no hubo ningún código de conducta para los desarrolladores del kernel debido a la oposición de Torvalds. [89] Sin embargo, el 8 de marzo de 2015 se introdujo un Código de Conflictos del Kernel de Linux. [90] 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. [91] [92] El 30 de noviembre de 2018, cumpliendo con el Código de Conducta , Jarkko Sakkinen de Intel envió parches que reemplazaban las instancias de "joder" que aparecían en los comentarios del código fuente con versiones adecuadas centradas en la palabra "abrazo". [93]
Los desarrolladores que se sientan tratados injustamente pueden informar esto al Consejo Asesor Técnico de la Fundación Linux . [94] En julio de 2013, el responsable del mantenimiento 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 son a menudo contundentes, groseros o brutales". su trabajo hecho". [95] 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, mantenedor del controlador del 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. [96]
Laurent Pinchart pidió a los desarrolladores comentarios sobre sus experiencias con la comunidad del kernel en la Conferencia Europea de Linux Embedded 2017. Las cuestiones planteadas 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 respondieron a los parches enviados por los desarrolladores. Torvalds sostuvo que nunca habría coherencia en el manejo de parches porque diferentes subsistemas del núcleo, con el tiempo, han adoptado diferentes procesos de desarrollo. Por lo tanto, se acordó que cada mantenedor del subsistema del núcleo documentaría las reglas para la aceptación de parches. [97]
El código fuente del kernel, también conocido como árbol fuente, se gestiona en el sistema de control de versiones Git , también creado por Torvalds. [101]
En 2021 [actualizar], 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 kernel de Linux (LKML) (y a menudo también en otras listas de correo dedicadas a subsistemas particulares). Los parches deben ajustarse a un conjunto de reglas y a un lenguaje formal que, entre otras cosas, describe qué líneas de código se eliminarán y qué otras se agregarán a los archivos especificados. Estos parches se pueden procesar automáticamente para que los administradores del sistema puedan aplicarlos para realizar solo algunos cambios en el código o actualizar gradualmente a la siguiente versión. [102] Linux se distribuye también en formatos GNU zip (gzip) y bzip2 .
Un desarrollador que quiere cambiar el kernel de Linux escribe y prueba un cambio de código. Dependiendo de qué tan significativo sea el cambio y 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 único subsistema mantenido por un único mantenedor, estos parches se envían como correos electrónicos al mantenedor del subsistema con la lista de correo adecuada en Cc. El responsable del mantenimiento y los lectores de la lista de correo revisarán los parches y proporcionarán comentarios. Una vez finalizado el proceso de revisión, el mantenedor del subsistema acepta los parches en el árbol del kernel de Git correspondiente. Si los cambios en el kernel de Linux son correcciones de errores que se consideran lo suficientemente importantes, se enviará una solicitud de extracción de los parches a Torvalds dentro de unos 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 suele durar dos semanas y comienza inmediatamente después del lanzamiento de la versión anterior del kernel. [103] El árbol de fuentes del kernel de Git nombra a todos los desarrolladores que han contribuido al kernel de Linux en el directorio de Créditos y todos los mantenedores del subsistema se enumeran en Mantenedores . [104]
Como ocurre con muchos grandes proyectos de software de código abierto, los desarrolladores deben adherirse al Convenio de Colaboradores , un código de conducta destinado a abordar el acoso de los contribuyentes minoritarios. [105] [106] Además, para evitar ofensas, es obligatorio el uso de terminología inclusiva dentro del código fuente. [107]
En septiembre de 2021, el requisito de la versión GCC para compilar y construir el kernel de Linux aumentó de GCC 4.9 a 5.1, lo que permite 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 . 108] y la migración al estándar se llevará a cabo en marzo de 2022, con el lanzamiento de Linux 5.18. [109]
El soporte inicial para el lenguaje de programación Rust se agregó en Linux 6.1 [5] , que se lanzó en diciembre de 2022, [110] con versiones posteriores del kernel, como Linux 6.2 y Linux 6.3, lo que mejoró aún más el soporte. [111] [112]
Estilo de codificación
Desde 2002, el código debe cumplir con las 21 reglas que componen el estilo de codificación del kernel de Linux. [113] [114]
Versionado
Como ocurre con la mayoría del software, la versión del kernel es una serie de números separados por puntos.
Para las primeras versiones, la versión constaba de tres o cuatro números separados por puntos llamados versión principal , versión menor y revisión. [12] : 9 En ese momento, las versiones menores impares eran para desarrollo y pruebas, mientras que las versiones menores pares eran para producción. El cuarto dígito opcional indicaba un nivel de parche. [19] Las versiones de desarrollo se indicaron con un sufijo de versión candidata ( -rc ).
Las convenciones de versiones actuales son diferentes. El número par/impar que implica dev/prod se ha eliminado, y los dos primeros números juntos indican una versión principal. Si bien el plazo está abierto para el desarrollo de la próxima versión principal, el sufijo -rcN se utiliza para identificar la enésima versión candidata para la próxima versión. [115] 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 de una versión estable se identifican mediante un esquema de tres números (por ejemplo, 4.16.1, 4.16.2,...). [115]
GNU cc fue durante mucho tiempo el único compilador capaz de construir Linux correctamente. En 2004, Intel afirmó haber modificado el kernel para que su compilador de C también fuera capaz de compilarlo. [116] Hubo otro éxito similar en 2009, con una versión 2.6.22 modificada. [117] [118] La compatibilidad con el compilador Intel se eliminó en 2023. [119]
Desde 2010, se han realizado esfuerzos para construir Linux con Clang , un compilador alternativo para el lenguaje C; [120] a partir del 12 de abril de 2014, Clang casi podría compilar el kernel oficial. [121] [122] El proyecto dedicado a este esfuerzo se denomina LLVMLinux por la infraestructura del compilador LLVM sobre la que se construye Clang. [123] LLVMLinux no pretende bifurcar ni Linux ni LLVM, por lo tanto es un metaproyecto compuesto de parches que eventualmente se envían a los proyectos anteriores. Al permitir que Clang compile Linux, los desarrolladores pueden beneficiarse de tiempos de compilación más cortos. [124]
En 2017, los desarrolladores completaron la actualización de parches para admitir la construcción del kernel de Linux con Clang en la versión 4.15, habiendo respaldado el soporte para X86-64 y AArch64 a las ramas 4.4, 4.9 y 4.14 del árbol del kernel estable. El Pixel 2 de Google se envió con el primer kernel de Linux construido por Clang , [125] aunque existían parches para Pixel (primera generación) . [126] En 2018, ChromeOS pasó a compilar kernels con Clang de forma predeterminada, [127] mientras que Android (sistema operativo) hizo que Clang [128] y el enlazador LLD de LLVM [129] fueran necesarios para las compilaciones de kernel en 2019. Google movió su kernel de producción. utilizado en todos sus centros de datos hasta su construcción con Clang en 2020. [130] Hoy en día, el grupo ClangBuiltLinux coordina correcciones tanto para Linux como para LLVM para garantizar la compatibilidad, ambos compuestos por miembros de LLVMLinux y con parches actualizados de LLVMLinux .
Depuración
Salida de pánico del kernel de Linux
Como ocurre con cualquier software, los problemas con el kernel de Linux pueden ser difíciles de solucionar . Los desafíos comunes se relacionan con el acceso al espacio del usuario versus al espacio del kernel, el mal uso de las primitivas de sincronización y la administración incorrecta del hardware. [12] : 364
Un Ups es un error no fatal en el kernel. Después de un error de este tipo, las operaciones continúan con una fiabilidad sospechosa. [131]
Un pánico (generado por pánico() ) es un error fatal. Después de tal error, el kernel imprime un mensaje y detiene la computadora. [12] : 371
El kernel permite la depuración mediante impresión a través de printk (), que almacena 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 configurar el nivel máximo de registro de los mensajes que se enviarán a la consola. [132] Los mensajes del kernel también se exportan al área de usuario a través de la interfaz /dev/kmsg . [133]
El mecanismo ftrace permite la depuración mediante rastreo. Se utiliza para monitorear y depurar Linux en tiempo de ejecución y puede analizar las latencias del espacio del usuario debido al mal comportamiento del kernel. [134] [135] [136] [137] Además, ftrace permite a los usuarios rastrear Linux en el momento del arranque. [138]
kprobes y kretprobes pueden interrumpir la ejecución del kernel (como depuradores en el espacio de usuario) y recopilar información de forma no disruptiva. [139] kprobes se pueden insertar en el código en (casi) cualquier dirección, mientras que kretprobes funcionan en el retorno de la función. Los uprobes tienen propósitos similares pero también tienen algunas diferencias en el uso y la implementación. [140]
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 a depurar mediante un cable serie o Ethernet . [141]
Proceso de cambio
El proyecto del kernel de Linux integra código nuevo de forma continua. El procedimiento operativo estándar es que el software registrado 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 según los estándares del código del kernel y mantener una cola de parches que se pueden enviar a Torvalds dentro de una ventana de fusión que generalmente dura varias semanas.
Torvalds fusiona los parches en el código fuente de la versión estable anterior del kernel de Linux, creando la versión candidata (-rc) para la próxima versión estable. Una vez que se cierra la ventana de combinación, solo se aceptan correcciones al nuevo código en la versión de desarrollo. La versión de desarrollo -rc del kernel pasa por pruebas de regresión y una vez que Torvalds y los mantenedores del subsistema lo consideran estable, se lanza una nueva versión y el proceso de desarrollo comienza de nuevo. [142]
Linux principal
El árbol Git que contiene el código fuente del kernel de Linux se conoce como Linux principal . Cada versión estable del kernel se origina en el árbol principal [143] y se publica con frecuencia en kernel.org . Mainline Linux sólo tiene un soporte sólido para un pequeño subconjunto de los muchos dispositivos que ejecutan Linux. El soporte no principal lo proporcionan proyectos independientes, como Yocto o Linaro , pero en muchos casos se necesita el kernel del proveedor del dispositivo. [144] El uso de un kernel de proveedor probablemente requiera un paquete de soporte de placa .
Mantener un árbol de kernel fuera de Linux principal ha demostrado ser difícil. [145]
Mainlining se refiere al esfuerzo de agregar soporte para un dispositivo al núcleo principal, [146] mientras que anteriormente solo había soporte en una bifurcación o ningún soporte en absoluto. Esto generalmente incluye agregar controladores o archivos de árbol de dispositivos . Cuando esto finaliza, la función o solución de seguridad se considera principal . [147]
Kernel tipo Linux
El mantenedor de la rama estable, Greg Kroah-Hartman , ha aplicado el término similar a Linux a las bifurcaciones del kernel posteriores realizadas por proveedores que agregan millones de líneas de código al kernel principal. [148] En 2019, Google declaró que quería utilizar el kernel principal de Linux en Android para reducir la cantidad de bifurcaciones del kernel. [149] El término similar a Linux también se ha aplicado al subconjunto del kernel de Linux integrable , que no incluye el kernel de Linux principal completo sino un pequeño subconjunto modificado del código. [150]
Hay ciertas comunidades que desarrollan kernels 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. [151] Algunos sistemas operativos desarrollados para teléfonos móviles utilizaron inicialmente 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 kernel: [152] [153]
Esto significa que cualquier controlador escrito para plataformas de hardware Android no puede fusionarse en el árbol del kernel principal porque depende del código que solo se encuentra en el árbol del kernel de Google, lo que hace que no se pueda compilar en el árbol kernel.org. Debido a esto, Google ahora ha impedido que una gran cantidad de controladores de hardware y código de plataforma se fusionen en el árbol principal del kernel. Crear efectivamente una rama del kernel en la que ahora confían varios proveedores diferentes. [154]
Hoy en día, Android utiliza un Linux personalizado [155] donde se implementan cambios importantes en los controladores de dispositivos, pero se requieren algunos cambios en el código del núcleo central. Los desarrolladores de Android también envían parches para Linux oficial que finalmente pueden iniciar el sistema operativo Android. Por ejemplo, un Nexus 7 puede arrancar y ejecutar la línea principal de Linux. [155]
En una presentación de 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 exactamente las mismas fuentes del kernel o no:
No lo son... bueno, lo son, y no lo son. No existe un núcleo único. Cada distribución tiene sus propios cambios. Esto ha estado sucediendo desde prácticamente el primer día. No sé si recordarán que Yggdrasil era conocido por tener cambios bastante extremos en el kernel e incluso hoy en día todos los principales proveedores tienen sus propios ajustes porque tienen una parte del mercado que les interesa y, francamente, así es como debería serlo. 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 punto de tener un sistema abierto. Entonces, 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 kernel estándar, 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 de registro integrado en el kernel estándar no fue porque amo a Hans Reiser. Fue porque SUSE comenzó a distribuir ReiserFS como su kernel estándar, lo que me dijo "ok". En realidad, esto está en uso de producción. La gente normal está haciendo esto. Deben saber algo que yo no sé. Entonces, en un sentido muy real, lo que hacen muchas casas de distribución es que son parte de este "hagamos nuestra propia sucursal" y "hagamos nuestros cambios en esto". Y gracias a la GPL, puedo tomar las mejores porciones. [156]
La última versión y las versiones anteriores se mantienen por separado. La mayoría de las últimas versiones del kernel fueron supervisadas por Torvalds. [157]
La comunidad de desarrolladores del kernel de Linux mantiene un kernel estable aplicando correcciones para errores de software que se han descubierto durante el desarrollo del kernel estable posterior. Por lo tanto, www.kernel.org siempre enumera dos núcleos estables. El próximo kernel estable de Linux se lanza entre 8 y 12 semanas después.
Algunas versiones están designadas para soporte a largo plazo como versiones a largo plazo con corrección de errores durante dos o más años. [158]
Arquitectura y características
Mapa del kernel de LinuxDiagrama de Sankey de las líneas de código fuente del kernel de Linux
Aunque parezca contradictorio, el kernel de Linux es monolítico y modular. El kernel se clasifica arquitectónicamente como un kernel monolítico ya que todo el sistema operativo se ejecuta en el espacio del kernel. 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 [159] Admite funciones que antes solo estaban disponibles en núcleos de código cerrado de sistemas operativos no libres.
El resto del artículo hace uso de la convención de las páginas del manual UNIX y sistemas operativos similares a Unix . 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 al sistema y exec(3) se refiere a un contenedor de biblioteca de espacio de usuario.
La siguiente es una descripción general del diseño arquitectónico y de las características notables.
Selección y configuración de cientos de funciones y controladores del kernel (usando uno de la familia de comandos make *config antes de compilar), [160] [33] [32] modificación de los parámetros del kernel antes del arranque (generalmente insertando instrucciones en las líneas del menú GRUB2 ) y ajuste fino del comportamiento del kernel en tiempo de ejecución (usando la interfaz sysctl(8) para /proc/sys/ ). [161] [162] [163]
Programadores de E/S configurables, llamada al sistema ioctl(2) [170] que manipula los parámetros del dispositivo subyacente de archivos especiales (es una llamada al sistema no estándar, ya que los argumentos, los retornos y la semántica dependen del controlador del dispositivo en cuestión), soporte para E/S asíncronas POSIX [171] (sin embargo, debido a que escalan mal con aplicaciones multiproceso, se tuvo que crear una familia de llamadas al sistema de E/S específicas de Linux ( io_*(2) [172] ) para la gestión de E/S asíncronas. O contextos adecuados para el procesamiento concurrente).
Virtualización a nivel de sistema operativo (con Linux-VServer ), paravirtualización y virtualización asistida por hardware (con KVM o Xen , y usando QEMU para emulación de hardware); [173] [174] [175] [176] [177] [178] En el hipervisor Xen , el kernel de Linux proporciona soporte para crear distribuciones de Linux (como openSUSE Leap y muchas otras) que funcionan como Dom0 , que son máquinas virtuales. Servidores host que proporcionan el entorno de gestión para las máquinas virtuales del usuario ( DomU ). [179]
Virtualización de E/S con VFIO y SR-IOV . La E/S de función virtual (VFIO) expone el acceso directo del dispositivo al espacio del usuario en un entorno protegido de memoria segura (IOMMU). Con VFIO, un VM Guest puede acceder directamente a los dispositivos de hardware en el VM Host Server. Esta técnica mejora el rendimiento, en comparación tanto con la virtualización completa como con la paravirtualización. Sin embargo, con VFIO, los dispositivos no se pueden compartir con varios invitados de VM. La virtualización de E/S de raíz única (SR-IOV) combina las mejoras de rendimiento de VFIO y la capacidad de compartir un dispositivo con varios invitados de VM (pero requiere hardware especial que debe ser capaz de aparecer ante dos o más invitados de VM como dispositivos diferentes) . [180]
Mecanismos de seguridad para control de acceso discrecional y obligatorio (SELinux, AppArmor, POSIX ACLs , y otros). [181] [182]
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 ejecución y también se pueden adelantar bajo ciertas condiciones para manejar las interrupciones de hardware correctamente y soportar mejor el multiprocesamiento simétrico . [166] Por elección, Linux no tiene una interfaz binaria de aplicación de controlador de dispositivo estable . [185]
El hardware está representado 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 . [188] La información del proceso se asigna al directorio /proc . [188]
Interfaces
Se distinguen cuatro interfaces: dos internas al kernel y dos entre el kernel y el espacio de usuario.
Linux comenzó como un clon de UNIX y apunta al cumplimiento de POSIX y la especificación única de UNIX . [190] El kernel proporciona llamadas al sistema y otras interfaces que son específicas de Linux. Para ser incluido en el kernel oficial, el código debe cumplir con un conjunto de reglas de licencia. [6] [11]
Los módulos de kernel cargables (LKM), por diseño, no pueden depender de una ABI estable. [185] Por lo tanto, siempre deben recompilarse cada vez que se instala un nuevo ejecutable del kernel en un sistema; de lo contrario, no se cargarán. Los controladores en el árbol que están configurados para convertirse en una parte integral del ejecutable del kernel ( vmlinux ) están vinculados estáticamente mediante el proceso de compilación.
No hay garantía de estabilidad de la API en el kernel a nivel fuente [185] y, debido a esto, el código del controlador del dispositivo , así como el código de cualquier otro subsistema del kernel, debe mantenerse actualizado con la evolución del kernel. Cualquier desarrollador que realice un cambio en la API debe corregir cualquier código que se rompa como resultado de su cambio. [193]
Las llamadas al sistema solo se pueden invocar mediante instrucciones de ensamblaje que permiten la transición del 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, [198] ingresan de forma transparente al kernel que se ejecutará en nombre del proceso de llamada. [194] Para llamadas al sistema no expuestas por libC, como el mutex rápido del espacio de usuario , [199] la biblioteca proporciona una función llamada syscall(2) que se puede utilizar para invocarlas explícitamente. [200]
Los pseudosistemas de archivos (p. ej., los sistemas de archivos sysfs y procfs ) y los archivos especiales (p. ej. /dev/random, /dev/sda, /dev/tty, y muchos otros) constituyen otra capa de interfaz para las estructuras de datos del núcleo que representan dispositivos hardware o lógicos (software). [201] [202]
ABI del kernel al espacio de usuario
Debido a las diferencias que existen 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 se puede ejecutar 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 kernel de Linux, diferencias en las bibliotecas del sistema, servicios (demonios), jerarquías del sistema de archivos y variables de entorno.
El principal estándar relacionado con la compatibilidad binaria y de aplicaciones de las distribuciones de Linux es Linux Standard Base (LSB). [203] [204] Sin embargo, la LSB va más allá de lo que concierne al kernel de Linux, porque también define las especificaciones del escritorio, las bibliotecas X y Qt que poco tienen que ver con él. [205] La versión 5 de LSB se basa en varios estándares y borradores (POSIX, SUS, X/Open, File System Hierarchy (FHS) y otros). [206]
Las partes del LSB más relevantes para el kernel son la ABI General (gABI), [207] especialmente la ABI System V [208] [209] y el Formato Ejecutable y de Enlace (ELF), [210] [211] y el ABI específica del procesador (psABI), por ejemplo, la especificación principal para X86-64. [212] [213]
La ABI estándar para cómo los programas de usuario x86_64 invocan llamadas al sistema es cargar el número de syscall en el registro rax y los otros parámetros en rdi , rsi , rdx , r10 , r8 y r9 , y finalmente colocar la instrucción de ensamblaje syscall en el código. [214] [215] [216]
API en el kernel
En XDC2014, Alex Deucher de AMD anunció el controlador unificado en modo kernel. [217] El controlador gráfico propietario de Linux, libGL-fglrx-glx , compartirá la misma infraestructura DRM con Mesa 3D . Como no existe una ABI estable en el kernel , AMD tuvo que adaptar constantemente el antiguo blob binario utilizado por Catalyst.
Hay varias API internas del kernel entre los subsistemas del kernel. Algunos están disponibles sólo dentro de los subsistemas del kernel, mientras que un conjunto algo limitado de símbolos internos (es decir, variables, estructuras de datos y funciones) está expuesto a módulos cargables dinámicamente (por ejemplo, controladores de dispositivos cargados bajo demanda), ya sea que se exporten. con las macros EXPORT_SYMBOL() y EXPORT_SYMBOL_GPL() [218] [219] (esta última reservada a módulos publicados bajo una licencia compatible con GPL). [220]
Linux proporciona API en el kernel que manipulan estructuras de datos (p. ej., listas enlazadas , árboles de base , [221] árboles rojo-negro , [222] colas ) o realizan rutinas comunes (p. ej., 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. [223] [224] [225]
Las API internas incluyen bibliotecas de servicios comunes de bajo nivel utilizados por los controladores de dispositivos:
Interfaces SCSI y libATA : respectivamente, un protocolo de comunicación basado en paquetes de igual a igual para dispositivos de almacenamiento conectados a dispositivos USB, SATA, SAS, Fibre Channel, FireWire, ATAPI, [226] y una biblioteca en el kernel para admitir [S] Controladores y dispositivos de host ATA. [227]
Administrador de renderizado directo (DRM) y configuración del modo kernel (KMS): para interactuar con GPU y satisfacer las necesidades del hardware de video moderno con aceleración 3D, [228] y para configurar la resolución de pantalla, la profundidad de color y la frecuencia de actualización [229]
Búferes DMA ( DMA-BUF ): para compartir búferes para acceso directo a la memoria del hardware entre múltiples controladores de dispositivos y subsistemas [230] [231] [232]
mac80211 y cfg80211: para controladores de interfaz de red inalámbrica [233] [234]
ABI en el kernel
Los desarrolladores de Linux optaron por no mantener una ABI estable en el kernel. Los módulos compilados para una versión específica del kernel no se pueden cargar en otra versión sin volver a compilarlos. [185]
Multiprocesamiento
Linux crea procesos mediante las llamadas al sistema clone(2) o clone3(2) [235] más recientes . 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 kernel, aunque ese mismo identificador se llama PID en el espacio de usuario), hasta nuevos subprocesos dentro del proceso de llamada. [236] [237]
Si el ejecutable está vinculado dinámicamente a bibliotecas compartidas, se utiliza un vinculador dinámico para buscar y cargar los objetos necesarios, preparar el programa para ejecutarse y luego ejecutarlo. [238]
El kernel proporciona los mecanismos futex(7) (mutex rápido en el espacio de usuario) para el bloqueo y la sincronización del espacio de usuario. [240] La mayoría de las operaciones se realizan en el espacio de usuario, pero puede ser necesario comunicarse con el kernel mediante la llamada al sistema futex(2) . [199]
A diferencia de los subprocesos del espacio de usuario descritos anteriormente, los subprocesos del kernel se ejecutan en el espacio del kernel. [241]
Programación
El programador de procesos de Linux es modular, en el sentido de que permite diferentes clases y políticas de programación. [242] [243] Las clases de programador son algoritmos de programador conectables que se pueden registrar con el código del programador base. 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.
Para tareas normales, de forma predeterminada, el kernel utiliza la clase Completely Fair Scheduler (CFS), introducida en la versión 2.6.23. [168] El programador se define como una macro en un encabezado C como SCHED_NORMAL. En otros núcleos POSIX, una política similar conocida como SCHED_OTHERasigna intervalos de tiempo de CPU (es decir, asigna intervalos absolutos del tiempo del procesador dependiendo de la prioridad predeterminada o calculada dinámicamente de cada proceso). Linux CFS elimina los intervalos de tiempo absolutos y asigna una proporción justa de tiempo de CPU, en 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 (buenos valores). [12] : 46–50
Con la preferencia del usuario, el programador del kernel 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 su ejecución (CPU, memoria y más). Lo hace de acuerdo con el algoritmo CFS (en particular, utiliza una variable llamada vruntime para clasificar entidades y luego elige la que tiene el menor vruntime, es decir, la entidad programable que ha tenido la menor proporción de tiempo de CPU), para la política del planificador activo y a las prioridades relativas. [245] Con la preferencia del kernel, el kernel puede adelantarse a sí mismo cuando regresa un controlador de interrupciones, cuando las tareas del kernel se bloquean y cuando un subsistema llama explícitamente a la función Schedule().
El kernel también contiene dos clases de programación en tiempo real compatibles con POSIX [246]SCHED_FIFO denominadas ( primero en entrar, primero en salir en tiempo real ) y SCHED_RR( round-robin en tiempo real ), las cuales tienen prioridad sobre la clase predeterminada. [242] En la versión 3.14 del kernel, lanzada el 30 de marzo de 2014, se agregó una política de programación adicional conocida como SCHED DEADLINE, que implementa el primer algoritmo de fecha límite más temprana (EDF) . [247] [248]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 preferencia y la desactivación de interrupciones (cuando sea posible), PI Mutexes (es decir, primitivas de bloqueo que evitan la inversión de prioridad), [249] [250] soporte para temporizadores de eventos de alta precisión (HPET), actualización de lectura, copia y actualización preventiva (RCU), subprocesos IRQ (forzados) y otras características menores. [251] [252] [253]
En 2023, Peter Zijlstra propuso reemplazar CFS con un programador de primera programación de fecha límite virtual (EEVDF) elegible más temprano , [254] [255] para evitar la necesidad de parches de "latencia agradable" de CFS. [256] El programador EEVDF reemplazó a CFS en la versión 6.6 del kernel de Linux. [257]
Sincronización
El kernel tiene diferentes causas de concurrencia (por ejemplo, interrupciones, mitades inferiores, preferencia de tareas del kernel y de los usuarios, multiprocesamiento simétrico). [12] : 167
PREEMPT_RTEl código incluido en Linux principal proporciona RT-mutex , un tipo especial de Mutex que no desactiva la preferencia y admite herencia de prioridad. [267] [268] Casi todas las cerraduras se cambian a cerraduras inactivas cuando se utiliza la configuración para operación en tiempo real. [269] [253] [268] 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 camarero de mayor prioridad hasta que se libera ese bloqueo. [270] [271]
Linux incluye un validador de bloqueo del kernel llamado Lockdep . [272] [273]
Interrumpe
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 limitaciones de tiempo y a las necesidades de sincronización de las tareas que componen la gestión. La primera parte está compuesta por una rutina de servicio de interrupción asíncrona que en Linux se conoce como mitad superior , mientras que la segunda parte la lleva a cabo uno de tres tipos de las llamadas mitades inferiores ( softirq , tasklets y colas de trabajo ). . [12] : 133-137
Las rutinas del servicio de interrupción de Linux se pueden anidar. Una nueva IRQ puede quedar atrapada en un ISR de alta prioridad que se adelanta a cualquier otro ISR de menor prioridad.
Memoria
Linux implementa memoria virtual con tablas de páginas de 5 niveles . [274] El kernel no es paginable (lo que significa que siempre reside en la memoria física y no se puede intercambiar al disco) y no hay protección de la memoria (no hay señales SIGSEGV , a diferencia del espacio del usuario), por lo tanto, las violaciones de la memoria provocan inestabilidad y problemas en el sistema. accidentes. [12] : 20 La memoria de usuario es paginable de forma predeterminada, aunque la paginación para áreas de memoria específicas se puede desactivar con la familia mlock()de llamadas al sistema .
La información del marco de página se mantiene en estructuras de datos apropiadas (de tipo struct page ) que se completan inmediatamente después del inicio y se conservan hasta el cierre, independientemente de si están asociadas con páginas virtuales. El espacio físico de direcciones 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. [275]
Se pueden asignar dinámicamente pequeños fragmentos de memoria en el espacio del kernel a través de la familia de kmalloc()API y liberarlos con la variante adecuada de kfree(). vmalloc()y kvfree()se utilizan para grandes trozos prácticamente contiguos. alloc_pages()asigna el número deseado de páginas completas.
El diagrama de pila de almacenamiento de Linux [276]
El kernel solía incluir los asignadores SLAB, SLUB y SLOB como alternativas configurables. [277] [278] El asignador SLOB se eliminó en Linux 6.4 [279] y el asignador SLAB se eliminó en Linux 6.8. [280] El único asignador que queda es SLUB, que busca simplicidad y eficiencia, [278] es PREEMPT_RTcompatible [281] y se introdujo en Linux 2.6.
Arquitecturas soportadas
TiVo DVR , un dispositivo de consumo que ejecuta Linux
Si bien no fue diseñado originalmente para ser portátil , [15] [282] Linux es ahora uno de los kernels de sistemas operativos más ampliamente adaptados, ejecutándose en una amplia gama de sistemas, desde la arquitectura ARM hasta computadoras mainframe IBM z/Architecture . El primer puerto se realizó en la plataforma Motorola 68000 . Las modificaciones al kernel fueron tan fundamentales que Torvalds vio la versión de Motorola como una bifurcación y un "sistema operativo tipo Linux". [282] Sin embargo, eso llevó a Torvalds a liderar una reestructuración importante del código para facilitar la migración a más arquitecturas informáticas. El primer Linux que, en un único árbol fuente, tenía código para más de i386, soportaba la plataforma DEC Alpha AXP de 64 bits. [283] [284] [282]
Linux se ejecuta como el sistema operativo principal en la Cumbre de IBM ; En octubre de 2019 , las 500 supercomputadoras más rápidas del mundo ejecutan algún sistema operativo basado en el kernel de Linux, [285] un gran cambio con respecto a 1998, cuando se agregó la primera supercomputadora Linux a la lista. [286][update]
Linux también ha sido portado a varios dispositivos portátiles como el iPhone 3G y el iPod de Apple . [287]
Dispositivos compatibles
En 2007, se inició el proyecto LKDDb para construir una base de datos completa de hardware y protocolos conocidos por los kernels de Linux. [288] La base de datos se construye automáticamente mediante 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 usuarios de varias distribuciones de Linux. [289]
Parches en vivo
Las actualizaciones sin reinicio pueden incluso aplicarse al kernel mediante el uso de tecnologías de parcheo en vivo como Ksplice , kpatch y kGraft . Las bases minimalistas para la aplicación de parches en vivo al kernel se fusionaron en la línea principal del kernel de Linux en la versión 4.0 del kernel, que se lanzó el 12 de abril de 2015. Esas bases, conocidas como livepatch y basadas principalmente en la funcionalidad ftrace del kernel , forman un núcleo común capaz de admitir parches en caliente. tanto por kGraft como por kpatch, al proporcionar una interfaz de programación de aplicaciones (API) para los módulos del kernel que contienen parches activos y una interfaz binaria de aplicaciones (ABI) para las utilidades de administración del espacio de usuario. Sin embargo, el núcleo común incluido en el kernel 4.0 de Linux solo admite la arquitectura x86 y no proporciona ningún mecanismo para garantizar la coherencia a nivel de funciones mientras se aplican los parches activos. A partir de abril de 2015 [update], se está trabajando en la migración de kpatch y kGraft al núcleo común de parches en vivo proporcionado por la línea principal del kernel de Linux. [290] [291] [292]
Seguridad
Los errores del kernel presentan posibles problemas 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 encontraron y solucionaron numerosos errores que afectaban la seguridad del sistema. [293] Con frecuencia se implementan nuevas características para mejorar la seguridad del kernel. [294] [295]
Las capacidades (7) ya se han introducido en la sección sobre procesos y subprocesos. Android los utiliza y systemd brinda a los administradores un control detallado sobre las capacidades de los procesos. [296]
Linux ofrece una gran cantidad de mecanismos para reducir la superficie de ataque del kernel y mejorar la seguridad, que se conocen colectivamente como Módulos de seguridad de Linux (LSM). [297] Comprenden el módulo Security-Enhanced Linux (SELinux), cuyo código ha sido desarrollado originalmente y luego lanzado al público por la NSA , [298] y AppArmor [182], entre otros. SELinux ahora se desarrolla y mantiene activamente en GitHub . [181] 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 al sistema disponibles para las aplicaciones del usuario. [299]
Los críticos han acusado a los desarrolladores del kernel de encubrir fallos de seguridad, o al menos de no anunciarlos; En 2008, Torvalds respondió a esto con lo siguiente: [300] [301]
Personalmente considero que los errores de seguridad son simplemente "errores normales". No los encubro, pero tampoco tengo ningún motivo para pensar que es una buena idea rastrearlos y anunciarlos como algo especial... una razón por la que me niego a preocuparme por toda la seguridad. El circo es que creo que glorifica (y por tanto fomenta) el comportamiento incorrecto. Convierte al personal de seguridad en "héroes", como si las personas que no se limitan a corregir errores normales no fueran tan importantes. De hecho, todos los errores normales y aburridos son mucho más importantes, simplemente porque hay muchos más. No creo que un agujero de seguridad espectacular deba glorificarse o preocuparse por ser más "especial" que un accidente espectacular al azar debido a un mal bloqueo.
Las distribuciones de Linux suelen publicar actualizaciones de seguridad para corregir vulnerabilidades en el kernel de Linux. Muchos ofrecen versiones de soporte a largo plazo que reciben actualizaciones de seguridad para una determinada versión del kernel de Linux durante un período prolongado.
Legal
Términos de licencia
Inicialmente, Torvalds lanzó Linux bajo una licencia que prohibía cualquier uso comercial. [302] Esto se cambió en la versión 0.12 mediante un cambio a la Licencia Pública General GNU versión 2 (GPLv2). [20] Esta licencia permite la distribución y venta de versiones posiblemente modificadas y no modificadas de Linux, pero requiere que todas esas copias se publiquen bajo la misma licencia y vayan acompañadas de (o que, previa solicitud, se brinde acceso gratuito a) la fuente completa correspondiente. código. [303] Torvalds ha descrito la concesión de licencias de Linux bajo la GPLv2 como "lo mejor que he hecho". [302]
El kernel de Linux tiene licencia explícita bajo la Licencia Pública General GNU versión 2 únicamente (solo GPL-2.0) con una excepción explícita de llamada al sistema (Linux-syscall-note), [6] [9] [10] sin ofrecer al licenciatario la opción de Elija cualquier versión posterior, que es una extensión GPL común. El código aportado debe estar disponible bajo una licencia compatible con GPL . [11] [193]
Hubo un debate considerable sobre la facilidad con la que se podía cambiar la licencia para utilizar versiones posteriores de la GPL (incluida la versión 3) y si este cambio era siquiera deseable. [304] El propio Torvalds indicó específicamente tras el lanzamiento de la versión 2.4.0 que su propio código se publica sólo en la versión 2. [305] Sin embargo, los términos de la GPL establecen que si no se especifica ninguna versión, se puede utilizar cualquier versión. , [306] y Alan Cox señalaron que muy pocos otros contribuyentes de Linux habían especificado una versión particular de la GPL. [307]
En septiembre de 2006, una encuesta realizada a 29 programadores clave del kernel indicó que 28 preferían la GPLv2 al borrador de GPLv3 entonces vigente. Torvalds comentó: "Creo que varios forasteros... creían que yo personalmente era el extraño porque públicamente no he sido un gran admirador de la GPLv3". [308] Este grupo de desarrolladores de kernel de alto perfil, incluidos Torvalds, Greg Kroah-Hartman y Andrew Morton , comentaron en los medios de comunicación sus objeciones a la GPLv3. [309] Se refirieron a cláusulas relativas a DRM / tivoización , patentes, "restricciones adicionales" y advirtieron sobre una balcanización del "Universo Open Source" por la GPLv3. [309] [310] Torvalds, que decidió no adoptar la GPLv3 para el kernel de Linux, reiteró sus críticas incluso años después. [311]
Módulos del kernel cargables
Se debate si algunos módulos del kernel cargables (LKM) deben considerarse obras derivadas según la ley de derechos de autor y, por lo tanto, si entran o no en los términos de la GPL.
De acuerdo con las reglas de licencia, los LKM que utilizan sólo un subconjunto público de las interfaces del kernel [218] [219] son trabajos no derivados, por lo que Linux brinda a los administradores de sistemas los mecanismos para cargar objetos binarios fuera del árbol en el espacio de direcciones del kernel. . [11]
Hay algunos módulos cargables fuera del árbol que hacen un uso legítimo de la característica del kernel dma_buf . [312] El código compatible con GPL ciertamente puede usarlo. Sin embargo, un posible caso de uso diferente sería Nvidia Optimus que combina una GPU rápida con una GPU integrada de Intel, donde la GPU de Nvidia escribe en el framebuffer de Intel cuando está activo. Pero Nvidia no puede usar esta infraestructura porque requiere eludir una regla que solo pueden usar los LKM que también son GPL. [220] Alan Cox respondió en LKML , rechazando una solicitud de uno de los ingenieros de Nvidia para eliminar esta aplicación técnica de la API. [313] Torvalds declaró claramente en el LKML que "[Yo] afirmo que los módulos del kernel sólo binarios SON derivados "por defecto"'". [314]
Por otro lado, Torvalds también ha dicho que "[un] área gris en particular es algo así como un controlador que fue escrito originalmente para otro sistema operativo (es decir, claramente no es un trabajo derivado de Linux en su origen). ESA es un área gris , y _esa_ es el área donde personalmente creo que algunos módulos pueden considerarse no trabajos derivados simplemente porque no fueron diseñados para Linux y no dependen de ningún comportamiento especial de Linux". [315] Los controladores de gráficos propietarios , en particular, son objeto de intensa discusión.
Siempre que se cargan módulos propietarios en Linux, el kernel se marca a sí mismo como "contaminado" [316] y, por lo tanto, los desarrolladores a menudo ignoran los informes de errores de kernels contaminados.
Blobs binarios de firmware
El kernel oficial, que es la rama Linus git en el repositorio kernel.org, contiene blobs binarios publicados bajo los términos de la licencia GNU GPLv2. [6] [11] Linux también puede buscar sistemas de archivos para localizar blobs binarios, firmware propietario, controladores u otros módulos ejecutables, luego puede cargarlos y vincularlos al espacio del kernel. [317]
Cuando sea necesario (por ejemplo, para acceder a dispositivos de arranque o para aumentar la velocidad), el firmware se puede incorporar al kernel, esto significa integrar el firmware en vmlinux ; sin embargo, esta no siempre es una opción viable por cuestiones técnicas o legales (por ejemplo, no está permitido hacer esto con firmware que no sea compatible con GPL, aunque esto es bastante común). [318]
Marca
Linux es una marca registrada de Linus Torvalds en los Estados Unidos, la Unión Europea y algunos otros países. [319] [320] Una batalla legal sobre la marca comenzó en 1996, cuando William Della Croce, un abogado que nunca estuvo involucrado en el desarrollo de Linux, comenzó a solicitar tarifas de licencia por el uso de la palabra Linux . Después de que se demostró que la palabra era de uso común mucho antes del primer uso reclamado por Della Croce, la marca fue otorgada a Torvalds. [321] [322] [323]
^ En general, el código fuente de Linux se proporciona según los términos de la licencia exclusiva GPL-2.0 con una excepción explícita de llamada al sistema. [9] [10] Aparte de eso, los archivos individuales se pueden proporcionar bajo una licencia diferente que debe ser compatible con la licencia GPL-2.0 únicamente (es decir, la Licencia Pública General GNU versión 2) o una licencia dual, con una de las opciones es la versión 2 de GPL o una licencia compatible con GPLv2. [11]
Referencias
^ "Logotipos y mascotas de Linux". Linux en línea. 2008. Archivado desde el original el 15 de agosto de 2010 . Consultado el 11 de agosto de 2009 .
^ Greg Kroah-Hartman (14 de agosto de 2024). "Linux 6.10.5" . Consultado el 15 de agosto de 2024 .
^ Linus Torvalds (11 de agosto de 2024). "Linux 6.11-rc3" . Consultado el 12 de agosto de 2024 .
^ Bergmann, Arnd (3 de marzo de 2022). "Kbuild: pasar a -std=gnu11". git.kernel.org .
^ ab Probado, Liam. "Linux 6.1: Rust llegará al kernel principal". El Registro . Consultado el 12 de mayo de 2023 .
^ abcd "COPIANDO". git.kernel.org . Archivado desde el original el 2 de septiembre de 2021 . Consultado el 2 de septiembre de 2021 .
^ "Solo GPL-2.0". spdx.org . Consultado el 2 de septiembre de 2021 .
^ "Nota de llamada al sistema de Linux". spdx.org . Consultado el 2 de septiembre de 2021 .
^ ab "GPL-2.0". git.kernel.org .
^ ab "Linux-syscall-nota". git.kernel.org .
^ abcdef "Reglas de licencia del kernel de Linux: documentación del kernel de Linux". www.kernel.org . Archivado desde el original el 7 de marzo de 2020 . Consultado el 6 de enero de 2020 .
^ "Extensiones C (usando la colección de compiladores GNU (GCC))". gcc.gnu.org . Archivado desde el original el 20 de noviembre de 2020 . Consultado el 13 de noviembre de 2020 .
^ ab Richardson, Marjorie (1 de noviembre de 1999). "Entrevista: Linus Torvalds". Diario de Linux. Archivado desde el original el 14 de mayo de 2011 . Consultado el 20 de agosto de 2009 .
^ ab galés, Matt; Dalheimer, Matthias Kalle; Kaufman, Lar (1999). "1: Introducción a Linux". Ejecutando Linux (3ª ed.). Sebastopol, California: O'Reilly Media, Inc. pág. 5.ISBN1-56592-976-4. OCLC 50638246.
^ "Fuentes de kernel gratuitas tipo minix para 386-AT - Grupos de Google". grupos.google.com . 5 de octubre de 1991. Archivado desde el original el 1 de marzo de 2021 . Consultado el 19 de marzo de 2020 .
^ Williams, Sam (marzo de 2002). "Capítulo 9: La licencia pública general GNU". Gratis como en libertad: la cruzada de Richard Stallman por el software libre . O'Reilly . ISBN0-596-00287-4. Consultado el 12 de noviembre de 2010 .
^ abc Christine Bresnahan y Richard Blum (2016). LPIC-2: Guía de estudio de certificación de Linux Professional Institute: examen 201 y examen 202 . John Wiley e hijos. pag. 107.ISBN9781119150794.
^ ab Torvalds, Linus . "Notas de la versión para Linux v0.12". Los archivos del kernel de Linux. Archivado desde el original el 19 de agosto de 2007 . Consultado el 21 de febrero de 2007 .
^ Fred Hantelmann (2016). Guía de inicio de LINUX: una introducción independiente . Medios de ciencia y negocios de Springer. pag. 1.ISBN9783642607493.
^ abc Fred Hantelmann (2016). Guía de inicio de LINUX: una introducción independiente . Medios de ciencia y negocios de Springer. pag. 16.ISBN9783642607493.
^ Veranos, David W. (19 de enero de 1992). "Problemas con las particiones". Grupo de noticias : alt.os.linux. Usenet:[email protected]. Archivado desde el original el 2 de junio de 2013 . Consultado el 7 de enero de 2007 .
^ Clegg, Alan B. (31 de marzo de 1992). "¡Está aquí!". Grupo de noticias : comp.os.linux. Usenet:[email protected]. Archivado desde el original el 2 de junio de 2013 . Consultado el 7 de enero de 2007 .
^ "Apéndice A: El debate Tanenbaum-Torvalds". Fuentes abiertas: voces de la revolución del código abierto . O'Reilly . 1999.ISBN1-56592-582-3. Consultado el 22 de noviembre de 2006 .
^ Tanenbaum, Andy (12 de mayo de 2006). "Debate Tanenbaum-Torvalds: Parte II". Universidad VU de Ámsterdam . Archivado desde el original el 5 de agosto de 2015 . Consultado el 6 de enero de 2007 .
^ Hayward, David (22 de noviembre de 2012). "La historia de Linux: cómo el tiempo ha dado forma al pingüino". TecnologíaRadar . Archivado desde el original el 19 de marzo de 2020 . Consultado el 19 de marzo de 2020 .
^ Hayward, David (22 de noviembre de 2012). "La historia de Linux: cómo el tiempo ha dado forma al pingüino". TecnologíaRadar . Archivado desde el original el 19 de marzo de 2020 . Consultado el 26 de marzo de 2020 .
^ abc Christine Bresnahan y Richard Blum (2016). LPIC-2: Guía de estudio de certificación de Linux Professional Institute: examen 201 y examen 202 . John Wiley e hijos. pag. 108.ISBN9781119150794.
^ Torvalds, Linus (9 de junio de 1996). "Linux 2.0 realmente _está_ lanzado". LKML (lista de correo). Archivado desde el original el 2 de abril de 2015 . Consultado el 8 de marzo de 2015 .
^ ab "Kernel Build System: documentación del kernel de Linux". Kernel.org . Archivado desde el original el 22 de julio de 2020 . Consultado el 17 de julio de 2020 .
^ ab "Kconfig make config: documentación del kernel de Linux". Kernel.org . Archivado desde el original el 17 de julio de 2020 . Consultado el 13 de septiembre de 2020 .
^ Torvalds, Linus (20 de enero de 1999). "2.2.0-final". LKML (lista de correo). Archivado desde el original el 2 de abril de 2015 . Consultado el 8 de marzo de 2015 .
^ ab "El maravilloso mundo de Linux 2.2". 26 de enero de 1999. Archivado desde el original el 6 de noviembre de 2014 . Consultado el 27 de octubre de 2008 .
^ "Observaciones y notas de Linux/390". linuxvm.org . Archivado desde el original el 26 de febrero de 2019 . Consultado el 29 de marzo de 2020 .
^ Torvalds, Linus (4 de enero de 2001). "Y oh, por cierto". LKML (lista de correo). Archivado desde el original el 26 de enero de 2016 . Consultado el 8 de marzo de 2015 .
^ "El maravilloso mundo de Linux 2.4". Archivado desde el original el 17 de marzo de 2005 . Consultado el 27 de octubre de 2008 .
^ Torvalds, Linus (17 de diciembre de 2003). "Linux 2.6.0". LKML (lista de correo). Archivado desde el original el 2 de abril de 2015 . Consultado el 28 de febrero de 2015 .
^ "proc(5) - página del manual de Linux" (ver /proc/sys/kernel/pid_max). Archivado desde el original el 7 de febrero de 2014 . Consultado el 19 de febrero de 2014 .
^ "Wiki btrfs" . btrfs.wiki.kernel.org . Archivado desde el original el 25 de abril de 2012 . Consultado el 17 de julio de 2020 .
^ Fred Hantelmann (2016). Guía de inicio de LINUX: una introducción independiente . Medios de ciencia y negocios de Springer. págs. 1–2. ISBN9783642607493.
^ Lista de correo del kernel de Linux (17 de junio de 2005). "Linux 2.6.12". git-commits-head (lista de correo). Archivado desde el original el 26 de enero de 2016 . Consultado el 23 de enero de 2008 .
^ Kroah-Hartman, Greg (3 de agosto de 2006). "Adrian Bunk ahora se hará cargo de la rama estable 2.6.16". LKML (lista de correo). Archivado desde el original el 26 de enero de 2016 . Consultado el 21 de febrero de 2015 .
^ Rothwell, Stephen (12 de febrero de 2008). "Anuncio: Linux-next (o el sueño de Andrew :-))". LKML (lista de correo). Archivado desde el original el 24 de noviembre de 2010 . Consultado el 30 de octubre de 2010 .
^ Corbet, Jonathan (21 de octubre de 2010). "Linux-next y proceso de gestión de parches". LWN.net . Eklektix, Inc. Archivado desde el original el 21 de junio de 2010 . Consultado el 30 de octubre de 2010 .
^ "Los archivos del kernel de Linux". Kernel.org. Archivado desde el original el 30 de enero de 1998 . Consultado el 22 de enero de 2014 .
^ "Agregue una personalidad para informar los números de versión 2.6.x [LWN.net]". lwn.net . Archivado desde el original el 16 de julio de 2020 . Consultado el 15 de julio de 2020 .
^ Torvalds, Linus (30 de mayo de 2011). "Linux 3.0-rc1". LKML (lista de correo). Archivado desde el original el 31 de mayo de 2011 . Consultado el 1 de julio de 2013 .
^ Torvalds, Linus (10 de abril de 2001). "Re: [PARCHE] Corrección de i386 rw_semaphores". yarchive.net . Consultado el 26 de mayo de 2024 .
^ Vaughan-Nichols, Steven J. (13 de diciembre de 2012). "Adiós 386: Linux dejará de admitir chips i386 en el próximo lanzamiento importante". ZDNet . CBS interactivo . Archivado desde el original el 17 de febrero de 2015 . Consultado el 6 de febrero de 2013 .
^ Fingas, Jon (15 de diciembre de 2012). "Linux dejará de admitir i386 en el kernel 3.8, nos obligará a actualizar nuestro equipo Doom". Engadget . AOL . Archivado desde el original el 2 de abril de 2015 . Consultado el 22 de marzo de 2015 .
^ Vaughan-Nichols, Steven J. (11 de diciembre de 2012). "Llega Linux 3.7, los desarrolladores de ARM se regocijan". ZDNet . CBS interactivo . Archivado desde el original el 5 de noviembre de 2014 . Consultado el 6 de febrero de 2013 .
^ Torvalds, Linus (12 de abril de 2015). "Lanzamiento de Linux 4.0". LKML (lista de correo). Archivado desde el original el 13 de abril de 2015 . Consultado el 12 de abril de 2015 .
^ Torvalds, Linus (2 de septiembre de 2013). "Linux 3.11". LKML (lista de correo). Archivado desde el original el 26 de febrero de 2014 . Consultado el 3 de septiembre de 2013 .
^ "Linux 3.11". kernelnewbies.org. 2 de septiembre de 2013 . Consultado el 21 de enero de 2014 .
^ "La Fundación Linux publica el informe de desarrollo de Linux". Fundación Linux . 18 de febrero de 2015. Archivado desde el original el 19 de julio de 2016 . Consultado el 20 de febrero de 2015 .
^ Michael Larabel (23 de junio de 2014). "El kernel de Linux con 19,5 millones de líneas de código continúa aumentando". Forónix . Archivado desde el original el 23 de noviembre de 2020 . Consultado el 23 de junio de 2015 .
^ Corbet, Jonathan (3 de agosto de 2020). "Algunas estadísticas del ciclo del kernel 5.8". LWN - Noticias semanales de Linux . Archivado desde el original el 4 de septiembre de 2020 . Consultado el 11 de agosto de 2020 .
^ "Encuesta para desarrolladores de Stack Overflow 2019: tecnologías más populares". Desbordamiento de pila . Archivado desde el original el 8 de octubre de 2020 . Consultado el 17 de marzo de 2020 .
^ "Encuesta para desarrolladores de Stack Overflow 2019: herramientas y entornos de desarrollo". Desbordamiento de pila . Archivado desde el original el 7 de marzo de 2020 . Consultado el 17 de marzo de 2020 .
^ "Estadísticas de uso y cuota de mercado de sistemas operativos para sitios web, marzo de 2020". w3techs.com . Consultado el 17 de marzo de 2020 .
^ "Estadísticas de uso y cuota de mercado de Unix para sitios web, marzo de 2020". w3techs.com . Consultado el 17 de marzo de 2020 .
^ "Sitios de supercomputadoras TOP500: familia de sistemas operativos / Linux". Top500.org. Archivado desde el original el 19 de noviembre de 2012 . Consultado el 5 de octubre de 2019 .
^ "Gartner dice que las ventas de tabletas representarán menos del 10 por ciento de todos los dispositivos en 2014" (Presione soltar). Egham, Reino Unido : Gartner . 15 de octubre de 2014. Archivado desde el original el 17 de octubre de 2014 . Consultado el 19 de octubre de 2014 .
^ Lunden, Ingrid (15 de octubre de 2014). "El crecimiento de las ventas de tabletas se desploma en 2014 a medida que los teléfonos inteligentes Android continúan aumentando: Gartner". TechCrunch . AOL . Archivado desde el original el 23 de octubre de 2014 . Consultado el 23 de octubre de 2014 .
^ "Los envíos mundiales de PC superan el pronóstico con una leve mejora en la demanda de los consumidores, mientras que Apple pasa al puesto número 5, según IDC" (Comunicado de prensa). Framingham, MA : IDC . 8 de octubre de 2014. Archivado desde el original el 11 de octubre de 2014 . Consultado el 19 de octubre de 2014 .
^ Wheeler, David A. "Linux Kernel 2.6: ¡Vale más!". Archivado desde el original el 20 de agosto de 2011 . Consultado el 18 de enero de 2007 .
^ "Impacto económico del software libre en la innovación y la competitividad del sector TIC de la UE" (PDF) (Tabla 3 en la página 50). Archivado (PDF) desde el original el 15 de febrero de 2010 . Consultado el 8 de enero de 2011 .
^ "Estimación del costo total de desarrollo de una distribución de Linux" (PDF) (Tabla en la página 6). Archivado desde el original (PDF) el 11 de julio de 2010.
^ "El núcleo de los mil millones de dólares". Linux.slashdot.org. 24 de febrero de 2010. Archivado desde el original el 15 de mayo de 2011 . Consultado el 12 de noviembre de 2010 .
^ Wheeler, David. "El kernel de Linux: ¡vale más!". Archivado desde el original el 24 de febrero de 2021 . Consultado el 17 de septiembre de 2012 .
^ "Los archivos del kernel de Linux". www.kernel.org . Consultado el 28 de febrero de 2023 .
^ ab "Estado del desarrollo del kernel de Linux en 2017". La Fundación Linux . 25 de octubre de 2017. Archivado desde el original el 27 de mayo de 2020 . Consultado el 27 de mayo de 2020 .
^ "Por qué renuncié: desarrollador del kernel Con Kolivas". Revista APC . Revistas ACP. 24 de julio de 2007. Archivado desde el original el 7 de julio de 2011 . Consultado el 15 de agosto de 2011 .
^ Corbet, Jonathan (25 de julio de 2007). "Re: -mm planes de fusión para 2.6.23". LWN.net. Archivado desde el original el 11 de febrero de 2018 . Consultado el 10 de febrero de 2018 .
^ Cox, Alan (28 de julio de 2009). "Re: [PARCHE] kdesu roto". Archivado desde el original el 11 de febrero de 2018 . Consultado el 10 de febrero de 2018 .
^ Rodrigues, Goldwyn (22 de enero de 2011). "Una historia de dos objetivos SCSI". Archivado desde el original el 15 de febrero de 2018 . Consultado el 14 de febrero de 2018 .
^ Steinmetz, Andreas (17 de enero de 2013). "LIO: la implementación de destino iSCSI rota". Archivado desde el original el 15 de febrero de 2018 . Consultado el 14 de febrero de 2018 .
^ Paul, Ryan (19 de junio de 2012). "Linus Torvalds le dice" vete a la mierda "a NVIDIA". Archivado desde el original el 15 de febrero de 2018 . Consultado el 14 de febrero de 2018 .
^ John Gold (3 de abril de 2014). "Linus Torvalds suspende a un desarrollador clave de Linux: el kernel entra en pánico cuando el desarrollador de Systemd molesta". Archivado desde el original el 24 de marzo de 2019 . Consultado el 24 de marzo de 2019 .
^ Poettering, Lennart (6 de octubre de 2014). "Sobre la enfermedad de la comunidad del kernel de Linux". Google+ . Archivado desde el original el 27 de mayo de 2018 . Consultado el 10 de febrero de 2018 .
^ Brodkin, Jon (6 de marzo de 2015). "Se alega que VMware ha violado la licencia de código abierto de Linux durante años". Ars Técnica . Archivado desde el original el 15 de febrero de 2018 . Consultado el 14 de febrero de 2018 .
^ McCarthy, Kieren (26 de agosto de 2016). "Habiendo ofendido a todos los demás en el mundo, Linus Torvalds llama a sus propios abogados una 'enfermedad desagradable y enconada'". El Registro . Archivado desde el original el 15 de febrero de 2018 . Consultado el 14 de febrero de 2018 .
^ Kroah-Hartman, Greg. "[PATCH 000/190] Reversión de todas las confirmaciones de umn.edu". Archivo de listas de correo del kernel de Linux . Consultado el 13 de enero de 2022 .
^ Chin, Mónica (30 de abril de 2021). "Cómo se expulsó a una universidad del kernel de Linux". El borde . Consultado el 13 de enero de 2022 .
^ Corbet, Jonathan (10 de septiembre de 2007). "KS2007: Proceso de desarrollo y relaciones con los desarrolladores". LWN.net . Archivado desde el original el 12 de febrero de 2018 . Consultado el 11 de febrero de 2018 .
^ Brodkin, Jon (16 de julio de 2013). "Linus Torvalds defiende su derecho a avergonzar a los desarrolladores del kernel de Linux". Técnica ARS . Archivado desde el original el 17 de febrero de 2018 . Consultado el 11 de febrero de 2018 .
^ Corbet, Jonathan (9 de marzo de 2015). "El código de conflicto del núcleo". LWN.net . Archivado desde el original el 12 de febrero de 2018 . Consultado el 11 de febrero de 2018 .
^ Corbet, Jonathan (18 de septiembre de 2018). "Código, conflicto y conducta". LWN.net . Archivado desde el original el 19 de septiembre de 2018 . Consultado el 19 de septiembre de 2018 .
^ Cohen, Noam (19 de septiembre de 2018). "Después de años de correos electrónicos abusivos, el creador de Linux se hace a un lado". El neoyorquino . Archivado desde el original el 20 de febrero de 2020 . Consultado el 24 de septiembre de 2018 .
^ Larabel, Michael. "Dejar caer malas palabras en los comentarios del código del kernel: Linux recibe" abrazos"". Forónix . Archivado desde el original el 21 de abril de 2019 . Consultado el 15 de junio de 2019 .
^ Sharwood, Simon (6 de octubre de 2015). "El desarrollador del kernel de Linux que le pidió a Linus Torvalds que detuviera el abuso verbal renunció por abuso verbal". El Registro . Archivado desde el original el 29 de marzo de 2020 . Consultado el 4 de febrero de 2018 .
^ Edge, Jake (31 de enero de 2018). "Demasiados señores, pocos mayordomos". LWN.net . Archivado desde el original el 9 de noviembre de 2020 . Consultado el 4 de febrero de 2018 .
^ Corbet, Jonathan (6 de noviembre de 2017). "Golpea a los mantenedores del kernel". LWN.net . Archivado desde el original el 26 de enero de 2021 . Consultado el 4 de febrero de 2018 .
^ "Evolución de Linux" (PDF) . 26 de marzo de 2008. Archivado (PDF) desde el original el 14 de diciembre de 2013 . Consultado el 6 de noviembre de 2013 .
^ "Desarrollo perpetuo: un modelo del ciclo de vida del kernel de Linux" (PDF) . 25 de octubre de 2011. Archivado (PDF) desde el original el 17 de octubre de 2013 . Consultado el 6 de noviembre de 2013 .
^ Kroah-Hartman, Greg (12 de febrero de 2008). "Re: Anuncio: Linux-next (O el sueño de Andrew :-))". Lista de correo del kernel de Linux (Lista de correo). Archivado desde el original el 2 de febrero de 2017 . Consultado el 30 de enero de 2017 .
^ Robert amor (2010). Desarrollo del kernel de Linux: Desarrollo del kernel de Linux . Educación Pearson. pag. 11.ISBN9780768696790.
^ Robert amor (2010). Desarrollo del kernel de Linux: Desarrollo del kernel de Linux . Educación Pearson. pag. 12.ISBN9780768696790.
^ "Cómo funciona el proceso de desarrollo". Archivado desde el original el 9 de diciembre de 2017 . Consultado el 4 de febrero de 2018 .
^ Robert amor (2010). Desarrollo del kernel de Linux: Desarrollo del kernel de Linux . Educación Pearson. pag. 13.ISBN9780768696790.
^ "Código de conducta del convenio del colaborador". La documentación del kernel de Linux . Consultado el 6 de octubre de 2021 .
^ "Interpretación del código de conducta del convenio del colaborador del kernel de Linux". La documentación del kernel de Linux . Consultado el 6 de octubre de 2021 .
^ Williams, Dan. "[PATCH] CodingStyle: terminología inclusiva". Lista de correo del kernel de Linux .
^ Tim Anderson. "El compilador mínimo del kernel de Linux se elevó a GCC 5.1, lo que permite el uso potencial de C11". El Registro . Consultado el 12 de mayo de 2023 .
^ Larabel, Michael. "El cambio se realizó de C89 a C11/GNU11 con Linux 5.18". www.phoronix.com . Consultado el 12 de mayo de 2023 .
^ Sharwood, Simon (11 de diciembre de 2022). "Linus Torvalds revela el kernel de Linux 6.1". El Registro . Consultado el 12 de mayo de 2023 .
^ Corbet, Jonathan. "Óxido en el kernel 6.2". LWN.net . Consultado el 12 de mayo de 2023 .
^ Larabel, Michael. "Más código Rust preparado para Linux 6.3: más cerca de tener controladores Rust actualizados". Forónix . Consultado el 12 de mayo de 2023 .
^ "CÓMO realizar el desarrollo del kernel de Linux: documentación del kernel de Linux". Kernel.org . Archivado desde el original el 7 de marzo de 2020 . Consultado el 4 de enero de 2020 .
^ "Estilo de codificación del kernel de Linux: documentación del kernel de Linux". Kernel.org . Archivado desde el original el 5 de enero de 2020 . Consultado el 4 de enero de 2020 .
^ ab "Cómo funciona el proceso de desarrollo: documentación del kernel de Linux". Kernel.org . Archivado desde el original el 9 de diciembre de 2017 . Consultado el 26 de marzo de 2020 .
^ Kubbilun, Ingo A. (2 de junio de 2004). "Parche del kernel de Linux para Intel Compiler" (en alemán). Pyrillion.org. Archivado desde el original el 22 de julio de 2011 . Consultado el 12 de noviembre de 2010 .
^ Timoteo (26 de febrero de 2009). "Proyecto de kernel de Linux de alto rendimiento: LinuxDNA". Barra de punto Linux . Existencias de dados . Archivado desde el original el 18 de octubre de 2019 . Consultado el 30 de octubre de 2010 .
^ Ryan, Justin (25 de febrero de 2009). "LinuxDNA potencia Linux con el compilador Intel C/C++". Diario de Linux . Belltown Media, Inc. Archivado desde el original el 9 de noviembre de 2020 . Consultado el 30 de octubre de 2010 .
^ Larabel, Michael (5 de marzo de 2023). "Linux 6.3 deja de ser compatible con el compilador Intel ICC". Forónix . Consultado el 6 de marzo de 2023 .
^ Lelbach, Bryce (25 de octubre de 2010). "Clang crea un kernel de Linux que funciona (arranca en RL5 con SMP, redes y X, autohospedaje)". cfe-dev (lista de correo). Archivado desde el original el 7 de septiembre de 2015.
^ Larabel, Michael (12 de abril de 2014). "Linux 3.15 casi se puede compilar con Clang de LLVM". Forónix . Archivado desde el original el 13 de agosto de 2020 . Consultado el 10 de junio de 2014 .
^ Larabel, Michael . "Parche tras parche, LLVM Clang mejora en la construcción del kernel de Linux". Forónix . Archivado desde el original el 13 de agosto de 2020 . Consultado el 20 de noviembre de 2014 .
^ Edge, Jake (7 de mayo de 2013). "LFCS: El proyecto LLVMLinux". LWN.net . Archivado desde el original el 10 de agosto de 2020 . Consultado el 3 de marzo de 2015 .
^ Möller, Jan-Simon (2 de febrero de 2014). "LLVMLinux: El kernel de Linux con Dragon Wings" (PDF) . Proyecto LLVM . Archivado (PDF) desde el original el 3 de agosto de 2020 . Consultado el 3 de marzo de 2015 .
^ Desaulniers, Nick; Hackmann, Greg; Hines, Stephen (18 de octubre de 2017). "Reunión de desarrolladores de LLVM 2017: compilación del espacio de usuario de Android y el kernel de Linux con LLVM". YouTube . Archivado desde el original el 31 de diciembre de 2020 . Consultado el 7 de diciembre de 2020 .
^ Hackmann, Greg (2 de febrero de 2017). "Serie de parches marlin-nougat-mr1-clang". Archivado desde el original el 10 de diciembre de 2020 . Consultado el 6 de diciembre de 2020 .
^ Kaehlcke, Matthias (22 de octubre de 2018). "cros-kernel2: haga que clang sea el compilador predeterminado para las compilaciones del kernel". Archivado desde el original el 10 de diciembre de 2020 . Consultado el 6 de diciembre de 2020 .
^ Larabel, Michael (4 de febrero de 2019). "El uso de LLVM Clang para compilar el kernel de Linux se está calentando nuevamente gracias a Google". Forónix . Archivado desde el original el 25 de noviembre de 2020 . Consultado el 6 de diciembre de 2020 .
^ Desaulniers, Nick (10 de diciembre de 2019). "vts: kernel: aplicar vts_kernel_toolchain para todos los TARGET_ARCH para R". Archivado desde el original el 10 de diciembre de 2020 . Consultado el 6 de diciembre de 2020 .
^ Desaulniers, Nick (19 de noviembre de 2020). "Re: violación de la firma del puntero de función". LKML . Consultado el 6 de diciembre de 2020 .
^ Bradford, John (8 de marzo de 2003). "Re: ¿Qué es un OOPS?". LKML (lista de correo). Archivado desde el original el 31 de octubre de 2014 . Consultado el 30 de octubre de 2010 .
^ "syslog(2) - página del manual de Linux". man7.org . Archivado desde el original el 13 de octubre de 2020 . Consultado el 15 de agosto de 2020 .
^ "kmsg: exportar registros printk a la interfaz /dev/kmsg [LWN.net]". lwn.net . Archivado desde el original el 2 de octubre de 2015 . Consultado el 16 de agosto de 2020 .
^ Vea lo que hace su computadora con las utilidades Ftrace, 24 de enero de 2019, archivado desde el original el 15 de diciembre de 2021 , recuperado 9 de mayo de 2021
^ "Depurar el kernel usando Ftrace - parte 1 [LWN.net]". lwn.net . Archivado desde el original el 9 de noviembre de 2020 . Consultado el 15 de septiembre de 2020 .
^ "Depurar el kernel usando Ftrace - parte 2 [LWN.net]". lwn.net . Archivado desde el original el 31 de marzo de 2020 . Consultado el 15 de septiembre de 2020 .
^ "ftrace - Function Tracer: documentación del kernel de Linux". Kernel.org . Archivado desde el original el 19 de septiembre de 2020 . Consultado el 15 de septiembre de 2020 .
^ "Seguimiento del tiempo de arranque: documentación del kernel de Linux". Kernel.org . Archivado desde el original el 31 de octubre de 2020 . Consultado el 19 de septiembre de 2020 .
^ "Kernel Probes (Kprobes): la documentación del kernel de Linux". Kernel.org . Archivado desde el original el 11 de octubre de 2020 . Consultado el 6 de octubre de 2020 .
^ "Uprobe-tracer: seguimiento de eventos basado en Uprobe: documentación del kernel de Linux". Kernel.org . Archivado desde el original el 4 de diciembre de 2020 . Consultado el 6 de octubre de 2020 .
^ "Uso de kgdb, kdb y los componentes internos del depurador del kernel". mirrors.edge.kernel.org . Archivado desde el original el 26 de enero de 2021 . Consultado el 3 de noviembre de 2020 .
^ Gene Sally (2010). Sistemas integrados Pro Linux . Presione. pag. 252.ISBN9781430272267.
^ Billimoria, Kaiwan N. (2021). Programación del kernel de Linux Una guía completa sobre los aspectos internos del kernel, la escritura de módulos del kernel y la sincronización del kernel. Birmingham: Packt Publishing, Limited. pag. 55.ISBN978-1-78995-592-7. OCLC 1240585605.
^ Vaduva, Alexandru; González, Alex; Simmonds, Chris (2016). Linux: desarrollo integrado: aproveche el poder de Linux para desarrollar proyectos de Linux integrados cautivadores y potentes: un curso en tres módulos. Birmingham, Reino Unido: Packt Publishing . pag. 663.ISBN978-1-78712-445-5. OCLC 960471438.
^ Karim Yaghmour (2008). Construcción de sistemas Linux integrados (2ª ed.). Sebastopol [California]: O'Reilly Media. pag. 387.ISBN978-0-596-52968-0. OCLC 273049576.
^ "SoC (sistema en un chip)". Wiki OpenWrt . 6 de noviembre de 2014. Archivado desde el original el 23 de agosto de 2022 . Consultado el 15 de marzo de 2021 .
^ "Qué hacer con los números CVE [LWN.net]". lwn.net . Consultado el 15 de marzo de 2021 .
^ Amadeo, Ron (20 de noviembre de 2019). "Google describe sus planes para la compatibilidad principal con el kernel de Linux en Android". Ars Técnica . Consultado el 31 de marzo de 2021 .
^ Bruchon, Jody (24 de abril de 2021), jbruchon/elks , consultado el 27 de abril de 2021
^ "El estado de la prevención preventiva". linuxplumbersconf.org . Archivado desde el original el 15 de octubre de 2016 . Consultado el 14 de junio de 2016 .
^ Meyer, David (3 de febrero de 2010). "El desarrollador de Linux explica la eliminación del código del kernel de Android". ZDNet . CBS interactivo . Archivado desde el original el 15 de octubre de 2016 . Consultado el 3 de febrero de 2010 .
^ "Capítulo 03: Descripción general de la plataforma maemo". Descripción general de la tecnología maemo . Nokia . 2008. Archivado desde el original el 16 de junio de 2008 . Consultado el 9 de abril de 2010 .
^ Kroah-Hartman, Greg (2 de febrero de 2010). "Android y la comunidad del kernel de Linux". Archivado desde el original el 27 de abril de 2019 . Consultado el 3 de febrero de 2010 .
^ ab Roger Ye (2017). Programación del sistema Android . Publicación de paquetes. pag. 14.ISBN9781787120389.
^ Torvalds, Linus (19 de septiembre de 2001). "Los orígenes de Linux: Linus Torvalds". YouTube . Archivado desde el original el 15 de diciembre de 2021 . Consultado el 6 de diciembre de 2020 .
^ "Archivo MANTENEDORES de Linux". Archivado desde el original el 12 de enero de 2013.
^ Alexandru Vaduva, Alex González y Chris Simmonds (2016). Linux: desarrollo integrado . Publicación de paquetes. pag. 663.ISBN9781787124455.
^ "LÉAME". git.kernel.org. Archivado desde el original el 24 de julio de 2012 . Consultado el 24 de marzo de 2021 .
^ "KernelBuild: principiantes en el kernel de Linux". kernelnewbies.org . Archivado desde el original el 19 de octubre de 2020 . Consultado el 13 de septiembre de 2020 .
^ "La interfaz Sysctl". Linux.it . Archivado desde el original el 17 de febrero de 2020 . Consultado el 13 de septiembre de 2020 .
^ "sysctl(8) - página del manual de Linux". man7.org . Archivado desde el original el 30 de septiembre de 2020 . Consultado el 13 de septiembre de 2020 .
^ "procfs(5) - página del manual de Linux". man7.org . Archivado desde el original el 24 de septiembre de 2020 . Consultado el 13 de septiembre de 2020 .
^ "sched(7) - página del manual de Linux". man7.org . Archivado desde el original el 17 de julio de 2020 . Consultado el 27 de julio de 2020 .
^ "Preguntas frecuentes: preferencia". kernelnewbies.org . 22 de agosto de 2009. Archivado desde el original el 7 de agosto de 2020 . Consultado el 7 de mayo de 2015 .
^ ab Jonathan Corbet (24 de febrero de 2003). "Portación de controladores: el núcleo interrumpible". LWN.net . Archivado desde el original el 10 de agosto de 2020 . Consultado el 7 de mayo de 2015 .
^ "Programador EEVDF fusionado para Linux 6.6, reintroducción de la programación de clústeres híbridos Intel". Forónix .
^ ab Molnár, Ingo (13 de abril de 2007). "[parche] Modular Scheduler Core y Completely Fair Scheduler [CFS]". LKML (lista de correo). Archivado desde el original el 3 de noviembre de 2020 . Consultado el 30 de marzo de 2020 .
^ "Programador completamente justo | Linux Journal". Linuxjournal.com . Archivado desde el original el 3 de agosto de 2020 . Consultado el 30 de marzo de 2020 .
^ "ioctl(2) - página del manual de Linux". man7.org . Archivado desde el original el 20 de julio de 2020 . Consultado el 11 de agosto de 2020 .
^ "aio(7) - página del manual de Linux". man7.org . Archivado desde el original el 12 de abril de 2020 . Consultado el 11 de agosto de 2020 .
^ "io_setup(2) - página del manual de Linux". man7.org . Archivado desde el original el 20 de agosto de 2020 . Consultado el 11 de agosto de 2020 .
^ "KVM". Linux-kvm.org . Archivado desde el original el 28 de marzo de 2020 . Consultado el 29 de marzo de 2020 .
^ "TechComparison - Wiki de virtualización de Linux". Virt.kernelnewbies.org . Archivado desde el original el 3 de agosto de 2020 . Consultado el 29 de marzo de 2020 .
^ "Virtualization_support_through_KVM en Linux_2_6_20: novatos en el kernel de Linux". Kernelnewbies.org . Archivado desde el original el 29 de noviembre de 2019 . Consultado el 29 de marzo de 2020 .
^ Coekaerts, Wim. "La línea principal de Linux contiene todos los bits del código Xen para compatibilidad con Dom0 y DomU". blogs.oracle.com . Archivado desde el original el 3 de agosto de 2020 . Consultado el 29 de marzo de 2020 .
^ "Xen celebra la compatibilidad total con Dom0 y DomU en Linux 3.0 - blog.xen.org". 7 de junio de 2011. Archivado desde el original el 7 de junio de 2011 . Consultado el 29 de marzo de 2020 .
^ Wilk, Konrad Rzeszutek (31 de enero de 2014). "Linux 3.14 y PVH". Proyecto Xen . Archivado desde el original el 29 de marzo de 2020 . Consultado el 29 de marzo de 2020 .
^ "Introducción a la virtualización Xen | Guía de virtualización | openSUSE Leap 15.2". doc.opensuse.org . Archivado desde el original el 28 de septiembre de 2020 . Consultado el 29 de septiembre de 2020 .
^ "Tecnología de virtualización | Guía de virtualización | openSUSE Leap 15.3". doc.opensuse.org . Consultado el 30 de septiembre de 2021 .
^ ab "Proyecto SELinux". GitHub . Archivado desde el original el 12 de diciembre de 2019 . Consultado el 10 de enero de 2020 .
^ ab "AppArmor: documentación del kernel de Linux". Kernel.org . Archivado desde el original el 8 de mayo de 2020 . Consultado el 10 de enero de 2020 .
^ Jake Edge (25 de noviembre de 2008). "Dispositivos de personajes en el espacio del usuario". LWN.net . Archivado desde el original el 26 de enero de 2021 . Consultado el 7 de mayo de 2015 .
^ Jonathan Corbet (2 de mayo de 2007). "UIO: controladores de espacio de usuario". LWN.net . Archivado desde el original el 11 de noviembre de 2020 . Consultado el 7 de mayo de 2015 .
^ abcd "stable-api-nonsense - árbol de fuentes del kernel de Linux". git.kernel.org . Archivado desde el original el 5 de marzo de 2021 . Consultado el 18 de abril de 2020 .
^ Gorman, Mel (15 de febrero de 2004). Comprensión del Administrador de memoria virtual de Linux (PDF) . Prentice Hall. pag. 26.ISBN0-13-145348-3. Archivado (PDF) desde el original el 3 de mayo de 2019 . Consultado el 27 de enero de 2020 .
^ Greg Ungerer. "Anuncio de la línea principal de uClinux". Archivado desde el original el 31 de octubre de 2007 . Consultado el 15 de enero de 2008 .
^ ab Nguyen, Binh (30 de julio de 2004). "Jerarquía del sistema de archivos Linux: Capítulo 1. Jerarquía del sistema de archivos Linux". El proyecto de documentación de Linux. Archivado desde el original el 2 de diciembre de 2020 . Consultado el 28 de noviembre de 2012 .
^ "Léame de la Guía de administración". Repositorios git de Kernel.org .
^ "Lanzamiento 5.x del kernel de Linux: documentación del kernel de Linux". Kernel.org . Archivado desde el original el 7 de marzo de 2020 . Consultado el 4 de enero de 2020 .
^ "README\ABI\Documentation - kernel/git/torvalds/linux.git - árbol de fuentes del kernel de Linux". git.kernel.org . Archivado desde el original el 1 de octubre de 2020 . Consultado el 18 de abril de 2020 .
^ "syscalls\stable\ABI\Documentation - kernel/git/torvalds/linux.git - árbol de fuentes del kernel de Linux". git.kernel.org . Archivado desde el original el 2 de octubre de 2020 . Consultado el 18 de abril de 2020 .
^ ab "1.Intro.rst - Documentación/proceso/1.Intro.rst - Código fuente de Linux (v5.8) - Bootlin". elixir.bootlin.com . Consultado el 8 de agosto de 2020 .
^ ab "llamadas al sistema". hombre7 . Archivado desde el original el 15 de enero de 2020 . Consultado el 28 de enero de 2020 .
^ "introducción (2) - página del manual de Linux". man7.org . Archivado desde el original el 17 de julio de 2020 . Consultado el 16 de julio de 2020 .
^ "clon". man7.org . Archivado desde el original el 18 de enero de 2020 . Consultado el 28 de enero de 2020 .
^ "feature_test_macros". man7.org . Archivado desde el original el 19 de enero de 2020 . Consultado el 28 de enero de 2020 .
^ "vdso(7) - página del manual de Linux". man7.org . Archivado desde el original el 2 de febrero de 2020 . Consultado el 2 de febrero de 2020 .
^ ab "futex (2) - página del manual de Linux". man7.org . Archivado desde el original el 31 de enero de 2020 . Consultado el 2 de febrero de 2020 .
^ "syscall(2) - página del manual de Linux". man7.org . Archivado desde el original el 21 de enero de 2020 . Consultado el 2 de febrero de 2020 .
^ "sysfs(5) - página del manual de Linux". man7.org . Archivado desde el original el 18 de enero de 2020 . Consultado el 6 de enero de 2020 .
^ "Reglas sobre cómo acceder a la información en sysfs: documentación del kernel de Linux". Kernel.org . Archivado desde el original el 7 de marzo de 2020 . Consultado el 6 de enero de 2020 .
^ "Especificaciones de referencia de la Fundación Linux". refspecs.linuxbase.org . Consultado el 3 de febrero de 2020 .
^ "Especificaciones de LSB". refspecs.linuxbase.org . Consultado el 3 de febrero de 2020 .
^ "Especificación de escritorio básica estándar de Linux, parte genérica". refspecs.linuxbase.org . Consultado el 3 de febrero de 2020 .
^ "Referencias normativas". refspecs.linuxfoundation.org . Archivado desde el original el 12 de agosto de 2020 . Consultado el 3 de febrero de 2020 .
^ "Especificación básica estándar de Linux, parte genérica". refspecs.linuxfoundation.org . Archivado desde el original el 29 de noviembre de 2019 . Consultado el 3 de febrero de 2020 .
^ "Interfaz binaria de la aplicación System V - Edición 4.1" (PDF) . Sco.com . Archivado (PDF) desde el original el 13 de diciembre de 2019 . Consultado el 3 de febrero de 2020 .
^ "Xinuos Inc. | Desarrolladores | Gabi | 17 de diciembre de 2003 | Interfaz binaria de aplicación System V - BORRADOR". Sco.com . Archivado desde el original el 3 de febrero de 2020 . Consultado el 3 de febrero de 2020 .
^ "Formato ejecutable y de enlace (ELF)". Refspecs.linuxbase.org . Consultado el 3 de febrero de 2020 .
^ "elf(5) - página del manual de Linux". man7.org . Archivado desde el original el 30 de noviembre de 2020 . Consultado el 18 de noviembre de 2020 .
^ "Especificación básica estándar de Linux para X86-64". Refspecs.linuxbase.org . Consultado el 3 de febrero de 2020 .
^ "Interfaz binaria de la aplicación System V - BORRADOR". Refspecs.linuxbase.org . Consultado el 3 de febrero de 2020 .
^ Seyfarth, Ray (2012). Introducción a la programación en lenguaje ensamblador Intel de 64 bits para Linux . Plataforma de publicación independiente CreateSpace. pag. 170.ISBN9781478119203.
^ "Anatomía de una llamada al sistema, parte 1 [LWN.net]". lwn.net . Archivado desde el original el 18 de agosto de 2020 . Consultado el 16 de julio de 2020 .
^ "Anatomía de una llamada al sistema, parte 2 [LWN.net]". lwn.net . Archivado desde el original el 6 de agosto de 2020 . Consultado el 16 de julio de 2020 .
^ Deucher, Alex (7 de octubre de 2014). "Nuevo controlador unificado de código abierto de AMD". Fundación X.Org . Archivado desde el original el 21 de enero de 2015 . Consultado el 21 de enero de 2015 .
^ ab "Símbolos: guía poco confiable para piratear el kernel de Linux: documentación del kernel de Linux". Kernel.org . Archivado desde el original el 3 de agosto de 2020 . Consultado el 8 de febrero de 2020 .
^ ab "Símbolos exportados y API interna [LWN.net]". Lwn.net . Archivado desde el original el 31 de marzo de 2020 . Consultado el 15 de marzo de 2020 .
^ ab "No exportar kallsyms_lookup_name() [LWN.net]". Lwn.net . Archivado desde el original el 1 de abril de 2020 . Consultado el 15 de marzo de 2020 .
^ "Árboles I: árboles Radix [LWN.net]". lwn.net . Archivado desde el original el 8 de noviembre de 2020 . Consultado el 13 de noviembre de 2020 .
^ "Árboles II: árboles rojo-negros [LWN.net]". lwn.net . Archivado desde el original el 13 de noviembre de 2020 . Consultado el 13 de noviembre de 2020 .
^ "Guía poco confiable para piratear el kernel de Linux". Kernel.org (1ª ed.). 2005. Archivado desde el original el 16 de febrero de 2020 . Consultado el 15 de marzo de 2020 .
^ "Guía poco confiable para piratear el kernel de Linux: documentación del kernel de Linux". Kernel.org . Archivado desde el original el 7 de marzo de 2020 . Consultado el 15 de marzo de 2020 .
^ "Guía poco confiable para bloquear: documentación del kernel de Linux". Kernel.org . Archivado desde el original el 7 de marzo de 2020 . Consultado el 15 de marzo de 2020 .
^ "Guía de interfaces SCSI: documentación del kernel de Linux". Kernel.org . Archivado desde el original el 2 de junio de 2020 . Consultado el 11 de junio de 2020 .
^ "Guía para desarrolladores de libATA: documentación del kernel de Linux". Kernel.org . Archivado desde el original el 30 de mayo de 2020 . Consultado el 11 de junio de 2020 .
^ "DRM Internals: la documentación del kernel de Linux". Kernel.org . Archivado desde el original el 1 de junio de 2020 . Consultado el 11 de junio de 2020 .
^ "Configuración del modo kernel (KMS): la documentación del kernel de Linux". Kernel.org . Archivado desde el original el 11 de junio de 2020 . Consultado el 11 de junio de 2020 .
^ "Introducir el mecanismo de intercambio de búfer DMA [LWN.net]". lwn.net . Archivado desde el original el 11 de junio de 2020 . Consultado el 11 de junio de 2020 .
^ "Compartir buffers de CPU y GPU en Linux*". 01.org . 12 de mayo de 2016. Archivado desde el original el 11 de junio de 2020 . Consultado el 11 de junio de 2020 .
^ "Sincronización y uso compartido de búfer: documentación del kernel de Linux". Kernel.org . Archivado desde el original el 1 de junio de 2020 . Consultado el 11 de junio de 2020 .
^ "Acerca de mac80211". Linux Kernel Organization, Inc. Archivado desde el original el 1 de febrero de 2021 . Consultado el 8 de junio de 2014 .
^ "Guía del desarrollador del controlador Linux 802.11: documentación del kernel de Linux". Kernel.org . Consultado el 19 de noviembre de 2021 .
^ "Bifurcación [PATCH v3 1/2]: agregue clone3 [LWN.net]". lwn.net . Archivado desde el original el 16 de julio de 2020 . Consultado el 16 de julio de 2020 .
^ "clon (2) - página del manual de Linux". man7.org . Archivado desde el original el 15 de julio de 2020 . Consultado el 15 de julio de 2020 .
^ "clone3(), fchmodat4() y fsinfo() [LWN.net]". lwn.net . Archivado desde el original el 15 de junio de 2020 . Consultado el 15 de julio de 2020 .
^ "ld-linux.so(8) - Página del manual de Linux". man7.org . Archivado desde el original el 26 de noviembre de 2020 . Consultado el 18 de noviembre de 2020 .
^ "nptl(7) - página del manual de Linux". man7.org . Archivado desde el original el 25 de julio de 2020 . Consultado el 25 de julio de 2020 .
^ "futex (7) - página del manual de Linux". man7.org . Archivado desde el original el 15 de julio de 2020 . Consultado el 25 de julio de 2020 .
^ "Los subprocesos del kernel simplificados [LWN.net]". lwn.net . Archivado desde el original el 31 de marzo de 2020 . Consultado el 15 de agosto de 2020 .
^ ab Bar, Moshe (1 de abril de 2000). "El programador de Linux". Diario de Linux . Belltown Media, Inc. Archivado desde el original el 2 de febrero de 2021 . Consultado el 14 de abril de 2012 .
^ BKK19-TR03 - The Linux Kernel Scheduler - Overview, 23 de abril de 2019, archivado desde el original el 15 de diciembre de 2021 , recuperado 17 de mayo de 2021
^ "Reducir la latencia en Linux: introducción de un kernel interrumpible | Linux Journal". Linuxjournal.com . Archivado desde el original el 9 de agosto de 2020 . Consultado el 17 de agosto de 2020 .
^ "Programador CFS: documentación del kernel de Linux". Kernel.org . Consultado el 1 de mayo de 2021 .
^ "Estándar IEEE para tecnología de la información: interfaz de sistema operativo portátil, POSIX.1b, extensiones en tiempo real (IEEE Std 1003.1b-1993)". Archivado desde el original el 16 de noviembre de 2010 . Consultado el 17 de marzo de 2016 .
^ Larabel, Michael (24 de enero de 2014). "El kernel de Linux 3.14 ya tiene muchas características interesantes". Forónix . Archivado desde el original el 13 de agosto de 2020 . Consultado el 3 de febrero de 2014 .
^ "Kernel de Linux 3.14, Sección 1.1. Clase de programación de fechas límite para una mejor programación en tiempo real". kernelnewbies.org . 30 de marzo de 2014. Archivado desde el original el 15 de enero de 2021 . Consultado el 2 de abril de 2014 .
^ "Diseño de implementación RT-mutex: documentación del kernel de Linux". Kernel.org . Consultado el 17 de diciembre de 2021 .
^ "Subsistema RT-mutex con soporte PI: documentación del kernel de Linux". Kernel.org . Consultado el 17 de diciembre de 2021 .
^ McKenney, Paul (10 de agosto de 2005). "Una descripción general de la preferencia en tiempo real". LWN.net . Archivado desde el original el 10 de agosto de 2020 . Consultado el 5 de febrero de 2012 .
^ "Proyecto OSADL: Linux en tiempo real". OSADL . Archivado desde el original el 4 de febrero de 2021 . Consultado el 5 de febrero de 2012 .
^ ab "Steven-Rostedt_on_PREEMPT_RT" (PDF) .
^ "El programador EEVDF puede estar listo para aterrizar con Linux 6.6". Forónix . Consultado el 31 de agosto de 2023 .
^ "Un programador de CPU EEVDF para Linux [LWN.net]". LWN.net . Consultado el 31 de agosto de 2023 .
^ "Programador EEVDF fusionado para Linux 6.6, reintroducción de la programación de clústeres híbridos Intel". Forónix .
^ "bloqueo: documentación del kernel de Linux". Kernel.org . Consultado el 17 de diciembre de 2021 .
^ "locking.rst - Documentación/kernel-hacking/locking.rst - Código fuente de Linux (v5.11.10) - Bootlin". elixir.bootlin.com . Consultado el 29 de marzo de 2021 .
^ "¿Qué es RCU, fundamentalmente? [LWN.net]". lwn.net . Consultado el 29 de marzo de 2021 .
^ "¿Qué es RCU? Parte 2: Uso [LWN.net]". lwn.net . Consultado el 29 de marzo de 2021 .
^ "RCU parte 3: la API de RCU [LWN.net]". lwn.net . Consultado el 29 de marzo de 2021 .
^ "Modelo de memoria del kernel de Linux". open-std.org . Consultado el 29 de marzo de 2021 .
^ "Un modelo formal de ordenamiento de la memoria del kernel (parte 1) [LWN.net]". lwn.net . Consultado el 29 de marzo de 2021 .
^ "Un modelo formal de ordenamiento de la memoria del kernel (parte 2) [LWN.net]". lwn.net . Consultado el 29 de marzo de 2021 .
^ Popa, Alan. "Explicación del modelo de coherencia de la memoria del kernel de Linux".
^ "kernel/git/torvalds/linux.git - árbol de fuentes del kernel de Linux". git.kernel.org . Consultado el 17 de diciembre de 2021 .
^ ab "Tipos de bloqueo y sus reglas: documentación del kernel de Linux". Kernel.org . Consultado el 17 de diciembre de 2021 .
^ "Temas breves: tiempo real, Futexes y ntfs3". Lwn.net . Consultado el 20 de febrero de 2022 .
^ "Subsistema RT-mutex con soporte PI: documentación del kernel de Linux". Kernel.org . Consultado el 20 de febrero de 2022 .
^ "Diseño de implementación de RT-mutex: la documentación del kernel de Linux".
^ "Validador de corrección de bloqueo en tiempo de ejecución: documentación del kernel de Linux". Kernel.org . Consultado el 17 de diciembre de 2021 .
^ "Interrupciones, subprocesos y bloqueo [LWN.net]". lwn.net . Consultado el 17 de diciembre de 2021 .
^ "Tablas de páginas: documentación del kernel de Linux". www.kernel.org . Consultado el 21 de julio de 2024 .
^ "Memoria física: documentación del kernel de Linux". www.kernel.org . Consultado el 21 de julio de 2024 .
^ "El diagrama de pila de almacenamiento de Linux". Thomas-krenn.com . Archivado desde el original el 3 de agosto de 2020 . Consultado el 19 de marzo de 2020 .
^ "El asignador SLUB". Lwn.net . 11 de abril de 2007 . Consultado el 20 de febrero de 2022 .
^ ab "Asignadores de losa en el kernel de Linux: SLAB, SLOB, SLUB" (PDF) . Eventos.static.linuxfound.org . Consultado el 20 de febrero de 2022 .
^ Corbet, Jonathan (28 de abril de 2023). "6.4 Ventana de fusión, parte 1 [LWN.net]". LWN.net . Consultado el 12 de mayo de 2023 .
^ "La primera mitad de la ventana de fusión 6.8 [LWN.net]". lwn.net . Consultado el 21 de julio de 2024 .
^ "Kernel/Git/Torvalds/Linux.git: árbol de fuentes del kernel de Linux". Git.kernel.org .
^ abc Torvalds, Linus (enero de 1999). "La ventaja de Linux". Fuentes abiertas: voces de la revolución del código abierto . O'Reilly . ISBN1-56592-582-3. Consultado el 13 de octubre de 2013 .
^ "Migración de Linux a DEC Alpha: el kernel y el shell". Archivado desde el original el 5 de septiembre de 2019 . Consultado el 5 de octubre de 2019 .
^ "Linux en Alpha: una elección estratégica". Archivado desde el original el 4 de septiembre de 2019 . Consultado el 5 de octubre de 2019 .
^ "Sitios de supercomputadoras TOP500: familia de sistemas operativos / Linux". Top500.org. Archivado desde el original el 19 de noviembre de 2012 . Consultado el 5 de octubre de 2019 .
^ "Avalon Cluster | TOP500 sitios de supercomputadoras". Top500.org . Archivado desde el original el 5 de octubre de 2019 . Consultado el 5 de octubre de 2019 .
^ Wang, David (6 de mayo de 2010). "Android ahora se ejecuta en iPhone 3G". TechHive . IDG . Archivado desde el original el 22 de julio de 2010 . Consultado el 11 de julio de 2010 .
^ "LKDDb". Proyecto LKDDb. Archivado desde el original el 25 de febrero de 2021 . Consultado el 26 de enero de 2021 .
^ "Hardware Linux". Proyecto de hardware Linux. Archivado desde el original el 26 de enero de 2021 . Consultado el 26 de enero de 2021 .
^ "Linux kernel 4.0, Sección 1.2. Parches en vivo". kernelnewbies.org . 26 de abril de 2015. Archivado desde el original el 4 de mayo de 2015 . Consultado el 27 de abril de 2015 .
^ Jonathan Corbet (25 de febrero de 2015). "Una mala racha para la aplicación de parches en vivo". LWN.net . Archivado desde el original el 27 de abril de 2015 . Consultado el 27 de abril de 2015 .
^ "kernel/git/torvalds/linux.git: extraiga la infraestructura de parches en vivo de Jiri Kosina (árbol de fuentes del kernel de Linux)". kernel.org . 11 de febrero de 2015. Archivado desde el original el 11 de junio de 2015 . Consultado el 27 de abril de 2015 .
^ Mookhey, KK; Burghate, Nilesh (1 de julio de 2005). Linux: funciones de seguridad, auditoría y control. NOSOTROS: ISACA . pag. 14.ISBN1-893209-78-4. Archivado desde el original el 2 de junio de 2013 . Consultado el 31 de diciembre de 2010 .
^ Hatch, Brian (15 de julio de 2008). Hackear Linux expuesto: secretos y soluciones de seguridad de Linux. Medios de McGraw-Hill Osborne . pag. 524.ISBN978-0-07-226257-5. Archivado desde el original el 2 de junio de 2013 . Consultado el 31 de diciembre de 2010 .
^ Jaeger, Trent (7 de octubre de 2008). Seguridad del sistema operativo. Editores Morgan y Claypool. pag. 122.ISBN978-1-59829-212-1. Archivado desde el original el 2 de junio de 2013 . Consultado el 31 de diciembre de 2010 .
^ "CAP_PERFMON - y nuevas capacidades en general [LWN.net]". lwn.net . Archivado desde el original el 4 de agosto de 2020 . Consultado el 2 de agosto de 2020 .
^ "Uso del módulo de seguridad de Linux: documentación del kernel de Linux". Kernel.org . Archivado desde el original el 2 de mayo de 2020 . Consultado el 10 de enero de 2020 .
^ "Agencia de Seguridad Nacional | Servicio Central de Seguridad > Qué hacemos > Investigación > SE Linux > Preguntas frecuentes sobre SE Linux". Nsa.gov . Archivado desde el original el 18 de septiembre de 2019 . Consultado el 10 de enero de 2020 .
^ "Seccomp BPF (SECure COMPuting con filtros): la documentación del kernel de Linux". Kernel.org . Archivado desde el original el 7 de marzo de 2020 . Consultado el 10 de enero de 2020 .
^ Andrews, Jeremy (16 de julio de 2008). "Errores de seguridad y divulgación completa". Trampa del núcleo . Archivado desde el original el 19 de julio de 2008 . Consultado el 31 de diciembre de 2010 .
^ Spengler, Brad (16 de julio de 2008). "Política no oficial de seguridad mediante encubrimiento de Linux". Divulgación completa (lista de correo). Archivado desde el original el 7 de agosto de 2020 . Consultado el 31 de diciembre de 2010 .
^ ab Yamagata, Hiroo (3 de agosto de 1997). "El pragmático del software libre". Cableado caliente . Archivado desde el original el 10 de febrero de 2007 . Consultado el 21 de febrero de 2007 .
^ "GPL-v2". gnu.org . Archivado desde el original el 25 de diciembre de 2019 . Consultado el 28 de enero de 2020 .
^ Corbet, Jonathan (31 de enero de 2006). "GPLv3 y el kernel". LWN.net . Archivado desde el original el 10 de agosto de 2020 . Consultado el 21 de febrero de 2007 .
^ Torvalds, Linus (8 de septiembre de 2000). "Linux-2.4.0-prueba8". LKML (lista de correo). Archivado desde el original el 15 de mayo de 2020 . Consultado el 21 de febrero de 2007 .
^ "gnu.org". Gnu.org . Archivado desde el original el 2 de febrero de 2021 . Consultado el 18 de octubre de 2017 .
^ Cox, Alan (20 de enero de 2006). "Re: GPL V3 y Linux". LKML (lista de correo). Archivado desde el original el 26 de enero de 2021 . Consultado el 21 de febrero de 2007 .
^ Shankland, Stephen (25 de septiembre de 2006). "Los mejores programadores de Linux analizan GPL 3". Noticias.com . CNET . Archivado desde el original el 14 de septiembre de 2013 . Consultado el 21 de febrero de 2007 .
^ ab James EJ Bottomley; Mauro Carvalho Chehab; Thomas Gleixner; Christoph Hellwig; Dave Jones; Greg Kroah-Hartman; Tony suerte; Andrés Morton; Trond Myklebust; David Woodhouse (15 de septiembre de 2006). "Posición de los desarrolladores del kernel sobre GPLv3: los peligros y problemas de GPLv3". LWN.net . Archivado desde el original el 18 de enero de 2021 . Consultado el 11 de marzo de 2015 .
^ Petreley, Nicholas (27 de septiembre de 2006). "¿Una lucha contra el mal o una lucha por llamar la atención?". linuxjournal.com. Archivado desde el original el 2 de marzo de 2018 . Consultado el 11 de marzo de 2015 .
^ "Linus Torvalds dice que GPL v3 viola todo lo que representaba GPLv2". Debconf 2014. 2014. Archivado desde el original el 8 de mayo de 2018 . Consultado el 21 de marzo de 2018 .
^ Clark, Rob; Semwal, Sumit (1 de noviembre de 2012). "Marco de uso compartido de búfer DMA: introducción" (PDF) . Conferencia sobre Linux integrado. Archivado (PDF) desde el original el 8 de agosto de 2014 . Consultado el 2 de agosto de 2014 .
^ Cox, Alan (10 de octubre de 2012). "[PATCH] dma-buf: utilice EXPORT_SYMBOL". Infraestructura de renderizado directo (lista de correo). Archivado desde el original el 22 de enero de 2013 . Consultado el 3 de septiembre de 2013 .
^ Torvalds, Linus (10 de diciembre de 2003). "RE: ¿GPL de Linux y cláusula de excepción del módulo binario?". LKML (lista de correo). Archivado desde el original el 15 de junio de 2011 . Consultado el 31 de diciembre de 2010 .
^ Torvalds, Linus (3 de diciembre de 2003). "Re: ¿GPL de Linux y cláusula de excepción del módulo binario?". LKML (lista de correo). Archivado desde el original el 28 de abril de 2020 . Consultado el 12 de noviembre de 2010 .
^ "Núcleos contaminados: la documentación del kernel de Linux". Kernel.org . Archivado desde el original el 7 de marzo de 2020 . Consultado el 13 de enero de 2020 .
^ "API de firmware de Linux: documentación del kernel de Linux". Kernel.org . Archivado desde el original el 13 de enero de 2020 . Consultado el 13 de enero de 2020 .
^ "Firmware integrado: documentación del kernel de Linux". Kernel.org . Archivado desde el original el 10 de junio de 2020 . Consultado el 10 de junio de 2020 .
^ "Registro de Linux TM en EE. UU.". uspto.gov . Archivado desde el original el 24 de febrero de 2021 . Consultado el 6 de septiembre de 2019 .
^ "Registro de Linux TM en la UE". euipo.europa.eu . Archivado desde el original el 9 de junio de 2016 . Consultado el 28 de noviembre de 2020 .
^ Hughes, Phil (1 de agosto de 1997). "Disputa sobre marcas comerciales de Linux". Diario de Linux . Belltown Media, Inc. Archivado desde el original el 30 de abril de 2010 . Consultado el 8 de diciembre de 2010 .
^ Hughes, Phil (1 de marzo de 1997). "Medidas tomadas sobre la marca comercial de Linux". Diario de Linux . Belltown Media, Inc. Archivado desde el original el 3 de marzo de 2010 . Consultado el 8 de diciembre de 2010 .
^ Gisselberg, Tonya (2010). "La historia de la marca registrada de Linux, el sistema operativo" (PDF) . Gisselberg Law Firm, Inc. Archivado desde el original (PDF) el 11 de julio de 2011 . Consultado el 8 de diciembre de 2010 .
Bezroukov, Nikolai. "Capítulo 4: Un dictador benevolente". Retratos de pioneros del código abierto (libro electrónico). Panorama suave. Archivado desde el original el 13 de octubre de 2005 . Consultado el 3 de octubre de 2005 .
"LinkSys y módulos binarios". Edición semanal de LWN.net. 16 de octubre de 2003. Archivado desde el original el 1 de agosto de 2016 . Consultado el 21 de julio de 2016 .
"La mascota de Linux favorita de todos". Archivado desde el original el 16 de agosto de 2005 . Consultado el 16 de junio de 2005 .
Pranevich, Joseph (diciembre de 2003). "El maravilloso mundo de Linux 2.6". Archivado desde el original el 16 de julio de 2003.
"Cambios en Linux". Archivado desde el original el 31 de octubre de 2005 . Consultado el 31 de octubre de 2005 .
"Documento de seminario sobre el kernel de Linux 2.6". Archivado desde el original el 2 de febrero de 2007.
"Controladores de dispositivos Linux" (3ª ed.). Archivado desde el original el 27 de julio de 2016 . Consultado el 21 de julio de 2016 .
"Comprensión del kernel de Linux" (Libro) (3ª ed.). Archivado desde el original el 17 de diciembre de 2005 . Consultado el 22 de diciembre de 2005 .
Redes del kernel de Linux, por Rami Rosen, 2014 (Libro). Archivado desde el original el 12 de mayo de 2015 . Consultado el 14 de junio de 2015 .
"Linux: la GPL y los módulos binarios". Archivado desde el original el 23 de julio de 2005.
"Anatomía del kernel de Linux". IBM . Archivado desde el original el 27 de junio de 2007 . Consultado el 9 de junio de 2007 .
Tanenbaum, Andrés; Bos, Herbert (2015). Sistemas operativos modernos . Estados Unidos de América: Pearson. pag. 722.ISBN 9781292061429. OCLC 892574803.
Enlaces externos
Wikimedia Commons tiene medios relacionados con el kernel de Linux.
Wikilibros tiene más información sobre el tema: Kernel de Linux
Sitio web oficial
Índice de documentación del kernel de Linux
Páginas de manual del kernel de Linux
Kernel bugzilla y regresiones para cada versión reciente del kernel
Kernel Newbies, una fuente de información variada relacionada con el kernel
Cobertura del kernel en LWN.net, una fuente autorizada de información relacionada con el kernel
Elixir Cross Referencer de Bootlin, una referencia cruzada del código fuente del kernel de Linux
Greg Kroah Hartman sobre el kernel de Linux en YouTube