lunes, 18 de enero de 2010

Para qué me sirve el Open Source

Saludos de nuevo,
Después de una temporada algo liadillo, vuelvo a la carga con un tema sobre el que se pontifica mucho pero se habla poco del día a día, así que para dar algo de ejemplo voy a poner un par de ejemplos recientes para los que me ha servidor el concepto de Open Source. Ambos casos están relacionados, faltaría más, ya que se han dado en el último proyecto en el cual he estado envuelto y que ha visto la luz recientemente tras largos años de gestación.

Primer ejemplo: El proyecto en cuestión es "mecanizar" el web de una institución mediana/grande. Es decir, implantar un gestor de contenidos web (web CMS). Sobre el proyecto en cuestión ya hablaré en su día, si se tercia, pero el caso de uso viene dado por que después de mucho evaluar escogimos utilizar un software CMS Open Source.
Antes de eso estuvimos a punto de implantar un CMS comercial y la diferencia fue abismal, ya que para hacer cualquier cosa teníamos que pasar por los "consultores autorizados" que te cobraban una pasta gansa por hacer lo mismo que le habían hecho a todos los demás clientes, pero como las soluciones no se comparten y para ellos es una ganga vender el mismo desarrollo X veces, pues que te voy a contar. No solo eso, además no había forma de saber si algo fallaba o no, si era una "feature" o un "bug", sin pasar por soporte, jugar al ping pong con los servicios externalizados que no tienen ni p*** idea más que seguir el guión de las preguntas que les han hecho etc. En fin, al menos en este tema (Webs CMS) quedamos bastante decepcionados del "estado del arte" en su vertiente comercial que más parece una tomadura de pelo que otra cosa.
Después de mucho evaluar por aquí y por allá, decidimos utilizar un proyecto Open Source que se ajustaba bastante a nuestras necesidades y como tenemos personal con conocimientos para meterle mano (por eso lo escogimos implementado en Java) pues teníamos el convencimiento que podríamos adaptarlo.

La parte positiva es que no nos equivocamos y hemos podido salir con ese producto, adaptándolo a nuestras necesidades y sabiendo donde falla y por qué, podemos planificar si queremos/debemos dedicar recursos a mejorarlo/arreglarlo o no. Que nadie se engañe, el coste de una solución así no es cero pero si se compara con el coste y relación precio/calidad de las soluciones en este tema en concreto...
La parte negativa es que los administradores del proyecto van bastante a su bola e inexplicablemente hacen caso omiso a casi todas las sugerencias y mejoras que proponemos, incluyendo los "patch" para solventar errores que hemos detectado, algunos clamorosos. También hemos visto algunas cosas en el código por las que le cantaría las cuarenta, y ochenta, a alguno de mis programadores si las hicieran... pero bueno, al menos lo vemos y podemos arreglarlo si queremos.
El problema es que nos vamos alejando tanto del original, pese a que intentamos mantenernos sincronizados con sus cambios, que ya casi tenemos un fork. Cuando haya un cambio de versión grande tendremos que plantearnos por donde seguir. Y para los que piensan que este dilema es exclusivo de los proyectos Open Source... el proyecto comercial que evaluamos primero acaba de cambiar de versión "grande" cuando hicimos el intento de adoptarlo y era totalmente incompatible con las anteriores, he hecho la versión anterior no era Java, y cuando lo dejamos ya tenían en beta la siguiente versión grande donde no abandonaban Java pero si lo rehacían todo y todos los componentes, adaptaciones y personalizaciones que te habían costado un ojo de la cara en consultores autorizados no servían... ¡Toma esa!

Segundo ejemplo: Dentro del mismo tema, uno de los problemas de un CMS para una web general medianamente decente es la integración de contenidos no-CMS. Es decir, aplicaciones externas que no se gestionan como contenidos exclusivamente CMS por algún motivo pero que han de salir publicadas "mezcladas con la información estática".
Este tema lo hemos resuelto de varias formas, estudiando cada caso en concreto, y una de las soluciones para aplicaciones obsoletas que no se podían integrar o re-escribir es usar un portlet que haga de proxy y te permita incrustar la aplicación en tus páginas del CMS sin tener que tocar la aplicación... o no mucho. En este caso el problema fue que investigando, investigando, el tema está bastante dejado y la mayoría de implementaciones de un portlet proxy son simples juguetes o "abandonware" (proyectos que ya no se actualizan desde hace años). Pero como son Open Source... descargamos uno de los proyectos Open Source, el que más prometía, lo re-montamos a partir de los trozos que ofrecía y con la escasa documentación que tenía, le arreglamos cuatro cosas que no funcionaban y pudimos usarlo.

Ahora que hemos salido, podemos decir que la decisión en sí no fue mala, pero ha habido que mejorarlo bastante y tiene algunos puntos oscuros que no nos gustan mucho, por lo que al final no se parecerá mucho al original, pero el caso es que nos sirvió, funciona, pudimos adaptarlo a nuestras necesidades y de hecho ahora lo hemos adoptado :). Una vez lo tengamos claro y lo re-hagamos, esperamos poder re-abrirlo para que le sirva a alguien más, que es para lo que sirve en Open Source.

En fin, yo soy el primer escéptico que no se traga eso de que Open Source = bueno per se y sé lo que implica y cuesta mirar el código de otra gente, adaptarlo etc. Pero al mismo tiempo hay que darle al cesar lo que es del cesar y sabiendo usarlo, es una muy buena opción para algunos temas. Hablando de casos de uso reales, sus pros y sus contras, aprenderemos entre todos cuando y como usarlo mejor. La mera retórica o los "proyectos de Powerpoint" no hacen funcionar las cosas en el mundo real.

Happy coding! EJ

PD: Si alguien tiene curiosidad y le pica saber nombres de productos/proyectos... como dice el dicho: "Se dice el pecado pero no el pecador" ;).