24 de septiembre de 2008

Segun Microsoft, usar Linux en paises emergentes NO es mas caro que Windows

Esa es la conclusion de un estudio financiado por Microsoft (enlace directo al estudio), aunque ellos no lo presentan de ese modo, sino de este otro: "Windows y Linux tienen el mismo coste al utilizarse en grandes cantidades en las escuelas de los paises emergentes". Que Microsoft haya tenido que recurrir financiar un estudio que dice que Linux cuesta lo mismo que Windows en paises emergentes me ha parecido tan divertido, que no he podido evitar hacer telecinquismo, digo amarillismo, sobre el tema. Y dedicarle una entrada.

Y es que cuando una compañia financia uno de esos estudios, suele ser para decir que, por supuesto, es mas barato que el competidor, ofrece mas rendimiento y encima las secretarias mejoran su aspecto fisico usandolo mientras que otras alternativas las hacen envejecer mas rapidamente. ¿Cual sera el TCO real de Windows en paises emergentes (por alguna razon esa expresion me suele recordar a la creacion de la isla de Numenor) para que Microsoft no haya podido financiar un estudio que les deje en mejor lugar y tenga que recurrir a decir: "No, oiga, tengo el mismo precio que mi competidor, puede darme las mismas oportunidades que le da a el". Ni tan siquiera pueden arriesgarse a decir "soy tan barato como Linux", porque eso daria la impresion de que Linux es barato; ni decir "Linux es tan caro como Windows", porque daria la impresion de que Windows es caro. Tienen que decir que el precio es el mismo.

El principio en el que fundamentan su ecuacion de igualdad es que si, las licencias de Windows son mas caras e implican un mayor TCO inicial, pero segun el informe es mayor el coste de la mano de obra de Linux y el coste de la mano de obra termina influyendo mas que lo que se gasta en hardware y software. Algo que es cierto pero...el informe no da datos muy claros. Simplemente tiene una cajita amarilla, muy destacada, donde cuentan que segun los informes de otras compañias que no son ellos, los salarios de profesionales linuxeros en China son un 30-43% mejores que los de profesionales microsoifties, en India el doble, en Pakistan un 12% y en paises occidentales un 20-30%. Pero no cuentan que calculo es el que aplican ellos en sus formulas...en resumen...

...¿soy el unico al que le parece algo sospechoso que el mayor coste de mano de obra en Linux sea la cantidad precisamente necesaria para equilibrar el mayor coste en licencias de Windows? Es decir, no me extrañaria que Linux costara mas. No me extrañaria que Windows costara mas. Pero que cuesten lo mismo....¿casualidades de la oferta y la demanda? ¡Caray!

Sospechemos aun mas: ¿No es raro que, segun las tablas del informe, el coste en hardware de un ultraportatil tipo OLPC sea exactamente el mismo tanto para Linux como para Windows, cuando sabemos que la version de Windows para OLPC no cabia en la memoria flash de 1GB con la que funciona el dispositivo en su version de Linux, y han tenido que añadir tarjetas de memoria de mayor tamaño para poder hacerlo funcionar? Vale, pongamos que el progreso tecnologico de las tarjetas de memoria ha hecho posible tener almacenamiento suficiente para windows y linux sin tener que aumentar el precio, pero aun asi...

En cualquier caso, aun cuando me parece un informe mas que parcial, la conclusion sigue siendo positivo: Los paises emergentes pueden utilizar Linux, y no les saldra mas caro. No lo digo yo, lo dice Microsoft, que aprueba este informe. Lo que es mas, si me lo permiten diria que hasta favorece a Linux: los costes totales son los mismos pero la version de Windows requiere mandar el coste en licencias a un pais extranjero, mientras que con Linux una cantidad equivalente se invierte en mano de obra nacional. El mercantilismo es una completa estupidez cuando se trata de proteger productos nacionales caros frente a alternativas extranjeras baratas, pero cuando el coste total es el mismo...¿que sentido tiene mandar divisas al extranjero? Ademas, apoyando la demanda de mano de obra linuxera local, se genera mas oferta, lo cual a largo plazo equilibra los precios.

Llegados a este punto es cuando ustedes corren a poner en los comentarios que soy un radical linuxero que no atiende a razones.

(En mi blog de farfulleo politico: Una medida simple que nadie propondra: Eliminar el ICO)

23 de septiembre de 2008

Lo que traerá Linux 2.6.27

Falta poco tiempo (una semana o asi) para que salga Linux 2.6.27. He aqui un resumen de las principales novedades (lista completa en ingles, aqui):

  • page cache y get_user_pages() sin bloqueos (lockless): El page cache es el lugar (de la RAM) donde el kernel pone copias de los archivos que estan en el disco para acelerar el rendimiento. Cada instancia de la estructura "mapping" almacena la informacion de cada archivo que tiene copias de sus datos en el page cache. Esa estructura tiene un bloqueo para evitar problemas de concurrencia cuando se accede a ella. Si hay varios procesos que estan accediendo a esa estructura simultaneamente -lo cual, para ser sinceros, no es algo muy comun ni es por lo general un problema- puede formarse cierta contencion en ese bloqueo. Para resolverlo, en Linux 2.6.27 las operaciones de lectura de las estructuras del page cache se haran sin necesidad de adquirir ese bloqueo. Debido al diseño, en el que se evitan tambien ciertas operaciones costosas, tambien se ha mejorado el tiempo de lectura y modificacion del page cache en sistemas monoprocesador.

    get_user_pages(): Existe una tecnica llamada Direct I/O, que consiste en hacer operaciones de I/O saltandose completamente el page cache y todo tipo de gestion de memoria del kernel. Las grandes bases de datos son quienes suelen utilizar estas cosas, porque ellas mismas hacen su propia gestion de memoria a su gusto. get_user_pages() es una funcion interna del kernel encargada de copiar los datos de la memoria del proceso a la memoria del kernel cuando se hace Direct I/O para posteriormente escribirlo en el disco. Sin embargo, esta funcion requiere adquirir un par de bloqueos importantes, que hacen que se forme cierta contencion cuando hay varios threads usando get_user_pages() en un mismo espacio de direcciones. En 2.6.27 se ha añadido la funcion get_user_pages_fast(), cuya funcion basica es la misma, pero esta diseñada para gestionar los casos mas comunes y por tanto puede prescindir de 4 de los 8 argumentos que toma la otra funcion, y puede hacer Direct I/O sin tomar ningun bloqueo. Eso hace que las operaciones de Direct I/O se aceleren considerablemente - un 10% en un benchmark OLTP sobre DB2 en una maquina Intel Quadcore.

  • Ext4: delayed allocation: Esta es una de las grandes promesas de ext4. Se trata de algo que no afecta al formato del disco, es un mero problema de implementacion. En los SO modernos, cuando una aplicacion escribe algo al disco no lo escribe inmediatamente, sino que lo guarda en buffers que seran escritos posteriormente. Sin embargo, por comodidad, la mayoria de sistemas de archivos implementan esta funcion como un caso particular de la funcion general "escribir los datos en el disco". Me explico: en la mayor parte de sistemas de archivos, cuando la aplicacion hace write(), lo que suele hacer el sistema de archivos es llamar a las rutinas de asignacion de bloques libres a los nuevos datos, actualizar el contador de espacio libre, etc....a pesar de que los datos aun no se estan escribiendo y van a pasar un rato en los buffers. Esto es suboptimo por muchas y variadas razones; por ejemplo, un archivo puede consistir de varios write()s y el algoritmo de asignacion de bloques no puede saberlo cuando recibe el primer write(), y por tanto no puede encontrarle un lugar adecuado. La tecnica "delayed allocation" consiste, simplemente, en no llamar a esas rutinas de asignacion de bloques, solo la de actualizar el contador de espacio libre. La asignacion del espacio que los datos van a ocupar en el disco se realiza solamente cuando los datos se van a escribir verdaderamente en el disco. Esta tecnica, utilizada por sorprendentemente pocos sistemas de archivos -XFS, ZFS, reiser 4 y btrfs-, mejora el rendimiento en muchos tipos de carga -en algunos las mejoras son astronomicas- y disminuye la fragmentacion.

  • UBIFS: UBIFS es un sistema de archivos diseñado por Nokia para dispositivos de almacenamiento flash puros. Cuando digo puros, me refiero a que no puede utilizarse en los tipicos lapices USB o discos externos USB hechos con memoria flash. Ese tipo de dispositivos tiene una capa de emulacion que los hace parecer, al exterior, como un dispositivo de bloques normal y corriente. UBIFS esta diseñado para los sistemas que no tienen esa capa. Es mejor que JFFS2 en varios aspectos: rendimiento, el montaje inicial es rapido, resistencia a reinicios a lo bruto...

  • Kexec jump: hibernacion basada en kexec/kdump: Kexec es un sistema que permite cargar un kernel Linux en memoria y ejecutarlo directamente desde el kernel que estas corriendo, sin necesidad de reiniciar. Kdump es un sistema de volcado de memoria del kernel basado en kexec: Se carga al principio del sistema un kernel a prueba de fallos en memoria, y si hay un fallo en el kernel, el codigo de OOPS llama a kexec, ejecuta el kernel a prueba de fallos, se carga ese kernel, y se copia el resto de la memoria del sistema a un archivo - el volcado de memoria. En 2.6.27, estos sistemas se han extendido para una nueva funcion: hibernar el sistema. Se carga un kernel, se ejecuta, ese kernel guarda el contenido de la memoria en un archivo, y se apaga el sistema. Al encender de nuevo el sistema, se carga el archivo con la memoria y se sigue ejecutando.

  • Soporte de integridad de datos en la capa de bloque: Hay sistemas de archivos capaces de usar checksums para detectar corrupcion en un archivo. Sin embargo, esto se detecta solamente al leerlo. SCSI y ATA estan preparando especificaciones y dispositivos que junto a los resultados de las operaciones de escritura devuelven al kernel un CRC de cada sector escrito para que se verifique si no ha habido errores.

  • ftrace: ftrace es un sistema de instrumentalizacion del codigo muy simple nacido en el seno de los parches -rt: se utiliza una extension de gcc para dejar 5 bytes de NOPs en el principio de todas y cada una de las funciones del kernel (no tiene ningun efecto en el rendimiento, incluso en microbenchmarks: las CPUs modernas han optimizado este tipo de secuencias muy bien). Cuando ftrace se activa, esos NOPs se modifican con instrucciones que llaman a ftrace para tomar nota de las funciones que se van llamando. Es muy util para analizar el rendimiento de diferentes partes del codigo. Pero la parte mas util es que ftrace tiene una infraestructura de plugins que ha permitido desarrollar todo tipo de funciones: se pueden analizar los cambios de contexto, la latencia que sufre un proceso desde que es "despertado" por el gestor de procesos hasta que finalmente empieza a ejecutarse, tiempo maximo que se pasa con las interrupciones desactivadas, el tiempo gastado en porciones de codigo donde se deshabilita preempt...ademas de soporte de sysprof.

  • mmiotrace: Instrumentalizacion de las operacion de mmio (memory-mapped I/O: I/O que se hace mapeando parte de la memoria a un dispositivo y escribiendo en la misma). Por lo visto es muy util para hacer ingenieria inversa de los drivers de nvidia^W^Wpropietarios.

  • Capa de red multicola: En las tarjetas de red modernas, especialmente las wireless, estan apareciendo multiples colas, en vez de la tradicionalmente unica: Una para voz, otra para video, otra de baja prioridad para P2P^W"trafico de fondo". En 2.6.27 la capa de red tiene soporte para este tipo de dispositivos.

  • Firmware externo: El firmware de los drivers ha sido extraido de los mismos y centralizado en el directorio firmware/. Este firmware puede ser instalado en /lib/firmware, de manera que cuando los drivers lo necesiten, se llamara al programa que carga firmware externo desde un archivo del disco duro, algo que apreciaran los enfermos de GNUitis. Tambien se puede optar, para quien no les guste esto, por meter todo el firmware en la imagen del kernel.

  • Soporte de webcams mejorado: Se ha incluido el driver gspca, que incluye soporte para la mayor parte de las webcams que quedaban por soportar en Linux.

  • syscalls que crean descriptores de archivo extendidas: UNIX no fue perfecto. Por ejemplo, muchas de las diversas rutinas que crean descriptores de archivo no permiten crear descriptores de archivo con ciertas propiedades que hoy en dia se utilizan. Resulta que poder hacerlo no es un simple capricho - tambien existen ciertos aspectos de esta carencia que pueden vulnerar la seguridad. Para solucionar este problema no habia otro remedio que añadir un porrillo de syscalls nuevas que aceptaran los parametros necesarios. Aunque parezca algo sucio tener que añadir estas nuevas syscalls, lo cierto es que añadirlas es bastante "barato" y no se ha añadido casi nada de codigo.

  • Soporte de chips intel wireless 5000, chips wireless Atheros AR5008 y AR9001, soporte de tarjetas de red Realtek RTL8187y de Atheros L1E Gigabit, muchos otros drivers, soporte mejorado de drivers ya existentes, muchas otras mejoras y pequeños arreglos. Lista completa de cambios aqui.

8 de septiembre de 2008

¿El software libre destruye puestos de trabajo? ¡Ojala!

Eran mas comunes hace algunos años, pero creo que todos nos hemos encontrado en algún foro de Internet la siguiente diatriba:

- Soy programador, y me parece increíble que haya otros programadores que apoyen esta mierda del software libre. Yo trabajo en productos "propietarios", y si nuestros clientes pudieran descargarse programas equivalentes al nuestro totalmente gratis, toda mi empresa se iría a la mierda y yo no tendría donde trabajar. Todos estos hijos de papa que se dedican a programar cosas gratis son una amenaza para todos los informáticos, y si fueran un poco mas maduros verían como el software libre es una amenaza. Cuando tengáis que pagar una hipoteca, el coche y el colegio de unos hijos os daréis cuenta del daño que estáis haciendo. Trabajar gratis para que las empresas se aprovechen de lo que haces es de idiotas. Meteos el software libre por el culo.

Naturalmente, este sujeto tiene una visión del mundo y de la economía muy cateta. Aun sin entrar a discutir si es cierto que el software libre trae paro o no, veamoslo desde otro punto de vista: el de su jefe.

-Jefe: A ver, Manolo, ven a mi despacho. Un cliente me ha pedido X. ¿Cuanto tiempo estimas que tardaríais tu y tu equipo en hacerlo?

-Manolo: Buf....implementar eso afecta a los ajustes de la cache de la trocola con los forlayos y la decantacion de filostros...unos 6 meses, calculo.

-Seguro que estas añadiendo un mes de mas cabrón, pero bueno....por cierto, he leído en una revista "Ejecutivos guapos, ricos y exitosos" algo sobre el software libre...por lo visto es gratis, ¿has pensado en usarlo en el proyecto para terminar antes?

-¡No me mencione a esa gentuza! Si, hay programas gratis que podríamos usar casi inmediatamente, lo que tardamos en hacer las pruebas, pero esos hippis tan solo quiere acabar con empresas comerciales como nosotros y hacer que todo el software sea regalado...¡podría despedirme a mi y a la mitad del equipo! Creo que no debemos hacerles caso, nos hacen daño y no es mas que una moda que pasara dentro de un tiempo...¿por que se ríe?

-Jejeje...jejeje....de una cosa muy graciosa que me ha dicho mi hija hoy...jejeje...¿podrías pasarte el viernes por aquí, para...llamemoslo "revisar" tu contrato?

-Claro, ya era hora de que me mejoraras las condiciones de trabajo...

-Si, jejeje....mejorar....jejeje....venga, ya puedes irte campeón...

Efectivamente, señores: Si el software libre destruye puestos de trabajo de programadores por hacerlos redundantes, sera mas aceptado en las empresas porque se ahorraran esos sueldos. Bienvenidos al mundo real, señores fanáticos del software propietario. Si lo hace o no es otra cuestión, pero en todo caso ¡ojala lo hiciera! Desde un punto de vista económico, seria algo muy beneficioso: Al necesitar -repito, hipotéticamente- menos programadores se reducirían los costes, al reutilizar código quizás se reducirían algo los tiempos de desarrollo (que se lo digan a Google Chrome) y por tanto aun mas los costes...no se confundan: económicamente seria algo beneficioso.

Quizás los programadores que lean esto apliquen una vision Ramonciniana al problema, y piensen: ¿y que pasa con los programadores? ¿Se deberia establecer un Canon al software libre para repartir entre los programadores hipoteticamente dañados? Pues no. El catetismo economico de Manolo le impide ver que el dinero que -insisto, hipoteticamente- se deja de gastar gracias al software libre podria reutilizarse para crear aun mas software que antes no era posible, es decir, para que la industria del software avanzara mas rapido con el mismo coste. Y si no se gasta en eso, se gastaria en otras partes del presupuesto de la empresa que, minusculamente, harian crecer la demanda de otros sectores y generarian empleos para los despedidos, o la empresa bajaria los precios para intentar competir...en fin: las consecuencias tipicas del libre mercado y division del trabajo.

2 de septiembre de 2008

Google Chrome y el futuro de la Web

Es sorprendente como un simple e inocente comic puede aclarar en cuestion de pocas horas la incertidumbre sobre los cambios de ruta que la web ha de hacer en su camino evolutivo de los proximos años. Ese comic de Google en el que detalla con precision las bases de su navegador con el sorprendente nombre de "Chrome, y al que piso los talones una nota de prensa anunciando la beta del mismo para hoy, es una bola de cristal que permite adivinar con cierta precision sus intenciones.

El objetivo final de todos, como ya se ha dicho aqui y en todo internet, es basar el modelo de negocio de la mayoria de la industria del software del futuro en la web. Descabellado o no, lo cierto es que en los ultimos años gran parte de las aplicaciones que han facilitado la vida a la gente han sido webs, no aplicaciones, y es en la web donde se esta invirtiendo la mayoria del dinero. Pero hay algunas dificultades que vencer, y una de los mas importantes es que las capacidades de los navegadores actuales son muy limitadas. Para poder construir aplicaciones web que compitan con el escritorio es imprescindible mejorarlos, y tanto Adobe como Microsoft han esprintado a la maxima velocidad para mostrar sus proposiciones al respecto: Adobe Air y Microsoft Silverlight. Pero su objetivo no es tan solo solventar un problema tecnico, sino en crear tecnologias controladas por ellos que les permitan dominar la base sobre la que se desarrollen las decadas de software, y hacerse de oro repitiendo el milagro de Windows en los 90.

Adobe y Microsoft ya han presentado sus cartas, quedaba la incognita de Google, que tiene el suficiente poder como para presentar su propia alternativa, o apoyar una de las dos mencionadas y hacerla ganadora. Sin embargo, tal y como se sospechaba con Google Gears y se ha confirmado en Google Chrome, su intencion es hacer evolucionar los estandares actuales. O, poniendolo en la perspectiva de un post anterior de este blog, van a parchear la deficiente web actual todo lo que sea necesario, en vez de diseñar de cero La Infraestructura Web Perfecta, que ha sido la opcion de Microsoft y Adobe. Aunque hay quien piensa que esta opcion "abierta" es malo para Google, porque da posibilidad a sus competidores de utilizarla en su beneficio mientras que ellos no dan oportunidad a nadie de infiltrarse en sus propias alternativas, lo cierto es que se trata mas bien de lo contrario: Cuanto mas se vea obligado Microsoft a utilizar la web estandar, mayor sera el fracaso de Air y Silverlight (y digo Microsoft porque ellos al menos puede utilizar Silverlight masivamente en sus sitios Live; Adobe sin embargo no tiene nada similar y tendra que convencer a los desarrolladores de otros sitios)

Otro aspecto importante que confirma todo esto es otro de los secretos de Chrome: V8, una VM con soporte de Javascript (Nota: A diferencia de lo anteriormente rumoreado, esta VM no es una VM al estilo de .NET y Java, sino simplemente un compilador de javascript). El objetivo de esta VM y de otros esfuerzos para hacer Javascript mas veloz, como el reciente "TraceMonkey" de Firefox, no es simplemente hacer Javascript "mas rapido", sino competir directamente con el codigo nativo, y no solo por el placer de competir, sino de convertirse en la alternativa a este. Por arte de magia, Javascript esta en vias de convertirse en lo que Microsoft quiere que se convierta C#/.NET, excepto que Javascript tiene mas posibilidades de conseguirlo, por la simple razon de que es el estandar de facto de la web actual. Los propios progresos de IE8 respecto a su implementacion de Javascript disminuyen los incentivos de verse forzado a utilizar Silverlight. Ya solo falta que saquen una implementacion de Javascript basada en la VM de .NET para ponerselo a ellos mismos mas dificil.

En resumen, Google pone con Chrome las cartas sobre la mesa respecto a los fundamentos base de las futuras aplicaciones web. Es algo que no habia hecho hasta la fecha, y por eso se trata de un acontecimiento muy importante. Es posible que con este navegador estemos asistiendo al verdadero nacimiento de la Web 2.0, a sus primeros pasos.

Respecto a los que dicen que dañara a Firefox, discrepo y mucho. En primer lugar, el enemigo de Google es Microsoft, no una organizacion sin animo de lucro. Firefox es tan solo un navegador que permite y seguira permitiendo a millones de usuarios acceder a las aplicaciones web de Google, haciendoles ganar dinero: No tiene sentido intentar hacerles daño. Ademas, Firefox no tiene porque tener miedo: una vez puestas en marcha las aplicaciones web que utilizen las capacidades de navegadores como Chrome, los navegadores que sobreviviran seran los que mejor y mas rapido ejecuten esas aplicaciones, y por el momento Firefox esta entre ellos (Nota: en algunos benchmarks parece que el tracemonkey de firefox es incluso mas rapido que V8).

Por ultimo, hay que mencionar la tremenda importancia del software libre en la viabilidad de este navegador Chrome de Google. Utiliza Webkit, y hay que recordar que Webkit fue un fork de Apple del motor KHTML de KDE. No se equivoquen: Chrome es tambien un exito del software libre, y debemos estar orgullosos de ello.