30 de agosto de 2008

Estilo

Google ha publicado su "guia de estilo" que utilizan internamente sus programadores con C++/ObjC. Curiosamente no han publicado la de Python.

Por cierto, gracias a la transicion de Mozilla a Mercurial, se puede ver via web la lista de cambios que se meten en el repositorio central. Si, tambien hay cosas parecidas en CVS (listas de correo con interfaz web mayormente), pero en esta hasta puedes suscribir via RSS a los cambios. ¿Que mejor manera de perder el tiempo? Por cierto, a ver si a los de mailman les da algun dia por incluir algun parche para generar RSS automaticamente a partir de las listas de correo.

14 de agosto de 2008

OpenGL y reescribir cosas

El anterior post sobre el declive de OpenGL ha recibido una sorprendente atencion, aunque lo que no ha sido en absoluto sorprendente es la reaccion de aqui: Mientras muchos americanos se han tirado de los pelos y ha clamado lo vergonzoso que es que OpenGL se deje pisar el terreno por DirectX en vez de aspirar a lo inverso, a pisarles ellos, aunque solo sea por el simple placer de ser mejor, la reaccion española es mucho mas proclive a enmascarar los problemas enumerando las ventajas que le quedan, como si esas ventajas fueran una garantia indiscutible de futuro, o una razon para cruzarse de brazos. No pretendo con esto ridiculizar a quienes enmascaran los problemas -yo tambien soy español-, pero si que es algo que siempre me llama la atencion cuando uno compara los foros españoles con los de otros paises.

Volviendo a OpenGL, esta historia no es nueva. La gente encargada de mantener OpenGL ha tenido que enfrentarse a una pregunta que muchos otros proyectos de software (bueno, o de especificaciones de APIs) se han hecho: "Tenemos que añadir X funcionalidad al proyecto, y X no encaja muy bien en el diseño actual de nuestro software. ¿Que hacemos? ¿Implementamos X encima del diseño actual, workaroundeando con delicadeza o pura fuerza bruta los escollos que el diseño actual nos impone? ¿O reescribimos sustancialmente parte del software para mejorarlo de manera que X y otras posibles funcionalidades puedan implementarse de manera mas sencilla?"

Practicamente todos los programas del mundo se han enfrentado o se enfrentaran alguna vez a esta pregunta: Se trata simplemente de decidir si se debe romper la compatibilidad para mejorar el programa, o no romperla para no fastidiar a los usuarios y seguir evolucionando el codigo sobre el diseño actual. Cuando se trata de pequeños programas no se trata de un gran problema, pero cuando se trata de grandes proyectos se trata de decisiones importantisimas no existe una regla fija para responder la pregunta: cualquiera de las opciones lo mismo puede catapultar el programa al exito absoluto como hundir un buen programa en los abismos del olvido.

Microsoft, por ejemplo, ha basado gran parte de su exitoso monopolio en la compatibilidad. En Vista han recurrido a romperla en algunos puntos para conseguir evolucionar el sistema, y no les ha ido tan mal. Mac OS X necesito ser creado de cero para poder ser lo que es hoy. Unix debe gran parte de su exito en la estabilidad del estandar POSIX, a pesar de que el diseño de Unix es mejorable, como sus propios creadores han admitido. Netscape cometio un error imperdonable cuando dejo de evolucionar sus versiones 4.x para centrarse en una base de codigo reescrita de cero que no estuvo preparada hasta que Netscape estaba ya muerto. Y, sin embargo, tuvo que recurrirse a reescribir la interfaz del navegador para que surgiera el exitoso Firefox. IE decidio conservar la compatibilidad y detener las mejoras, y eso les ayudo a alcanzar mas del 90% del mercado, y ahora la ausencia de mejoras durante años es lo que esta contribuyendo al descenso de su uso. KDE 4.0 ha sido un fracaso rotundo, y sin embargo parece haber sido un paso necesario para que KDE 4.1 y posteriores versiones se perfilen como un escritorio muy competitivo. Del mismo modo, Linux 2.6.0 era un kernel altamente competitivo pero necesito un año para convertirse en algo que las distribuciones pudieran usar con confianza. Gnome anda en estos momentos discutiendo, esencialmente, si continuan su evolucion conservando la compatibilidad o no. Eclipse decidio recientemente que van a reescribir el proyecto por completo y aun no se sabe si sera un exito o una mala idea. Office debe gran parte de su exito a la compatibilidad. Netware idem, y aunque Novell se ha subido al carro de Linux, Netware sigue siendo la principal fuente de sus ingresos. Cobol es un lenguaje pateticamente anticuado, y sin embargo sigue siendo el pilar de software bancario muy exitoso.

Y OpenGL3...¿que?

Es evidente, aun para quienes no tenemos mucha idea de graficos, que OpenGL 3 se enfrentaba al tipico caso de renovarse para estar al dia, o conservar la compatibilidad para agradar a los usuarios existentes y extender el diseño actual como recurso contra la obsolescencia. La ruta tomada por quienes mantienen OpenGL ha sido claramente esta ultima. ¿Va a morir OpenGL? Bien, desde luego no va a desaparecer de la faz de la tierra, por ser la unica opcion de Linux y Apple y por complacer con compatibilidad a los programas basados en OpenGL que, obviamente, no van a dejar de usarlo. Pero si persiste en su empeño de no quitarse el polvo, podria correr a muy largo plazo el mismo riesgo que Netware: Un SO que no esta, ni muchisimo menos, muerto, y sin embargo no importa a nadie. OpenGL corre el riesgo de acabar siendo utilizado unicamente porque quien lo usa tiene la necesidad inexcusable de hacerlo, no porque nadie se sienta atraido por sus capacidades: Un lastre que algunos se ven forzados a utilizar a la hora de, por ejemplo, portar un juego a Mac, pero desde luego no algo que utilizarian si pueden evitar hacerlo.

(Alguien comentaba en mi anterior post que a un buen programador le da igual la API por mala que sea siempre que funcione y que por tanto un buen programador no tiene dificultades a la hora de usar OpenGL. Oh, si, un buen programador puede hacer eso. Y un buen programador puede escribir cualquier cosa en C. El problema es que la gran mayoria de programadores no son buenos, ni lo van a ser nunca, ni las empresas van a dejar de contratarlos)

En general, yo creo conservar la compatibilidad tiene sentido cuando el software de turno tiene virtudes. Cuando el software empieza a desfasarse, conservar la compatibilidad solo significa conservar la compatibilidad con algo obsoleto, y es a largo plazo una sentencia de muerte lenta, pero segura. Hay ocasiones en las que mediante emulacion uno puede diseñar programas nuevos que conserven la compatibilidad con los viejos programas, y entonces uno puede combinar las dos cosas. Ejemplo notable es el de Windows, que conservo la compatibilidad con DOS en Windows 9x, y conservo la de ambos en el paso a NT que supuso XP. Si se hubiera quedado en DOS o en W9x, Microsoft hubiera muerto, pero supo hacer converger evolucion y compatibilidad de manera totalmente brillante. No parece que OpenGL haya escogido ese camino: La opcion escogida de marcar ciertas APIs como "deprecated", por ejemplo, obliga a los fabricantes de hardware a hacer implementaciones de OpenGL que soporten esas APIs como "deprecated" Y ademas tienen que implementar las nuevas, todo en el mismo driver. Genial. Por lo visto, la calidad de los drivers de OpenGL es uno de sus grandes problemas debido a la dificultad que suponen, y el prometido 3.0 iba a ser una gran mejora en ese punto, pero con lo que han sacado solo ha logrado empeorar la situacion: Para implementar OpenGL 3.0, las compañias utilizaran su antigua implementacion OpenGL 2.x y la extenderan, creando fallos en partes que en 2.x no los habia.

La mencion de antes de Netware no es casual. Netware acabo en el olvido en gran medida porque Microsoft quiso acabar con Netware, y lo consiguio. Mucha gente habla de que si OpenGL tiene sus nichos, que si etc....¿saben lo que quiere Microsoft? Acabar con OpenGL. Ya lo ha conseguido en buena medida: Su plataforma windows esta, para millones y millones de sus usuarios, libre de programas que utilizen OpenGL. Gracias a que OpenGL no parece querer cambiar la situacion y atraer, por ejemplo, a los desarrolladores de juegos, no tienen por que preocuparse porque nadie desafia sus puestos de defensa. Sin embargo, Microsoft si que va a atacar a las defensas de OpenGL. Sean cuales sean los nichos en los que aun fuerte, Microsoft va a tratar de acabar con ellos, y si bien no va a erradicar OpenGL de la faz de la tierra, si que puede hacerlo completamente irrelevante en el mundo de la programacion grafica.

Denles tiempo, y veran lo que pasa con el mundo CAD u otros. La de OpenGL al dia de hoy es una estrategia de mucha defensa y cero ataque, mientras que la de Microsoft es tanto de defensa como de ataque, y cuenta con muchas mas tropas. Si no se les planta batalla, el desenlace ya esta escrito.

12 de agosto de 2008

¿OpenGL en peligro?

Que conste que no tengo ni idea de temas graficos. Ademas, un servidor tiene la impresion que hace ya tiempo que DirectX tiene ganada la batalla contra OpenGL. Sin embargo hoy, tras publicarse las especificaciones de OpenGL 3.0, muchas, muchisimas voces parecen compartir esa misma opinion. Y no se refieren solamente a una batalla por conseguir que tal API sea mas usada que otra: Se refieren mas bien al aspecto puramente tecnico.

Al parecer, la opinion general es que las versiones actuales de OpenGL estan bastante desfasadas respecto al funcionamiento del hardware grafico moderno, DirectX esta mucho mejor diseñado para aprovechar ese hardware, y OpenGL 3.0 era la version que se habia prometido que solucionaria ese atraso, y que hasta cierto punto era necesaria para evitar un declive de OpenGL. Tras un año de silencio, la version 3.0 publicada no es la version que iba a rediseñar OpenGL para adecuarlo al hardware moderno. La empresa encargada de hacer OpenGL 3.0 ha elegido la opcion de continuar con el OpenGL antiguo, incapaz de competir contra DirectX, obvia y desgraciadamente impulsados por esa maldicion de no romper la compatibilidad con los programas existentes (particularmente, al parecer, programas de CAD) y los miles de millones que generan. Es una decision desgraciadamente comun en el mundo del software: comprometer la sostenibilidad futura a cambio de vivir temporalmente de las rentas del pasado.

En los foros de discusion se puede encontrar algun sujeto (raro) que defiende OpenGL 3.0 por este tema, el de la compatibilidad. Pero nadie defiende que OpenGL no esta desfasada respecto a DirectX. Nadie. En ese punto, la opinion es unanime. No es que vaya a desaparecer OpenGL, pero si que parece que los desarrolladores de juegos para Windows van a pasar bastante de ella.

10 de agosto de 2008

Conspiranoia

Leo en un articulo -en una pagina web cuyo nombre de dominio me provoca automaticamente dudas sobre su veracidad- la siguiente pregunta: "¿Esta Microsoft intentando acabar con Apache?" La pregunta viene a raiz de la incorporacion de Microsoft como esponsor de la Fundacion Apache tras el pago de los 100.000$ que paga por ese honor.

La verdad es que es una pregunta totalmente estupida, cuya respuesta no requiere leer el articulo por completo. Basta con leer la pregunta y responderla. ¿Quiere Microsoft acabar con Apache? Por supuesto que si. ¿Por que no iba a querer? Apache es el servidor con mayor cuota del medio sobre el cual se supone que en el futuro se desarrollara la inmensa mayoria del software. La superioridad numerica de servidores Apache hace que el "ecosistema" de tecnologias libres que le rodean, como PHP, tengan una influencia importantisima en el software sobre el que construyen la mayoria de sitios web del mundo. En parte gracias a esa influencia, hoy en dia IIS/ASP no se utiliza casi para nada mas que para desarrollar aplicaciones web que de cara al equipo cliente cumplen los estandares, y no para desarrollar aplicaciones que utilizan algun tipo de truco para aumentar la dependencia entre la aplicacion desarrollada e IE, que bien podria haber sido la realidad de Internet hoy en dia si la mayoria de webs del mundo no utilizaran un servidor web con un ecosistema inmune en gran medida a esos juegos sucios.

¿Por que Microsoft iba a querer renunciar a dominar por completo uno de los pilares fundamentales de la web? ¿De verdad alguien cree que Microsoft se ha convertido en esponsor de la Fundacion Apache para que, a la larga, menos gente utilize IIS? Lo que mas me irrita es que haya gente capaz de creer que Microsoft tiene alguna otra intencion que no sea aumentar sus ventas, como si fuera "malo" el hacerlo. La realidad es que es bastante logico que Microsoft, como cualquier otra empresa, tenga como unico objetivo vender cada vez mas. Lo contrario seria sospechoso, y me parecen muy ingenuos quienes creen que hay alguna posibilidad de que ocurra.

5 de agosto de 2008

Sobre nubes: Entrevista a Jim Whitehurst (CEO de Red Hat)

No se piensen que este blog esta muerto (por cierto, perdonen las posibles faltas, pero KDE 4.1 me configura mal el teclado y no puedo poner tildes): Lo que pasa es que el verano es el verano y, a diferencia de otros medios, yo no voy a llenar mi blog de noticias chorra de relleno. O si.

El caso es que el otro dia ZDNet hizo una entrevista a Jim Whitehurst, el nuevo CEO de Red Hat, que resulta interesante y merece un poco de atencion.

Una cosa curiosa de la que habla es de como los presupuestos de IT se han incrementado debido a tecnologias propietarias que uno tiene que seguir usando porque migrar es muy dificil. Red Hat se ofrece como una empresa a la que puedes mandar a paseo si no te sirve como prefieres, sin verte forzado porque haya algo propietario que te impida migrar a otros sistemas: "Oracle announced a 20-something percent price increase just as the economy starts heading south. How can you do that unless you're pretty sure nobody can switch? High switching costs led to infrastructure cost creep. Once you get hooked, you can't get off."

Pero lo mas interesante es el tema "cloud": "The clouds will all run Linux" (para quien no este al dia, "clouds" es la palabra de moda para decir "clusters + aplicaciones web").

Bueno, eso no es ningun secreto, pues en el mundo linuxero ya sabemos que eso tiene mas de realidad que de hipotesis futura (aunque siendo algo quisquillosos, es una regla no aplicable a MSN, que usa windows, y Yahoo con su freebsd, sin olvidar a MobileME (OS X)). ¿Pero esa percepcion de la comunidad linuxera -y me refiero a la de la comunidad linuxera, no a la del tipo de Red Hat de la entrevista- es tan real como quisieramos que fuese? No, no es tan obvio que Linux vaya a ser el sistema operativo por definicion de esos clusters solo por ser software libre. Es facil imaginar que, como en cualquier otra infraestructura de IT, los dueños de los clusters pueden escoger entre hacerse todo el trabajo de software ellos mismos, con sus propios trabajadores, o descargar parte del trabajo en otra compañia. Esta ultima opcion puede parecer poco probable, pues lo tipico es que las compañias "cloud" de referencia, como Google, se lo monten por su cuenta porque el software para montar sus clusters lo han tenido que desarrollar ellos y es mas comodo para ellos seguir haciendolo asi, pero el futuro no esta tan claro.

Si el modelo "cloud" acaba imponiendose en toda la industria del software, habra empresas de software que quieran desarrollar aplicaciones web sobre su propia "nube". Esas empresas no querran un SO sobre el que ellos tengan que construir el software que implementa algo remotamente similar a la "nube" de Google y despues tener que construir, sobre esa nube, su aplicacion. Querran dedicarse tan solo a implementar su aplicacion web sin preocuparse de lo que hay por debajo. Es por eso que muchas de esas empresas simplemente alquilaran los servicios de los clusters de Google y Microsoft -que de hecho tienen la intencion de vivir en gran parte de los beneficios que les aporte ese tipo de servicios-, pero tambien habra compañias que prefieran montar su propia nube pero que no quieran implementar por su cuenta el software.

Ahi es donde Red Hat, y tambien Microsoft, tienen posibilidad de ofrecer versiones de sus sistemas operativos con el software necesario para montar una "nube" (lo que muchos vienen llamando "middleware": en realidad todo esto ya existe, pero esta solo en sus comienzos). Desde aqui anticipo que los departamentos de marketing añadiran a sus productos apendices del tipo "Cloud Edition".

No esta nada claro, por tanto, que Linux vaya a ganarse ese puesto solo porque se puede descargar y modificar libremente. Habra que tener algo solido que ofrecer. En la entrevista Red Hat habla de varios productos orientados a ello. Pero esta claro que Microsoft no va a querer quedarse sin parte del pastel. Ni otras compañias.