Breaking change: .NET 9 is Y2038 compatible (Arm32 glibc); .NET 8 is not #9285
Replies: 3 comments 14 replies
-
Would it be possible to force .NET9 work on previous versions of the OS using an environment variable? |
Beta Was this translation helpful? Give feedback.
-
I am not sure the problems are necessarily straightforward to detect, that's my only point. |
Beta Was this translation helpful? Give feedback.
-
There is a discussion about delaying this plan by one release. Today, the If we go forward with this plan, the same will not be true for the If we push this plan one release further, then
In short, we have to sacrifice compatibility for Debian or Ubuntu for Arm32 for .NET 9 due to this breaking change. Given the way our tags are setup, we think it is more important to preserve compatibility with Debian for .NET 9 and to align timing with Debian. Either way, .NET 9 is the release in question. This won't be fixed for .NET 8 and it will definitely be fixed by .NET 10. Do folks think this is a better plan? |
Beta Was this translation helpful? Give feedback.
-
We are making a major change to our Linux Arm32 support that affects all .NET versions.
From Ubuntu 24.04 release notes:
That sounds great. We are changing the way we build .NET 9 for Arm32 to absorb this breaking change.
This change doesn't affect our Arm32 musl build (for Alpine). The change to support Y2038 for musl was made with .NET 6.
.NET 8 will remain Y2038 incompatible on Linux Arm32 and .NET 9 will only support recent distro versions (for Arm32). .NET users will need to carefully select the .NET version they use in their Arm32 deployments.
An implication of this approach is that we will not publish .NET container images for Ubuntu 24.04 for the Arm32 architecture.
Note: Exact version information is described in the Linux compatibility section of Supported OS Policy documents, for each .NET version.
This problem does not affect Arm64 or x64. .NET 8 and NET 9 are supported on the same Debian and Ubuntu versions for those architectures.
Y2038 incompatible .NET builds running on a Y2038 compatible Arm32 distro may see the following error.
It is possible that there are other error conditions.
Work will be tracked at: dotnet/runtime#101944
Details
We discovered that .NET 8 is not compatible with Arm32 on Ubuntu 24.04 as part of producing new
noble
container images. In particular, we see a break in OpenSSL API calls (used forHttpClient
and HTTPS).As suggested, there is a solution to this problem, however, it requires that our build targets a glibc version 2.34 that was first made available in Ubuntu 22.04 (in terms of Ubuntu versions). But because we build on a long stable Linux distro to ensure maximum compatibility, using a new version of glibc to leverage the special compiler flags to enable Y2038 time would unfortunately mean that we'd limit the number of systems where .NET 8 could run, and ultimately we decided this was not in the best interest of .NET users.
Y2038 support -- in general -- is a breaking change. As suggested, there is a mitigation for it. Software that targets old glibc versions may be broken. Software that targets new glibc versions and uses the correct compiler flags will work correctly.
We have two choices for .NET Arm32 support:
If we could go back in time, we might make this change with .NET 8. However, since Raspberry Pi OS trails Debian releases and Debian is yet to make this change, the .NET 9/10 pair is probably the optimal timeframe.
We've decided to make .NET 9 (and future releases) Y2038 compatible on Arm32 as the best overall solution.
Beta Was this translation helpful? Give feedback.
All reactions