I'M trying to learn to program and I'M also new to the Linux OS. I've just started with Ubuntu. Anyway, I was reading a long list of post from Linux users posting on Mono. I'M trying to figure out where all the negative feedback concerning Mono is coming from. Why are so many Linux people against it?

Is it just because C# was created by Microsoft? I mean hey, if it works it works and lets use it. I noticed a lot of the complaints where that Microsoft has a patent on it or something like that. So what exactly does that mean anyway, what relevance does that have and how will it affect us? It works and it's free so I just want to know, what's the big deal? Is this the typical Linux and Mac attitude to act superior to everything Windows? Or is there some real substance behind these allegations? Thanks

Your question explains the situation far better than any answer could. No matter what proof is provided, the opposition (on either side) will dismiss, ignore.

Mono is a great tool. If you're learning to code and want your programs to run on Linux, Apple, and Windows, I'd say go for it.

But don't box yourself in. There are a lot of great languages out there. Java is good, and let's face it good old "C" still dominates.

From what I've seen there are two main camps who are opposed to Mono. There are the Microsoft haters, many of whom simply dislike Mono because it implements C# and emulates the .NET runtime, which are both 'evil' Microsoft technologies. Others see the Mono runtime as an unnecessary, unwelcome and bloated addition to their system. There are other arguments used by various other groups who are anti-Mono, but those are probably the top two from the Microsoft haters!

Then there are all of the 'Windows only' Microsoft lovers/snobs who see Mono as an inferior version of .NET. The way they see it, Microsoft will always be one step ahead of the Mono project. Microsoft will introduce new features into .NET and the Mono project will follow on behind them like lost, scavenging dogs.

But this viewpoint doesn't hold a lot of water IMHO. Even if Microsoft does go ahead and add lots of new features to .NET, Mono doesn't necessarily need to try to keep up with them. What they've already implemented of .NET will do the job sufficiently. Mono already allows users of different platforms to be able to compile C# code on their native platform. (Which is the main thing)

All it will mean is that Mono applications would not have the most cutting edge features of the very latest version of .NET. But the core .NET features are still there and are enough to allow many developers to develop robust applications with.

As it is, there are several C#/Mono based apps for Linux which outperform and/or outshine equivalent programs written in other programming languages. Tomboy notes and F-spot are two Mono apps which immediately spring to mind.

Another thing to bear in mind are the words 'free' and 'freedom'. Both of these words can have several slightly different contexts/meanings in relation to free/open source software and Linux. The most important definition for you is that you are free to choose what you install on your system, whether that software be free or proprietary; open-source or closed-source.

So if you choose to keep the Mono runtime on your Ubuntu machine (Mono ships with Ubuntu by default anyway), that is up to you.

Likewise, if you decide to install Monodevelop and want to use C# to develop your applications; again, that is entirely your choice. Nobody can take that freedom away from you!

As a programmer myself, a programming language is merely another tool in my toolbox. Whether it is Assembly, C, C++, C#, Java, Python, Ruby, Lisp, Actionscript, or whatever; it makes no difference to me at the end of the day. It is simply a means to an end.

Continuing with the 'programming languages as tools' analogy; you need to select the correct tool for the job.
For example when using *nix:
If I want to create a plugin for gEdit, I'd need to use C/C++ and/or Python. For an Emacs plugin, Lisp is the order of the day.
For creating *nix system programs/tools then C/C++, shell scripting or Python are required.
For desktop/GUI applications, I typically use C/C++ or Python (with a good GUI library..usually wxWidgets or tkinter), but Mono would also be a very good choice!

Naturally, as a C++ programmer by trade, I primarily use C++ for my *nix desktop apps with Python as my second choice. But I certainly wouldn't be averse to using Mono!

So far I've only used Mono to port a couple of my old C# based Windows .NET projects over to *nix (No point porting working C# code to a different language, that would be madness!).
And so far it's proved to be painless. Each time it was as simple as importing the visual studio solution into Monodevelop and re-compiling. I didn't have to alter a single line of code.

Going back to your situation:
As programming languages go, C# is a pretty good language to start programming with. It's object oriented and has similar syntax to C and C++, but isn't quite as complex as C or C++.
Python or Java are also good starting points to learn the art of programming.

But if you want to get right into the guts of *nix system programming, then learning C is essential as much of Linux and it's libraries are written in C. Also lots of *nix software is written in C++, so that would also be advantageous to know.

Anyway, I say go for it! Give C#/Mono a shot but don't be afraid to eventually branch out and try some other programming languages too!

Cheers for now,
Jas.

I've just noticed your question about software patents.
With regard to the patent issues surrounding Mono, this is a very valid concern and one of the more rational arguments against the use of Mono.

You can see some information about the issues surrounding the Mono patent problems on the wikipedia page for the Mono project:
http://en.wikipedia.org/wiki/Mono_%28software%29

The main points to note from the wiki page are:
1. Most of Mono. i.e. The actual part that implements the ECMA standard stuff for the C# language is probably free of any patent issues, but several components in the Microsoft compatibility layer of Mono (which isn't actually fully implemented, or required to develop or use Mono applications) is the part which is under dispute.

2. In 2009 Microsoft placed their ECMA specifications for C# and .NET under their community promise, meaning that they won't use their patents against anybody else who implements, distributes or uses alternative implementations of .NET. But their position on things not covered by their ECMA specs like ASP.NET, ADO and Windows Forms is still unclear (and it is these that are the main bone of contention with Mono, along with certain other windows .NET libraries that are not covered by the ECMA.).

Also mentioned is the fact that Microsoft signed a deal with Novell which protects Novells developers and customers from prosecution for developing/using Mono, but it doesn't cover anybody else using Mono. Because of this, people like Richard Stallman believe that it is dangerous to use Mono because of the very real threat of patent suits. He and the FSF recommend that people avoid creating free software using Mono.

I've seen somewhere else on the web where Richard Stallman has been quoted as saying that the free software community should avoid coming to rely upon applications written in Mono (for example, avoiding using them as critical parts of the Linux desktop), because if Microsoft ever did decide to enforce any of their patents, then the open source community would face potentially disasterous setbacks. Not only in terms of development, but also financially (large bills for damages etc). Both of which would be detrimental to the open source community, if not the final nail in the coffin!

Now, I'm no lawyer or anything (merely a code-monkey) but my take on the whole Mono situation is this:
If you want to use Mono to learn how to program in C# on *nix, you're probably safe as long as your programs are for your own use.

But if you decide to release one of your Mono-based apps to the open-source community. Then you may or may not be in breach of some patent or other and therefore potentially exposing yourself to the risk of prosecution.

But then the insanity of software patents is everywhere ATM. Apparently Gnome and KDE have components which are claimed to be in breach of various patents. Even open source codecs like Ogg/Theora are under threat!

It would seem to me that software patents currently pose one of the biggest threats to all software developers, not just those in the free/open source community. Developers of proprietary software both large and small are also under constant attack.

Take a look at the following film:
http://patentabsurdity.com/watch.html
It explains rather a lot about the issues surrounding software patents in the USA. No doubt the situation is similar in other parts of the world where software patents have successfully been awarded to companies and then asserted!

Cheers for now,
Jas.

It should also be noted that the FSF are working on their own implementation of .NET, the DotGNU project. Knowing the FSF, they'll most likely only stick to and implement whatever is specified in the relevant ECMA's for .NET, which will ensure that they are covered by Microsofts community promise and hence immune to any patent suits.

Oracle+Linux users have an option not downloading the mono package otherwise, they can perform the actions by using the steps below: Oracle+Linux users can have nothing better than this,mono is well integrated with Oracle database,thus allowing you to write programs in C# that can create a table and also be able to store and fetch data from the database.<a href="http://www.http://ubuntumanual.org/posts/392/how-to-do-c-and-net-programming-in-ubuntu-using-mono"> Mono- .Net Programming C# : ubuntu 11.04</a>

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.