De Wikipedia, la enciclopedia libre
Saltar a navegación Saltar a búsqueda

El núcleo de Linux es un libre y de código abierto , [6] [7] monolítico , modular , [8] multitarea , Unix-como sistema operativo kernel . [9] Fue concebido y creado en 1991 por Linus Torvalds [10] para su PC basado en i386 , y pronto fue adoptado como el núcleo del sistema operativo GNU , [11] que fue creado como un reemplazo gratuito para UNIX . [12] Desde entonces, ha generado una plétora dedistribuciones del sistema operativo , comúnmente también llamado Linux .

Linux se implementa en una amplia variedad de sistemas informáticos, como dispositivos integrados , dispositivos móviles (incluido su uso en el sistema operativo Android ), computadoras personales , servidores , mainframes y supercomputadoras . [13] Se puede adaptar para arquitecturas específicas y para varios escenarios de uso utilizando una familia de comandos simples (es decir, sin la necesidad de editar manualmente su código fuente antes de la compilación); [14] [15] [16] los usuarios privilegiados también pueden ajustar los parámetros del kernel en tiempo de ejecución. [17] [18] [19]La mayor parte del código del kernel de Linux se escribe utilizando las extensiones GNU de GCC [20] [21] al lenguaje de programación C estándar y con el uso de instrucciones específicas de arquitectura ( ISA ). Esto produce un ejecutable altamente optimizado ( vmlinux ) con respecto a la utilización del espacio de memoria y los tiempos de ejecución de tareas. [22]

Las discusiones de desarrollo diarias se llevan a cabo en la lista de correo del kernel de Linux (LKML). Los cambios se rastrean utilizando el sistema de control de versiones git , que fue creado por Torvalds como un reemplazo a medida de BitKeeper . Linux en su conjunto se publica bajo la GNU General Public License versión 2 (GPLv2), [23] pero también contiene varios archivos bajo otras licencias compatibles, [5] y una exención ad hoc para los archivos de encabezado de API de espacio de usuario (UAPI) .

Historia [ editar ]

Linus Torvalds en la LinuxCon Europe 2014 en Düsseldorf

En abril de 1991, Linus Torvalds , en ese momento un estudiante de ciencias de la computación de 21 años en la Universidad de Helsinki , Finlandia , comenzó a trabajar en algunas ideas simples para un sistema operativo. Comenzó con un conmutador de tareas en lenguaje ensamblador Intel 80386 y un controlador de terminal . El 25 de agosto de 1991, Torvalds publicó lo siguiente en comp.os.minix , un grupo de noticias en Usenet : [24]

Estoy haciendo un sistema operativo (gratuito) (solo un pasatiempo, no será tan grande y profesional como GNU) para 386 (486) clones de AT . Esto se ha estado gestando desde abril y está comenzando a prepararse. Me gustaría recibir comentarios sobre las cosas que a la gente le gusta o no le gustan en minix, ya que mi sistema operativo se parece un poco (el mismo diseño físico del sistema de archivos (por razones prácticas), entre otras cosas). Actualmente he portado bash (1.08) y gcc (1.40), y las cosas parecen funcionar. Esto implica que obtendré algo práctico en unos meses [...] Sí, está libre de cualquier código minix y tiene un fs multiproceso. NO es protable [ sic ] (usa 386 tareas de conmutación, etc.), y probablemente nunca admitirá nada más que discos duros AT, ya que eso es todo lo que tengo :-(.

El 17 de septiembre de 1991, Torvalds preparó la versión 0.01 de Linux y colocó el "ftp.funet.fi" - servidor FTP de la Red de Investigación y Universidades de Finlandia ( FUNET ). Ni siquiera era ejecutable ya que su código todavía necesitaba a Minix para compilar y reproducir. [25]

El 5 de octubre de 1991, Torvalds anunció la primera versión "oficial" de Linux, la versión 0.02. [26] En este punto, Linux podía ejecutar Bash, GCC y algunas otras utilidades GNU: [26] [25]

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

Después de eso, muchas personas contribuyeron con código al proyecto, incluidos algunos desarrolladores de la comunidad MINIX . En ese momento, el Proyecto GNU había creado muchos de los componentes necesarios para un sistema operativo libre, pero su propio núcleo, GNU Hurd , estaba incompleto y no estaba disponible. El Berkeley Software Distribution aún no se había liberado de gravámenes legales . A pesar de la funcionalidad limitada de las primeras versiones, Linux ganó rápidamente desarrolladores y usuarios.

Torvalds asignó la versión 0 al kernel para indicar que era principalmente para pruebas y no para uso productivo. [27] Versión 0.11, lanzado en diciembre de 1991, fue el primer auto-organizada de Linux, ya que podría ser compilada por un equipo que ejecuta el mismo núcleo.

Cuando Torvalds lanzó la versión 0.12 en febrero de 1992, adoptó la GNU General Public License versión 2 (GPLv2) sobre su anterior licencia auto-redactada, que no había permitido la redistribución comercial. [28] A diferencia de Unix , todos los archivos fuente de Linux están disponibles gratuitamente, incluidos los controladores de dispositivo . [29] 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, si es necesario, actúa como un punto de entrada al espacio de direcciones del kernel, Linux podría ejecutar software y aplicaciones que se habían desarrollado para Unix. [30]

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

El 19 de enero de 1992 se envió el primer mensaje al nuevo grupo de noticias alt.os.linux . [31] El 31 de marzo de 1992, el grupo de noticias pasó a llamarse comp.os.linux . [32] El hecho de que Linux sea un kernel monolítico en lugar de un microkernel fue el tema de un debate entre Andrew S. Tanenbaum , el creador de MINIX, y Torvalds. [33] El debate Tanenbaum-Torvalds comenzó en 1992 en el grupo de Usenet comp.os.minix como una discusión general sobre las arquitecturas del kernel. [34] [35]

La versión 0.95 de Linux fue la primera en poder ejecutar el sistema X Window . [36] En marzo de 1994, Linux 1.0.0 fue lanzado con 176,250 líneas de código. [37] Fue la primera versión adecuada para su uso en entornos de producción . [27]

Comenzó un sistema de control de versiones para el kernel con tres o cuatro números separados por puntos, donde el primero representaba la versión principal , la segunda era la versión secundaria y el tercero era la revisión. [38] En ese momento, los lanzamientos menores con números impares eran para desarrollo y pruebas, mientras que los lanzamientos menores con números pares eran para producción. El cuarto dígito opcional indica un conjunto de parches para una revisión. [27] Las versiones de desarrollo se indicaron con el sufijo -rc ("versión candidata").

La numeración de la versión actual es ligeramente diferente a la anterior. Se ha eliminado la numeración par frente a impar y ahora se indica una versión principal específica con los dos primeros números, tomados en su conjunto. Si bien el período de tiempo está abierto para el desarrollo de la próxima especialidad , el sufijo -rcN se usa para identificar el candidato de lanzamiento n para la próxima versión. [39] 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 realiza una versión estable, su mantenimiento se transfiere al "equipo estable". Las actualizaciones ocasionales de las versiones estables se identifican mediante un esquema de numeración de tres (por ejemplo, 4.13.1, 4.13.2, ..., 4.13.16) . [39]

Después de la versión 1.3 del kernel, Torvalds decidió que Linux había evolucionado lo suficiente como para garantizar un nuevo número importante , por lo que lanzó la versión 2.0.0 en junio de 1996. [40] [41] La serie incluía 41 lanzamientos. La característica principal de 2.0 fue la compatibilidad con el multiprocesamiento simétrico (SMP) y la compatibilidad con más tipos de procesadores.

A partir de la versión 2.0, Linux se puede configurar para seleccionar objetivos de hardware específicos y para habilitar características y optimizaciones específicas de la arquitectura. [30] La familia de comandos make * config de kbuild se usa para habilitar y configurar miles de opciones para construir ejecutables ad hoc del kernel ( vmlinux ) y módulos cargables. [14] [15]

La versión 2.2, publicada el 20 de enero de 1999, [42] mejoró la granularidad de bloqueo y la gestión de SMP, agregó compatibilidad con m68k , PowerPC , Sparc64 , Alpha y otras plataformas de 64 bits. [43] Además, se ha añadido nuevos sistemas de archivos incluyendo Microsoft 's NTFS capacidad de sólo lectura. [43] En 1999, IBM publicó sus parches para el código de Linux 2.2.13 para el soporte de la arquitectura S / 390 . [44]

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

La versión 2.6.0 se publicó el 17 de diciembre de 2003. [47] El desarrollo para 2.6. x cambió aún más para incluir nuevas funciones a lo largo de la duración de la serie. Entre los cambios que se han realizado en la serie 2.6 se encuentran: integración de µClinux en las fuentes principales del kernel, soporte PAE , soporte para varias líneas nuevas de CPU , integración de Advanced Linux Sound Architecture (ALSA) en las fuentes principales del kernel, soporte para hasta 2 32 usuarios (hasta 2 16 ), soporte para hasta 2 29 ID de proceso (solo 64 bits, arcos de 32 bits aún limitados a 2 15 ), [48]aumentó sustancialmente la cantidad de tipos de dispositivos y la cantidad de dispositivos de cada tipo, mejor soporte de 64 bits , soporte para sistemas de archivos que admiten tamaños de archivo de hasta 16 terabytes , preferencia en el kernel , soporte para la biblioteca de subprocesos POSIX nativa (NPTL ), Integración de Linux en modo de usuario en las fuentes del kernel de la línea principal, integración de SELinux en las fuentes del kernel de la línea principal, compatibilidad con InfiniBand y mucho más.

También es notable la adición de una amplia selección de sistemas de archivos a partir del 2.6. versiones x : ahora el kernel admite una gran cantidad de sistemas de archivos, algunos que han sido diseñados para Linux, como ext3 , ext4 , FUSE , Btrfs , [49] y otros que son nativos de otros sistemas operativos como JFS , XFS , Minix, Xenix , Irix , Solaris , System V , Windows y MS-DOS . [50]

En 2005, el equipo estable se formó como respuesta a la falta de un árbol del kernel donde la gente pudiera trabajar en la corrección de errores y seguiría actualizando las versiones estables . [51] En febrero de 2008 , se creó el árbol linux-next para que sirviera como un lugar donde se reunieran los parches destinados a fusionarse durante el próximo ciclo de desarrollo. [52] [53] Varios encargados del mantenimiento del subsistema también adoptaron el sufijo -siguiente para los árboles que contienen código que pretenden enviar para su inclusión en el próximo ciclo de publicación. A partir de enero de 2014 , la versión en desarrollo de Linux se encuentra en una rama inestable llamada linux-next . [54]

Linux solía mantenerse sin la ayuda de un sistema de gestión de código fuente automatizado hasta que, en 2002, el desarrollo cambió a BitKeeper . Estaba disponible gratuitamente para los desarrolladores de Linux, pero no era un software gratuito . En 2005, debido a los esfuerzos para realizar ingeniería inversa , la empresa propietaria del software revocó el apoyo de la comunidad Linux. En respuesta, Torvalds y otros escribieron Git . El nuevo sistema se escribió en unas semanas, y en dos meses se lanzó el primer kernel oficial creado con él. [55]

Los detalles sobre la historia de la serie 2.6 del kernel se pueden encontrar en los archivos de ChangeLog en el área de lanzamiento del código fuente de la serie 2.6 del kernel de kernel.org . [56]

Torvalds celebró el vigésimo aniversario de Linux en julio de 2011 con el lanzamiento de la versión del kernel 3.0.0. [40] Como 2.6 ha sido el número de versión durante 8 años, se tuvo que agregar una nueva personalidad uname26 que reporta 3.x como 2.6.40 + x al kernel para que los programas antiguos funcionen. [57]

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

El 11 de diciembre de 2012, Torvalds decidió reducir la complejidad del kernel eliminando el soporte para los procesadores i386 , lo que convirtió a la serie 3.7 del kernel en la última que aún admite el procesador original. [60] [61] El mismo soporte unificado de la serie para el procesador ARM . [62]

La versión 3.11, lanzada el 2 de septiembre de 2013, [63] agrega muchas características nuevas como el nuevo indicador O_TMPFILE para open(2)reducir las vulnerabilidades de archivos temporales, administración de energía dinámica experimental AMD Radeon , sondeo de red de baja latencia y zswap (caché de intercambio comprimido). [64]

El cambio de numeración de 2.6.39 a 3.0 y de 3.19 a 4.0 no implicó una diferenciación técnica significativa. Se aumentó el número de versión principal para evitar grandes números menores. [58] [65] Los núcleos 3.xy estables se lanzaron hasta el 3.19 de febrero de 2015.

En abril de 2015, Torvalds lanzó la versión 4.0 del kernel. [40] En febrero de 2015, Linux había recibido contribuciones de casi 12.000 programadores de más de 1.200 empresas, incluidos algunos de los proveedores de software y hardware más grandes del mundo. [66] 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. [67]

Un total de 1.991 desarrolladores, de los cuales 334 son primeros colaboradores, agregaron más de 553.000 líneas de código a la versión 5.8, rompiendo el récord que tenía la versión 4.9. [68]

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

La mayoría de los sitios web se ejecutan en sistemas operativos basados en Linux , [71] [72] y las 500 supercomputadoras más poderosas del mundo utilizan algún tipo de sistema operativo basado en Linux. [73]

Las distribuciones de Linux incluyen el kernel con 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 uso compartido en escritorios es bajo en comparación con otros sistemas operativos.

Android , que representa la mayor parte de la base instalada de todos los sistemas operativos para dispositivos móviles, [74] [75] [76] es responsable del creciente uso del kernel de Linux, [30] junto con su amplio uso en un gran variedad de dispositivos integrados .

Arquitectura y características [ editar ]

Mapa del kernel de Linux

Linux es un kernel monolítico con un diseño modular (por ejemplo, puede insertar y eliminar módulos de kernel cargables en tiempo de ejecución), que admite la mayoría de las funciones que antes solo estaban disponibles en kernels de código cerrado de sistemas operativos no libres. El resto del artículo hace uso de la convención de sistemas operativos UNIX y similares a Unix en las páginas oficiales del manual . Los números que siguen al nombre de los comandos, interfaces y otras funciones tienen el propósito de especificar la sección (es decir, el tipo de componente o función del sistema operativo) a la que pertenecen (p. Ej., Execve (2) se refiere a una llamada al sistema , mientras que exec (3) se refiere a un contenedor de biblioteca de espacio de usuario):

  • computación concurrente y (con la disponibilidad de suficientes núcleos de CPU para tareas que están listas para ejecutarse) incluso verdadera ejecución paralela de muchos procesos a la vez (cada uno de ellos con uno o más subprocesos de ejecución ) en arquitecturas SMP y NUMA ;
  • selección y configuración de cientos de características y controladores del kernel (usando uno de la familia de comandos make * config , antes de ejecutar la compilación), [16] [15] [14] modificación de los parámetros del kernel antes de arrancar (generalmente insertando instrucciones en las líneas del menú GRUB2 ), y ajuste fino del comportamiento del kernel en tiempo de ejecución (usando la interfaz sysctl (8) a / proc / sys / ); [17] [18] [19]
  • configuración (nuevamente usando los comandos make * config ) y modificaciones en tiempo de ejecución de las políticas [77] (a través de nice (2) , setpriority (2) y la familia de syscalls sched _ * (2) ) de los programadores de tareas que permiten multitarea preventiva (tanto en modo usuario como, desde la serie 2.6, en modo kernel [78] [79] ); el Programador Completamente Justo (CFS) es el programador predeterminado de Linux desde 2007 y utiliza un árbol rojo-negro que puede buscar, insertar y eliminar información de proceso ( estructura de tareas ) con O (log n) complejidad del tiempo , donde n es el número de tareas ejecutables; [80] [81]
  • gestión avanzada de memoria con memoria virtual paginada ;
  • comunicaciones entre procesos y mecanismo de sincronización ;
  • 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, ioctl (2) [82] syscall que manipula los parámetros de dispositivo subyacentes de archivos especiales (es una llamada al sistema no estándar, ya que los argumentos, retornos y semántica dependen del controlador de dispositivo en cuestión), soporte para E / S asíncronas POSIX [83] (sin embargo, debido a que escalan mal con aplicaciones multiproceso, se tuvo que crear una familia de llamadas al sistema de E / S específicas de Linux ( io _ * (2) [84] ) para la gestión de E / S asíncronas O contextos adecuados para el procesamiento simultáneo);
  • Virtualización a nivel de sistema operativo (con Linux-VServer ), paravirtualización y virtualización asistida por hardware (con KVM o Xen , y usando QEMU para la emulación de hardware); [85] [86] [87] [88] [89] [90] En el hipervisor Xen, el kernel de Linux proporciona soporte para construir distribuciones de Linux (como openSuSE Leap y muchas otras) que funcionan como Dom0 , que son máquinas virtuales servidores host que proporcionan el entorno de gestión para las máquinas virtuales del usuario ( DomU ). [91]
  • mecanismos de seguridad para el control de acceso discrecional y obligatorio (SELinux, AppArmor, POSIX ACL y otros); [92] [93]
  • varios tipos de protocolos de comunicación en capas (incluido el conjunto de protocolos de Internet ).

Los controladores de dispositivos y las extensiones del kernel se ejecutan en el espacio del kernel ( anillo 0 en muchas arquitecturas de CPU ), con acceso completo al hardware, aunque algunas excepciones se ejecutan en el espacio del usuario , por ejemplo, sistemas de archivos basados ​​en FUSE / CUSE y partes de UIO. [94] [95] El sistema de gráficos que la mayoría de la gente usa con Linux no se ejecuta dentro del kernel. A diferencia de los núcleos monolíticos estándar, los controladores de dispositivos se configuran fácilmente como módulos y se cargan o descargan mientras el sistema está en ejecución y también se pueden adelantar bajo ciertas condiciones para manejar interrupciones de hardwarecorrectamente y para soportar mejor el multiprocesamiento simétrico . [79] Por elección, Linux no tiene una interfaz binaria de aplicación de controlador de dispositivo estable . [96]

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

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

Interfaces [ editar ]

Se distinguen cuatro interfaces: dos internas al kernel y dos entre el kernel y el espacio de usuario.

Linux es un clon de UNIX y tiene como objetivo el cumplimiento de POSIX y Single UNIX Specification . [100] El kernel también proporciona llamadas al sistema y otras interfaces que son específicas de Linux. Para ser incluido en el kernel oficial, el código debe cumplir con un conjunto de reglas de licencia. [23] [5]

La interfaz binaria de la aplicación Linux (ABI) entre el kernel y el espacio de usuario tiene cuatro grados de estabilidad (estable, probando, obsoleta, eliminada); [101] sin embargo, se espera que las llamadas al sistema nunca cambien para no romper los programas del espacio de usuario que dependen de ellas. [102]

Los módulos de kernel cargables (LKM), por diseño, no pueden depender de una ABI estable. [96] Por lo tanto, siempre deben recompilarse cada vez que se instala un nuevo ejecutable del núcleo 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 del kernel ( vmlinux ) están vinculados estáticamente por el proceso de construcción.

Tampoco hay garantía de estabilidad de la API en el kernel a nivel de fuente [96] y, debido a esto, el código de los controladores de dispositivo , así como el código de cualquier otro subsistema del kernel, debe mantenerse actualizado con la evolución del kernel. Cualquier desarrollador que realice un cambio de API debe corregir cualquier código que se rompa como resultado de su cambio. [103]

API de kernel a espacio de usuario [ editar ]

El conjunto de la API del kernel de Linux que se refiere a las interfaces expuestas a las aplicaciones de usuario se compone fundamentalmente de UNIX y llamadas al sistema específicas de Linux . [104] Una llamada al sistema es un punto de entrada al kernel de Linux. [105] Por ejemplo, entre los específicos de Linux está la familia de llamadas al sistema clone (2) . [106] La mayoría de las extensiones deben habilitarse definiendo la macro en un archivo de encabezado o cuando se está compilando el código de la tierra del usuario. [107]_GNU_SOURCE

Las llamadas al sistema solo pueden invocarse mediante instrucciones de ensamblaje que permitan la transición del espacio de usuario sin privilegios al espacio de kernel privilegiado en el anillo 0 . Por esta razón, la biblioteca estándar de C (libC) actúa como un contenedor para la mayoría de las llamadas al sistema Linux, al exponer funciones de C que, solo si son necesarias, [108] pueden ingresar de forma transparente en el kernel que se ejecutará en nombre de la llamada. proceso. [104] Para aquellas llamadas al sistema no expuestas por libC, por ejemplo, el mutex del espacio de usuario rápido ( futex ), [109] la biblioteca proporciona una función llamada syscall (2) que puede usarse para invocarlas explícitamente. [110]

Sistemas de ficheros Pseudo (por ejemplo, los sysfs y procfs sistemas de archivos) y archivos especiales (por ejemplo, /dev/random, /dev/sda, /dev/tty, y muchos otros) constituyen otra capa de interfaz a las estructuras de datos del núcleo que representan dispositivos lógicos (software) o hardware. [111] [112]

ABI del kernel al espacio de usuario [ editar ]

Debido a las diferencias que existen entre los cientos de diversas implementaciones del sistema operativo Linux, los objetos ejecutables, a pesar de que están compilados, ensamblados y vinculados para ejecutarse en una arquitectura de hardware específica (es decir, usan el ISA del hardware de destino), a menudo no se puede ejecutar en diferentes distribuciones de Linux. Este problema se debe principalmente a configuraciones específicas de distribución y un conjunto de parches aplicados al código del kernel de Linux, diferencias en las bibliotecas del sistema, servicios (demonios), jerarquías del sistema de archivos y variables de entorno.

El principal estándar relativo a la compatibilidad binaria y de aplicaciones de las distribuciones de Linux es Linux Standard Base (LSB). [113] [114] Sin embargo, el LSB va más allá de lo que concierne al kernel de Linux, porque también define las especificaciones del escritorio, las bibliotecas X y Qt que poco tienen que ver con él. [115] La versión 5 de LSB se basa en varios estándares y borradores (POSIX, SUS, X / Open, Jerarquía del sistema de archivos (FHS) y otros). [116]

Las partes del LSB más relevantes para el núcleo son el ABI general (gABI), [117] especialmente el ABI del sistema V [118] [119] y el formato ejecutable y de enlace (ELF), [120] [121] y el ABI específico del procesador (psABI), por ejemplo, la especificación principal para X86-64. [122] [123]

El estándar ABI por cuánto x86_64 programas de usuario invocar llamadas al sistema es cargar el número de llamada al sistema en el rax registro, y los demás parámetros en RDI , RSI , RDX , R10 , R8 y R9 , y finalmente poner la llamada al sistema de instrucciones de montaje en el código. [124] [125] [126]

API en kernel [ editar ]

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

Hay varias API internas del kernel que se utilizan entre los diferentes subsistemas. Algunos están disponibles solo dentro de los subsistemas del kernel, mientras que un conjunto algo limitado de símbolos en el kernel (es decir, variables, estructuras de datos y funciones) también está expuesto a módulos cargables dinámicamente (p. Ej., Controladores de dispositivo cargados bajo demanda), ya sean exportados con el EXPORT_SYMBOL () y EXPORT_SYMBOL_GPL () macros [128] [129] (esta última reservada a los módulos liberados bajo una licencia compatible con la GPL). [130]

Linux proporciona API en el kernel que manipulan estructuras de datos (por ejemplo, listas enlazadas , árboles de base , [131] árboles rojo-negro , [132] 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. [133] [134] [135]

Las API en el kernel incluyen bibliotecas de servicios comunes de bajo nivel que utilizan los controladores de dispositivos:

  • Interfaces SCSI y libATA  - respectivamente, un protocolo de comunicación basado en paquetes peer-to-peer para dispositivos de almacenamiento conectados a USB, SATA, SAS, Fibre Channel, FireWire, dispositivo ATAPI, [136] y una biblioteca en el kernel para soportar [S] Dispositivos y controladores de host ATA. [137]
  • Direct Rendering Manager (DRM) y Kernel Mode Setting (KMS): para interactuar con GPU y satisfacer las necesidades del hardware de video acelerado 3D moderno, [138] y para configurar la resolución de pantalla, la profundidad de color y la frecuencia de actualización [139]
  • Búferes DMA ( DMA-BUF ): para compartir búferes para el acceso directo a la memoria del hardware en varios subsistemas y controladores de dispositivos [140] [141] [142]
  • Video4Linux  - para hardware de captura de video
  • Arquitectura de sonido avanzada de Linux (ALSA): para tarjetas de sonido
  • Nueva API  : para controladores de interfaz de red
  • mac80211  - para controladores de interfaz de red inalámbrica [143]

ABI en el kernel [ editar ]

Los desarrolladores de Linux optan por no mantener una ABI dentro del kernel estable. [144] Los módulos compilados para una versión específica del kernel no se pueden cargar en otra versión sin ser recompilados, asumiendo que el nivel de fuente de la API en el kernel ha permanecido igual, de lo contrario también el código del módulo debe modificarse en consecuencia. [96]

Procesos e hilos [ editar ]

Linux crea procesos por medio del clon (2) o por las nuevas llamadas al sistema clone3 (2) [145] . Dependiendo de los parámetros dados, la nueva entidad puede compartir la mayoría o ninguno de los recursos de la persona que llama. Estas llamadas al sistema pueden crear nuevas entidades que van desde nuevos procesos independientes (cada uno con un identificador especial llamado TGID dentro de la estructura de datos task_struct en el espacio del kernel, aunque ese mismo identificador se llama PID en el espacio de usuario), hasta nuevos hilos de ejecución dentro del proceso de llamada (por utilizando el parámetro CLONE_THREAD ). En este último caso, la nueva entidad posee el mismo TGID del proceso de llamada y, en consecuencia, también tiene el mismoPID en el espacio de usuario. [146] [147]

Si el ejecutable está vinculado dinámicamente a bibliotecas compartidas, se usa un vinculador dinámico (para objetos ELF, generalmente /lib/ld-linux.so.2 ) para buscar y cargar los objetos necesarios, preparar el programa para su ejecución y luego ejecutar eso. [148]

La biblioteca de subprocesos POSIX nativa , simplemente conocida como NPTL, [149] proporciona la interfaz de subprocesos POSIX estándar ( pthreads ) al espacio de usuario [150] Siempre que se crea un nuevo subproceso utilizando la interfaz POSIX pthread_create (3), [151] el clon ( 2) La familia de llamadas al sistema también debe recibir la dirección de la función a la que debe saltar el nuevo hilo. El kernel de Linux proporciona los mecanismos futex (7) (acrónimo de "Fast user-space mutexes") mecanismos para el bloqueo y sincronización rápidos del espacio de usuario; [152] la mayoría de las operaciones se realizan en el espacio de usuario pero puede ser necesario comunicarse con el kernel usando el futex (2)llamada al sistema. [109]

Una categoría muy especial de subprocesos son los llamados subprocesos del núcleo . No deben confundirse con los hilos de ejecución de los procesos del usuario antes mencionados. Los subprocesos del kernel existen solo en el espacio del kernel y su único propósito es ejecutar simultáneamente tareas del kernel. [153]

De manera diferente, siempre que se crea un proceso independiente, las llamadas al sistema regresan exactamente a la siguiente instrucción del mismo programa, simultáneamente en el proceso principal y en el proceso secundario (es decir, un programa, dos procesos). Diferentes valores de retorno (uno por proceso) permiten al programa saber en cuál de los dos procesos se está ejecutando actualmente. Los programas necesitan esta información porque el proceso hijo, unos pocos pasos después de la duplicación del proceso, generalmente invoca la llamada al sistema execve (2) (posiblemente a través de la familia de funciones contenedoras exec (3) en glibC) y reemplaza el programa que actualmente está siendo ejecutado por el proceso de llamada con un nuevo programa, con la pila, el montón y los segmentos de datos (inicializados y no inicializados) recién inicializados.[154] Cuando se hace, da como resultado dos procesos que ejecutan dos programas diferentes.

Dependiendo de la identificación de usuario efectiva ( euid ) y de la identificación de grupo efectiva ( egid ), un proceso que se ejecuta con privilegios de usuario cero ( root , el administrador del sistema, posee el identificador 0) puede realizar todo (por ejemplo, eliminar todos los demás procesos o eliminar de forma recursiva sistemas de archivos completos), en cambio, los procesos de usuario distintos de cero no pueden hacerlo. capacidades (7) divide los privilegios asociados tradicionalmente con el superusuario en distintas unidades, que pueden ser habilitadas y deshabilitadas de forma independiente por el proceso padre o descartadas por el propio hijo. [155]

Programación y preferencia [ editar ]

Linux permite diferentes clases y políticas de programación. [156] Por defecto, el kernel usa un mecanismo de programación llamado Completely Fair Scheduler (CFS) introducido en la versión 2.6.23 del kernel. [80] Internamente, esta clase de planificador predeterminado se define en una macro de un encabezado C como SCHED_NORMAL. En otros kernels POSIX, una política similar conocida comoSCHED_OTHERasigna porciones de tiempo de la CPU (es decir, asigna porciones absolutas del tiempo del procesador dependiendo de la prioridad predeterminada o calculada dinámicamente de cada proceso). Linux CFS elimina los tiempos absolutos y asigna una buena proporción de tiempo de CPU, en función de parámetros como el número total de procesos ejecutables y el tiempo que ya se han ejecutado; esta función también tiene en cuenta un tipo de ponderación que depende de sus prioridades relativas (valores agradables). [157]

El kernel también contiene dos clases de programación en tiempo real compatibles con POSIX [158] denominadas SCHED_FIFO(realtime first-in-first-out ) y SCHED_RR(realtime round-robin ), las cuales tienen prioridad sobre la clase predeterminada. [156] Una política de programación adicional conocida como SCHED DEADLINEimplementación del primer algoritmo de fecha límite más temprana (EDF), se agregó en la versión del kernel 3.14, publicada el 30 de marzo de 2014. [159] [160] SCHED_DEADLINE tiene prioridad sobre todas las demás clases de programación.

Linux proporciona tanto la preferencia del usuario como la preferencia completa del kernel . [161] La preferencia reduce la latencia , aumenta la capacidad de respuesta [162] y hace que Linux sea más adecuado para aplicaciones de escritorio y en tiempo real .

Con la preferencia del usuario, el programador del kernel puede reemplazar el proceso actual con la ejecución de un cambio de contexto a uno diferente que, por lo tanto, adquiere los recursos informáticos para la ejecución (CPU, memoria y más). Lo hace de acuerdo con el algoritmo CFS (en particular, utiliza una variable llamada vruntime para ordenar los procesos), con la política del planificador activo y con las prioridades relativas de los procesos. Con la preferencia del núcleo, el núcleo puede adelantarse a sí mismo cuando regresa un manejador de interrupciones, cuando las tareas del núcleo se bloquean y cuando un subsistema llama explícitamente a la función schedule ().

El parche del kernel de Linux PREEMPT_RTpermite la apropiación total de las secciones críticas, los manejadores de interrupciones y las secuencias de código de "desactivación de interrupciones". [163] La integración parcial de los parches de Linux en tiempo real trajo la funcionalidad mencionada anteriormente a la línea principal del kernel. [164]

Simultaneidad y sincronización [ editar ]

El kernel tiene diferentes causas de concurrencia (por ejemplo, interrupciones, mitades inferiores, preferencia de las tareas del kernel y de los usuarios, multiprocesamiento simétrico). [165] 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, tener la C calificador de tipo ), Linux proporciona un amplio conjunto de herramientas. Consisten en tipos atómicos (que solo pueden ser manipulados por un conjunto de operadores específicos), spinlocks , semáforos , mutex , [166] [167] yvolatile algoritmos sin bloqueo (por ejemplo, RCU ). [168] [169] [170] La mayoría de los algoritmos sin bloqueo se construyen sobre las barreras de la memoria con el fin de imponer el orden de la memoria y evitar efectos secundarios no deseados debido a las optimizaciones del compilador . [171] [172] [173] [174]

Gestión de interrupciones [ editar ]

La gestión de las interrupciones , aunque podría verse como un solo trabajo, se divide en dos partes diferenciadas. Esta división en dos se debe a las distintas limitaciones de tiempo y a las necesidades de sincronización de las tareas de las que se compone la gestión. La primera parte se compone de una rutina de servicio de interrupción asíncrona que en Linux se conoce como la 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 ). . [175] Las rutinas de servicio de interrupciones de Linux se pueden anidar (es decir, una nueva IRQ puede atrapar en un ISR de alta prioridad que se adelanta a cualquier otro ISR de menor prioridad).

Gestión de la memoria [ editar ]

La gestión de la memoria en Linux es un tema complejo. En primer lugar, el kernel no se puede paginar (es decir, siempre reside en la memoria física y no se puede intercambiar en el disco). En el kernel no hay protección de memoria (no hay señales SIGSEGV , a diferencia del espacio de usuario), por lo tanto, las violaciones de la memoria conducen a inestabilidad y fallas del sistema. [176]

El diagrama de la pila de almacenamiento de Linux [177]

Arquitecturas compatibles [ editar ]

TiVo DVR , un dispositivo de consumo que ejecuta Linux

Aunque no se diseñó originalmente para ser portátil , [24] [178] Linux es ahora uno de los núcleos de sistemas operativos más adaptados y se ejecuta en una amplia gama de sistemas, desde la arquitectura ARM hasta las computadoras mainframe IBM z / Architecture . El primer puerto se realizó en la plataforma Motorola 68000 . Las modificaciones al kernel fueron tan fundamentales que Torvalds vio la versión de Motorola como una bifurcación y un "sistema operativo similar a Linux". [178]Sin embargo, eso llevó a Torvalds a liderar una importante reestructuración del código para facilitar la migración 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. [179] [180] [178]

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

Linux también se ha adaptado a varios dispositivos portátiles como el iPhone 3G y el iPod de Apple . [182]

Dispositivos compatibles [ editar ]

En 2007, se inició el proyecto LKDDb para construir una base de datos completa de hardware y protocolos conocidos por los kernels de Linux. [183] La base de datos se crea automáticamente mediante un análisis estático de las fuentes del núcleo. Más tarde, en 2014, se lanzó el proyecto de hardware de Linux 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. [184]

Parcheo en vivo [ editar ]

Las actualizaciones sin reinicio incluso se pueden aplicar al kernel mediante el uso de tecnologías de parcheo en vivo como Ksplice , kpatch y kGraft . Los fundamentos minimalistas para el parcheo del kernel en vivo se fusionaron en la línea principal del kernel de Linux en la versión 4.0 del kernel, que se lanzó el 12 de abril de 2015. Esos fundamentos, conocidos como livepatch y basados ​​principalmente en la funcionalidad ftrace del kernel , forman un núcleo común capaz de admitir parches en caliente. tanto por kGraft como por kpatch, al proporcionar una interfaz de programación de aplicaciones (API) para los módulos del kernel que contienen parches activos y una interfaz binaria de la aplicación(ABI) para las utilidades de gestión del espacio de usuario. Sin embargo, el núcleo común incluido en el kernel 4.0 de Linux solo admite la arquitectura x86 y no proporciona ningún mecanismo para garantizar la coherencia del nivel de función mientras se aplican los parches activos. En abril de 2015 , se está trabajando en la migración de kpatch y kGraft al núcleo común de parcheo en vivo proporcionado por la línea principal del kernel de Linux. [185] [186] [187]

Seguridad [ editar ]

Los errores del kernel presentan posibles problemas de seguridad. Por ejemplo, pueden permitir la escalada de privilegios o crear vectores de ataque de denegación de servicio . A lo largo de los años, se encontraron y solucionaron numerosos errores que afectaban la seguridad del sistema. [188] Con frecuencia se implementan nuevas características para mejorar la seguridad del kernel. [189] [190]

Las capacidades (7) ya se han introducido en la sección sobre los procesos y subprocesos. Android los usa y systemd brinda a los administradores un control detallado sobre las capacidades de los procesos. [191]

Linux ofrece una gran cantidad de mecanismos para reducir la superficie de ataque del kernel y mejorar la seguridad, que se conocen colectivamente como módulos de seguridad de Linux (LSM). [192] Comprenden el módulo Security-Enhanced Linux (SELinux), cuyo código ha sido desarrollado originalmente y luego lanzado al público por la NSA , [193] y AppArmor [93] entre otros. SELinux ahora se desarrolla y mantiene activamente en GitHub . [92] SELinux y AppArmor brindan soporte a las 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 with Berkeley Packet Filters) que funciona filtrando los parámetros y reduciendo el conjunto de llamadas al sistema disponibles para las aplicaciones de la tierra del usuario. [194]

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

Personalmente, considero que los errores de seguridad son simplemente "errores normales". No los encubro, pero tampoco tengo ninguna razón para pensar que es una buena idea rastrearlos y anunciarlos como algo especial ... una razón por la que me niego a molestarme con toda la seguridad. circo es que creo que glorifica, y por lo tanto fomenta, el comportamiento incorrecto. Hace "héroes" a las personas de seguridad, como si las personas que no solo corrigen los errores normales no fueran tan importantes. De hecho, todos los aburridos errores normales son mucho más importantes, solo porque hay [sic] muchos más. No creo que un agujero de seguridad espectacular deba ser glorificado o preocupado por ser más "especial" que un accidente espectacular aleatorio debido a un bloqueo incorrecto.

Las distribuciones de Linux normalmente lanzan actualizaciones de seguridad para corregir vulnerabilidades en el kernel de Linux. Muchos ofrecen versiones de soporte a largo plazo que reciben actualizaciones de seguridad para una determinada versión del kernel de Linux durante un período prolongado.

Desarrollo [ editar ]

Comunidad de desarrolladores [ editar ]

La comunidad de desarrolladores del kernel de Linux comprende entre 5000 y 6000 miembros. Según el "Estado del desarrollo del kernel de Linux 2017", un estudio publicado por la Fundación Linux, que cubre los compromisos para las versiones 4.8 a 4.13, alrededor de 1500 desarrolladores contribuyeron de aproximadamente 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 lo ocupan los 'ninguno' (8,2%) y categorías 'desconocidas' (4,1%). [197]

En lugar de una hoja de ruta, existen pautas técnicas. En lugar de una asignación central de recursos, hay personas y empresas que tienen un interés en el desarrollo posterior del kernel de Linux, de forma bastante independiente entre sí: personas como Linus Torvalds y yo no planificamos la evolución del kernel. No nos sentamos a pensar en la hoja de ruta para los próximos dos años y luego asignamos recursos a las diversas funciones nuevas. Eso es porque no tenemos recursos. Todos los recursos son propiedad de las diversas corporaciones que usan y contribuyen a Linux, así como de los diversos contribuyentes independientes que existen. Son las personas que poseen los recursos las que deciden ...

-  Andrew Morton , 2005

Gestión de código fuente [ editar ]

La comunidad de desarrollo de Linux usa Git para administrar el código fuente . Los usuarios de Git clonan la última versión del árbol de Torvalds con git-clone (1) [198] y la mantienen actualizada usando git-pull (1) . [199] [200]Las contribuciones se envían como parches, en forma de mensajes de texto en el LKML (y a menudo también en otras listas de correo dedicadas a subsistemas particulares). Los parches deben ajustarse a un conjunto de reglas y a un lenguaje formal que, entre otras cosas, describa qué líneas de código se eliminarán y qué otras se agregarán a los archivos especificados. Estos parches se pueden procesar automáticamente para que los administradores del sistema puedan aplicarlos para realizar solo algunos cambios en el código o para actualizar gradualmente a la siguiente versión. [201] Linux se distribuye también en formatos GNU zip (gzip) y bzip2 .

Envío de código al kernel [ editar ]

Un desarrollador que quiere cambiar el kernel de Linux comienza desarrollando y probando ese cambio. Dependiendo de la importancia del cambio y de cuántos subsistemas modifique, el cambio se enviará como un único parche o en varios 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 apropiada en Cc. El mantenedor y los lectores de la lista de correo revisarán los parches y proporcionarán comentarios. Una vez finalizado el proceso de revisión, el responsable del mantenimiento del subsistema acepta los parches en el Git correspondiente.árbol del núcleo. Si los cambios en el kernel de Linux son correcciones de errores que se consideran lo suficientemente importantes, se enviará una solicitud de extracción de los parches a Torvalds dentro de unos días. De lo contrario, se enviará una solicitud de extracción a Torvalds durante la próxima ventana de combinación. La ventana de fusión suele durar dos semanas y comienza inmediatamente después del lanzamiento de la versión anterior del kernel. [202] El árbol de fuentes del kernel de Git nombra a todos los desarrolladores que han contribuido al kernel de Linux en el directorio Credits y todos los mantenedores del subsistema se enumeran en Maintainers . [203]

Lenguaje de programación y estilo de codificación [ editar ]

Linux está escrito en un lenguaje de programación C especial compatible con GCC , un compilador que extiende de muchas formas el estándar C, por ejemplo, usando secciones en línea de código escrito en el lenguaje ensamblador (en la sintaxis "estilo AT & T" de GCC) de la arquitectura de destino. . Desde 2002, todo el código debe adherirse a las 21 reglas que componen el estilo de codificación del kernel de Linux. [204] [205]

Cadena de herramientas GNU [ editar ]

La colección de compiladores GNU (GCC o GNU cc) es el compilador predeterminado para las fuentes principales de Linux y se invoca mediante una utilidad llamada make . Luego, el GNU Assembler (más a menudo llamado GAS o GNU as) genera los archivos objeto del código ensamblador generado por GCC . Finalmente, el GNU Linker (GNU ld) se utiliza para producir un archivo de kernel ejecutable vinculado estáticamente llamado vmlinux . Tanto as como ld son parte de GNU Binary Utilities (binutils). Las herramientas mencionadas anteriormente se conocen colectivamente como la cadena de herramientas GNU .

Compatibilidad del compilador [ editar ]

GCC fue durante mucho tiempo el único compilador capaz de construir Linux correctamente. En 2004, Intel afirmó haber modificado el kernel para que su compilador C también fuera capaz de compilarlo. [206] Hubo otro éxito de este tipo en 2009, con una versión 2.6.22 modificada. [207] [208]

Desde 2010, se ha realizado un esfuerzo para construir Linux con Clang , un compilador alternativo para el lenguaje C; [209] A partir del 12 de abril de 2014, Clang casi podría compilar el núcleo oficial. [210] [211] El proyecto dedicado a este esfuerzo se llama LLVMLinux en honor a la infraestructura del compilador LLVM sobre la que se construye Clang. [212] LLVMLinux no tiene como objetivo bifurcar Linux o LLVM, por lo tanto, es un metaproyecto compuesto de parches que eventualmente se envían a los proyectos anteriores. Al permitir que Linux sea compilado por Clang, los desarrolladores pueden beneficiarse de tiempos de compilación más cortos. [213]

En 2017, los desarrolladores completado actividades previas parches para apoyar la construcción del núcleo de Linux con Clang en la versión 4.15, habiendo portado soporte para x86-64 y AArch64 a las 4.4, 4.9, 4.14 y ramas del árbol del núcleo estable. El Pixel 2 de Google se envió con el primer kernel de Linux construido por Clang , [214] aunque existían parches para Pixel (1ª generación) . [215] En 2018, ChromeOS pasó a compilar kernels con Clang de forma predeterminada, [216] mientras que Android (sistema operativo) hizoClang [217] y el enlazador LLD [218] de LLVM requerido para las compilaciones del kernel en 2019. Google movió su kernel de producción utilizado en todos sus centros de datos para que se construyera con Clang en 2020. [219] Hoy, el grupo ClangBuiltLinux coordina arreglos para Linux y LLVM para garantizar la compatibilidad, ambos compuestos por miembros de LLVMLinux y con parches de LLVMLinux .

Depuración del kernel [ editar ]

Un ejemplo de pánico en el kernel de Linux

Los errores relacionados con el kernel de Linux pueden ser difíciles de solucionar, esto se debe a la interacción del kernel con el espacio de usuario y el hardware; y también porque pueden deberse a una gama más amplia de razones en comparación con las de los programas de usuario. Algunos ejemplos de las causas subyacentes son los errores semánticos en el código, el mal uso de primitivas de sincronización y la gestión incorrecta del hardware. [220]

Un informe de un error no fatal en el kernel se llama " oops "; tales desviaciones del comportamiento correcto del kernel de Linux pueden permitir un funcionamiento continuo con una confiabilidad comprometida. [221]

Un error crítico y fatal se informa a través de la función panic () . Imprime un mensaje y luego detiene el kernel. [222]

Una de las técnicas más comunes que se utilizan para descubrir errores en el código es la depuración mediante la impresión . Para este propósito, Linux proporciona una API en el kernel llamada printk () que almacena mensajes en un búfer circular. La llamada al sistema syslog (2) se utiliza para leer y / o borrar el búfer de anillo de mensajes del kernel y para establecer el nivel de registro máximo de los mensajes que se enviarán a la consola (es decir, uno de los ocho parámetros KERN_ * de printk () , que indican la gravedad de la afección informada); normalmente se invoca a través de la envoltura glibC klogctl (3) . [223] Los mensajes del kernel también se exportan al área de usuario a través de / dev / kmsginterfaz [224] (por ejemplo, systemd-journald [225] [226] lee esa interfaz y por defecto agrega los mensajes a / var / log / journal ).

Otra técnica fundamental para depurar un kernel en ejecución es el rastreo. El mecanismo ftrace es un rastreador interno de Linux; se usa para monitorear y depurar Linux en tiempo de ejecución y también puede analizar las latencias del espacio de usuario debido al mal comportamiento del kernel. [227] [228] [229] Además, ftrace permite a los usuarios rastrear Linux en el momento del arranque. [230]

kprobes y kretprobes pueden romper (como depuradores en el espacio de usuario) en Linux y recopilar información de forma no disruptiva. [231] kprobes se pueden insertar en el código en (casi) cualquier dirección, mientras que kretprobes trabaja 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. [232]

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

Modelo de desarrollo [ editar ]

El proyecto del kernel de Linux integra nuevo código de forma continua. El software incorporado al proyecto debe funcionar y compilarse sin errores. Para cada subsistema del kernel hay un responsable de mantenimiento que es responsable de revisar los parches según los estándares del código del kernel y mantiene una cola de parches que se pueden enviar a Linus Torvalds dentro de una ventana de fusión de varias semanas. Torvalds fusiona los parches en el código fuente de la versión estable anterior del kernel de Linux, creando el candidato de versión -rc para el próximo kernel estable. Una vez que se cierra la ventana de combinación, solo se aceptan las correcciones del nuevo código en la versión de desarrollo. La versión de desarrollo -rc del kernel pasa por pruebas de regresióny una vez que Torvalds y los encargados del mantenimiento del subsistema del kernel consideran que es estable, se lanza un nuevo kernel de Linux y el proceso de desarrollo comienza de nuevo. [234]

Los desarrolladores que se sientan tratados injustamente pueden informar de esto al Consejo Asesor Técnico de la Fundación Linux . [235] En julio de 2013, el responsable del mantenimiento del controlador USB 3.0 Sarah 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 de conseguir su trabajo hecho ". [236]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 del kernel de gráficos Intel drm / i915, comentó que el "lenguaje y la discusión bastante violentos" en la comunidad del kernel ha disminuido o desaparecido. [237]

Laurent Pinchart pidió a los desarrolladores sus comentarios sobre su experiencia con la comunidad del kernel en la Conferencia de Europa de 2017 Embedded Linux. Las cuestiones planteadas se debatieron unos días después en la Cumbre de mantenedores. Shuah Khan , el responsable del mantenimiento del marco de autoprueba del kernel, se hizo eco de las preocupaciones sobre la falta de coherencia en la forma en que los mantenedores respondieron a los parches enviados por los desarrolladores . Torvalds sostuvo que nunca habría consistencia en el manejo de parches porque diferentes subsistemas del kernel, con el tiempo, han adoptado diferentes procesos de desarrollo. Por lo tanto, se acordó que cada responsable de mantenimiento del subsistema del kernel documentaría las reglas para la aceptación de parches. [238]

Bifurcaciones de Linux [ editar ]

Un iPod arrancando iPodLinux

Existen determinadas comunidades que desarrollan núcleos basados ​​en el Linux oficial. Algunos fragmentos interesantes de código de estas bifurcaciones (es decir, un término de jerga que significa "proyectos derivados") que incluyen Linux-libre , Compute Node Linux , INK , L4Linux , RTLinux y User-Mode Linux (UML) se han fusionado en la línea principal . [239] Algunos sistemas operativos desarrollados para teléfonos móviles utilizaban inicialmente versiones muy modificadas de Linux, como Google Android , Firefox OS , HP webOS , Nokia Maemo y Jolla Sailfish OS.. En 2010, la comunidad de Linux criticó a Google por iniciar efectivamente su propio árbol del kernel: [240] [241]

Esto significa que los controladores escritos para plataformas de hardware de Android no pueden fusionarse en el árbol principal del kernel porque tienen dependencias en el código que solo vive en el árbol del kernel de Google, lo que hace que no se compile en el árbol kernel.org. Debido a esto, Google ahora ha evitado que una gran parte de los controladores de hardware y el código de la plataforma se fusionen en el árbol principal del kernel. Creando efectivamente una rama del kernel en la que ahora confían varios proveedores diferentes. [242]

-  Greg Kroah-Hartman , 2010

Hoy en día, Android usa un Linux ligeramente personalizado [243] en el que se implementan cambios en los controladores de dispositivos de modo que se requiere poco o ningún cambio en el código del núcleo del núcleo. Los desarrolladores de Android también envían parches al Linux oficial que finalmente puede arrancar el sistema operativo Android. Por ejemplo, un Nexus 7 puede arrancar y ejecutar la línea principal de Linux. [243]

En una presentación de 2001 en el Museo de Historia de la Computación , Linus Torvalds dijo esto en respuesta a una pregunta sobre las distribuciones de Linux utilizando exactamente las mismas fuentes del kernel o no:

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

-  Linus Torvalds , 2001

Conflictos de la comunidad de desarrollo [ editar ]

Ha habido varios conflictos notables entre los desarrolladores del kernel de Linux. Ejemplos de tales conflictos son:

  • En julio de 2007, Con Kolivas anunció que dejaría de desarrollar para el kernel de Linux. [245] [246]
  • En julio de 2009, Alan Cox renunció a su función de mantenedor de la capa TTY después de un desacuerdo con Linus Torvalds . [247]
  • En diciembre de 2010, hubo una discusión entre el mantenedor de SCSI de Linux, James Bottomley, y el mantenedor de SCST, Vladislav Bolkhovitin, sobre qué pila de destino SCSI debería incluirse en el kernel de Linux. [248] Esto molestó a algunos usuarios de Linux. [249]
  • En junio de 2012, Torvalds dejó muy claro que no estaba de acuerdo con que NVIDIA lanzara sus controladores como cerrados. [250]
  • En abril de 2014, Torvalds prohibió a Kay Sievers enviar parches al kernel de Linux por no tratar los errores que causaban que systemd interactuara negativamente con el kernel. [251]
  • En octubre de 2014, Lennart Poettering acusó a Torvalds de tolerar el estilo de discusión tosca en las listas de correo relacionadas con el kernel de Linux y de ser un mal modelo a seguir. [252]
  • En marzo de 2015, Christoph Hellwig presentó una demanda contra VMware por infracción de los derechos de autor del kernel de Linux. [253] Linus Torvalds dejó en claro que no estaba de acuerdo con esta y otras iniciativas similares al calificar a los abogados de una enfermedad enconada. [254]

Los desarrolladores prominentes del kernel de Linux han sido conscientes de la importancia de evitar conflictos entre desarrolladores. [255] Durante mucho tiempo no hubo un código de conducta para los desarrolladores de kernel debido a la oposición de Linus Torvalds . [256] Sin embargo, el 8 de marzo de 2015 se introdujo un Código de Conflicto del Kernel de Linux . [257] Fue reemplazado el 16 de septiembre de 2018 por un nuevo Código de Conducta basado en el Pacto de Colaboradores . Esto coincidió con una disculpa pública de Torvalds y un breve descanso del desarrollo del kernel. [258] [259] El 30 de noviembre de 2018, cumpliendo con el Código de Conducta, Jarkko Sakkinen de Intel envió parches reemplazando los casos de "mierda" que aparecen en los comentarios del código fuente con versiones adecuadas centradas en la palabra "abrazo". [260]

Base de código [ editar ]

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

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

-  Linus Torvalds , 2005 [261] [262] [263]

Costo estimado para volver a desarrollar [ editar ]

Costos de redesarrollo del kernel de Linux

El costo de volver a desarrollar la versión 2.6.0 del kernel de Linux en un entorno de desarrollo propietario tradicional se ha estimado en US $ 612 millones (€ 467M, £ 394M) a precios de 2004 utilizando el modelo de estimación de mes-persona de COCOMO . [264] En 2006, un estudio financiado por la Unión Europea elevó el costo de remodelación de la versión 2.6.8 del kernel, 882 millones de euros (1,14 mil millones de dólares, 744 millones de libras esterlinas). [265]

Este tema fue revisado en octubre de 2008 por Amanda McPherson, Brian Proffitt y Ron Hale-Evans. Usando la metodología de David A. Wheeler, estimaron que la remodelación del kernel 2.6.25 ahora cuesta $ 1.3 mil millones (parte de un total de $ 10.8 mil millones para remodelar Fedora 9). [266] Una vez más, García-García y Alonso de Magdaleno de la Universidad de Oviedo (España) estiman que el valor añadido anualmente al kernel fue de unos 100 millones de euros entre 2005 y 2007 y de 225 millones de euros en 2008, también costaría más de mil millones de euros ( alrededor de $ 1.4 mil millones en febrero de 2010) para desarrollar en la Unión Europea. [267]

A 7 de marzo de 2011 , utilizando LOC (líneas de código) vigentes en ese momento de un kernel Linux 2.6.xy números de salario con los cálculos de David A. Wheeler, costaría aproximadamente $ 3 mil millones (alrededor de € 2,2 mil millones) para volver a desarrollar el kernel Linux como sigue creciendo. Un cálculo actualizado al 26 de septiembre de 2018 , utilizando 20.088.609 LOC (líneas de código) vigentes en ese momento para el kernel de Linux 4.14.14 y el salario medio actual del programador nacional de EE. UU. De $ 75,506 muestra que costaría aproximadamente $ 14,725,449,000 dólares (£ 11,191,341,000) para reescribir el código existente. [268]

Mantenimiento y soporte a largo plazo [ editar ]

Mensajes de arranque de un kernel de Linux 2.6.25.17

La última versión del kernel y las versiones anteriores del kernel se mantienen por separado. La mayoría de las últimas versiones del kernel fueron supervisadas por Linus Torvalds. [269] Las versiones actuales son publicadas por Greg Kroah-Hartman . [270]

La comunidad de desarrolladores del kernel de Linux mantiene un kernel estable mediante la aplicación de correcciones para los errores de software que se han descubierto durante el desarrollo del kernel estable posterior. Por lo tanto, www.kernel.org siempre enumerará dos núcleos estables. El próximo kernel estable de Linux ahora se lanza solo de 8 a 12 semanas después. Por lo tanto, los mantenedores del kernel de Linux han designado algunas versiones de kernel estables como a largo plazo , estos kernels de Linux de soporte a largo plazo se actualizan con correcciones de errores durante dos o más años. [271] En noviembre de 2019 había cinco kernels de Linux a largo plazo: 4.19.84, 4.14.154, 4.9.201, 4.4.201 y 3.16.76. [272] La lista completa de lanzamientos se encuentra en el historial de versiones del kernel de Linux .

Relación con las distribuciones de Linux [ editar ]

La mayoría de los usuarios de Linux ejecutan un kernel proporcionado por su distribución de Linux . Algunas distribuciones envían los núcleos "vainilla" o "estables". Sin embargo, varios proveedores de distribución de Linux (como Red Hat y Debian ) mantienen otro conjunto de ramas del kernel de Linux que están integradas en sus productos. Por lo general, se actualizan a un ritmo más lento en comparación con la rama "básica" y, por lo general, incluyen todas las correcciones de la rama "estable" relevante, pero al mismo tiempo también pueden agregar soporte para controladores o funciones que no se han lanzado en la versión "vainilla" desde la que el proveedor de distribución comenzó a basar su sucursal.

Aspectos legales [ editar ]

Términos de la licencia GPLv2 [ editar ]

Inicialmente, Torvalds lanzó Linux bajo una licencia que prohibía cualquier uso comercial. [273] Esto se cambió en la versión 0.12 mediante un cambio a la licencia pública general GNU versión 2 (GPLv2). [28] Esta licencia permite la distribución y venta de versiones posiblemente modificadas y no modificadas de Linux, pero requiere que todas esas copias se publiquen bajo la misma licencia y vayan acompañadas del código fuente completo correspondiente. [274] Torvalds ha descrito la concesión de licencias de Linux bajo la GPLv2 como "lo mejor que he hecho". [273]

El kernel de Linux se licencia explícitamente solo bajo la versión 2 de la GPL, [23] sin ofrecer al licenciatario la opción de elegir "cualquier versión posterior", que es una extensión común de la GPL. La rama oficial de git de Torvalds contiene documentación que explica el proceso de desarrollo del kernel a las personas que desean trabajar con la comunidad y contribuir con el código; establece claramente que "[Cualquier] contribución que no esté cubierta por una licencia compatible [GPLv2] no será aceptada en el kernel". [103]

Hubo un debate considerable sobre la facilidad con la que 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. [275] El mismo 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. [276] Sin embargo, los términos de la GPL establecen que si no se especifica ninguna versión, entonces se puede usar cualquier versión. , [277] y Alan Cox señalaron que muy pocos otros contribuyentes de Linux habían especificado una versión particular de la GPL. [278]

En septiembre de 2006, una encuesta de 29 programadores clave del núcleo indicó que 28 preferían la GPLv2 al borrador de la GPLv3 en ese momento. Torvalds comentó: "Creo que varios forasteros ... creían que yo personalmente era el extraño porque no he sido tan públicamente un gran admirador de la GPLv3". [279] Este grupo de desarrolladores de kernel de alto perfil, incluidos Torvalds, Greg Kroah-Hartman y Andrew Morton , comentaron en los medios de comunicación sobre sus objeciones a la GPLv3. [280] Se refirieron a cláusulas sobre DRM / tivoización , patentes, "restricciones adicionales" y advirtieron sobre una balcanización del "Universo de código abierto" por parte de la GPLv3. [280] [281]Linus Torvalds, quien decidió no adoptar la GPLv3 para el kernel de Linux, reiteró sus críticas incluso años después. [282]

Módulos del kernel cargables [ editar ]

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 están sujetos o no a los términos de la GPL.

De acuerdo con las reglas de la licencia, los LKM que usan solo un subconjunto público de las interfaces del kernel [128] [129] 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 kernel. . [5]

Hay algunos módulos cargables fuera del árbol que hacen un uso legítimo de la función del kernel dma_buf . [283] El código compatible con GPL ciertamente puede usarlo. Sin embargo, un caso de uso posible diferente sería Nvidia Optimus que empareja una GPU rápida con una GPU integrada de Intel, donde la GPU de Nvidia escribe en el framebuffer de Intel cuando está activo. Pero Nvidia no puede usar esta infraestructura porque necesita eludir una regla que solo pueden usar los LKM que también son GPL. [130] Alan Cox respondió en LKML , rechazando una solicitud de uno de sus ingenieros para eliminar esta aplicación técnica de la API. [284]Torvalds declaró claramente en el LKML que "[Yo] afirmo que los módulos del núcleo sólo binarios SON derivados" por defecto "" ". [285]

Por otro lado, Torvalds también ha dicho que "[una] área gris en particular es algo así como un controlador que fue escrito originalmente para otro sistema operativo (es decir, claramente no es un trabajo derivado de Linux en origen). ESO es un área gris , y _ esa_ es el área donde personalmente creo que algunos módulos pueden considerarse como trabajos derivados simplemente porque no fueron diseñados para Linux y no dependen de ningún comportamiento especial de Linux ". [286] Los controladores de gráficos patentados , en particular, son objeto de un intenso debate.

Blobs binarios de firmware [ editar ]

El kernel oficial, que es la rama git de Linus en el repositorio kernel.org, no contiene ningún tipo de código propietario; [23] [5] sin embargo Linux puede buscar en los sistemas de archivos para localizar firmware propietario, controladores y otros módulos ejecutables (conocidos colectivamente como " blobs binarios "), luego puede cargarlos y vincularlos al espacio del kernel. [287] Siempre que se cargan módulos propietarios en Linux, el núcleo se marca a sí mismo como "contaminado", [288] y, por lo tanto, los desarrolladores suelen ignorar los informes de errores de los núcleos contaminados.

Cuando sea necesario (por ejemplo, para acceder a los dispositivos de arranque o para la velocidad), el firmware se puede incorporar al kernel, esto significa construir el firmware en vmlinux ; sin embargo, esta no siempre es una opción viable por cuestiones técnicas o legales (por ejemplo, no se permite el firmware que no es compatible con GPL). [289]

Marca comercial [ editar ]

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

Ver también [ editar ]

  • Sistema operativo
  • Núcleo
  • Núcleo monolítico
  • Microkernel
  • Historial de versiones del kernel de Linux
  • Comparación de sistemas operativos
  • Comparación de los núcleos del sistema operativo
  • Linux
  • Minix 3
  • Mac OS
  • Microsoft Windows

Referencias [ editar ]

  1. ^ "Mascotas y logotipos de Linux" . Linux en línea. 2008. Archivado desde el original el 15 de agosto de 2010 . Consultado el 11 de agosto de 2009 .
  2. ^ "El proyecto de código abierto del kernel de Linux en Open Hub: página de idiomas" . Archivado desde el original el 15 de noviembre de 2018 . Consultado el 28 de marzo de 2019 .
  3. ^ Kroah-Hartman, Greg (16 de abril de 2021). "Linux 5.11.15" . LKML (lista de correo) . Consultado el 17 de abril de 2021 .
  4. ^ Torvalds, Linus (18 de abril de 2021). "Linux 5.12-rc8" . LKML (lista de correo) . Consultado el 18 de abril de 2021 .
  5. ^ a b c d e "Reglas de licencia del kernel de Linux: la 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 .
  6. ^ Tanenbaum, Andrew; Bos, Herbert (2015). Sistemas operativos modernos . Estados Unidos de América: Pearson. pag. 722. ISBN 9781292061429. OCLC  892574803 .
  7. ^ Amor, Robert (2010). Desarrollo del kernel de Linux . Addison-Wesley. pag. 4. ISBN 978-0-672-32946-3. OCLC  268788260 .
  8. ^ Amor, Robert (2010). Desarrollo del kernel de Linux . Addison-Wesley. pag. 338. ISBN 978-0-672-32946-3. OCLC  268788260 .
  9. ^ "LÉAME" . git.kernel.org. Archivado desde el original el 24 de julio de 2012 . Consultado el 24 de marzo de 2021 .
  10. ^ Richardson, Marjorie (1 de noviembre de 1999). "Entrevista: Linus Torvalds" . Revista de Linux. Archivado desde el original el 14 de mayo de 2011 . Consultado el 20 de agosto de 2009 .
  11. ^ Williams, Sam (marzo de 2002). "Capítulo 9: La Licencia Pública General GNU" . Gratis como en Freedom: La cruzada de Richard Stallman por el software libre . O'Reilly . ISBN 0-596-00287-4. Consultado el 12 de noviembre de 2010 .
  12. ^ Software de Unix System Laboratories v. Berkeley , 832 F. Supp. 790 ( DNJ 1993).
  13. ^ a b "Sitios de supercomputadoras TOP500: sistema operativo Familia / Linux" . Top500.org. Archivado desde el original el 19 de noviembre de 2012 . Consultado el 5 de octubre de 2019 .
  14. ^ a b c "Sistema de compilación del kernel: la documentación del kernel de Linux" . www.kernel.org . Archivado desde el original el 22 de julio de 2020 . Consultado el 17 de julio de 2020 .
  15. ^ a b c "Kconfig make config - La documentación del kernel de Linux" . www.kernel.org . Archivado desde el original el 17 de julio de 2020 . Consultado el 13 de septiembre de 2020 .
  16. ^ a b "KernelBuild - Principiantes del kernel de Linux" . kernelnewbies.org . Archivado desde el original el 19 de octubre de 2020 . Consultado el 13 de septiembre de 2020 .
  17. ^ a b "La interfaz Sysctl" . www.linux.it . Archivado desde el original el 17 de febrero de 2020 . Consultado el 13 de septiembre de 2020 .
  18. ^ a b "sysctl (8) - página de manual de Linux" . man7.org . Archivado desde el original el 30 de septiembre de 2020 . Consultado el 13 de septiembre de 2020 .
  19. ^ a b "procfs (5) - Página de manual de Linux" . man7.org . Archivado desde el original el 24 de septiembre de 2020 . Consultado el 13 de septiembre de 2020 .
  20. ^ Amor, Robert (2010). Desarrollo del kernel de Linux . Addison Wesley. pag. 18. ISBN 978-0-672-32946-3. OCLC  268788260 .
  21. ^ "Extensiones de C (usando la colección del compilador GNU (GCC))" . gcc.gnu.org . Archivado desde el original el 20 de noviembre de 2020 . Consultado el 13 de noviembre de 2020 .
  22. ^ Amor, Robert (2010). Desarrollo del kernel de Linux . Estados Unidos: Addison Wesley. págs. 379–380. ISBN 9780672329463.
  23. ^ a b c d "Código fuente de Linux: COPIA (v5.4.8) - Bootlin" . elixir.bootlin.com . Archivado desde el original el 1 de junio de 2020 . Consultado el 6 de enero de 2020 .
  24. ↑ a b Torvalds, Linus Benedict (26 de agosto de 1991). "¿Qué es lo que más le gustaría ver en minix?" . Grupo de noticiascomp.os.minix . Usenet: [email protected] . Archivado desde el original el 9 de mayo de 2013 . Consultado el 14 de septiembre de 2016 . 
  25. ^ a b Galés, Matt; Dalheimer, Matthias Kalle; Kaufman, Lar (1999). "1". Ejecutando Linux (3.a ed.). Sebastopol, CA: O'Reilly Media, Inc. ISBN 1-56592-976-4. OCLC  50638246 .
  26. ^ a b "Fuentes de kernel similares a minix gratuitas 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 .
  27. ↑ a b c Christine Bresnahan y Richard Blum (2016). LPIC-2: Guía de estudio de certificación de Linux Professional Institute: Examen 201 y Examen 202 . John Wiley e hijos. pag. 107. ISBN 9781119150794.
  28. ^ a b Torvalds, Linus . "Notas de la versión para Linux v0.12" . Los archivos del kernel de Linux. Archivado desde el original el 19 de agosto de 2007 . Consultado el 21 de febrero de 2007 .
  29. ^ Fred Hantelmann (2016). Guía de inicio de LINUX: una introducción independiente . Springer Science & Business Media. pag. 1. ISBN 9783642607493.
  30. ↑ a b c Fred Hantelmann (2016). Guía de inicio de LINUX: una introducción independiente . Springer Science & Business Media. pag. 16. ISBN 9783642607493.
  31. ^ Summers, David W. (19 de enero de 1992). "Problemas con las particiones" . Grupo de noticiasalt.os.linux . Usenet: [email protected] . Archivado desde el original el 2 de junio de 2013 . Consultado el 7 de enero de 2007 . 
  32. ^ Clegg, Alan B. (31 de marzo de 1992). "¡Esta aquí!" . Grupo de noticiascomp.os.linux . Usenet: [email protected] . Archivado desde el original el 2 de junio de 2013 . Consultado el 7 de enero de 2007 . 
  33. ^ "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 .
  34. ^ Tanenbaum, Andy (29 de enero de 1992). "LINUX está obsoleto" . Grupo de noticiascomp.os.minix . Usenet: [email protected] . Archivado desde el original el 17 de octubre de 2011 . Consultado el 10 de mayo de 2006 . 
  35. ^ Tanenbaum, Andy (12 de mayo de 2006). "Debate Tanenbaum-Torvalds: Parte II" . Universidad VU de Amsterdam . Archivado desde el original el 5 de agosto de 2015 . Consultado el 6 de enero de 2007 .
  36. ^ Noviembre de 2012, David Hayward22. "La historia de Linux: cómo el tiempo ha dado forma al pingüino" . TechRadar . Archivado desde el original el 19 de marzo de 2020 . Consultado el 19 de marzo de 2020 .
  37. ^ Noviembre de 2012, David Hayward22. "La historia de Linux: cómo el tiempo ha dado forma al pingüino" . TechRadar . Archivado desde el original el 19 de marzo de 2020 . Consultado el 26 de marzo de 2020 .
  38. ^ Amor, Robert (Robert M.) (2010). Desarrollo del kernel de Linux (3ª ed.). Upper Saddle River, Nueva Jersey: Addison-Wesley. pag. 9. ISBN 978-0-672-32946-3. OCLC  268788260 .
  39. ^ a b "Cómo funciona el proceso de desarrollo: la documentación del kernel de Linux" . www.kernel.org . Archivado desde el original el 9 de diciembre de 2017 . Consultado el 26 de marzo de 2020 .
  40. ↑ a b c Christine Bresnahan y Richard Blum (2016). LPIC-2: Guía de estudio de certificación de Linux Professional Institute: Examen 201 y Examen 202 . John Wiley e hijos. pag. 108. ISBN 9781119150794.
  41. ^ Torvalds, Linus (9 de junio de 1996). "Linux 2.0 realmente _ está_ lanzado". LKML (lista de correo). Archivado desde el original el 2 de abril de 2015 . Consultado el 8 de marzo de 2015 .
  42. ^ 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 .
  43. ^ a b "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 .
  44. ^ "Observaciones y notas de Linux / 390" . linuxvm.org . Archivado desde el original el 26 de febrero de 2019 . Consultado el 29 de marzo de 2020 .
  45. ^ Torvalds, Linus (4 de enero de 2001). "Y oh, por cierto." LKML (lista de correo). Archivado desde el original el 26 de enero de 2016 . Consultado el 8 de marzo de 2015 .
  46. ^ "El maravilloso mundo de Linux 2.4" . Archivado desde el original el 17 de marzo de 2005 . Consultado el 27 de octubre de 2008 .
  47. ^ 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 .
  48. ^ "proc (5) - Página de manual de Linux" (consulte / proc / sys / kernel / pid_max). Archivado desde el original el 7 de febrero de 2014 . Consultado el 19 de febrero de 2014 .
  49. ^ "Wiki de btrfs" . btrfs.wiki.kernel.org . Archivado desde el original el 25 de abril de 2012 . Consultado el 17 de julio de 2020 .
  50. ^ Fred Hantelmann (2016). Guía de inicio de LINUX: una introducción independiente . Springer Science & Business Media. págs. 1-2. ISBN 9783642607493.
  51. ^ Kroah-Hartman, Greg (3 de agosto de 2006). "Adrian Bunk ahora 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 .
  52. ^ Rothwell, Stephen (12 de febrero de 2008). "Anunciar: 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 .
  53. ^ Corbet, Jonathan (21 de octubre de 2010). "proceso de administración de parches y linux-next" . LWN.net . Eklektix, Inc. Archivado desde el original el 21 de junio de 2010 . Consultado el 30 de octubre de 2010 .
  54. ^ "Los archivos del kernel de Linux" . Kernel.org. Archivado desde el original el 30 de enero de 1998 . Consultado el 22 de enero de 2014 .
  55. ^ Lista de correo del kernel de Linux (17 de junio de 2005). "Linux 2.6.12" . git-commits-head (lista de correo). Archivado desde el original el 26 de enero de 2016 . Consultado el 23 de enero de 2008 .
  56. ^ "Índice de /pub/linux/kernel/v2.6" . Kernel.org. Archivado desde el original el 10 de febrero de 2014 . Consultado el 2 de marzo de 2014 .
  57. ^ "Agregar 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 .
  58. ↑ a b 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 .
  59. ^ 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 .
  60. ^ Vaughan-Nichols, Steven J. (13 de diciembre de 2012). "Adiós 386: Linux dejará de admitir chips i386 con la próxima versión importante" . ZDNet . CBS Interactive . Archivado desde el original el 17 de febrero de 2015 . Consultado el 6 de febrero de 2013 .
  61. ^ Fingas, Jon (15 de diciembre de 2012). "Linux para eliminar la compatibilidad con i386 en el kernel 3.8, nos hace actualizar nuestra plataforma Doom" . Engadget . AOL . Archivado desde el original el 2 de abril de 2015 . Consultado el 22 de marzo de 2015 .
  62. ^ 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 .
  63. ^ 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 .
  64. ^ "Linux 3.11" . kernelnewbies.org. 2 de septiembre de 2013 . Consultado el 21 de enero de 2014 .
  65. ^ Torvalds, Linus (12 de abril de 2015). "Linux 4.0 lanzado" . LKML (lista de correo). Archivado desde el original el 13 de abril de 2015 . Consultado el 12 de abril de 2015 .
  66. ^ "La Fundación Linux lanza informe de desarrollo de Linux" . Fundación Linux . 18 de febrero de 2015. Archivado desde el original el 19 de julio de 2016 . Consultado el 20 de febrero de 2015 .
  67. ^ Michael Larabel (23 de junio de 2014). "El kernel de Linux en 19,5 millones de líneas de código, sigue aumentando" . Phoronix . Archivado desde el original el 23 de noviembre de 2020 . Consultado el 23 de junio de 2015 .
  68. ^ Corbet, Jonathan (3 de agosto de 2020). "Algunas estadísticas del ciclo del núcleo 5.8" . LWN - Noticias semanales de Linux . Archivado desde el original el 4 de septiembre de 2020 . Consultado el 11 de agosto de 2020 .
  69. ^ "Encuesta de desarrolladores de desbordamiento de pila 2019 - tecnologías más populares" . Desbordamiento de pila . Archivado desde el original el 8 de octubre de 2020 . Consultado el 17 de marzo de 2020 .
  70. ^ "Encuesta de desarrolladores de desbordamiento de pila 2019 - entornos de desarrollo y herramientas" . Desbordamiento de pila . Archivado desde el original el 7 de marzo de 2020 . Consultado el 17 de marzo de 2020 .
  71. ^ "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 .
  72. ^ "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 .
  73. ^ "Sitios de supercomputadoras TOP500: familia de sistemas operativos / Linux" . Top500.org. Archivado desde el original el 19 de noviembre de 2012 . Consultado el 5 de octubre de 2019 .
  74. ^ "Gartner dice que las ventas de tabletas representarán menos del 10 por ciento de todos los dispositivos en 2014" (Comunicado 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 .
  75. ^ Lunden, Ingrid (15 de octubre de 2014). "El crecimiento de las ventas de tabletas se desploma en 2014 a medida que los teléfonos inteligentes Android continúan aumentando: Gartner" . TechCrunch . AOL . Archivado desde el original el 23 de octubre de 2014 . Consultado el 23 de octubre de 2014 .
  76. ^ "Los envíos globales de PC superan el pronóstico con una leve mejora en la demanda del consumidor, mientras que Apple se mueve al puesto número 5, según IDC" (Comunicado de prensa). Framingham, MA : IDC . 8 de octubre de 2014. Archivado desde el original el 11 de octubre de 2014 . Consultado el 19 de octubre de 2014 .
  77. ^ "sched (7) - página de manual de Linux" . man7.org . Archivado desde el original el 17 de julio de 2020 . Consultado el 27 de julio de 2020 .
  78. ^ "Preguntas frecuentes: preferencia" . kernelnewbies.org . 22 de agosto de 2009. Archivado desde el original el 7 de agosto de 2020 . Consultado el 7 de mayo de 2015 .
  79. ↑ a b Jonathan Corbet (24 de febrero de 2003). "Portabilidad del controlador: el kernel interrumpible" . LWN.net . Archivado desde el original el 10 de agosto de 2020 . Consultado el 7 de mayo de 2015 .
  80. ↑ a b Molnár, Ingo (13 de abril de 2007). "[parche] Núcleo del programador modular y programador completamente justo [CFS]" . LKML (lista de correo). Archivado desde el original el 3 de noviembre de 2020 . Consultado el 30 de marzo de 2020 .
  81. ^ "Programador completamente justo | Diario de Linux" . www.linuxjournal.com . Archivado desde el original el 3 de agosto de 2020 . Consultado el 30 de marzo de 2020 .
  82. ^ "ioctl (2) - Página de manual de Linux" . man7.org . Archivado desde el original el 20 de julio de 2020 . Consultado el 11 de agosto de 2020 .
  83. ^ "aio (7) - página de manual de Linux" . man7.org . Archivado desde el original el 12 de abril de 2020 . Consultado el 11 de agosto de 2020 .
  84. ^ "io_setup (2) - Página de manual de Linux" . man7.org . Archivado desde el original el 20 de agosto de 2020 . Consultado el 11 de agosto de 2020 .
  85. ^ "KVM" . www.linux-kvm.org . Archivado desde el original el 28 de marzo de 2020 . Consultado el 29 de marzo de 2020 .
  86. ^ "TechComparison - Wiki de virtualización de Linux" . virt.kernelnewbies.org . Archivado desde el original el 3 de agosto de 2020 . Consultado el 29 de marzo de 2020 .
  87. ^ "Virtualization_support_through_KVM en Linux_2_6_20 - Principiantes del kernel de Linux" . kernelnewbies.org . Archivado desde el original el 29 de noviembre de 2019 . Consultado el 29 de marzo de 2020 .
  88. ^ Coekaerts, Wim. "La línea principal de Linux contiene todos los bits de código Xen para el soporte de Dom0 y DomU" . blogs.oracle.com . Archivado desde el original el 3 de agosto de 2020 . Consultado el 29 de marzo de 2020 .
  89. ^ "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 .
  90. ^ 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 .
  91. ^ "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 .
  92. ^ a b "Proyecto SELinux" . GitHub . Archivado desde el original el 12 de diciembre de 2019 . Consultado el 10 de enero de 2020 .
  93. ^ a b "AppArmor - La documentación del kernel de Linux" . www.kernel.org . Archivado desde el original el 8 de mayo de 2020 . Consultado el 10 de enero de 2020 .
  94. ^ 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 .
  95. ^ 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 .
  96. ^ a b c d "stable-api-nonsense - árbol de fuentes del kernel de Linux" . git.kernel.org . Archivado desde el original el 5 de marzo de 2021 . Consultado el 18 de abril de 2020 .
  97. ^ Gorman, Mel (15 de febrero de 2004). Comprensión del Administrador de memoria virtual de Linux (PDF) . Prentice Hall. pag. 26. ISBN  0-13-145348-3. Archivado (PDF) desde el original el 3 de mayo de 2019 . Consultado el 27 de enero de 2020 .
  98. ^ 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 .
  99. ↑ a b 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" . El proyecto de documentación de Linux. Archivado desde el original el 2 de diciembre de 2020 . Consultado el 28 de noviembre de 2012 .
  100. ^ "Versión 5.x del kernel de Linux - La documentación del kernel de Linux" . www.kernel.org . Archivado desde el original el 7 de marzo de 2020 . Consultado el 4 de enero de 2020 .
  101. ^ "README \ ABI \ Documentation - kernel / git / torvalds / linux.git - árbol de fuentes del kernel de Linux" . git.kernel.org . Archivado desde el original el 1 de octubre de 2020 . Consultado el 18 de abril de 2020 .
  102. ^ "syscalls \ stable \ ABI \ Documentation - kernel / git / torvalds / linux.git - árbol de fuentes del kernel de Linux" . git.kernel.org . Archivado desde el original el 2 de octubre de 2020 . Consultado el 18 de abril de 2020 .
  103. ^ a b "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 .
  104. ^ a b "llamadas al sistema" . man7 . Archivado desde el original el 15 de enero de 2020 . Consultado el 28 de enero de 2020 .
  105. ^ "intro (2) - página de manual de Linux" . man7.org . Archivado desde el original el 17 de julio de 2020 . Consultado el 16 de julio de 2020 .
  106. ^ "clonar" . man7.org . Archivado desde el original el 18 de enero de 2020 . Consultado el 28 de enero de 2020 .
  107. ^ "feature_test_macros" . man7.org . Archivado desde el original el 19 de enero de 2020 . Consultado el 28 de enero de 2020 .
  108. ^ "vdso (7) - página de manual de Linux" . man7.org . Archivado desde el original el 2 de febrero de 2020 . Consultado el 2 de febrero de 2020 .
  109. ^ a b "futex (2) - página de manual de Linux" . man7.org . Archivado desde el original el 31 de enero de 2020 . Consultado el 2 de febrero de 2020 .
  110. ^ "syscall (2) - página de manual de Linux" . man7.org . Archivado desde el original el 21 de enero de 2020 . Consultado el 2 de febrero de 2020 .
  111. ^ "sysfs (5) - página de manual de Linux" . man7.org . Archivado desde el original el 18 de enero de 2020 . Consultado el 6 de enero de 2020 .
  112. ^ "Reglas sobre cómo acceder a la información en sysfs - La 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 .
  113. ^ "Especificaciones referenciadas de la Fundación Linux" . refspecs.linuxbase.org . Consultado el 3 de febrero de 2020 .
  114. ^ "Especificaciones LSB" . refspecs.linuxbase.org . Consultado el 3 de febrero de 2020 .
  115. ^ "Especificación de escritorio Base estándar de Linux, parte genérica" . refspecs.linuxbase.org . Consultado el 3 de febrero de 2020 .
  116. ^ "Referencias normativas" . refspecs.linuxfoundation.org . Archivado desde el original el 12 de agosto de 2020 . Consultado el 3 de febrero de 2020 .
  117. ^ "Especificación de núcleo básico estándar de Linux, parte genérica" . refspecs.linuxfoundation.org . Archivado desde el original el 29 de noviembre de 2019 . Consultado el 3 de febrero de 2020 .
  118. ^ "Interfaz binaria de la aplicación System V - Edición 4.1" (PDF) . www.sco.com . Archivado (PDF) desde el original el 13 de diciembre de 2019 . Consultado el 3 de febrero de 2020 .
  119. ^ "Xinuos Inc. | Desarrolladores | Gabi | 2003-12-17 | Interfaz binaria de la aplicación System V - BORRADOR" . www.sco.com . Archivado desde el original el 3 de febrero de 2020 . Consultado el 3 de febrero de 2020 .
  120. ^ "Formato ejecutable y de vinculación (ELF)" . refspecs.linuxbase.org . Consultado el 3 de febrero de 2020 .
  121. ^ "elf (5) - Página de manual de Linux" . man7.org . Archivado desde el original el 30 de noviembre de 2020 . Consultado el 18 de noviembre de 2020 .
  122. ^ "Especificación de núcleo básico estándar de Linux para X86-64" . refspecs.linuxbase.org . Consultado el 3 de febrero de 2020 .
  123. ^ "Interfaz binaria de aplicación del sistema V - BORRADOR" . refspecs.linuxbase.org . Consultado el 3 de febrero de 2020 .
  124. ^ Seyfarth, Ray (2012). Introducción a la programación en lenguaje ensamblador Intel de 64 bits para Linux . pag. 170. ISBN 9781478119203.
  125. ^ "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 .
  126. ^ "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 .
  127. ^ Deucher, Alex (7 de octubre de 2014). "Nuevo controlador de código abierto unificado de AMD" . Fundación X.Org . Archivado desde el original el 21 de enero de 2015 . Consultado el 21 de enero de 2015 .
  128. ^ a b "Símbolos - Guía poco confiable para piratear el kernel de Linux - La documentación del kernel de Linux" . www.kernel.org . Archivado desde el original el 3 de agosto de 2020 . Consultado el 8 de febrero de 2020 .
  129. ^ a b "Símbolos exportados y la API interna [LWN.net]" . lwn.net . Archivado desde el original el 31 de marzo de 2020 . Consultado el 15 de marzo de 2020 .
  130. ^ a b "No exportando kallsyms_lookup_name () [LWN.net]" . lwn.net . Archivado desde el original el 1 de abril de 2020 . Consultado el 15 de marzo de 2020 .
  131. ^ "Árboles I: Árboles Radix [LWN.net]" . lwn.net . Archivado desde el original el 8 de noviembre de 2020 . Consultado el 13 de noviembre de 2020 .
  132. ^ "Á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 .
  133. ^ "Guía poco confiable para piratear el kernel de Linux" . www.kernel.org (1ª ed.). 2005. Archivado desde el original el 16 de febrero de 2020 . Consultado el 15 de marzo de 2020 .
  134. ^ "Guía poco confiable para piratear el kernel de Linux - La documentación del kernel de Linux" . www.kernel.org . Archivado desde el original el 7 de marzo de 2020 . Consultado el 15 de marzo de 2020 .
  135. ^ "Guía poco confiable para bloquear - La documentación del kernel de Linux" . www.kernel.org . Archivado desde el original el 7 de marzo de 2020 . Consultado el 15 de marzo de 2020 .
  136. ^ "Guía de interfaces SCSI - La documentación del kernel de Linux" . www.kernel.org . Archivado desde el original el 2 de junio de 2020 . Consultado el 11 de junio de 2020 .
  137. ^ "Guía del desarrollador de libATA - La documentación del kernel de Linux" . www.kernel.org . Archivado desde el original el 30 de mayo de 2020 . Consultado el 11 de junio de 2020 .
  138. ^ "DRM Internals - La documentación del kernel de Linux" . www.kernel.org . Archivado desde el original el 1 de junio de 2020 . Consultado el 11 de junio de 2020 .
  139. ^ "Configuración del modo de kernel (KMS) - La documentación del kernel de Linux" . www.kernel.org . Archivado desde el original el 11 de junio de 2020 . Consultado el 11 de junio de 2020 .
  140. ^ "Introducir mecanismo de uso compartido 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 .
  141. ^ "Compartir búferes 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 .
  142. ^ "Sincronización y uso compartido de búfer: la documentación del kernel de Linux" . www.kernel.org . Archivado desde el original el 1 de junio de 2020 . Consultado el 11 de junio de 2020 .
  143. ^ "Acerca de mac80211" . Linux Kernel Organization, Inc. Archivado desde el original el 1 de febrero de 2021 . Consultado el 8 de junio de 2014 .
  144. ^ "Informe sobre cambios ABI en el kernel de Linux" . Laboratorio ABI de Andrey Ponomarenko. 17 de marzo de 2016. Archivado desde el original el 12 de marzo de 2016 . Consultado el 16 de marzo de 2016 .
  145. ^ "Bifurcación [PATCH v3 1/2]: agregar clone3 [LWN.net]" . lwn.net . Archivado desde el original el 16 de julio de 2020 . Consultado el 16 de julio de 2020 .
  146. ^ "clon (2) - página de manual de Linux" . man7.org . Archivado desde el original el 15 de julio de 2020 . Consultado el 15 de julio de 2020 .
  147. ^ "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 .
  148. ^ "ld-linux.so (8) - Página de manual de Linux" . man7.org . Archivado desde el original el 26 de noviembre de 2020 . Consultado el 18 de noviembre de 2020 .
  149. ^ "nptl (7) - página de manual de Linux" . man7.org . Archivado desde el original el 25 de julio de 2020 . Consultado el 25 de julio de 2020 .
  150. ^ "pthreads (7) - Página de manual de Linux" . man7.org . Archivado desde el original el 15 de julio de 2020 . Consultado el 25 de julio de 2020 .
  151. ^ "pthread_create (3) - 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 .
  152. ^ "futex (7) - página de manual de Linux" . man7.org . Archivado desde el original el 15 de julio de 2020 . Consultado el 25 de julio de 2020 .
  153. ^ "Los hilos del kernel son fáciles [LWN.net]" . lwn.net . Archivado desde el original el 31 de marzo de 2020 . Consultado el 15 de agosto de 2020 .
  154. ^ "execve (2) - página de manual de Linux" . www.man7.org . Archivado desde el original el 15 de julio de 2020 . Consultado el 17 de julio de 2020 .
  155. ^ "capacidades (7) - página de manual de Linux" . man7.org . Archivado desde el original el 15 de julio de 2020 . Consultado el 2 de agosto de 2020 .
  156. ↑ a b Bar, Moshe (1 de abril de 2000). "El programador de Linux" . Revista de Linux . Belltown Media, Inc. Archivado desde el original el 2 de febrero de 2021 . Consultado el 14 de abril de 2012 .
  157. ^ Amor, Robert (2010). "4". Desarrollo del kernel de Linux (3ª ed.). Addison Wesley. págs. 46–50. ISBN 9780672329463.
  158. ^ "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 .
  159. ^ Larabel, Michael (24 de enero de 2014). "El kernel de 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 .
  160. ^ "Linux kernel 3.14, sección 1.1. Clase de programación de fecha límite para una mejor programación en tiempo real" . kernelnewbies.org . 30 de marzo de 2014. Archivado desde el original el 15 de enero de 2021 . Consultado el 2 de abril de 2014 .
  161. ^ Amor, Robert (2010). "4". Desarrollo del kernel de Linux (3ª ed.). Addison Wesley. págs. 62–63. ISBN 9780672329463.
  162. ^ "Reducir la latencia en Linux: Introducción de un kernel interrumpible | Diario de Linux" . www.linuxjournal.com . Archivado desde el original el 9 de agosto de 2020 . Consultado el 17 de agosto de 2020 .
  163. ^ McKenney, Paul (10 de agosto de 2005). "Una descripción general de la preferencia en tiempo real" . LWN.net . Archivado desde el original el 10 de agosto de 2020 . Consultado el 5 de febrero de 2012 .
  164. ^ "Proyecto OSADL: Linux en tiempo real" . OSADL . Archivado desde el original el 4 de febrero de 2021 . Consultado el 5 de febrero de 2012 .
  165. ^ Amor, Robert (2010). "9". Desarrollo del kernel de Linux (3ª ed.). Addison Wesley. pag. 167. ISBN 9780672329463.
  166. ^ Amor, Robert (2010). "10". Desarrollo del kernel de Linux (3ª ed.). Addison Wesley. págs. 176–198. ISBN 9780672329463.
  167. ^ "lock.rst - Documentación / kernel-hacking / lock.rst - Código fuente de Linux (v5.11.10) - Bootlin" . elixir.bootlin.com . Consultado el 29 de marzo de 2021 .
  168. ^ "¿Qué es RCU, fundamentalmente? [LWN.net]" . lwn.net . Consultado el 29 de marzo de 2021 .
  169. ^ "¿Qué es RCU? Parte 2: Uso [LWN.net]" . lwn.net . Consultado el 29 de marzo de 2021 .
  170. ^ "RCU parte 3: la API de RCU [LWN.net]" . lwn.net . Consultado el 29 de marzo de 2021 .
  171. ^ "Modelo de memoria del kernel de Linux" . open-std.org . Consultado el 29 de marzo de 2021 .
  172. ^ "Un modelo formal de ordenación de memoria del kernel (parte 1) [LWN.net]" . lwn.net . Consultado el 29 de marzo de 2021 .
  173. ^ "Un modelo formal de ordenación de memoria del kernel (parte 2) [LWN.net]" . lwn.net . Consultado el 29 de marzo de 2021 .
  174. ^ Stern, Alan. "Explicación del modelo de coherencia de memoria del kernel de Linux" .
  175. ^ Amor, Robert (2010). Desarrollo del kernel de Linux . Addison Wesley. págs. 133-137. ISBN 9780672329463.
  176. ^ Amor, Robert (2010). Desarrollo del kernel de Linux . Addison Wesley. pag. 20. ISBN 9780672329463.
  177. ^ "El diagrama de pila de almacenamiento de Linux" . www.thomas-krenn.com . Archivado desde el original el 3 de agosto de 2020 . Consultado el 19 de marzo de 2020 .
  178. ↑ a b c Torvalds, Linus (enero de 1999). "El borde de Linux" . Fuentes abiertas: voces de la revolución del código abierto . O'Reilly . ISBN 1-56592-582-3. Consultado el 13 de octubre de 2013 .
  179. ^ "Portar Linux al DEC Alpha: el kernel y el shell" . Archivado desde el original el 5 de septiembre de 2019 . Consultado el 5 de octubre de 2019 .
  180. ^ "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 .
  181. ^ "Avalon Cluster | Sitios de supercomputadoras TOP500" . www.top500.org . Archivado desde el original el 5 de octubre de 2019 . Consultado el 5 de octubre de 2019 .
  182. ^ Wang, David (6 de mayo de 2010). "Android ahora se ejecuta en iPhone 3G" . TechHive . IDG . Archivado desde el original el 22 de julio de 2010 . Consultado el 11 de julio de 2010 .
  183. ^ "LKDDb" . Proyecto LKDDb. Archivado desde el original el 25 de febrero de 2021 . Consultado el 26 de enero de 2021 .
  184. ^ "Hardware de Linux" . Proyecto de hardware Linux. Archivado desde el original el 26 de enero de 2021 . Consultado el 26 de enero de 2021 .
  185. ^ "Kernel de Linux 4.0, Sección 1.2. Parches en vivo" . kernelnewbies.org . 26 de abril de 2015. Archivado desde el original el 4 de mayo de 2015 . Consultado el 27 de abril de 2015 .
  186. ^ Jonathan Corbet (25 de febrero de 2015). "Una mala racha para parchear en vivo" . LWN.net . Archivado desde el original el 27 de abril de 2015 . Consultado el 27 de abril de 2015 .
  187. ^ "kernel / git / torvalds / linux.git: Extraiga la infraestructura de parches en vivo de Jiri Kosina (árbol de fuentes del kernel de Linux)" . kernel.org . 11 de febrero de 2015. Archivado desde el original el 11 de junio de 2015 . Consultado el 27 de abril de 2015 .
  188. ^ Mookhey, KK; Burghate, Nilesh (1 de julio de 2005). Linux: funciones de seguridad, auditoría y control . Estados Unidos: ISACA . pag. 14. ISBN 1-893209-78-4. Archivado desde el original el 2 de junio de 2013 . Consultado el 31 de diciembre de 2010 .
  189. ^ Hatch, Brian (15 de julio de 2008). Hackear Linux expuesto: soluciones y secretos de seguridad de Linux . McGraw-Hill Osborne Media . pag. 524. ISBN 978-0-07-226257-5. Archivado desde el original el 2 de junio de 2013 . Consultado el 31 de diciembre de 2010 .
  190. ^ Jaeger, Trent (7 de octubre de 2008). Seguridad del sistema operativo . Editores Morgan y Claypool. pag. 122. ISBN 978-1-59829-212-1. Archivado desde el original el 2 de junio de 2013 . Consultado el 31 de diciembre de 2010 .
  191. ^ "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 .
  192. ^ "Uso del módulo de seguridad de Linux - La documentación del kernel de Linux" . www.kernel.org . Archivado desde el original el 2 de mayo de 2020 . Consultado el 10 de enero de 2020 .
  193. ^ "Agencia de seguridad nacional | Servicio de seguridad central> Qué hacemos> Investigación> SE Linux> Preguntas frecuentes sobre SE Linux" . www.nsa.gov . Archivado desde el original el 18 de septiembre de 2019 . Consultado el 10 de enero de 2020 .
  194. ^ "Seccomp BPF (Computación segura con filtros) - La documentación del kernel de Linux" . www.kernel.org . Archivado desde el original el 7 de marzo de 2020 . Consultado el 10 de enero de 2020 .
  195. ^ 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 .
  196. ^ Spengler, Brad (16 de julio de 2008). "Política de encubrimiento de seguridad no oficial de Linux" . Divulgación completa (lista de correo). Archivado desde el original el 7 de agosto de 2020 . Consultado el 31 de diciembre de 2010 .
  197. ^ Foundation, The Linux (25 de octubre de 2017). "2017 Estado del desarrollo del kernel de Linux" . La Fundación Linux . Archivado desde el original el 27 de mayo de 2020 . Consultado el 27 de mayo de 2020 .
  198. ^ "git-clone (1) - página de manual de Linux" . man7.org . Archivado desde el original el 14 de octubre de 2020 . Consultado el 16 de agosto de 2020 .
  199. ^ "git-pull (1) - Página de manual de Linux" . man7.org . Archivado desde el original el 12 de noviembre de 2020 . Consultado el 16 de agosto de 2020 .
  200. ^ Robert Love (2010). Desarrollo del kernel de Linux: Desarrollo del kernel de Linux . Educación Pearson. pag. 11. ISBN 9780768696790.
  201. ^ Robert Love (2010). Desarrollo del kernel de Linux: Desarrollo del kernel de Linux . Educación Pearson. pag. 12. ISBN 9780768696790.
  202. ^ "Cómo funciona el proceso de desarrollo" . Archivado desde el original el 9 de diciembre de 2017 . Consultado el 4 de febrero de 2018 .
  203. ^ Robert Love (2010). Desarrollo del kernel de Linux: Desarrollo del kernel de Linux . Educación Pearson. pag. 13. ISBN 9780768696790.
  204. ^ "CÓMO hacer el desarrollo del kernel de Linux - La documentación del kernel de Linux" . www.kernel.org . Archivado desde el original el 7 de marzo de 2020 . Consultado el 4 de enero de 2020 .
  205. ^ "Estilo de codificación del kernel de Linux - La documentación del kernel de Linux" . www.kernel.org . Archivado desde el original el 5 de enero de 2020 . Consultado el 4 de enero de 2020 .
  206. ^ 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 .
  207. timothy (26 de febrero de 2009). "Proyecto de núcleo de 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 .
  208. ^ Ryan, Justin (25 de febrero de 2009). "LinuxDNA sobrecarga Linux con el compilador Intel C / C ++" . Revista de Linux . Belltown Media, Inc. Archivado desde el original el 9 de noviembre de 2020 . Consultado el 30 de octubre de 2010 .
  209. ^ Lelbach, Bryce (25 de octubre de 2010). "Clang construye un kernel de Linux funcional (arranca a RL5 con SMP, redes y X, hosts propios)" . cfe-dev (lista de correo). Archivado desde el original el 7 de septiembre de 2015.
  210. ^ Larabel, Michael (12 de abril de 2014). "Linux 3.15 casi se puede compilar bajo Clang de LLVM" . Phoronix . Archivado desde el original el 13 de agosto de 2020 . Consultado el 10 de junio de 2014 .
  211. ^ Larabel, Michael . "Parche por parche, LLVM Clang mejora en la construcción del kernel de Linux" . Phoronix . Archivado desde el original el 13 de agosto de 2020 . Consultado el 20 de noviembre de 2014 .
  212. ^ 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 .
  213. ^ Möller, Jan-Simon (2 de febrero de 2014). "LLVMLinux: el núcleo de Linux con alas de dragón" (PDF) . Proyecto LLVM . Archivado (PDF) desde el original el 3 de agosto de 2020 . Consultado el 3 de marzo de 2015 .
  214. ^ Desaulniers, Nick; Hackmann, Greg; Hines, Stephen (18 de octubre de 2017). "2017 LLVM Developers 'Meeting: Compilando el 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 .
  215. ^ Hackmann, Greg (2 de febrero de 2017). "Serie de parches marlin-turrón-mr1-clang" . Archivado desde el original el 10 de diciembre de 2020 . Consultado el 6 de diciembre de 2020 .
  216. ^ Kaehlcke, Matthias (22 de octubre de 2018). "cros-kernel2: hace que clang sea el compilador predeterminado para las compilaciones del kernel" . Archivado desde el original el 10 de diciembre de 2020 . Consultado el 6 de diciembre de 2020 .
  217. ^ Larabel, Michael (4 de febrero de 2019). "El uso de LLVM Clang para compilar el kernel de Linux se está calentando de nuevo gracias a Google" . Phoronix . Archivado desde el original el 25 de noviembre de 2020 . Consultado el 6 de diciembre de 2020 .
  218. ^ Desaulniers, Nick (10 de diciembre de 2019). "vts: kernel: hacer cumplir vts_kernel_toolchain para todos los TARGET_ARCH para R" . Archivado desde el original el 10 de diciembre de 2020 . Consultado el 6 de diciembre de 2020 .
  219. ^ Desaulniers, Nick (19 de noviembre de 2020). "Re: violar la firma del puntero de función" . LKML . Consultado el 6 de diciembre de 2020 .
  220. ^ Amor, Robert (2010). Desarrollo del kernel de Linux (3ª ed.). Addison-Wesley. pag. 364. ISBN 978-0-672-32946-3. OCLC  268788260 .
  221. ^ 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 .
  222. ^ Amor, Robert (2010). Desarrollo del kernel de Linux . Addison Wesley. pag. 371. ISBN 9780672329463. OCLC  268788260 .
  223. ^ "syslog (2) - página de manual de Linux" . man7.org . Archivado desde el original el 13 de octubre de 2020 . Consultado el 15 de agosto de 2020 .
  224. ^ "kmsg: exportar registros de 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 .
  225. ^ "systemd" . www.freedesktop.org . Archivado desde el original el 18 de agosto de 2020 . Consultado el 16 de agosto de 2020 .
  226. ^ "systemd-journald (8) - página de manual de Linux" . man7.org . Archivado desde el original el 12 de agosto de 2020 . Consultado el 15 de agosto de 2020 .
  227. ^ "Depurando el kernel usando Ftrace - parte 1 [LWN.net]" . lwn.net . Archivado desde el original el 9 de noviembre de 2020 . Consultado el 15 de septiembre de 2020 .
  228. ^ "Depurando el kernel usando Ftrace - parte 2 [LWN.net]" . lwn.net . Archivado desde el original el 31 de marzo de 2020 . Consultado el 15 de septiembre de 2020 .
  229. ^ "ftrace - Function Tracer - La documentación del kernel de Linux" . www.kernel.org . Archivado desde el original el 19 de septiembre de 2020 . Consultado el 15 de septiembre de 2020 .
  230. ^ "Seguimiento de tiempo de arranque - La documentación del kernel de Linux" . www.kernel.org . Archivado desde el original el 31 de octubre de 2020 . Consultado el 19 de septiembre de 2020 .
  231. ^ "Kernel Probes (Kprobes) - La documentación del kernel de Linux" . www.kernel.org . Archivado desde el original el 11 de octubre de 2020 . Consultado el 6 de octubre de 2020 .
  232. ^ "Uprobe-tracer: seguimiento de eventos basado en Uprobe - la documentación del kernel de Linux" . www.kernel.org . Archivado desde el original el 4 de diciembre de 2020 . Consultado el 6 de octubre de 2020 .
  233. ^ "Uso de kgdb, kdb y los componentes internos del depurador del kernel" . mirrors.edge.kernel.org . Archivado desde el original el 26 de enero de 2021 . Consultado el 3 de noviembre de 2020 .
  234. ^ Gene Sally (2010). Sistemas integrados Pro Linux . Presione. pag. 252. ISBN 9781430272267.
  235. ^ "Código de conflicto" . Consultado el 4 de febrero de 2018 .[ enlace muerto permanente ]
  236. ^ Sharwood, Simon (6 de octubre de 2015). "El desarrollador del kernel de Linux que le pidió a Linus Torvalds que detuviera el abuso verbal abandona el abuso verbal" . El registro . Archivado desde el original el 29 de marzo de 2020 . Consultado el 4 de febrero de 2018 .
  237. ^ 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 .
  238. ^ Corbet, Jonathan (6 de noviembre de 2017). "Golpee a los mantenedores del kernel" . LWN.net . Archivado desde el original el 26 de enero de 2021 . Consultado el 4 de febrero de 2018 .
  239. ^ "El estado de preempt-rt" . linuxplumbersconf.org . Archivado desde el original el 15 de octubre de 2016 . Consultado el 14 de junio de 2016 .
  240. ^ Meyer, David (3 de febrero de 2010). "El 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 .
  241. ^ "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 .
  242. ^ Kroah-Hartman, Greg (2 de febrero de 2010). "Android y la comunidad del kernel de Linux" . Archivado desde el original el 27 de abril de 2019 . Consultado el 3 de febrero de 2010 .
  243. ↑ a b Roger Ye (2017). Programación del sistema Android . Packt Publishing. pag. 14. ISBN 9781787120389.
  244. ^ Torvalds, Linus (19 de septiembre de 2001). "Los orígenes de Linux — Linus Torvalds" . YouTube . Consultado el 6 de diciembre de 2020 .
  245. ^ "Por qué renuncié: desarrollador de 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 .
  246. ^ Corbet, Jonathan (25 de julio de 2007). "Re: -mm fusionar planes para 2.6.23" . LWN.net. Archivado desde el original el 11 de febrero de 2018 . Consultado el 10 de febrero de 2018 .
  247. ^ Cox, Alan (28 de julio de 2009). "Re: [PATCH] kdesu roto" . Archivado desde el original el 11 de febrero de 2018 . Consultado el 10 de febrero de 2018 .
  248. ^ Rodrigues, Goldwyn (22 de enero de 2011). "Una historia de dos destinos SCSI" . Archivado desde el original el 15 de febrero de 2018 . Consultado el 14 de febrero de 2018 .
  249. ^ Steinmetz, Andreas (17 de enero de 2013). "LIO - la implementación de destino iSCSI rota" . Archivado desde el original el 15 de febrero de 2018 . Consultado el 14 de febrero de 2018 .
  250. ^ Paul, Ryan (19 de junio de 2012). "Linus Torvalds dice" vete a la mierda "a NVIDIA" . Archivado desde el original el 15 de febrero de 2018 . Consultado el 14 de febrero de 2018 .
  251. ^ John Gold (3 de abril de 2014). "Linus Torvalds suspende al desarrollador clave de Linux: Kernel pánico cuando el desarrollador de Systemd empuja al oso" . Archivado desde el original el 24 de marzo de 2019 . Consultado el 24 de marzo de 2019 .
  252. ^ Poettering, Lennart (6 de octubre de 2014). "Sobre la enfermedad de la comunidad del kernel de Linux" . Google+ . Archivado desde el original el 27 de mayo de 2018 . Consultado el 10 de febrero de 2018 .
  253. ^ Brodkin, Jon (6 de marzo de 2015). "Se alega que VMware ha violado la licencia de código abierto de Linux durante años" . Ars Technica . Archivado desde el original el 15 de febrero de 2018 . Consultado el 14 de febrero de 2018 .
  254. ^ McCarthy, Kieren (26 de agosto de 2016). "Habiendo ofendido a todos los demás en el mundo, Linus Torvalds llama a sus propios abogados una 'enfermedad desagradable y enconada ' " . El registro . Archivado desde el original el 15 de febrero de 2018 . Consultado el 14 de febrero de 2018 .
  255. ^ Corbet, Jonathan (10 de septiembre de 2007). "KS2007: Relaciones con los desarrolladores y proceso de desarrollo" . LWN.net . Archivado desde el original el 12 de febrero de 2018 . Consultado el 11 de febrero de 2018 .
  256. ^ 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 .
  257. ^ Corbet, Jonathan (9 de marzo de 2015). "El código de conflicto del kernel" . LWN.net . Archivado desde el original el 12 de febrero de 2018 . Consultado el 11 de febrero de 2018 .
  258. ^ 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 .
  259. ^ Cohen, Noam (19 de septiembre de 2018). "Después de años de correos electrónicos abusivos, el creador de Linux pasa a un lado" . The New Yorker . Archivado desde el original el 20 de febrero de 2020 . Consultado el 24 de septiembre de 2018 .
  260. ^ Larabel, Michael. "Dejar caer blasfemias en los comentarios del código del kernel: Linux recibe" abrazos " " . Phoronix . Archivado desde el original el 21 de abril de 2019 . Consultado el 15 de junio de 2019 .
  261. ^ "Evolución de Linux" (PDF) . 26 de marzo de 2008. Archivado (PDF) desde el original el 14 de diciembre de 2013 . Consultado el 6 de noviembre de 2013 .
  262. ^ "Desarrollo perpetuo: un modelo del ciclo de vida del kernel de Linux" (PDF) . 25 de octubre de 2011. Archivado (PDF) desde el original el 17 de octubre de 2013 . Consultado el 6 de noviembre de 2013 .
  263. ^ Kroah-Hartman, Greg (12 de febrero de 2008). "Re: Announce: Linux-next (O el sueño de Andrew :-))" . Lista de correo del kernel de Linux (lista de correo). Archivado desde el original el 2 de febrero de 2017 . Consultado el 30 de enero de 2017 .
  264. ^ Wheeler, David A. "Linux Kernel 2.6: ¡Vale más!" . Archivado desde el original el 21 de agosto de 2011 . Consultado el 18 de enero de 2007 .
  265. ^ "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 .
  266. ^ "Estimación del costo total de desarrollo de una distribución de Linux" (PDF) (Tabla en la página 6). Archivado desde el original (PDF) el 11 de julio de 2010.
  267. ^ "El núcleo 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 .
  268. ^ Wheeler, David. "El kernel de Linux: ¡Vale más!" . Archivado desde el original el 23 de febrero de 2021 . Consultado el 17 de septiembre de 2012 .
  269. ^ "Archivo MAINTAINERS de Linux" . Archivado desde el original el 12 de enero de 2013.
  270. ^ Torvalds, Linus (16 de septiembre de 2018). "Linux 4.19-rc4 lanzado, una disculpa y una nota de mantenimiento" . LKML . Archivado desde el original el 23 de septiembre de 2018 . Consultado el 23 de septiembre de 2018 .
  271. ^ Alexandru Vaduva, Alex González y Chris Simmonds (2016). Linux: desarrollo integrado . Packt Publishing. pag. 663. ISBN 9781787124455.
  272. ^ "Los archivos del kernel de Linux" . Archivado desde el original el 21 de febrero de 2011 . Consultado el 13 de noviembre de 2019 .
  273. ↑ a b Yamagata, Hiroo (3 de agosto de 1997). "El pragmático del software libre" . HotWired . Archivado desde el original el 10 de febrero de 2007 . Consultado el 21 de febrero de 2007 .
  274. ^ "GPL-v2" . gnu.org . Archivado desde el original el 25 de diciembre de 2019 . Consultado el 28 de enero de 2020 .
  275. ^ Corbet, Jonathan (31 de enero de 2006). "GPLv3 y el kernel" . LWN.net . Archivado desde el original el 10 de agosto de 2020 . Consultado el 21 de febrero de 2007 .
  276. ^ 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 .
  277. ^ "gnu.org" . www.gnu.org . Archivado desde el original el 2 de febrero de 2021 . Consultado el 18 de octubre de 2017 .
  278. ^ 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 .
  279. ^ Shankland, Stephen (25 de septiembre de 2006). "Los mejores programadores de Linux pan GPL 3" . News.com . CNET . Consultado el 21 de febrero de 2007 .
  280. ^ a b 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). "Posición de los desarrolladores de kernel en GPLv3: los peligros y problemas con GPLv3" . LWN.net . Archivado desde el original el 18 de enero de 2021 . Consultado el 11 de marzo de 2015 .Mantenimiento de CS1: utiliza el parámetro de autores ( enlace )
  281. ^ 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 .
  282. ^ "Linus Torvalds dice que GPL v3 viola todo lo que GPLv2 representa" . Debconf 2014. 2014. Archivado desde el original el 8 de mayo de 2018 . Consultado el 21 de marzo de 2018 .
  283. ^ Clark, Rob; Semwal, Sumit (1 de noviembre de 2012). "Marco de intercambio de búfer DMA: una introducción" (PDF) . Conferencia de Linux embebido. Archivado (PDF) desde el original el 8 de agosto de 2014 . Consultado el 2 de agosto de 2014 .
  284. ^ Cox, Alan (10 de octubre de 2012). "[PATCH] dma-buf: Use EXPORT_SYMBOL" . Infraestructura de renderizado directo (lista de correo). Archivado desde el original el 22 de enero de 2013 . Consultado el 3 de septiembre de 2013 .
  285. ^ Torvalds, Linus (10 de diciembre de 2003). "RE: Linux GPL 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 .
  286. ^ Torvalds, Linus (3 de diciembre de 2003). "Re: cláusula de excepción de módulo binario y GPL de Linux?" . LKML (lista de correo). Archivado desde el original el 28 de abril de 2020 . Consultado el 12 de noviembre de 2010 .
  287. ^ "API de firmware de Linux - La documentación del kernel de Linux" . www.kernel.org . Archivado desde el original el 13 de enero de 2020 . Consultado el 13 de enero de 2020 .
  288. ^ "Núcleos contaminados - La documentación del núcleo de Linux" . www.kernel.org . Archivado desde el original el 7 de marzo de 2020 . Consultado el 13 de enero de 2020 .
  289. ^ "Firmware incorporado - La documentación del kernel de Linux" . www.kernel.org . Archivado desde el original el 10 de junio de 2020 . Consultado el 10 de junio de 2020 .
  290. ^ "Registro de Linux TM en los Estados Unidos" . uspto.gov . Archivado desde el original el 24 de febrero de 2021 . Consultado el 6 de septiembre de 2019 .
  291. ^ "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 .
  292. ^ Hughes, Phil (1 de agosto de 1997). "Disputa de marca de Linux" . Revista de Linux . Belltown Media, Inc. Archivado desde el original el 30 de abril de 2010 . Consultado el 8 de diciembre de 2010 .
  293. ^ Hughes, Phil (1 de marzo de 1997). "Medidas adoptadas sobre la marca comercial de Linux" . Revista de Linux . Belltown Media, Inc. Archivado desde el original el 3 de marzo de 2010 . Consultado el 8 de diciembre de 2010 .
  294. ^ Gisselberg, Tonya (2010). "La historia de las marcas registradas 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 .

Lectura adicional [ editar ]

  • Torvalds, Linus; Diamond, David (2001). Solo por diversión: la historia de un revolucionario accidental . HarperBusiness . ISBN 978-0066620732.
  • Bezroukov, Nikolai. "Ch 4: Un dictador benevolente" . 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 de Linux favorita de todos" . Archivado desde el original el 16 de agosto de 2005 . Consultado el 16 de junio de 2005 .
  • Pranevich, Joseph (diciembre de 2003). "El maravilloso mundo de Linux 2.6" . Archivado desde el original el 16 de julio de 2003.
  • "LinuxChanges" . Archivado desde el original el 31 de octubre de 2005 . Consultado el 31 de octubre de 2005 .
  • "Documento de seminario sobre el Kernel 2.6 de Linux" . Archivado desde el original el 2 de febrero de 2007.
  • "Controladores de dispositivos Linux" (3ª ed.). Archivado desde el original el 27 de julio de 2016 . Consultado el 21 de julio de 2016 .
  • "Comprensión del kernel de Linux" (Libro) (3ª ed.). Archivado desde el original el 17 de diciembre de 2005 . Consultado el 22 de diciembre de 2005 .
  • "Linux Kernel Networking, por Rami Rosen, 2014" (Libro). Archivado desde el original el 12 de mayo de 2015 . Consultado el 14 de junio de 2015 .
  • "Linux: la GPL y los módulos binarios" . Archivado desde el original el 23 de julio de 2005.
  • "Anatomía del kernel de Linux" . Archivado desde el original el 27 de junio de 2007 . Consultado el 9 de junio de 2007 .

Enlaces externos [ editar ]

  • Página web oficial
    • Índice de documentación del kernel de Linux
    • Páginas de manual del kernel de Linux
    • Kernel bugzilla y regresiones para cada versión reciente del kernel
  • Kernel Newbies , una fuente de diversa información relacionada con el kernel
  • Cobertura del kernel en LWN.net , una fuente autorizada de información relacionada con el kernel
  • Bootlin's Elixir Cross Referencer , una referencia cruzada del código fuente del kernel de Linux
  • Greg Kroah Hartman sobre el kernel de Linux en YouTube