Can I get an explanation of the relationship between .NET and Mono?
I have vague memory of reading somewhere that Mono or maybe just MonoBuild was completely obsolete since everything was now open source in .NET.
Does Mono still have a reason to exist? Is it all incorporated into .NET now?
(btw, I still don't get why it's called .NET, and I don't know if assemblies are native code or bytecode wrapped in the same binary format as .exe, where is the ".NET for hardcore open source Linux nerds" blog post?)
There used to be .NET Framework (which was a Windows only runtime built by Microsoft) and Mono (an open source implementation for various other platforms).
In 2016 they started building .NET Core which is new open source implementation (built mostly by Microsoft) which runs on more platforms. For a while all three existed side by side.
Eventually .NET Core caught up and overtook the other implementations. These days Framework is legacy. Core has been renamed to just .NET (since it's now _the_ runtime) and Mono (as far as I know) has been totally replaced by it.
This is all from memory, so apologies for any inaccuracies!
While correct, modern .NET supports currently two VM: CoreCLR and MonoVM. The later mainly as AOT compilation target for iOS, Android and WebAssembly. Mono is still better suited for that, but the AOT compilation of CoreCLR is progressing.
I think there is nothing else left from the Mono project like the class library or the compiler/toolchain.
Python 2 => 3 also has the issue that some things don't exist in Python 3, or are done in incompatible ways.
As I mentioned a few times, I have been involved in projects were that full rewrite happened to be .NET Framework => Java, which shows how the customers were mad at what was left behind.
Although there is some irony in that, as Java's Python 2 problem is the transition into Java 9.
> as Java's Python 2 problem is the transition into Java 9
Binary incompatibility between 7 and 8 as well, we got an enterprise product that got bought by SAP and will eternally be stuck on Java 7, but at least unlike the other one, it doesn’t require much maintenance as it’s only used internally ;)
> Python 2 => 3 also has the issue that some things don't exist in Python 3, or are done in incompatible ways.
What doesn’t exist? I don’t like python, but it always seemed like those changes were all relatively minor?
The way unicode was handled, integer division semantics, some libraries went away, and a few other things change enough that 2to3 wouldn't handle everything, which in a dynamic language is a big pain to track down in a huge codebase.
Naturally some changes on the C API for native libraries as well.
Fair enough, thought that still sounds like things where an upgrade path is available, just not automatically, instead of "you have to throw the code away because it simply doesn’t work anymore".
.NET used to be Windows-only. Mono was a cross-platform implementation of .NET done by a third party and not by Microsoft.
Microsoft eventually created .NET Core, their own cross-platform implementation of .NET, which eventually became .NET 5, 6, 7, and now 8.
Mono should not be used for new projects. .NET 8 is vastly superior. Mono is only still used for things like Unity who have decided to not or slowly migrate off of Mono.
It's not that Unity doesn't want to move away from Mono, it's just that Mono is tightly integrated into the Unity engine making migration difficult. They have announced that they are working on it, but it will likely take years until there is anything usable publicly available.
Apparently .NET MAUI iOS target can run on NativeAOT[0] instead (with better performance and smaller binary size) but I'd expect it to be a bit unstable experience for now since it's very new.
> (btw, I still don't get why it's called .NET, and I don't know if assemblies are native code or bytecode wrapped in the same binary format as .exe, where is the ".NET for hardcore open source Linux nerds" blog post?)
.NET can now do either one - you can ship PE bytecode and require the dotnet runtime, which works in practice similar to e.g. Python or Ruby (you run `dotnet ./myapp.dll`), or you can precompile it into a single platform-specific binary that is just a native code app, similar to Go's static binaries.
One reason is that Mono supports a bunch of minor platforms [0] that .NET doesn't - yet (for example, FreeBSD support has an active Github issue [1]... although it's been active for _eight years_).
If you're running Windows, Mac, or Linux I'm not aware of major reasons to use Mono.
The answer is complicated, that's why.
In a good way kinda - you can build IL bytecode exes that are portable across all platforms and you can also build fully native platform specific binaries too (though there can be gotchas around library support).
In olden days .net was Windows only. Mono was an independent effort to build a cross platform runtime. With .net core MS made it open source and cross platform. They also bought Mono but that is more or less abandoned I believe latest versions of .net run well on Linux and Mac and now also in browser. They have also dropped Core from the name and there is only one .net which is open source and cross platform.
Mono wasn't abandoned so much as "code merged" (a beauty from that both are now open source). Mono merged into the main .NET repo and the best parts of it became "a single runtime". There are still useful parts of Mono left that aren't exactly inside the "a single runtime" yet, but the amount of "Mono code" shrinks with each version and the more it is all "just" .NET.
I have vague memory of reading somewhere that Mono or maybe just MonoBuild was completely obsolete since everything was now open source in .NET.
Does Mono still have a reason to exist? Is it all incorporated into .NET now?
(btw, I still don't get why it's called .NET, and I don't know if assemblies are native code or bytecode wrapped in the same binary format as .exe, where is the ".NET for hardcore open source Linux nerds" blog post?)