Skip to content

[Breaking change]: Minimum hardware requirements updated #48045

@tannergooding

Description

@tannergooding

Description

The minimum hardware requirements are updated as follows:

Arm64

Operating System Previous JIT/AOT Minimum New JIT/AOT Minimum Previous R2R Target New R2R Target
Apple Apple M1 (No Change) Apple M1 (No Change)
Linux armv8.0-a (No Change) armv8.0-a armv8.0a + LSE
Windows armv8.0-a armv8.0-a + LSE armv8.0-a armv8.2-a + RCPC

x86/x64

Operating System Previous JIT/AOT Minimum New JIT/AOT Minimum Previous R2R Target New R2R Target
Apple x86-64-v1 x86-64-v2 x86-64-v2 (No Change)
Linux x86-64-v1 x86-64-v2 x86-64-v2 x86-64-v3
Windows x86-64-v1 x86-64-v2 x86-64-v2 x86-64-v3

Version

.NET 11 Preview 1

Previous behavior

By default .NET would successfully launch and run on older hardware. Individual applications may have opted-in to higher baselines or explicitly used hardware intrinsics that raised the baseline for their scenario.

New behavior

.NET will fail to run on older hardware and may print a message similar to the following. A more descriptive message may be provided in some scenarios that lists the concrete hardware requirements for a given Operating System and architecture.

The current CPU is missing one or more of the baseline instruction sets.

For ReadyToRun (https://learn.microsoft.com/en-us/dotnet/core/deploying/ready-to-run) capable assemblies, there may be additional startup overhead on some hardware which is supported but which doesn't meet the expected support for a typical device.

Type of breaking change

  • Binary incompatible: Existing binaries might encounter a breaking change in behavior, such as failure to load or execute, and if so, require recompilation.
  • Source incompatible: When recompiled using the new SDK or component or to target the new runtime, existing source code might require source changes to compile successfully.
  • Behavioral change: Existing binaries might behave differently at run time.

Reason for change

.NET supports a broad range of hardware, often above and beyond the minimum hardware requirements put in place by the underlying Operating System, and has built-in support for taking advantage of the hardware it is actively running on for JIT scenarios. However, this support adds significant complexity to the codebase, particularly for much older hardware that is unlikely to still be in use. Additionally, it defines a "lowest common denominator" that AOT targets must default to which can, in some domain specific scenarios, lead to reduced performance for applications.

The update to the minimum baseline was made to reduce the maintenance complexity of the codebase and to better align with the documented (and often enforced) hardware requirements of the underlying Operating System.

Arm64

For Apple, there is no change to the minimum hardware or the ReadyToRun target. The Apple M1 chips are approximately equivalent to armv8.5-a and so provide support for at least the AdvSimd (NEON), CRC, DOTPROD, LSE, RCPC, RCPC2, and RDMA instruction sets.

For Linux, there is no change to the minimum hardware. We continue to support devices such as Raspberry PI which may only provide support for the AdvSimd instruction set. The ReadyToRun target has been updated to include the LSE instruction set which may result in additional jitting overhead if you launch an application

For Windows the baseline is updated to require the LSE instruction set. This is required by Windows 11 (https://learn.microsoft.com/en-us/windows-hardware/design/minimum/minimum-hardware-requirements-overview) and by all Arm64 CPUs officially supported by Windows 10 (https://learn.microsoft.com/en-us/windows-hardware/design/minimum/windows-processor-requirements). It is additionally inline with the Arm SBSA (Server Base System Architecture) requirements. The ReadyToRun target has been updated to be armv8.2-a + RCPC (this provides support for at least AdvSimd, CRC, LSE, RCPC, and RDMA) which covers the majority of hardware officially supported.

x86/x64

For all three operating systems, the baseline is updated from x86-64-v1 to x86-64-v2. This changes the hardware from only guaranteeing CMOV, CX8, SSE, and SSE2 to also guaranteeing CX16, POPCNT, SSE3, SSSE3, SSE4.1, and SSE4.2. This is required by Windows 11 and by all x86/x64 CPUs officially supported on Windows 10. It includes all chips still officially supported by Intel/AMD, with the last older chips having gone out of support around 2013.

The ReadyToRun target has been updated to x86-64-v3 for Windows and Linux, while it remains unchanged for Apple, which additionally includes the AVX, AVX2, BMI1, BMI2, F16C, FMA, LZCNT, and MOVBE instruction sets.

Recommended action

Developers on no longer supported hardware should consider updating. Such hardware is officially out of support and may not boot on Operating System versions that are supported by .NET.

Feature area

Other (please put exact area in description textbox), JIT

Affected APIs

This affects all of .NET

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

Status

🔖 Ready

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions