Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

For enterprise windows-based solutions, .NET is the best choice sometimes. How is Mono looked at by the enterprises who have to use Linux (or rather prefer to use Linux) ? Assuming that the developers aren't a problem and they are familiar with .NET/Mono and other possible competitors such as Java.

Would a medium/large company run Mono on their servers as opposite to technologies such as Java? Do you know of any such company ?

share|improve this question

7 Answers 7

We used it in the large corporation where I work. We didn't plan on it from the start of the project but it just worked out that way.

We had an internal project that we developed in .NET, once we got into UAT, the business owner wanted to open the app up to some customers as well as the internal staff. The majority of our external (DMZ) servers are Linux based and the Windows servers that are in the DMZ weren't a good fit (too close to capacity). Instead of buying new hardware someone suggested running the app on Mono. We spent a couple of days doing our own testing and then released the app to QA, then UAT. We had no issues.

If we had been given the requirement at the start of the project, we may not have chosen to write it in .NET, but this was one nice outcome to a very, very late requirement change. Now we're pretty confident that if it came up again we could successfully deploy to Mono (although I would think eventually we'd have to tweak some code, I think we just got lucky).

share|improve this answer
1  
Nice war story. –  user1249 Jun 3 '12 at 7:30

My company develops a major mostly-.NET desktop application and releases Linux versions running on Mono, so I would say yes, there is definitely a place for Mono in enterprise Windows-based solutions.

We package Mono with the installation of our application, not requiring the users to install it separately (and this way we control the version, too).

share|improve this answer
    
Yes, you have to control which mono version to use. The one comes with linux distros is usually quite old so it has more bugs. We ship that from git mono-2-10 branch from time to time in order to reduce bugs and we know which possible bugs our program may suffer. –  linquize Jun 3 '12 at 1:49

I haven't used mono commercially, but I use it privately, because I work in a Windows company, but privately am a Linux user (so I can reuse what I do at work).

Overall, I agree with Miguel de Icaza who says:

  • 25 % of .NET applications work out of the box with mono
  • another 25% can be made to work within a day or less
  • further 25% can be made to work within a week
  • The last 25% require a complete rewrite of the application (WinForms/COM)

Mono works fairly well, but there are some problems:

  • VB.NET support only for .NET <= 2.0
  • Windows authentication not implemented
  • WPF not implemented
  • WCF support incomplete
  • Entity Framework not implemented and no plans to implement
  • "ASP.NET Web Parts" not implemented
  • No COM-interop support
  • Sybase connection for version 15.5 (latest) doesn't work
  • Bugs and incompleteness in the C# class library (e.g. XML was buggy in mono < 2.6)
  • The Linux web-browser control requires GTK#

Then the minor problems:

  • Windows Forms work, but aren't always rendered properly
  • MonoDevelop can't design windows forms
  • MonoDevelop 'step through' debugging doesn't really work
  • Mono-Service crashes after 5 hours...

Form what I can say:

  • WebServices function excellently
  • If you run a WebApplication, it works fairly well (if it doesn't use WebParts).
  • If you run WindowsForms, it won't always look very nice (to say the least).
  • There is no working equivalent for Microsoft Reporting Service (FYIreporting is the closest thing to it, but it's slow, buggy and very incomplete, plus no activity since more than a year)
  • You will experience problems if you need to create Word or Excel documents.

If you want to develop .NET on Linux

  • You could develop ASP.NET there (debugging & step through works very badly)
  • You can't really develop WinForms on Linux
  • You need to use GTK# instead of WinForms

In other words:

  • Mono has it's place in running web applications and WebServices and MailServers.
  • But it's not viable to run WindowsForms applications, you need to write applications with GTK#
  • It lacks a reporting solution and MS file format support (or working libraries therefore)
share|improve this answer
    
I've had no difficulty with Winforms support in Mono. Granted, the result is not exactly artwork, but that's because it's not running in Windows. –  Robert Harvey Dec 24 '10 at 17:56
2  
Note: entity framework is now open source. mono team started including it in current development version –  linquize Aug 9 '12 at 14:02
    
@Robert Harvey: Grantet, much of the basics work (e.g. button, treeview, text-fileds, labels, even datagrids), but as soon as you add a splitter, it's "Not implemented exception". –  Quandary Nov 18 at 19:10

I think the main concern many corporates would have is the license issues between Mono and Microsoft. My understanding is that while Microsoft have formally agreed that Mono can use the core .NET technologies, but outside that, including about of very commonly used stuff, is more of a grey area legally with Microsoft stating no firm position on it one way or the other.

That obviously leaves open the possibility that down the line they'll demand license fees or just sue for patent violation. It's unlikely that either would happen from the way they're behaving right now but most corporates don't like that sort of uncertainty, particularly not when it comes with potential liabilities and costs attached.

share|improve this answer
3  
My understanding was that the CLR/C# spec is not proprietary and Mono implements that spec without much (if any) reliance on the original .NET source. –  Anna Lear Dec 24 '10 at 16:54
5  
@Anna: I may not be an expert on these things, but I am pretty sure that Mono is still at risk, regardless of how little reliance it has upon the original .NET source. This is because of Microsoft's patents (which can be enforced with or without Mono copying Microsoft's code). I think the FSF succinctly summarized the problem here: fsf.org/news/2009-07-mscp-mono –  Adam Paynter Dec 25 '10 at 23:20

I don't think there's much space for Mono there:

Java is already established platform on Linux, with huge community and abundance of enterprise quality libraries and tools, both commercial and open-source. I don't see any reason to pick Mono over Java when starting new project targeting Linux (or Mac), unless there's some specific circumstance (see Walter's answer).

share|improve this answer
7  
One reason would be that C# is just a more mature, better designed language than Java and easier and more hassle-free to work with. That sounds like a very compelling reason to me. –  Konrad Rudolph Dec 24 '10 at 22:37
3  
@Konrad: That's true for recent C# versions (they started off about the same, but it evolves way faster than Java). Unfortunately, my experience tells me that enterprises rarely pick language on its merits. On the other hand, both .NET and JVM offer alternative languages, arguably better designed than both C# and Java, so I wouldn't really favor one over another based on that. –  Mladen Jablanović Dec 25 '10 at 8:28
    
Had Mono been available earlier, we would have considered .Net/Mono for our environment. However, it wasn't, so now we're down the Java path. We may do some work in .Net/Mono, but the primary environment is Java and is expected to stay that way for quite some time. Being someone that works in both, I don't get the Java bashing from the C#ers. They're VERY similar. The C# language is slightly better, but the Java libraries and extra JVM languages are better. As platforms overall, they're very nearly equal. The library stuff is more important to me, so I might even give the nod to Java. –  Brian Knoblauch Dec 22 '11 at 13:00
1  
Mono allows to use C# in Linux. C# has so many syntactic sugar to facilitate development. –  linquize Jun 2 '12 at 14:44

Before using mono, we have to ensure no hardcoded '\' for path string (use Path.Combine()) or "COM" prefix (simply accept string instead of integer) for serial port is in the program.

What works well:

  • Console App
  • Web App

Problems encountered:

  • WinForms not stable: crash randomly.
  • Language support: The community may not know every language well, especially the dialects for some countries/cities. Corresponding locales / collations may be missed.
  • Rarely used methods may have incompatible behaviour with .NET.
  • xsp only supports HTTP 1.0. Currently it lacks support HTTP 1.1.
  • Browser control does not work well.

It is better to use mono internally (such as ERP system) as a controlled environment.

share|improve this answer

Mono is a great alternative if you already have .NET code that needs to run on a cross-platform environment. Mono is used pretty extensively in the business world specifically to solve this very problem.

I would argue against using the existence of Mono as an excuse for starting a project with .NET that you know will need to be cross-platform. The reason for this is the lag between the state-of-the-art with .NET versus the development speed of Mono.

On the other hand, if you do intend to use Mono in a future project, I would caution you to target the Mono framework and run on .NET as a secondary alternative since Mono is largely a subset of the full .NET functionality.

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.