-
Notifications
You must be signed in to change notification settings - Fork 6.1k
Add Y2038 related breaking change notices #40669
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
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,50 @@ | ||
| --- | ||
| title: "Breaking change: `9.0-noble` images are 64-bit only" | ||
| description: Learn about the breaking change in Ubuntu 24.04 "noble" container images. | ||
| ms.date: 04/29/2024 | ||
| ms.custom: linux-related-content | ||
| --- | ||
| # `9.0-noble` images are 64-bit only | ||
|
|
||
| .NET 9 container images for Ubuntu 24.04 are provided for Arm64 and x64 only. .NET 9 is not supported on Ubuntu 24.04 Arm32 due to [year 2038 incompatibility](../../core-libraries/9.0/y2038-incompatible.md). | ||
|
|
||
| ## Previous behavior | ||
|
|
||
| Previously, you could reference a tag like `8.0` and be able to retrieve an Arm32 container image. | ||
|
|
||
| ## New behavior | ||
|
|
||
| Starting in .NET 9, the `9.0` tag only retrieves 64-bit images. | ||
|
|
||
| Canonical has signaled that Arm32 is on the path to being deprecated / not supported for Ubuntu. Ubuntu-related .NET tags are 64-bit only going forward. | ||
|
|
||
| > From 24.04 (noble), we will no longer be producing 32-bit (armhf) images for the Raspberry Pi. | ||
|
|
||
| > While armhf will remain a supported architecture for noble within its lifespan, there will be no support for the armhf architecture after noble. In future releases, armhf images will not be provided, and it will not be an available foreign architecture. | ||
|
|
||
| From [Ubuntu 24.04 release notes (No 32-bit (armhf) images)](https://discourse.ubuntu.com/t/noble-numbat-release-notes/39890#no-32-bit-armhf-images-96) | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Can you move this to be an intro before the block quote and end it with a colon? |
||
|
|
||
| ## Version introduced | ||
|
|
||
| .NET 9 Preview 4 | ||
|
|
||
| ## Type of change | ||
|
|
||
| This change is a [behavioral change](../../categories.md#binary-compatibility). | ||
|
|
||
| ## Reason for change | ||
|
|
||
| This change was made due to .NET 9 year 2038 incompatibility (specific to Arm32). | ||
|
|
||
| ## Recommended action | ||
|
|
||
| Use Debian or Alpine Arm32 images or switch to a 64-bit environment. For example, Raspberry Pi can run both Arm32 and Arm64 Raspberry Pi OS variants. | ||
|
|
||
| Example .NET 9 container tags supported for Arm32: | ||
|
|
||
| - Debian: `mcr.microsoft.com/dotnet/sdk:9.0` | ||
| - Alpine: `mcr.microsoft.com/dotnet/sdk:9.0-alpine` | ||
|
|
||
| ## Affected APIs | ||
|
|
||
| None. | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,51 @@ | ||
| --- | ||
| title: "Breaking change: .NET 6 is not supported on Year 2038 compatible Linux distros" | ||
| description: Learn about the .NET 6 behavior on Year 2038 compatible Linxu distros. | ||
| ms.date: 05/01/2024 | ||
| --- | ||
| # .NET 6 is not supported on Year 2038 compatible Arm32 Linux distros | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I'm a bit confused about this. It's not a breaking change introduced in .NET 6, so I don't really think it belongs here. @PriyaPurkayastha?
Member
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Where would it otherwise go? Most of these breaks are of that character. Here's a current customer example: dotnet/sdk#40505 Perhaps the break is that we're not fixing this. |
||
|
|
||
| Linux Arm32 distros have used 32-bit integers to represent time. A 32-bit integer is [unable to represent dates after January 18th, 2038](https://en.wikipedia.org/wiki/Unix_time#Range_of_representable_times). Year 2038 (Y2038) compatible distros use a 64-bit integer for time, which resolves the problem. However, this change is breaking for .NET 6. | ||
|
|
||
| [.NET 6 is not supported on Y2038-compatible Arm32 distros](https://github.com/dotnet/core/discussions/9285), such as Ubuntu 24.04 and Debian 13. The same is true for earlier .NET versions. | ||
|
|
||
| .NET 10 will be supported on Y2038-compatible Arm32 distros. | ||
|
|
||
| Arm64, and x64 environments are unaffected. | ||
|
|
||
| ## Previous behavior | ||
|
|
||
| .NET 6 and earlier versions work on Ubuntu 22.04, Debian 12, and other Y2038-incompatible Arm32 distros. | ||
|
|
||
| ## New behavior | ||
|
|
||
| .NET 6 and earlier versions do not work reliably on Ubuntu 24.04, Debian 13, and other Y2038-compatible Arm32 distros. | ||
|
|
||
| Y2038-incompatible .NET builds running on Y2038-compatible Arm32 distros may see the following error. | ||
|
|
||
| ```bash | ||
| The SSL connection could not be established, see inner exception. | ||
| The remote certificate is invalid because of errors in the certificate chain: NotTimeValid | ||
| ``` | ||
|
|
||
| Some scenarios will be unaffected by this problem and work fine. However, running Y2038-incompatible .NET builds on Y2038-compatible Linux distros (and vice versa) is not supported. | ||
|
|
||
| ## Version introduced | ||
|
|
||
| .NET 6 | ||
|
|
||
| ## Type of breaking change | ||
|
|
||
| This change is a [behavioral change](../../categories.md#behavioral-change). | ||
|
|
||
| ## Reason for change | ||
|
|
||
| .NET needs to respond to Y2038 changes in Linux distros in order to function correctly. It will do so in .NET 10. | ||
|
|
||
| ## Recommended action | ||
|
|
||
| Deploy .NET 6 and earlier versions on Y2038-incompatible Arm32 distros. Deploy .NET 10 and latest on Y2038-compatible distros. | ||
|
|
||
| ## Affected APIs | ||
|
|
||
| Any API that relies on a native API that takes a time value. | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,51 @@ | ||
| --- | ||
| title: "Breaking change: .NET 8 is not supported on Year 2038 compatible Linux distros" | ||
| description: Learn about the .NET 8 behavior on Year 2038 compatible Linxu distros. | ||
| ms.date: 05/01/2024 | ||
| --- | ||
| # .NET 8 is not supported on Year 2038 compatible Arm32 Linux distros | ||
|
|
||
| Linux Arm32 distros have used 32-bit integers to represent time. A 32-bit integer is [unable to represent dates after January 18th, 2038](https://en.wikipedia.org/wiki/Unix_time#Range_of_representable_times). Year 2038 (Y2038) compatible distros use a 64-bit integer for time, which resolves the problem. However, this change is breaking for .NET 8. | ||
|
|
||
| [.NET 8 is not supported on Y2038-compatible Arm32 distros](https://github.com/dotnet/core/discussions/9285), such as Ubuntu 24.04 and Debian 13. The same is true for earlier .NET versions. | ||
|
|
||
| .NET 10 will be supported on Y2038-compatible Arm32 distros. | ||
|
|
||
| Arm64, and x64 environments are unaffected. | ||
|
|
||
| ## Previous behavior | ||
|
|
||
| .NET 8 and earlier versions work on Ubuntu 22.04, Debian 12, and other Y2038-incompatible Arm32 distros. | ||
|
|
||
| ## New behavior | ||
|
|
||
| .NET 8 and earlier versions do not work reliably on Ubuntu 24.04, Debian 13, and other Y2038-compatible Arm32 distros. | ||
|
|
||
| Y2038-incompatible .NET builds running on Y2038-compatible Arm32 distros may see the following error. | ||
|
|
||
| ```bash | ||
| The SSL connection could not be established, see inner exception. | ||
| The remote certificate is invalid because of errors in the certificate chain: NotTimeValid | ||
| ``` | ||
|
|
||
| Some scenarios will be unaffected by this problem and work fine. However, running Y2038-incompatible .NET builds on Y2038-compatible Linux distros (and vice versa) is not supported. | ||
|
|
||
| ## Version introduced | ||
|
|
||
| .NET 8 | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Same comment as .NET 6 file. |
||
|
|
||
| ## Type of breaking change | ||
|
|
||
| This change is a [behavioral change](../../categories.md#behavioral-change). | ||
|
|
||
| ## Reason for change | ||
|
|
||
| .NET needs to respond to Y2038 changes in Linux distros in order to function correctly. It will do so in .NET 10. | ||
|
|
||
| ## Recommended action | ||
|
|
||
| Deploy .NET 8 and earlier versions on Y2038-incompatible Arm32 distros. Deploy .NET 10 and latest on Y2038-compatible distros. | ||
|
|
||
| ## Affected APIs | ||
|
|
||
| Any API that relies on a native API that takes a time value. | ||
| Original file line number | Diff line number | Diff line change | ||||
|---|---|---|---|---|---|---|
| @@ -0,0 +1,51 @@ | ||||||
| --- | ||||||
| title: "Breaking change: .NET 9 is not supported on Year 2038 compatible Linux distros" | ||||||
| description: Learn about the .NET 9 behavior on Year 2038 compatible Linxu distros. | ||||||
| ms.date: 05/01/2024 | ||||||
| --- | ||||||
| # .NET 9 is not supported on Year 2038 compatible Arm32 Linux distros | ||||||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
Or am I missing something? |
||||||
|
|
||||||
| Linux Arm32 distros have used 32-bit integers to represent time. A 32-bit integer is [unable to represent dates after January 18th, 2038](https://en.wikipedia.org/wiki/Unix_time#Range_of_representable_times). Year 2038 (Y2038) compatible distros use a 64-bit integer for time, which resolves the problem. However, this change is breaking for .NET 9. | ||||||
|
|
||||||
| [.NET 9 is not supported on Y2038-compatible Arm32 distros](https://github.com/dotnet/core/discussions/9285), such as Ubuntu 24.04 and Debian 13. The same is true for earlier .NET versions. | ||||||
|
|
||||||
| .NET 10 will be supported on Y2038-compatible Arm32 distros. | ||||||
|
|
||||||
| Arm64, and x64 environments are unaffected. | ||||||
|
|
||||||
| ## Previous behavior | ||||||
|
|
||||||
| .NET 9 and earlier versions work on Ubuntu 22.04, Debian 12, and other Y2038-incompatible Arm32 distros. | ||||||
|
|
||||||
| ## New behavior | ||||||
|
|
||||||
| .NET 9 and earlier versions do not work reliably on Ubuntu 24.04, Debian 13, and other Y2038-compatible Arm32 distros. | ||||||
|
|
||||||
| Y2038-incompatible .NET builds running on Y2038-compatible Arm32 distros may see the following error. | ||||||
|
|
||||||
| ```bash | ||||||
| The SSL connection could not be established, see inner exception. | ||||||
| The remote certificate is invalid because of errors in the certificate chain: NotTimeValid | ||||||
| ``` | ||||||
|
|
||||||
| Some scenarios will be unaffected by this problem and work fine. However, running Y2038-incompatible .NET builds on Y2038-compatible Linux distros (and vice versa) is not supported. | ||||||
|
|
||||||
| ## Version introduced | ||||||
|
|
||||||
| .NET 9 | ||||||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Same comment as .NET 6 file. |
||||||
|
|
||||||
| ## Type of breaking change | ||||||
|
|
||||||
| This change is a [behavioral change](../../categories.md#behavioral-change). | ||||||
|
|
||||||
| ## Reason for change | ||||||
|
|
||||||
| .NET needs to respond to Y2038 changes in Linux distros in order to function correctly. It will do so in .NET 10. | ||||||
|
|
||||||
| ## Recommended action | ||||||
|
|
||||||
| Deploy .NET 9 and earlier versions on Y2038-incompatible Arm32 distros. Deploy .NET 10 and latest on Y2038-compatible distros. | ||||||
|
|
||||||
| ## Affected APIs | ||||||
|
|
||||||
| Any API that relies on a native API that takes a time value. | ||||||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The discussion here seems to indicate that we would have Arm32 support for Debian 12 which would be provided by the
9.0tag.