29 de abril de 2014

Firefox 29, una actualización diferente

Desde que Firefox adoptó el calendario de publicación de nuevas versión "Rapid Release", las nuevas versiones de Firefox se han sucedido una tras otra cada seis semanas. Desde que se adoptó el actualizador automático silencioso, la gente ni tan siquiera se entera de cuando se publican. Por eso me resulta curioso que haya una versión que haya dado tanto que hablar, incluso antes de ser publicada: Firefox 29, la versión que incorpora Australis, la nueva interfaz.

Los cambios de interfaz suelen despertar los instintos más conservadores de la gente. Es sabido que páginas como Facebook reciben un volumen enorme de críticas cada vez que hacen un cambio sustancial, críticas que a las dos semanas desaparecen. En otros casos, como el de Windows 8, no desaparecen y se acaban corrigiendo los fallos. ¿Qué clase de cambio será Firefox 29?

A favor del primer caso tiene el llevar en desarrollo cinco años y múltiples retrasos por razones de estabilidad, un tiempo en el que han tenido tiempo de dejar la interfaz como deseaban. Se oyen críticas, pero la de inestabilidad no es la más común. Por otra parte, se acusa al diseño de parecerse a Chrome, pero es que el diseño de Chrome no es precisamente un fracaso. Y hay que tener muy en cuenta que el Classic Theme Restorer va a ser una válvula de escape muy importante.

A favor del último caso tiene, sin embargo, los síntomas de Windows 8 y otros grandes rediseños de interfaz polémicos: gente quejándose durante meses y meses, desarrolladores que afirman escuchar a esa gente pero sin que eso se materialice en algo más que palabras, decisiones aparentemente absurdas para muchos, partes de la interfaz que dejan de ser configurables...y, sobre todo, hay una minoría que tenía configuraciones de la interfaz muy específicas y en varios casos Australis rompe completamente con sus hábitos. Romper con los hábitos de la gente siempre crea problemas, incluso con aquellos a quienes les gusta la nueva interfaz.

Creo que al final la interfaz Australis acabará siendo aceptada. Quizás haga falta esperar a mejoras próximas -sacar una versión cada 6 semanas tiene sus ventajas- para corregir algunos problemas y al desarrollo de extensiones que satisfagan todas las necesidades, pero dudo que veamos un apocalipsis de Firefox, especialmente cuando las alternativas viables son Chrome e IE, opciones aun peores para la clase de usuario que odia Australis.

20 de abril de 2014

Baloo, o Nepomuk 2.0

Se ha publicado KDE 4.13 hace unos días, y como la mayor parte de programadores están trabajando en KDE 5 en esta versión la principal novedad ha sido lo que el anuncio llama "nueva búsqueda semántica". Lo de "búsqueda semántica" no es más que un término complicado para describir un intento de construir escritorios que trasciendan la filosofía de archivos y directorios y estén basados en alguna clase de base de datos que permitan almacenar metadatos relacionados con los archivos (remitente, URL de origen, comentarios, valoración de 0 a 5 estrellitas, indexado del texto de archivos al estilo spotlight, etc etc) y también metadatos no relacionados con archivos que están relacionados con otros metadatos.

Como se puede intuir, el nivel de abstracción y ofuscación que reina alrededor de estos conceptos es muy notorio, y es de la clase de cosas que "huele" a complejidad innecesaria. Y ciertamente ese también parece ser el problema que ha rodeado a Nepomuk, la funcionalidad de escritorio semántico de KDE, especialmente cuando funciona conjuntamente con Akonadi, la parte del escritorio semántico que se encarga de suministrar información semántica de aplicaciones como kmail, kaddressbook o kontact a Nepomuk y al mismo tiempo funciona como "proxy" entre esas aplicaciones.

Mucha gente no entenderá qué acabo de escribir, yo mismo he tenido que leer esto para recordar las diferencias entre ambos, sintetizar las ideas con las que se justifica este software es casi imposible. Lo que mucha gente si sabe, sin embargo, es que al arrancar KDE se encuentran con diversas partes de nepomuk y akonadi que consumen memoria, especialmente la instancia mysql de Akonadi, algo que para mucha gente es bloatware incompatible con la idea de un escritorio bien diseñado (algunos asumen, erróneamente, que akonadi almacena tu correo en mysql, lo cual no es cierto, la instancia mysql sólo almacena un caché del directorio maildir local). Desactivar Akonadi y Nepomuk es la rutina de muchos usuarios de KDE. Además, mucha gente ha dejado de usar aplicaciones como kmail debido a la percepción de lentitud incorporada desde la migración a akonadi.

Nada de esto es sorprendente y, sin embargo, como usuario de kmail siempre he mantenido la fe en la mejora a largo plazo de akonadi. Intentar ir más allá de la metáfora de archivos/directorios es inevitable. Es más, creo haber recalcado en este blog que tiene muchísimo mérito que un proyecto como KDE, con tan pocos recursos, haya decidido investigar en este tipo de escritorios. Ningún otro escritorio, libre o privado, se ha atrevido a ir tan lejos. WinFS fue el intento de Microsoft de construir algo similar y ya saben como acabó, y spotlight de OS X es simplemente búsqueda. Aunque con dificultades y quejas, KDE ha llegado donde multinacionales del sector no se han atrevido, y eso tiene su mérito.

Y quizá como recompensa de su esfuerzo y constancia, en KDE 4.13 se recogen algunos frutos. Nepomuk almacenaba sus datos en RDF, un formato estandarizado por la W3C para  la "semantic web". Los desarrolladores han tomado nota durante estos años que hay tres casos principales de uso de nepomuk, y se han dado cuenta de que precisamente por ser RDF tan genérico y obtuso, resultaba difícil optimizar para esos casos. En lugar de intentar usar un sólo formato y una sola base de datos para todo, se han dado cuenta que podían prescindir de RDF y su enorme complejidad de "ontologías" añadida. En su lugar, se utilizan diferentes "backends" con bases de datos diferentes y optimizadas para cada caso. Baloo -el nombre de este nuevo reemplazamiento de nepomuk- se encarga de acceder a cada una de ellas cuando sea necesario.

Una de las ventajas más notorias es que ahora Akonadi se convierte en un simple backend de Baloo: Antes, Nepomuk necesitaba indexar los contenidos de Akonadi, lo cual implicaba que parte de los datos de aplicaciones de KDE PIM tenían que estar duplicados en ambas bases de datos (!!), de hecho había un proceso dedicado exclusivamente a sincronizar la replicación de datos entre ambas bases de datos (!!!!). Ahora sólo existe la base de datos de Akonadi, y Baloo simplemente accede a ella. Puede parecer una mejora de sentido común, pero sin la persistencia de KDE y los desarrolladores de nepomuk no se hubiera alcanzado.

La otra gran ventaja es que ha mejorado el rendimiento. En mi caso, he comprobado que la búsqueda integrada Ctrl+F de dolphin es sorprendentemente rápida incluso con búsquedas que devuelven decenas de miles de resultados, lo cual me hace plantearme seriamente usarlo a diario. También he notado que algunas operaciones de kmail que solían ser lentas, como las búsquedas, se han vuelto prácticamente instantáneas. En general el rendimiento parece haber mejorado drásticamente (aunque, desgraciadamente, no he visto ningún benchmark), y es de esperar que mejore aun más en próximas versiones, a medida que se consolide. Tan seguros están los desarrolladores de las mejoras que han rediseñado el módulo de configuración de nepomuk y han eliminado -no sin polémica- la opción gráfica para desactivarlo.

Resumiendo, todo el trabajo y dificultades acumuladas en nepomuk y en el concepto de escritorio semántico no ha sido en balde.

6 de abril de 2014

Las novedades de Linux 3.14

Ya se ha anunciado la versión 3.14 de Linux. Entre las novedades de esta versión destacan un planificador de procesos para tareas que tengan requisitos de tiempo real, la estabilización de un sistema de compresión de memoria, un port del validador de bloqueos a espacio de usuario, la habilidad para almacenar propiedades en inodos en Btrfs, soporte para ejecutar comandos tras un evento en la infraestructura de trazado, aleatorización del espacio de direcciones del kernel, fusión automática de paquetes en cierta clase de conexiones TCP, y un nuevo planificador de paquetes de red para luchar contra el bufferbloat. También se han incluido drivers nuevos y muchas otras mejoras y pequeños cambios. La lista completa de cambios, en inglés, puede encontrarse aquí, como siempre.

· Planificador de procesos "deadline" para planificación de tiempo real
Normalmente los sistemas operativos proporcionan prioridades en el planificador de procesos, cuanta más prioridad tiene un proceso, más tiempo de ejecución puede conseguir ese proceso respecto a otros con prioridades menores. En Linux, los usuarios configuran las prioridades con valores de -20 a 19 utilizando la herramienta nice(2). Adicionalmente, Linux soporta la noción de "clases de planificación", en cada clase hay una política de planificación diferente, por ejemplo, hay una clase SCHED_FIFO con una política FIFO "el primero que entra, el primero que sale", y una política round-robin en  SCHED_RR.

Este sistema de prioridades no es, sin embargo, el más apropiado para tareas que requieren tiempo real. En esta versión Linux implementa una alternativa que está diseñada sobre ideas que parten de la investigación en sistemas de tiempo real: planificación "deadline" ("plazos" de tiempo), que ha sido implementada como una nueva política de planificación, SCHED_DEADLINE.

La planificación "deadline" deja atrás la noción de prioridades. En su lugar, los procesos proporcionan tres parámetros: tiempo de ejecución, periodo y plazo. A una tarea que esté planificada bajo la política SCHED_DEADLINE, se la garantiza que obtendrá "tiempo de ejecución" microsegundos de ejecución cada "periodo" microsegundos, y ese "tiempo de ejecución" estará disponible dentro de "plazo" microsegundos desde el inicio del periodo. El planificador de tareas utiliza esa información para ejecutar el proceso con el plazo más cercano al momento actual, un comportamiento más cercano a los requerimientos de los sistemas de tiempo real. Para más detalles sobre los algoritmos de planificación, ver la documentación.

· zram: compresión de memoria considerada estable
zram crea dispositivos de bloques en la memoria RAM. Todo lo que escrito a esos dispositivos de bloques es comprimido. Si los dispositivos de bloque zram son utilizados como espacio de intercambio, cuando el sistema intente mover liberar memoria enviando porciones al espacio de intercambio, en realidad lo estará moviendo de una zona de la memoria a otra, excepto que los datos movidos habrán sido comprimidos antes de ser copiados a su destino. Esto funciona en la práctica como un sistema de compresión de memoria capaz de mejorar la respuesta en sistemas con cantidades de memoria limitadas. Zram está siendo utilizado por compañías de TV, Android 4.4, Cyanogenmod, Chrome OS, Lubuntu...

Zram ha estado en "staging" desde Linux 2.6.33. En esta versión, zram ha sido movido fuera de staging, a drivers/block/zram.

· Btrfs: Propiedades de inodo
Esta versión añade infraestructura para añadir parejas nombre/valor como xattrs a los inodos en Btrfs. El propósito de estas parejas es almacenar propiedades para los inodos, tales como la compresión. Estas propiedades pueden heredarse; esto significa que cuando el inodo de un directorio tiene la propiedad compresión activada, todos los inodos que sean creados en ese directorio serán también comprimidos. Los subvolúmenes pueden tener también propiedades asociadas, y pueden hederarse del subvolumen padre. Esta versión añade una implementación de propiedades, llamada "compresión", cuyos valores pueden ser "lzo" o "zlib".

· Soporte para ejecutar comandos en los eventos de trazado
La infraestructura de trazado en Linux permite registrar sondas en las funciones del código como eventos (para más detalles, ver Documentation/trace/events.txt). Esta versión permite que estos eventos desencadenen la ejecución de comandos. Estos comandos pueden tener varias formas, por ejemplo podrían activar o desactivar otros eventos o invocar el volcado de pila. Cualquier comando puede tener incorporado además un filtro de eventos, de ese modo el comando será invocado solamente si el evento pasa por el filtro asociado

Por ejemplo, este comando causa el volcado de pila las primeras cinco veces que hay una petición de kmalloc que pide >= 64KB de memorua: # echo 'stacktrace:5 if bytes_req >= 65536' > \ /sys/kernel/debug/tracing/events/kmem/kmalloc/trigger

Para más detalles, ver Sección 6 de Documentation/trace/events.txt

· Las sondas de espacio de usuario tienen acceso a todos los argumentos
Las sondas de espacio de usuario son una característica de Linux 3.5 que permite activar sondas en programas de espacio de usuario. Esta versión permite que las sondas de espacio de usuario (uprobes) tengan acceso a todo tipo de argumentos en las funciones de los programas: pila de memoria, deference, bitfield, retval y offset de archivo. Para más detalles, aquí.

· Validador de bloqueos en espacio de usuario
El kernel Linux ha tenido (desde 2.6.18) un validador de bloqueos que permite encontrar fallos en la programación de los bloqueos en tiempo de ejecución. Esta versión permite ejecutar el validador de bloqueos de Linux en espacio de usuario, haciendo posible depurar problemas de bloqueo en espacio de usuario.

· Espacio de direcciones del kernel aleatoria
Esta versión permite aleatorizar la dirección física y virtual en la que se descomprime la imagen del kernel, lo cual ayuda a bloquear ciertos tipos de exploits que confían en conocer la localización de las direcciones del kernel.

· TCP automatic corking
Cuando las aplicaciones hacen llamadas pequeñas y consecutivas a write()/sendmsg(), el kernel intenta fusionarlas, para disminuir el número de paquetes enviados en total, esta característica se llama "automatic corking". Las aplicaciones aun pueden usar TCP_CORK para conseguir un comportamiento óptimo cuando sepan cómo o cuando tengan que "uncork" sus sockets. Se añade una nueva sysctl (/proc/sys/net/ipv4/tcp_autocorking), que por defecto está activada. Para benchmarks y más detalles, ver commit

· Antibufferbloat: planificador de paquetes "Proportional Integrarl controller Enhanced"
Bufferbloat es un fenómeno consistente en la creación de demasiados búffers en la red, lo cual causa excesiva latencia y fluctuaciones. A medida que más aplicaciones interactivas (VoIP, streaming de vídeo, transacciones financieras) funcionan sobre Internet, esos defectos empeoran el rendimiento de la aplicación. Ha habido varias mejoras y características en las últimas versiones de Linux que tratan de frenar ese problema.

Esta versión añade un nuevo planificador de paquetes: PIE(Proportional Integral controller Enhanced), que puede controlar la latencia media de la cola a un valor determinado. Los resultados han demostrado que PIE puede asegurar latencia baja  y conseguir una utilización alta de los enlaces en situaciones de congestión. El diseño añade una sobrecarga mínima. Para más información, ver este papel técnico sobre PIEo este borrador del IETF. Todo el código, documentación y scripts y resultados puede encontrarse en ftp://ftpeng.cisco.com/pie/


Y eso es todo. La lista completa de cambios en inglés, aquí.