-
Notifications
You must be signed in to change notification settings - Fork 5.2k
Add doc on OS onboarding #112026
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
Add doc on OS onboarding #112026
Changes from 1 commit
07bc062
0463ed1
f55443c
9f4d7dc
80a1d57
0b7d88a
19422f5
864f6fa
b1342e9
4df5329
ba7e52c
cda2bcf
42634cd
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,52 @@ | ||||||||
| # OS Onboarding Guide | ||||||||
|
|
||||||||
| Adding support for new operating systems (largely just new versions) is a frequent need. This guide describes how we do that, including policies we use. | ||||||||
jkotas marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||||||||
|
|
||||||||
| References: | ||||||||
|
|
||||||||
| - [.NET OS Support Tracking](https://github.com/dotnet/core/issues/9638) | ||||||||
| - [Prereq container image lifecycle](https://github.com/dotnet/dotnet-buildtools-prereqs-docker/blob/main/lifecycle.md) | ||||||||
|
|
||||||||
| ## Context | ||||||||
|
|
||||||||
| In most cases, we find that new OSes _may_ uncover problems in dotnet/runtime and once resolved don't affect up-stack components or apps. This is because nearly all the APIs that touch native code (networking, cryptography) and deal with standard formats (time zones, ASN.1) are in dotnet/runtime. In many cases, we only see test breaks. | ||||||||
richlander marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||||||||
|
|
||||||||
| Our testing philosophy is based on risk and past experience. The effective test matrix is huge, the product of OSes \* supported versions \* architectures. We try to make smart choices to skip testing most of the matrix while retaining much of the practical coverage. We also know where we tend to get bitten most when we don't pay sufficient attention. For example, our bug risk across Linux, macOS, and Windows is not uniform. | ||||||||
|
|
||||||||
| ## Approach | ||||||||
|
|
||||||||
| New OSes should be added/tested first in `main`. If changes are required, we should prove them out first in `main` before committing to shipping them in a servicing release. However, it isn't always necessary to backport test coverage. | ||||||||
|
|
||||||||
| There are two reasons (beyond known product breaks) to add a new OS reference to a release branch: | ||||||||
|
|
||||||||
| - Add coverage due to practice or known risk | ||||||||
| - Update a reference to an EOL OS version | ||||||||
|
|
||||||||
| If those reasons don't apply, then we can often skip backporting new coverage. | ||||||||
|
|
||||||||
| In the case that a .NET version will be EOL in <6 months, then new coverage can typically be skipped. | ||||||||
|
|
||||||||
| ## End-of-life | ||||||||
|
|
||||||||
| We will often maintain our level of coverage when a new OS comes available by replacing an older one. This ends up being an effective stratgegy to remediating EOL OSes, ahead of time. | ||||||||
|
|
||||||||
richlander marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||||||||
| In some cases, we're required to test an OS version until the end of its life and will need to take specific action to remediate the reference. | ||||||||
|
|
||||||||
| For whatever the reason, we should update references to EOL OSes if we have them. | ||||||||
|
|
||||||||
| ## Mechanics | ||||||||
|
||||||||
|
|
||||||||
| Most of our testing is done in container images. New images need to be created for each new version in the [dotnet/dotnet-buildtools-prereqs-docker](https://github.com/dotnet/dotnet-buildtools-prereqs-docker) repo. The repo is self-service and largely self-explanatory. One typically creates a new image using the pattern demonstrated by the previous version. | ||||||||
|
||||||||
| Most of our testing is done in container images. New images need to be created for each new version in the [dotnet/dotnet-buildtools-prereqs-docker](https://github.com/dotnet/dotnet-buildtools-prereqs-docker) repo. The repo is self-service and largely self-explanatory. One typically creates a new image using the pattern demonstrated by the previous version. | |
| Much of our testing is done in container images. New images need to be created for each new version in the [dotnet/dotnet-buildtools-prereqs-docker](https://github.com/dotnet/dotnet-buildtools-prereqs-docker) repo. The repo is self-service and largely self-explanatory. One typically creates a new image using the pattern demonstrated by the previous version. | |
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.
What about helix queues? The most recent ask for Server 2025 was delayed for so long because we didn't have queues. I think we need to call that out as a prerequisite - unless there was a miss here and testing could have been unblocked with containers all along.
Uh oh!
There was an error while loading. Please reload this page.