{"id":208,"date":"2009-08-31T00:22:12","date_gmt":"2009-08-30T22:22:12","guid":{"rendered":"http:\/\/blog.rastersoft.com\/?p=208"},"modified":"2009-08-31T00:22:12","modified_gmt":"2009-08-30T22:22:12","slug":"mono","status":"publish","type":"post","link":"https:\/\/blog.rastersoft.com\/?p=208","title":{"rendered":"Mono"},"content":{"rendered":"<p>A principios de verano surgi\u00f3 una agria pol\u00e9mica sobre la conveniencia o no de usar Mono (la implementaci\u00f3n libre de los est\u00e1ndares ECMA-334 y ECMA-335) dentro de GNOME. El problema en buena medida ven\u00eda dado por las diferentes opiniones sobre la libertad de Mono. Los que estaban a favor afirmaban que <a href=\"http:\/\/www.microsoft.com\/interop\/cp\/default.mspx\" target=\"_blank\">Microsoft hab\u00eda reconocido de manera expl\u00edcita que renunciaba a denunciar a nadie por usar sus patentes<\/a> sobre ambos est\u00e1ndares, mientras que los que estaban en contra afirmaban que <a href=\"http:\/\/www.gnome.org\/~seth\/blog\/mono\" target=\"_blank\">dicho texto legal era lo suficientemente obtuso como para que no garantizase pr\u00e1cticamente  nada<\/a>, y que habr\u00eda que abandonar por completo Mono, proponiendo algunos reemplazarlo por <a href=\"http:\/\/en.wikipedia.org\/wiki\/Vala_(programming_language)\" target=\"_blank\">Vala<\/a>. En su momento no escrib\u00ed nada, en parte porque ya hab\u00eda suficiente pol\u00e9mica, y en parte por falta de tiempo, as\u00ed que ahora que los \u00e1nimos est\u00e1n m\u00e1s calmados me gustar\u00eda dar mi opini\u00f3n sobre una cuesti\u00f3n relacionada.<\/p>\n<p>Para empezar, todo el mundo se centra directamente en si hay riesgo de que haya demandas por patentes a la hora de usar Mono. En ese punto no voy a entrar puesto que se trata de una cuesti\u00f3n legal y yo no soy abogado. Donde s\u00ed me gustar\u00eda entrar es en el tema de qu\u00e9 aplicaciones es razonable que se escriban en Mono (y, en realidad, en cualquier otro lenguaje que trabaje sobre un runtime, como Java o Python) y cuales deber\u00edan ir siempre en Vala.<\/p>\n<p>Para presentar el problema me ir\u00e9 al caso de un viejo conocido de todo el mundo: Windows Vista. Tras su lanzamiento surgieron grandes cr\u00edticas por su excesivo uso de memoria, lo que obligaba a instalar al menos 2GB para conseguir una fluidez equivalente a la de un Windows XP con 512MB.<\/p>\n<p>Y ese es el problema de utilizar Mono, Java, Perl o Python en donde no se deben usar. Recordemos que el usuario utiliza un ordenador con un fin concreto: realizar un trabajo. Para ello utiliza un programa determinado: si quiere dibujar, utilizar\u00e1 un programa de dibujo; si quiere escribir una carta, utilizar\u00e1 un procesador de texto, etc. Una vez que ha terminado la tarea, cierra el programa (liberando los recursos utilizados) y abre otro para hacer otra tarea.<\/p>\n<p>Por otro lado, tanto los usuarios como los programas necesitan de un sistema operativo que act\u00fae como intermediario. Es importante recalcar que el sistema operativo, hasta cierto punto, deber\u00eda ser transparente: el usuario no utiliza el sistema operativo para hacer sus trabajos, sino los programas concretos. As\u00ed pues, el sistema operativo debe ser parco en el consumo de recursos, pues \u00e9stos deben estar disponibles para los programas.<\/p>\n<p>El problema surge cuando hacemos parte del sistema operativo en un lenguaje interpretado o que necesite una m\u00e1quina virtual. En ese momento nos encontraremos con un consumo mayor de memoria y de procesador, lo que significa que est\u00e1 consumiendo recursos que no deber\u00eda. Un ejemplo de esto ser\u00eda programar applets de escritorio o extensiones del gestor de archivos utilizando Mono o Python, o demonios que se queden en ejecuci\u00f3n en segundo plano durante toda la sesi\u00f3n. Sin embargo, una aplicaci\u00f3n s\u00ed puede estar escrita en estos lenguajes porque, a fin de cuentas, es lo que el usuario quiere utilizar. Podr\u00eda ser deseable que utilice menos recursos, pero ya no es algo tan cr\u00edtico porque aqu\u00ed s\u00ed estamos utilizando lo que, a fin de cuentas, nos corresponde. Y por aplicaci\u00f3n incluyo aqu\u00ed tambi\u00e9n aplicaciones oficiales de Gnome, como por ejemplo, <a href=\"http:\/\/en.wikipedia.org\/wiki\/Banshee_%28music_player%29\" target=\"_blank\">Banshee<\/a> o <a href=\"http:\/\/en.wikipedia.org\/wiki\/F-Spot\" target=\"_blank\">F-Spot<\/a>. La clave est\u00e1 en si son programas que permanecen abiertos durante toda la sesi\u00f3n y consumiendo recursos, o son aplicaciones que el usuario lanza expresamente cuando quiere realizar una tarea y que cierra cuando ha terminado de hacerla, liberando los recursos que utiliz\u00f3. No olvidemos que una aplicaci\u00f3n se puede cerrar y volver a abrir, mientras que un applet o un demonio tienen que estar corriendo constantemente para cumplir su funci\u00f3n.<\/p>\n<p>\u00bfEntonces debemos utilizar siempre C para realizar las aplicaciones de escritorio, complementos y demonios? Aparentemente ser\u00eda lo deseable; sin embargo, tiene el grave problema de que programar en C no es tan c\u00f3modo, ni los programas son tan mantenibles, como programar con Python, C# o Java (por algo existen). Y es justo aqu\u00ed donde Vala brilla con luz propia: al tratarse de un lenguaje de alto nivel, con gesti\u00f3n de memoria asistida y una biblioteca de funciones y componentes que crece d\u00eda a d\u00eda, simplifica la escritura y mantenimiento del c\u00f3digo hasta el nivel de los otros lenguajes comentados; y al compilarse directamente a c\u00f3digo nativo, sin necesidad de ning\u00fan runtime extra, el resultado es pr\u00e1cticamente tan bueno como si se hubiese utilizado C desde el principio. Por supuesto, Vala tambi\u00e9n se puede utilizar para escribir aplicaciones, pero considero que aqu\u00ed ya es cuesti\u00f3n de preferencias, as\u00ed que cada uno utilice lo que m\u00e1s le guste: Perl, Python, C, Vala, Mono, Lisp, Ook&#8230; Pero para partes del sistema operativo o del escritorio considero que s\u00f3lo se deber\u00eda utilizar Vala.<\/p>\n<p>Y debo reconocer que consejos vendo pero para m\u00ed no tengo, porque una de mis aplicaciones (GtkPSproc) est\u00e1 escrita justo al rev\u00e9s: el programa principal, que s\u00f3lo se lanza cuando el usuario quiere imprimir algo, y que lleva la interfaz gr\u00e1fica y hace todo el trabajo, est\u00e1 escrito en C, mientras que un peque\u00f1o applet (que, por tanto, est\u00e1 ejecut\u00e1ndose desde que se inicia el escritorio hasta que se apaga la m\u00e1quina) que se encarga de reenviar la impresi\u00f3n al programa principal, est\u00e1 escrito en Python. En mi defensa dir\u00e9 que la aplicaci\u00f3n principal la escrib\u00ed antes de aprender Python, y que escribir el applet en python fue una chapuza inicial que acab\u00f3 quedando como definitiva (\u00bfCuela?).<\/p>\n","protected":false},"excerpt":{"rendered":"<p>A principios de verano surgi\u00f3 una agria pol\u00e9mica sobre la conveniencia o no de usar Mono (la implementaci\u00f3n libre de los est\u00e1ndares ECMA-334 y ECMA-335) dentro de GNOME. El problema en buena medida ven\u00eda dado por las diferentes opiniones sobre la libertad de Mono. Los que estaban a favor afirmaban que Microsoft hab\u00eda reconocido de &hellip; <a href=\"https:\/\/blog.rastersoft.com\/?p=208\" class=\"more-link\">Seguir leyendo <span class=\"screen-reader-text\">Mono<\/span> <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5],"tags":[],"class_list":["post-208","post","type-post","status-publish","format-standard","hentry","category-programacion"],"_links":{"self":[{"href":"https:\/\/blog.rastersoft.com\/index.php?rest_route=\/wp\/v2\/posts\/208","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.rastersoft.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.rastersoft.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.rastersoft.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.rastersoft.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=208"}],"version-history":[{"count":0,"href":"https:\/\/blog.rastersoft.com\/index.php?rest_route=\/wp\/v2\/posts\/208\/revisions"}],"wp:attachment":[{"href":"https:\/\/blog.rastersoft.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=208"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.rastersoft.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=208"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.rastersoft.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=208"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}