diff --git a/README.md b/README.md
index e5e0ac18c8..3098fe57b3 100644
--- a/README.md
+++ b/README.md
@@ -31,9 +31,9 @@ You can find release notes for all releases, including out-of-support releases,
## Release Information
* [Download .NET](https://dotnet.microsoft.com/download/dotnet)
-* [Releases Index][releases-index.json] -- Index for all release channels in JSON format
-* [dotnet-install scripts](https://learn.microsoft.com/dotnet/core/tools/dotnet-install-script)
* [Installation docs](https://learn.microsoft.com/dotnet/core/install/)
+* [dotnet-install scripts](https://learn.microsoft.com/dotnet/core/tools/dotnet-install-script)
+* [Releases Index][releases-index.json] -- Index for all release channels in JSON format
[releases-index.json]: https://dotnetcli.blob.core.windows.net/dotnet/release-metadata/releases-index.json
[policies]: release-policies.md
diff --git a/release-notes/9.0/README.md b/release-notes/9.0/README.md
index 2ac593c7e0..251e3c6ab4 100644
--- a/release-notes/9.0/README.md
+++ b/release-notes/9.0/README.md
@@ -6,6 +6,7 @@
- [Linux Package Managers](https://learn.microsoft.com/dotnet/core/install/linux)
- [Containers](https://hub.docker.com/_/microsoft-dotnet)
- [Supported OSes](supported-os.md)
+- [OS packages](./os-packages.md)
- [Known Issues](known-issues.md)
- [Installation instructions](install.md)
diff --git a/release-notes/9.0/linux-packages.md b/release-notes/9.0/linux-packages.md
deleted file mode 100644
index 4e0050ae27..0000000000
--- a/release-notes/9.0/linux-packages.md
+++ /dev/null
@@ -1,120 +0,0 @@
-# .NET 9 Linux package dependencies
-
-.NET 9 has several dependencies that must be satisfied to run .NET apps. The commands to install these libraries are listed for multiple Linux distributions.
-
-Feel free to contribute packages for distributions not (yet) listed in this document, including ones not supported by the .NET Team.
-
-Tips:
-
-- [runtime-deps container images](https://github.com/dotnet/dotnet-docker/tree/main/src/runtime-deps) install these same packages. You can look at those dockerfiles.
-- [pkgs.org](https://pkgs.org/) is a useful site for searching for packages, to find the one for your distribution.
-
-## Packages
-
-.NET depends on the following packages.
-
-- [GNU C Library (glibc)](https://www.gnu.org/software/libc/libc.html)
-- [GNU C++ Library](https://gcc.gnu.org/onlinedocs/libstdc++/)
-- [GCC low-level runtime library](https://gcc.gnu.org/onlinedocs/gccint/Libgcc.html)
-- [ICU](http://site.icu-project.org/)
-- [Kerberos](http://web.mit.edu/kerberos/)
-- [Open SSL](https://www.openssl.org/)
-- [zlib compression library](https://www.zlib.net/)
-
-You do not need to install ICU if you [enable globalization invariant mode](https://github.com/dotnet/runtime/blob/main/docs/design/features/globalization-invariant-mode.md#enabling-the-invariant-mode).
-
-If your app relies on `https` endpoints, you'll also need to install `ca-certificates`.
-
-## Alpine 3.19
-```bash
-sudo apk add \
- libgcc \
- libssl3 \
- libstdc++ \
- zlib
- ```
-## Debian 12 "bookworm"
-
-```bash
-sudo apt-get update \
- && sudo apt-get install -y --no-install-recommends \
- libc6 \
- libgcc-s1 \
- libicu72 \
- libssl3 \
- libstdc++6 \
- tzdata \
- zlib1g \
- ```
-## Debian 11 "Bullseye"
-``` bash
-sudo apt-get update \
- && sudo apt-get install -y --no-install-recommends \
- libc6 \
- libgcc1 \
- libgssapi-krb5-2 \
- libicu67 \
- libssl1.1 \
- libstdc++6 \
- zlib1g
-```
-
-## Ubuntu 24.04 "Noble"
-
-```bash
-sudo apt-get update \
- && sudo apt-get install -y --no-install-recommends \
- libc6 \
- libgcc-s1 \
- libicu74 \
- libssl3 \
- libstdc++6 \
- zlib1g
-```
-
-## Ubuntu 23.10"Mantic"
-``` bash
-sudo apt-get update \
- && sudo apt-get install -y --no-install-recommends \
- libc6 \
- libgcc-s1 \
- libicu72 \
- libssl3 \
- libstdc++6 \
- tzdata \
- zlib1g \
-```
-## Ubuntu 22.04 "Jammy"
-
-``` bash
-sudo apt-get update \
- && sudo apt-get install -y --no-install-recommends \
- libc6 \
- libgcc-s1 \
- libicu70 \
- libssl3 \
- libstdc++6 \
- tzdata \
- zlib1g \
-```
-
-
-
-## Community supported distros
-
-The following distros are not supported by the .NET team. The following package information is provided on an as-is basis. Feel free to contribute package information for the distro you use .NET with if it isn't listed.
-
-### Arch Linux
-
-```bash
-sudo pacman -Sy \
- glibc \
- gcc \
- krb5 \
- icu \
- openssl \
- libc++ \
- zlib
-```
-
-This set of packages was tested on the Arch and Manjaro.
diff --git a/release-notes/9.0/os-packages.json b/release-notes/9.0/os-packages.json
new file mode 100644
index 0000000000..9a62310dc2
--- /dev/null
+++ b/release-notes/9.0/os-packages.json
@@ -0,0 +1,421 @@
+{
+ "$schema": "../schemas/dotnet-os-packages.json",
+ "channel-version": "9.0",
+ "packages": [
+ {
+ "id": "libc",
+ "name": "C Library",
+ "references": [
+ "https://github.com/dotnet/core/blob/main/release-notes/9.0/supported-os.md#linux-compatibility",
+ "https://www.gnu.org/software/libc/libc.html",
+ "https://musl.libc.org/"
+ ],
+ "required-scenarios": [
+ "all"
+ ]
+ },
+ {
+ "id": "libgcc",
+ "name": "GCC low-level runtime library",
+ "references": [
+ "https://gcc.gnu.org/onlinedocs/gccint/Libgcc.html"
+ ],
+ "required-scenarios": [
+ "all"
+ ]
+ },
+ {
+ "id": "ca-certificates",
+ "name": "CA Certificates",
+ "references": [
+ "https://www.redhat.com/sysadmin/ca-certificates-cli"
+ ],
+ "required-scenarios": [
+ "https"
+ ]
+ },
+ {
+ "id": "openssl",
+ "name": "OpenSSL",
+ "min-version": "1.1.1",
+ "references": [
+ "https://www.openssl.org/"
+ ],
+ "required-scenarios": [
+ "https",
+ "cryptography"
+ ]
+ },
+ {
+ "id": "libstdc++",
+ "name": "C++ Library",
+ "references": [
+ "https://gcc.gnu.org/onlinedocs/libstdc++/"
+ ],
+ "required-scenarios": [
+ "runtime"
+ ]
+ },
+ {
+ "id": "libicu",
+ "name": "ICU",
+ "references": [
+ "https://icu.unicode.org",
+ "https://github.com/dotnet/runtime/blob/main/docs/design/features/globalization-invariant-mode.md"
+ ],
+ "required-scenarios": [
+ "globalization"
+ ]
+ },
+ {
+ "id": "tzdata",
+ "name": "tz database",
+ "references": [
+ "https://data.iana.org/time-zones/tz-link.html"
+ ],
+ "required-scenarios": [
+ "globalization"
+ ]
+ },
+ {
+ "id": "krb5",
+ "name": "Kerberos",
+ "references": [
+ "https://web.mit.edu/kerberos"
+ ],
+ "required-scenarios": [
+ "kerberos"
+ ]
+ }
+ ],
+ "distributions": [
+ {
+ "name": "Alpine",
+ "install-commands":
+ [
+ {
+ "run-under-sudo": true,
+ "command-root": "apk",
+ "command-parts": ["add", "{packageName}"]
+ }
+ ],
+ "releases": [
+ {
+ "name": "Alpine 3.20",
+ "release": "3.20",
+ "packages": [
+ {
+ "id": "libgcc",
+ "name": "libgcc"
+ },
+ {
+ "id": "ca-certificates",
+ "name": "ca-certificates"
+ },
+ {
+ "id": "openssl",
+ "name": "libssl3"
+ },
+ {
+ "id": "libstdc++",
+ "name": "libstdc++"
+ },
+ {
+ "id": "icu",
+ "name": "icu-libs"
+ },
+ {
+ "id": "icu",
+ "name": "icu-data-full"
+ },
+ {
+ "id": "tzdata",
+ "name": "tzdata"
+ },
+ {
+ "id": "krb5",
+ "name": "krb5"
+ }
+ ]
+ },
+ {
+ "name": "Alpine 3.19",
+ "release": "3.19",
+ "packages": [
+ {
+ "id": "libgcc",
+ "name": "libgcc"
+ },
+ {
+ "id": "ca-certificates",
+ "name": "ca-certificates"
+ },
+ {
+ "id": "openssl",
+ "name": "libssl3"
+ },
+ {
+ "id": "libstdc++",
+ "name": "libstdc++"
+ },
+ {
+ "id": "icu",
+ "name": "icu-libs"
+ },
+ {
+ "id": "icu",
+ "name": "icu-data-full"
+ },
+ {
+ "id": "tzdata",
+ "name": "tzdata"
+ },
+ {
+ "id": "krb5",
+ "name": "krb5"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "Debian",
+ "install-commands":
+ [
+ {
+ "run-under-sudo": true,
+ "command-root": "apt-get",
+ "command-parts": ["update"]
+ },
+ {
+ "run-under-sudo": true,
+ "command-root": "apt-get",
+ "command-parts": ["install", "-y", "{packageName}"]
+ }
+ ],
+ "releases": [
+ {
+ "name": "Debian 12 (Bookworm)",
+ "release": "12",
+ "packages": [
+ {
+ "id": "libc",
+ "name": "libc6"
+ },
+ {
+ "id": "libgcc",
+ "name": "libgcc-s1"
+ },
+ {
+ "id": "ca-certificates",
+ "name": "ca-certificates"
+ },
+ {
+ "id": "openssl",
+ "name": "libssl3"
+ },
+ {
+ "id": "libstdc++",
+ "name": "libstdc++6"
+ },
+ {
+ "id": "libicu",
+ "name": "libicu72"
+ },
+ {
+ "id": "tzdata",
+ "name": "tzdata"
+ },
+ {
+ "id": "krb5",
+ "name": "libgssapi-krb5-2"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "Fedora",
+ "install-commands":
+ [
+ {
+ "run-under-sudo": true,
+ "command-root": "dnf",
+ "command-parts": ["install", "-y", "{packageName}"]
+ }
+ ],
+ "releases": [
+ {
+ "name": "Fedora 40",
+ "release": "40",
+ "packages": [
+ {
+ "id": "libc",
+ "name": "glibc"
+ },
+ {
+ "id": "libgcc",
+ "name": "libgcc"
+ },
+ {
+ "id": "ca-certificates",
+ "name": "ca-certificates"
+ },
+ {
+ "id": "openssl",
+ "name": "openssl-libs"
+ },
+ {
+ "id": "libstdc++",
+ "name": "libstdc++"
+ },
+ {
+ "id": "libicu",
+ "name": "libicu"
+ },
+ {
+ "id": "tzdata",
+ "name": "tzdata"
+ },
+ {
+ "id": "krb5",
+ "name": "krb5-libs"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "Ubuntu",
+ "install-commands":
+ [
+ {
+ "run-under-sudo": true,
+ "command-root": "apt-get",
+ "command-parts": ["update"]
+ },
+ {
+ "run-under-sudo": true,
+ "command-root": "apt-get",
+ "command-parts": ["install", "-y", "{packageName}"]
+ }
+ ],
+ "releases": [
+ {
+ "name": "Ubuntu 24.10 (Oracular Oriole)",
+ "release": "24.10",
+ "packages": [
+ {
+ "id": "libc",
+ "name": "libc6"
+ },
+ {
+ "id": "libgcc",
+ "name": "libgcc-s1"
+ },
+ {
+ "id": "ca-certificates",
+ "name": "ca-certificates"
+ },
+ {
+ "id": "openssl",
+ "name": "libssl3t64"
+ },
+ {
+ "id": "libstdc++",
+ "name": "libstdc++6"
+ },
+ {
+ "id": "libicu",
+ "name": "libicu74"
+ },
+ {
+ "id": "tzdata",
+ "name": "tzdata"
+ },
+ {
+ "id": "krb5",
+ "name": "libgssapi-krb5-2"
+ }
+ ]
+ },
+ {
+ "name": "Ubuntu 24.04 (Noble Numbat)",
+ "release": "24.04",
+ "packages": [
+ {
+ "id": "libc",
+ "name": "libc6"
+ },
+ {
+ "id": "libgcc",
+ "name": "libgcc-s1"
+ },
+ {
+ "id": "ca-certificates",
+ "name": "ca-certificates"
+ },
+ {
+ "id": "openssl",
+ "name": "libssl3t64"
+ },
+ {
+ "id": "libstdc++",
+ "name": "libstdc++6"
+ },
+ {
+ "id": "libicu",
+ "name": "libicu74"
+ },
+ {
+ "id": "tzdata",
+ "name": "tzdata"
+ },
+ {
+ "id": "krb5",
+ "name": "libgssapi-krb5-2"
+ }
+ ]
+ },
+ {
+ "name": "Ubuntu 22.04.4 LTS (Jammy Jellyfish)",
+ "release": "22.04",
+ "packages": [
+ {
+ "id": "libc",
+ "name": "libc6"
+ },
+ {
+ "id": "libgcc",
+ "name": "libgcc-s1"
+ },
+ {
+ "id": "ca-certificates",
+ "name": "ca-certificates"
+ },
+ {
+ "id": "openssl",
+ "name": "libssl3"
+ },
+ {
+ "id": "libstdc++",
+ "name": "libstdc++6"
+ },
+ {
+ "id": "libicu",
+ "name": "libicu70"
+ },
+ {
+ "id": "tzdata",
+ "name": "tzdata"
+ },
+ {
+ "id": "krb5",
+ "name": "libgssapi-krb5-2"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+}
diff --git a/release-notes/9.0/os-packages.md b/release-notes/9.0/os-packages.md
new file mode 100644
index 0000000000..eb635249d4
--- /dev/null
+++ b/release-notes/9.0/os-packages.md
@@ -0,0 +1,139 @@
+# .NET 9 Required Packages
+
+Various packages must be installed to run .NET apps and the .NET SDK. This is handled automatically if .NET is [installed through archive packages](../../linux.md).
+
+This file is generated from [os-packages.json](os-packages.json).
+
+## Package Overview
+
+The following table lists required packages, including the scenarios by which they are needed.
+
+Id | Name | Required scenarios | Notes
+--------------- | --------- | ------------- | ------------------------------
+[libc][0] | C Library | All | https://github.com/dotnet/core/blob/main/release-notes/9.0/supported-os.md#linux-compatibility
https://www.gnu.org/software/libc/libc.html
https://musl.libc.org/
+[libgcc][1] | GCC low-level runtime library | All | https://gcc.gnu.org/onlinedocs/gccint/Libgcc.html
+[ca-certificates][2] | CA Certificates | Https | https://www.redhat.com/sysadmin/ca-certificates-cli
+[openssl][3] | OpenSSL | Https
Cryptography | Minimum required version 1.1.1
https://www.openssl.org/
+[libstdc++][4] | C++ Library | Runtime | https://gcc.gnu.org/onlinedocs/libstdc++/
+[libicu][5] | ICU | Globalization | https://icu.unicode.org
https://github.com/dotnet/runtime/blob/main/docs/design/features/globalization-invariant-mode.md
+[tzdata][6] | tz database | Globalization | https://data.iana.org/time-zones/tz-link.html
+[krb5][7] | Kerberos | Kerberos | https://web.mit.edu/kerberos
+
+[0]: https://pkgs.org/search/?q=libc
+[1]: https://pkgs.org/search/?q=libgcc
+[2]: https://pkgs.org/search/?q=ca-certificates
+[3]: https://pkgs.org/search/?q=openssl
+[4]: https://pkgs.org/search/?q=libstdc++
+[5]: https://pkgs.org/search/?q=libicu
+[6]: https://pkgs.org/search/?q=tzdata
+[7]: https://pkgs.org/search/?q=krb5
+
+## Alpine
+
+### Alpine 3.20
+
+```bash
+sudo apk add \
+ ca-certificates \
+ icu-data-full \
+ icu-libs \
+ krb5 \
+ libgcc \
+ libssl3 \
+ libstdc++ \
+ tzdata
+```
+
+### Alpine 3.19
+
+```bash
+sudo apk add \
+ ca-certificates \
+ icu-data-full \
+ icu-libs \
+ krb5 \
+ libgcc \
+ libssl3 \
+ libstdc++ \
+ tzdata
+```
+
+## Debian
+
+### Debian 12 (Bookworm)
+
+```bash
+sudo apt-get update && \
+sudo apt-get install -y \
+ ca-certificates \
+ libc6 \
+ libgcc-s1 \
+ libgssapi-krb5-2 \
+ libicu72 \
+ libssl3 \
+ libstdc++6 \
+ tzdata
+```
+
+## Fedora
+
+### Fedora 40
+
+```bash
+sudo dnf install -y \
+ ca-certificates \
+ glibc \
+ krb5-libs \
+ libgcc \
+ libicu \
+ libstdc++ \
+ openssl-libs \
+ tzdata
+```
+
+## Ubuntu
+
+### Ubuntu 24.10 (Oracular Oriole)
+
+```bash
+sudo apt-get update && \
+sudo apt-get install -y \
+ ca-certificates \
+ libc6 \
+ libgcc-s1 \
+ libgssapi-krb5-2 \
+ libicu74 \
+ libssl3t64 \
+ libstdc++6 \
+ tzdata
+```
+
+### Ubuntu 24.04 (Noble Numbat)
+
+```bash
+sudo apt-get update && \
+sudo apt-get install -y \
+ ca-certificates \
+ libc6 \
+ libgcc-s1 \
+ libgssapi-krb5-2 \
+ libicu74 \
+ libssl3t64 \
+ libstdc++6 \
+ tzdata
+```
+
+### Ubuntu 22.04.4 LTS (Jammy Jellyfish)
+
+```bash
+sudo apt-get update && \
+sudo apt-get install -y \
+ ca-certificates \
+ libc6 \
+ libgcc-s1 \
+ libgssapi-krb5-2 \
+ libicu70 \
+ libssl3 \
+ libstdc++6 \
+ tzdata
+```
diff --git a/release-notes/README.md b/release-notes/README.md
index 655f71a76f..517e4c304f 100644
--- a/release-notes/README.md
+++ b/release-notes/README.md
@@ -14,12 +14,14 @@ You can find release notes for all releases, including out-of-support releases,
[8.0.7]: 8.0/8.0.7/8.0.7.md
[6.0.32]: 6.0/6.0.32/6.0.32.md
-## Release Information
+* [Release note formats](./formats.md)
+* [Releases index][releases-index.json]
+
+## Download .NET
* [Download .NET](https://dotnet.microsoft.com/download/dotnet)
-* [Releases Index][releases-index.json] -- Index for all release channels in JSON format
-* [dotnet-install scripts](https://learn.microsoft.com/dotnet/core/tools/dotnet-install-script)
* [Installation docs](https://learn.microsoft.com/dotnet/core/install/)
+* [dotnet-install scripts](https://learn.microsoft.com/dotnet/core/tools/dotnet-install-script)
[releases-index.json]: https://dotnetcli.blob.core.windows.net/dotnet/release-metadata/releases-index.json
[policies]: ../release-policies.md
diff --git a/release-notes/formats.md b/release-notes/formats.md
new file mode 100644
index 0000000000..abf43b63b7
--- /dev/null
+++ b/release-notes/formats.md
@@ -0,0 +1,99 @@
+# Release note formats
+
+Release notes are available in a combination of markdown and JSON formats. The intent is to make all release notes available in markdown and also in JSON if there is a scenario that requires structured data. This content is [licensed](./license-information.md) for broad use.
+
+Our approach has evolved over time. The following descriptions are for our latest practices.
+
+## Monthly patch release notes (markdown)
+
+We typically release an update each month. These often include security fixes for vulnerabilities (AKA CVEs) disclosed on the same day.
+
+Examples:
+
+- [6.0.32](./6.0/6.0.32/6.0.32.md)
+- [8.0.1](./8.0/8.0.1/8.0.1.md)
+
+These markdown files include the following information:
+
+- Links to binaries
+- Notable changes, including CVEs
+- Compatibility information
+- Updates packages
+
+## Monthly preview release notes (markdown)
+
+We typically release a preview for the next major version each month. These are much the same as the monthly patches; however, they will not include CVE information until the new major release is supported (starting with RC1).
+
+Examples:
+
+- [.NET 9 Preview 1](./9.0/preview/preview1/README.md)
+- [.NET 9 Preview 6](./9.0/preview/preview6/README.md)
+
+These markdown files are primarily composed of dense feature descriptions. This content is used as source material for [What's New](https://learn.microsoft.com/dotnet/core/whats-new/dotnet-9/overview) pages in official Microsoft docs, which are [often updated](https://github.com/dotnet/docs/pulls?q=is%3Apr+What%27s+New) on the same day as a preview release.
+
+Preview release notes are always in a `preview` folder. This approach was adopted so that preview releases do not distract from stable releases once preview releases are no longer relevant.
+
+## Releases Index (json)
+
+The `releases-index.json` file is the entrypoint into all other JSON files. This file is relatively small, about a dozen lines per major version. The file includes support phase, latest version, and whether the latest version included CVE fixes.
+
+- File: [`releases-index.json`](./releases-index.json)
+- Schema: [`dotnet-releases-index.json`](https://json.schemastore.org/dotnet-releases-index.json)
+
+The following example demonstrates a version object from the file.
+
+```json
+{
+ "channel-version": "8.0",
+ "latest-release": "8.0.7",
+ "latest-release-date": "2024-07-09",
+ "security": true,
+ "latest-runtime": "8.0.7",
+ "latest-sdk": "8.0.303",
+ "product": ".NET",
+ "support-phase": "active",
+ "eol-date": "2026-11-10",
+ "release-type": "lts",
+ "releases.json": "https://dotnetcli.blob.core.windows.net/dotnet/release-metadata/8.0/releases.json",
+ "supported-os.json": "https://dotnetcli.blob.core.windows.net/dotnet/release-metadata/8.0/supported-os.json"
+}
+```
+
+Each version object includes links to more detailed release-specific information.
+
+The links are to a blob storage location, not to GitHub. We chose the blog storage links as the default because we knew some users were using the JSON files from within Azure and we also better understood the reliability characteristics of Azure.
+
+`releases-index.json` and all the files it references are stored in blob storage and in GitHub. It is straightforward to programmatically transform the [blob storage links](https://dotnetcli.blob.core.windows.net/dotnet/release-metadata/releases-index.json) to [`raw` GitHub links](https://raw.githubusercontent.com/dotnet/core/main/release-notes/releases-index.json) should that be desired.
+
+## Releases (json)
+
+The `releases.json` file contains expansive release information for the life of a major release. It includes much the same information as the Monthly and preview markdown release notes.
+
+Examples:
+
+- [.NET 8 `releases.json`](./8.0/releases.json)
+- [.NET 9 `releases.json`](./9.0/releases.json)
+
+These files can grow to be quite large. We are considering producing release-specific versions of this file, for example for `8.0/8.0.1/release.json`.
+
+## Supported OS (json and markdown)
+
+Supported OS information is published for each release. This information indicates to users which OSes they can expect an app (or the .NET SDK) to run on for a given .NET version. It also indicates which OSes are supported and when they transitioned to EOL status.
+
+Examples:
+
+- [.NET 8 Supported OSes (json)](./8.0/supported-os.json)
+- [.NET 8 Supported OSes (markdown)](./8.0/supported-os.md)
+- [.NET 9 Supported OSes (json)](./9.0/supported-os.json)
+- [.NET 9 Supported OSes (markdown)](./9.0/supported-os.md)
+
+## OS packages (json and markdown)
+
+OS package information is published for each release. This information indicates which packages must be installed on a given distro for a .NET app (or the .NET SDK) to run. [.NET packages](../linux.md) are available for multiple distros, which automatically install all required packages
+
+Examples:
+
+- [.NET 9 OS packages (json)](./9.0/os-packages.json)
+- [.NET 9 OS packages (markdown)](./9.0/os-packages.md)
+
+Schema: [dotnet-requires-packages](./schemas/dotnet-os-packages.json)
diff --git a/release-notes/license-information.md b/release-notes/license-information.md
index 004d56bbf6..b60675a094 100644
--- a/release-notes/license-information.md
+++ b/release-notes/license-information.md
@@ -1,6 +1,6 @@
# License information for release notes
-Release notes include detailed information that may be useful in other forums or mediums, such as blogs, courses, or videos. The release notes are in markdown format, enabling flexible re-use. Starting with .NET 9, you will find more detailed release notes.
+Release notes include detailed information that may be useful in other forums or mediums, such as blogs, courses, or videos. The release notes are in markdown and JSON formats.
The [dotnet/core](https://github.com/dotnet/core) repo uses the [MIT license](../LICENSE.TXT). You are free to use release note content under that license.
diff --git a/release-notes/schemas/dotnet-os-packages.json b/release-notes/schemas/dotnet-os-packages.json
new file mode 100644
index 0000000000..ee14891149
--- /dev/null
+++ b/release-notes/schemas/dotnet-os-packages.json
@@ -0,0 +1,192 @@
+{
+ "description": "The set of packages required by a given product version for a set of distros.",
+ "type": [
+ "object",
+ "null"
+ ],
+ "properties": {
+ "channel-version": {
+ "description": "Major (or major.minor) version of product.",
+ "type": "string"
+ },
+ "packages": {
+ "description": "Set of nominal packages used by product, with descriptions.",
+ "type": "array",
+ "items": {
+ "description": "A nominal package is a distro-agnostic representation of a package, including the scenarios for which the package is required. A nominal package will be referenced by a distribution package, with a distribution-specific package name.",
+ "type": [
+ "object",
+ "null"
+ ],
+ "properties": {
+ "id": {
+ "description": "ID of nominal package.",
+ "type": "string"
+ },
+ "name": {
+ "description": "Display name of nominal package.",
+ "type": "string"
+ },
+ "required-scenarios": {
+ "description": "Required scenarios for which the package must be used.",
+ "type": "array",
+ "items": {
+ "description": "Scenarios relating to package dependencies. \u0027All\u0027 includes both CoreCLR and NativeAOT while \u0027Runtime\u0027 is intended to cover CoreCLR, only.",
+ "enum": [
+ "all",
+ "runtime",
+ "https",
+ "cryptography",
+ "globalization",
+ "kerberos"
+ ]
+ }
+ },
+ "min-version": {
+ "description": "Minimum required version of library.",
+ "type": [
+ "string",
+ "null"
+ ],
+ "default": null
+ },
+ "references": {
+ "description": "Related references.",
+ "type": [
+ "array",
+ "null"
+ ],
+ "items": {
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "default": null
+ }
+ },
+ "required": [
+ "id",
+ "name",
+ "required-scenarios"
+ ]
+ }
+ },
+ "distributions": {
+ "description": "Set of distributions where the product can be used.",
+ "type": "array",
+ "items": {
+ "description": "An operating system distribution, with required package install commands and specific packages for distribution releases.",
+ "type": [
+ "object",
+ "null"
+ ],
+ "properties": {
+ "name": {
+ "description": "Name of the distribution, matching ID in /etc/os-release, however, the expectation is that this value starts with a capital letter (proper noun).",
+ "type": "string"
+ },
+ "install-commands": {
+ "description": "Commands required to install packages within the distribution.",
+ "type": "array",
+ "items": {
+ "description": "A command to be run to install packages",
+ "type": [
+ "object",
+ "null"
+ ],
+ "properties": {
+ "run-under-sudo": {
+ "description": "Whether the command needs to be run under sudo.",
+ "type": "boolean"
+ },
+ "command-root": {
+ "description": "The command to be run, like apt.",
+ "type": "string"
+ },
+ "command-parts": {
+ "description": "The command parts or arguments that need to be used.",
+ "type": [
+ "array",
+ "null"
+ ],
+ "items": {
+ "type": [
+ "string",
+ "null"
+ ]
+ },
+ "default": null
+ }
+ },
+ "required": [
+ "run-under-sudo",
+ "command-root"
+ ]
+ }
+ },
+ "releases": {
+ "description": "Releases for that distribution.",
+ "type": "array",
+ "items": {
+ "description": "A distribution release with a list of packages to install.",
+ "type": [
+ "object",
+ "null"
+ ],
+ "properties": {
+ "name": {
+ "description": "The name of the release, matching PRETTY_NAME in /etc/os-release.",
+ "type": "string"
+ },
+ "release": {
+ "description": "The version number for the release, matching VERSION_ID in /etc/os-release.",
+ "type": "string"
+ },
+ "packages": {
+ "type": "array",
+ "items": {
+ "description": "A distro archive package to install, with a reference to a logical package with more information.",
+ "type": [
+ "object",
+ "null"
+ ],
+ "properties": {
+ "id": {
+ "description": "Reference to nominal package ID, providing access to required scenarios and other information.",
+ "type": "string"
+ },
+ "name": {
+ "description": "Package name in the distro archive.",
+ "type": "string"
+ }
+ },
+ "required": [
+ "id",
+ "name"
+ ]
+ }
+ }
+ },
+ "required": [
+ "name",
+ "release",
+ "packages"
+ ]
+ }
+ }
+ },
+ "required": [
+ "name",
+ "install-commands",
+ "releases"
+ ]
+ }
+ }
+ },
+ "required": [
+ "channel-version",
+ "packages",
+ "distributions"
+ ]
+}