Tras dos meses de desarrollo, Linus Torvalds lanzó el kernel de Linux 7.0. Entre los cambios más notables se incluyen: reglas para el uso de asistentes de IA, la integración de Rust en el núcleo del kernel, un rendimiento de intercambio mejorado, la activación del modo PREEMPT_LAZY por defecto, compatibilidad con filtros para operaciones io_uring, el nuevo sistema de archivos Nullfs, el marco fserror, herramientas de monitorización de XFS, compatibilidad con reasignación en Btrfs, la activación de NFS 4.1 por defecto, la integración del algoritmo criptográfico post-cuántico ML-DSA, la activación de AccECN en el subsistema de red y compatibilidad inicial con WiFi 8.
Se asignó el número 7.0 porque la rama 6.x había acumulado suficientes versiones como para justificar un cambio en el primer dígito del número de versión (la versión 6.0 se lanzó originalmente después de la 5.19). El cambio de numeración se realiza por razones estéticas y es un paso formal para mitigar la incomodidad causada por la acumulación de un gran número de versiones en la serie.
La nueva versión incorpora 15 624 correcciones de 2 477 desarrolladores, con un tamaño de parche de 56 MB (los cambios afectaron a 18 053 archivos, añadiendo 704 060 líneas de código y eliminando 278 132). La versión anterior incluía 15 657 correcciones de 2 237 desarrolladores, con un tamaño de parche de 52 MB. Aproximadamente el 51 % de todos los cambios en la versión 7.0 están relacionados con los controladores de dispositivos, aproximadamente el 11 % con actualizaciones de código específicas para arquitecturas de hardware, el 14 % con la pila de red, el 5 % con los sistemas de archivos y el 3 % con los subsistemas internos del kernel.
Principales novedades del kernel 7.0 (1, 2, 3):
- Subsistema de disco, E/S y sistemas de archivos
- Se ha implementado la infraestructura fserror y se ha añadido una API para recuperar información sobre errores de E/S y corrupción de metadatos al trabajar con archivos. Esta infraestructura unifica la transmisión de información de error al espacio de usuario en todos los sistemas de archivos mediante el mecanismo fsnotify.
- XFS se ha mejorado con nuevas capacidades para monitorizar el estado del sistema de archivos desde el espacio de usuario. Se introduce la operación ioctl XFS_IOC_HEALTH_MONITOR, que devuelve un descriptor de archivo que permite obtener información sobre fallos relacionados con la corrupción de metadatos o errores de E/S, así como monitorizar cambios en el estado del sistema de archivos, como el desmontaje y el apagado. Además, se introduce un proceso en segundo plano gestionado por systemd, xfs_healer, que procesa los eventos de estado del sistema de archivos desde el espacio de usuario e inicia automáticamente los procedimientos de recuperación si es necesario.
- El sistema de archivos Btrfs ha incorporado soporte experimental para una estructura de "árbol de reasignación", que podría utilizarse en el futuro como capa intermedia durante las operaciones de entrada/salida. Esta nueva función almacena las direcciones de datos antiguas y nuevas en una estructura adicional de "árbol de reasignación" tras mover los datos en la unidad, en lugar de actualizar todas las estructuras asociadas. Estas direcciones se reemplazan al acceder a los datos. Este nuevo enfoque se presenta como más fiable y flexible, y además simplificará la futura expansión de la funcionalidad de Btrfs.
- Btrfs implementa soporte para E/S directa en situaciones donde el tamaño del bloque excede el tamaño de la página de memoria del sistema.
- Se incluye un nuevo sistema de archivos, "Nullfs", que puede utilizarse como plantilla para el sistema de archivos raíz. El sistema de archivos Nullfs siempre está vacío, no contiene datos y no admite modificaciones. Su propósito es servir como sistema de archivos inicial para simplificar el proceso de arranque del sistema. Posteriormente, se montan otros sistemas de archivos sobre Nullfs, y la llamada al sistema pivot_root() se utiliza para cambiar el sistema de archivos raíz, en lugar de borrar el contenido del initramfs y usar el sistema de archivos raíz asociado.
- Se ha implementado la actualización de la información de la hora de modificación de archivos en modo no bloqueante. Anteriormente, al llamar a file_update_time_flags() con la bandera IOCB_NOWAIT se producía el error "-EAGAIN", lo que impedía el uso de operaciones de escritura directa en modo no bloqueante.
- La compatibilidad con los arrendamientos de notificación se ha trasladado a una opción independiente en los sistemas de archivos. Este mecanismo ya no está habilitado por defecto debido a problemas con sistemas de archivos que no fueron diseñados originalmente para ello. Por ejemplo, 9p y cephfs no lo admiten.
- El sistema de archivos EROFS (Extensible Read-Only File System), diseñado para su uso en particiones de solo lectura, utiliza el algoritmo de compresión LZMA por defecto. Los algoritmos DEFLATE y Zstandard, que ya no se consideran experimentales, están disponibles opcionalmente. Las entradas de la caché de páginas ahora se comparten entre archivos idénticos en sistemas de archivos EROFS independientes.
- Se ha eliminado el modo laptop_mode, que ahorra energía al aplazar y consolidar las escrituras en el disco duro para prolongar su tiempo de inactividad y reducir el número de activaciones. Este modo ya no es relevante, puesto que los discos duros han sido sustituidos por unidades de estado sólido en los dispositivos móviles modernos.
- El sistema de archivos F2FS se ha migrado para utilizar grandes bloques de páginas de memoria.
- Se ha retomado el desarrollo del controlador NTFS3, creado por Paragon Software. Se ha añadido compatibilidad con operaciones de archivo basadas en iomap, se han implementado las opciones SEEK_DATA/SEEK_HOLE de llseek y se ha incorporado el modo delalloc para la asignación diferida de bloques. Mientras tanto, en febrero, la lista de correo de desarrolladores del kernel aprobó la inclusión de una nueva implementación de NTFS, ntfsplus, diseñada para reemplazar a NTFS3, en una futura versión del kernel.
- Por defecto, el protocolo NFS versión 4.1 (CONFIG_NFS_V4_1) está habilitado durante la compilación. Las exportaciones NFS de sistemas de pseudoarchivos especializados, como pidfs y nsfs, están bloqueadas. NFSD implementa una función experimental para usar ACL POSIX y añade soporte para cambiar dinámicamente el grupo de subprocesos en función de la carga.
- Servicios de memoria y sistema.
- Se han aprobado las normas oficiales para el uso de asistentes de IA y la inclusión de contenido generado automáticamente en el núcleo. Al enviar código generado, es obligatorio marcarlo con la etiqueta "Assisted-by" (Asistido por) para indicar el asistente de IA utilizado. Los asistentes de IA tienen prohibido añadir la etiqueta "Signed-off-by" (Aprobado por): la persona que envía el parche se considera su autor, es responsable del cambio enviado y garantiza su calidad. Los desarrolladores deben revisar manualmente el código generado por la IA y verificar que el resultado cumpla con los requisitos de la licencia.
- La compatibilidad con Rust ha pasado de ser experimental a una característica fundamental del kernel. La compatibilidad con Rust no está habilitada por defecto y no incluye a Rust como una dependencia de compilación obligatoria del kernel.
- El mecanismo de tabla de intercambio se ha integrado en el núcleo, mejorando el rendimiento del intercambio. Esta mejora se logra reduciendo la contención de la caché de intercambio, optimizando las búsquedas en la caché y disminuyendo la fragmentación. El backend basado en tabla de intercambio se utiliza para el almacenamiento en caché de intercambio en lugar del backend XArray, lo que resultó en un aumento del 22 % en el número de solicitudes procesadas en la prueba de rendimiento de Redis con BGSAVE.
- Se ha añadido compatibilidad con la extensión Thread Safety Analysis, introducida en Clang 22, que permite la detección en tiempo de compilación de posibles condiciones de carrera y errores causados por la adquisición incorrecta de bloqueos. La extensión ofrece una serie de atributos, como GUARDED_BY(…), REQUIRES(…), RELEASE(…) y ACQUIRE(…), que permiten marcar las funciones cubiertas por bloqueos y separar los ámbitos de bloqueo (definir el contexto). La verificación en tiempo de compilación del uso correcto de las primitivas de sincronización, como los mutex, se realiza en función de la actividad o inactividad del contexto asociado.
- Se ha añadido la bandera OPEN_TREE_NAMESPACE a la llamada al sistema open_tree para simplificar la configuración de contenedores aislados y acelerar su inicio en sistemas con un gran número de puntos de montaje. Al igual que OPEN_TREE_CLONE, esta nueva bandera copia únicamente el árbol de montaje especificado, pero en lugar de un descriptor de archivo local, devuelve un descriptor de archivo en el nuevo espacio de nombres del punto de montaje, donde el árbol copiado se monta sobre una copia del sistema de archivos raíz real. La bandera OPEN_TREE_NAMESPACE resulta útil para evitar la ejecución por separado de las operaciones unshare(CLONE_NEWNS) y pivot_root() utilizadas durante la creación de contenedores.
- Se ha añadido un mecanismo de extensión de intervalo de tiempo a la llamada al sistema rseq, lo que permite asignar tiempo de CPU adicional para la ejecución ininterrumpida de una sección crítica. El objetivo es evitar que el planificador de tareas interrumpa una sección crítica con un bloqueo activo, lo que provocaría la transferencia del control a otros subprocesos que utilizan el recurso mientras el bloqueo persista. La extensión de intervalo de tiempo se realiza sin sobrecarga adicional, pero también sin las garantías estrictas que ofrece el control de prioridad total.
- Para las arquitecturas arm64, loongarch, powerpc, riscv, s390 y x86, el modo de preempción del planificador predeterminado se ha cambiado de PREEMPT_NONE a PREEMPT_LAZY. El número de modos posibles se ha reducido de cuatro a dos: PREEMPT_FULL y PREEMPT_LAZY (los modos PREEMPT_NONE y PREEMPT_VOLUNTARY se conservan solo para arquitecturas que no admiten PREEMPT_FULL y PREEMPT_LAZY). El modo PREEMPT_LAZY utiliza el modelo de preempción completa (PREEMPT_FULL) para tareas en tiempo real (RR/FIFO/DEADLINE), pero retrasa la preempción de tareas normales (SCHED_NORMAL) hasta el límite del tick. El retardo introducido reduce el número de desalojos de titulares de bloqueo, lo que permite que el rendimiento se aproxime al de las configuraciones que utilizan el modelo de preempción voluntaria; es decir, PREEMPT_LAZY permite conservar todas las capacidades de preempción para las tareas en tiempo real, pero minimiza la penalización de rendimiento para las tareas regulares.
La activación de PREEMPT_LAZY provocó una regresión grave, reduciendo a la mitad el rendimiento de PostgreSQL en sistemas ARM64. Para solucionar esta degradación del rendimiento, se recomienda a los desarrolladores de PostgreSQL que activen la opción PR_RSEQ_SLICE_EXTENSION para reducir la probabilidad de expulsión del titular del bloqueo.
- Continuamos migrando los cambios de la rama Rust-for-Linux relacionados con el uso de Rust como segundo lenguaje para el desarrollo de controladores y módulos del kernel. Gracias a la biblioteca "syn" previamente integrada, que simplifica la escritura de macros complejas, pudimos reducir el tamaño del código Rust en el kernel al simplificar las definiciones de las macros procedimentales existentes. Se ampliaron las capacidades del kernel, las macros y las bibliotecas pin-init.
- El sistema de E/S asíncrona io_uring ahora tiene la opción de usar colas de envío no circulares, que se almacenan en caché de manera más eficiente en situaciones en las que una solicitud se completa antes de que una llamada al sistema devuelva un resultado.
- En el subsistema eBPF, el mecanismo BTF (BPF Type Format), que proporciona información de verificación de tipos en pseudocódigo BPF, utiliza la búsqueda binaria para encontrar información de depuración, lo que mejora la eficiencia de la carga de programas BPF. eBPF ahora admite argumentos implícitos al llamar a kfunc (funciones del kernel disponibles para su uso en programas BPF), definidos con la bandera KF_IMPLICIT_ARGS.
- Se ha eliminado el código que da soporte al disco RAM inicial (initrd) basado en linuxrc, que llevaba tiempo obsoleto. Las implementaciones restantes de initrd se eliminarán en 2027. En su lugar, se recomienda usar initramfs (la diferencia radica en que initrd coloca el entorno de arranque inicial en una imagen de disco, mientras que initramfs lo coloca en un sistema de archivos).
- El dispositivo de bloques zram, utilizado para el almacenamiento de intercambio comprimido en memoria, ha modificado la lógica de gestión de las páginas de memoria comprimidas al transferir datos a un almacenamiento persistente cuando la RAM disponible está llena. Anteriormente, las páginas de memoria se descomprimían antes de escribirse en el almacenamiento físico, pero ahora se almacenan tal cual, en formato comprimido, lo que reduce la carga de la CPU y ahorra energía durante el funcionamiento con batería.
- La utilidad timerlat, diseñada para medir los retrasos al ejecutar el planificador de tareas, se ha actualizado con la opción "--bpf-action" para iniciar programas BPF cuando se supera un umbral especificado.
- El sistema de rastreo ftrace se ha actualizado con la configuración "bitmask-list" para mostrar las máscaras de bits en un formato legible (como una lista de bits, no como valores hexadecimales). Tracefs ahora admite filtros y activadores de auditoría. Se ha añadido el comando "perf sched stats" para recopilar y mostrar estadísticas del planificador de tareas.
- Se agregaron las opciones de compilación LOGO_LINUX_MONO_FILE, LOGO_LINUX_VGA16_FILE y LOGO_LINUX_CLUT224_FILE para definir un archivo con una imagen de logotipo que se mostrará cuando se inicie el kernel en lugar del logotipo estándar del pingüino de Tux.
- Virtualización y seguridad
- El sistema de E/S asíncrona io_uring ahora admite la conexión de programas BPF con filtros que controlan las capacidades de operaciones SQE (Submission Queue Entry) específicas (similares a las llamadas al sistema en io_uring). Esta nueva función es análoga a los filtros de llamadas al sistema. Los filtros se pueden conectar a tareas específicas y se heredan al crear otros procesos tras llamar a fork(). Si los filtros están activos, los filtros adicionales solo pueden añadir restricciones, pero no deshabilitar las existentes. Esta función permitirá que los métodos de bloqueo eviten el filtrado de llamadas al sistema en entornos aislados que se basan en la ejecución de operaciones similares proporcionadas por io_uring en lugar de llamadas al sistema.
- SELinux ahora incluye la capacidad de controlar el acceso a los tokens BPF, que permiten a los procesos sin privilegios realizar algunas operaciones privilegiadas con BPF, como cargar programas BPF en el kernel y crear estructuras de mapas.
- Se ha añadido compatibilidad con el algoritmo de generación de firmas digitales ML-DSA (CRYSTALS-Dilithium), basado en la teoría de retículos y resistente a ataques de fuerza bruta en ordenadores cuánticos. Ahora, ML-DSA puede utilizarse para autenticar módulos del kernel.
- Se ha eliminado la posibilidad de utilizar esquemas de generación de firmas digitales con el algoritmo SHA-1 para certificar módulos del kernel (se mantiene la compatibilidad con la carga de módulos firmados).
- Se agregaron los campos 'sport' y 'dport' a los registros de auditoría NETFILTER_PKT para inspeccionar los números de puerto de red en lugar de solo direcciones IP.
- Para sistemas con arquitectura RISC-V, se ha implementado la compatibilidad con las extensiones Zicfiss y Zicfilp, que proporcionan capacidades de hardware para aplicar la protección CFI (Integridad del Flujo de Control), la cual bloquea las violaciones del orden normal de ejecución de instrucciones (flujo de control) como resultado de exploits que modifican los punteros de función almacenados en la memoria.
- En el hipervisor KVM Se ha implementado la capacidad de transmitir información sobre la compatibilidad del procesador con la extensión ERAPS (Enhanced Return Address Predictor Security) a los sistemas invitados. Esto permite evitar algunas operaciones de reinicio del estado de la CPU cuando el sistema invitado devuelve el control al host. Además, se ha añadido compatibilidad para asignar unidades de monitorización del rendimiento (PMU) a los sistemas invitados, lo que mejora la precisión de la elaboración de perfiles en comparación con el uso de PMU emuladas.
- El controlador del hipervisor Hyper-V ahora admite la interfaz debugfs para visualizar las estadísticas del hipervisor.
- Subsistema de red
- La extensión AccECN (Notificación Explícita y Precisa de Congestión) está habilitada por defecto. Implementa una versión mejorada de la extensión ECN, que permite a los hosts marcar los paquetes IP en caso de congestión en lugar de descartarlos. Esto posibilita la detección del inicio de la congestión en los canales de comunicación sin pérdida de paquetes. La extensión ECN original tiene la limitación de permitir solo una señal de congestión durante un único viaje de ida y vuelta TCP (RTT, Tiempo de Viaje de Vuelta, envío de una solicitud y recepción de una respuesta). AccECN elimina esta limitación y permite al receptor transmitir más de una señal de congestión al remitente en la cabecera del paquete TCP. Los algoritmos de control de congestión pueden utilizar esta información para responder con mayor precisión a la congestión y evitar la reducción abrupta de la tasa de paquetes cuando se produce una congestión menor.
- Se ha mejorado la implementación del algoritmo de gestión de colas de red CAKE para manejar múltiples colas y distribuir la carga entre varios núcleos de CPU. El algoritmo CAKE se utiliza para reducir el impacto negativo del almacenamiento en búfer de paquetes intermedios en los equipos de red perimetrales y tiene como objetivo lograr el máximo rendimiento y la mínima latencia, incluso en enlaces de comunicación lentos.
- Se ha añadido compatibilidad con espacios de nombres de red a los sockets VSOCK que se utilizan para comunicarse con máquinas virtuales.
- Se ha añadido la implementación inicial del futuro estándar WiFi 8 (802.11bn, WiFi de ultra alta fiabilidad).
- Se añadieron optimizaciones que aumentaron el rendimiento del procesamiento de paquetes UDP entrantes en un 12 % durante las pruebas de estrés en una red de 100 Gbps.
- Equipo
- El controlador AMDGPU implementa compatibilidad con los bloques IP utilizados en las nuevas GPU de AMD, como SMUIO 15.x, PSP 15.x, IH 6.1.1/7.1, MMHUB 3.4/4.2, GC 11.5.4/12.1, SDMA 6.1.4/7.1/7.11.4 y JPEG 5.3.
- El controlador Nouveau ha mejorado la gestión de frecuencias en los sistemas Tegra 186+.
- El controlador i915 ahora incluye soporte inicial para la IP de pantalla Xe3p_LPD utilizada en los procesadores Intel Nova Lake-P.
- Se ha continuado trabajando en el controlador Xe DRM (Direct Rendering Manager) para GPU basadas en la arquitectura Intel Xe, que se utiliza en las tarjetas gráficas y gráficos integrados de la serie Intel Arc, comenzando con los procesadores Tiger Lake. Se ha añadido el modo Multi-Queue. Se han añadido los componentes necesarios para diagnosticar bloqueos de GPU en Mesa. Se ha añadido compatibilidad con el mecanismo MERT para la gestión del acceso a la memoria de la GPU.
- Hemos continuado integrando componentes del controlador Nova para las GPU NVIDIA equipadas con el firmware GSP utilizado desde la serie NVIDIA GeForce RTX 2000 basada en la microarquitectura Turing. El controlador está escrito en Rust. Esta nueva versión prepara la compatibilidad con las GPU basadas en la microarquitectura Turing e incluye varios cambios internos.
- Se ha añadido compatibilidad con controladores y dispositivos periféricos con una interfaz SPI (Interfaz Periférica Serie) multicanal, que permite transferir datos en varios flujos paralelos.
- Se ha añadido un controlador para conectores Type-C combinados que se utilizan en dispositivos basados en chips Apple Silicon y que combinan interfaces USB3, DP-AltMode y Thunderbolt/USB4.
- Se ha añadido compatibilidad con los subsistemas de sonido de los chips Tegra238, Minisforum V3 SE, iBasso DC04U, Intel Nova Lake, Nova Lake S y Focusrite Forte.
- Se agregó soporte para placas, SoC y dispositivos ARM: Arduino UnoQ, OrangePi 6 Plus, OrangePi CM5, Anbernic RG-DS, Realtek Kent, Qualcomm Kaanapali, Mediatek Ezurio, Facebook Anacapa, Microchip LAN9668, Khadas VIM1S, QNAP TS133, i.MX952, i.MX93, i.MX94, VHIP4 EvalBoard, TQ-Systems MBLS1028A, Agilex5, Radxa CM3J, Glymur,
- Se ha añadido compatibilidad con smartphones y tabletas: Fairphone Gen 6 (SoC Qualcomm Milos/Snapdragon 7s Gen 3), Pixel 3/3 xl, Microsoft Surface Pro 11.
Al mismo tiempo, la Free Software Foundation (FSF) en Latinoamérica creó una versión del kernel 7.0 completamente libre —Linux-libre 7.0-gnu— depurada de elementos de firmware y controladores que contienen componentes no libres o secciones de código con alcance restringido por el fabricante. La versión 7.0 incluye una limpieza de blobs para el controlador iwlwifi. El código de limpieza para los controladores amdgpu, adreno, TI PRUeth, air_en8811h, ath12k, TI VPE, rtw8852b, rt1320, rt5575 SPI, tas2783 e Intel catpt ha sido actualizado. Los nombres de blobs en los archivos devicetree (dts) para chips ARM han sido limpiados.
Fuente: opennet.ru
