Mono (with Xamarin Platform), .NET Framework and .NET Core
Hi! I'm begginer in Mono/.NET Framework and I wanna know about it.
I've read about .NET Framework, Mono (including Xamarin Platform) and .NET Core.
I know .NET Framework is the main implementation but is stuck to the Windows-family OS and Mono was made to run in Windows-family OS as well as UNIX-based OS (Mac OS, Linux-flavors, *BSD, Solaris, ...) and that was a great idea and work, but they doesn't work together as was thought it, maybe by dependency of the OS's and many other things (f.e.: WinForms can't be run on Linux. So, they created GTK#... So good!).
After all that... The Xamarin people saw a business opportunity with the iOS and Android platforms and made the Xamarin Platform (previously known as MonoTouch and Mono for Android) which run over Mono according that I know.
I was reading about .NET Core, wich is cross-platform like Mono, has a subset of .NET Framework and Mono since version 4 is based on it (and that was a great idea because that makes more portables apps).
So, I have some doubts about the platforms:
Is Mono now a superset of .NET Core or just use the class libraries as .NET Framework do it?
1.- If it's a superset:
1.1.- What's the benefits for use Mono instead of .NET Core if both are cross-platform? (I know that .NET Core is a very simple implementation but for the developers as me, we wanna know it).
1.2.- Will be easely migrate apps from .NET Framework to new Mono?
1.3.- Now will be true that we can run apps over .NET Framework and Mono without adapt the source code?
1.4.- Xamarin Platform apps would be run over .NET Core?
2.- If just use the class libraries:
2.1.- Why keep 2 platforms that works like each other but the behavior and performance are differents?
2.2.- How hard would be adapt the source code to migrate among platforms (.NET Framework, Mono and .NET Core)?
Re: Mono (with Xamarin Platform), .NET Framework and .NET Core
You made up a few assumption which are incorrect based on my understanding.
* WinForms run on Linux (Mono has an implementation, but it hasn't been
evolved or actively extend right now).
* GTK# was not created. GTK/GTK+ were there already, so Mono just wraps them
up with C# bindings, aka GTK#. It is a way to interop with native operating
system APIs. You can see Qt/Cocoa bindings too.
1.- Don't ever try to compare .NET Framework/.NET Core/Mono in the hard way.
They have overlaps but relationship such as "superset" does not exist. They
each have a unique API surface.
1.1.- Mono supports more native API bindings and platforms at this stage
than .NET Core. When .NET Core grows to a large size, then one day you can
only use .NET Core. .NET Core is not a "simple implementation" at all. It is
the new (though not brand new) CLR implementation from Microsoft.
1.2.- What do you mean by "new Mono"? Like any migration, you need to assert
API surface used by your app and then fill the gaps manually. Some is easy
while others are hard. Try it.
1.3.- What do you mean by "without adapt the source code"? I don't think you
will get Java style compile once run anywhere yet.
1.4.- Xamarin apps run on mobile OSs (or macOS). Their relationship with
.NET Core right now is that .NET Standard libraries can be consumed by
Xamarin projects. No more imagination please.
2.1.- What are the "2 platforms" you refer to? If you mean Mono and .NET
Core, then all efforts right now are focused on .NET Core at least at
Microsoft side. Mono plans to adopt .NET Core bits (instead of open source
.NET Framework source files) but in most cases just for compatibility
purposes. All developers should use .NET Core if possible, and fall back to
Mono if you really have to (IMHO).
2.2.- Again, try. No real answer could be given to this.