Home Blog GreenTech and Sustainable IT Decarbonizing software supply chains: practical steps
GreenTech and Sustainable IT May 1, 2026 9 min read

Decarbonizing software supply chains: practical steps

GreenTech and Sustainable IT Enterprise Guide 2026 SCALE D2C D2C Technology GreenTech and Sustainable IT Enterprise Guide 2026 SCALE D2C D2C Technology

Software supply chains contribute significantly to the technology sector's carbon footprint — through the energy consumed by build systems, CI/CD pipelines, package registries, and the computational overhead of bloated dependencies. Decarbonising your software supply chain is achievable with practical engineering changes and is increasingly a requirement for enterprise customers and government procurement.

Understanding Software Supply Chain Emissions

The software supply chain encompasses the entire process of building, testing, packaging, and distributing software — including build servers, CI/CD runners, container registries, package distribution networks, and the runtime environments where software executes. Each stage consumes electricity; when that electricity comes from carbon-intensive sources, software development and distribution have measurable climate impact.

Definition
The software supply chain carbon footprint encompasses Scope 2 emissions from electricity consumed by build, test, and distribution infrastructure, plus Scope 3 emissions from end-user device energy consumption and the embodied carbon in hardware used throughout the supply chain.
4%
Global electricity consumption attributable to data centres and networks
60%
Average CI pipeline time wasted on redundant builds
Carbon difference between running CI on coal vs renewable-powered cloud

Optimising CI/CD Pipeline Emissions

CI/CD pipelines are often the largest source of software supply chain emissions — running thousands of build and test jobs daily on energy-intensive compute instances. Key optimisation strategies:

🔄
Build Caching
Aggressive build caching — Docker layer caching, Gradle/Maven build cache, NPM/pip dependency caching — eliminates redundant recompilation. Well-implemented caching typically reduces CI compute time by 40–70%, directly reducing energy consumption proportionally.
🎯
Selective Testing
Run only the tests affected by changed code paths rather than the full test suite on every commit. Tools like Trunk.io's Flaky Tests, Bazel's dependency analysis, and Jest's --changedSince flag identify which tests must run for a given change, reducing unnecessary compute.
📍
Green Region Routing
Route CI workloads to cloud regions with high renewable energy percentages. GitHub Actions, GitLab CI, and CircleCI allow region selection. AWS US-West-2 (Oregon), GCP US-Central1 (Iowa), and Azure West Europe all have higher renewable energy commitments than other regions.
Carbon-Aware Scheduling
Non-urgent CI jobs (nightly builds, weekly integration tests) can be scheduled for times when the regional grid is running on higher proportions of renewable energy. The Carbon Aware SDK (Linux Foundation) and Electricity Maps API provide real-time and forecast grid carbon intensity data for scheduling decisions.
📦
Right-Sizing Runners
Over-provisioned CI runners waste energy waiting. Profile your build jobs' actual CPU and memory usage — most are under 30% CPU utilised on their provisioned instance size. Right-size to match actual needs; use spot instances for interruptible builds to leverage efficient resource allocation.
🧹
Dependency Pruning
Bloated dependency trees increase install time, build time, container image size, and runtime energy consumption. Regular dependency audits with tools like depcheck (Node), pip-check (Python), and cargo-udeps (Rust) identify unused dependencies to remove.

Container Image Optimisation

Unnecessarily large container images waste bandwidth during distribution, storage in registries, and startup time — with measurable energy implications at scale. Container image optimisation principles:

TechniqueTypical Size ReductionImplementation
Multi-stage builds60–90%Separate build environment from runtime image; only copy compiled artifacts
Distroless base images30–50% vs AlpineGoogle Distroless; no shell, package manager, or OS utilities in runtime
Alpine base images70–80% vs UbuntuAlpine Linux; minimal OS (~5MB). Caveat: musl libc differences for some apps
Layer optimisation10–30%Combine RUN commands; order layers by change frequency for cache efficiency
Dependency pruningVariableInstall only production dependencies; remove dev tools from runtime image

Green Package Distribution

Package registries (npm, PyPI, Maven Central, Docker Hub) distribute enormous volumes of packages daily. As a package maintainer, your choices reduce downstream energy consumption:

  • Minimise package size: Publish only the compiled output, not source maps, test files, or documentation in the distributed package. Tools like bundlephobia.com measure npm package size impact.
  • Tree-shakeable exports: Design packages with named exports and ES modules (not CommonJS) to enable dead code elimination in consuming bundlers — reducing final bundle sizes delivered to users.
  • Avoid dependency sprawl: Every dependency you add becomes a dependency of your users. Prefer implementations using zero external dependencies where practical.
  • Version stability: Stable, infrequently updated packages are cached effectively by CDNs and package managers — reducing the redownload energy cost of frequent minor version churn.

Green Software Foundation Tooling

The Green Software Foundation (GSF), backed by Microsoft, Accenture, GitHub, and others, has produced practical tooling for measuring and reducing software carbon emissions:

GSF Tools
  • Software Carbon Intensity (SCI) spec — standard metric for per-unit software carbon emissions
  • Carbon Aware SDK — APIs for carbon-aware workload scheduling
  • Awesome Green Software — curated tooling directory
  • Impact Framework — plugin-based energy/carbon measurement
Third-Party Tools
  • Electricity Maps API — real-time grid carbon intensity by region
  • Cloud Carbon Footprint — open-source cloud emissions measurement
  • Scaphandre — energy consumption monitoring for Linux processes
  • Kepler — Kubernetes energy consumption metrics (CNCF)

Measuring with Software Carbon Intensity (SCI)

The Green Software Foundation's SCI specification defines a standard way to measure software carbon emissions per functional unit — per API call, per user, per transaction. The formula is: SCI = (E × I) + M per R, where E is energy consumed, I is the carbon intensity of that energy (gCO₂e/kWh), M is embodied carbon of hardware, and R is the functional unit. Implementing SCI measurement in your pipelines establishes a baseline and enables tracking improvement over time as you apply the optimisations described in this guide.

Frequently Asked Questions

CI/CD pipeline carbon footprint varies enormously by technology stack, team size, and cloud provider carbon intensity. A rough benchmark: a medium-sized engineering team (50 engineers) running 500 CI jobs per day, each consuming 4 minutes of compute on a 2-vCPU runner, uses approximately 2,700 vCPU-hours per month. On AWS US-East-1 (grid carbon intensity ~0.35 kgCO₂/kWh) and assuming ~0.2W per vCPU, this is roughly 190 kgCO₂/month — comparable to driving a petrol car 800km. At scale (thousands of engineers), CI emissions become material in corporate Scope 2 reporting. The Green Software Foundation's Impact Framework can be used to calculate your specific pipeline's SCI.

Carbon-aware software is software that adjusts its behaviour based on the current carbon intensity of the electricity grid — running more work when renewable energy is abundant and less when the grid is carbon-intensive. Implementation approaches: use the Carbon Aware SDK (Linux Foundation) to access real-time and forecast carbon intensity data from Electricity Maps or WattTime; schedule batch jobs (nightly builds, ML training, data processing) for times and regions with lower carbon intensity; implement carbon-aware autoscaling that increases capacity during low-carbon periods and scales down during high-carbon periods; and use carbon intensity as a dimension in cloud region selection for deployable workloads.

Build caching saves energy proportional to the percentage of CI job time eliminated by cache hits. In well-tuned pipelines: Docker layer caching reduces image build time by 60–80% when base layers are stable; Gradle/Maven build caching with remote build cache eliminates 40–70% of compilation work for unchanged code; NPM/yarn package caching eliminates the 1–3 minute dependency download and install phase for most builds; and Bazel remote caching can achieve 80%+ cache hit rates for large monorepos. Combined, aggressive caching on a large CI platform can reduce total compute consumption by 50–70% — with direct proportional reduction in energy and carbon.

Distroless container images (developed by Google) contain only the application runtime and its direct dependencies — no shell, no package manager, no OS utilities, no system libraries beyond what the application requires. A typical Node.js distroless image is 50–100MB versus 150–300MB for a Node.js Ubuntu-based image. Smaller images reduce: registry storage energy; bandwidth energy for image pulls (multiplied by every container start across all nodes); and attack surface. The energy savings are small per individual container pull but significant at cloud scale where millions of container starts per day are common. Distroless also improves security by eliminating unnecessary software that could be exploited.

The Software Carbon Intensity (SCI) specification, published by the Green Software Foundation as an ISO standard (ISO/IEC 21031), defines a standardised metric for measuring the carbon intensity of software per functional unit — for example, per API request, per user session, or per transaction. The formula SCI = (E × I) + M / R calculates: energy consumed (E) times the carbon intensity of that energy (I in gCO₂e/kWh), plus the embodied carbon allocated to the software's hardware use (M), divided by the functional unit (R). SCI enables meaningful comparison of software carbon efficiency across versions, architectures, and deployments — making it possible to track improvement as software supply chain optimisations are implemented.

Cloud region carbon intensity varies significantly based on the local electricity grid's generation mix. Generally low-carbon regions include: AWS us-west-2 (Oregon) — predominantly hydroelectric and wind; GCP us-central1 (Iowa) — high wind energy percentage; Azure westeurope (Netherlands) — high renewable mix; AWS eu-west-1 (Ireland) — high wind energy; and GCP europe-west6 (Zürich) — largely nuclear and hydro. High-carbon regions include AWS us-east-1 (Virginia) and many Asia-Pacific regions still heavily coal-dependent. Use the Electricity Maps API or Cloud Carbon Footprint tool to check current carbon intensity. For fixed-time workloads, running in the lowest-carbon available region can reduce emissions by 3–5× compared to the highest-carbon region.

npm package size affects carbon through two mechanisms: download emissions (each time a developer or CI pipeline installs a package, the package data is transmitted over the network, consuming energy proportional to data volume) and runtime emissions (larger JavaScript bundles delivered to users consume more energy to transmit over mobile networks and more CPU to parse and execute in browsers). For widely used packages, even small size reductions multiply across millions of installs. The npmjs.com package page now shows download counts — a package with 10 million weekly downloads saving 50KB per install saves 500GB of network transfer per week. Use Bundlephobia and pkg-size to measure package impact before publishing.

Kepler (Kubernetes-based Efficient Power Level Exporter) is a CNCF sandbox project that measures the energy consumption of individual Kubernetes pods using hardware performance counters, eBPF probes, and power model estimation. It exposes per-pod energy metrics as Prometheus metrics, enabling teams to measure the actual energy consumption of their workloads rather than relying on whole-server estimates. Kepler works by reading CPU performance counters (instructions executed, cache misses, memory bandwidth) for each pod and applying a trained power model to estimate energy consumption proportional to resource usage. This enables true per-workload carbon accounting at the Kubernetes level — essential for implementing SCI measurement in container-based deployments.

DECARBONIZ

Ready to Implement Decarbonizing software supply chains: practical st...?

Our specialist team delivers measurable ROI from GreenTech and Sustainable IT programmes for enterprise and D2C brands.

Free Audit