Microsoft donates the Mono Project to the Wine team
1436 points by itherseed 10 months ago | 478 comments- zbowling 10 months agoI 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 10 months 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?
- bmitc 10 months 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.
- safety1st 10 months agoThis is wild, apparently this stuff is in the Debian repos now? https://learn.microsoft.com/en-us/dotnet/core/install/linux-... So you can just apt install dotnet-sdk-8.0.
This must be the most unfriendly Linux install documentation I've ever seen though, it was not easy to find the names of those packages.
- tomkarho 10 months 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.
- gymbeaux 10 months agoOh my god I forgot about .NET Standard. What were they thinking…
- anymouse123456 10 months agoPSA for new players.
Do not under any circumstance trust Microsoft for anything at all.
They have a decades-long history of treating their best customers with contempt.
They will break or deprecate whatever you rely on, and they will do it without warning.
- nobodyandproud 10 months agoIf only. Class libraries still have to worry about this.
- safety1st 10 months ago
- Blot2882 10 months 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`
- Kye 10 months agoFor historical context: this was before the conclusion of the antitrust case that led Microsoft to start softening its stance toward open source. https://en.wikipedia.org/wiki/United_States_v._Microsoft_Cor....
This was the same year Antitrust came out: https://en.wikipedia.org/wiki/Antitrust_(film)
Any support for open source or cross-platform stuff was a bulwark against claims of monopoly abuse, but none of it worked well enough to be a true replacement. Mono worked for some purposes, but it was far from the first party support cross-platform .NET gets today. Nowadays it sounds like .NET Core + third-party GUI libraries is the way to go.
- simion314 10 months 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.
- Buttons840 10 months agoIs .NET open-source? Will I find it in an open-source repository?
- pantalaimon 10 months agoIs there a way to build a GUI app with .NET on Linux?
Will it be cross-platform?
- Kye 10 months ago
- SideburnsOfDoom 10 months 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
.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/
And the download page, which should show you content for your current OS https://dotnet.microsoft.com/en-us/download
But also other targets are here https://dotnet.microsoft.com/en-us/download/dotnet/8.0
You'll want the latest SDK 8.0.x
- hsbauauvhabzb 10 months 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.
- drw85 10 months 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:
Many times there will be no clear indication what version the result was built on.- .NET Framework - .NET core 1 - .NET core 2 - .NET core 2.1 - .NET core 3 - .NET 5+
On stackoverflow, answers sometimes include all versions varieties.
- shiroiushi 10 months 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.
- drw85 10 months ago
- kqr 10 months 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...
That also has some background on why the Mono project found itself in a weird spot.
- pionar 10 months 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.
- Lutger 10 months 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
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.
- YoshiRulz 10 months 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.
- older 10 months agoThis is the official one: https://learn.microsoft.com/en-us/shows/visual-studio-code/g...
- 3np 10 months 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 10 months agoThe .NET Core runtime was never a fork of Mono, it’s always been a separate code base.
- hizanberg 10 months ago
- bmitc 10 months ago
- kragen 10 months 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?
- MarkSweep 10 months ago.NET Core is available for Debian, you just have to add Microsoft's APT source [1].
Fedora [2], Ubuntu [3], and FreeBSD [4] build .NET from source themselves. A lot of work has been done to make it possible to build .NET from source [5] without closed source components, so it might just be a matter of someone being motivated to create the package for Debian.
[1]: https://learn.microsoft.com/en-us/dotnet/core/install/linux-...
[2]: https://src.fedoraproject.org/rpms/dotnet8.0
[3]: https://launchpad.net/ubuntu/+source/dotnet8
[4]: https://github.com/freebsd/freebsd-ports/tree/main/lang/dotn...
- jwrallie 10 months agoWhen using Microsoft repositories you need to explicitly opt out on telemetry collection.
I think telemetry collection alone should be a good reason for Debian to consider repackaging it. I don’t want telemetry to be collected on my GNU/Linux machine, thanks Microsoft, but you already have so much telemetry from my Windows machine, please leave my other machines alone.
- kragen 10 months agoyes, i know about the microsoft apt source
as for building from source, i see, thanks! or maybe it's unresolved legal concerns? nobody so far in this thread has known of any, though
- jwrallie 10 months ago
- mdasen 10 months agoYou can add add Microsoft's repo to install it on Debian: https://learn.microsoft.com/en-us/dotnet/core/install/linux-....
Does Debian require packages to work on all of its architectures? If so, that could be the issue. .NET Core only supports x86, x64, and Arm64 (I think Arm32 has been discontinued and RISC-V is experimental at this point).
It's possible that they object to .NET Core having certain license restrictions on the Windows port (https://github.com/dotnet/core/blob/main/license-information...). .NET Core is mostly MIT or Apache licensed, but the Windows SDK has some additional terms. Skimming the third party licenses, that doesn't seem like an issue (mostly MIT/BSD/Apache or similar).
I think the licensing situation is an interesting question: if you have software that's 100% open source when compiled for your OS, but requires non-free stuff to run on Windows, is it ok to include in Debian? It looks like none of the non-free stuff (like WPF) gets distributed with the non-Windows SDK builds. Binaries created from your code only depend on MIT-licensed stuff on macOS and Linux, but might depend on something closed-source when targeting Windows - though it looks like almost all of that stuff is either WPF (so you wouldn't be able to develop on Linux/Mac anyway since those libraries wouldn't be in the SDK on those platforms) or were removed as a runtime dependency in .NET 7. It looks like `Microsoft.DiaSymReader.Native` might be the only thing left. Maybe that's what is holding it back?
> also, does dotnet-core have a reasonable aot story for things like esp32 and ch32v003?
"Reasonable" can be a lot of things to a lot of different people. People have been working on RISC-V support. Samsung seems interested in it. But I probably wouldn't recommend it at the moment - and Mono doesn't really have RISC-V support either.
- kragen 10 months agoto be clear, my question about debian is not about whether i can install dotnet-core in debian; it's about why it isn't in debian's repositories rather than microsoft's. microsoft, to understate the case somewhat, doesn't provide the stringent protections for users that debian does
debian doesn't require packages to work on all of its architectures. luajit, for example, has not been ported to riscv64, mips64el, or ppc64el https://packages.debian.org/sid/luajit, though lua5.1 is https://packages.debian.org/sid/lua5.1. what the debian policy manual says about architecture-specific packages seems to be https://www.debian.org/doc/debian-policy/ch-controlfields.ht...:
> Specifying a specific list of architectures indicates that the source will build an architecture-dependent package only on architectures included in the list. Specifying a list of architecture wildcards indicates that the source will build an architecture-dependent package on only those architectures that match any of the specified architecture wildcards. Specifying a list of architectures or architecture wildcards other than any is for the minority of cases where a program is not portable or is not useful on some architectures. Where possible, the program should be made portable instead.
i don't think the license you link to would be a problem in itself, because it only applies to certain files which are not useful for running dotnet-core on debian anyway. debian has lots of packages from which non-free-software files have been removed. i don't know anything about diasymreader?
with respect to esp32 and ch32v003, what i meant to point to was not the risc-v architecture (some esp32s are tensilica!) but the limited memory space; jit compilation is not a good fit for 2 kibibytes of ram or even 520 kilobytes of ram
- Const-me 10 months ago> Arm32 has been discontinued
.NET 9.0 preview still includes ARMv7 builds for Linux: one based on glibc library, another one for Alpine.
- ozim 10 months agoI would say it is .Net Foundation job to prepare and submit the package not Debian maintainers.
- kragen 10 months ago
- Goz3rr 10 months 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 10 months 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#
- fulafel 10 months agoGC is fine for many (most?) applications there. For example sensor stuff, display, networking, turning your lights on and off, etc.
- kragen 10 months ago
- davidhyde 10 months agoI believe that you would use dotnet nano for something like that. I used it (or some previous version of it) once many years ago and was very impressed with the productivity and ease of use it offered. Ultimately the lack of community surrounding it drove me to other technologies. Might have changed since then though, who knows!
- MarkSweep 10 months ago
- neonsunset 10 months agoIn many ways, .NET today finally fulfills the original Mono goals, and does so in a very performant manner.
- guappa 10 months 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?
- dvfjsdhgfv 10 months 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.
- sebazzz 10 months agoMono also had (limited?) support for ASP.NET non-Core. I wonder how many companies actually used that.
- pipes 10 months agoHi, what does wine use mono for? Is it to support full fat .Net? Interesting post btw, thanks :)
- johnwheeler 10 months agoTrip down memory lane touching several points in my career. Rip /.
- hacker_88 10 months agoWas their Version Control a Monorepo
- adriamaker 10 months agoInteresting. Perfect fit for Wine!
- lolinder 10 months ago
- rgovostes 10 months agoI always assumed Microsoft did not condone Wine or other re-implementations of their APIs (like ReactOS), but that they were protected by DMCA reverse engineering provisions and anyway too insignificant to send the legal team after.
Wikipedia says,
> Until 2020, Microsoft had not made any public statements about Wine. ... On 16 February 2005, Ivan Leo Puoti discovered that Microsoft had started checking the Windows Registry for the Wine configuration key and would block the Windows Update for any component. As Puoti noted: "It's also the first time Microsoft acknowledges the existence of Wine."
> In January 2020, Microsoft cited Wine as a positive consequence of being able to reimplement APIs, in its amicus curiae brief for Google LLC v. Oracle America, Inc.
- kelnos 10 months agoI think Microsoft has finally realized that its animus toward projects like Wine and pre-acquisition Mono was ultimately unproductive, and a net negative for Microsoft itself.
I still don't trust MS's motives in general, but I think they at least recognize that Wine/Proton helps make the Win32 and DirectX APIs a sort of de-facto cross-platform standard when it comes to things like desktop gaming, and that this is a good thing for them.
On the server side, MS knows that Linux is by far the most popular server OS, and official support for running .NET backend apps on Linux from MS themselves is a win for them as well.
- shopvaccer 10 months ago>that Wine/Proton helps make the Win32 and DirectX APIs a sort of de-facto cross-platform standard when it comes to things like desktop gaming, and that this is a good thing for them.
I'm not sure if it benefits microsoft in the long term, because the "backwards compatibility" features of Wine need to be implemented in Windows already as a part of the system. So in the long run wine/proton/mono will implement windows features on linux in an optional/replaceable/modular way in user-space while keeping backwards compatibility for older windows software, while windows is forced to implement (and distribute these features) with their OS and has to sacrifice backwards compatibility if they want to simply their OS.
I would say that the adoption of wine/proton helps the linux ecosystem a lot more because there wasn't a standard executable format for linux beforehand (static? tarball of program and dynamic libraries? .deb file? AppImage? Flatpak? Higher-level language like java?). How do you reliably link to libraries like mesa or even glibc? Now there is a solution: just distribute a windows program and test it to confirm it works in wine/proton. Perhaps it is better for DirectX adoption, but it seems like Vulkan/OpenGL/WebGPU are still superior in terms of cross-compatibility, regardless if you use wine or not.
- yellowapple 10 months ago> there wasn't a standard executable format for linux beforehand (static? tarball of program and dynamic libraries? .deb file? AppImage? Flatpak? Higher-level language like java?).
By this logic there wasn't a standard executable format for Windows, either (static? zip archive of program and dynamic libraries? .msi file? installer program? UWP? higher-level language like C#?).
- nine_k 10 months agoWindows NT (2000, XP, etc) used to include an emulator allowing to run DOS apps and win16 apps. I don't see why running older / obsoleted win32 APIs through an emulation layer won't be a good approach. Maybe even by adopting and running Wine.
- lloeki 10 months ago> I'm not sure if it benefits microsoft in the long term, because the "backwards compatibility" features of Wine need to be implemented in Windows already as a part of the system.
Sometimes running old software atop Wine on Windows is the easiest - or even only - option to have said old software work on new Windows.
- yellowapple 10 months ago
- BurnGpuBurn 10 months agoI disagree. MS was completely succesfull in their goals. They kept a ton of developers busy learing useless Xamarin, thus keeping them from developing products that can actually compete with Microsoft products.
Next they killed of an open source competitor (Mono) of their product, stole the usefull bits to put it in .Net, and now they dump the leftover project (that's not competing with them anymore) back into the OS world.
How is that not a smart way of doing business?
- skrebbel 10 months ago> stole the usefull bits to put it in .Net
a nitpick, they acquired Xamarin for half a billion dollars, that's not really stealing is it.
- bunderbunder 10 months agoI don't think Microsoft viewed Mono as a competitor. Even before Microsoft acquired Xamarin for hundreds of millions of dollars, they already had a history of collaboration on .NET, including sharing test cases in order to help with compatibility, and co-developing integrations into Microsoft products such as Azure and Office 365.
The "keeping [developers] from developing products that can actually compete" assertion is frankly absurd. .NET's real competitor is and has always been Java. Java, possibly the world's most-used platform that isn't JavaScript, has always had heaps more people working on it than .NET's entire ecosystem, let alone just the Mono project.
- ryukoposting 10 months ago> kept a ton of developers busy learing useless Xamarin...
What kind of moustache-twirly stupidity is this? Yeah, Microsoft maintained a shitty cross-platform SDK so that developers would make worse software, because that's somehow helping any of their main product verticals. By the way, those are (broadly speaking) cloud, client software, and games.
Do you have any evidence to suggest that there was a Xamarin-based application that would have directly competed with Office? How about Fallout? Now, do you have any evidence that Microsoft tried to make Xamarin worse at doing the thing that application was trying to do?
> Next they killed of an open source competitor (Mono) of their product
Microsoft's implementation is also open source, and has been for almost a decade: https://github.com/dotnet/runtime
> that's not competing with them anymore
Sure. Mono is only useful for legacy purposes. Microsoft's own design was always the reference implementation of .NET, regardless of whether it was open-source. Mono existed for the sole purpose of being an open, cross-platform reimplementation. Now that the reference design is itself open-source and cross-platform, Mono is mostly redundant.
- skrebbel 10 months ago
- deelowe 10 months agoMicrosoft as a company is extremely myopic. Budgets are scrutinized down to the penny every few months at very senior levels. This drives a culture of immediacy. Wine was a threat until Microsoft realized everyone in tech had moved to service based business models (aka "cloud"). Only afterwards, did they "realize" Linux as a threat to their long term viability no longer mattered.
- kristopolous 10 months agoThey finally started to admit where they're losers and stop trying to fight those battles.
Dumping endless piles of cash into projects nobody cares about and pretending like you're the dominant player when you control some dwindling 2% of the market is stupid and more companies should learn that lesson
- fortran77 10 months agoAnd that's why they have a $3.08 trillion market cap
- kristopolous 10 months ago
- bonesss 10 months agoI think it's just such a clear business-razor because of the cloud: can I take my app and spin up a bajillion cheapo servers with no licensing costs using that stack?
If the answer for .Net was 'no' then there are meaningful domains where people would just jump ship in a second. Research, academia, teaching, and certain government areas pop to mind. Keeping Linux support, because of that server dominance, is a core concern for them.
- kej 10 months agoPresumably being able to make money spinning up cheapo servers, via Azure, just reinforces that decision.
- kej 10 months ago
- berkes 10 months ago> I still don't trust MS's motives in general
I think it's the same for any global enterprise: profit.
In that regard, "trusting" something like MS is like evaluating their stock: what do they make money off, what is a threat to that. Which makes it rather easy to "trust" them: if they can make money off SomeOpenSourceProject they'll help it along, if it doesn't help, nor threat, they'll ignore it. If it's a threat, they'll put (some) money towards fighting it.
For me the difficult part, and why I still don't fully trust MS, even with Github or VScode lies in their internal competition: MS has projects that directly compete eachother. Business-wise it makes no sense to me (and is the primary reason I'll stay away from investing in MSFT). But also their internal competion between profit now and delayed profit. MS has often done things (or not done things) that increase the bottom line this quarter, but harm them over years. In that regard too, MS makes no sense to me Business-wise. I guess having a cash-cow-"monopoly" for decades kinda absolves them of the responsibility to run the entire company in a way that makes sense business-wise.
- kragen 10 months agoanthropomorphizing complex social institutions such as corporations is ultimately unproductive and a net negative for clear thinking
- RadiozRadioz 10 months ago> Wine/Proton helps make the Win32 and DirectX APIs a sort of de-facto cross-platform standar
There are perfectly fine _actual_ cross-platform standards like Vulcan and OpenGL. If your goal is cross-platform, making a Windows app that you hope will be converted well enough is a strange way to approach it.
- erremerre 10 months agoAnd yet, the win32 is the only one that is confirmed to work. Example: Game Neo Scavenger is available for linux with binaries for them. They dont work in any modern linux because (I believe) they were compiled for a 32bits version of linux.
Do you know how you can play the game on linux? Yes, using the windows version with lutris, which is 32bits too.
- MobiusHorizons 10 months agoAnd yet, Linux gaming is largely dxvk and proton.
- erremerre 10 months ago
- Brian_K_White 10 months agoMaybe they feel the same about Wine as I do about WSL.
You can argue that the my-thing-wrapped-inside-your-thing increases exposure to my-thing and that's a net good outweighing any other factors, but you can just as validly argue it helps divert from actual adoption of my-thing and facilitates never moving from your-thing, since no one has any actual empirical study, it's all just feelings and beliefs.
Maybe one logical argument that might have some meat is maybe WSL/Wine just means that the exposure vs crutch aspects cancel each other out (for every user who is exposed to foreign-thing and maybe decides to adopt it, there is another user who thanks to the swallowed version does not ever have to to move), and if that's true, then any imbalance in effects comes down to the the innate virtues of the two things. Both groups of people are equally exposed to both platforms and have equally good-enough use of both platforms, and neither has to actually change to get the benefits of the other, and so the user will choose whichever actually seems to serve their needs the best as their native platform.
I wonder if it's possible to make a desktop backed by WSL that would be a better experience than the current ad/spying-riddled Windows native desktop? Then MS would be forced to try to enshittify WSL so that it doesn't provide an escape and superior experience from the current Windows experience. Is WSL a good thing THEN?
At least for now, WSL has absolute crap access to hardware, not even just like gpus for gaming but even simple things like access to a usb-serial adapter. So, it's probably not possible to make a functional WSL desktop yet. Maybe such things will intentionally never be fixed in WSL just for this reason, so you can only ever use it for pure web app development no different from a cloud instance.
- mark336 10 months agoIf MS was smart, they would try to get the devs working on Xbox projects to use their coding platforms for other type of development.
- shopvaccer 10 months ago
- qingcharles 10 months agoMicrosoft in 2024 feels like a different beast. All the MS devs I know seem fully on board with totally cross-platform support. Half of them are coding on MacBooks and I would hazard a guess that a good proportion of .NET web sites being built are being deployed onto Linux boxen.
- stackskipton 10 months ago.Net SRE here, all our .Net REST APIs are deployed on Kubernetes. Devs are still mostly on Windows because Visual Studio.
I've worked with Azure team, all greenfield they do for Azure goes on Linux as well. Windows Server is pretty much dead to Microsoft though it will be continue to be supported and released because $$$.
- smackeyacky 10 months agoIt's been very hard to explain to my organisation that Windows Server is dead. We haven't deployed a system to it in two years, everything is some kind of dockerised linux thing but the "we're a Microsoft shop" idea prevails.
In the end we decided to just let the management think what they want. I've been more of a Unix person for 40 years but I kind of miss the "good" versions of Microsoft Server - in the 1990s / early 2000s it was a real contender. If they hadn't doubled down on weird things like Powershell it might still be a contender.
- smackeyacky 10 months ago
- junto 10 months agoOur .NET teams are increasingly choosing MacBooks with Jetbrains Rider.
- sublimefire 10 months agoFew work on Macbooks, it is more about using WSL on the dev machines or even using DevBox instances.
- Aachen 10 months agoI'm sure the vast majority of individuals, especially those doing the technical work, are normal people wanting good things and pushing to do good work. It's the organisation as a whole that turns into a different beast making business decisions
- gnu8 10 months agoI imagine very few of the MS devs are using BeOS.
- stackskipton 10 months ago
- jimrandomh 10 months agoIf Windows Update replaced components of Wine, that would (a) break people's Wine installs, and (b) give those users a way to legally get Microsoft's versions of those components for use outside of Windows.
- rescbr 10 months agoMicrosoft’s EULA would still apply to (b).
It’s the exact same situation as downloading a Windows ISO from Microsoft’s website and running it with an activator.
- rescbr 10 months ago
- Brian_K_White 10 months agoLife hack! Freeze your Windows from further unwanted updates by just fabricating some wine registry entries!
- varispeed 10 months agoEven if Wine had become drop in replacement for modern Windows distribution, I doubt it would hurt much. Business would likely still buy Windows, because of support and security patches. Consumers would get their Windows preinstalled. Some manufacturers would probably do Wine installations - but then it would depend on support. Don't want to sell machines to people who are not tech savvy, that are not getting updates. That is a potential for returns and massive cost and headache.
- hinkley 10 months agoAWS Supports one of the tools for porting out of AWS. Supporting something that looks like an escape valve (whether it works or not) keeps the antitrust people off your neck.
- internetter 10 months agoWhat tool is that?
- hinkley 10 months agoI can’t remember, sorry. I met them at a tech meetup a couple years before I was using AWS and it didn’t stick in my brain. Except the funding source bit.
- hinkley 10 months ago
- internetter 10 months ago
- ijidak 10 months agoSo, would these provisions protect a reverse engineering of CUDA?
It's hazy to me when reverse engineering of APIs is and isn't allowed.
- tambourine_man 10 months agoYou are not alone. It’s not a well defined problem, hence lawsuits. API is also such a broad term, it’s hard to establish borders.
- tambourine_man 10 months ago
- alerighi 10 months agoI mean, if wine is a problem they did basically the same thing with the WSL, especially version 1 (version 2 is just a VM, but the concept of running unmodified Linux binaries on Windows like they are native application is the same).
I think that they don't care about going against the open soruce community, given that Microsoft uses a lot of open source software in their products (also, probably violates the terms of the GPL license of such software).
- kelnos 10 months ago
- troymc 10 months agoFun fact: Second Life, the virtual world, has an in-world scripting language called LSL, and it gets compiled to bytecode that gets run on a virtual machine. Initially, it got compiled to bytecode that ran on an in-house virtual machine, but in 2008, they switched over to compiling LSL to Mono bytecode to run on the Mono virtual machine. I wonder if that's still how it works. (I haven't been involved with SL for a long time.)
- toastercup 10 months agoIt does indeed still work that way! We even still support the old, in-house VM, known as LSO2: https://wiki.secondlife.com/wiki/LSO
We're hard at work adding Luau (https://luau.org) as a supported language for both in-world scripting as well as client/viewer-side scripting. As a handy byproduct of that, LSL will also gain the ability to be compiled to Luau bytecode, allowing us to eventually (someday, at least) shed any need for our custom-patched version of Mono 2.6. More juicy details here: https://wiki.secondlife.com/wiki/Lua_FAQ
Source: I work at Linden Lab. If these sorts of things excite anyone, we're hiring! https://lindenlab.com/careers
- officeplant 10 months agoAlways nice to see that SL is still going. I'll probably never remember my login to my old 2006 era account but the years of weird virtual world memories remain.
- PinkMilkshake 10 months agoCool! LSL is such an interesting language. Having an explicit state with entry and exit functions is quite unique I think, and seems like it could be useful outside of SL. Given that scripts are isolated and communicate via messaging over channels (IIRC), was there ever any interest in executing it on the BEAM virtual machine?
- officeplant 10 months ago
- qingcharles 10 months agoThank you, that explains the Mono in SL.
- toastercup 10 months ago
- rickcarlino 10 months agoI feel like I’m missing some context here. Is this a “free as in take this puppy” situation? How do the wine developers benefit from this?
- dtquad 10 months agoMicrosoft's own FOSS multiplatform implementation of the .NET runtime is now much more performant and feature complete than Mono.
However Mono is easier to embed into other applications and easier to port to new platforms. That is for example why it's used for the .NET/Blazor WebAssembly stuff. Microsoft still maintains their own fork of Mono for this specific use case.
Mono also implements some of the legacy Windows Desktop GUI frameworks like WinForms and WPF that Microsoft never bothered to port to their new .NET runtime. This is probably why the Wine developers might be interested in Mono.
- Phrodo_00 10 months agoMono also supports winforms. I don't think they're supported in dotnet (but there's libraries for Gtk, although you could also use Vala with a bit extra effort).
- neonsunset 10 months agoA shoutout goes to a project that aims to simplify CoreCLR embedding UX to prevent the issues stemming from embedding legacy Mono: https://github.com/StudioCherno/Coral
- lloydatkinson 10 months agoWinforms and WPF are both very maintained and supported for .NET 8 on Windows, to clarify. Good cross platform desktop frameworks include Avalonia.
- kelnos 10 months agoAre those frameworks available in .NET 8 on non-Windows platforms, though? If not, I think that's what the GP was getting at.
- qingcharles 10 months agoI think MS wants you to use this?
https://dotnet.microsoft.com/en-us/apps/maui
I was pleased to see WinForms got some updates in .NET9. I really thought they'd left it. I still use it every day when I need to spin up a new tool to do some little task that needs a GUI.
- kelnos 10 months ago
- 10 months ago
- Phrodo_00 10 months ago
- jcims 10 months agoHow has ’free as in puppies’ not reached its rightful place on the podium?
- spiderfarmer 10 months agoBecause nobody wanted to maintain it.
- karmajunkie 10 months agoi’d upvote this twice if i could…
- karmajunkie 10 months ago
- bawolff 10 months agoI love this. Definitely using this next time someone tries to guilt me into becoming maintainer of some abandonware foss project.
- codersfocus 10 months agoWhite elephant has usually been the go to animal for this kind of idiom
- matthewbauer 10 months agoI guess this is in the context of "free as in beer" and "free as in speech".
- nashashmi 10 months agoIt should be a “free for adoption” idiom
- langcss 10 months agoPlease tell me there is a separate French word for free (as in puppies).
- poulpy123 10 months agogratuit (free as in free puppy) libre (free as in free software)
- poulpy123 10 months ago
- ragebol 10 months agoI'm not a dog person: a puppy would be a burden (financially and time-wise) and provide me barely any fun.
- yathern 10 months agoI think that's the intended implication - that it's "free to a good home" - meaning any new owner takes on a lot of responsibility.
- bmacho 10 months agoThat's what ’free as in puppies’ mean.
Free software is typically described as "free as in freedom" or "free as in free beer". (This is probably a limitation of English tho, my language has 2 different words for permissions and costlessness.) GP above proposes the "free as in puppy" variant, which means that it is a burden of maintenance. I can't recall any real examples for this.
- kelnos 10 months agoTo be fair, "free as in beer" doesn't work for a lot of people who don't drink (or do drink, but don't like beer). I don't think we're going to come up with a one-size-fits-all slogan...
- ktm5j 10 months agoWhat's your point? Don't take the puppy if you don't want it.. not everyone has a use for this software either.
- yathern 10 months ago
- spiderfarmer 10 months ago
- zerocrates 10 months agoWine has (or used to have anyway, not sure if it still does) a version of Mono it used to run .NET stuff within Wine; I'd assume this has to do with that, that they were relatively alone in having a continuing interest in the Mono codebase vs. the dotnet core stuff.
- minkles 10 months agoI think it's just hurting someone at Microsoft less if they give it a home that isn't /dev/null.
Edit: quick hat tip to Mono.Cecil which I've used a couple of times to crack .Net components to bypass licensing code. It's not that we didn't pay for them but we couldn't be bothered to deal with license deployment and maintenance.
- dtquad 10 months ago
- nedt 10 months agoMono was very useful in university. Must have been 2005 when I got asked if I wanted to use Java or C# for the programming course. Being bored with Java I picked C#. We were a very small group of two students.
But as I just had a Powerbook I used Mono to run it on OS X. At the end of the course someone from Microsoft came to the university to answer any of our question about upcoming features in .NET and C#. And as we were a small group I set directly in front of him with the shiny apple point at him.
Very interesting language at that time. .NET not so much. Also still remember that we were tasked to implement 3 sort algorithms of our choice. One of mine was bogosort and with Mono on PPC it could sort up to 7 elements, before becoming really slow.
- fluoridation 10 months ago8! is 40320. Even if it took 10 times as many iterations to find the correct order, it would still only be less than 4 million swaps. Just how slow was that computer?
- nedt 10 months agoSo it was a PowerPC, not so much Software was optimized. Then it was a new language written to be used on Windows. And that was run via Mono, which was a 3rd party actually writing it for Linux and not a BSD derivative on a CPU that no one is using with a kernel that's different. It might not have been that horrible, but it was just a quick presentation. Nothing that should even run for a minute.
- nedt 10 months ago
- fluoridation 10 months ago
- pentagrama 10 months agoA bit off-topic, but this makes me wonder about the relationship between Microsoft and Wine. Do they consider it a threat? An ally? Both?
This is my first time seeing Microsoft acknowledge Wine's existence, and in this case, it was at least in a friendly manner? Or could there be bad faith behind this 'donation'?
- kelnos 10 months agoAnother poster quoted Wikipedia somewhere here; MS implicitly acknowledged Wine's existence back in 2005 when they added a check for some of Wine's registry keys which would disable Windows Update if it found them. And in 2020 MS filed an Amicus brief in that Google/Oracle lawsuit in support of free re-implementations of APIs, citing Wine as a positive example.
While I am still wary of Microsoft after their previous anti-competitive behaviors, I think they've taken a more pragmatic view of late, and realize that projects like Wine are actually good for their platform as a whole. I expect if Wine/Proton did not exist, we'd see more (for example) Windows-only games ported to macOS or Linux. With Wine/Proton, those ports are mostly not necessary, and Microsoft gets to say that Win32/DirectX is something of a cross-platform gaming "standard".
- datavirtue 10 months agoWhat could WINE possibly do to them? Rob them of all kinds of enterprise and cloud business? WINE is a single LED on a nuclear powerplant control panel.
- justsomehnguy 10 months agoThe best Wine environment is still a Windows install. You need a lot of things to do to run some of the mill Win32 app, so Wine is not a direct threat for MS in any foreseeable future.
- kelnos 10 months ago
- cxr 10 months agoI know it's a long-standing empirical truth that anyone involved with Mono is required to prefer doing just about anything besides thinking about or touching what's on the Mono project website, but this announcement really deserves to be put on page unto itself with a URL all its own, rather than shoehorned into an anonymous div on the Mono landing page and at the top of /news.
See <https://simonwillison.net/2024/Jul/13/give-people-something-...>.
- romwell 10 months agoIt seems like the link we got (https://www.mono-project.com) might be the URL for the announcement - that's to say, this is the last update on that website, and will stay there indefinitely.
- romwell 10 months ago
- __s 10 months agohttps://wiki.winehq.org/Mono#Microsoft_.NET for why Mono is relevant to Wine
- nequo 10 months agoThank you, I’ve been looking for an explanation of this. So Mono is useful to Wine because its users care more about licensing and running legacy software: Mono is free software and an acceptable runtime for pre-.NET 5.0 stuff.
- high_5 10 months agoWine is becoming like archive.org, but for win32 runtimes.
- high_5 10 months ago
- nequo 10 months ago
- WaitWaitWha 10 months agoI like the strategic approach. Pay attention software publishers, and hardware manufacturers! You can gain some significant public accolades.
When a publisher or manufacturer wants to end a product line, instead of shutting it down, spin it out as F/LOSS, and give it some seed money. If the thing is good, people will pick it up and it will survive. If not, the company still gains public appreciation.
This dovetails well as a potential solution into the problem we are discussing in the Smart TV, smart home, smart vehicle articles.
- whyenot 10 months agoWhat is Miguel de Icaza up to these days? I saw on Wikipedia that he left MS in 2022 to take some time off, but surely he's working on something now?
(if you respond, please, lets not get into his politics; HN is not the right place to have that kind of discussion)
- zbowling 10 months agoHe is making terminal emulators for iOS, iPadOS, and VisionOS and loving Swift these days.
- hnarayanan 10 months agoAnd Godot!
- rcarmo 10 months agoSpecifically, he has a port of the Godot editor for the iPad in the works.
- rcarmo 10 months ago
- hnarayanan 10 months ago
- zbowling 10 months ago
- neonsunset 10 months agoFor everyone who is confused by what is going on, here's the explanation:
Today, there are 2.5 Mono's:
Mono that lives in https://github.com/mono/mono. This is the original Mono codebase that was written back then and was the .NET Framework for Linux, with corresponding compat. and such, pioneered by Miguel De Icaza, who now seems to be happier in Swift land. At the present day, it was receiving very little maintenance and I don't believe was actively used. Please correct me if I'm wrong.
Mono that lives in https://github.com/dotnet/runtime/tree/main/src/mono. This is the Mono that got merged into .NET, becoming the building block for multiple components and one of the official runtime flavours. It is actively maintained and is at relative feature parity with CoreCLR, predominantly serving mobile targets (iOS, Android) and WASM as well as exotic or legacy targets like ARMv6, LA64, s390x(?), ppc64. It is also useful for initial stages of new platform bring-up process. Note that you are not expected to use it for targets that support CoreCLR due to a massive rift in performance between the two. When you are using it, you do so as a part of standard .NET toolchain - it is picked automatically for appropriate targets, or can be opted into with some configuration.
Mono that lives in https://gitlab.winehq.org/wine-mono/mono which is a Mono fork actively maintained by Wine for its own usage. Going forward, any possible ambiguities regarding ownership and stewardship are considered resolved and the ownership of mono/mono and everything related to it is transferred to WineHQ.
Honorable mention also goes to private Mono fork used by Unity which they are (painfully) trying to migrate from.
- Rochus 10 months ago> due to a massive rift in performance between the two
Not that massive; factor 1.8 as we found out recently.
- neonsunset 10 months agoThis is not an accurate assessment, I'm afraid.
The comparison we discussed was for unrepresentative code that used none of the features that make .NET fast (generics, SIMD, expected forms of inheritance and abstraction and devirtualization they enable, CoreLib APIs). The closest case in there was JSON serialization which CoreCLR was 385% faster at. It is unfortunate that you feel a need to say this, knowing that it doesn't even show a tip of the iceberg.
Please do not mislead casual readers here with such comments.
They will have a bad time running basic programs - the original Mono is outdated and cannot execute assemblies that target non-legacy versions, and the Mono that lives in dotnet/runtime (which you have to go out of your way to use on CoreCLR platforms) tends to have all kinds of regressions on user-provided code that is not as robust on runtime checks to ensure that Mono does not accidentally go onto the path that that it has especially bad regression on. Even CoreLib code nowadays uses more and more struct generics assuming monomorhpization which performs poorly on Mono. There is very little work done to improve performance on Mono with effort invested mostly in WASM area and to ensure it does not regress further. Major platforms like Android and iOS are in the slow but steady progress to migrate to CoreCLR/NativeAOT (there are other reasons not in the least much smaller binary size). And for WASM there is NativeAOT-LLVM experiment that is likely to make Mono obsolete for that target too.
The workloads that matter and are representative are the ones produced by C#, F# and VB.NET compilers as well as projects that care about exercising the standard library and/or produce recommended CIL forms (like https://github.com/FractalFir/rustc_codegen_clr).
- Rochus 10 months agoSo we have to restart from scratch?
What you say contradicts with the measurements, even the ones you made yourself (https://news.ycombinator.com/item?id=41101743).
I don't know what your motivation is to give Mono a bad reputation. I assume you're paid by Microsoft or one of its affiliates, are you?
- Rochus 10 months ago
- Rochus 10 months agoIf we compare the last major release of Mono back in 2019, where there was a real improvement to the CLR (not just bug and security fixes), with the CoreCLR versions at that time, the factor is rather 1.1 (see e.g. https://www.quora.com/Is-the-Mono-CLR-really-slower-than-Cor...).
- neonsunset 10 months ago
- 10 months ago
- Rochus 10 months ago
- pdmccormick 10 months agoI'm genuinely curious, for someone who develops web application backends and larger distributed systems & infrastructure, predominantly using Go and Python, exclusively targeting Linux, is there anything in the .NET ecosystem that anyone would recommend I take a look at? Many thanks.
- starik36 10 months ago.NET Core is my favorite way to quickly implement an app to run on a Raspberry Pi. Just basically copy & paste into a folder, chmod the executable and off you go.
I have a number of these devices running in the house doing various things.
- BeetleB 10 months agoYou may want to look at F#. Because it's .NET you have a large list of libraries you can use
- zakki 10 months agoFor a beginner, high school but zero experience in programming, which one easier to learn, C# or F#?
- troad 10 months agoDefinitely C#. You’ll find tons more resources. F# is fantastic, but it’s not a good *first* programming language.
A lot of what you’ll learn when you first learn programming is going to be applicable in any language though. Once you’re comfortable with C#, and can understand the difference between imperative, object-oriented, and functional programming, you’ll be in a good place to check out F# (or any other language, really).
Good luck with your learning!
- ReleaseCandidat 10 months agoIt doesn't matter, if you want to "actually" use .Net you have to at least be able to read C#. And I guess some files still - as it was 3 years ago - need to be C#, for example in mobile apps.
- akra 10 months agoIts an interesting question. I've found personally people with previous imperative/functional language (e.g. JS/Go/etc) have picked up F# quicker, and people with OO knowledge (C++, Java, etc) have picked up C# quicker. There's a lot of implied/conventional knowledge with OO that many C#'s dev forget they have (i.e. its all sunk cost to them). If you just want to cut and paste code however C# has more Microsoft provided doco so there's that.
- 10 months ago
- lostmsu 10 months agoC#
- tomtheelder 10 months agoHonestly this is such an interesting question. Conventional wisdom would definitely say C#, but I’ve always wondered if that’s because imperative programming is easier than functional for a beginner, or because basically everyone starts with imperative. I’d be curious to see what would happen if someone started functional first.
All that said, probably C#.
- troad 10 months ago
- zakki 10 months ago
- dmw_ng 10 months agoModern .net on Linux is lovely, you can initialize a project, pull in the S3 client and write a 1-3 line C# program that AOT compiles to a single binary with none of the perf issues or GIL hand-wringing that plagues life in Python.
Given modern Python means type annotations everywhere, the convenience edge between it and modern C# (which dispenses with much of the javaesque boilerplate) is surprisingly thin, and the capabilities of the .net runtime far superior in many ways, making it quite an appealing alternative especially for perf sensitive stuff.
- dwoldrich 10 months agoDo your civic duty and disable telemetry everywhere you go. :)
export DOTNET_CLI_TELEMETRY_OPTOUT=1
- IcyWindows 10 months agoI don't understand. How does that help cross platform?
All I see is a manager saying, "the data shows no one uses it"
- IcyWindows 10 months ago
- dwoldrich 10 months ago
- gwbas1c 10 months ago> for someone who develops web application backends and larger distributed systems
Blazor: It's Microsoft's way of doing in-browser C#. It can do quick-and-dirty server-side HTML, and professional-grade, in-browser WASM.
Why is this useful "for someone who develops web application backends"?
The nice thing about server-side Blazor is that you can make a management console, or otherwise port ops scripts, into a self-service page. Because you can choose to render on the server, you don't have to write an API, serialize your response, ect. You can do a SQL-ish query (with LINQ and Entity Framework) in the middle of HTML.
(Granted, for production-grade pages Blazor can run in the browser as WASM and use industrial-strength APIs.)
- misiek08 10 months agoAs someone in same spot I'll say that .NET looks more than interesting after so many years using 6-8 languages daily. And I'm more "make it works, not shine" type.
Why .NET > Go in my opinion? - performance-wise the gap is not big and probably even .NET can be quicker - development time can be reduced, tooling is great for .NET and even funny-not-funny error handling is cleaner - still much easier to find people in .NET than Go where I live and work
Now it's time to verify those assumptions - I'm going to implement next real project in .NET and see how it went. Hobby or "trials" in .NET resulted in fun and speed, but it often happens on first date :)
- hakanderyal 10 months agoIt’s great for web application backends. Switched to it after 10+ years of Python. Couldn’t be happier.
Binaries will be huge tho compared to Go. I’ve a few CLIs that I that I my customers need to use, I’m planning to rewrite them in Go for this reason.
- MStrehovsky 10 months agoIs AOT compiling your binaries [1] an option for you? The starting size of AOT compiled C# can beat Go in size [2] and from there it really depends on what you do and how you do it. Some simple ASP.NET server with https and routing can comfortably fit under 10 MB and there are compilation options that can help optimize further [3].
[1] https://learn.microsoft.com/dotnet/core/deploying/native-aot... [2] https://github.com/MichalStrehovsky/sizegame?tab=readme-ov-f... [3] https://learn.microsoft.com/dotnet/core/deploying/native-aot...
- hakanderyal 10 months agoI looked into it but some libraries I've been using wasn't compatible with AOT. I'll check it again when I have more time. Thanks.
- hakanderyal 10 months ago
- 10 months ago
- MStrehovsky 10 months ago
- pjc50 10 months agoThe feature I always suggest as uniquely C# flavoured is LINQ.
https://learn.microsoft.com/en-us/dotnet/csharp/linq/get-sta...
Although the SQL-like form isn't always favoured, and quite a lot of the time I use the plain OO one.
Oh yes, extension methods: do you want object X to support method Y, but can't change object X? Well, provided you don't need access to anything private, you can just add a method and do X.Y()
- TheCapeGreek 10 months agoI last touched LINQ in college in 2016 - isn't it basically an ORM for C#? Not super unique but I assume very relevant to use when working with C#.
- pjc50 10 months agoEF ("entity framework") is the ORM. LINQ lets you write queries against any collection, such as a Dictionary or a List. So I write lots of "listOfFoo.Select(x => x.Name).ToArray()" style code with it, which compiles down efficiently.
- neonsunset 10 months agoLINQ is just the way .NET calls iterator expressions that are a staple in any language that claims to be good and modern.
There are two main interfaces in .NET that have different behavior:
IEnumerable<T> which a sequence monad, much like Seq types in FP languages or IntoIterator and Iter (IEnumerator<T>) in Rust. This is what you use with whenever you 'var odd = nums.Where(n => n % 2 is 0);`.
IQueryable<T> which is what EF Core uses for SQL query compilations looks the same as the first one, and has the same methods, but is based on something called "Expression Trees" that allow runtime introspection, modification and compilation of the AST of the expressions passed to Select, Where, etc. This existed in .NET for ages and really was ahead of the time when it was introduced. You can write a handler for such expression trees to use LINQ as sorts of DSL for an arbitrary back-end, which is how EF and now EF Core work. You can also compile expression trees back to IL which is what historically some of the libraries that offer fast reflection relied on. Of course this needs JIT capabilities and runtime reflection, which makes it AOT-incompatible - calling .Compile() on such query in a JIT-less application will be a no-op and it will be executed in an interpreter mode. It is also difficult for the linker to see the exact types that are reflected on which means you have to annotate the types you want to keep and AOT compile code for. Which is why this mechanism is largely replaced by source-generation instead, closer to how it happens in C++, Rust, etc. An example of this is Dapper AOT.
- pjc50 10 months ago
- TheCapeGreek 10 months ago
- lostmsu 10 months agoC# is IMHO still better language than Go.
Refactoring tooling is unmatched.
- xandrius 10 months agoIf with C# you can create a fully static binary which runs on an empty scratch docker, I will properly consider your opinion. Until then: Go à gogo!
- giulianob 10 months agoYou mean `dotnet publish -r linux-x64 --self-contained` ? This will embed the runtime in the executable. You can also do trimming so it removes anything that's not used. Also, there's AOT but it's got a ways to go.
- lostmsu 10 months agoSibling comments talk about self-contained. I'll just be pedantic and say that this has nothing to do with the language itself.
- jayd16 10 months agoYou can. It'll probably be bigger than the Go binary but you can.
- neonsunset 10 months agoThe "fully static binary" only works because Go ships cryptography and most other usually host-provided features that other languages rely on host's libc instead, at the cost of performance, limited feature support and requirement to recompile everything in order to ship (inevitable) security fixes, which did happen in the past.
.NET native compilation toolchain supports this mode but it's not a default for a reason (causes binary size bloat too, musl is rather small, but ICU is very much not).
(just to be accurate - all C# and runtime code becomes a single static executable, but cross-compilation is possible between CPU architectures within OS only, with additional options enabled by 'PublishAotCross' nuget package that switches to Zig toolchain's linker so you can AOT compile for Linux targets under Windows, for "self-contained trimmed JIT executables" you can target any OS/ISA regardless of what you use)
Anyway:
Notes: gRPC tooling is a bit heavy, webapiaot template could be improved in my opiniondotnet new console --aot #or 'grpc --aot', or 'webapiaot' dotnet publish -o .
As of today, ILC has become better at binary size baseline and scalability due to more advanced trimming (tree-shaking) analysis, metadata compression and pointer-rich binary section dehydration (you don't need to pay for embedding full-sized pointers if you can hydrate them at startup from small offsets). You can additionally verify this by referencing more dependencies, observing binary size change and then maybe looking at disassembly with Ghidra.
Also better capability for true static linking - you can make .NET NativeAOT toolchain produce static libraries with C exports that you link into C/C++/Rust compilations, or you can link static libraries produced by the latter in NAOT-compiled executables[0][1]. It is a niche and advanced scenario that implies understanding of native linkers but it is something you can do if you need to.
Binaries compiled in such a way will have its interop become plain direct calls into another section in it (like in C). There will be a helper call or a flag check to cooperate with GC but it's practically free. Costs about 0.5-2ns.
[0]: https://learn.microsoft.com/en-us/dotnet/core/deploying/nati...
[1]: https://learn.microsoft.com/en-us/dotnet/core/deploying/nati...
- giulianob 10 months ago
- xandrius 10 months ago
- starik36 10 months ago
- philip1209 10 months agoCan anybody speak to the accounting implications of "donating" software to a foundation/501(c)3? Can there be any kind of tax write-off? (It looks like this might already have been owned by a foundation, but I'm still generally curious)
- IshKebab 10 months agoAt best you would be limited to the value lost which is essentially zero, so no.
- IshKebab 10 months ago
- methods21 10 months agoThis will sound pretty dumb, but with all the amazing cross platform games written in Unity - which I thought was Mono or some form of cross platform library with .NET as one of the primary languages, I always wondered why there was not a more 'business app version' of this. After using Xamarin, Appcelerator, and dozens of other 'cross platform tools', with to be let down from ALL of them in the end and/or support dropped.... Having to support multiple platforms, esp. IOS vs. Android still seems to be stuck in the stone ages, esp. for small dev teams that can't allocate massive resources to multi-platform...
- bootloop 10 months agoMostly because business apps have to appear similar to the platform UI. Games do not, they have to look the same regardless of the platform in use.
And making a cross platform app framework which looks like native UI is much harder.
In contrast, Unity's UI systems are all terrible and looking native isn't even one of their goals.
- dax_ 10 months agoIf you want a consistent UI (non-native look), your best bet may be Blazor Hybrid currently. Yes, it's web technology (with the overhead that comes with that), but at least it uses the native browser components, so it's not nearly as "heavyweight" as something like Electron. My main concern has always been the lack of Linux support, but maybe that's not an issue for you.
- bootloop 10 months ago
- hilux 10 months ago> We are happy to announce that the WineHQ organization will be taking over as the stewards of the Mono Project
I'm a little out-of-the-loop here.
Does this announcement mean that Microsoft used to fund developers to work on this project, and now will cut that funding?
- nerdjon 10 months agoI have only used mono a couple times, but I am a bit confused by the wording here and it is likely because I don't know the full story of Mono.
But:
> Microsoft maintains a modern fork of Mono runtime in the dotnet/runtime repo and has been progressively moving workloads to that fork.
Does that mean that this mono project and its associated repo and what is within the dotnet repo are not the same and could (if they have not already) diverge?
- JackSlateur 10 months agoMono was the .net implementation for Linux (and others ?) years ago while microsoft published the windows .net runtime
Since then, microsoft supports https://github.com/dotnet/runtime, which is MIT licensed
Mono has no reason to live anymore, hence the lack of commits and contributions
It is a dead project, I wonder what winehq has in mind here
edit: as pointed by the comments, mono supports .net runtime before the newer ".net core" (which is not compatible). Because wine wants to be able to run older windows code, they probably still use this.
- bri3d 10 months ago> Mono has no reason to live anymore
This isn't really true. Mono functions as a complete replacement for the ".NET Framework" - something that can be used to run any .NET app, including "legacy" apps targeting old ".NET Framework" versions, on any supported platform, even when the app was built to target Windows.
dotnet/runtime is intended to run more modern applications that target ".NET Core" - basically, stuff that's cross-platform on purpose.
There are tons of subtle differences relating to these goals but also some glaringly obvious ones, like mono having an implementation of Windows.Forms.
> hence the lack of commits and contributions
Microsoft have been actively forcing contributors out of mono/mono and into the dotnet/runtime repo for several years now, while Wine kept a weird halfway fork at https://gitlab.winehq.org/wine-mono/mono . Formally transferring `mono/mono` and the Mono name over to Wine will in theory allow `mono` to more effectively accept code which works to improve legacy .NET Framework support for compatibility reasons, while dotnet/runtime can continue to evolve as the way to run intentionally targeted .NET Core code.
- lyu07282 10 months agoWon't most apps use way more .net stuff than core? Mono was a way to run dotnet apps on Linux, killing it meant killing cross platform support for modern dotnet desktop apps?
- lyu07282 10 months ago
- jabl 10 months agoI know little of dotnet beyond trying various semirandom things to make some .net apps work on linux. With that out of the way, my understanding is that
- Originally there was .Net Framework, by microsoft, for windows only. Versions 1.0 -> 4.8 were released.
- Then mono came along as a somewhat clean-room reimplementation of .Net framework, focusing on making it run on Linux. Though mono does not implement windows gui widgets, so for that there's stuff like Gtk#. And you cannot run windows GUI applications on mono for this reason, even though the core parts might be portable. Eventually Microsoft acquihired the Mono team.
- Later on Microsoft made the core of .net open source and portable, creating .Net Core. Or .Net Runtime, linked above, which is apparently the same thing (not sure when they dropped the "Core" part of the name). Applications written for .Net Framework can't just be recompiled for .Net Core/Runtime, there is porting work that needs to be done. And similarly as for .Net framework, even though the core is portable and open source, the windows gui libraries are not. So again windows GUI applications written using .Net Runtime cannot run on Linux. Not sure if there exists anything like Gtk# for .Net Runtime, allowing creating native Linux GUI applications with .Net Runtime?
- Finally, we have wine which is an implementation of the Windows API on Linux. And in a wine environment you can install e.g. .Net Framework including GUI libraries, so you can run .Net GUI applications that way.
- Uvix 10 months agoThey dropped the "Core" suffix with v5 in 2020, since at that point there was no longer naming confusion.
While Microsoft doesn't have their own framework supporting Linux GUI apps on the modern .NET runtime (MAUI does Mac/iOS/Android but not Linux), there are third-party ones like Avalonia.
- neonsunset 10 months agoSee https://news.ycombinator.com/item?id=41372165
It is harmful to write new code that targets .NET Framework and existing actively maintained applications all have migrated to .NET. The ones that did not either have poor maintenance or authors that lack time as they don't owe extra effort unless they want to do that (or sometimes it is a skill issue, unfortunately).
- rezonant 10 months ago> not sure when they dropped the "Core" part of the name
It was called .NET Core until they officially retired the .NET Framework (ie v4) by releasing .NET 5.
- Uvix 10 months ago
- filmor 10 months agoMono has support for app domains (and is in general closer to .NET Framework), a more powerful C API and runs on more architectures.
- actionfromafar 10 months agoThis must be the reason. Wine seeks to be compatible with a bunch of legacy software, some of which will want to use the equivalent of .NET 1, 2, 3, and 4.x Framework and not just "dotnet core". (Or whatever the new thing is called in Microsoftese this week.)
Edit: maybe this means WPF can be the best way to write Linux applications. After all, Win32 is the stable Linux API... nudge nudge, wink wink. :-D
- actionfromafar 10 months ago
- Rochus 10 months ago> Mono has no reason to live anymore
More targets, much leaner (< 10 MB clr + mscorlib), less than factor two performance difference to current CoreCLR, written in C, easier to compile than CoreCLR, etc.
- nerdjon 10 months agoSo if I am understand correctly, what I mentioned is correct?
On the website (where my quote comes from) it links to https://github.com/dotnet/runtime/tree/main/src/mono which is a mono within what you linked too.
So this is a case of 2 different mono's?
Sorry just trying to make sure I am understanding what is happening here properly given the exact same name in 2 places...
- nicce 10 months agoWinehq is probably the only org who might have needs to add something in there. So why not have a control of it, even if the contributions are rare.
Edit: To add, isn’t the above about ASP .NET Core? Mono is mostly about the time before Core, and it is not the same.
- bri3d 10 months ago
- MarkSweep 10 months ago> Does that mean that this mono project and its associated repo and what is within the dotnet repo are not the same and could (if they have not already) diverge?
Yes, they have diverged. Just as Microsoft forked the CLR to create CoreCLR, so too has mono been forked. Features like multiple AppDomains have been removed from this fork. Here is an example pull request:
- YoshiRulz 10 months agoThe thing the .NET team maintains is (a fork of) the Mono Runtime/JIT. Mono's implementation of the .NET Framework BCL (= stdlib) isn't part of modern .NET.
- 10 months ago
- JackSlateur 10 months ago
- masfuerte 10 months ago> We want to recognize that the Mono Project was the first .NET implementation on Android, iOS, Linux, and other operating systems.
Is this true? The pre-releases and version 1 of .Net came with the source for a reference implementation of the CLR that ran on Linux or BSD. I can't remember what license it had and I thought Mono was a separate project, but maybe Mono was based on it. Not that it matters now.
- saurik 10 months agoYou are thinking of Rotor. FWIW, I also feel as if Portable.NET--which was rebranded at some point to DotGNU when I think it was even donated to the FSF--had predated Mono in functioning?
The Mono website has an archive of an old mailing list post which at the time talks about even-older origin of the project. It is (of course) heavily biased for Mono, and hilariously gives me an awkward shout out ;P.
- masfuerte 10 months agoThank you!
So it ran on Windows, FreeBSD and Mac OS X making it the first non-Windows implementation of .Net, but it didn't run on Linux. It also had a fairly useless licence, so Mono was separate.
https://en.wikipedia.org/wiki/Shared_Source_Common_Language_...
Edited to add: and thanks for the link. Only three developers and there's already drama! :-)
- masfuerte 10 months ago
- tredre3 10 months ago.Net Core 1.0 released in 2016 supports Linux yes.
Lagacy .Net never supported OSes other than Windows. Mono, released in 2004, was the first attempt to bring it to other OSes.
- saurik 10 months ago
- donatj 10 months agoIs the correct interpretation, reading between the lines that the original Mono project is being retired, and basically put on life support?
- Wytwwww 10 months agoI think this has already been the case for years? Mono didn't really have much of a point after MS opensource .NET and ported it to other platforms.
- rererereferred 10 months agoAnd Wine will probably not do much more than maintenance so applications targeting .net 1-4 work on Wine.
- rererereferred 10 months ago
- jacoblambda 10 months agoSomewhat?
Mono is still really the only way to run older .NET (pre FOSS runtime/Core .NET) on non-Windows platforms.
So Wine has historically kept a fork of mono for use within Wine for supporting .NET apps.
Modern .NET can be built for Linux, etc so this is less relevant now but there are still a lot of apps that depend on old .NET and Wine still gets value out of that.
There are a bunch of downstreams that get used for various purposes (Microsoft uses mono for webasm embedded .NET for example) so it makes sense to give over ownership of Mono to the Wine community as they are best aligned with the original upstream's intended use case (as a full replacement for .NET).
So yes it's on life support but arguably more in the sense that it has since specialized into a bunch of downstream projects. The upstream will probably mainly be used for coordinating common improvements that all of the downstream forks care about (which are mainly Wine and Microsoft).
- 10 months ago
- YoshiRulz 10 months agoLook at the release history and you'll see it was already on life support. MS stopped adding new features to .NET Framework with 4.8 but Mono has yet to reach parity with that.
- Wytwwww 10 months ago
- signa11 10 months agoreminds me of classic mitch-hedberg quip “here, you throw this away”, when some hands you a flyer on the street.
- torginus 10 months agoWhat does 'donate' mean? Does it essentially mean that they're abandoning it and pull all resources, while the Wine team is welcome to continue maintaining it if they want to?
Also, I'm not sure how relevant Mono is in the context of Wine. .NET Core is no longer an OS component, but just a runtime that ships with software. Imo their focus should be on getting said runtime working, rather than maintaining a .NET fork.
- YoshiRulz 10 months agoThe .NET Core Runtime works great on Linux, but it can't run .NET Framework apps, hence wine-mono.
- YoshiRulz 10 months ago
- alberth 10 months agoDoes this allow Microsoft to have a $400M tax write-off?
https://www.bloomberg.com/news/articles/2016-02-25/microsoft...
- stefanos82 10 months agoMy assumption is that it must have something to do with https://en.wikipedia.org/wiki/Wine_(software)#Microsoft_appl...
This way will allow them to improve Mono accordingly? Who knows? /me-thinks...
- repelsteeltje 10 months agoI'm not a gamer so forgive me if I see connections that aren't there. Does this in any way impact game emulation? Isn't wine part of proton or stream attempts to run windows games on Linux? I suppose .net and clr play some time in win32, how is that usually emulated?
- tapoxi 10 months agoVia wine-mono
Games themselves typically aren't .NET but ancillary components, like launchers or map editors, are.
- Y_Y 10 months agoWine Is Not an Emulator
but it is indeed the basis for Proton
- justsomehnguy 10 months agoYou are probably mix up .NET and C# somewhat.
- tapoxi 10 months ago
- alchemio 10 months agoEmbrace, Extend, Extinguish, Endow
- pyeri 10 months agoI think it makes sense. Considering that they are two competing technologies which more or less try to accomplish the same thing - make Microsoft technologies compatible with other platforms.
- DrNosferatu 10 months agoThey could also donate comparability with modern MsOffice.
- DrNosferatu 10 months ago*compatibility :D
- DrNosferatu 10 months ago
- purplezooey 10 months agoThis seems to happen a lot. The thing gets acquired, makes somebody rich, then is completely written off on the balance sheet 5 years later.
- Havoc 10 months agoHow is .Net/Mono connected to Wine?
Or is this more of a steward role rather than technical connection
- aussieguy1234 10 months agoThis makes me curious. Could MS secretly be using wine for some of their Azure services?
- Kwpolska 10 months agoWhy would they use Wine when they have free and unlimited access to the real deal?
- aussieguy1234 10 months agoWell, let's say they wanted to use Linux, but run their windows software on it.
- Kwpolska 10 months agoWhy would they want to use Linux though?
- Kwpolska 10 months ago
- aussieguy1234 10 months ago
- Kwpolska 10 months ago
- peppertree 10 months agoNever miss a good tax write-off.
- bawolff 10 months agoI dont think this makes sense. What value would even be written off here?
- KeplerBoy 10 months agoA value you come up with hoping the IRS will not one day disagree.
- bawolff 10 months agoThis gives me strong https://youtu.be/aCP27_vquxQ?si=WztFEXETGLcsAT51 vibes.
I dont think this is how it works in the real world.
Even if it did, giving it away would be equally a write off as just shutting it down.
- bawolff 10 months ago
- KeplerBoy 10 months ago
- bawolff 10 months ago
- 10 months ago
- voytec 10 months agoIs this a "dropped on community" project like Borg/Kubernetes fiasco with most PRs ending up in the following, and just corpo-sponsored changes and patches getting through?
> The Kubernetes project currently lacks enough active contributors to adequately respond to all issues.
- hobo_in_library 10 months agoI wonder what kind of a tax write off this can turn into
- SuperNinKenDo 10 months agoThat's a funny way to spell "fobs off".
- ineedaj0b 10 months agoi think this is related to Xbox soon launching a handheld gaming device like the switch/steam deck. anything that directly refutes this hunch?
- hexxington 10 months agoMe. I directly refute this hunch. Nothing to do with xbox ever entered the discussion.
- ineedaj0b 10 months agothanks!
I kept thinking Microsoft needs to port a windows version for their handheld, doesn't want to use steamos, but also needs to work with 'interesting' hardware. Their answer would be a linux port imo, but having too much there could annoy trust regulators so they divested from mono. but I had zero proof for any of these hunches.
- ineedaj0b 10 months ago
- hexxington 10 months ago
- munchler 10 months ago.NET now runs on Linux and other platforms, so what is the purpose of maintaining Mono separately at this point?
- kcb 10 months agoMono can run old .NET framework applications directly.
- munchler 10 months agoOK, but that doesn't require any further changes to Mono. It should essentially be a read-only project going forward.
- wtetzner 10 months agoIt won't get new features, but will likely require maintenance to keep it running as new versions of operating systems are released.
- randomdata 10 months agoIs there anything to suggest that there will be further changes? I mean, other than bug fixes.
- 10 months ago
- wtetzner 10 months ago
- munchler 10 months ago
- YoshiRulz 10 months agowine-mono for one. It's also used for some desktop apps, crucially for those built with the WinForms framework, since the newer, .NET Core versions of that are Windows-only.
- kcb 10 months ago
- klyrs 10 months ago"Free as in beer" just became "free as in pony?"
- pjmlp 10 months agoYet another piece of Xamarin/Mono that falls down.
No wonder Miguel de Icaza is now focused on Swift, Godot and Apple's ecosystem, all the promises done at Xamarin acquisition time are gone now.
Mono Develop killed, after being renamed into VS4Mac, gone through a rewrite, only to be killed shortly after the rewrite reached 1.0.
Xamarin.Forms rewriten into MAUI, with incompatible APIs.
MSIL Linker had a better chance as a critical piece of Blazor WebAssembly and Native AOT.
The whole dotnet reload drama.
Now Mono donation, and then .NET team is surprised .NET uptake on UNIX shops isn't as they expect.
In alternative universe when the Xamarin acquisition didn't happen, where would we be now?
- aspeckt112 10 months agoBased on how Xamarin performed prior to the MS acquisition, I'd guess dead.
The license cost was high, and the MS acquisition came right around the time React Native and Flutter started to enter v1. I think they'd of been blown out of the water pretty quickly. At least Microsoft allowed Xamarin to get into enterprise .NET shops pretty quickly. There's a lot of B2B form based apps written in Xamarin. I worked on a pretty big one that made (and continues to make) a lot of money.
I've long assumed the point of the acquisition was because Xamarin did basically all the hard work of allowing .NET to be cross platform.
- pjmlp 10 months agoEver heard of Rotor?
https://www.codeguru.com/dotnet/net-nuts-bolts-the-joy-of-ro...
Or DotGNU?
https://www.gnu.org/software/dotgnu/
What happened to Xamarin looks like Microsoft took whatever IP was relevant, and left everything else go, which this decision is a confirmation thereof.
It is kind of interesting to see Miguel's feedback, now that he his allowed to talk about how things went down.
- aspeckt112 10 months agoI’m a big fan of Miguel’s work. His comments have been pretty interesting. You also don’t have to read between the lines much to know how he feels about what’s happened to his tech.
I assume he’s got fuck you money now though. I’m very excited to see what he does with Swift and Godot, Swift is a great language for gamedev.
- tambourine_man 10 months agoWhere is this feedback you’re referring to?
- aspeckt112 10 months ago
- pjmlp 10 months ago
- aspeckt112 10 months ago
- whalesalad 10 months agoWhat is the mono logo? a gorilla with a hat? or a pile of poop? serious question.
- eddythompson80 10 months agoIt's a Monkey's head. Mono is Monkey in Spanish. The original author, Miguel de Icaza, is Mexican-American.
- randomdata 10 months agoA portrayal of someone's attempt at giving a "thumbs up" with a broken thumb, obviously.
- eddythompson80 10 months ago
- sswam 10 months ago[dead]
- 0xedd 10 months ago[dead]
- RobRivera 10 months ago[flagged]
- commercialnix 10 months ago[flagged]
- minkles 10 months agoPerhaps us C programmers should be telling the Rust programmers to stop shitting up the industry for everyone else because "C" is too hard to get right?
Really, point aside, there is no place for zealots and many places for a rational decision analysis in what tools to use. Absolutes and extremism are all bad.
- commercialnix 10 months ago[flagged]
- 10 months ago
- minkles 10 months agoThere are a very tiny minority of people who can choose the right technology for the job.
Rust is not the answer for most problems. If you like it or not!
- 10 months ago
- commercialnix 10 months ago
- jefurii 10 months ago> If Rust is "too hard", find some other profession and stop shitting up the industry for everyone else.
If you really like Rust you should promote it by using it to write great tools that inspire others to use it, instead of shitting on people who use other tools to do actual work.
- commercialnix 10 months ago[flagged]
- commercialnix 10 months ago
- petesergeant 10 months agoWhat's the language you're referring to here? C#?
- bangaroo 10 months ago[flagged]
- commercialnix 10 months ago[flagged]
- commercialnix 10 months ago
- minkles 10 months ago
- larsrc 10 months ago"Donates"? A code base is a maintenance burden.
- RandomThoughts3 10 months agoThat’s the old code base which has been in maintenance mode for 5 years and which Microsoft doesn’t want to maintain anymore. New development still happen in a fork which remains under the stewardship of Microsoft.
Second paragraph of the article by the way, just saying.
- farhaven 10 months agoSo Microsoft gave the Wine project the software equivalent of a stained mattress?
- RandomThoughts3 10 months agoThe Wine project apparently decided they wanted to keep alive an old version of a piece of software Microsoft has no interest in and Microsoft gave them the official repo instead of throwing it out.
Mostly interesting in that it is a token of goodwill from Microsoft to Wine something which is in line with the current Microsoft view of the OS market but would have been very surprising not that long ago.
- PretzelPirate 10 months agoIt's not like Microsoft can force Wine to take the codebase. In order for this to be donated, the Wine project needed to accept it.
- kergonath 10 months agoPretty much, by the look of it. But we still don’t know everything or what exactly the Wine project has on its metaphorical mind.
- RandomThoughts3 10 months ago
- farhaven 10 months ago
- RobRivera 10 months agoFeel free to donate me a 90s Honda Civic
- pstrateman 10 months agoYeah if this doesn't come with a substantial endowment it's not a donation.
- RandomThoughts3 10 months ago
- Lockal 10 months agoYes, some things never change:
https://en.wikipedia.org/wiki/Embrace,_extend,_and_extinguis...
- stcroixx 10 months agoAnother perfect execution of embrace(Microsoft became the steward of the Mono Project when it acquired Xamarin), extend(Microsoft maintains a modern fork of Mono runtime in the dotnet/runtime repo and has been progressively moving workloads to that fork), extinguish(we recommend that active Mono users and maintainers of Mono-based app frameworks migrate to .NET) for anyone who thought MS had actually changed since the bad old days.
- djmips 10 months agoOnly wrinkle is that Mono was originally a .NET runtime for Linux. So they weren't embracing an external standard but a knock-off of their own. But I still agree with elements of your statement in principle. However, giving Mono back to open source is an interesting development and I don't know how it fits in your narrative.
- fluoridation 10 months agoThat's not what EEE is. For starters, the term applies to standards, not to implementations. The standard here is .NET, which Microsoft controlled from the start.
- djmips 10 months ago