26 de septiembre de 2013

¿Cómo será recordado Steve Ballmer? El fin del "Embrace, extend and extinguish"

El anuncio de salida de Microsoft de Steve Ballmer desató una serie de resúmenes sobre sus años de CEO. Se ha destacado el aumento de recaudación la brutal caja registradora de la compañía, de 20 mil a 70 mil millones anuales, el éxito de la Xbox, la silenciosa y sorprendentemente poco comentada consolidación de sus plataformas para servidores. Pero se han recordado sobre todo sus fallos, sobre todo su incapacidad para anticipar la revolución portáctil.

Y este es un punto en el que no estoy de acuerdo, porque supone olvidar cuál fue el rasgo identitario fundamental de Microsoft en los 90: Embrace, extend and extinguish. El Microsoft pre-Ballmer, además de ser una definición académica de monopolio, era una máquina de desplazar a competidores, cuando no de llevarlos a la bancarrota.

Ganó a Digital Research y DR-DOS, ganó a Apple e IBM(!) la carrera por convertirse en el principal sistema operativo gráfico, ganó la batalla a Novell por las redes, ganó a Borland/Delphi, Wordperfect, Lotus, Netscape; cada una de esas empresas ocupaban nichos que han generado montones de millones de dólares, cuando no plataformas sobre las que han creado industrias. Intentaron parar los pies a Java como lenguaje para aplicaciones de escritorio con extensiones propietarias y con ActiveX en la web. Su desviación de los estándares de internet hizo que, durante años, fuese imposible usar la web a diario sin encontrarse con páginas que sólo eran compatibles con Internet Explorer.

Eran los tiempos en que Bill Gates aun no gastaba sus rentas en ayudar a países pobres, por aquel entonces era profundamente odiado por representar la cara más salvaje y avasalladora del capitalismo. Y no sin razón: recuerden que la publicación de correos de la compañía en un caso anticompetencia revelaron textos suyos tan constructivos como este:

"One thing we have got to change in our strategy—allowing Office documents to be rendered very well by other peoples browsers is one of the most destructive things we could do to the company. We have to stop putting any effort into this and make sure that Office documents very well depends on PROPRIETARY IE capabilities. Anything else is suicide for our platform. This is a case where Office has to avoid doing something to destroy Windows"
O este:

"One thing I find myself wondering about is whether we shouldn't try and make the "ACPI" extensions somehow Windows specific. If seems unfortunate if we do this work and get our partners to do the work and the result is that Linux works great without having to do the work. Maybe there is no way Io avoid this problem but it does bother me. Maybe we couid define the APIs so that they work well with NT and not the others even if they are open. Or maybe we could patent something relaled to this"
Las empresas que fueron arrolladas por la apisonadora de Redmond fueron, por lo general, iniciativas de gente que tuvo una idea brillante e intentó comercializarla. Microsoft no se destacó por generar esa clase de ideas, sino por intuir la relevancia de las ideas de otros, copiarlas y ser mejores que el original, ser muy agresivo comercialmente, y vencer a su competidor. Una habilidad que, aunque no tenga tanto aura, tiene mucho mérito. En los cursos que Microsoft impartía a los nuevos trabajadores enseñaban que su táctica a la hora de afrontar a un nuevo competidor empezaba por simplemente anunciar que entraban a competir con ellos, el mero anuncio hacía que el competidor se pusiera nervioso y cometiera errores estratégicos, que Microsoft aprovechaba para entrar a rematar.

Volviendo a Ballmer, decía que no estaba de acuerdo con que se le recuerde por haberse perdido la revolución de los dispositivos portáctiles. Como acabo de recordar, Microsoft por regla bastante general llegó tarde a todo: llegó tarde a los sistemas operativos gráficos, a los procesadores de texto, a Internet, a los navegadores web. Que Microsoft perdiera el tren de los dispositivos portáctiles no es, por tanto, nada nuevo; lo relevante es que, esta vez, ha sido incapaz de identificar la tendencia, crear rápidamente un producto alternativo mejor, y competir agresivamente hasta batir a sus competidores.

También ha sido incapaz de competir -y sorprende que, entre tanta moda portáctil, casi se olvide- con Google. Casi se diría que no les interesa: recuerden que tuvieron, por ejemplo, una web de vídeos análoga a youtube y una red social. En ambos casos se dieron por vencidos y cerraron, una actitud aletargada inimaginable en la antigua Microsoft. Windows Phone surgió mal, tarde, y se desarrolla a velocidad glacial. Internet Explorer tiene un desarrollo lento y está siendo incapaz de frenar su caída. Messenger fue eliminado sin intentar hacer algo decente con él, prefiriendo pagar una millonada por Skype.

En suma, Microsoft se ha convertido en una multinacional aburguesada que es incapaz de seguir el hilo de sus competidores, que en muchos casos directamente desiste de hacerles frente, y si lo intenta es recurriendo a su multimillonaria, pero no infinita, billetera; una compañía que, según sus trabajadores, está plagada de la clase de reuniones inútiles y entorpecimientos burocráticos de los que se burlan las tiras cómicas de Dilbert. Una compañía que cada vez es más un fantasma lejano de la Microsoft agresiva que se comía el mundo. El responsable de ese cambio es Steve Ballmer, y por ello es por lo que debería ser recordado.

3 de septiembre de 2013

Las novedades de Linux 3.11

Ya se ha anunciado la versión 3.11 del kernel Linux. Esta versión incorpora soporte para una nueva bandera O_TMPFILE en open(2) que permite la creación sencilla de archivos temporales seguros, soporte de gestión de energía dinámica para todas las GPUs Radeon desde la r600, soporte preliminar de NFS 4.2 y de etiquetado SELinux en NFS, soporte experimental de clientes del sistema de archivos distribuido Lustre, seguimiento detallado de las páginas a las que escribe un proceso, soporte de huge pages en ARM y soporte de KVM y Xen en ARM64, mejoras de escalabilidad de la cola de mensajes SYSV IPC, polling de tarjetas de red con latencia baja y un cache de swap comprimido. 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.


· Nueva flag O_TMPFILE para open(2) para reducir las vulnerabilidades de archivos temporales

O_TMPFILE es una flag nueva para open(2)/openat(2) que facilita la creación de archivos temporales seguros. Los archivos que sean abiertos con O_TMPFILE son creados, pero no son visibles en el sistema de archivos. Y tan pronto como se cierre el descriptor de archivo, es eliminado, al igual que ocurriría con un archivo que hubieras abierto y desenlazado.

Hay dos usos para este tipo de archivos. El primero es la creación de archivos temporales sin condiciones de carrera (se elimina cuando se cierra; nunca es accesible desde ningún directorio, no hay necesidad de crearlos con un nombre de archivo único - básicamente, un tmpfile(3) bien hecho). Otro uso es crear un archivo inicialmente imposible de acceder, escribir lo que quieras en él, hacer fchmod()/fchown()/fsetxattr() como desees, y entonces enlazarlo al sistema de archivos atómicamente, ya preparado.

 · Soporte experimental de gestión de energía dinámica en tarjetas gráficas AMD Radeon

Los drivers para tarjetas gráficas AMD han incorporado soporte para la gestión dinámica de energía para todas sus GPUs, de la r600 hasta el día de hoy. Este código es experimental, y está desactivado por el momento. Para activarlo es necesario pasar el parámetro radeon.dpm=1 al módulo.

· Soporte experimental como cliente del sistema de archivos Lustre

Lustre es un sistema de archivos distribuido que soporta múltiples clústers de computación con cientos de miles de nodos clientes, decenas de Petabytes de almacenamiento en cientos de servidores, y más de un Terabyte por segundo de E/S agregada. Es el sistema de archivos para clusters más popular en la computación de alto rendimiento: seis de los 10 mejores y 60 de los 100 mejores supercomputadores del mundo usan Lustre.

Esta versión añade soporte como cliente, pero es experimental, el código no está muy limpio y necesita estar un tiempo en drivers/staging. Ver drivers/staging/lustre/TODO para más detalles. Para más detalles sobre Lustre, visitar http://lustre.org.

· Soporte preliminar de NFS 4.2 y SELinux Labeled NFS

Esta versión incorpora soporte preliminar para clientes de NFS 4.2, una nueva versión del estándar NFS que está siendo desarrollada. Para más detalles sobre qué novedades incorpora este nuevo estándar, vea este post.

Esta versión también ha incorporado soporte para Labeled NFS, que añade soporte completo de SELinux a NFS. Hasta ahora, los montajes NFS eran tratados como una única etiqueta de SELinux, típicamente nfs_t; o como mucho permitían al administrador cambiar la etiqueta por defecto con la opción --context de mount. Con Labeled NFS, es posible tener muchas etiquetas diferentes. Esto es útil para asegurar las aplicaciones de virtualización con una etiqueta en la imagen virtualizada. También es útil para exportar directorios home desde NFS, y así poder confinar aplicaciones para que sólo puedan escribir en ciertos lugares, en lugar de tener permisos para escribir en cualquier directorio.

· Seguimiento detallado de qué páginas escribe una aplicación


Esta versión incorpora un mecanismo que ayuda a seguir qué páginas escribe una aplicación. Esta característica es utilizada principalmente por el proyecto checkpoint-restore, pero puede ser usado para conseguir mejores estadísticas y construir mejores aplicaciones de profiling. Para más detalles, ver Documentation/vm/soft-dirty.txt

· Soporte de huge pages en ARM, soporte de KVM y Xen en ARM64

La arquitectura ARM ha incorporado soporte de huge pages tanto para las CPUs de 32 bits como para las de 64 bits. Esta implementación permite el mapeado de secciones de 2MB; la configuración de páginas de 64K no está soportada. También añade soporte para huge pages transparentes; cuando estén activadas, el kernel intentará mapear páginas anónimas en secciones de 2MB cuando sea posible.

Esta versión también incorpora soporte de virtualización KVM y Xen para la arquitectura ARM64.

· Mejoras de escalabilidad de la cola de mensajes SYSV IPC

Esta mejora continúa el trabajo que comenzó con las mejoras de escalabilidad en los semáforos SYSV que fue incluído en Linux 3.10.

Como los semáforos, la lista de mensajes también abusa del bloqueo utilizado por el código SYSV IPC, sosteniéndolo para operaciones como comprobaciones de seguridad y de permisos, lo que daña la escalabilidad y el rendimiento. En esta versión, se han utilizado una mezcla de algoritmos sin bloqueos, secciones críticas acortadas, estadísticas individuales para cada semáforo y ajustes del uso del caché de CPU para hacer la lista de mensajes más veloz y escalable.

· Polling de red con baja latencia

Los drivers de Linux modernos no notifican al sistema de la llegada de nuevos paquetes con interrupciones, porque con los actuales requisitos de ancho de banda se generarían cientos de miles de interrupciones por segundo, que no pueden gestionarse sin degradación del rendimiento. Por esa razón se utiliza un sondeo periódico a la tarjeta (polling), llamado NAPI en Linux. Sin embargo, el intervalo del sondeo añade latencia. Esta versión permite a las aplicaciones requerir en cada socket un intervalo de sondeo menor.

· Zswap: un caché de swap comprimido

Citando de este artículo de LWN recomendado:

"Zswap es un caché para páginas de swap. Toma las páginas que están en proceso de ser enviadas al espacio de intercambio e intenta comprimirlas en un espacio de memoria RAM. Si este proceso tiene éxito, se retrasa el proceso de escritura al espacio de intercambio y, en muchos casos, se evita completamente. Las consecuencias son una reducción de E/S y ganancias de rendimiento en los sistemas que utilizan a menudo el espacio de intercambio". Para mas detalles y mediciones, ver el artículo de LWN recomendado. (Nota: esto viene a ser el equivalente Linux de la compresión de memoria de OS X 10.9)


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