Not a competitor. We work closely with the Mono team, specifically Miguel. We are releasing lots of source for them with each .NET Framework release. The Mono team is adopting large quantities of that source to improve Mono. It's a collaboration.
Certainly, there are now two .NET choices on Linux. If you ask Miguel, I suspect he'd recommend .NET Core if you are building a server app.
I got confused when trying to install .NET Core, so sorry if this is a bad question. It seemed like .NET Core depended on Mono. Does it actually? I can't remember what exactly seemed like it depended on Mono. Perhaps Nuget? My memory is fuzzy.
Either way, these two docs [0,1] (not just those particular pages) could really use some clarifications. I had trouble working my way through either of them and they seemed to be giving conflicting information at times.
Granted, I have no significant experience with .NET or Mono. I was able to install Mono once on Ubuntu. But I gave up after trying to install .NET Core on Ubuntu (and FreeBSD) more recently - a week ago. Sorry, I can't provide more substantial criticism right now.
I guess the forums[2] would be the best place to bring these issues up in the future (with more information)?
It wasn't necessarily that [0] or [1] was confusing in and of themselves but that the information seemed to conflict at times. Having multiple sources can be helpful to establish patterns unless they are saying opposite things. But again, I cannot point to specifics.
I guess my current question is, can .NET Core be built on FreeBSD without a Windows machine? It appeared that this, for one, was not the case. This is a bit of a showstopper.
So it looks like the answer is yes then. You do need a Windows machine to build the managed components. So I cannot build (for now) if I do not have a Windows machine.
I did actually follow this guide, though I still wasn't able to compile. The build failed before the managed components section. If I have a chance to look at it again, I'll try to file a bug report or get more help.
You would use Mono for mobile apps (i.e. Xamarin's bread-and-butter), cross-platform desktop apps, and server apps based on currently released versions of ASP.NET.
You would use .NET Core for server apps based on the upcoming version of ASP.NET.
In the future, it would nice if an ecosystem builds up for using .NET Core in other contexts. In particular, I know that not so many people care about desktop GUI development these days... but it would be great if you could combine .NET Core and AOT native compilation. Be able to write cross-platform desktop apps in type-safe, more-friendly-than-C++ language... and be able to ship them as standalone executables rather than worrying about a Mono or Java runtime being installed.
Maybe you'd be interested in mkbundle[1]. A tool mono has for close to a decade that allows you to bundle your app and all its dependencies into a single file.
We use it extensively at Xamarin with our platform.
.Net Core does not have the same API coverage as Mono. So some things are available, while others are not. (I think) Mono is integrating things from the open source parts of .Net, but you still have areas where you might be using something that isn't available in Core but is with Mono (non-win) or the full framework (on windows).
Xamarin is positioning themselves as more of a cross-platform tools company now, since the definitive "multi-platform .Net RT" will come from Microsoft. It looks like Xamarin's business will be to build on top of that.