ADR-007: .NET Lifecycle Policy
Status: Proposed
Date: 2026-01-20
Context: Platform Longevity, Security, and Predictability
Decision
We adopt a dual-track lifecycle policy:
- Modern .NET: Standardize on Long-Term Support (LTS) versions (currently .NET 10) for all new development and sidecar migrations.
- .NET Framework 4.8: Maintain existing legacy code while ensuring the underlying Windows OS servicing baseline remains supported.
Context
The WEP platform operates in a hybrid state. We must balance the stability of legacy Windows-only components with the need for a modern, high-performance, and secure evolution path.
1. Modern .NET (STS vs. LTS)
Modern .NET (starting from .NET Core) follows a rapid release cadence.
- LTS (Long Term Support): Supported for a minimum of 3 years.
- STS (Standard Term Support): Supported for 2 years (24 months).
- Annual Cycle: Major versions ship every November.
| Version | Track | Release Date | End of Support | Action Required |
|---|---|---|---|---|
| .NET 10 | LTS | Nov 11, 2025 | Nov 14, 2028 | ✅ Standard Target |
| .NET 9 | STS | Nov 12, 2024 | Nov 10, 2026 | ⚠️ Move to .NET 10 |
| .NET 8 | LTS | Nov 14, 2023 | Nov 10, 2026 | ⚠️ Move to .NET 10 |
[!IMPORTANT] Both .NET 8 and .NET 9 reach "End of Support" on Nov 10, 2026. This creates a unified upgrade deadline for the next year.
2. .NET Framework 4.8
Unlike Modern .NET, .NET Framework 4.8 is a Windows Component.
- Support Horizon: Tied to the lifecycle of the underlying Windows OS.
- Latest Version: 4.8.1 is the latest distributed version; updates are in-place.
- Target: Inherits support from Windows (e.g., Windows Server 2022/2025).
Policy
1. Modernization Target
All new development (Modern API, Next.js backends, specialized services) must target .NET 10 LTS. Standardizing on LTS provides a "safe landing pad" for stability through 2028.
2. Legacy Maintenance
The existing monolith remains on .NET Framework 4.8.
- Action: Ensure server OS updates are managed to maintain framework support.
- Migration: Avoid "big bang" rewrites; use the Strangler Fig pattern to move logic into the Modern .NET track over time.
3. Upgrade Cadence
- LTS Upgrades: Plan a transition sprint every 2 years to move to the next LTS version within 6 months of release.
- Security Patches: Monthly servicing updates must be applied to all environments.
Rationale
- Stability: Standardizing on LTS reduces the churn of annual major upgrades.
- Security: Ensures we stay within the "Active Support" window for CVE patches.
- Pragmatism: Recognizes that legacy code cannot be migrated overnight and remains supported through the Windows OS lifecycle.
Consequences
- Dependency Alignment: NuGet libraries must support .NET Standard 2.1 (for shared logic) and .NET 10.
- Infrastructure Planning: Windows Server patching schedules become a direct dependency for .NET Framework 4.8 support.
- Upgrade Debt: We acknowledge a recurring technical debt payment every 2 years for framework modernization.