Can you develop Linux applications with Xamarin?

Is it possible to develop and build Linux applications with Xamarin with the same code base?

After a few years with Ubuntu, my main OS right now is Windows again. But it's not impossible that I could switch to Mac.

Right now I have a bit of experience with Qt and no experience with Xamarin. With Qt you can develop on Windows, Linux, and Mac and for Windows, Linux, Mac, iOS, Android, Windows Mobile, ... They are pretty clear about that.

Since Xamarin is free and open source now and I still don't have much experience in Qt, I'm considering trying out Xamarin for cross platform development instead of Qt.

Not being able to release my software for Linux would be a deal breaker for me. Being able to develop on Linux would be nice, but is optional. But after all my Google research, I could only find information and people asking for support to develop on Linux and not for Linux.

As far as I know, this shouldn't be a problem with Mono alone. But as far as I know Xamarin > Mono and I don't get everything in Mono I could get in Xamarin.

I'm also not sure how well-supported Mono will be in the future. For me it looks like Xamarin is much more important for Microsoft than Mono itself.

I'm not sure if it's even possible, since Xamarin is based on Mono, but is it possible that Microsoft will at some point decide not to support Mono with .NET compatibility in the same way as Xamarin, or even cancel Mono as standalone completely?

So I'm looking for one single framework for all desktop and mobile platforms I can rely on, and I want to know if Xamarin and/or Mono and and/or Xamarin + Mono could be an alternative to Qt before I go deeper into any of those solutions.


Solution 1:

Just in case someone else comes accross this q/a: the situation has changed. With Xamarin.Forms 3.0, Gtk# is supported (as preview, at this moment). Therefore, full Linux GUI support is enabled.

So, Xamarin now covers:

  • Android
  • iOS
  • UWP apps
  • WPF apps
  • Linux Gtk desktop applications
  • Mac OS
  • Watch OS
  • tv OS
  • Tizen

The only thing left to wish for: JS/HTML5 Web App target platform, as part of Xamarin :)

Solution 2:

No, Xamarin is not available for Linux. This was a conscious decision made by the Xamarin team several years ago:

Miguel de Icaza 2011-08-04 11:52:37 UTC

We face a QA problem here.

The problem with supporting Linux is that we would need to create a self-contained Mono packaging for all of the bits we ship since most Linux distributions are slightly off when it comes to Mono.

It also means that if we advertise "Linux" we would need to QA a dozen different combination due to different Linux distributions and different editions of each distribution.

Perhaps we would support just a single distribution and a single version, which is closer to what we have to do on Windows/Mac today.

To clarify, the Xamarin product range is not available on Linux (Xamarin Studio, Xamarin.iOS and Xamarin.Android) but MonoDevelop, the foundation of Xamarin Studio, and Mono, the cross-platform .NET runtime, definitely is.

You can build desktop software using MonoDevelop. The MonoDevelop site has plenty of instructions on getting started:

  • Install MonoDevelop on Linux

Solution 3:

Seems that there is a chance of Xamarin Forms work on linux distros. In this reddit thread Miguel de Icaza says:

Some of our team members actually develop in Linux. The reason why we never released the Linux tools is because we were charging a lot of money and people would rightfully expect the software to be fully supported. We had enough keeping our Mac and Windows users happy, and adding an unknown number of Linux distributions sounded like a hard task. Now that we are open sourcing the SDKs and I no longer will feel bad if something does not work under a particular Linux configuration, I will be happy to release the Linux builds.

That is: the fact that Forms is an open source tool currently opens this possibility.

Solution 4:

Yes, as of mid-2018, it is possible to develop cross platform GUI applications that target windows/mac/linux/android/ios using the "Xamarin.Forms" library. Basically, you have one shared library project from cross platform code (UI and other cross platform stuff), and one project per platform for platform-specific code (Xamarin.Forms have one backend implementation for each platform. On Linux, this is using GTK).

However, with MonoDevelop you can only develop/build the cross-platform project and the linux-specific project of the application. You will still need to use Visual Studio or Rider to develop/build for the other platforms.

See the following answer: https://stackoverflow.com/a/53317021/298005