12 ms·
I worked on Mono a lot back in the early 2000s (back in the SVN days before it moved to Git, even). This move makes a lot of sense. Things evolved a lot over th
by zbowling 2y ago
I worked on Mono a lot back in the early 2000s (back in the SVN days before it moved to Git, even). This move makes a lot of sense. Things evolved a lot over the years. Mono's legacy goals, which are to be a portable CLR (.NET) runtime for platforms that Microsoft didn't care about, don't make much sense today.
Mono made a lot of sense for running places where full .NET didn't, like in full AOT environments like on the iPhone where you can't JIT, or for random architectures that don't matter anymore but once did for Linux (Alpha, Itanium, PPC, MIPs, etc.). When Microsoft bought Xamarin (which itself was born out of the ashes of the Novell shutdown of the Mono effort) and started the DotNET Core efforts to make .NET more portable itself and less a system-provided framework and merge in a lot of the stuff Mono did a single more focused project made more sense.
Mono was still left out there to support the edge cases where DotNET Core didn't make sense, which was mostly things like being a backend for Wine stuff in some cases, some GNOME Desktop stuff (via GTK#, which is pretty dead now), and older niche use cases (second life and Unity still embed mono as a runtime for their systems). The project was limping, though, and sharing a standard library but different runtimes after much merging. Mono's runtime was always a little more portable (C instead of C++) and more accessible to experiment with, but we need that less and less, but it's still perfect for Wine. So, having it live on in Wine makes sense. It's a natural fit.
- lolinder 2y agoIs there somewhere where someone new to the ecosystem can get a simple introduction to all of these different terms and which ones are still relevant today? I looked into .NET somewhat recently and came away with the apparently mistaken impression that Mono was how .NET did cross-platform. I guess I must have been reading old docs, but I'm pretty sure they were at least semi-official. Is there good documentation somewhere for getting set up to develop with modern .NET on Linux?
- older 2y agoThis is the official one: https://learn.microsoft.com/en-us/shows/visual-studio-code/getting-started-with-csharp-dotnet-in-vs-code-official-beginner-guide https://learn.microsoft.com/en-us/shows/visual-studio-code/g...
- Blot2882 2y agoMono was, but newer versions of .NET run on Linux and Mac. You can install at the link below, and then making a project is just `dotnet new console` and run with `dotnet run` https://learn.microsoft.com/en-us/dotnet/core/install/linux https://learn.microsoft.com/en-us/dotnet/core/install/linux
- simion314 2y agoMono implemented the GUI stuff like Windows Forms, do the latest windows cross platform stuff support that? Can you run .Net GUI windows program on linux without Mono but using the latest .Net thing ? I know it was not possible in the past.
- deaddodo 2y ago.net Core doesn't supply WinForms, but WPF is the far more common paradigm for Windows apps now. WPF is supported by projects like Avalonia on Linux. There are also a few other major alternative UI toolkits, more commonly used by cross-platform (vs Windows-exclusive) developers.
- pionar 2y agoYou can use third party libs like Avalonia[1] or Uno[2] [1] https://avaloniaui.net/ https://avaloniaui.net/ [2] https://platform.uno/ https://platform.uno/
- simion314 2y ago
- pionar 2y agodot.net is the official starting point. It'll point you to getting setup with .NET dev on Linux. You can either use VSCode or Intellij Rider.
- SideburnsOfDoom 2y ago> I looked into .NET somewhat recently and came away with the apparently mistaken impression that Mono was how .NET did cross-platform. I guess I must have been reading old docs, History here https://en.wikipedia.org/wiki/.NET https://en.wikipedia.org/wiki/.NET .NET Core 1.0 (2016) was the first cross platform prototype. It got good in a release in 2018 or 2019, I even forgot which now. And took over steadily after that. We don't even think about it any more. "which OS is the prod env on" isn't a factor that causes any support worries at all. Getting set up would start at https://dot.net/ https://dot.net/ And the download page, which should show you content for your current OS https://dotnet.microsoft.com/en-us/download https://dotnet.microsoft.com/en-us/download But also other targets are here https://dotnet.microsoft.com/en-us/download/dotnet/8.0 https://dotnet.microsoft.com/en-us/download/dotnet/8.0 You'll want the latest SDK 8.0.x
- hsbauauvhabzb 2y agoYou’re not alone. I would say I’m not ‘new’ and even developed .net 4.5 for a number of years. I’m just as stumped by the naming mess that Microsoft made across the board in that space. Edit: I say 4.5 because I mean the original thick .net which is not dotnet core, which I think is the way to differentiate between versions, but also all the sub libraries like the orm were iirc named the same but did different things. They should have rebadged everything with a new name that didn’t involve a word that is fairly painful to google (‘core’) can be used in development as well as the name of a framework.
- shiroiushi 2y agoI think Microsoft is completely allergic to naming anything with a unique name or term; in fact, it's almost like they pick names that will be hardest to find with a google search.
- notakio 2y agoThis is compounded by their propensity to rename everything at periodic intervals.
- drw85 2y agoIt's even worse, since they dropped the core now and just call it .NET. So searching has become even more of a pain. It's also pretty much a mess, because many things were different between the versions. So let's say you google how to do something and the result could be: - .NET Framework - .NET core 1 - .NET core 2 - .NET core 2.1 - .NET core 3 - .NET 5+ Many times there will be no clear indication what version the result was built on. On stackoverflow, answers sometimes include all versions varieties.
- neonsunset 2y agoGiven current naming scheme, what do you propose?
- 3np 2y agoAs the OP notes, MS use their own fork of Mono for the .NET Core runtime these days. So you're not wrong but they are different codebases these days.
- hizanberg 2y agoThe .NET Core runtime was never a fork of Mono, it’s always been a separate code base.
- 3np 2y agoI never claimed that the .NET Core runtime is a fork of Mono but it certainly contains one: https://github.com/dotnet/runtime/blob/main/src/mono/mono/mini/mini.c https://github.com/dotnet/runtime/blob/main/src/mono/mono/mi...
- YoshiRulz 2y ago> Is there somewhere where someone new to the ecosystem can get a simple introduction to all of these different terms and which ones are still relevant today? Not really. It's legacy cruft all the way down. But the good news is that if you stay on the beaten path, using the latest SDK and targeting the latest Runtime, everything Just WorksTM.
- bmitc 2y agoFor modern .NET, you don't need to know anything about the legacy terms of Mono, .NET Core, .NET Framework, .NET Standard, etc. All you need is .NET 8 SDK. It's fully-cross platform and installs support for both C# and F#. For example, just download .NET 8 SDK on whatever platform, which is usually very easy on most platforms, and then run `dotnet fsi` to get into an F# REPL.
- tomkarho 2y ago> It's fully-cross platform To a point. Making cross platform native desktop apps is still in the hands of 3rd party vendors such as Avalonia and Uno. MAUI was supposed to fix that oversight to a less than stellar results.
- rahkiin 2y agoThat is like saying C is not cross platform because there is not a library for making desktop apps that use native components on all those platforms.
- kuschku 2y ago.NET/C#'s competitor JVM/Kotlin does provide a UI framework (Jetbrains Compose) that runs on iOS, Android, Windows, Mac, Linux, and the web. That's what you have to compare against, and .NET/C# falls flat.
- pjc50 2y agoThat's also not part of the JVM or the Java language.
- notpushkin 2y agoJetbrains is a third party vendor here, too.
- kuschku 2y ago
- Lutger 2y agoAside from following the default 'start here' documentation, there are various timelines made for fun and profit that visualize the full history, for example: https://time.graphics/line/291016 https://time.graphics/line/291016 This is quite overwhelming, but it can still be useful when reading an article about .NET that is either older or refers to history as you can quickly see where in time it is located.
- kqr 2y agoIf you just want to get into .NET (C# or F#) on non-Windows platforms, the latest .NET release (at the time of writing, 8.0) is what you want. The development experience is good these days. For a historic summary of why it used to be a confusing situation (up until maybe 2020), see https://two-wrongs.com/dotnet-on-non-windows-platforms-brief-historic-summary https://two-wrongs.com/dotnet-on-non-windows-platforms-brief... That also has some background on why the Mono project found itself in a weird spot.
- neonsunset 2y agoIn many ways, .NET today finally fulfills the original Mono goals, and does so in a very performant manner.
- kragen 2y agoi want to love dotnet-core, especially since godot switched from mono in godot 3 to dotnet-core in godot 4, but so far i haven't been able to currently debian has a mono package but no dotnet-core package. i'm not sure why this is; usually when debian lacks a popular nominally open-source package like this, it's either because it fails to build from source, or because it has some kind of tricky licensing pitfall that most people haven't noticed, but diligent debian developers have does anyone know why this problem exists for dotnet-core? also, does dotnet-core have a reasonable aot story for things like esp32 and ch32v003?
- Goz3rr 2y agoEven with AOT compilation, as someone who loves C# and also does embedded development in C I would personally say a garbage collected language like C# has no place there.
- kragen 2y agonot everything running on a 20-mips 32-bit microcontroller with 2 kibibytes of sram needs to be hard real time and failure-free, and of course the esp32 has hundreds of kibibytes and, correct me if i'm wrong here, but doesn't c# allow you to statically allocate structs just as much as c does? i'd think you'd be able to avoid garbage collection about as much as you want, but i've never written much beyond 'hello, world' in c#
- runevault 2y agoc# has the concept of value types (which structs are), which are stack allocated. Generics have seen more and more instance of getting a Value type like Value Task for stack allocated async objects. But if you add a class as a member of the struct that is going straight to the heap with all the GC stuff that entails
- kragen 2y agowhat about global or static variables of value types? i mean in theory you could stack-allocate whatever you want in your main() method and pass pointers to everything, but that sounds unusably clumsy. but with global variables and/or class variables there would be no problem except for things that inherently require heap allocation by the nature of the problem
- johnwheeler 2y agoTrip down memory lane touching several points in my career. Rip /.
- guappa 2y ago> It's a natural fit. Does the wine project have the resources and knowledge to maintain it? Or is it just so that microsoft can say they aren't the ones discontinuing it?
- hacker_88 2y agoWas their Version Control a Monorepo
- pipes 2y agoHi, what does wine use mono for? Is it to support full fat .Net? Interesting post btw, thanks :)
- sebazzz 2y agoMono also had (limited?) support for ASP.NET non-Core. I wonder how many companies actually used that.
- adriamaker 2y agoInteresting. Perfect fit for Wine!
- dvfjsdhgfv 2y agoIt never had any sense, and it never had any future. We told Miguel he would be playing the chase game with Microsoft and he will always be behind and never being sure if MS won't use the patent card if Mono actually becomes dangerous (and they can get quite nasty when pissed off - see the accusations against ReactOS). But he was in love with COM/DCOM, registry, and many other things that MS shipped. Some of these things made Gnome much slower than it could be.