Ahora es más fácil desarrollar con Mono

Buenas 🙂 ,

parece que desde hace unas semanas el equipo de Xamarin se ha puesto las pilas y ha levantado repositorios públicos de paquetes para distintas distribuciones Linux, con lo que se ha facilitado bastante el desarrollo con las últimas versiones de Mono y Monodevelop (por ejemplo, yo tuve que compilar Mono y Monodevelop para poder trabajar cómodamente en el desarrollo de ColorSharp).

Hay repositorios para: Debian y derivados (como Ubuntu); Redhat, CentOS y Fedora; y también para SuSe y SLES.

Aquí está la página donde explican el proceso en pocos pasos para cada distribución: http://www.monodevelop.com/download/linux/ .

Además de los últimos paquetes de Mono y Monodevelop, también proveen el gestor de dependencias NuGet. Echo en falta que añadan también paquetes de Pash (un clon libre de PowerShell) en el repositorio, pero sigue siendo un gran paso.

Sobre NuGet y Pash

La dependencia que tiene ColorSharp de NuGet es casi evidente para los desarrolladores habituales de .NET. Por el momento solo distribuyo paquetes NuGet (todavía queda pendiente crear paquetes específicos para distribuciones Linux) y por otro lado también lo uso para obtener las dependencias de ColorSharp.

Pash no es tan importante para el trabajo que estoy desarrollando actualmente, pero cabe la posibilidad de que llegue a serlo. Desgraciadamente NuGet permite que sus paquetes incorporen scripts de PowerShell que se ejecutan durante (o al final de) el proceso de instalación. Esto hace que sea más complicado conseguir que nuestro código sea realmente multiplataforma si por casualidad cometemos el error de usar como dependencia uno de esos paquetes malditos.

De hecho, Monodevelop incorpora una versión modificada de Pash para mejorar la integración del IDE con NuGet (que aunque supuestamente bajo el auspicio de la fundación Outercurve, su desarrollo está demasiado ligado al de Microsoft Visual Studio).

 Otro problema que sigue pendiente en NuGet es que no da soporte a la operación ‘pack’ en entornos Linux (y creo que tampoco en Mac OS X, pero no lo puedo probar). Esta operación es la que se usa para crear los paquetes que he mencionado anteriormente. Esto no hace que ColorSharp sea menos libre ya que se pueden compilar los binarios a partir del código fuente usando solo herramientas libres, sin embargo está claro que dificulta y hace más incómodas ciertas tareas básicas del desarrollo de software.

Lo dicho, NuGet APESTA. El acoplamiento que existe entre esta herramienta y MS Visual Studio es horroroso, y cuando uno intenta hacer cosas ligeramente sofisticadas se encuentra con que son imposibles o se tienen que tocar a mano ficheros generados (y modificados) de forma automática, lo cual es una mala idea a todas luces. PIP, Gem, Composer, NPM, Bower y muchos otros sistemas del estilo le dan mil vueltas a NuGet. Esta gente no sabe trabajar con la comunidad.

Sobre compatibilidad cruzada

A lo largo del desarrollo he realizado algunos experimentos interesantes. Hasta el momento he conseguido ejecutar programas compilados en Windows (que usan ColorSharp como dependencia) en Linux a través de Wine; y viceversa, he podido ejecutar esos mismos programas compilados en Linux dentro de Windows a través de Cygwin. No he conseguido hacer funcionar el programa dentro de cygwin dentro de wine, ni dentro de wine dentro de cygwin: una lástima, habría sido divertido.

También he experimentado con NuGet dentro de Wine. No he conseguido nada debido a la dependencia de PowerShell. Sería bonito que Wine hiciera con Pash lo mismo que hizo con Mono, usar el proyecto libre para suplantar a la versión privativa y nativa de Windows, sin embargo no es así. Añado que ReactOS tampoco está por la labor 😦 , tienen problemas mucho más graves que resolver.

Microsoft makes .NET an open source project

Great news! After many years Microsoft has started a process to make .NET (and a lot of its many subprojects) an open source project 🙂 . More info in Miguel de Icaza’s blog : http://tirania.org/blog/archive/2014/Nov-12.html .

In my opinion, making .NET an open source project is not enough, but it’s a big step. We still need a better and more interoperable tool set: Last Mono version installers for Windows, better support for Linux in NuGet, more and better documentation for GTK#, a port of GTK# 3 to Windows (we are sill using GTK# 2.12), RYU‘s JIT SIMD classes in Mono

Mono shouldn’t the main desktop technology in Linux (as Miguel de Icaza pretended), but it’s a good open source project and it lacks the community support that deserves.