El Maravilloso Mundo de Linux 2.6
Joseph Pranevich - jpranevich <en> kniggit.net

Aunque parece que fue ayer cuando instalábamos nuestros primeros sistemas con Linux 2.4, el tiempo pasa, y el equipo del kernel se acerca al final del desarrollo de la versión 2.6. [El kernel es el núcleo de un sistema operativo.] Este documento intenta ser una visión general de las nuevas funcionalidades en esta versión, centrado sobre todo en Linux para i386. Al contrario que muchos anuncios de software cerrado, todas las novedades descritas en este documento están ya disponibles en la serie de kernels de prueba 2.6. (Sin embargo, existe la posibilidad de que algunas no vean la luz, o incluso aparezcan nuevas funcionalidades.) El desarrollo del kernel ha alcanzado la fase de estabilización, y es probable que la versión final no se desvíe mucho de lo que hay ahora disponible. Hay que tener también en cuenta que algunas de las nuevas capacidades pueden ser portadas a Linux 2.4 tras aparecer primero en Linux 2.6, bien oficialmente o como parte de una distribución. También he incluido información sobre ciertas funcionalidades generadas durante el ciclo de mantenimiento de Linux 2.4, cosa que está indicada claramente donde corresponde.

Estás leyendo la segunda revisión de este documento, terminada el 26/10/2003 y basada en el kernel de desarrollo 2.6.0-test9. Iré sacando nuevas revisiones a medida que el kernel se vaya completando, pero este documento no estará cerrado "oficialmente" hasta que salga la versión final. En esta segunda revisión pueden quedar todavía errores u omisiones; si te encuentras alguno, házmelo saber y lo corregiré gustoso.

De momento, este documento ha sido traducido a siete idiomas. La información pertinente está en la sección "Traducciones", justo al final.

La Historia Hasta Ahora...

Linus Torvalds inició el proyecto de kernel Linux en 1991, un Sistema Operativo tipo Minix para su 386. (Linus originariamente quiso ponerle "Freax" a su proyecto, pero el nombre que prosperó fue el que hoy conocemos.) La primera versión oficial, la 1.0, apareció en marzo de 1994; soportaba sólo máquinas i386 con un único procesador. Exactamente un año después, apareció Linux 1.2 (marzo de 1995) y fue la primera versión con soporte para distintas plataformas (Alpha, Sparc y Mips), pero todavía modelos de un solo procesador. Linux 2.0, aparecido en junio de 1996, no sólo soportaba nuevas arquitecturas; también introdujo a Linux en el mundo de máquinas multiprocesador (SMP: Symmetrical Multi-Processing, o "Multi-Proceso Simétrico"). Tras 2.0, las revisiones importantes han ido tardando más en aparecer (Linux 2.2 en enero de 1999 y 2.4 en enero de 2001), y con cada nueva entrega se ha ampliado el rango de hardware al igual que la escalabilidad. (Linux 2.4 también fue notable al acercarse al escritorio, con soporte en el kernel para ISA Plug-and-Play, USB, PC Card y otras novedades.) Linux 2.6 no sólo trae ampliaciones por ese lado: también será un salto importante al mejorar el soporte tanto para sistemas mucho más grandes como para dispositivos más pequeños (PDAs y similares).

Soporte de Hardware

Uno de los puntos fuertes de los sistemas operativos basados en Linux es su flexibilidad y disponibilidad para un rango amplio de plataformas. Aunque este documento se centra específicamente en los usos de Linux sobre hardware basado en la arquitectura PC, el kernel 2.6 ha mejorado tanto en este área que merece la pena señalar los cambios.

Bajando de Escala -- Linux para Sistemas Integrados

Uno de los cambios fundamentales en Linux para la versión 2.6 viene de la aceptación e inclusión de gran parte del proyecto uClinux en el kernel principal. El proyecto uClinux (que puede pronunciarse como "u-cé-linux" [en inglés "you-see-Linux"], aunque en rigor debe escribirse con la letra griega "mu") significa Linux para Microcontroladores. Esta variante de Linux ha sido un pilar fundamental para su aceptación en el mercado integrado (embedded), y su inclusión en la versión oficial debería aumentar aún más el desarrollo en este campo. Al contrario que las variantes de Linux a las que estamos acostumbrados, en los sistemas integrados no tenemos todas las capacidades del kernel, debido a limitaciones de hardware. La principal diferencia en estas variantes es la ausencia de MMU (memory management unit o "unidad de gestión de memoria" - lo que hace que un sistema operativo pueda trabajar en modo protegido) integrada en el procesador. Aunque suelen ser sistemas Linux multitarea, no tienen protección de memoria ni otras características asociadas. (Sin protección de memoria, es posible que un proceso aventurero lea los datos de otros procesos, o incluso que los haga colgarse.) Esto reduce su utilidad en un sistema multi-usuario, pero los hace ideales para una agenda electrónica (PDA: Personal Digital Assistant o "Asistente Digital Personal") de bajo coste o un dispositivo dedicado. Es difícil exagerar la importancia de este cambio de arquitectura en Linux 2.6: hasta el momento, todas las versiones seguían afectadas (por más remotamente que fuera) por las limitaciones inherentes al trabajo inicial de Linus en su Intel 80386.

Hay varias líneas nuevas de procesadores integrados con soporte en Linux 2.6, incluyendo la serie Hitachi H8/300, el procesador NEC v850, y la línea de procesadores integrados m68k diseñada por Motorola. éstos últimos son los más familiares para el usuario corriente de Linux, ya que están en el corazón de las agendas Palm Pilot desde el principio (la Palm 1000), hasta la Palm III. Otros modelos, con nombres tan sugerentes como DragonBall o ColdFire, son utilizados en sistemas y placas de evaluación fabricadas por Motorola, Lineo, Arcturus, y otras empresas. Por desgracia, la v2.6 todavía no permite usar otros procesadores m68k más antiguos sin MMU (como los procesadores 68000 utilizados en los primeros Macintosh), pero es bastante probable que surjan proyectos amateur para incluir éstos sistemas y otros parecidos.

Aunque no sea parte de la inclusión de uClinux (al disponer de MMU), esta nueva revisión puede usarse también en los procesadores de Axis Communications, la serie ETRAX CRIS (Code Reduced Instruction Set, o "Conjunto Reducido de Instrucciones de Código"). (Hay que señalar que la inclusión de este procesador llegó durante el ciclo de mantenimiento del kernel 2.4 -- bastante después de que saliera la versión 2.4.0.) Es un procesador integrado usado sobre todo en equipamiento de redes. El kernel no incluye todavía soporte para variantes sin MMU, pero varios proyectos externos están ya trabajando en ello.

Además de soporte para hardware, hay también mejoras importantes resultantes de la inclusión de sistemas integrados en el kernel principal. Mientras que la mayoría de ellas no son visibles, la robustez general del sistema operativo se ve mejorada por cambios como la capacidad de construir un sistema completo sin soporte de swap.

Aumentando la Escala -- NUMA y Máquinas Grandes

El segundo de los cambios fundamentales en Linus 2.6 ha sido en la dirección exactamente opuesta: hacer Linux un kernel aceptable en servidores tan grandes como sea posible. (Algunos de estos servidores están basados en procesadores i386, otros no.) La gran diferencia en este sentido es el nuevo soporte en Linux para servidores NUMA. Tras la arquitectura SMP, NUMA (Non-Uniform Memory Access, o "Acceso No Uniforme a Memoria") es un paso más dentro del multiproceso: trae consigo una mayor eficiencia al trabajar con muchos procesadores. Los sistemas multiprocesador actuales fueron diseñados con las mismas limitaciones que los mono-procesador, ya que disponen de un único espacio de memoria para todos los procesadores. Al aumentar su número, la altísima tasa de contención entre las CPUs y el bus compartido de memoria crea un cuello de botella que obstaculiza el rendimiento. Los servidores NUMA están basados en la idea de que, para cada procesador, parte de la memoria está más cerca que el resto; así se evita la congestión de accesos. Una forma sencilla de entender su funcionamiento, y no del todo incorrecta, es imaginarse un sistema con tarjetas separadas, cada una con CPUs, memoria, y posiblemente otros componentes (como podría ser entrada/salida). Hay muchas tarjetas similares, que por supuesto pueden hablar entre sí; pero está claro que a cada CPU le será más fácil comunicarse con su memoria local, la de la misma tarjeta. Puede imaginarse la arquitectura NUMA como un cluster integrado en los niveles más bajos del hardware.

Para poder trabajar con estas nuevas máquinas NUMA, ha habido que adaptar Linux en varios sentidos para crear un modelo eficiente. Para empezar, ha sido necesario crear una API (Application Programmer Interface, o "Interfaz de Programación de Aplicaciones") de topología interna, que permita a los entresijos del kernel entender las relaciones que cada procesador y cada memoria tienen entre sí y con los dispositivos de entrada salida. Relacionado con lo anterior, el planificador de procesos [process scheduler] de Linux es ahora capaz de entender estas relaciones, e intentar optimizar las tareas haciendo el mejor uso posible de los recursos locales. Por otro lado, muchas máquinas NUMA se fabrican con "agujeros" en el espacio de memoria "entre" nodos. El nuevo kernel puede tener en cuenta estas discontinuidades de una forma razonable. Hay múltiples cambios internos que han ayudado al buen uso de los recursos en estos super-servidores, y que han permitido refinar el funcionamiento del kernel. Sin embargo, quedan bastantes posibilidades de mejora en este área, y mucho trabajo por hacer para conseguir un rendimiento óptimo. En el próximo año, veremos seguramente aún más mejoras en el soporte de máquinas de gama altísima.

Soporte de Sub-arquitecturas

Aunque no tan nucleares como los dos cambios previos, la nueva revisión del kernel también incluye el concepto de "sub-arquitectura", que aumenta el alcance de Linux en nuevos categorías de hardware. Hasta ahora, Linux tendia a asumir que los tipos de procesador y de sistemas estaban ligados. Por ejemplo, al ver un procesador de tipo i386, se daba por hecho que se estaba ante un servidor basado en PC/AT. En Linux 2.4, se deshizo la ligazón para i386 con la adición de soporte para la Visual Workstation de SGI, una plataforma totalmente nueva pero basada en un chip de Intel. (De hecho, ya antes se había reconocido esta diversidad en muchas otras arquitecturas: los procesadores m68k se utilizan desde hace tiempo en Amigas, Macintosh y otras plataformas.) El gran cambio en Linux 2.6 ha sido reconocer esta diferencia de concepto y hacerla estándar, de forma que todas las arquitecturas tengan un tratamiento más coherente: agrupando sólo los componentes que deben ser agrupados.

Del brazo de esta estandarización vienen dos nuevas plataformas soportadas con procesadores i386. La primera es la arquitectura Voyager de NCR. Es un sistema SMP (desarrollado antes de la especificación MP de Intel, la habitual hoy día) basado en procesadores 486-686 en configuraciones de hasta 32x. El número real de configuraciones vendidas con esta arquitectura es bastate pequeño, y el soporte no ha llegado a las más antiguas. La segunda arquitectura incluida es más corriente: la plataforma PC-9800 desarrollada por NEC, que llegó a ser casi predominante en Japón hasta hace relativamente poco. Las máquinas PC-9800 originales tenían un procesador 8086; la línea fue evolucionando (en paralelo con los derivados del PC/AT) hasta llegar a tener procesadores tipo Pentium y soporte para multiproceso. (Como es lógico, Linux requiere de 386 en adelante.) Aunque completamente desconocida en los Estados Unidos [y en Europa], Microsoft ha sacado versiones de sus productos, hasta Windows 95, para estas máquinas. El fabricante ha abandonado oficialmente esta línea a favor de PCs más estándar.

Al formalizar el soporte en Linux para estos tipos de hardware "ligeramente diferentes", será más fácil crear variantes del kernel para otros sistemas, como almacenamiento dedicado y otros componentes basados en procesadores ya extendidos en la industria. Hay que tener muy claro que no debe llevarse esta subdivisión demasiado lejos. Se ha hecho la distinción entre varias sub-arquitecturas cuando hay componentes de bajo nivel en el sistema, como el enrutado de IRQ, que son un poco (incluso bastante) diferentes. Pero correr Linux en una consola X-Box es otra historia; aquí sólo los drivers y cuatro cosas más la separan de un sistema i386 "genérico": no debe por tanto considerarse como una sub-arquitectura.

Hyperthreading

Otra mejora importante en el hardware soportado por Linux 2.6 está en el soporte de hyperthreading [hiper-hilos]: consiste en la capacidad de considerar, a nivel de hardware, un único procesador como dos o más. Actualmente sólo está disponible en algunos procesadores Pentium 4 modernos. En ciertas situaciones, el rendimiento mejora notablemente, aunque a costa de aumentar la complejidad en la planificación de procesos, entre otras cosas. La mejora de su soporte en el kernel requiere que el planificador sea capaz de reconocer y optimizar la carga entre los procesadores reales y virtuales de una misma máquina. En anteriores versiones de Linux, era posible sobrecargar uno de ellos, ya que era complicado evaluar la carga total. En este sentido, conviene destacar es que Linux se ha adelantado al resto del mercado, al soportar hyperthreading de forma inteligente y transparente. (Los servidores Win2K pueden ver procesadores "falsos" adicionales, pero no los reconocen como virtuales: así, se requieren licencias adicionales para aprovechar estas CPUs. Hasta la aparición de WinXP, el soporte de Microsoft no estuvo completo.)

El Interior de Linux

Mejoras de Escalabilidad

Además de las capacidades ya descritas, NUMA y hyperthreading, Linux 2.6 también tiene mejoras específicas para servidores Intel de gama alta. En lugar destacado está la inclusión de otras novedades de este fabricante: el soporte PAE (Physical Address Extension, o "Extensión de Direccionamiento Físico") permite acceder a 64 GB de memoria en casi todos los sistemas recientes x86 de 32 bits, usando una modalidad de paginado. Además, el balanceo de IRQ ha mejorado significativamente en sistemas multiprocesador, gracias a mejoras en el soporte de APIC.

Aparte de las mejoras de hardware, se han aumentado los límites internos siempre que ha sido posible. Por ejemplo, el número máximo de usuarios y grupos en un sistema Linux ha pasado de 65.000 a más de cuatro mil millones (de 16 bits a 32 bits), haciendo posible su uso en grandes servidores de almacenamiento o de autentificación. El número de PIDs (identificadores de proceso) también ha sido aumentado de 32.000 a mil millones, lo que disminuye el tiempo de arranque de las aplicaciones en sistemas que sufren grandes cargas a lo largo de mucho tiempo. Aunque el número máximo de ficheros abiertos no ha aumentado, el kernel 2.6 no requiere fijarlo a priori; el límite va creciendo según hace falta. Por último, Linux 2.6 incluirá soporte mejorado de 64 bits en aquellos dispositivos de bloque que lo soporten, incluso en plataformas de 32 bits como la i386. Así se puede llegar a sistemas de archivo de hasta 16 TB en hardware corriente.

Una mejora más de escalabilidad: el kernel no sólo soporta más tipos de dispositivos, sino que además permite disponer de más dispositivos de cada tipo. Bajo todas las iteraciones de Linux (de hecho, en casi todos los sistemas derivados de UNIX), los usuarios y aplicaciones de un sistema se comunican con los periféricos a través de nodos numerados de dispositivo: se corresponden con las entradas en el directorio "/dev". Los nodos estaban antes limitados a 255 dispositivos "mayores" (en general, a cada tipo de dispositivo se le asignan uno o más nodos) y 255 números "menores" (a su vez, dispositivos del mismo tipo). Por ejemplo, el dispositivo "/dev/sda2" (la segunda partición del primer disco SCSI detectado) se identifica con un número mayor 8, común para todos los discos SCSI, y número menor 2, que indica la segunda partición. Distintos tipos de dispositivo tienen diferentes formas de asignar los números mayores y menores, de forma que es difícil estar seguro del número total de dispositivos disponibles en un sistema Linux. Por desgracia, este esquema deja de funcionar cuando se requiere tener más de 255 dispositivos del mismo tipo en la misma máquina. (Sólo hace falta pensar en almacenamiento centralizado o centros de impresión para ver la importancia de esta limitación.) En Linux 2.6 se han aumentado los límites: ahora hay 4095 tipos mayores de dispositivo y más de un millón de dispositivos disponibles para cada tipo. Con esto tendría que ser suficiente por el momento para cubrir todas las necesidades de hardware.

Interactividad y Velocidad de Respuesta

Además de aumentar la escala, otra prioridad de la nueva versión ha sido hacer que el sistema tenga una respuesta más ágil: no sólo es útil para el usuario final (a nadie le gusta un sistema que tarda en responder), también para aplicaciones críticas donde se requiere precisión absoluta. A pesar de estos cambios, Linux 2.6 no puede considerarse estrictamente como Sistema Operativo en Tiempo Real, ya que no cumple los rígidos criterios que aseguran que todas las acciones ocurren de forma predecible; pero los cambios en velocidad de respuesta deberían ser atractivos para todo tipo de usuarios de Linux. (Dicho esto, hay proyectos externos responsables de parches extraoficiales para operar en Tiempo Real; podrían hacerse oficiales en la próxima gran revisión.)

Una de las mejoras definitivas en Linux 2.6 es que el kernel es por fin interrumpible (preemptible). En todas las versiones anteriores de Linux, el propio kernel no puede ser interrumpido mientras está procesando. (En un sistema multiprocesador, este comportamiento se repetía en cada procesador.) Pero en Linux 2.6, el kernel puede ser detenido a la mitad para que otras aplicaciones sigan corriendo, aunque se esté en medio de un proceso intensivo de bajo nivel. Claro que habrá situaciones en que el kernel no pueda ser interrumpido. En condiciones normales, la mayoría de los usuarios nunca han visto retrasos anormales, ya que no suelen pasar de una fracción de segundo. Aun así, muchos usuarios pueden notar que el sistema se comporta más ágilmente en modo interactivo al activar esta opción; la entrada de usuario parecerá más rápida, incluso en un sistema colapsado.

Los subsistemas de entrada/salida (I/O, o Input/Output) también han sido remodelados, con vistas a hacerlos menos sensibles bajo grandes cargas. Los cambios incluyen la reescritura completa del planificador de entrada/salida, el código del kernel que decide qué procesos leen de qué dispositivos y cuándo. La nueva capa da más seguridad de que los procesos no se atasquen esperando su turno, pero sin perder las optimizaciones anteriores que aseguran que las lecturas ocurran de la forma más eficiente para cada dispositivo.

En la parte de las aplicaciones de software, un cambio que permitirá una respuesta más ágil de los programas (al menos los que lo utilicen) es el soporte de "futexes" (o Fast User-Space Mutexes, "Mutexes Rápidos en Espacio de Usuario"). Los futexes son una forma de serializar eventos desde múltiples procesos o hilos sin pisarse unos a otros (la temida "condición de carrera", o race condition). Al contrario que las operaciones tradicionales con mutex, incluidas en muchas librerías de hilos, este concepto está respaldado por el kernel, aunque sólo en el caso de contención; además permite fijar prioridades para que las aplicaciones o hilos más críticos accedan antes al recurso en disputa. Al permitir que un programa priorice sus tareas, las aplicaciones pueden volverse más ágiles en las tareas críticas.

Además de todo lo anterior, hay unos cuantos cambios menores que mejoran la interactividad y el rendimiento en muchos casos. Entre ellos están la eliminación de más casos de "Gran Bloqueo del Kernel" [Big Kernel Lock] (bloqueos poco afinados, usados por Linux en los inicios del soporte para multiprocesador), optimizaciones en la lectura anticipada de ficheros, escritura retrasada, en la manipulación de ficheros pequeños, y otros similares.

Otras Mejoras

Linux, como todo el movimiento de Código Abierto en general, siempre ha sido ejemplar en su defensa de los estándares abiertos. Otro cambio importante en la versión 2.6 es la reescritura de la infraestructura del kernel para manejo de hilos, de forma que se pueda correr la Librería Nativa de Hilos POSIX, NTPL [Native POSIX Thread Library] sobre ella. Esto conlleva mejores rendimientos en procesadores Pentium Pro y superiores, cuando se hace uso de muchos hilos, y el sector empresarial lleva tiempo esperándolo. (De hecho, RedHat ya lo ha retro-implementado en Linux 2.4, y lo incluye desde la versión 9 de RedHat y 3.0 de Advanced Server.) Este cambio incluye nuevos conceptos en el espacio de hilos de Linux: grupos de hilos, memoria local para hilos individuales, señales tipo POSIX, y demás. Y esto puede perjudicar a las aplicaciones que, en lugar de seguir las especificaciones, dependen de "linuxismos" ya desfasados; así ocurre con ciertas versiones de Java desarrolladas por Sun. Dado que los beneficios son mayores que el perjuicio, y vista la importancia de los promotores, está claro que las aplicaciones importantes serán adecuadas a los nuevos mecanismos poco después de la versión definitiva.

Subsistema de Módulos y el Modelo Unificado de Dispositivos

En los sistemas operativos modernos, los subsistemas para manejo de dispositivos tienen cada vez más importancia, ya que tienen que enfrentarse a muchísimos buses internos y externos, y no pasa un día sin que aparezcan dispositivos nuevos (y casi fabricantes). Es lógico por tanto que la siguiente actualización del kernel Linux haya mejorado tanto en el cargador de módulos como en la organización interna de la información. Hay desde cambios puramente cosméticos (los módulos de drivers pasan a tener extensión ".ko", por "objeto de kernel" [kernel object], en lugar de la tradicional ".o") hasta una remodelación completa del modelo unificado de dispositivos. En todos ellos se hace especial énfasis en la estabilidad, y se intentan superar las limitaciones encontradas en anteriores versiones.

Dentro del subsistema de módulos, hay unos cuantos cambios para mejorar la estabilidad. El proceso para descargar módulos intenta asegurarse de que no se acceda a un módulo que está siendo desactivado, lo que puede causar cuelgues. También puede deshabilitarse la descarga de módulos en sistemas críticos. Por último, se hace hincapié en la necesidad de que los módulos informen al kernel de qué periféricos soportan. Hasta ahora, el módulo sabía con qué dispositivos puede entenderse, pero esta información no llegaba a salir de ellos. Bajo el nuevo modelo, se hace posible la gestión inteligente de hardware mediante herramientas externas, tales como kudzu de RedHat. Por supuesto, cuando el usuario está seguro de que determinado driver puede ser usado con cierto dispositivo, puede forzar su utilización.

El modelo de dispositivos del nuevo kernel tiene otros cambios aparte de la simple carga de módulos: no se trata sólo de determinar qué módulos van con qué hardware, sino de asumir responsabilidad de todo el hardware en un sistema dado. Hasta la versión 2.2 de Linux, el modelo de dispositivos era el mínimo indispensable: casi toda la responsabilidad dependía de los módulos individuales. Este esquema funcionaba bien, pero para las funcionalidades avanzadas del hardware moderno (especialmente ACPI), no basta con que el sistema controle qué recursos usa cada dispositivo: además tiene que saber a qué bus está conectado, qué sub-dispositivos hay, en qué estado están, si puede reconfigurarse para usar otros recursos en caso de contención, e incluso conocer dispositivos para los que el módulo no se ha cargado todavía. Linux 2.4 avanzó por este camino, al ser la primera versión que unificaba las interfaces de los buses PCI, PC Card, e ISA Plug-and-Play bajo una estructura única con una interfaz común. Linux 2.6, mediante el subsistema de objetos de kernel ("kobject"), pasa a abarcar todos los dispositivos en un sistema. Además dispone de un interfaz centralizado que gestiona detalles como la cuenta de referencias y expone toda la información a través de una nueva API, usada dentro del kernel y exportada al espacio de usuario.

Ahora que el kernel dispone de toda esta información sobre el hardware, Linux es capaz de dar soporte a funcionalidades avanzadas (tanto en portátiles como en sistemas de escritorio) que requieren conocimiento detallado del hardware. La aplicación más visible está en la proliferación de aparatos "en caliente" ["hot plug"] como PC Cards, dispositivos USB y Firewire, y PCI en caliente. Es difícil verlo ahora, pero Linux no llegó a hacerlos funcionar bien hasta el kernel 2.2. Hoy día la conexión en caliente se da por supuesta, y es el momento justo para una infraestructura de dispositivos que elimina las diferencias entre un dispositivo en caliente y uno tradicional. Ya que el subsistema del kernel no diferencia explícitamente entre el hardware encontrado en el arranque y el que se descubre después, la infraestructura para conectar nuevos dispositivos se ha simplificado. Una segunda aplicación del nuevo subsistema es el ahorro de energía. El nuevo estándar en gestión de energía desde hace pocos años, llamado ACPI o "Interfaz Avanzado de Configuración y Energía" [Advanced Configuration and Power Interface], empezó a ser utilizado en la versión anterior del kernel. Al contrario que el estándar anterior APM "Gestión Avanzada de Energía" [Advanced Power Management], los sistemas operativos que lo utilizan deben avisar individualmente a cada dispositivo compatible del cambio en el modo de energía. Está claro que, sin un conocimiento completo del hardware instalado, es imposible que el kernel sepa a qué dispositivos avisar y en qué orden. Aparte de estos dos ejemplos, hay aplicaciones menos obvias en otras áreas, como auditoría y monitorización de hardware, que se beneficiarán del nuevo modelo centralizado.

La última ramificación de la infraestructura centralizada, y la que será más visible al exterior, es el nuevo sistema de archivo del kernel llamado 'sysfs', que viene a hacer compañía a 'proc' para procesos, 'devfs' para dispositivos, y 'devpts' para pseudo-terminales UNIX98. Este sistema de archivos, montado por defecto en '/sys', es una representación estructurada del árbol de dispositivos tal y como lo ve el kernel (con excepciones). Incluye unos cuantos atributos de los dispositivos detectados: nombre del dispositivo, recursos IRQ y DMA, modo de energía, y demás. Un aspecto que puede ser confuso al principio es que la información referente a dispositivos actualmente en el directorio '/proc/sys' acabará probablemente en el nuevo sistema de archivo. Este cambio no se ha completado (todavía), así que estamos seguramente en una fase de transición.

Soporte de Hardware

Según Linux ha ido ganando aceptación a lo largo del tiempo, cada nueva iteración del kernel ha ampliado espectacularmente el soporte a nuevos dispositivos -- tanto en tecnologías emergentes (USB en la 2.4) como en compatibilidad hacia atrás (MCA en la 2.2). Según nos acercamos a la versión 2.6, quedan pocos dispositivos no soportados. Linux ha llegado a abarcar casi todo el universo conocido en términos de hardware. Por esta razón, la mayoría de los cambiosen el soporte de hardware i386 se han encaminado a la robustez más que a la expansión, con notables excepciones.

Dispositivos Internos

Casi tan importante como el tipo de procesador, los buses de sistema tienen la misión de cimentar las comunicaciones internas de un ordenador. La arquitectura PC ha visto pasar tecnologías de bus en abundancia, desde la primigenia ISA (en el IBM PC original) hasta los actuales buses inalámbricos. Linux ha estado siempre a la última en soporte de buses y dispositivos de consumo, y se ha mostrado bastante más reticente en incorporar tecnologías poco habituales.

Las mejoras en soporte de dispositivos internos están muy extendidas en todo el espectro. Un caso de dispositivos poco usados es el soporte de las extensiones Plug-and-Play para ISA, o "Arquitectura Estándar de la Industria" [Industry Standard Architecture]. Linux no llegó a tener soporte para PnP hasta la versión 2.4. Ahora se ha completado al incluir PnP a nivel de BIOS, una base de datos de dispositivos y mejoras en la compatibilidad. La suma de todos los cambios es que Linux ha pasado a ser un sistema operativo Plug-and-Play real, y puede especificarse así en la BIOS. Otros buses antiguos como MCA, Arquitectura de Microcanal [Microchannel Architecture], y EISA, "ISA Extendido" [Extended ISA], han pasado a ser parte del nuevo modelo de dispositivos, y tienen sus propias bases de datos específicas. Pasando ya a las nuevas incorporaciones, Linux 2.6 incluye unas cuantas mejoras incrementales en el subsistema PCI, o Interconexión de Componentes Periféricos [Peripheral Component Interconnect], entre otras: PCI en caliente, gestión de energía, soporte para múltiples tarjetas AGP (Puerto de Gráficos Acelerado [Accelerated Graphics Port], una versión de alta velocidad del bus PCI), y demás. Por último, además de todos los buses "reales", en Linux 2.6 se ha añadido el concepto de bus "existente": específico a cada arquitectura, contiene todos los dispositivos que se dan por hechos en un sistema. Por ejemplo, en un PC se incluyen aquí los puertos serie, paralelo y PS/2 -- dispositivos que están presentes pero que no aparecen en ningún bus del sistema. Este soporte puede traer complicaciones en algunas plataformas, como obligar a hablar directamente con el firmware de la máquina, pero tiene la ventaja de que todos los dispositivos están incluidos en el nuevo paradigma de drivers.

Dispositivos Externos

Es innegable que hay pocos cambios en los buses internos en el reciente ciclo de desarrollo; pero en la "zona caliente" de los dispositivos externos, nos encontramos con todo lo contrario. El cambio más importante es seguramente el soporte para USB 2.0, también conocido como USB de alta velocidad. Se pasa con ello a permitir transferencias de 480 megabits por segundo, en lugar de los 12 Mbit/s del USB tradicional. Hay un estándar relacionado, USB On-The-Go ["sobre la marcha"], que es una variante punto a punto del protocolo USB para conectar dispositivos directamente (como puede ser una cámara digital a una impresora, sin PC en medio); no soportado todavía por Linux 2.6 (aunque hay parches externos disponibles). Además de incluir nuevos dispositivos, se ha mejorado la forma en que los dispositivos USB se enumeran internamente, lo cual quiere decir que pueden conectarse muchos más dispositivos de cada tipo a la vez. Aparte de los cambios más importantes, esta versión se ha centrado en aspectos como compatibilidad, estabilidad y simplificación; lo que debería mejorar el soporte de dispositivos USB para todos los usuarios.

Visto desde el campo opuesto, Linux 2.6 incluye por primera vez la capacidad de ser un dispositivo USB, en lugar de aparecer como servidor. Así se puede, por ejemplo, conectar una agenda electrónica corriendo Linux a un PC, y cada lado sabe qué protocolo usar. Es un campo nuevo, pero esencial para la aceptación de Linux en dispositivos integrados.

Dispositivos Inalámbricos

Durante los últimos años, las tecnologías inalámbricas han llegado por fin al público. A menudo da la impresión de que los cables tienen las horas contadas -- salvo quizás el cable de corriente. La aplicación más vistosa está en el uso de redes inalámbricas, seguidas de cerca por dispositivos como PDAs.

Puede establecerse una distinción genérica entre largo alcance (como puede ser AX.25 sobre radio amateur) y corto alcance (normalmente basado en 802.11, aunque hay protocolos más antiguos). El soporte de ambos ha estado presente en Linux desde los primeros tiempos (v1.2), y los subsistemas correspondientes se han actualizado para el desarrollo de la versión 2.6. El mayor cambio en el corto alcance es la integración de todos los protocolos y tarjetas bajo un interfaz común, como parte del subsistema inalámbrico. Así se resuelven unas cuantas incompatibilidades menores en la forma de tratar a cada dispositivo, y se refuerza el soporte de Linux para el subsistema mediante un conjunto de herramientas en espacio de usuario que funcionan con todos los dispositivos soportados. Aparte de esta estandarización, Linux 2.6 trae varias mejoras generales. capacidad de notificar un cambio de estado (como puede ser estado de "roaming" en teléfonos móviles), un cambio en TCP para manejar correctamente los cortes y retrasos momentáneos, tan comunes en las comunicaciones inalámbricas. Debido a la presión de soportar dispositivos inalámbricos bajo Linux 2.4, los cambios ya se han adaptado a este kernel.

En el espacio genérico de dispositivos inalámbricos, hay avances similares. El protocolo de infrarojos IrDA, así llamado por el grupo Infrared Data Associates, ha visto mejoras en la gestión de energía y su integración en el modelo de drivers del kernel. Los avances reales se han hecho en el campo de los dispositivos Bluetooth. El protocolo inalámbrico Bluetooth está diseñado para comunicaciones de corto alcance y bajo consumo, y no está limitado por la línea de visión como los infrarrojos. El protocolo en sí se ha diseñado para funcionar bajo cualquier condición, y se ha usado en PDAs, teléfonos móviles, impresoras, e incluso equipamiento más exótico, dentro del automóvil. Tiene dos modos de funcionamiento: SCO, "Orientado a Comunicación Síncrona" [Synchronous Connection Oriented], para aplicaciones de audio con pérdida; y L2CAP, o "Protocolo de Adaptación y Enlace Lógico" [Logical Link Control and Adaptation Protocol], para una conexión más robusta con retransmisión. El protocolo L2CAP tiene además otros subprotocolos (como son RFCOMM para redes punto a punto o BNEP para redes tipo Ethernet.) El soporte de Linux para aplicaciones Bluetooth sigue creciendo, y puede esperarse que madure de forma significativa cuando los dispositivos estén más extendidos. Vale la pena mencionar que las últimas versiones del kernel 2.4 integran soporte Bluetooth limitado.

Soporte a Dispositivos de Bloque

Buses de Almacenamiento

Los buses de almacenamiento dedicado, como son IDE/ATA "Electrónica de Disco Integrada/Tecnología Avanzada de Conexión [Integrated Drive Electronics/Advanced Technology Attachment] y SCSI, o Interfaz de Sistema para Ordenadores Pequeños [Small Computer System Interface], también han sido actualizados durante el ciclo 2.6. Los cambios más grandes se centran en el subsistema IDE, reescrito (y vuelto a reescribir) durante el desarrollo del nuevo kernel, resolviendo los problemas de escalabilidad y eliminando otras limitaciones. Por ejemplo, las grabadoras de CD IDE pueden accederse ahora directamente a través del driver IDE, lo que resulta en una implementación mucho más limpia que antes. (Previamente se necesitaba usar también un driver especial de emulación SCSI, resultando en un proceso confuso y a menudo problemático.) Se ha añadido soporte para dispositivos de alta velocidad Serial ATA (S-ATA), con velocidades de transferencia superiores a 150 MB/s. Para SCSI, hay un gran número de mejoras a lo largo y ancho del sistema para ampliar el soporte y la escalabilidad. Para sistemas antiguos, Linux soporta ahora dispositivos SCSI-2 multipath con más de 2 LUNs en el mismo dispositivo. (SCSI-2 es la versión anterior del estándar SCSI, desarrollado hacia 1994.) Otro cambio importante es que Linux puede ahora revertir a un modo de prueba de cambio, como Microsoft Windows, para ser compatible con los dispositivos que no siguen la especificacion al pie de la letra. Según se han ido estabilizando estas tecnologías, el soporte de Linux ha seguido el mismo camino.

Aunque no es un bus de almacenamiento propiamente dicho, Linux incluye ahora soporte para acceder la BIOS EDD, o Dispositivo de Disco Mejorado [Enhanced Disk Device], de una máquina directamente para ver cómo el servidor ve sus propios dispositivos. La BIOS EDD incluye información sobre todos los buses de almacenamiento disponibles en el sistema y accesibles por la BIOS, incluyendo IDE y SCSI. Además de obtener la configuración y otros datos de los dispositivos, hay varias ventajas adicionales. Por ejemplo, este nuevo interfaz permite que Linux sepa desde qué disco arrancó el sistema, lo cual puede ser útil en sistemas nuevos donde este dato no es tan obvio como podría parecer. Los programas de instalación inteligentes pueden así tenerlo en cuenta para instalar el cargador de arranque de Linux en el disco adecuado, por ejemplo.

Además de lo anterior, hay que resaltar de nuevo que todos los tipos de dispostivos (hardware, inalámbricos, y almacenamiento) han sido integrados en el subsistema de dispositivos de Linux. En algunos casos, los cambios son puramente de apariencia. En otros, hay cambios más importantes (llegando incluso a modificar la lógica de detección de dispositivos).

Sistemas de archivo

El uso más visible de dispositivo de bloque en un sistema Linux (y de hecho en cualquier sistema) es la creación de un sistema de archivos, y el soporte de sistemas de archivo en Linux ha mejorado bastante desde la versión 2.4 en varios sentidos. Destacamos entre ellos el soporte de atributos extendidos y de controles de acceso tipo POSIX.

Centrémonos de momento en los sistemas de archivo convencionales de Linux: los más asociados con un sistema Linux "puro" son el segundo y tercer sistema de archivos extendido, "ext2" y "ext3". (ReiserFS es la tercera opción más popular.) Ya que son los sistemas que más afectan a los usuarios, han sido los más retocados durante el desarrollo de Linux 2.6. Un cambio fundamental es el soporte de atributos extendidos, o metadatos que pueden insertarse en el sistema de archivos para un fichero cualquiera. Algunos de estos atributos extendidos serán utilizados por el sistema, y estarán disponibles solamente para root. Otros muchos sistemas operativos, como Windows y MacOS, ya utilizan atributos de este tipo extensivamente. Por desgracia, la herencia de sistemas operativos UNIX no trae en general soporte para atributos extendidos, y muchas utilidades de usuario (como 'tar') tendrán que ser actualizadas antes de poder leer y restaurar esta información adicional. El primer uso real del nuevo subsistema de atributos extendidos es implementar listas de control de acceso POSIX, una ampliación de los permisos estándar UNIX que permite un control más preciso. Además de estos cambios para ext3, hay otros menos importantes: el tiempo de ejecución del diario [journal] para el sistema de archivo es configurable, por ejemplo para usuarios de portátiles donde se tendría que acelerar el disco duro desde un modo de ahorro de energía; las opciones por defecto para montar una unidad pueden almacenarse dentro del propio sistema de archivos (de forma que no hay que especificar el directorio al montar); y se pueden marcar directorios como "indexados" para acelerar las búsquedas de ficheros en su interior.

Además de estos cambios hay un número de mejoras, tanto dentro como fuera del sistema de archivos, para aumentar la compatibilidad con los sistemas operativos dominantes en la plataforma PC. Para empezar, Linux 2.6 incluye soporte para el Gestor Lógico de Discos [Logical Disk Manager] de Windows (también conocido como "Discos Dinámicos"): la nueva tabla de particiones adoptada por Windows 2000 en adelante, que permite redimensionar y crear múltiples particiones. (Aunque, como es lógico, no es de esperar que los sistemas Linux lo utilicen en sistemas nuevos.) En Linux 2.6 se ha mejorado también (y reescrito) el soporte para el sistema de archivo NTFS, y es posible montar una unidad NTFS en modo lectura/escritura. (La posibilidad de escritura está todavía en fase experimental; es posible que no llegue a estar disponible en la versión final del kernel.) Por último, el soporte en Linux de FAT12 (el sistema de archivo DOS utilizado en sistemas DOS obsoletos y en discos flexibles) ha sido mejorado, para evitar errores presentes en algunos reproductores MP3 que utilizan este formato. Aunque no sea tan usado en general, se ha mejorado la compatibilidad de Linux con OS/2 añadiendo el uso atributos extendidos en el sistema de archivo HPFS. Como en versiones anteriores, las nuevas funcionalidades de Linux 2.6 resaltan la importancia de Linux como "navaja suiza" de los sistemas operativos, al ser compatible con muchos otros.

Por si fuera poco, hay un gran número de cambios dispersos en el soporte de sistemas de archivo en Linux. Se ha reescrito el sistema de cuotas [quota], de acuerdo con el aumento en número de usuarios permitido en el sistema. Pueden marcarse directorios individuales como síncronos, de forma que todos los cambios (como ficheros adicionales) sean atómicos; este cambio es muy útil en programas de correo y bases de datos, además de permitir una recuperación más robusta en caso de fallo de disco. Se ha añadido compresión transparente (una extensión propia de Linux) al sistema de archivo ISO9660 (utilizado en CD-ROMs). Finalmente, se ha creado un nuevo sistema de archivo basado en memoria ("hugetlbfs"), exclusivamente para el uso de bases de datos de memoria compartida.

Soporte de Entrada / Salida

Todo ordenador tiene un lado "externo": dispositivos de entrada y salida, las piezas que siempre parecen menos importantes de lo que son. A este lado tenemos cosas obvias como ratones y teclados, tarjetas de audio y vídeo, y también otras menos aparentes como joysticks y dispositivos de accesibilidad. Muchos de los subsistemas de Linux han crecido durante el ciclo de desarrollo de la versión 2.6, aunque el soporte de los dispositivos más comunes ya estaba en un estado bastante maduro. En su mayoría, las mejoras de Linux 2.6 en estos dispositivos vienen dadas directamente por el soporte mejorado a buses externos, tales como teclados Bluetooh y similares. Hay sin embargo varias áreas en las que Linux viene bastante mejorado.

Dispositivos de Interfaz Externa

Un gran cambio interno en Linux 2.6 es la reescritura de gran parte de la capa de interfaz externa. Esta capa es el centro de la interacción del usuario con un sistema Linux, incluyendo la salida de vídeo, ratón y teclado. En la nueva versión del kernel, esta capa se ha reestructurado para ser mucho más modular que antes. Es ahora posible crear un sistema Linux completamente "ciego", sin salida de vídeo ni nada parecido. El mayor beneficio de esta estructura modular será para los desarrolladores de sistemas integrados, que fabrican dispositivos sólo accesibles mediante red o puerto serie; pero los usuarios corrientes verán mejoras derivadas de la modularización, ya que el sistema no da por hecho nada acerca de dispositivos o arquitecturas. Por ejemplo, antes se suponía siempre que un PC necesitaba un controlador estándar de teclado AT (i8042); la nueva versión de Linux elimina este requisito, lo que permite eliminar código innecesario de sistemas más modernos.

El manejo en Linux de la salida de vídeo ha sido también modificado, aunque muchos cambios sólo afectan a las configuraciones que utilizan el subsistema interno de framebuffer presente en el kernel. (La mayoría de las máquinas Intel con Linux no usan estas configuraciones, pero esto no es así en otras arquitecturas.) En mi opinión personal, el mejor cambio es que el logotipo de arranque (un pingüino muy chulo, por si nunca lo has visto) soporta ahora resoluciones de hasta 24 bits por pixel. Aparte de esto, la consola tiene nuevas características como re-escalado y rotación (para PDAs y similares), y soporte de aceleración en más hardware. Y por último, Linux tiene ahora soporte para interrogar a los monitores VESA (Video Electronics Standard Association ["Asociación Estándar de Vídeo Electrónico"] acerca de sus capacidades, aunque XFree86 y muchos instaladores de distribuciones cubren ya este detalle en el espacio de usuario.

Aparte de las mejoras grandes, Linux 2.6 tiene también ciertos cambios más modestos en la interacción con el usuario. Se incluye ahora soporte para pantallas táctiles. Los drivers de ratón y teclado se han actualizado también, y estandarizados para exportar un solo nodo de dispositivo ("/dev/input/mouse0", por ejemplo) sea cual sea el hardware o el protocolo. Se pueden utilizar en la nueva versión ratones exóticos, como pueden ser algunos con múltiples ruedas. El mapeo de teclado PC sigue ahora el "estándar" de Windows para teclas extendidas. El soporte de joystick se ha mejorado gracias no sólo a la inclusión de muchos drivers nuevos (incluyendo el gamepad de la X Box), sino también para utilizar características modernas como realimentación por fuerza [force-feedback]. Dejamos para el final el soporte del dispositivo braille TTY Tieman Voyager, que permite a los usuarios ciegos acceder a un sistema Linux. (Un aspecto tan crucial que ya se ha migrado a Linux 2.4.)

Como nota al margen, Linux ha cambiado también el interfaz de peticiones de sistema para permitir el uso de sistemas sin un teclado conectado. El interfaz de peticiones de sistema ("sysrq") es un método para que los administradores de sistemas puedan no sólo obtener información de debug en la consola local, sino también forzar un reinicio, remontar los sistemas de archivo como sólo-lectura, y otras brujerías. Ya que Linux 2.6 puede ejecutarse en un sistema totalmente "ciego", es también posible disparar estos eventos desde el sistema de archivo /proc. (Por supuesto que si el sistema se cuelga y necesitas forzarlo a hacer cosas, no te va a servir de mucho.)

Audio y Multimedia

Una de las caracterísiticas nuevas de Linux 2.6 más esperadas por los usuarios de escritorio es la inclusión de ALSA ("Arquitectura Avanzada de Sonido Linux" [Advanced Linux Sound Architecture"] en lugar del sistema de sonido antiguo. Conocido como OSS o "Sistema Abierto de Sonido" [Open Sound System], ha estado en Linux desde los primeros tiempos, con todas sus limitaciones de arquitectura. La primera mejora en el nuevo sistema es que ha sido diseñado desde el principio para poder ser usado desde distintos hilos, procesos y procesadores, arreglando los problemas de los drivers antiguos que no funcionaban fuera del paradigma "un-ordenador-un-procesador". Aún mejor, los drivers se han diseñado de forma modular (los usuarios de versiones antiguas de Linux recodarán que la modularidad se metió con calzador en el sistema de sonido en los tiempos del kernel 2.2), de forma que se mejora el soporte de tarjetas de sonido múltiples (incluyendo distintos tipos de tarjetas). Sin importar lo bonito que sea por dentro, el sistema no sería una mejora para los usuarios si no tuviera funcionalidades con tirón; por suerte, hay un montón de éstas. Resaltaremos el soporte de nuevo hardware (incluyendo audio USB y dispositivos MIDI), reproducción y grabación full-duplex, mezcla no entrelazada por hardware, soporte para dispositivos de edición, y varias otras cosas. Tanto si eres un melómano como si sólo quieres reproducir MP3s, el soporte de sonido mejorado de Linux te parecerá un paso importante.

Estos días, los usuarios no se conforman con audio; también quieren soporte de hardware novedoso como webcams, adaptadores de radio y televisión, y cámaras de vídeo digital. En los tres casos, el soporte de Linux ha mejorado bastante para la versión 2.6. Aunque Linux haya permitido usar (más o menos) tarjetas de radio desde hace varias iteraciones, el soporte para tarjetas sintonizadoras de televisión y cámaras de vídeo apareció hace sólo una o dos versiones. Este susbistema, conocido como Video4Linux (V4L), ha sido actualizado a fondo durante la nueva edición del kernel, incluyendo una limpieza de la interfaz y soporte para más funcionalidades de las tarjetas. La nueva API no es compatible con la anterior; las aplicaciones que la usen tendrán que ser reescritas para el nuevo kernel. Y en un nuevo frente, Linux 2.6 incluye por primera vez soporte para hardware de Emisión de Vídeo Digital, o DVB [Digital Video Broadcasting]. Este tipo de hardware, común en los aparatos decodificadores, puede usarse para convertir un servidor Linux en un aparato tipo Tivo [una grabadora digital de vídeo por cable], usando el software adecuado.

Mejoras en el Software

Redes

La infraestructura avanzada de redes ha sido desde siempre uno de los puntos fuertes de Linux. Considerado globalmente como sistema operativo, y no sólo como kernel, Linux soporta casi todos los protocolos dominantes en el planeta, incluyendo TCP/IP (v4 y v6), AppleTalk, IPX, y otros. (El único protocolo no soportado que pueda uno pensar es el protocolo obsoleto y enredado de IBM y Microsoft, NetBEUI.) Como muchos de los cambios en otros subsistemas, la mayoría de los cambios en hardware de red soportado en Linux 2.6 están bajo el capó, y no son aparentes para un usuario común. Esto incluye modificaciones de bajo nivel para beneficiarse del nuevo modelo de dispositivo, y actualizaciones en muchos drivers. Por ejemplo, Linux incluye ahora un subsistema propio MII ("Interfaz Independiente del Medio" [Media Independent Interface], o IEEE 802.34), usado por bastantes drivers de red. Antes cada driver tenía su propia implementación de MII en los dispositivos que lo soportaban, con ligeras diferencias y la consiguiente duplicación de código; el nuevo subsistema unifica todos los esfuerzos. Hay también otras mejoras, como actualizaciones en RDSI [o ISDN].

En la vertiente de software, uno de los cambios más importantes es el soporte de Linux de los protocolos IPsec, o IP Security [Seguridad IP]: una colección de protocolos para IPv4 (IP "normal") e IPv6 que incorporan seguridad criptográfica a nivel de protocolo de red. La gestión de seguridad a este nivel implica que las aplicaciones no tienen que preocuparse de ello. Es parecido a SSL y demás protocolos de tunneling/seguridad, pero a nivel más bajo. La encriptación en el kernel incluye actualmente variantes de SHA ("algoritmo de hash seguro", o secure hash algorithm), DES ("estándar de encriptación de datos", o data encryption standard), y otros.

Siguiendo con los protocolos, Linux mejora el soporte para redes multicast [multitransmisión]: aquéllas en las que un paquete se envía a varios ordenadores al mismo tiempo. (Por contraste, en las redes punto a punto tradicionales sólo se pueden enviar datos a un ordenador a la vez.) Esta funcionalidad se utiliza principalmente en sistemas de mensajería (como Tibco) y software de audio- o video-conferencia. Linux 2.6 soporta ahora varios protocolos SSM ("Multitransmisión a Fuente Específica", o Source Specific Multicast), como son MLDv2 ("Descubrimiento de Oyente Multitransmisión", o Multicast Listener Discovery) y IGMPv3 ("Protocolo de Mensajería de Internet Group", o Internet Group Messaging Protocol): estándares utilizados por muchos fabricantes de equipamiento de red de gama alta, tales como Cisco.

En Linux 2.6 se ha creado una pila separada para LLC, "Control Lógico de Enlace" [Logical Link Control], IEEE 802.2: un protocolo de bajo nivel utilizado por debajo de varios otros protocolos de alto nivel como pueden ser NetBeui de Microsoft, IPX, y AppleTalk. Esta reestructuración se ha completado con la reescritura de los drivers para IPX, AppleTalk, y Token Ring, de forma que utilicen el nuevo subsistema común. Además, se ha desarrollado (externamente) una pila para NetBEUI; queda por ver si se integrará en el kernel estándar.

Aparte de estos cambios, vale la pena mencionar varias modificaciones menores. Se ha actualizado bastante la implementación de IPv6: ahora puede ser utilizado en redes Token Ring. El soporte para NAT/enmascaramiento [masquerading] se ha extendido para soportar protocolos multiconexión (H.323, PPTP, etc.) Para el desarrollo de routers basados en Linux, la configuración de VLANs ha dejado de ser "experimental".

Sistemas de Archivo por Red

Superpuesto al soporte robusto de protocolos de red de Linux, está el igualmente robusto soporte para sistemas de archivo por red. Montar un sistema de archivo por red (e incluso exportarlo) es una de las pocas operaciones de alto nivel en las que el kernel tiene algo que decir. (Hay alguna otra, por ejemplo el "dispositivo de bloque en red"; ésta no se ha visto modificada en 2.6, y además suele usarse en aplicaciones muy especializadas en las que al final se acaba utilizando un sistema de archivo.) Todas las otras operaciones de red se realizan en espacio de usuario, y fuera del dominio de desarrollo del kernel.

En Linux, al igual que otros clones de UNIX, el sistema de archivo de red más utilizado se llama, sorprendentemente, "Sistema de Archivo En Red" [Network File System], o NFS: un protocolo para compartir ficheros bastante complejo originado para UNIX (ejemplificado en la excelente implementación de Solaris). El protocolo de transporte primario puede ser TCP o UDP; después está el protocolo independiente RPC ("llamada a procedimiento remoto", o remote procedure call). Por encima se utilizan varios sub-protocolos, incluyendo uno dedicado para "montar" y NLM ("gestor de bloqueo en red", o network lock manager) para bloquear ficheros. (La implementación comúnmente usada está además bastante ligada a otros protocolos RPC, como son NIS --"servicio de información en red" [network information service]-- para autentificación. NIS y sus descendientes no se utilizan en Linux debido a su escasa seguridad de principio.) Es quizás debido a esta compleja estructura de protocolos que NFS no se ha adoptado como un protocolo estándar de internet.

En Linux 2.6, este sistema de archivo nativo ha visto muchas actualizaciones y mejoras. La mayor de ellas es el soporte experimental para la reciente revisión NFSv4 del protocolo, tanto para cliente como servidor. (Hasta ahora sólo se soportaban las versiones v2 y v3.) Se puede por tanto utilizar ahora autentificación más segura (criptográfica), bloqueo más inteligente, y soporte de pseudo-sistemas de archivo, entre otras cosas. No se han implementado en Linux todas las funcionalidades de NFSv4, todavía, pero el soporte es bastante estable y podría usarse en producción. Además, la implementación de servidor NFS se ha mejorado para ser más escalable (hasta 64 veces más usuarios concurrentes, con colas de petición más grandes), más completa (puede servir sobre TCP, además de sobre UDP), más robusta (los drivers de sistema de archivo pueden adaptar la manera en que se exportan los ficheros, adaptándola a sus necesidades) y más mantenible (gestión a través de un sistema de archivo 'nfsd', en lugar de mediante llamadas al sistema). Hay bastantes otros cambios menos visibles, como separación de lockd y nfsd, y soporte para redes con copia cero [zero-copy] en interfaces compatibles. NFS es ahora más fácil de asegurar, al permitir que el administrador asigne el puerto de lockd en el kernel. El cliente de NFS también ha mejorado bastante gracias a la implementación del protocolo RPC, incluyendo infraestructura para caché, control de conexión por UDP, y otras mejoras en TCP. El soporte de Linux para usar volúmenes compartidos NFS como sistema de archivo para root (para sistemas sin disco) se ha mejorado, ya que el kernel soporta por este motivo NFS sobre TCP.

Aparte de mejorar el soporte para sistemas de archivo usados en UNIX, Linux 2.6 también trae bastantes modificaciones en sistemas de archivo de red propios de Windows. El sistema de compartición de archivos estándar en los servidores Windows (al igual que en OS/2 y otros sistemas operativos) es el protocolo SMB ("bloque de mensajes de servidor", o server message block); el soporte para este protocolo en el kernel de Linux es excelente desde hace mucho tiempo. Sin embargo, Windows 2000 pasó a utilizar una extensión del protocolo SMB conocida como CIFS ("sistema de archivo de internet común", o common internet filesystem). Esta versión pretendía refinar y simplificar ciertos aspectos de SMB que se habían vuelto totalmente inmanejables. (La definición del protocolo en sí era bastante vaga, hasta el punto de que la versión para Win95/98/ME llegó a ser incompatible con la versión para WinNT/Win2k.) El uso de CIFS intentó resolver la situación, y además añadió soporte para UNICODE, mejora en el bloqueo de ficheros, y enlaces duros, eliminando las dependencias restantes de NetBIOS; y además con nuevas funcionalidades para los usuarios de Windows. Dado que a los usuarios de Linux no les gusta quedarse al margen, en Linux 2.6 se ha reescrito desde cero el código para montar unidades CIFS de forma nativa. También se incluye soporte para extensiones UNIX de SMB y CIFS, que permiten a Linux acceder a ficheros desconocidos en Windows (como pueden ser nodos de dispositivo y enlaces simbólicos) en aquellos servidores SMB que lo soportan (por ejemplo Samba). Aunque no sea tan común hoy día, los desarrolladores de Linux no se han olvidado del todo de los usuarios de Novell NetWare. Linux 2.6 ahora permite a los clientes montar el máximo de 256 comparticiones sobre un solo volumen Netware, utilizando el driver nativo para sistemas de archivo NCP ("Protocolo Principal Netware", o NetWare Core Protocol).

También se ha añadido soporte en Linux 2.6 para los nuevos sistemas de archivo de red distribuidos, que permiten que cualquier fichero en un volumen lógico sea distribuido en múltiples nodos. Además del sistema de archivo CODA, introducido en Linux 2.4, ahora se incluyen un par de sistemas distribuidos: AFS e InterMezzo. AFS, el sistema de archivo Andrew [Andrew filesystem] (así llamado por haberse originado en la CMU [Carnegie Mellon University]), está limitado por el momento a operaciones de sólo-lectura, aunque hay una versión bastante más completa disponible fuera del kernel. El segundo sistema distribuido, InterMezzo (también originado en la CMU), es nuevo en Linux 2.6, y permite operaciones más sofisticadas como desconexión (de forma que se trabaja sobre ficheros cacheados localmente) y es más adecuado para aplicaciones de alta disponibilidad, en las que debe garantizarse que el almacenamiento nunca esté fuera de servicio (o que, si lo está, no lo parezca). Tiene también aplicaciones para sincronizar datos entre múltiples ordenadores, como un portátil y un ordenador de sobremesa. Muchos de los proyectos para implementar estos nuevos sistemas de archivo se han originado en Linux, de forma que el soporte para estas funcionalidades está a la última.

Miscelánea

Seguridad

Uno de los cambios poco publicitados en Linux 2.6 es la abundancia de mejoras centradas en la seguridad. Como avance fundamental, toda la seguridad del kernel (poderes del superusuario en un sistema operativo tipo UNIX) se ha modularizado, de forma que sea uno más de entre los posibles modelos de seguridad disponibles. (Aunque hasta el momento, sólo se dispone del módulo de seguridad estándar, y un ejemplo de cómo desarrollar uno nuevo.) Como parte de este cambio, todas las partes del núcleo están ahora basadas en el modelo de "capacidades", lo que permite un control de accesos más refinado que el antiguo sistema de "superusuario". Casi todos los sistemas Linux seguirán teniendo una cuenta "root" con acceso total, pero esto permite crear un sistema tipo Linux en el que no se dé por sentado su existencia. Otro cambio en la seguridad es que los módulos binarios (drivers de fabricante, por ejemplo) no pueden "sobrecargar" las llamadas del sistema con las suyas propias: la tabla de llamadas del sistema está ahora oculta. Como resultado, se restringe bastante lo que los módulos propietarios pueden hacer en el kernel, y posiblemente se cierren algunos agujeros legales en la licencia GPL. El último cambio con implicaciones de seguridad es que Linux con el nuevo kernel puede ahora usar generadores de números aleatorios en hardware (como los incluidos en algunos procesadores nuevos), en lugar de depender de un reservorio de entropía basado en fluctuaciones aleatorias del hardware, por bueno que haya resultado.

Linux Virtualizado

Una de las características más interesantes de Linux 2.6 es su inclusión de una arquitectura en "modo usuario". Este es, en esencia, una variante de Linux que corre sobre sí mismo (como si fuera otra familia de hardware), lo cual permite crear un entorno totalmente virtual de Linux sobre Linux. La nueva instancia corre como si fuera una aplicación normal. "Dentro" de la aplicación, se pueden configurar interfaces de red falsos, sistemas de archivo, y otros dispositivos que usan drivers especiales para comunicarse con la copia anfitriona de Linux de forma segura. Esto ha resultado ser bastante útil, tanto para desarrollo (depuración, perfilado [profiling]...) como para hacer análisis de seguridad y trampas para intrusos. Aunque el usuario normal no lo necesite para nada, está muy bien echarlo a correr en tu máquina. (¡Impresiona a tus colegas!)

Portátiles

Ya se han descrito más arriba varias mejoras de propósito general que afectan a los usuarios de portátiles (mejor soporte para APM y ACPI, comunicaciones inalámbricas, etc.); pero hay otras dos características difíciles de clasificar que serán de interés para ellos. La primera es la funcionalidad de suspender-a-disco para los usuarios móviles de Linux. La segunda es la capacidad de los procesadores mobile modernos de cambiar de velocidad (y consumo de energía) basado en si estás enchufado o no.

Aplicaciones Existentes

Aunque Linux 2.6 sea una revisión importante, las diferencias en aplicaciones ejecutadas en modo usuario será mínimas. La única excepción a esta regla es en gestión de hilos [threading]: algunas aplicaciones que iban bien bajo 2.2 o 2.4 tendrán que ser modificadas, al no estar soportadas ciertas operaciones de hilos. Sin embargo, se trata de la excepción más que de la regla. Está claro que las aplicaciones de muy bajo nivel (como utilidades de gestión de módulos) van a dejar de servir. Además, los directorios /proc y /dev han sufrido cambios, que afectan tanto a ficheros como al formato en que están escritos; todas las aplicaciones que dependan de ellos pueden dejar de funcionar. (Especialmente según vayan moviéndose cosas al sistema de archivo virtual "/sys"; en el caso de "/dev", se pueden configurar nombres de dispositivo compatibles con las utilidades existentes.)

Pero éstos no son los únicos casos de entornos que pueden verse afectados. Primero, es necesario formatear los ficheros de swap muy antiguos (de Linux 2.0 y anteriores) antes de usarlos con la versión 2.6. (Dado que los ficheros de swap no contienen información permanente, esto difícilmente será un problema para ningún usuario.) El demonio kHTTPd que sirve páginas web directamente se ha eliminado también, ya que se han resuelto la mayoría de los cuellos de botella que impedían a Apache, Zeus y compañía servir a la misma velocidad que el kernel. Han desaparecido los mecanismos de detección automática de "gestores de disco" para DOS/Windows, tales como OnTrack y EzDrive, que permitían el uso de discos grandes con BIOS antiguas. Y por último, el uso de un sector de arranque especial del kernel para arrancar desde floppy también se ha eliminado: es necesario a partir de ahora utilizar SysLinux.

El Trasfondo de la Cuestión

Este documento se ha basado sobre todo en muchísimas horas mirando los cambios en BitKeeper, viendo el código fuente y jugando con él, la lectura de listas de correo, y un montón de búsquedas en Google y Lycos buscando documentación sobre esto y lo de más allá. En consecuencia, hay sitios en los que es probable que se me hayan pasado cosas o donde no haya entendido algo, y otros sitios en los que me haya precipitado a incluir cosas que luego no se hayan materializado. (He puesto especial cuidado en revisar las dos versiones de soporte para IDE aparecidas en este tiempo, pero se me pueden haber pasado otros casos.) Ya que mi investigación está también basada en las páginas web de varios proyectos del kernel, he tenido que vigilar que los cambios aceptados en el kernel no pertenecieran a versiones anteriores. Si encuentras errores en este documento, o quieres enviarme correos para ver qué tal me va, hazlo a jpranevich <en> kniggit.net.

Se puede encontrar información adicional sobre el estado de Linux 2.6 en bastantes lugares online. Guillaume Boissiere mantiene la página http://www.kernelnewbies.org/status, que sigue cada versión en detalle. Dave Jones mantiene su propia lista semi-oficial de cambios en http://www.codemonkey.org.uk/docs/post-halloween-2.6.txt [hay traducción disponible en http://www.terra.es/personal/diegocg/post-halloween-2.6.es.txt por cortesía de Diego Calleja]. Ambos sitios están un poco anticuados, pero yo he tardado tres meses en actualizar mi documento, así que ¿quién soy yo para quejarme?

La última versión de este documento en inglés está siempre en http://kniggit.net/wwol26.html.

Traducciones

¿No hablas castellano ni inglés? Se ha traducido este documento (o una versión anterior) a varios lenguajes.

Chino - http://www-900.ibm.com/developerWorks/cn/linux/kernel/l-kernel26/index.shtml (Stone Wang, et. al.)
Checo - http://www.linuxzone.cz/index.phtml?ids=10&idc=782 (David Haring)
Francés - http://dsoulayrol.free.fr/articles/wonderful_2.6.html (David Soulayrol)
Húngaro - http://free.srv.hu/b/e/behun/pn/modules.php?op=modload&name=News&file=index&catid=&topic=12 (Ervin Novak) (Sin terminar.)
Portugués (BR) - http://geocities.yahoo.com.br/cesarakg/wwol26-ptBR.html (Cesar A. K. Grossmann)

Una versión resumida en alemán apareció también en el número de 09/2003 de la revista LanLine.

Además, me he enterado de que puede haber traducciones al italiano y al coreano, pero no sé por dónde andan. Si te enteras de otra traducción que añadir a la lista, házmelo saber.

[Las notas del traductor se encuentran entre corchetes; por favor avísame a chenno3 <en> yahoo punto com si encuentras algún error.]


Este documento es Copyright 2003 por Joseph Pranevich. Se permite la redistribución online sin modificaciones. Se anima a la distribución offline (completa o en parte), pero por favor avísame por correo primero para discutir los detalles. También se anima a realizar traducciones; por favor avísame por correo primero para coordinarlas.

Copyright de la traducción 2003 Alejandro Fernández. Se permite la redistribución bajo las mismas condiciones del original.