HNHacker News
TopNewBestAskShowJobs

terrajobst

99 karma · joined December 5, 2014

I'm a program manager on the .NET team at Microsoft.
submissionscomments
terrajobst··on .NET Standard 2.1
Totally fair. The original name was ".NET Standard Library" but we were too lazy so we shortened it to just ".NET Standard", which then ended up becoming the product name.
terrajobst··on Announcing .NET Core 2.0
It doesn't break sem ver. Sem ver doesn't disallow revving the major number without making a breaking change. It only says if you do a breaking change, you need to rev the major number.
terrajobst··on Announcing .NET Core 2.0
All within hours. Basically, they all shipped at the same time. Blog posts were manually published. There is no order implied.
terrajobst··on .NET Standard 2.0 is final
APIs are a long standing name for the set of all .NET constructs (classes, structs, delegates, interfaces, methods, properties, events, fields).

In total, the .NET Framework has about 15k types.

terrajobst··on .NET Standard 2.0 is final
In a sense, that's what we have been doing. But the challenge is that .NET Core is an actual implementation and the other .NET stacks have their own (i.e. the code base isn't shared, Mono/Xamarin/Unity are on a different train than .NET Framework/.NET Core).

For newer .NET implementations we push folks to start with .NET Core and adding their specific technologies on top. That is, for instance, what Samsung has been doing with Tizen. So if the open source community innovates in .NET Core, Samsung can just move to a later build of .NET Core in order to benefit from it. They are a pure superset of .NET Core, by construction. However, for all other cases someone needs to port the changes from .NET Core to Mono which makes it consumable by Xamarin and Unity. .NET Framework is in a similar boat, although porting is somewhat easier as the .NET Core code base originated from .NET Framework.

Since we can't (easily) move Mono/Xamarin/Unity/.NET Framework on top of .NET Core, we need a way to standardize the API set so that it's not all chaos. And that's where .NET Standard comes in.

terrajobst··on .NET Standard 2.0 is final
It came up before, but changing the brand from .NET would have been much more confusing (and expensive, as building up a brand requires a ton of work).
terrajobst··on .NET Standard 2.0 is final
Still, .NET Framework isn't the superset of everything. As I said, I find your description not useful because it simply doesn't capture how the .NET stacks are designed.
terrajobst··on .NET Standard 2.0 is final
I can totally share the sentiment around complexity. We're working hard towards reducing it though and .NET Standard is one piece of the puzzle. Let me try to explain:

If you're a typical .NET customer, then you're used to the .NET Framework, which also means you're probably only used to doing development on Windows. That was no longer a viable strategy for .NET, so we're now pursing a cross-platform strategy. A good chunk of the complexity you see today is a result of the changed dynamics of software engineering: the PC is no longer the only relevant form factor, server applications have to be rethought as scalable cloud services, and the UI paradigm is no longer a sequence of dialogs but has to be tailored to multiple clients, and on top of that you now also have to deal with multiple different operating systems.

.NET has a long standing history of embracing the underlying platform (hello COM, hello P/Invokes) while also providing a ton of conveniences on top that make it approachable (hello WinForms). We can't really shield you from all the complexities that result from the changed dynamics. But what we can do is making it more consistent and productive.

Over the last years, various different .NET stacks were created, several of them outside of the Microsoft bubble (Mono, Xamarin, Unity). So in order to build modern experiences, you often have to use various different stacks to get the job done. We understand that this isn't free of challenges, which is why we try very hard to reconcile the differences. For instance, we acquired Xamarin to fully embrace the mobile support they offer and make it a fully integrated part of the .NET development platform. We changed the license on Mono to enable Unity to use the latest version and pick up innovation instantaneously. And we've created the

.NET Standard is a way to achieve API consistency between different .NET stacks. This makes it much easier for application and library authors to share code between different .NET implementations.

Our goal is to empower .NET developers to build any kind of app, for any kind of operating system. That's the world we live in now and we're fully committed to make this experience as productive as possible.

terrajobst··on .NET Standard 2.0 is final
The .NET Framework has approximately 250k APIs. The majority are from the application models stacks (WinForms, WPF, and ASP.NET).

.NET Standard has about 32k APIs that set is pretty close to all the APIs that are part of .NET Framework that aren't specific to any application models. However, we still have a few things we need to bring to .NET Standard.

terrajobst··on .NET Standard 2.0 is final
Not quite. See this comment for the relationships of the specs: https://news.ycombinator.com/item?id=14971769

.NET Framework, .NET Core, Mono, Xamarin, and Unity are all implementing all the .NET specs. They are share many aspects, but each also bring specific capabilities that the others don't have, so its not very useful to think of these having a superset/subset relationship.

terrajobst··on .NET Standard 2.0 is final
Indeed :-)

Here is how to think about this:

* .NET Standard is a specification of APIs.

* ECMA 335 is the specification of the .NET runtime aspects (i.e. what the metadata format is, what the semantics are of the intermediate language and so on).

* ECMA 334 is the C# language specification.

So there are really multiple specs that would make up a ".NET spec". We simply settled on .NET Standard because it's shorter than .NET Standard Library and the word standard conveys the spec aspect around it. We could have called it .NET Standard API Set but hey, it's supposed to be a product name, not a multi-word description :-)

Does this help?

terrajobst··on Introducing .NET Standard
That's actually a fair point. I probably should have used a different wording.
terrajobst··on Introducing .NET Standard
That's exactly what happened, yes.
terrajobst··on Introducing .NET Standard
While we haven't open sourced WinForms, there is a Mono version of Windows Forms. We've talked with the Mono guys about it and the general consensus was that the WinForms API shape doesn't make it very easy for cross-platform.
terrajobst··on Introducing .NET Standard
No. Think of UWP as WinRT + .NET Core. While .NET Core is available for Linux, WinRT isn't. Within UWP the UI stack is provided by the WinRT side.

Xamarin has an abstraction layer for UI called Xamarin Forms. This will allow you share UI code across .NET Framework, UWP, iOS, and Android.

terrajobst··on Introducing .NET Standard
> Small correction: .NET Core _will_ implement it. It has to grow quite a bit to get there.

.NET Core _already_ implements .NET Standard 1.x. It _will_ implement .NET Standard 2.0.

terrajobst··on Introducing .NET Standard
We probably should have mentioned Linux explicitly but it's part of the very first diagram: .NET Core runs on many Linuxes, Xamarin runs on Android's version of Linux.

We highly care about making it easy to write code that works cross-plaform, especially on Linux. That's why we created .NET Standard!

terrajobst··on Introducing .NET Standard
Thanks, replaced with the link to my post. I'm clearly not a web guy ;-)
terrajobst··on Introducing .NET Standard
I can see that being a problem. Let me try to explain:

* We've concrete .NET platforms, such as .NET Framework, .NET Core, and Xamarin. They are the moral equivalent of Linux distributions. * With .NET Standard we now have shared specification that dictates which APIs all these platforms have to implement. That's the moral equivalent of POSIX.

terrajobst··on Introducing .NET Standard
> What I want to know is, will the sync (not async/await) methods be available on Linux on .NET Core?

Yes.

> In an ideal world the old sync APIs would just work and we'd be able to move forward with .NET Core as it stabilizes and get off Mono without a major rewrite.

Yes, being able to move forward with existing code is the primary reason they were added to .NET Standard.

terrajobst··on Introducing .NET Standard
It means that .NET Framework 4.6.1 and all later versions will support .NET Standard 2.0. However, .NET Standard 1.5 & 1.6 will not work on .NET Framework 4.6.1. In other words, we removed the APIs from .NET Standard 2.0 that weren't implemented by .NET Framework 4.6.1.
terrajobst··on Introducing .NET Standard
.NET Core is a specific .NET platform while .NET Standard is a specification that many .NET platforms, including .NET Core, implement.

In other words, .NET Standard is POSIX for .NET.

terrajobst··on Introducing .NET Standard
I fully share your concerns. I've expressed this problem with a homage to XKCD:

https://blogs.msdn.microsoft.com/dotnet/2014/12/04/introduci...

Don't think of .NET Standard as another .NET platform. Think of it as the standard that ties them all together. It's similar in spirit to POSIX. It's not another Unix, it's a way to write code that works on multiple Unixes.

terrajobst··on We are moving the Roslyn code to GitHub
Not sure I understand? I would say that GitHub is quite social. It's pretty much the Facebook of code hosting.
terrajobst··on We are moving the Roslyn code to GitHub
The teams that still use centralized version control, such as Windows and Office, are either using Team Foundation Version Control (TFVC) or Source Depot (an internal tool that was built using a source code license of Perforce).

The developer division (DevDiv) currently mostly uses TFVC. For the open source projects this doesn't make a lot of sense though, which is why most these are moving to git.

Of course, we're a big company so you'll also find Mercurial and SVN, especially in MSR. I really hope that you don't find SourceSafe anymore though :-)

terrajobst··on Introducing .NET Core
Not linking the original location is a fair point and I've fixed that. --Immo