4 ms·
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 o
by jordigh 3y ago
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?)
- deleted 3y ago[deleted]
- SideburnsOfDoom 3y ago> Does Mono still have a reason to exist? From .NET 5 onwards, the framework is cross-platform. So as a separate thing, Mono isn't usually needed or part of the mainstream any more. > I don't know if assemblies are native code or bytecode wrapped in the same binary format as .exe, Yes, they are. Either, depending on your build target.
- sander1095 3y agoMono is still used by Unity, and by .NET MAUI for their iOS and Android implementations. https://learn.microsoft.com/en-us/dotnet/maui/what-is-maui#how-net-maui-works https://learn.microsoft.com/en-us/dotnet/maui/what-is-maui#h.... For most .NET apps you can use .NET 5/6/7/8.
- neonsunset 3y agoApparently .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. [0] https://devblogs.microsoft.com/dotnet/dotnet-8-performance-improvements-in-dotnet-maui/#nativeaot-on-ios https://devblogs.microsoft.com/dotnet/dotnet-8-performance-i...
- orra 3y agoMonoVM lives on in the .NET Runtime repo. This is used for non-AOT WebAssembly (or at least it was in .NET 5).
- deleted 3y ago[deleted]
- blackoil 3y agoIn 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. Edit: seems some part of Mono still live.
- WorldMaker 3y agoMono 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.
- piaste 3y agoOne 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. [0] https://www.mono-project.com/docs/about-mono/supported-platforms/ https://www.mono-project.com/docs/about-mono/supported-platf... [1] https://github.com/dotnet/runtime/issues/14537 https://github.com/dotnet/runtime/issues/14537
- deleted 3y ago[deleted]
- bmitc 3y ago.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.
- Karliss 3y agoIt'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.
- strich 3y agoThe 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).
- martindevans 3y agoThere 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!
- oaiey 3y agoWhile 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.
- pjmlp 3y agoActually, .NET Framework is the Python 2 of the .NET world, with all the references that it entails. Still too many enterprise products stuck in the old ways.
- Semaphor 3y agoUnlike with python, some things simply can't be ported, though. I maintain a webforms page, the only upgrade path would be a full rewrite
- pjmlp 3y agoPython 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.
- anaisbetts 3y ago> (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.