¿Cómo se evitaba la descarga en ambos monos?

Mono: Tu puerta al desarrollo C# en Linux

28/04/2021

Valoración: 4.5 (11897 votos)

El lenguaje de programación C#, desarrollado por Microsoft, se ha consolidado como uno de los más robustos y populares a nivel mundial. Tradicionalmente, su desarrollo estaba íntimamente ligado al ecosistema de Windows a través del potente IDE Visual Studio. Sin embargo, la estandarización del lenguaje y la apertura de la plataforma .NET han derribado esas barreras. ¿Significa esto que puedes dejar atrás Windows para programar en C#? La respuesta es un rotundo sí. Gracias al proyecto Mono, una iniciativa de código abierto, el framework .NET se expande más allá de sus fronteras originales, aterrizando con fuerza en sistemas operativos como GNU/Linux y macOS. En este artículo, te guiaremos a través del fascinante mundo de Mono, mostrándote cómo instalarlo, qué herramientas usar y cuáles son las consideraciones clave para convertirte en un desarrollador .NET multiplataforma.

¿Cómo se evitaba la descarga en ambos monos?
Si el mono ejecutivo presionaba la palanca al menos una vez cada 20 segundos, ninguno de los dos monos recibía una descarga. Uno de los monos, denominado el ejecutivo del par, podía evitar la descarga apretando una palanca frente a él que interrumpía la activación del estimulador eléctrico.
Índice de Contenido

¿Qué es Exactamente Mono?

Mono es una implementación de código abierto e independiente del .NET Framework de Microsoft. Su principal objetivo es permitir a los desarrolladores crear y ejecutar aplicaciones .NET en una amplia variedad de sistemas operativos. Aunque su cuna fue el proyecto GNOME, con el tiempo ha ganado el apoyo de gigantes como Xamarin y, finalmente, la propia Microsoft. La gran ventaja de Mono es su versatilidad, pues no se limita a Windows, sino que se ejecuta de forma nativa en un gran abanico de entornos *nix, incluyendo las distribuciones Linux más populares, macOS y Solaris.

La plataforma Mono se compone de varias piezas fundamentales que trabajan en conjunto:

  • Compilador de C#: Es el encargado de traducir tu código C# a un lenguaje intermedio (CIL) que el runtime puede entender.
  • Mono Runtime: Es el corazón de la plataforma. Este entorno de ejecución se encarga de la compilación Just-In-Time (JIT), la gestión de memoria (recolección de basura) y la ejecución del código en la plataforma de destino.
  • Biblioteca de Clases Base (BCL): Proporciona un conjunto de librerías fundamentales que son compatibles con las del .NET Framework de Microsoft, permitiendo una alta portabilidad del código.
  • Biblioteca de Clases de Mono: Incluye librerías adicionales y específicas del proyecto Mono, como Gtk# para la creación de interfaces gráficas de usuario en entornos no Windows.

Primeros Pasos: Instalación de Mono en Linux

Para empezar a programar con C# y .NET en Linux, el primer paso es instalar el framework Mono. El proceso es bastante sencillo y se puede realizar directamente desde la terminal en la mayoría de las distribuciones. A continuación, te mostramos los comandos necesarios.

Instalación en Debian, Ubuntu y derivados

Para estas distribuciones, puedes instalar el paquete completo de Mono con un simple comando. Este paquete incluye el runtime, las librerías de desarrollo y todo lo necesario para empezar.

sudo apt install mono-complete

Es importante tener en cuenta que la versión disponible en los repositorios oficiales de tu distribución podría no ser la más reciente. Si necesitas características de vanguardia o la máxima compatibilidad con las últimas versiones de .NET, es recomendable agregar el repositorio oficial del proyecto Mono:

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF echo "deb http://download.mono-project.com/repo/debian stable-buster main" | sudo tee /etc/apt/sources.list.d/mono-official-stable.list sudo apt update sudo apt install mono-complete

Instalación en CentOS y Fedora

En las distribuciones basadas en Red Hat, el proceso implica primero importar la clave del repositorio y luego añadirlo antes de proceder con la instalación:

rpm --import "http://keyserver.ubuntu.com/pks/lookup?op=get&search=0x3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF" yum-config-manager --add-repo http://download.mono-project.com/repo/centos7-stable/ yum install mono-complete

El Entorno de Desarrollo: MonoDevelop y Alternativas

Tener el framework instalado es solo la mitad del camino. Para escribir, depurar y gestionar tus proyectos de forma eficiente, necesitas un Entorno de Desarrollo Integrado (IDE). La opción oficial y más conocida en el ecosistema Mono es MonoDevelop.

¿Cuál es la versión más reciente de Mono?
Aunque el comando mencionado instalará la última versión disponible de Mono en los repositorios de Debian, Ubuntu y sus derivados, la versión más reciente de Mono es la 4.6.2 al momento de escribir esto. Sin embargo, la versión disponible en los repositorios de Ubuntu puede ser menor, como la 4.2.1.

MonoDevelop: El IDE Oficial

MonoDevelop es un IDE completo y potente diseñado específicamente para C# y otros lenguajes .NET. Su instalación es tan sencilla como la de Mono:

  • Debian/Ubuntu:sudo apt install monodevelop
  • CentOS/Fedora:yum install monodevelop

Al igual que con el framework, puedes encontrar versiones más actualizadas, paquetes Flatpak universales y el código fuente directamente en el sitio web oficial de MonoDevelop.

Omnisharp: La Alternativa Moderna

Paralelamente a MonoDevelop, ha surgido un proyecto que ha revolucionado el desarrollo .NET en todas las plataformas: Omnisharp. No es un IDE, sino un conjunto de herramientas de código abierto que llevan la inteligencia del lenguaje C# (Intellisense, análisis de código, etc.) a una gran variedad de editores de texto modernos. Esto significa que si prefieres trabajar con editores como Visual Studio Code, Atom, Sublime Text o Brackets, puedes tener una experiencia de desarrollo de primer nivel. La instalación suele ser tan simple como buscar e instalar la extensión correspondiente de C# (generalmente impulsada por Omnisharp) desde el mercado de extensiones de tu editor preferido.

Mono vs. .NET Framework: Diferencias Clave a Considerar

Aunque Mono ha hecho un trabajo excepcional para ser compatible con el .NET Framework de Microsoft, no son idénticos. Entender sus diferencias es crucial para evitar sorpresas al desarrollar aplicaciones multiplataforma. Originalmente, Mono se desarrolló haciendo ingeniería inversa sobre la documentación de .NET, lo que significaba que siempre iba un paso por detrás. Hoy, con gran parte de .NET siendo código abierto y con una colaboración más estrecha, la brecha se ha cerrado enormemente, pero persisten diferencias fundamentales.

Característica.NET Framework (Microsoft)Mono
Plataforma PrincipalWindowsMultiplataforma (Linux, macOS, Windows)
LicenciaMixta (partes open source, partes propietarias)Open Source (Licencia MIT)
Compatibilidad de GUICompleta (WPF, Windows Forms)Limitada (se basa en Gtk# u otros toolkits)
Compatibilidad de ServidorTotal y optimizada para servidores WindowsMuy alta, casi 100% para aplicaciones de consola y servidor
DesarrolloLiderado por MicrosoftLiderado por la comunidad, con apoyo de Microsoft

La diferencia más significativa radica en las Interfaces Gráficas de Usuario (GUI). Tecnologías como Windows Presentation Foundation (WPF) y Windows Forms están profundamente integradas en el API de Windows y no son portables. Aunque Mono ofrece alternativas como Gtk#, portar una aplicación de escritorio compleja de Windows a Linux no es una tarea trivial y a menudo requiere una reescritura parcial de la interfaz. Sin embargo, para aplicaciones de servidor, servicios web y aplicaciones de consola, la compatibilidad es casi total.

¿Se pueden usar aplicaciones Windows en mono?
No necesariamente aplicaciones Windows, en Mono si no recuerdo mal también vale ;). Donde no vale es en el CF donde si tienes que recurrir al método GetExecutingAssembly. Un saludo Gracias 01. Oct, 2007 en 9:27 am

Además, hay que tener en cuenta pequeñas pero importantes diferencias relativas al sistema operativo:

  • Sensibilidad a mayúsculas/minúsculas: El sistema de archivos de Linux distingue entre 'Archivo.xml' y 'archivo.xml', mientras que Windows no lo hace. Esto puede causar errores sutiles pero frustrantes si no se gestionan los nombres de archivo de forma consistente.
  • Estructura de directorios: Olvídate de las unidades 'C:'. En Linux, las rutas de los archivos siguen una estructura jerárquica que parte de la raíz '/'. Tu código debe ser agnóstico al sistema de rutas para funcionar en ambas plataformas.
  • Entornos de seguridad: Los modelos de permisos y seguridad son completamente diferentes entre Windows y Linux, lo que puede afectar el comportamiento de tu aplicación al acceder a recursos del sistema.

Preguntas Frecuentes (FAQ)

¿Puedo ejecutar aplicaciones de Windows (.exe) directamente con Mono?

No necesariamente. Mono no es un emulador de Windows como Wine. Mono ejecuta código .NET compilado (ensamblados .dll o .exe). Si un archivo .exe fue creado con .NET y no utiliza ninguna librería específica de Windows (como las de la GUI), es muy probable que se ejecute sin problemas en Linux usando el comando mono miaplicacion.exe. Sin embargo, si depende de APIs de Windows, no funcionará.

¿Mono sigue siendo relevante con la llegada de .NET Core (ahora .NET 7, 8, etc.)?

Esta es una excelente pregunta. .NET Core (y sus sucesores, simplemente llamados .NET) es la evolución multiplataforma, de código abierto y de alto rendimiento de .NET, liderada por Microsoft. Gran parte de la tecnología y la filosofía de Mono fueron integradas en .NET Core. Para nuevos proyectos multiplataforma, .NET 8 (o superior) es la opción recomendada. Sin embargo, Mono sigue siendo vital para proyectos heredados y, fundamentalmente, es la tecnología que impulsa las plataformas de desarrollo de juegos como Unity y anteriormente Xamarin para aplicaciones móviles (ahora evolucionado a .NET MAUI).

¿Es MonoDevelop la única opción para programar?

Definitivamente no. Como mencionamos, la combinación de Visual Studio Code con la extensión de C# (impulsada por Omnisharp) es hoy en día una de las opciones más populares y poderosas para el desarrollo .NET en todas las plataformas, incluyendo Linux.

Conclusión

C# y la plataforma .NET han trascendido sus orígenes ligados a Windows para convertirse en un ecosistema de desarrollo verdaderamente multiplataforma, y el proyecto Mono fue el pionero que abrió ese camino. Aunque la llegada del moderno .NET ha cambiado el panorama, el legado y la tecnología de Mono siguen siendo fundamentales. Hoy en día, programar aplicaciones de servidor, servicios y herramientas de consola en C# sobre Linux no solo es posible, sino que es una opción robusta, eficiente y productiva. Si bien las interfaces gráficas de escritorio siguen siendo un desafío, para el desarrollo backend, C# en Linux es una realidad sólida y una habilidad muy valiosa en el mercado actual.

Si quieres conocer otros artículos parecidos a Mono: Tu puerta al desarrollo C# en Linux puedes visitar la categoría Juegos.

Subir