Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update x64 emulation plan #249

Merged
merged 4 commits into from
Oct 14, 2021
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 38 additions & 1 deletion accepted/2021/x64-emulation-on-arm64/x64-emulation.md
Original file line number Diff line number Diff line change
Expand Up @@ -218,7 +218,7 @@ This option is intended as the most user friendly option. It's the best experien
- x64 .NET 6 runtimes
- x64 .NET 5 runtimes
- x64 .NET Core 3.1 runtimes
- [New] x64 .NET 3.1+ ASP.NET Core runtimes for macOS
- x64 .NET 3.1+ ASP.NET Core runtimes for macOS
- **Unsupported x64 installers (for coexistence)**
- x64 .NET SDKs

Expand All @@ -245,3 +245,40 @@ Actual Plan:
We decided that option 3 will result in CLI breaking changes. While option 2 could theoretically be delivered between .NET 6 and .NET 7 with a .NET SDK update (like `6.0.200`), option 3 can only be delivered with a major release. It is also fair to note that the breaking changes associated with option 3 are not dependent on option 2. We could in theory make the breaking changes for option 3 now, enabling the remaining work to be done either before .NET 6 or in a .NET SDK update.

Note: These plans assume that Visual Studio (Dev17) will not be supported on Windows Arm64 (with x64 emulation) before .NET 7. They also assume that Visual Studio for Mac will adapt to this plan, aligned with .NET 6. If those are not true, then we need to re-assess this plan.

## Update

Update: September 23, 2021

The following is what we've decided to support, in terms of x64 emulation and native Arm64 architecture builds and their necessary co-existence.

Supported products for installation on ARM64 Windows and macOS:

- .NET Core 3.1 x64 runtimes
- .NET 5 x64 runtimes
- .NET 5 Arm64 runtimes (Windows only)
- .NET 6+ x64 and Arm64 runtimes
- .NET 6+ x64 and Arm64 SDKs

ericstj marked this conversation as resolved.
Show resolved Hide resolved
Note: Pre-.NET 6 x64 SDKS will be installable on macOS and Windows x64 but are not supported. They have not been updated in terms of this plan and will break Arm64 installs. If they are installed on a machine, all .NET versions will need to be uninstalled/removed and you'll need to start again with installing supported .NET SDK versions.
Copy link
Member

@ericstj ericstj Sep 27, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You mentioned x64 SDKs. What about the .NET 5.0 ARM64 SDK? Is that OK for folks to use? Sorry to nit-pick here, but it makes a real difference in what work we do in servicing. Also if we do decide not to support .NET 5 ARM64 SDK at all we should probably stop publishing it since it won't be supported anywhere.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not a nit-pick. You are right.

Let's cut this one in the middle, for .NET 5. Proposal:

  • Support .NET 5 x64 runtimes.
  • Do not support .NET 5 SDKs (either x64 or Arm64).

That enables all scenarios and limits our cost. Good?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think it makes sense to not support 5.0 ARM64 SDK Side-by-Side with 6.0 ARM64 SDK. But I think we should still publish at least the archive version (zip), so that it can be installed via dotnet-install.ps1 or similar.


Note: The same model is true with .NET Core 3.1 and .NET 5 x64 runtime updates before a certain TBD release. We haven't updated these runtime versions yet to work correctly. We will announce which releases (and going forward) are supported. We hope it is the servicing release that goes out at the same time as .NET 6 RTM, but that is still to be determined.

Note: The same model is true .NET Core 3.0 and earlier versions.

In terms of CLI targeting, we will deliver the following experience.

macOS:

- .NET Core 3.1 will default to x64
- .NET 5 will default to x64
- .NET 6+ will default Arm64

Windows:

- .NET Core 3.1 will default to x64
- .NET 5+ will default to Arm64

What is meant by "default to x64?"

Assume a project that targets `netcoreapp3.1`. `dotnet run` should generate an x64 apphost that attempts to discover a compatible runtime (like .NET Core 3.1) in the x64 installation location. This same model applies to other commands like `dotnet test` and `dotnet tool install`.