Bueno, voy a aportar algo que espero que a alguien le parezca interesante
Voy a plantear un problema con el que me encuentro. En la actualidad estoy desarrollando por mi cuenta una aplicación y, digamos que por exigencias del guión tengo que usar a la fuerza unas librerias libres, escritas en C, que están dejadas de la mano de dios desde que las hicieron, en 1995. Quise hacer las mias propias pero por el tema del guión no pude.
Los problemas que me encuentro son:
1) ¿Las librerias funcionan?. Bueno, en parte si y en parte no. Las librerias estas son una mierda donde es imposible meter mano, y ya me he encontrado con algun bug que he tenido que "solucionar" con la aplicación que hace uso de ellas. Arreglarlas no es que sea dificil, es que para mi es imposible porque el código es algo guarruzo, y no hay diagramas, ni documentación sobre el código, ni sobre el uso, ni tiempo para cambiarlas.
2) El uso de C, que sencillamente me mata cosa mala. Sus violaciones de segmento, sus conversiones implicitas y explicitas, su metodologia y lo dificil que es a veces hacer cosas faciles pueden conmigo. Y que tratar de hacer algo "grande" en C, acostumbrado a objetos, es algo que no me cabe en la cabeza.
A lo que voy es a que:
1) Algo que esta a medias es casi peor que algo que no esta hecho, porque suele dar muchos problemas y joder bastante andar perdiendo el tiempo con algo que finalmente no sabes si funcionará. Encima el codigo será libre, pero como ya digo es un caos eso donde no se puede meter mano.
2) El lenguaje debe ser una herramienta que te ayude a poder desarrollar software, no algo con lo que pegarte porque te ha fallado un tipo en tiempo de ejecucion, o algo con lo que volverte loco tratando de reciclar codigo o hacer algo grande.
Podemos tener muchas aplicaciones, librerias, compiladores y lenguajes de programacion libres, pero tenemos que tener en cuenta una cosa, y es que para que algo sea bueno no basta conque sea libre, debe ser completo. Hacer una libreria o una aplicacion que sea una mierda y decir "es libre, arreglala tu" es perjudicar a la larga y es perder el tiempo a lo tonto. El tiempo se debe utilizar para hacer cosas útiles, no para hacer perder el tiempo a los demas ni a nosotros mismos.
Estoy de acuerdo en que hacer algo que funcione, bien documentado, completo, reciclable y escalable es realmente dificil por no decir utopico, y que hacer algo vago, indocumentado y triste es sencillo. Las aplicaciones libres se encuentran en el filo de la navaja. Por una parte está el decir "a mi me funciona, si a ti no te va cambia lo que quieras" y por otra "somos competitivos con las aplicaciones cerradas, y lo demostramos enseñandolo TODO".
Las aplicaciones libres deben ser completas para poder ser reutilizadas, que es lo que en parte se busca al liberar software, pero para ello se debe hacer uso de una serie de cosas que, aunque historicamente venia bastante abandonado, ultimamente lo veo bastante mejorado: se debe hacer un proceso de ingenieria del software, se deben montar las aplicaciones no pensando tanto en el bazar y si mas en la catedral, y se debe utilizar una metodologia y un lenguaje adecuados.
En este sentido se me ocurren varios proyectos libres, pero no quiero nombrarlos porque es muy fácil iniciar un flame con ellos. Sólo diré que, por ejemplo, QT permite una programación más clara al tener sus librerias en C++ y tener todo muy documentado, y que por ejemplo .NET es una muy buena idea de desarrollo que vemos en mono.
En mi siempre humildisima e ignorantisima opinion creo que las aplicaciones libres deben enfrentarse a las cerradas no tanto por la mentira sistemática de "soy libre, y ya solo por eso soy mejor" sino por el hecho de aspirar a ser aplicaciones totalmente completas donde todo funcione, donde todo se encuentre bien documentado y donde buena parte sea reciclable y ayude al desarrollo de nuevas aplicaciones libres.