Hacker News new | past | comments | ask | show | jobs | submit login
.NET 5 (microsoft.com)
730 points by benaadams 15 days ago | hide | past | web | favorite | 410 comments

I'll be honest, as much as I love the improvements with .NET Core/.NET Standard, Microsoft's branding strategy leaves a lot to be desired.

vNext has already been historically used in the context of ASP.NET to refer to ASP.NET (not to be confused with ASP.NET MVC) v6. We restarted the versioning back with ASP.NET Core, now on version 2. Entity Framework used to be a .NET framework component but is now standalone, and has a Core version? Does Blazor (or is it Razor Components now) share the .NET branding?

Separate to the web stuff, we have the .NET platform - .NET framework is the non-cross platform version for which we're on version 4, but it implements .NET Standard v2 along with .NET Core, which has a Linux runtime. Mono also implements .NET Standard v2 and has a Linux runtime.

I remember many years ago when we also had Microsoft .NET Passport.. which was completely unrelated to everything else that I've mentioned related to the .NET brand.

And now we have .NET 5 which is neither Framework nor Core - so will ASP.NET drop this Core branding too? Is it just me, or is this all incredibly convoluted?

> And now we have .NET 5 which is neither Framework nor Core

Just to note, the blog post explicitly says that .NET 5 is the next version of .NET Core. It's where .NET Core is going, and given that so much more of the .NET "picture" is being realized with it, the name is changing to be more reflective of the fact that it's not really a "core" (small) thing anymore.

Yes, indeed. But will that change also apply to the other projects that target .NET Core (now ".NET")? Will Entity Framework Core become Entity Framework and clash with the 'full-fat' Entity Framework? The blog post suggests this won't happen by referencing ASP.NET Core 3.

And where does this leave the legacy .NET Framework? It reads as a sub-project of '.NET' (previously .NET Core) but it very much isn't because it provides a set of older APIs. We seemingly have two meanings for .NET now, referring to .NET Core (which I guess only applies when suffixed with v5+) and the wider array of .NET projects, whatever they are.

Legacy net framework Will stop with 4.8, as said some months ago

EDIT: more on this here https://devblogs.microsoft.com/dotnet/update-on-net-core-3-0...

I missed that, and that would be a pretty big deal. I thought the message was of a side by side evolution, with full framework getting features possibly with a delay.

Key pull quotes in this article specifically:

> There will be just one .NET going forward

> Additionally, we wanted to clearly communicate that .NET 5 is the future for the .NET platform.

Well, it is not really the case, there will be still two frameworks, just one isn't going to be developped anymore (full .net 4.8). The way I read that sentence initially was them merging the two into one.

>Well, it is not really the case, there will be still two frameworks, just one isn't going to be developped anymore (full .net 4.8).

If "one isn't going to be developed anymore" there there will be just one framework.

"Being" here means what's the official worked-on implementation. Not merely existing, obviously the code for 4.8 wont go anywhere, nor will existing deployments suddenly vanish.

What they are saying at MS Build is 4.8 will be supported "forever" because there is too much code depending on .NET Framework, but new feature development is going into .NET Core 3+. By the time they reach .NET 5, they will have unified .NET Core, .NET Standard and Xamarin. They are skipping version "4" to avoid confusion with the second .NET Framework 4.8.

I took "forever" to mean that they would still be issuing security patches to 4.8, for example. Given all that I don't know why you're insisting on phrasing it like that. There is only one future, sure. But you seem to be making it sound like 4.8 has a planned obsolescence date or something and Microsoft is saying the exact opposite.

When 4.8 is installed, 4.7 is going away. Here .net 5 will not replace .net 4.8, it will exist side by side (if I understand correctly). That's two frameworks to me.

The VB6 runtime is still installed on Windows 10, but no one (should) considers that a viable Framework to target in 2019.

Maybe a better analogy is that .NET Framework 1.x and .NET Framework 2-4.x are side-by-side installed still in Windows 10. If you wanted you could still target .NET 1.0 and it will run in an entirely different runtime (.NET 1.x and 2.x are hugely different). .NET was designed for that sort of side-by-side deployment, they just haven't done it in a while.

Yet I've not met a developer that still sees .NET 1.x as a viable Framework recently. Do you want .NET 4.8 applications to just break? What do you expect here? The "current framework" is always a combination of marketing and support and this article seems pretty clear that all marketing and support effort will be on .NET 5, and .NET 4.8 is "done".

>> When 4.8 is installed, 4.7 is going away.

That's not true at all. You can run any version of the framework side-by-side all the way back.

You can only have a single 4.x version on the box. They all install into the same folder.

That's just 2 frameworks installed on a machine.

You can have .NET 2 or whatever older on the same machine too.

Doesn't change the fact that .NET 5 will be the single official .NET release onwards, where development efforts will be concentrated, etc. It's not like MS will support 2 different frameworks (except one as a legacy release).

Yes, major versions install side-by-side (except v2-v3) because they aren't perfectly backward compatible and this is necessary for legacy app support. So, you can need all of .NET Framework 1.1, 3.5, and 4.8 now, and in the future .NET 5.x is added to the list.

There's no point since .NET Core 3.0 can run desktop applications now.

It will run desktop applications developped for .net core. I don't believe that .net core can run a full framework desktop executable.

It can using the compatibility shim depending on what framework capabilities it requires.

WCF, Remoting, Web Forms, ODP.NET, EF6 UI designers certainly not.

Yes, some of those items are legacy, but not everyone enjoys paying to rewrite stuff from scratch.

All the desktop stuff is only on Windows though, right? If I'm not mistaken this is the first major .NET Core component that is not cross-platform, which is confusing in itself.

Yes, since it's using Windows components like WPF. I dont think they ever had a plan for a cross-platform desktop UI kit.

Xamarin Forms is that.

Isn’t that a clone of WinForms and not WPF?

That's probably a good thing. WinForms is still the nicest GUI development experience out there, sadly...

Not at all, it uses XAML and the same ideas behind WPF.

They explicitly won't support cross-platform efforts for the GUI stuff, as stated on GitHub (though maybe, one day ...).

I suppose their rationale is damage control ("Okay, they get the server, but the desktop is still firmly ours"), but it would certainly keep me from starting a personal project with a Microsoft Framework.

> but the desktop is still firmly ours

At this point I'm guessing that it's because there isn't a strong future for desktop apps written in native code. Even VSCode is written on top of Electron. Good, bad, or indifferent I think that there isn't a lot of point in developing a native GUI framework at this point.

(To be clear - I'm 100% sure that there are a lot of use cases that I'm blithely waving away, but I'm also sure that those use cases are currently being addressed with WinForms, Qt, GNOME, etc, etc, so why should MS invest in Yet Another GUI Framework?)

I wouldn't mind seeing WPF, or a descendent, ported to other platforms. Xamarin Forms, Eto Forms, and a lot of other wrappers already do a lot of that though, if you want cross platform gui from .Net. (god that looks sloppy)

I also tend to agree that for good, or bad, that Electron will probably grow significantly as an application base. Like I see node becoming the defacto runtime for WebAssembly, I see Electron taking that place for WebAssembly + UI. And I don't think it's all that bad.

Even with MS, Electron seems to be their unified UI target for a lot of apps. VS Code, Teams, Azure SQL Studio (or whatever the name is now), and don't see that space shrinking. I'm only surprised that Teams doesn't have an official Linux version.

WinForms is outdated, "replaced" by WPF and I think apps on the Microsoft App Store have to use WPF instead of WinForms.

So it would make sense if they're pushing .Net Core to be cross-platform, that they want to eventually push the Microsoft App Store "buy" button to be cross-platform as well, with a GUI framework to support those apps. Speculation, but .. of course they will want to.

You can't publish WinForms or WPF applications to the Microsoft Store, they've both been replaced. It's only UWP or using MS's tooling to convert Electron apps to UWP.

Only partially, try to run any desktop application that depends on WCF or ODP.NET with it.

wcf works under core (at least most of it), core 3.0 + wcf + windows desktop shim actually makes everything under wcf working again.

Most of it is not good enough.

I don't want to be the one stating on RFP "it kind of works".

The implication I took from this was that it's not good enough now, but they anticipate it being good enough by the point this is released.

Those customers want the existing apps to just run. Some of them, as sometimes happens, don't want to rewrite them.

What is not good enough?

Pick random .NET app using WCF and run it with zero changes on .NET Core.

But that article says:

"Both .NET Framework and .NET Core will move forward, and both will be fully supported"


Which is why I found this one confusing... because it essentially says the opposite.

Yep, I've semplified. What I understood from this post is that net framework is in "maintenance mode": probably MS plan a 4.8.1 with but fixes and maybe a 4.9 with some minor updates, but .net core (now simply .net) is the place where new things will be developed.

Here is the post you are looking for, I think ... https://devblogs.microsoft.com/dotnet/net-core-is-the-future...

exactly! "We will continue to both service and support .NET Framework, which includes bug–, reliability– and security fixes."

I don’t see anything in the linked article that supports your conclusion.

Nothing in the article suggests maintenance releases, but MS' history is probably enough for that. The article does definitely state that .Net 5 is the evolution of Core and will be the entire platform going forward. I'm, personally, glad to see Core/Framework/Mono etc rolled into a single version at 5. The previous split versions have been fairly confusing.

yep! this blog post is more clear about future releases: https://devblogs.microsoft.com/dotnet/net-core-is-the-future...

"We will continue to both service and support .NET Framework, which includes bug–, reliability– and security fixes."

Fair enough - but the wealth of documentation for it will continue to exist, as will older applications targetting it. This seems problematic if you want to search for ".NET" (meaning .NET Core).

The post is a vision-setting announcement about where .NET is headed. The finer details like you've described will be worked out in the following 1.5 years.

I look at this ".NET 5" thing as a PR move to end full framework.

"We aren't ending full framework, we have .NET 5!"

If you are developing new apps in full framework, you are doing it wrong.

If you're developing an application with a Windows desktop GUI, you're still doing it on full framework (WPF, WinForms, UWP). They're folding that into .NET 5, and I haven't seen anything indicating that they see that as "doing it wrong". This is only one case of developing for full framework, but it's a big one. I imagine any other cases where the developer community really needs full framework capabilities that still aren't ported to CoreCLR, they'll fold that in just the same as with the UI frameworks, as a Windows-specific capability. Maybe they end up sunsetting more than I think, but for now this seems more like consolidating Core and Framework than ending Framework.

Last time I tried to seriously switch from Framework to Core, I was dismayed to find that Assemblies could not be unloaded from memory in Core after they were loaded. That was something that depended on the AppDomain functionality, which existed in Framework only.

Thankfully, they finally got around to adding support in .NET 3.0 (https://www.strathweb.com/2019/01/collectible-assemblies-in-...).

There are a ridiculous amount of first-party Microsoft SDKs for products they are pushing heavily that don't support Core yet.

Unless there is a newer version than last month, one of those is the Bot Framework extensions for Microsoft Teams, which they are just slamming ahead with.

Then we are doing it wrong, until the 3rd party libraries that we require, actually bother to make it right.

Yes, the branding is terrible and has been for some time. It's good that most of it is merging but this is still years away and will create a lot of historical churn in its wake.

Even with the tremendous strides in tooling and docs, the naming and runtime complexity is the biggest hurdle in getting new developers to the ecosystem. Just about every other major stack has a far simpler setup. Even ".NET" is hard to search for.

Yeah, the dot has always been unwelcome now that you mention it. Including in my filesystem.

Not to mention the fact that the whole thing was named after an experience that to me at least has always meant "Shoot, .com isn't available!"

> And now we have .NET 5 which is neither Framework nor Core - so will ASP.NET drop this Core branding too? Is it just me, or is this all incredibly convoluted?

My understanding is .NET 5 is both. Previously .net framework and .net core were both implementations but also api surfaces. And it's my understanding that .Net 5 will basically "implement" both. So .net standard won't be necessary because if all implementations(.net core + mono) implement all the difference api surfaces then you don't need a "common" api surface.

So there will only be two implementations. Mono and .NET core which will provide all the same api surface as .net framework + .net core(and therefore .net standard).

.NET Standard will probably still be necessary due to the fact that Mono will still continue to exist separately thanks to products which embed it (such as Unity).

This vision structure paints Mono as "merging" into .NET 5 where the MonoVM will be a optional switch with CoreRT and the goal of MonoFX entirely dropped for CoreFX. It also sounds like they want to converge the hosting APIs so that products such as Unity may easily switch between MonoVM and CoreRT. At that point, if Mono is .NET 5 and Core is .NET 5 (embedders like Unity would move to embed to .NET 5), there maybe isn't really a need for .NET Standard.

The first two sentences of the article sum up the announcement and eliminates most of the confusion:

Today, we’re announcing that the next release after .NET Core 3.0 will be .NET 5. This will be the next big release in the .NET family.

There will be just one .NET going forward, and you will be able to use it to target Windows, Linux, macOS, iOS, Android, tvOS, watchOS and WebAssembly and more.

I think Microsoft has been guilty of what you say in the past but this announcement and their product offering going forward could not be more clear.

It is quite confusing and misleading to say "There will be just one .NET going forward" since this will not affect the .net framework at all - there will still be two incompatible platforms (4.8 and 5/core) for the foreseeable future. They just changed the name of one of them.

I think the problem with MS is they want a simple name change to look like some new unifying strategy. Developers would be much happier if they just cut out the bullshit and made it clear this is just a name change of .net core. The name change in itself is fine.

MS is just FUD'ing themselves with these confusing messages.

>It is quite confusing and misleading to say "There will be just one .NET going forward" since this will not affect the .net framework at all - there will still be two incompatible platforms (4.8 and 5/core) for the foreseeable future. They just changed the name of one of them.

Well, everything will move to 5. And the framework at 4.8 will stop being developed. And 5 ( Core, whatever you want to call it, ) is incompatible with the .Net 4.8.

How misleading is it?

> everything will move to 5

Not likely. Many libraries (like web forms) will probably never be migrated. We will have two incompatible .net's for the foreseeable future. Changing a name does not change that.

That's right; we'll have two incompatible .NETs for the foreseeable future but only one will be getting new features. .NET 5 will unify Core, Standard and Xamarin/Mono.

In what way will this unify .net Standard with Core etc.? Or are you talking about a different standard?

I'm genuinely confused because the illustration shows .net standard as a layer between .net 5 and various platforms. But if that is the case, the platforms will not be able to take advantage of newer features, since .net standard is the API shared with .net 4.8. This does not seem likely.

Yes that's a good question. The situation today with .NET Core vs .NET Standard is: Standard is the common functionality that works in both .NET Framework and .NET Core. Standard continues to overlap more with Framework as those features are added into Core.

After .NET Core 3.0, MS said new features will only be added in Core. And when they reach .NET 5, Standard and Core will be identical, with "Standard" being the library you link to regardless which specific .NET implementation you're running on: desktop, IoT, mobile, etc. I believe the diagram only means that "Standard" covers all of .NET 5, not some subset of Core. And .NET Framework is a separate, maintained legacy library off to the side.

Note, I don't work for Microsoft, this is just my understanding from reading their docs and talking with them about it online and at MS Build.

So ".net Standard" is going to mean two different (incompatible) things in the future?

I don't see how you reached that conclusion. Once .NET 5 arrives, there won't be any more concern with ensuring portability between .NET Core apps and .NET Framework apps by way of targeting .NET Standard.

.NET Standard will be only one thing, if they end up retaining the name at all. It will be the the interface to everything in .NET 5. .NET Framework will just be its own thing maintained only for legacy compatibility. After .NET Core 3.0, new development will not be added to .NET Framework.

I do agree with you that it would be clearer if they only spoke of .NET 5 and .NET 4.8 Framework versions.

> Once .NET 5 arrives, there won't be any more concern with ensuring portability between .NET Core apps and .NET Framework apps by way of targeting .NET Standard.

In the real world there are massive amounts of code in the .net framework. Because of the significant breaking changes between 4.x and core/5 it will take a long time before all this code is ported, and many application will probably never be ported, while still having to be maintained. So for the foreseeable future it is going to be very important whether libraries are 4.x compatible or not.

Consider Python had (IMHO) fewer breaking changes between 2 and 3, but still the migration took about a decade.

> In the real world there are massive amounts of code in the .net framework.

Right, I agree with everything you said here. That's exactly the reason why MS said at the Build conference that they will be supporting .NET Framework "forever". There is a lot of it out there and it will likely remain for a very long time.

When I said there won't be a concern with portability via .NET Standard, I merely meant that the current shifting landscape of Framework features vs Core features vs the intersection known as Standard, will go away. There will be .NET 4.8 in maintenance mode and .NET 5 as the future, growth mode. Maintaining .NET Framework apps hopefully won't be a problem but if you're thinking of building a new app using .NET 4.8, you're likely making a big mistake unless it's to satisfy some immediate need that doesn't work on .NET Core. MS said they're committed to supporting people stuck in that position. Just don't expect new features that will appear in future .NET versions.

> When I said there won't be a concern with portability via .NET Standard, I merely meant that the current shifting landscape of Framework features vs Core features vs the intersection known as Standard, will go away.

I'm really struggling to understand this. Can you explain how you would prepare to port a .net 4.x site to core/5, if the notion of a compatible intersection goes away? How would you even make a library which is compatible with both 4.x and 5?

If you are thinking of porting an old 4.x app but you wait until some time beyond Nov 2020 (https://i.redd.it/f8todfd66uw21.png) then it is in your interest to track the latest .NET Standard along the way. If you haven't been keeping the app up to date, say you're on 4.6.1, and then you decide you like .NET 5 and want to move to it, I think you'll just have to try it and fix whatever breaks.

This is pretty much like every other porting project where you have an old neglected project that you want to bring up to date. Maybe there is an easier way but I don't know what it is. Staying on the legacy .NET Framework isn't the end of the world, you're just committing to maintaining it as is. If you want new features as they become available, well... that's on you, don't wait.

Maybe you move some functionality out of your legacy GUI app to microservices written in .NET 5, parts that are unlikely to have any porting issues. In any case it's not like anyone is going to be surprised by what's going on. Maybe the community will back port some new things to .NET 4.8. MS will be devoting their efforts to enhancing the new platform while keeping the old one on life support. I think that's reasonable. (edit: typos)

Yeah all that is completely obvious. So why not just communicate honestly: This is a massive breaking change. It is going to be painful, but is necessary to moving forward. But don't deny the reality of it.

Saying .net 5 is unifying .net is like saying Python 3 unified Python or that Angular 2 unified Angular.

> If you haven't been keeping the app up to date, say you're on 4.6.1,

Again, why the dishonest arguing? 4.6.1 is years old, but you will have exactly the same problem if you are on 4.8 which was just released. It has nothing to do with code not being updated.

> where you have an old neglected project that you want to bring up to date

Again, this has nothing to do with projects being old and neglected. It is a breaking change, it will affect all projects on .net framework if they want to upgrade. And you know that.

I honestly fail to see what has been dishonest in the communications around this.

The plan for .NET 5 does, in fact, unify .NET Standard, Core and Xamarin. These will no longer be separate things but will go forward under one name.

I'm not sure what you're claiming as the _breaking change_. Can you be specific? It's not, in fact, going to break anything from what I can see. .NET Standard will simply continue to grow larger in .NET Core 3+ until it covers everything. This seems to me to be very different from the Python situation where you are (probably) forced to make code changes to compile with Python 3. If I have some code that compiles with .NET Standard 2.0, are you under the impression that it won't compile with .NET Core 3+ or .NET 5? If so, what leads you to think that?

OK, sorry I called it dishonest, that was out of line since it was assuming bad faith. I just don't think we can pretend .net framework doesn't exist anymore just because the successor is announced.

If they just said ".net framework is being discontinued; .net core will be known as .net", that would help a lot.

It sounds like they're trying to improve this situation in this build by replacing and unifying it all around 5 and give it a clear path forward.

But yeah, it got a little crazy with divergent visions there.

As I have gathered from talking to former Microsoft developers and evangelists, vNext is generally embraced to mean "the next great version", maybe primarily for developer centric stuff.

Personally, I've been hearing about MS Build vNext and TFS vNext for the last 8 years, and there's been several releases since then. Maybe that's why I kind of associate it with vaporware, even though that's probably unfair.

What would be a great naming schemes for retro fitting an open standard with a new, open implementation for a subset of the existing framework?

It’s getting silly indeed, it’s also getting unproductive. You have to spend too much time thinking about tooling instead of just building things.

To draw an analogy to Debian, vNext is somewhat similar to Sid. The name is a moving pointer. In a Microsoft context, there is not an unstable connotation like Debian's Sid is.

vNext is a term used across much of the Microsoft ecosystem to denote the current WIP version of a specific technology. SQL Server vNext has pointed variously at what became the 2017 release and currently points at the 2019 release (and will soon point to the next release after that).

Excellent recall--I had almost entirely forgotten about ".NET Passport," one of Microsoft's many premature plays at being an identity provider. This certainly added to confusion at the time about .NET's actual form... something to do with XML, or web services? And an awkward new ORM that will definitely not become well-loathed in near-record time?

I work on Mono and used to maintain a .NET cross compiler and the Core / Standard / Framework terminology still makes no sense to me.

On the bright side unifying products and libraries and stuff will mean it doesn't have to confuse me anymore (:

Given the embracing of other platgforms, and the convergance aspect of one .NET to rule them all. WHy they didn't rebrand it is a mistake they will probably end up doing if they want to pull in dev's on other platforms. Many who's exposure to .NET will be of a legacy flavour and maybe left a sour taste. A taste that will stick with them upon anything .NET.

I'd vote for .ONE, one API to rule them all.

Though convoluted does sell books, I'm sure we will see a title "When is .NET not .NET" soon.


Yeah, that's easy to search for!

/end sarcasm

You haven't even mentioned the runtimes, and the target platforms, and the whatever elses.

"There will be just one .NET going forward, and you will be able to use it to target Windows, Linux, macOS, iOS, Android, tvOS, watchOS and WebAssembly and more."

This is remarkable, and impossible to predict from the Microsoft of 10 or 20 years ago. Satya seems to be the rare visionary CEO of a megacorp, instead of just defaulting to a defensive and reactionary stance like most other leaders.

My guess is that it's also at least partially reflective of how .NET's status at Microsoft has changed over the past two decades.

Remember 20 years ago, when .NET wasn't just a managed software development platform? It was a company-wide strategy[1] that was meant to encompass more-or-less their entire product line. The whole Microsoft future was .NET, and they were going to have a .NET edition of Windows, SQL Server, Exchange, etc.

Since then, those plans have been dropped, Microsoft's (.NET-based) preferred GUI toolkits, WinForms and WPF, were replaced by one that is .NET-compatible but not .NET-native, etc. etc. .NET just isn't as central to Microsoft's identity as it was 20 years ago.

Which, I'm guessing, means that the .NET team is now a lot freer to go cross-platform without inviting the wrath of the Windows team.

[1]: https://en.wikipedia.org/wiki/Microsoft_.NET_strategy

> wrath of the Windows team.

There is not much of Windows team to wield the wrath:


They are still around.


Read towards the end.

I think the initial ".net strategy" was just a (failed) marketing exercise. It was supposedly some kind of grand vision where the .net framework were just one component and SOAP was another. They certainly did not plan to base Windows or SQL Server on the .net framework.

They did try a number of times to write kernels in C#-like languages. Singularity, Midori, etc.

This spawned a lot of interesting academic work that influenced languages such as Rust... trying to get high level features and safety without need for a runtime.

You're correct. I'm certain that you're fully aware of Midori, but as you alluded to, a Microsoft Research initiative, but never was on the official roadmap. .Net itself has been a great success. I was completely sold on .Net Core and .Net 5 is exactly where they needed to take it.

He understand that Microsoft is a software company, and makes money selling software and software services. Steve Ballmer, for all his good attributes, was stuck seeing Microsoft as a Windows company, thinking everything had to relate back to Windows. Nadella understand that companies change or die. Ballmer just thought that meant finding new places to shove Windows.

an ironic twist is that microsoft always made very good hardware (typing this on a natural keyboard 4000 & also the xbox controller).

I'm pretty skeptical of all the Microsoft praise lately, but if this is indeed true, it's a big deal. And probably a management feat somewhere (CEO or otherwise).

I worked on dev tools at Google and recall many efforts over the years to try to unify the customer experience -- between internal and external tools, Go and Dart, Android and Chrome devtools, etc. Things always lurched in one direction or another, but never consistently. It was always above someone's pay grade to choose one or the other, so you ended up with both.

Convincing engineers on devtools to abandon their babies is indeed hard!

On the other hand, I think if you dig deep, Microsoft still has all the legacy, but they cover it up with a lot of branding. Hence the top comment in this thread about confusing branding.

Older execs probably had to be defensive and reactionary because they had to protect their main source of income, Windows.

But it's clear now that 1) Windows has zero chance of taking a significant market share away from Linux in the cloud and 2) cloud technology is an important area of growth for MS.

Satya probably sees that stubbornly sticking to Windows just isn't going to work anymore, so it's better to play nice with the others.

I don’t know. I think they’re still the same at the core, they just do enough to try and stay relevant.

Office for Linux would be easy, but that’s not going to happen.

My companies online outlook shows that MS is adding clones of all the tools (slack/trello).

They’ve been successful and monitizing in this new era

> Office for Linux would be easy, but that’s not going to happen.

I have a hard time believing it would be easy. I use both Office for Windows and Mac, and the differences are great enough that I'm guessing that there's a huge amount of divergent code in the UIs. And both would be written against GUI toolkits that are not present on Linux, so a Linux port would be yet another major effort.

That said, I think that you're right that it's not going to happen. My understanding is that a major consideration for anyone looking to port a commercial desktop product to Linux is that Linux desktop users are, in the broad, very hesitant to spend $100s on a commercial product when open source alternatives exist. My guess would be that a Linux port of Office just isn't a proposition that is likely to generate positive profits.

Office Online is the desktop Linux user's access to Office. Enough people use Macs that it makes sense to invest into the effort, else some other vendor will gobble up Office's marketshare. I use Office Online and LibreOffice all the time on Windows 10, some documents it's just better to have guaranteed formatting compatibility with the majority of documents which are put out through MS Office. I would personally just continue the same pattern if I were a desktop Linux user.

> Office for Linux would be easy, but that’s not going to happen. They're rewriting Office in React Native so Windows, OSX, and mobile ports will have a lot more in common.

But "Desktop Linux" will always be a million support headaches for no market share; which begs the question "Dear Lord, why?"

And the only way to build market share is through cannibalization of windows licenses. Not in microsoft's interest. If you hae a proper office for windows, I bet many companies would consider seriously switching to Linux.

Office has been available for Mac for well over two decades. There are so many more reasons for companies preferring Windows on the desktop than just Office.

I think there were so may more reasons. But what I see is all internal apps moving to be web based. 5 more years and Office is really going to be the last thing tying up corporates to Windows.

Linux as it exists today on the desktop is still a headache. If anything, if office were ported to Chrome OS, that would be a real alternative.

Office already runs on Chromebooks via Google Play within the Android container [0]. Is it then worth MS' time and energy to port the browser interface as a Chrome OS 'native' app?

[0] https://support.office.com/en-us/article/how-to-install-and-...

o365's web interface is pretty much what you're asking for. It's a rent based model, but so are the desktop apps at this point (mostly). It wouldn't really surprise me to see an electron wrapper around o365 UI for a future release to unify the applications more.

The only part of "Office" I really even use though is Outlook (at work), and it's pretty good at the job it does.

Call me when Linux has anything that works as well as AD.

It does; it's called AD. :)

The actual problem is the lack of Group Policy support (or even a viable equivalent - preferably one that's cross-platform).

You just need a server running AD. Third party and browser SSO with AD is a solved problem.


Why would companies just switch to Linux?

Enterprises don't just use free OSS software like that. They'll use Redhat or some other corporate-backed variant, and in the end the license cost will be the same but most software and drivers don't work, users will need to be retrained, and support costs will rise dramatically. They can't even use .NET to build any internal desktop apps either.

It's a terrible deal.

I'd switch to Linux on day one if they'd port Office.However, windows licensing costs are negligible in most companies,compared to the overall spending on software.

>They're rewriting Office in React Native?

I tried some googling but the results seems to be all speculation. Is this really happening?

This seems to be the main source: https://twitter.com/TheLarkInn/status/1006746626617008128

I thought they published an article that explicitly mentions RN but I can't find it at the moment. MS has also been heavily working on RN for Windows including a C++ bridge that significantly increases the performance of the JS to native bridge.

That's really insane, although it makes more sense than, say, writing a code editor in Javascript.

Does it? VSCode is refreshingly quick while Word is (already) brutally slow.

Just switch Word to draft (nee Normal) render mode. It was never meant to be performant in print layout mode.

But that’s how everybody uses it. That’s the default mode when you start a new document. Who even knows that the other mode exists?

Surely they could make it performant in the default mode that everybody uses now that it’s 2019 and we have megahertz to spare? There is no excuse for Word’s atrocious performance.

Draft/normal was the default in Word 2003. Most people have used it.

The problem with page layout mode is that any non-trivial format change, insertion, or deletion requires repagination and the UI freezes until that is completed. Draft mode repaginates asynchronously so that it remains responsive. Comparing a WYSIWYG editor to a plain text editor is no contest as the former performs much more work to layout the text.

I use Word a lot on documents of varying complexity and size range from one to about 500 pages and, other than doing something like a TOC update on a giant and complex document, I've never seen Word be painfully slow, even in Print layout.

Painfully (and randomly shifting) inaccurate in print layout on documents that involve more than just text, sure, I see that every day.

The efforts have been spent on cloud services. Office 365 online is rather good, OneDrive finally works, and other things like Teams and DevOps are being well integrated.

For 95% of business users, these online editions have all the capabilities they need without the install headache and are much easier to maintain and update. Office Desktop just had a refresh too but there's basically 0% Linux business users to spend the millions in development costs for a variant.

Yeah clearly they are throwing a lot of spaghetti at things, I don't know that that's necessarily bad. At least they are trying to do so openly and in a API-centric way instead of just building the garden walls higher like every other company.

I haven't used Office in years and don't know anyone who has, so I'm not sure how big of a priority it is to add platforms to a product like that.

Have you looked at Office365?

It only took about 5 years to get one rendering engine for both Mac and windows, but sure it would be easy.

Office on Linux already exist, it's called Office 365. Porting Office desktop for an operating system that's COMPLETELY IRRELEVANT for office users makes no sense.

> an operating system that's COMPLETELY IRRELEVANT for office users

Arguably a large part of the reason that Linux isn't used in offices is because MS Office isn't available. Of course it's in Microsoft's interest to keep it that way.

C'mon, that's complete bullshit. Linux is very hostile to the everyday user, you can't expect a large majority of users to have to fiddle as much as it's necessary to get a barely passable desktop experience on Linux. You buy a Windows or Mac computer and you're going in 10 minutes. There's no combination of distro or hardware where that's true for Linux.

I pretty much disagree here. Before she passed last year, I had my grandmother on linux for about 11 years. I had wine setup for the handful of old games (95 era) she liked, and made sure to update everything once or twice a year. Of course one time I waited too long. Archived her home dir, and installed the latest Ubuntu, restored her home dir, and she was up and running again.

She didn't have to know anything about linux to use it. The same is true for a lot of people. More so in a corporate environment with dedicated staff to handle the harder problems. Hell, most people in offices could get away with a Chromebook and Office 365 today.

Of course, general use laptops and proper linux support are not things that are very common. That part truly sucks. And, yeah, it's not pre-installed for the most part except for some boutique vendors and a couple Dell offerings.


Have had a few looks at System 76 lately. May change out my mid-2014 rmbp next year. Unfortunately it's one of the last systems with NVidia, and the metal 2 support for the 750M doesn't work well at all. I'm also probably going to change my desktop to Linux in a few months. Hackintosh support is all but going away, and although I could change out my GTX 1080 with a next gen Navi for hackintosh, but I just don't want to support the mac platform anymore, and my 1080 has a lot of life left in it.

yeah sounds pretty straightforward /s

Again... with an office environment, with dedicated staff... the USERS don't really need to know all this stuff, just where to click to open their browser, etc.

Not sure that I agree with this. I know plenty of non-technical users who have been perfectly happy with a default Ubuntu (or similar) install.

It only really breaks if you want to customise it (or your hardware is badly supported).

I love Linux Mint and Antergos as much as the next guy but Microsoft built an entire platform/ecosystem around tight integration between a full range of enterprise products. I can't say I blame them, decades of significant effort is required to do that and it's not easy or there would be someone else who has done it. Not only is the incentive not there as you mentioned, but it's definitely not malevolence to avoid trying to support random desktop Linux distros which will likely not cooperate with their integration efforts (and likely take joy in being able to reject or impede MS's efforts), to the degree they can with Windows 10.

They have the right idea today, embrace server-side Linux with .Net Core, and soon, .Net 5. That's what Linux is primarily intended for, it's a server kernel and where the action is in regards to that ecosystem. There's a reason some of the code in X11 hasn't been touched in 20 years.

And missing 99% of the features.

That's not true. If anything, it's closer to having 99% of the features.

Not taking anything away from Satya, but all of the big tech CEOs seem to be able to successfully pivot:

- Netflix - moved from delivering discs to streaming and moved their entire infrastructure to AWS and CDNs

- Amazon - went from just being a first party retailer to being a marketplace, AWS, and Alexa.

- Apple - as of last quarter all five of their major verticals are large enough to be a F200 company by itself.

- Facebook -- Instagram and WhatsApp were acquisitions but it didn't ruin either and they are both larger than they would have been.

- Google -- well still just a one trick pony - search ads (as far as profits) no matter how many things they against a wall.

What? Satya didn't invent .Net. The idea of .Net, like the JRE, was to write once and run everywhere. What's visionary about it?

It's sad how so many articles and comments come off just pure PR now. Not saying your comment is, but I have to wonder how much of the "news", comments and internet content is now just PR.

For a very long time .Net was Windows only. That only changed after Balmer was gone and Satya came in.

Some cross-platform considerations have been built into it from the start, though. And there has been an official open-source implementation on a non-Windows platform. Perhaps more to show that it's possible than as an actual usable artifact, but it was there.

I think describing Mono as Official is a bit of a reach. AFAIK they benefited from the patent promise but that was about it until the acquisition.

If you mean .NET Core as official open source, that's true, but it's a relatively recent thing.

There was Rotor on FreeBSD. Probably more a proof of concept, but it was there.

Mono existed from very early on with .Net and the core was pretty compatible. I think when MS bought Xamarin, it finally got the attention it deserved, and really did go to help .Net Core take form.

Yeah, they have managed to solve the confusion over the various flavors of .NET in the best way possible, it would seem like.

I don't know about that. I thought I kind of understood the mess of the .net framework until now but now I am really lost.

Like asp.net core was meant to be incompatible with .net full framework because of inconsistent featureset, is that going away? For applications, .Net core binaries are different from .net full binaries, they compile to a .dll, not an executable .exe, you have to run them with a command line (and if you choose the option to create an exe it comes with lots of additional binaries that aren't required in full .net framework, plus I understand some additional problems of version compatibility with the installed .net framework). So is .net 5 going to be one or the other? Or is .net 5 just another way of saying that they are discontinuing the full .net framework and that now everything will have to be .net core? But then is a simple full .net framework 4.7.1 .exe run on .net 5?

Like asp.net core was meant to be incompatible with .net full framework because of inconsistent featureset, is that going away?

Just to add to the confusion, you can target an ASP.Net Core Application to run using .Net Framework.

Well I believe you can now, but I thought I saw a recent announcement that said it wouldn't be possible with the next version.

When re-reading the article, I think what they are implying is that they are ceasing support for .net full framework and just renaming .net core ".net". If it is the case it is kind of a big deal, there is ton of .net full code outthere, that no one has any appetite to convert. If it is not the case, are they going to rename .net full to something else?

This article does the opposite of solving any confusion.

[edit] there is a session in a couple of hours at Build, perhaps it will add clarity: https://mybuild.techcommunity.microsoft.com/sessions/77031#t...

They aren’t ceasing support. .Net framework is an integral part of Windows. It’s in maintenance mode. There will never be another major version of .Net framework - just security and maintenance releases.

.Net 5 isn't just a rename of .Net Core. Though for most people I think that understanding would be sufficient and not outright wrong, just incomplete. It is where Core takes over. It's also Mono to target other platforms, in a unified programming API.

Moving projects from .Net Framework to .Net 5 should be as easy or hard as it was to go from Framework to Core. In my case, this isn't a problem for the current project that I'm working on, but thankfully Microsoft will support .Net Framework 4.8 in maintenance mode for a very long time.

I think, for the most part, Mono is being rolled into Core. From what I've seen, it looks like large chunks of Mono were moved, migrated or otherwise refactored into Core anyway. My reading of this is that what is now the Core runtime, will be what is .Net everywhere, and that while not mentioned, Mono as a separate runtime, much like .Net framework will not see new releases in favor of a single .Net 5.

They seem to indicate that both Mono and CoreCLR runtimes will be maintained and available with different focal use cases as part of .NET 5.


They are achieving this by bringing Mono more "in-the-fold", making it interchangeable with CoreCLR, and ensuring CoreFX runs on every runtime.

It seems that are leaning on Mono because of it's AOT abilities, which doesn't say good things about the future for CoreRT.

I like the idea of using Mono though, it's easier to embed in native applications.

I think making Mono and the existing .NET Core runtime 'runtime options' simplifies the confusion a lot. Unifying the standard library was already a good idea, and had been partially done anyway. The existing Mono version of the stdlib was a good effort that historically hasn't stacked up when you try to port stuff (and incrementally had been replaced with chunks of the 'you can look at it i guess and it's sort of like desktop netframework' reference sources).

I'm personally happy to see more of the .NET Core stuff end up in Mono since it usually is battle tested and has better compatibility, and I'm also happy to see more stuff approximating the existing .NET Framework and Mono workflows since .NET Core has historically been unable to do important things that netframework and mono can do.

bias disclosure: I work on Mono

The article mentions that while MonoVM's (LLVM-based) AOT efforts are ahead, CoreRT has outpaced MonoVM in JIT performance, so CoreRT will still be the default in everything but iOS and Blazor which are the only two 100% AOT platforms.

If you aren't doing AOT, why use CoreRT over CoreCLR?

Sorry, I meant CoreCLR there where I wrote CoreRT. Got the acronym confused briefly.

WPF will still be Windows exclusive, though. Like many other things. What they really mean is BCL+Runtime+Compiler, and not .NET (read as: the whole ecosystem).

Which is too bad, because there’s still no easy, drag and drop way to create desktop apps on other platforms that just work.

The drag and drop designer part of VS is not even what I think is cool about WPF. To me it's the architecture and the whole API. It's easy to make clean enterprise size applications with good separation of concerns (I've been a developer in the C#/WPF field for around 5 years). For other platforms - and Windows as well - the closest I know is Qt, including the drag and drop part btw. ;)

> the closest I know is Qt

Which you can use .NET Core with!


This always surprises me whenever I look into cross-platform GUI toolkits. The closest is Qt as you mentioned. What really gets me is GTK's continued popularity on Linux when Qt is so much easier to develop with.

Probably a hold over from Trolltech's original license for Qt. Also, GPL is a non-starter for a LOT of companies.

Probably a side effect from the popularity of Ubuntu which - since they dropped Unity - go still strong with GTK as they use Gnome now out of the box. And Ubuntu is like the de facto standard desktop distribution.

You can run UWP apps on all platforms using the Uno Platform.


How about Lazarus (https://www.lazarus-ide.org/)? Drag and drop to build the GUI, compile natively to Windows, Linux and MacOS.

What about java?

Jokes aside, license issues are the first that come to mind.

What license issues? OpenJDK is 100% free and open, and there are several OpenJDK providers that you can download it from.

Is there a tutorial somewhere out there on how I can build a minimal app that works on all those platforms?

I tried about 5 searches but didn't find anything useful so far.

> how I can build a minimal app that works on all those platforms

That's perfectly normal.

There is no such thing as "Cross Platform .NET"

The C# language and the.NET Framework does indeed run on almost all platforms, but that pretty much ends here in terms of "portability".

Anything beyond that is "platform specific"

For instance, building "desktop" applications is either UWP with advanced styling and reactive data binding but only for Windows or GTK# with Mono which is very limited.

For Mobile either Xamarins.Forms for Android + iOS but it's very limited in terms of features, or it's Xamarin.iOS + Xamarin.Android which require platform specific code for UI / Routing and many others OS specific functions.

For Web , the WASM Binary is something like 5MB+ which makes it not reasonable compared to an app written in Plain JavaScript or TypeScript.

There is still a long way to go for C# to be really "cross platform"

> The C# language and the.NET Framework does indeed run on almost all platforms, but that pretty much ends here in terms of "portability".

IMO, that's not entirely accurate, and does .NET a bit of a dis-service.

.NET Framework isn't cross-platform, and doesn't pretend to be - it's Windows only.

.NET Core is cross-platform, with runtimes for Windows, Linux and MacOS.

Regarding Xamarin, I guess you haven't used it for a while? Until very recently, I had the same opinion, but only because it was years since I had used it - turns out it's rather good now!

Where cross-platform ends is really with desktop GUIs - web apps, web APIs, console apps, backend processing services/daemons etc, all of these work very well across the supported platforms, and the only time you'll likely write platform-specific code is the rare cases when you need to pinvoke into native DLLs.

Aside from the likes of Electron, I'm not sure there really is a good cross-platform solution for desktop GUIs. Microsoft would be hailed as heros if they ever crack that one :)

Java works fine for cross-platform desktop GUIs, as does Qt and a handful of other C++ libraries.

Qt's license is a non-starter for a LOT of commercial entities.

And Java is fine, for varying definitions of "fine". I have yet to see any Java application that looks good, aside from a couple IDEs, and none that look good across platforms.

Usually because the devs didn't bothered to read books like Filthy Rich Clients, or actually spend money having a designer on the team.

> .NET Core is cross-platform, with runtimes for Windows, Linux and MacOS

Microsoft used to follow the eat-your-own-dogfood rule, which would seem to indicate that the development tools should use the same run-time and run on all the targets, but the announcement only mentions linux as a target. As a hobby-only-on-linux-only developer who does not buy or sell any software or related services, I find this announcement a poke in the nose with a clue stick.

xamarin.forms has support for uwp/wpf (windows), linux (GTK#) and mac (https://docs.microsoft.com/de-de/xamarin/xamarin-forms/platf...) it's not highlighted that much and for some stuff you need to create native views. but it works smoothly and you can do a lot of stuff. for some stuff you still need to configure native views, or call into native apis, but still it's pretty nice working and looks better and is faster than most electron stuff.

PluralSight has a .NET course that covers this. Sorry I don't have the link handy it's something about Mac and Linux dev on .NET

Yeah, I'm seriously still dumbfounded by this. I mean, it's such a positive, future-aware decision, it's confounding. Impossible to say how relevant .NET it will be in, say, 4 years time, but development will certainly be much better than today when you have several disparate runtimes to target depending on the platform.

you forgot java. "Java interoperability will be available on all platforms"

I have extensive XP with .NET Core 2 in production on huge services with 1M+ users - we started making some stuff before 1.0 and had it in production after having few sessions with local MS.

WebAPI, APS.NET Core, Pwsh, C# 7... I dont work for MS, but that is some seriously good tech stack. Performance is amazing too. I highly recommend it. Worked in 50+ environments so far but this is top stuff. MS really nailed it this time. No, don't tell me that JAVA is comparable to C# in elegance, that linux dudes had python/ruby/perl/whatever before Powershell etc.

The only problem we had so far was with the Oracle db drivers which were non existent until several months back, but that is on Oracle... which sux more and more each day - commercializing java for example will just give a boost to .NET now, a lot of it - who at Oracle made up such decision escapes me, but maybe he works for MS.

Do you run .Net Core on Windows or Linux?

I have a project in the early design phase that I was thinking of going with .Net Core on Linux. I've thought about going with Java, but with all the recent Java licensing changes don't think I want to go that route anymore.

I currently run on Windows servers, some of which are Core. Tried nano but its terrible as there is no package manager and no support for msi files. If you install anything in docker it takes GB's so we used VM's for bakcend/frontend running Windows Server 2016 behind IIS/kestrel/nginx and every other supporting tech on Linux (not core). One of the reasons to use Windows was Sql Server but mostly PowerShell which we do all automation in. Backend service is used to register invoices for entire country and it has 1M+ users, we have 60-100 logins per minute and 500+ concurent actions. Backend is served by single server (!) and never gets more then 10% CPU load and 20% memory with that load. I am amazed honestly. Zero dev fucktitude (once we ditched Angular, but that is another story). Almost zero downtime (30-50s to build and deploy with db migrations).

Now, we use Linux alpine docker containers, use postgre instead Sql Server and pwsh with Invoke-Build to run CI/CD stuff. Sworm for orchestrations and compose for local. Have 2 incoming country-level services this year for production. Currently on dev/stage it works really fast but load is trivial.

We did a lot of performance test on Windows and achieved 1.5-2K req/s with hello world and our setup on IIS/kestrel. Did no test for linux variant so far.

> I've thought about going with Java,

Java compared to latest C# is like ... Clojure to VBA. No brainner really, plus Oracle (sure, there are alternatives).

Also, entire Java enterprise stack is overengineered beyond repair. I need 77 classes for basic stuff. Take .NET core you wont regret it.

I assume your docker taking GBs above is for Windows Containers? Also, most of that overhead is first use, updates and parallel similar containers are much smaller. Also, as you mention, alpine containers are what I'd consider "just enough" when wanting to diagnose an app in a container.

I've found that .Net Core on Linux and in Windows are close enough that scaling should be the bigger concern. Unless you're tethered to windows, the broader tooling is much more mature with Linux containers/pods.

.Net has some caveats with GC: Server GC preallocates heap per CPU core so if you have 8+ server it could be a waste of RAM if app uses less than 1GiB. We are tinkering with microservices on .Net Core 2 in k8s and came up with using WS mode with clearing unused allocated memory on health check calls which is dirty but working trick.

On the Java side though there is a hack in JRE which checks if JVM runs inside a Docker container in order to not get out of memory limit by cgroup.

I believe the are changes coming in .NET Core 3.0 to fix the OOTB server-GC situation.

Of course for now you always have the option of enabling desktop GC instead

> Worked in 50+ environments so far but this is top stuff.

With so much experience you must know how this sounds to someone not in the .net space.

You and your company are clearly well versed in .net and it's worked out for you -- take a person and a company equally experienced in Java and they'd achieve similar results (I have, companies I've worked at have). The systems you're describing are not extraordinarily large scale systems. You've failed to outline the gains here vs. another tech stack.

Fascinating! By chance, do you have any write ups on your stack elsewhere?

Not yet (blog is planned, but you know... time), but I have bunch of presentations on it (basically DevOps on Windows on premise) that I consult to companies on request, with one of those services as a real life example (I prefer diving into real working stuff over hello worlds).

For example, this is the one about Chocolatey that I gave at Microsoft event few years back (other are similar, but all on Serbian ATM since I mostly do consulting locally and involve everything from Gitlab over InfluxDb over PowerShell to obscure languages such as Autohotkey):


Thankfully there's Google Translate. That's a great start, thanks!

A lot of FUD is being spread about Java's licensing. OpenJDK is 100% open source and has a permissive license. And there are several providers for it.

That being said, both .NET and the JVM are great platforms. You'll have to evaluate both platforms and see which one benefits your project more.

I run .Net Core on Linux -- sort of. It's mostly Linux based AWS Lambda. I haven't had any compatibility issues.

Today there is an Oracle driver for .NET Core, BUT this fucking driver doesn't support async/await calls!!! To archive the max performance .NET Core has to offer, you do have to use async/await all the way from the coming request to the database calls. With Oracle databases, it is not possible yet.

I am very pleased with the direction Microsoft has been moving the last few years. Every release of .Net has incrementally made our lives easier.

We are already on top of .Net Standard/Core 2.0 and are building successfully against 3.0 prerelease targets without modification. I would anticipate the move from Core 3.0 to .NET 5.0 would be trivial for us, and as long as self-contained deployments are still around in 2020 our build & publish pipeline won't know the difference (aside from msbuild & SDK updates on Jenkins).

Exciting times ahead.

So, does this also replace/update the .NET Framework that is bundled with Windows 10, meaning that you can release a .NET EXE and ask people to use the latest version of the .NET like you can release a .JAR and you can ask people to have the latest version of Java, or you have to bundle the entire runtime (be it via a fat compiled AOT or regular bundling) with your application?

I ask because one of the positive things about .NET Framework 4 is that i can create a tiny .EXE and give it away and expect that people will have the runtime to run it since it is already part of Windows.

From the 3.0-preview5 announcement:

>You can now publish a single-file executable with `dotnet publish`. This form of single EXE is effectively a self-extracting executable. It contains all dependencies, including native dependencies, as resources. At startup, it copies all dependencies to a temp directory, and loads them for there. It only needs to unpack dependencies once. After that, startup is fast, without any penalty.


This is for .NET Core 3, not for .NET 5. While .NET 5 might provide the same tool, it doesn't answer if it will also provide a .NET Framework 4-like functionality where the .EXE relies on a runtime already installed on the user's system and if that framework will be something the developer will need to provide and/or be part of Windows 10 like .NET Framework 4.

And .Net 5 will be the release after .Net Core 3, so I assume they won't go ahead and remove the feature for it.

Sorry, i edited my message above after you replied it to add a bit of more detail what i mean.

Ah, got it. You want to be able to ship something that relies on an existing installed runtime and don't want to bundle the runtime with your executable.

Me too. Requiring to run all executable with a command line is a major inconvenience. And by choosing ".dll" as an extension it is not even possible to assign the extension to dotnet as a default application like you could with a jar file. And if you want self-executing binaries you not only have the version problem you mention, but you also have to bundle all sort of assemblies. And there doesn't seem to be anything like ILMerge for .net core assemblies to merge them into a single file.

What you are looking for is called a "framework-dependent executable" (exe file with no framework) rather than a "self-contained deployment" (exe wrapper for dll file with framework included) or a "framework-dependent deployment" (dll file with no framework)

On the Github repo is a roadmap for such a single file app.[1]

[1] https://github.com/dotnet/coreclr/issues/20287#issuecomment-...

This is already supported https://docs.microsoft.com/en-us/dotnet/core/deploying/#fram...

> Starting with .NET Core 2.2, you can deploy your app as an FDE, along with any required third-party dependencies. Your app will use the version of .NET Core that's installed on the target system.

> Your app can be run by calling the published executable without invoking the dotnet utility directly.

It's almost certain they'll offer the ability to publish a self-contained binary or split from dependencies since that's a feature of .Net Core 3 today. The Mono-based projects may not, but I'd expect them to someday replace what Mono targets with .Net Core. That's just a ways out and otherwise inconsequential to the end-user using the .Net 5 API.

As others have noted, the same tool is used for both kinds of deployments (based on whether the --self-contained option is specified)

This is already possible.

That's right, that is a framework-dependend deployment as opposed to a self-contained deployment.

There is even a chary picking type of deployment (do not use entire framework).

Hehe it’s cherrypicked. Or cherry picking!

> The term is based on the perceived process of harvesting fruit, such as cherries. The picker would be expected to only select the ripest and healthiest fruits. An observer who only sees the selected fruit may thus wrongly conclude that most, or even all, of the tree's fruit is in a likewise good condition. This can also give a false impression of the quality of the fruit (since it is only a sample and is not a representative sample).

Source Wikipedia.

I don’t get it. How can one executable even know how to bootstrap itself enough to know how to run a self extracting archive across Windows,MacOS,Linux?

I understand how MS did it in the past with DOS/Windows and how Apple has done it between the 68K/PPC/Intel transitions.

The current version of `dotnet publish` allows you to specify a runtime identifier. It then proceeds to produce an executable for that runtime.

I understand that. But you still have to tell it which runtime to use even though you can build a Windows standalone distribution on Linux and vice versa.

They seem to implying that you can create one executable that you can distribute and it will be able to extract the needed parts on any supported platform.

That's not exactly what they're saying. In the quote above, they are talking about framework independence, not platform independence. The wrapper executables are still platform specific, but framework independent. However the actual .NET modules in the package are platform independent, but framework specific. They can be executed without the wrapper executable by installing the correct framework yourself.


And as much as people complain about Microsoft's messaging with respect to .Net, there isn't really a simple way to explain any of this -- even to people who are deep into the .Net ecosystem. I feel their pain.'

You will have the option to do either. Require a runtime be provided by the system or package one together with your application.

Yes but will this 'required runtime provided by the system' be part of Windows like it is with .NET Framework 4 (that is also updated automatically via Windows updates) or something that the user will have to go out of their way to install like Java?

In many cases, this is the crucial difference between deciding to bundle the runtime yourself or not.

This is already supported in dotnet core 2.2 so I would assume it will continue to be supported. https://docs.microsoft.com/en-us/dotnet/core/deploying/#fram...

> Starting with .NET Core 2.2, you can deploy your app as an FDE, along with any required third-party dependencies. Your app will use the version of .NET Core that's installed on the target system.

> Your app can be run by calling the published executable without invoking the dotnet utility directly.

Well, even at present there's no guarantee the end user has the version of .net framework and libraries you need. You might need 4.8.x stuff and they only have 4.7.x. Maybe they're on win8 and not 10, or they're behind on updates, etc.

Typically the solution for this is to either sense what's installed (and use an installer) or just ship it and let the error messages help them figure out what to do.

You can't even guarantee the user has a computer. But it's a very bad idea to throw error messages at the user mid-install, and it hurts to bundle an entire framework installer inside yours. If you can target 4.7 and know it will exist on computers with windows 10, that's much better.

Any word on F#? Last I checked there wasn't any REPL still and type providers weren't working.

The F# repl (FSI as fsharp interactive) works in .net core 3.0 preview already, you can do `dotnet fsi` to run it

Type providers works in general, but depends if the type provider library was updated to use latest type provider sdk. Also generative type provider may not works, erasing works

Just adding to Enrico's post here, Type Providers have been fully supported since .NET Core 2.1; some libraries just may not be updated yet.

`dotnet fsi` is planned to be fully released later this year with the .NET Core 3.0 release.

Enrico answered to question w.r.t where F# is now, but F# is going to also be a big part of .NET 5. The only reason it's not mentioned in the post is that we haven't firmly decided on if the F# release that corresponds with .NET 5 will version in lockstep like C# is planned to do.

Don't forget to remind the runtime team that AOT support should also include F#.

Type providers have been working on .NET Core for 18 months or so...

FWIW I was working with F# SQLProvider recently and despite some teething issues, managed to get things working fine.

I was really excited to see this; finally a consolidated .NET. Then I read this...

Taken together, the .NET Core and Mono runtimes have a lot of similarities (they are both .NET runtimes after all) but also valuable unique capabilities. It makes sense to make it possible to pick the runtime experience you want. We’re in the process of making CoreCLR and Mono drop-in replacements for one another. We will make it as simple as a build switch to choose between the different runtime options.

Mono is a large part of mobile and Unity for gaming. It's not going to disappear anytime soon and they can't go back to it being completely separate. This is the best compromise to keep the runtimes the same but share as much as possible between them.

"Java interoperability will be available on all platforms."

Where can I find more details on this?

There are not really any yet. We intend to take the Java interop that Mono already supports, improve it as needed, and make it available to other scenarios beyond just Android. If there are certain things you would like to see, I'd love to know.

I'll read up on how Mono handles it. I've never done too much .NET and I'm a recovering JVM dev, I was just asking out of curiosity since that is a pretty thorny feature to tackle. I can think of a number of dangers/shortcomings with any approach I can think of.

I would like to know more too. Not being able to call java libraries is one of the biggest problems with .NET. There are a ton of java libraries that don’t have good .NET equivalents.

If only they could just add a very easy way to invoke functions (at least those with simple interfaces, i.e. taking just simple value types as inputs and returning a simple value type) from other languages (incl. Java and Python) this would already be a huge value boost even if performance would be not perfect.

Well, if you can get a C-compatible pointer to those functions you're already ready to go, and the inverse is true if those languages can consume C-compatible function pointers.

So from python you could probably flex to use ctypes, and from java, JNI. Naturally this is a bit awkward but I expect the mono binding tools would help smooth it over for Java (I have no idea about Python there.)

I know it's possible this way but I've mentioned "very easy" intentionally. I'd manage with what we have if I really needed it but if it was easier it could attract much more people who generally are scared away by words like JNI and C-compatible pointers.

If I were developing a program language and sought to attract more people I would consider seamless invocation of code written in other languages a strategic height.

This line also caught my attention. Really keen on finding out more!

Does this spell the end of .NET Standard?

And does this explain why they don't seem to care about making .NET Standard versions at all logical to developers (e.g. making a major breaking change, not supporting .NET Framework, to .NET Standard in a minor version)?

Edit: And before someone says ".NET Framework is choosing not to support .NET Standard, you shouldn't version based off implementations but off changes in the API": That only works if you have many implementations, .NET Standard has 3 major implementations! Losing 33% is pretty significant :)

We haven't made a decision on .NET Standard yet, in terms of what its role will be going forward. Major point is that its forward-looking role will be significantly diminished with this plan.

You guys should seriously consider the mental load all of this rebranding is having on your community. You have too many brands, too many names, and too many seemingly overlapping ideas.

I want to see .Net Standard die, not because of the technological merits of it or problems, but because you guys have created such a confusing mess and .Net Standard is perhaps one of the worst examples.

.Net Standard seemingly exists to consolidate compatibility between Core/Framework/whatever, but with you consolidating them under the "Framework" branding anyway there's no reason it should exist except to confuse further.

Either something is or isn't .Net 5 compatible. The end.

>Either something is or isn't .Net 5 compatible. The end.

You're in luck because that's the way it is. The .Net Standard is on the list of being .Net 5 compatible, because it's intended for shared libraries.

I want libraries written for .Net Framework, Core and .Net 5 to be cross-compatible. Targeting the .Net Standard is the only way to do that. That's easily worth putting others, who aren't even using it, through mental turmoil.

It won't be going away because the .Net Standard is an absolute must-have for the health of the ecosystem, and the most important underpinning to the entire Framework->Core->.Net 5 effort. As the grandparent comment said, it won't be as important going forward (.Net 5, 6, 7 etc) but won't be going away until the .Net Framework does. It's likely the .Net Standard will outlive you.

This was the entire reason I stopped being a .NET developer. Made the jump to Ruby a year ago.

Because handling gems compatibility issues and monkey patching is so much better experience.

I totally agree on this. My head hurts each time I try to understand what is going on.

With respect, if you don't understand why .Net Standard exists, you've really no business wanting it to die.

For now, it's a vital bridge between .Net Framework and .Net Core. It's something I make use of regularly.

The post you replied to said exactly why it exists and explained why it no longer needs to exist after this (.Net 5) change. Even Microsoft's own graphic on the linked page makes .Net Standard's irrelevance obvious.

The graphic in the link is merely truncated from the rest of the .Net ecosystem. It's not redundant as it might appear in the image, libraries targeting the .Net Standard will run on Framework/Core/.Net 5+.

So it is joining PCL.

I think you are confusing the .NET Standard (ie. the standard to base implementations of .NET on) with .NET Framework which is going away.

My understanding is that .NET Standard was needed to provide an API for the various different implementations to support. This was normally draw in images like this:


The updated image is this:


Which seems to have removed the implementations (mono/.NET Framework) and implies .NET 5 will be targeted by all platforms directly?

So what is .NET Standard needed for anymore, platforms now target .NET 5 versions instead of .NET Standard versions right?

People will continue to support both framework and core for decades, so library authors that want to support e.g both framework and Core will need to ship libraries targeting .Net standard just like they do today. The question is perhaps whether there will be a new Standard (5 would be a good choice of number) indicating the support needed for .Net 5. Unless there is a competing implementation perhaps there is no need

I mean, .netstandard 2.1 won't be supported by .net framework sooo, yeah, they just pretty much obsoleted .net standard.

(I don't know the answer to this question) wouldn't that just mean that .netframework's last supported version of netstandard is 2, and then you have a netstandard 5 that's supported by .NET 5? I don't feel like that's especially confusing.

actually if you need to support core and .net 4 you probably need to target .net standard 1.6-2 anyway, i hope at least .net 5/6 will support that.

.Net Framework isn’t going away. They said in another post it will be supported as long as Windows is supported but it will only be getting “highly compatible” maintenance updates.

Guidelines | FAQ | Support | API | Security | Lists | Bookmarklet | Legal | Apply to YC | Contact