El Maravilloso Mundo de Linux 2.6 (y III)
Joseph Pranevich - jpranevich <en> kniggit.net
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 invento 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 el usuario corriente.
Esto incluye modificaciones de bajo nivel para beneficiarse
del nuevo modelo de dispositivos, y actualizaciones en muchos
drivers. Por ejemplo, Linux incluye ahora un subsistema propio MII
Media Independent Interface ("Interfaz Independiente del Medio",
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 [ISDN].
En la vertiente de software, uno de los cambios más importantes
es el soporte de Linux de los protocolos IPsec, 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)
e IGMPv3 ("Protocolo de Mensajería del 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], estándar 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 en Red
Superpuesto al robusto manejo de protocolos de red de Linux,
está el igualmente robusto soporte para sistemas de archivo en 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
problemas inherentes de seguridad.) 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.
La de Linux no es una implementación completa de
NFSv4, pero el soporte es bastante estable
y podría llegar a usarse en entornos de 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 modificar 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 común de archivo de internet",
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
en algunos casos 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 no nativos de 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 Netware de Base", o NetWare Core Protocol).
También se ha añadido soporte en Linux 2.6 para los nuevos
sistemas de archivo distribuidos en red, que permiten
que cualquier fichero en un volumen lógico sea distribuido
entre múltiples nodos. Además del sistema de archivo CODA,
introducido en Linux 2.4, ahora se incluyen un par de sistemas
nuevos: 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 éste.
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 mayor, 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 funcionar. 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 nadie.)
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 en 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 para conseguir 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://ftp.kernel.org/pub/linux/kernel/people/davej/misc/post-halloween-2.5.txt.
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 ni 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)
[Castellano -
esta versión (Alejandro Fernández)]
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.
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.