-
Notifications
You must be signed in to change notification settings - Fork 6k
Description
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
Projects
Status