Skip to content
Closed
Show file tree
Hide file tree
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
1 change: 1 addition & 0 deletions docs/core/compatibility/6.0.md
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,7 @@ For information on other breaking changes for containers in .NET 6, see [.NET 6
| [System.Security.SecurityContext is marked obsolete](core-libraries/6.0/securitycontext-obsolete.md) | ✔️ | ❌ |
| [Task.FromResult may return singleton](core-libraries/6.0/task-fromresult-returns-singleton.md) | ❌ | ✔️ |
| [Unhandled exceptions from a BackgroundService](core-libraries/6.0/hosting-exception-handling.md) | ✔️ | ❌ |
| [Year 2038 incompatible](core-libraries/6.0/y2038-incompatible.md) | ❌ | ❌ |

## Cryptography

Expand Down
1 change: 1 addition & 0 deletions docs/core/compatibility/8.0.md
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@ If you're migrating an app to .NET 8, the breaking changes listed here might aff
| [ProcessStartInfo.WindowStyle honored when UseShellExecute is false](core-libraries/8.0/processstartinfo-windowstyle.md) | Behavioral change |
| [RuntimeIdentifier returns platform for which runtime was built](core-libraries/8.0/runtimeidentifier.md) | Behavioral change |
| [`Type.GetType` throws exception for all invalid element types](core-libraries/8.0/type-gettype.md) | Behavioral change |
| [Year 2038 incompatible](core-libraries/8.0/y2038-incompatible.md) | Behavioral change |

## Cryptography

Expand Down
7 changes: 7 additions & 0 deletions docs/core/compatibility/9.0.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,12 @@ If you're migrating an app to .NET 9, the breaking changes listed here might aff
|------------------------------------------------------------------------------------------|---------------------|--------------------|
| [DefaultKeyResolution.ShouldGenerateNewKey has altered meaning](aspnet-core/9.0/key-resolution.md) | Behavioral change | Preview 3 |

## Containers

| Title | Type of change | Introduced version |
|------------------------------------------------------------------------------------------|---------------------|--------------------|
| [`9.0-noble` images are 64-bit only](containers/9.0/noble-arm32-images.md) | Binary incompatible | Preview 4 |

## Core .NET libraries

| Title | Type of change | Introduced version |
Expand All @@ -30,6 +36,7 @@ If you're migrating an app to .NET 9, the breaking changes listed here might aff
| [Inline array struct size limit is enforced](core-libraries/9.0/inlinearray-size.md) | Behavioral change | Preview 1 |
| [InMemoryDirectoryInfo prepends rootDir to files](core-libraries/9.0/inmemorydirinfo-prepends-rootdir.md) | Behavioral change | Preview 1 |
| [RuntimeHelpers.GetSubArray returns different type](core-libraries/9.0/getsubarray-return.md) | Behavioral change | Preview 1 |
| [Year 2038 incompatible](core-libraries/9.0/y2038-incompatible.md) | Behavioral change | Preview 1 |

## Networking

Expand Down
50 changes: 50 additions & 0 deletions docs/core/compatibility/containers/9.0/noble-arm32-images.md
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.
Copy link
Member

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.0 tag.


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)
Copy link
Contributor

Choose a reason for hiding this comment

The 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
Copy link
Contributor

Choose a reason for hiding this comment

The 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?

Copy link
Member Author

Choose a reason for hiding this comment

The 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
Copy link
Contributor

Choose a reason for hiding this comment

The 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
Copy link
Contributor

Choose a reason for hiding this comment

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

Suggested change
# .NET 9 is not supported on Year 2038 compatible Arm32 Linux distros
# .NET 9 is not supported on Year 2038 incompatible Arm32 Linux distros

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
Copy link
Contributor

Choose a reason for hiding this comment

The 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.