← All posts

The Windows license tax on EC2: when an OS doubles your compute bill

Published November 5, 2024

When sizing Amazon EC2 instances, engineering teams routinely spend days benchmarking CPU generations, evaluating memory-to-vCPU ratios, and negotiating Savings Plans. Yet one configuration choice in the launch wizard alters the infrastructure bill more than jumping an entire hardware generation: the operating system drop-down.

Selecting Windows Server instead of Linux on identical AWS compute hardware instantly adds a 70% to 103% price premium. On compute-optimized instance types, the hourly Windows licensing fee actually exceeds the cost of the underlying server hardware.

Furthermore, because Microsoft does not offer Windows Server for AWS Graviton processors, running Windows locks workloads out of AWS’s most cost-efficient Arm silicon.

Here is the exact licensing math behind the EC2 Windows premium in us-east-1, the architectural consequences of the Graviton exclusion, and the financial case for modernizing legacy Windows workloads to Linux containers.

The baseline math: the $0.046 per vCPU-hour tax

AWS sells Windows Server under a “License Included” (LI) model metered directly into the instance hourly rate. On modern 7th-generation x86 instance families (such as Intel Sapphire Rapids instances), AWS charges a flat licensing markup of $0.0460 per vCPU-hour.

Because this licensing fee scales strictly by vCPU count regardless of memory or instance family, its relative impact varies dramatically depending on the base hardware cost of the node.

The table below contrasts Linux and Windows on-demand pricing in us-east-1 across common instance types:

Instance Type vCPU / RAM Linux Hourly Windows Hourly Windows Markup ($/hr) Markup (%) Windows Monthly Premium
c7i.xlarge 4 vCPU / 8 GiB $0.1785 $0.3625 +$0.1840 +103.1% +$134.32
m7i.xlarge 4 vCPU / 16 GiB $0.2016 $0.3856 +$0.1840 +91.3% +$134.32
r7i.xlarge 4 vCPU / 32 GiB $0.2646 $0.4486 +$0.1840 +69.5% +$134.32
m7i.16xlarge 64 vCPU / 256 GiB $3.2256 $6.1696 +$2.9440 +91.3% +$2,149.12
t3.medium 2 vCPU / 4 GiB $0.0416 $0.0600 +$0.0184 +44.2% +$13.43

Monthly calculations assume 730 on-demand hours per month.

The compute-optimized inversion

On general-purpose instances like the m7i.xlarge (4 vCPUs, 16 GiB RAM), the Linux cost is $0.2016/hr ($147.17/month), while Windows costs $0.3856/hr ($281.49/month). That is a 91.3% increase—nearly doubling the monthly run rate.

On compute-optimized nodes, the numbers become even more striking. The c7i.xlarge (4 vCPUs, 8 GiB RAM) has a base Linux hardware price of $0.1785/hr. Adding 4 vCPUs of Windows licensing at $0.046/vCPU-hr adds $0.1840/hr, pushing the Windows price to $0.3625/hr.

On c7i.xlarge, the Windows OS license costs $0.1840/hr, while the physical CPU, memory, storage bus, and network interface cost $0.1785/hr. You are paying more for the operating system license than for the physical machine running it.

Scale-up costs on large instances

When running vertical scale-up applications, such as monolithic backend services or memory-heavy applications, the linear vCPU scaling produces severe costs:

You can inspect the breakdown across other generations and sizes using our instance explorer and comparison tool.

The Graviton penalty: 136% cost gap

The direct $0.046/vCPU-hour premium tells only half the story. The hidden cost of running Windows on AWS is the architectural lock-in to x86 processors.

AWS designs its custom Graviton silicon (Graviton3 and Graviton4) specifically for high-density, energy-efficient cloud workloads. Graviton instances are priced approximately 15% to 20% cheaper than equivalent Intel x86 instances, while delivering superior performance per core for web services and containerized workloads.

However, Microsoft does not provide Windows Server builds for AWS Graviton processors. Windows on EC2 requires Intel or AMD x86_64 architecture.

+-----------------------------------------------------------------------+
|  m7g.xlarge (Graviton3 / Linux)                                        |
|  $0.1632/hr  ($119.14/mo)                                             |
+-----------------------------------------------------------------------+
|  m7i.xlarge (Intel / Linux)                                           |
|  $0.2016/hr  ($147.17/mo)        [+23.5% vs Graviton Linux]           |
+-----------------------------------------------------------------------+
|  m7i.xlarge (Intel / Windows Server)                                  |
|  $0.3856/hr  ($281.49/mo)        [+136.3% vs Graviton Linux]          |
+-----------------------------------------------------------------------+

Comparing an Arm-based Linux instance directly against an Intel Windows instance of identical sizing (4 vCPU, 16 GiB RAM):

Running Windows Server on x86 costs 136.3% more than running Linux on Graviton ($281.49/mo vs. $119.14/mo). Over a 100-node fleet of 4-vCPU nodes, that delta represents $194,820 in annual excess compute expenditure.

License Included vs. BYOL on Dedicated Hosts

Organizations running large Windows estates on EC2 typically evaluate two operational models: License Included (LI) multi-tenant instances versus Bring Your Own License (BYOL) on Amazon EC2 Dedicated Hosts.

1. License Included (Multi-Tenant EC2)

2. BYOL on EC2 Dedicated Hosts

Dedicated Hosts allocate a physical server for your exclusive use. Under Microsoft licensing terms with active Software Assurance (or subscription licenses), organizations can bring existing Windows Server and SQL Server licenses to AWS Dedicated Hosts under Microsoft Flexible Virtualization Benefits.

However, Dedicated Host licensing requires careful math:

  1. Host-level licensing requirements: Microsoft requires licensing all physical cores on the underlying hardware (minimum 16 core licenses per server). On an m7i.metal-48xl or dedicated host with 96 physical cores (192 vCPUs), you must license all 96 physical cores regardless of how many virtual machines you run.
  2. Packing density: Dedicated Hosts only achieve cost parity with License Included instances if host utilization stays consistently above 75% to 85%. If you spin up a dedicated host and run only a few instances on it, the fixed host cost ($4.8384/hr for an m7i dedicated host baseline in us-east-1) will exceed multi-tenant LI costs.
  3. Operational overhead: BYOL requires integration with AWS License Manager to track core allocations, socket counts, and license expiration.

For stable, steady-state enterprise fleets running thousands of vCPUs with existing Enterprise Agreements (EA), Dedicated Host BYOL can reduce effective Windows licensing costs. For dynamic or growing cloud-native workloads, the infrastructure constraints often negate the licensing savings.

Modernizing legacy .NET to Linux containers

The primary driver behind Windows EC2 deployments in enterprise environments is legacy .NET Framework (versions 2.0 through 4.8).

Applications built on .NET Framework depend on Windows-specific operating system internals: IIS (Internet Information Services), the Windows Registry, Active Directory NTLM/Kerberos hooks, WCF (Windows Communication Foundation), and COM components.

Since the release of .NET Core and modern .NET (.NET 6, 8, and 9), Microsoft’s runtime is cross-platform, modular, and natively supported on Linux and Linux-based container runtimes.

+-----------------------------+           +-----------------------------+
|    Legacy Windows Stack     |           |     Modern Linux Stack      |
+-----------------------------+           +-----------------------------+
| ASP.NET Monolith (.NET 4.8) |           | ASP.NET Core (.NET 8 / 9)   |
| Internet Information Server |           | Kestrel HTTP Engine         |
| Windows Server 2022 OS      |    ==>    | Alpine / Debian Minimal     |
| EC2 x86 (m7i.xlarge)        |           | Amazon ECS / EKS / Fargate  |
| $0.3856/hr ($281.49/mo)     |           | EC2 Graviton (m7g.xlarge)   |
|                             |           | $0.1632/hr ($119.14/mo)     |
+-----------------------------+           +-----------------------------+
               Net Compute Cost Reduction: 57.7%

The economics of porting

Migrating an application from .NET Framework to modern .NET running on Linux delivers three compounding financial benefits:

  1. Elimination of the $0.046/vCPU-hr licensing fee: The instant a container image switches from mcr.microsoft.com/dotnet/framework/aspnet to mcr.microsoft.com/dotnet/aspnet:8.0-alpine, the Windows license fee drops to zero.
  2. Graviton eligibility: Linux container images compiled for linux/arm64 can run on AWS Graviton3 and Graviton4 instances, shaving another 15% to 20% off base hardware spend.
  3. Container density and startup latency: Windows container base images typically weigh 3 GiB to 10 GiB and take minutes to pull and start. A minimal Linux .NET 8 container image is often under 120 MiB and starts in sub-second times, allowing tighter packing on container hosts and faster auto-scaling responses.

Practical migration tools

Compounding costs: SQL Server and Active Directory

The Windows OS tax is frequently compounded by auxiliary enterprise services running alongside application servers.

1. The SQL Server license multiplier

Running Microsoft SQL Server under License Included pricing amplifies hourly compute costs substantially beyond the base Windows markup:

Software Tier (on m7i.xlarge, 4 vCPU) Hourly Price (us-east-1) Monthly Cost Cost Multiple vs Linux
Linux (No DB License) $0.2016 $147.17 Baseline (1.0x)
Windows Server $0.3856 $281.49 1.91x
Windows + SQL Server Web $0.4456 $325.29 2.21x
Windows + SQL Server Standard $1.4656 $1,069.89 7.27x
Windows + SQL Server Enterprise $4.2656 $3,113.89 21.16x

On a 4-vCPU instance, SQL Server Enterprise License Included adds $3.8800/hr on top of the base instance price, driving a monthly cost from $147.17 to over $3,100.

For database workloads, alternatives include:

2. Active Directory Domain Controllers

Many AWS environments maintain pairs of Windows EC2 instances acting as dedicated Active Directory Domain Controllers (AD DCs) in each VPC.

Because Domain Controllers perform lightweight authentication queries, they frequently idle at 1% to 3% CPU utilization on 2-vCPU or 4-vCPU instances (m5.large or m6i.large), yet incur full Windows licensing 24 hours a day, 365 days a year.

Organizations can eliminate these dedicated EC2 instances by:

A step-by-step remediation playbook

To reduce or eliminate the Windows license premium across an AWS footprint:

  1. Inventory and categorize the fleet: Query AWS Cost Explorer and AWS Resource Explorer for all instances with PlatformDetails = 'Windows' or PlatformDetails = 'Windows with SQL Server'. Calculate the total active vCPUs running Windows.
  2. Triage .NET workloads by modernization complexity:
    • Tier 1 (Already .NET Core / .NET 6+): Change target build configurations to Linux containers (mcr.microsoft.com/dotnet/aspnet) and deploy to Amazon ECS on Fargate or Graviton EC2 instances. Immediate 50%+ cost reduction.
    • Tier 2 (.NET Framework REST APIs / Background Services): Run the AWS Porting Assistant to identify NuGet package blockers. Most API services can be ported to .NET 8 with minimal architectural changes.
    • Tier 3 (Legacy ASP.NET Web Forms / WCF / Third-Party COTS): Where source code cannot be refactored, rightsize instances using the instance comparison tool and evaluate consolidation onto Dedicated Hosts with BYOL licensing.
  3. Rightsize remaining Windows instances: Because Windows licensing is billed at $0.046 per vCPU-hour, downsizing an oversized 8-vCPU instance to a 4-vCPU instance saves $134/month in operating system licensing alone, above and beyond the underlying hardware savings.