tags:

views:

515

answers:

6

I'm a long time user of the .NET Framework on Windows platforms, but I do a lot of programming on Linux as well. I'd like to take advantage of Mono for some particular projects, but the last time I tried (maybe 2 years ago?), Mono was simply not up to the task. As well, it was particularly difficult to get really good information on the state of Mono from either their site or Googling.

Are there any Mono gurus out there who can simplify the current state of the project for somebody used to using .NET 3.0 on Windows? Roughly how much of the base class libraries are usable, and how much of WinForms?

Thanks in advance!

+4  A: 

I'd say it's come a long way if it can support development of a game creation engine like Unity, which was used to develop Sims 3, among other things. Also, the Mono team is in some ways beating Microsoft at their own game, creating things like a static linker so that .NET code can run natively on the iPhone, and a C# REPL console.

For what it's worth, I've been playing with it on the ASP.NET side, and though there were a few bumps, it has been a very positive experience. I was able to get an ASP.NET MVC app running using NHibernate and MySQL.

Brian Sullivan
+3  A: 

The mono website states that the following C# 3.0 features are supported:

  • anonymous methods
  • iterators
  • partial classes
  • Generics
  • Nullable Types
  • friend assemblies
  • static classes
  • covariance and contravariance
  • property accessor accessibility
  • fixed buffers
  • external assembly alias
  • namespace alias qualifier
  • inline warning control
  • Extension Methods
  • LINQ syntax
  • Expression trees
  • Automatic properties
  • Lambda expressions
  • Anonymous types.
SoloBold
Not sure who downvoted this... personally, I think a list of things that aren't implemented is more important, but a list of things that are is still handy.
R. Bemrose
I agree, R. Bemrose - this list actually assuages my fears a bit, just to see what I can use. very handy. Thanks, SoloBold, for the info!
Mike
+11  A: 

A high-level status: mono-project.com/Plans

API status: go-mono.com/status

In case you want to migrate an existing app to Linux: MoMA

I also think it would be a better idea to ...

  • think about certain use-cases you might have for Mono ... your current question is too general
  • ask concrete questions on the mailing lists, since many smart and knowledgeable people that are active there probably don't read StackOverflow: mono-project.com/Mailing_Lists

A summary from my short experience:

  • Asp.net 2.0 is fully implemented, and I could get Asp.net MVC to work
  • Windows Forms is supported but will never be high quality because it's not a priority. Save yourself the pain and just create a Gtk# interface for your Linux port
  • the base libraries are implemented, and Linq DB is almost there, but you won't have any luck with Windows specific APIs, like WPF and WCF, although Silverlight is implemented in Moonlight
  • Mono is having success in recent games that need a powerful scripting environment. See companies using Mono: mono-project.com/Companies_Using_Mono

For news and stuff, follow Miguel's blog at tirania.org/blog/

Alexandru Nedelcu
great info on that tirania.org blog! thx Alexandru
Mike
+4  A: 

The current mono implementation (2.4) is quite good in terms of .NET 2.0 compilance (and some of the libraries from 3.5, like ASP.NET MVC or LINQ), but is still far away from generic .NET 3.0/3.5. If your application is designed using winforms, and does not use much from the .NET 3.0/3.5, then you have good chances that it'll work with mono. Of course there will be some parts of the .NET 3.5 framework that will probably be never supported, like WPF.

There is a Migration Analyzer on the mono page which can pinpoint you whether your application will run probably fine, or not under mono 2.4.

SztupY
+2  A: 

In my experience with the Window Forms area the .NET 2.0 pieces seems to work well. The more complicated the software the more problems you will have. There are things that must be changed to get things to work. Things like path separators. Also some Win Forms controls behave differently, little things like event firing order creep-up on you. You must test everything, you will find issues, just like in Java. You will find issues in all permutations Win/Mono and Linux/Mono, also Mono does have bugs which are not fixed which could be a show stopper.

You can use to MOMMA tool to find known problems, but it does not catch everything. http://www.mono-project.com/MoMA

debugging problems is very slow, and setting-up an debugging environment is difficult.

I but I think for .NET 3.0 it's too soon yet, unless you are doing it for fun.

eschneider
+1 Very interesting point about the debugging environment. That's one of the real benefits of .net development on the windows side - it will be a tough pill to swallow!
Mike
Yes, especially if you use VS, they tend to use the mono IDE. Then there is the various lib replacements, and window managers.
eschneider
+2  A: 

Special controls like datagridview has come a long way, in my experience. They are getting there, but they are not completely there yet.

I develop a small OpenGL app using the OpenTK library. This application, when run on Windows and Mono, is mostly the same, but stuff like a datagridview seems to be a bit random in the implementation. Pick the newest release of mono, and you should be mostly fine.

In my opinion, the differences are now marginal, without any dealbreakers (execpt maybe the debugger). Monodevelop lacks the nice refactoring tools VS has, though.

Benjamin