C# (Mono) on FreeBSD
Well, if you have read my blog at all, you will realize that I have a developer job writing in C# on Windows, but it is my personal hobby to use FreeBSD.
I am very excited about Mono. I love the C# language. I also love FreeBSD.
I am going to go ahead and say something bold. Few people now realize this yet, but the ability to code in C# on open source platforms is going to be the single most important feature in the coming years. It will eventually be a standard library that will exist or be one of the first items installed on every system.
For more information:
http://www.mono-project.com/Mono:FreeBSD
Packaging for Mono and related applications on FreeBSD (http://www.freebsd.org) is handled by the BSD# Project. The purpose of this project is to maintain the existing Mono/C# ports in the FreeBSD ports tree, port new applications, and work on resolving FreeBSD specific issues with Mono. BSD# is entirely user supported and is not an official FreeBSD or Mono project.
For Licensing information:
http://www.mono-project.com/Licensing”
Installing Mono
Mono is a port and as always a port is easy to install on FreeBSD.
Note: The version of mono in ports is not necessarily the latest and greated. I recommend that you install the latest version of mono. See this article.
Installing the latest version of Mono on FreeBSD or How to install and use portshaker?
# # |
cd /usr/ports/lang/mono make BATCH=yes install |
Compiling Hello World in Mono
The mono compiler is gmcs. It is simple to compile C# code.
- Create a new file called hw.cs. C# class files end in .cs.
- Add this text to the file:
using System; namespace HelloWorld { class HelloWorld { static void Main(string[] args) { System.Console.WriteLine("Hello World"); } } }
- Save the file.
- Compile the code to create an hw.exe program.
# gmcs hw.cs
Running a Mono Program
Mono programs must be run using the “mono” command.
Hello World
A Mono IDE: MonoDevelop
There is an IDE for Mono called MonoDevelop. MonoDevelop is a port and as always a port is easy to install on FreeBSD.
# # |
cd /usr/ports/devel/monodevelop make BATCH=yes install |
The Mono Develop port integrated with KDE to add itself to the KDE menu under Applications | Development | MonoDevelop. So you can run it from there.
This IDE allows you to create C# solutions. It is possible to run compile them on FreeBSD and run them on Windows, or compile them on Windows and run them on FreeBSD.
Is It Really Cross Platform
C# and Mono are supposed to be cross platform. So I can write it in Windows using Visual Studio or I can write in FreeBSD using Mono Develop and either way it should run on both Windows and FreeBSD and any other platform that supports mono.
So here are the results of my quick tests:
Test 1 – Does the Hello World app run in Windows.
Yes. I copied the file to a Windows 7 64 bit box and ran it. It worked.
Test 2 – Does a GTK# 2.0 Project run in Windows
No. I created a GTK# 2.0 project on FreeBSD in Mono Develop, and didn’t add anything to it, I just compiled it. I copied the file to windows and ran it. However, it crashed.
Supposedly you have to install the GTK# for .NET on the windows box, but it still didn’t work.
Test 3 – Does a Windows Form Application compiled in Visual Studio 2010 in Window 7 run on FreeBSD
Not at first. I created a basic Windows Form application, and didn’t add anything to it, I just compiled it. I copied it to FreeBSD and ran it. It crashed. However, by default .NET 4.0 is used.
Yes, if compiled with .NET 3.5 or earlier. I changed the project to use .NET 3.5 and tried again. It ran flawlessly.
Test 4 – Does a Windows Presentation Foundation project compiled in Visual Studio 2010 in Window 7 run on FreeBSD
No. There is PresentationFramework assembly so the application crashes immediately. I tried multiple .NET versions.
Note: I didn’t really test much more than the basics. I just created new projects, left them as is and tried them. It would be interesting to see a more fully developed application tested and working on both platform and to know what issues were encountered in doing this.
No WPF
Unfortunately there is no WPF and no plans for it. Of course, WPF stand for Windows Presentation Foundation, and so the who “Windows” part of that might need to be changed to something like XPF, Xorg Presentation foundation.
However since there is Moonlight, which is to Silverlight as Mono is to C# and .NET, and Silverlight is a subset of WPF, I have to assume that WPF will arrive in mono eventually, even if it is by way of Moonlight first.