2008/6/16 Diego Algorta Casamayou <[EMAIL PROTECTED]>: > Hola amigos, > > Nada más quería pasarles este link a un MUY buen post de Luke Kanies, > creador de la espectacular herramienta de administración centralizada > Puppet (desarrollada 100% en Ruby, desde mucho antes que Rails > existiera). > > http://www.madstop.com/ruby/ruby_has_a_distribution_problem.html >
Gracias por el link Algorta. > Estoy de acuerdo con él. :( > Respetuosamente discrepo: "The reason is that rubygems installs in a location that Ruby doesn't search by default. The reason for that is that apparently this one guy, somewhere, wanted to have multiple versions of a given package installed at once. Who wants this? Let's just say it's not the guys who are distributing hundreds and thousands of copies of their software." No voy a entrar en una batalla entre Windows vs. La distro Linux de selección, pero en Windows, muchas veces uno puede tener multiples versiones (v1, 1.5, 2, 3, etc) del mismo programa instalado simultaneamente y coexistiendo pacificamente. En *nix esto no es posible. Durante la vida de una aplicación (que si uno es un buen developer) espera que versión tras versión vaya mejorando -- más en OSS cuando uno tiene contributors los cuales aportan cosas interesantes. Si es verdad que uno trata de "pegarse a versiones especificas" para no comprometer la estabilidad de su proyecto, pero para eso esta require_gem (que es deprecated) o gem y "= X.Y.Z" por darles un ejemplo. "The truth is, most Rubyists don't even seem to use gems this way -- they tend to create a vendor subdirectory in their project, and then install their gems there." Ah, "aguante rails", el vendor no era tan popular antes de Rails, menos que vos ibas a freezar los componentes externos dentro de tu proyecto. Por que? simple y sencillo: si yo freezo un LGPL dentro del vendor de mi proyecto y este no es LGPL compatible, tengo que cambiar la licencia de este para que concuerde. Lo mismo si yo no estoy liberando el source de mi proyecto y uso un componente GPL (hay varias gemas con ese tipo de licencia). Al final, si el usuario ya tiene instalada la gema que yo tengo freezada estoy no solo duplicando sino incrementando el riesgo a largo plazo de haber olvidado alguna dependencia huérfana y por ende, lo que creo es mi app bien freezada es en realidad la mitad de esta. Caso concreto es el generator de Dr. Nic Willians, que es usado por Merb para los generators pero que si uno no contaba con la gema de ActiveSupport instalada no funcionaba (o sea, tenias que tener Rails instalado). En síntesis, mucho del ranting de este muchacho va al modelo de versioning de RubyGems, y la incapacidad del propio ruby de manejarlo. Pero también cita ejemplo de como "desarmar" una app de rails y poner distintos componentes en las distintas estructuras de un sistema Linux. Ruby 1.9 por su parte incorpora RubyGems, asi como la "distro" de ruby en Windows. Cada distro de Linux hace lo que cree conveniente, y debian hace destrozos (seamos honestos, romper un paquete en tantos pedacitos es de carnicero). Uno de los problemas es que la gente no aprende sobre politicas de versionado y ve las reglas de los paquetes que usa, por ende, termina siempre requiriendo la ultima version del componente que es incompatible por X razon con la anterior. Un ejemplo concreto fue lo que me paso con win32-service y mongrel_service, que entre 0.5.x y 0.6.x hicieron cambios que afectaban el funcionamiento (eran major changes, no minor) y por esto, muchos usuarios fueron afectados. Conclusión: vendor everything es un shortcut a un problema comunicacional y organizativo mayor. Si los developers no aprenden un poco, mucho no se puede hacer al respecto. Dato anegdotico: Radiant incorporaba en su primer momento de una tecnica para crear gemas basada en mi trabajo de Freezado y gemas para Rails, ya poco queda de eso, pero en el spec de la gema perfectamente pueden entrar aquellas dependencias especificas de las que tu aplicación Rails depende. Saludos, -- Luis Lavena AREA 17 - Human beings, who are almost unique in having the ability to learn from the experience of others, are also remarkable for their apparent disinclination to do so. Douglas Adams _______________________________________________ Ruby mailing list [email protected] http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar
