Núcleo de Linux

Núcleo de sistema operativo libre tipo Unix

Núcleo de Linux
Autor(es) original(es)Linus Torvalds
Desarrollador(es)Colaboradores de la comunidad
Linus Torvalds
Lanzamiento inicial0.02 (5 de octubre de 1991 ; hace 33 años ) ( 5 de octubre de 1991 )
Versión estable
6.11.6 [2]  / 1 de noviembre de 2024
Versión preliminar
6.12-rc6 [3]  / 4 de noviembre de 2024
Repositorio
  • git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
Escrito enC ( C11 desde 5.18, C89 antes), [4]
Rust (desde 6.1), [5]
Lenguaje ensamblador
Disponible enInglés
LicenciaSolo GPL-2.0 con nota de llamada al sistema de Linux [6] [7] [8] [a]
Sitio webkernel.org

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

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

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

Historia

Linus Torvalds en la LinuxCon Europe 2014 en Düsseldorf

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Popularidad

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

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

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

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

Valor

Costos de rediseño del kernel de Linux

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

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

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

Distribución

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

Desarrolladores

Comunidad

[77]
Ninguno
Desconocido
Consultores
SUSE
Google
Casi otras 500
empresas


Afiliación corporativa de las contribuciones al núcleo Linux, 4.8–4.13 [78]

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

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

—Andrew  Morton , 2005

Conflicto

Conflictos notables entre los desarrolladores del kernel de Linux:

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

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

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

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

Desarrollo

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

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

Código base

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

En 2021 [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 es parte del "núcleo", que incluye código específico de la arquitectura, código del kernel y código mm [ aclaración necesaria ] , mientras que el 60 % son controladores.

Contribuciones

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

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

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

Lenguaje de programación

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

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

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

Estilo de codificación

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

Control de versiones

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

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

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

Cadena de herramientas

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

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

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

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

Depuración

Salida de pánico del kernel de Linux

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

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

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

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

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

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

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

Proceso de cambio

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

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

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

Linux de línea principal

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

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

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

Kernel similar a Linux

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

Bifurcaciones de Linux

Un iPod arrancando iPodLinux

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

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

—  Greg Kroah-Hartman , 2010

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

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

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

—  Linus Torvalds , 2001

Apoyo a largo plazo

Mensajes de arranque de un kernel Linux 2.6.25.17

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

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

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

Arquitectura y características

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

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

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

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

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

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

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

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

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

Varias capas dentro de Linux, que también muestran la separación entre el espacio del usuario y el espacio del kernel
Modo de usuarioAplicaciones de usuariobash , LibreOffice , GIMP , Blender , 0 AD , Mozilla Firefox , ...
Componentes del sistemademonio init :
OpenRC , runit , systemd ...
Demonios del sistema :
polkitd , smbd , sshd , udevd ...
Gestores de ventanas :
X11 , Wayland , SurfaceFlinger (Android)
Gráficos :
Mesa , AMD Catalyst , ...
Otras bibliotecas:
GTK , Qt , EFL , SDL , SFML , FLTK , GNUstep , ...
Biblioteca estándar de Cfopen, execv, malloc, memcpy, localtime, pthread_create... (hasta 2000 subrutinas )
glibc apunta a ser rápido, musl apunta a ser liviano, uClibc apunta a sistemas integrados, bionic fue escrito para Android , etc. Todos apuntan a ser compatibles con POSIX / SUS .
Modo kernelNúcleo de Linuxstat, splice, dup, read, open, ioctl, write, mmap, close, exit, etc. (aproximadamente 380 llamadas al sistema)
La interfaz de llamadas al sistema (SCI) del núcleo Linux pretende ser compatible con POSIX / SUS [192]
Subsistema de programación de procesosSubsistema IPCSubsistema de gestión de memoriaSubsistema de archivos virtualesSubsistema de red
Otros componentes: ALSA , DRI , evdev , klibc , LVM , device mapper , Linux Network Scheduler , Netfilter
Módulos de seguridad de Linux : SELinux , TOMOYO , AppArmor , Smack
Hardware ( CPU , memoria principal , dispositivos de almacenamiento de datos , etc.)

Interfaces

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

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

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

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

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

API de kernel a espacio de usuario

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

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

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

ABI del kernel al espacio de usuario

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

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

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

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

API en el núcleo

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

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

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

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

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

ABI en el núcleo

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

Multiprocesamiento

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

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

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

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

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

Programación

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

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

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

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

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

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

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

Sincronización

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

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

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

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

Interrupciones

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

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

Memoria

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

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

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

Diagrama de la pila de almacenamiento de Linux [279]

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

Arquitecturas soportadas

TiVo DVR , un dispositivo de consumo que ejecuta Linux

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

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

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

Dispositivos compatibles

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

Parcheo en vivo

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

Seguridad

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

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

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

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

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

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

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

Condiciones de licencia

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

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

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

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

Módulos de kernel cargables

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

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

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

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

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

Blobs binarios de firmware

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

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

Marca

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

Cumplimiento de sanciones

En octubre de 2024, Greg Kroah-Hartman eliminó los nombres de los rusos del MAINTAINERSarchivo, pero mantuvo el código de dichos subsistemas. Esta eliminación fue apoyada por Torvalds. [327]

Véase también

Notas

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

Referencias

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

Lectura adicional

  • Torvalds, Linus; Diamond, David (2001). Sólo por diversión: La historia de un revolucionario accidental . HarperBusiness . ISBN 978-0066620732.
  • Bezroukov, Nikolai. "Capítulo 4: Un dictador benévolo". Retratos de pioneros del código abierto (libro electrónico). Softpanorama. 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 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.
  • "LinuxChanges". Archivado desde el original el 31 de octubre de 2005. Consultado el 31 de octubre de 2005 .
  • "Documento de seminario sobre el kernel 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 .
  • "Entendiendo el núcleo de Linux" (Libro) (3.ª ed.). Archivado desde el original el 17 de diciembre de 2005 . Consultado el 22 de diciembre de 2005 .
  • Redes del núcleo Linux, de Rami Rosen, 2014 (libro). Archivado desde el original el 12 de mayo de 2015 . Consultado el 14 de junio de 2015 .
  • "Linux: la licencia GPL y los módulos binarios". Archivado desde el original el 23 de julio de 2005.
  • "Anatomía del núcleo Linux". IBM . Archivado desde el original el 27 de junio de 2007 . Consultado el 9 de junio de 2007 .
  • Tanenbaum, Andrew; Bos, Herbert (2015). Sistemas operativos modernos . Estados Unidos de América: Pearson. p. 722. ISBN 9781292061429.OCLC 892574803  .
  • Sitio web oficial
    • Índice de la documentación del kernel de Linux
    • Páginas del manual del kernel de Linux
    • Kernel bugzilla y regresiones para cada versión reciente del kernel
  • Kernel Newbies, una fuente de diversa información relacionada con el kernel
  • Cobertura del kernel en LWN.net, una fuente autorizada de información relacionada con el kernel
  • Referencia cruzada de Elixir de Bootlin, una referencia cruzada del código fuente del kernel de Linux
  • Greg Kroah Hartman habla sobre el kernel de Linux en YouTube
Retrieved from "https://en.wikipedia.org/w/index.php?title=Linux_kernel&oldid=1255630118"