Úvod: Proč je ekologický software nutností
Odvětví ICT odpovídá přibližně za 2–4 % globálních emisí CO₂, procento srovnatelné s procentem leteckého průmyslu. Globální datová centra spotřebovala přibližně 460 TWh v roce 2022 a podle Mezinárodní energetické agentury (IEA) by mohly překonat 1 000 TWh do roku 2026. Jen ve Spojených státech datová centra absorbují již více než 4 % celostátní elektřiny, přičemž prognózy uvádějí možných 12 % do roku 2030.
V této souvislosti Green Software Foundation (GSF) — konsorcium založené v roce 2021 od Accenture, GitHub, Microsoft a ThoughtWorks pod Linux Foundation — definoval systematický rámec pro snižování dopadu softwaru na životní prostředí. Toto není jednoduchá optimalizace: je to změna paradigmatu, která zavádíuhlíková účinnost jako měřítko kvality softwaru na stejné úrovni s výkonem, zabezpečením a udržovatelností.
V tomto článku je prozkoumáme do hloubky 8 principů zeleného softwarového inženýrství, specifikaci Software SCI (Carbon Intensity Software) ratifikováno jako norma ISO/IEC 21031:2024, a praktické nástroje pro měření a snižování emisí z našeho kodexu.
Co se naučíte
- 8 základních principů Green Software Foundation
- Vzorec SCI a jak vypočítat uhlíkovou intenzitu softwaru
- Praktické strategie Carbon Efficiency, Energy Efficiency a Carbon Awareness
- Hardware Efficiency a koncept ztělesněného uhlíku
- Nástroje pro měření: Cloud Carbon Footprint, CodeCarbon, Carbon Aware SDK
- Vzory zeleného kódu s konkrétními příklady v Pythonu, TypeScriptu a Javě
- Závazky v oblasti klimatu: rozdíl mezi neutralizací, kompenzací a snižováním emisí
The Green Software Foundation: Mission and Structure
La Green Software Foundation (GSF) je nezisková organizace s posláním „vytvořit důvěryhodný ekosystém lidí, standardů, nástrojů a osvědčených postupů pro zelený software“. S dál 80 členských organizací — včetně Intel, Goldman Sachs, NTT Data, Avanade, UBS a Globant — GSF působí prostřednictvím několika pracovních skupin.
Struktura Green Software Foundation
| Pracovní skupina | Objektivní | Hlavní výstupy |
|---|---|---|
| Normy | Definujte specifikace a metriky | Specifikace SCI (ISO/IEC 21031), SCI pro AI |
| Open Source | Vyvíjet nástroje a sady SDK | Carbon Aware SDK, Impact Framework |
| Společenství | Školení a šíření | Certifikace Green Software Practitioner |
| Politika | Regulace vlivu | SOFT Framework (ex-TOSS), směrnice ESG |
V roce 2025 dosáhla GSF ratifikací významného milníku SOFT Framework (Sustainable Organizational Framework for Technology), kterou vede Pindy Bhullar s podporou společnosti Microsoft. Čtyři globální organizace již tento rámec testují a řeší problémy, jako jsou mezery v datech, rozhodnutí o integraci nástrojů a získání obchodního nákupu.
8 principů zeleného softwarového inženýrství
Principy zeleného softwaru nejsou volitelné návrhy: jsou jedním filozofie designu která ovlivňuje každé rozhodnutí, od architektury až po výběr infrastruktury. Podívejme se na ně podrobně.
Přehled principů
| # | Princip | Soustředit | Klíčová metrika |
|---|---|---|---|
| 1 | Uhlíková účinnost | Emitujte méně uhlíku na jednotku práce | gCO₂ekv na operaci |
| 2 | Energetická účinnost | Pro stejnou funkci spotřebujte méně energie | kWh na transakci |
| 3 | Povědomí o uhlíku | Přizpůsobte se uhlíkové intenzitě sítě | gCO₂ekv/kWh sítě |
| 4 | Hardwarová efektivita | Maximalizujte využití hardwaru a životnost | Vložený uhlík (gCO₂ekv) |
| 5 | Měření | Měření a sledování emisí | SCI skóre |
| 6 | Závazky v oblasti klimatu | Firemní klimatické závazky | Net Zero, uhlíkově neutrální |
| 7 | vytváření sítí | Snižte provoz v síti | Přenesené bajty na operaci |
| 8 | Formování poptávky | Modelujte poptávku na základě dostupné energie | Zatížení během období s nízkým obsahem uhlíku |
Princip 1: Uhlíková účinnost
Uhlíková účinnost prostředek emitují co nejmenší množství uhlíku na pracovní jednotku. Je to základní princip: vše ostatní z něj vyplývá. Software uhlíkově efektivní není nutně nejrychlejší nebo nejlevnější, ale je co produkuje nižší dopad na životní prostředí vzhledem k hodnotě, kterou vytváří.
Analogií je účinnost vozidla: nezajímá nás pouze to, kolik km auto ujelo, ale kolik gramů CO₂ emitovaných na km. Podobně zelený software měří i gramů ekvivalentu CO₂ na volání API, na obsluhovaného uživatele a na dokončenou transakci.
Princip v akci
Pokud dvě implementace funkce produkují stejný výsledek, ale jedna spotřebovává o 50 % méně energie, druhý je však uhlíkově efektivnější trvá o několik milisekund déle. Ve světě, kde datová centra spotřebují stovky TWh, tyto úspory se hromadí exponenciálně.
Praktické strategie pro uhlíkovou účinnost
1. Algoritmická optimalizace
Volba algoritmu má vyšší energetický dopad než volba programovacího jazyka. Algoritmus O(n log n) je nejen rychlejší než algoritmus O(n²): spotřebovává peníze výrazně méně energie na velkých souborech dat.
# Ricerca INEFFICIENTE: O(n) - scansione lineare su lista non ordinata
def find_user_linear(users: list, target_id: str) -> dict | None:
"""Scansione lineare: consuma energia proporzionale a N."""
for user in users:
if user["id"] == target_id:
return user
return None
# Ricerca EFFICIENTE: O(1) - lookup su dizionario (hash map)
def build_user_index(users: list) -> dict:
"""Costruzione indice: investimento una tantum O(n)."""
return {user["id"]: user for user in users}
def find_user_indexed(index: dict, target_id: str) -> dict | None:
"""Lookup O(1): consumo energetico costante."""
return index.get(target_id)
# Impatto su 1 milione di utenti con 10.000 ricerche:
# - Lineare: ~10 miliardi di confronti = ~15 Wh
# - Indicizzato: ~10.000 lookup = ~0.001 Wh
# Risparmio: 99.99% di energia per la stessa funzionalità
2. Strategické ukládání do mezipaměti
Každý požadavek na databázi nebo externí API má náklady na energii. Ukládání do mezipaměti snižuje výpočty opakované, čímž se eliminuje zbytečná práce a související emise.
interface CacheEntry<T> {
readonly data: T;
readonly timestamp: number;
readonly ttlMs: number;
}
class GreenCache<T> {
private readonly cache = new Map<string, CacheEntry<T>>();
private hits = 0;
private misses = 0;
get(key: string): T | undefined {
const entry = this.cache.get(key);
if (!entry) {
this.misses++;
return undefined;
}
const isExpired = Date.now() - entry.timestamp > entry.ttlMs;
if (isExpired) {
this.cache.delete(key);
this.misses++;
return undefined;
}
this.hits++;
return entry.data;
}
set(key: string, data: T, ttlMs: number = 300_000): void {
// Immutable: creiamo un nuovo entry, non mutiamo
const entry: CacheEntry<T> = {
data,
timestamp: Date.now(),
ttlMs,
};
this.cache.set(key, entry);
}
/** Metriche di efficienza: un alto hit rate = meno energia consumata */
getEfficiencyReport(): object {
const total = this.hits + this.misses;
const hitRate = total > 0 ? (this.hits / total) * 100 : 0;
// Stima: ogni cache hit risparmia ~0.5-2ms di CPU + network I/O
const estimatedSavedWh = this.hits * 0.000002; // ~2mWh per hit
return {
hits: this.hits,
misses: this.misses,
hitRate: hitRate.toFixed(1) + '%',
estimatedSavedWh: estimatedSavedWh.toFixed(6),
};
}
}
// Uso:
// const cache = new GreenCache<UserProfile>();
// cache.set('user:123', profile, 600_000); // TTL 10 minuti
// const cached = cache.get('user:123'); // O(1), zero network
3. Dávkování operací
Agregace více operací do jednoho požadavku snižuje režii sítě, serializaci/deserializaci a cykly CPU věnované správě připojení.
class BatchProcessor {
private readonly queue: Array<{ id: string; resolve: Function }> = [];
private timer: ReturnType<typeof setTimeout> | null = null;
private readonly batchSize: number;
private readonly delayMs: number;
constructor(batchSize = 50, delayMs = 100) {
this.batchSize = batchSize;
this.delayMs = delayMs;
}
async fetchItem(id: string): Promise<unknown> {
return new Promise((resolve) => {
this.queue.push({ id, resolve });
if (this.queue.length >= this.batchSize) {
this.flush();
} else if (!this.timer) {
this.timer = setTimeout(() => this.flush(), this.delayMs);
}
});
}
private async flush(): Promise<void> {
if (this.timer) {
clearTimeout(this.timer);
this.timer = null;
}
// Svuota la coda in modo immutabile
const batch = [...this.queue];
this.queue.length = 0;
const ids = batch.map(item => item.id);
// UNA sola richiesta invece di N richieste separate
// Risparmio: ~95% overhead TCP/TLS per batch da 50
const results = await fetch('/api/batch', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ ids }),
}).then(r => r.json());
batch.forEach((item, i) => item.resolve(results[i]));
}
}
Zásada 2: Energetická účinnost
Energetická účinnost prostředek aby software odvedl stejné množství práce s menší energií. Energie je prostředním faktorem mezi softwarem a emisemi uhlíku: snížením spotřebované energie se emise úměrně sníží, bez ohledu na to zdroj energie.
Energetické účinnosti v softwaru je dosaženo na několika úrovních: aplikace (algoritmy a architektura), runtime (řízení zdrojů a konkurence), e infrastrukturní (velikost serveru a automatické škálování).
Spotřeba energie podle programovacího jazyka
| Jazyk | Relativní energie | Relativní čas | Relativní paměť |
|---|---|---|---|
| C | 1,00x (základní hodnota) | 1,00x | 1,00x |
| Rez | 1,03x | 1,04x | 1,54x |
| Jáva | 1,98x | 1,89x | 6,01x |
| Go | 3,23x | 2,83x | 1,05x |
| TypeScript | 21,50x | 46,20x | 4,69x |
| Krajta | 75,88x | 71,90x | 2,80x |
Zdroj: „Energetická účinnost napříč programovacími jazyky“ — University of Minho (2017, aktualizováno 2021)
Upozornění: Jazyk není všechno
Výše uvedená data měří syntetické benchmarky. V reálném světě, volba algoritmu, architektura a I/O vzory mají často vliv lepší než výběr jazyka. Dobře navržená aplikace Python s inteligentním ukládáním do mezipaměti může být ekologičtější špatně navržené C aplikace, která s každým požadavkem vše přepočítává.
Vzorce energetické účinnosti v kodexu
/**
* Pattern Green: Lazy Initialization
* Calcola risorse costose SOLO quando effettivamente necessarie.
* Risparmio stimato: 30-70% CPU per richieste che non accedono
* a tutte le proprietà dell'oggetto.
*/
public final class LazyReport {
private final String reportId;
private final Supplier<ReportData> dataSupplier;
private volatile ReportData cachedData;
public LazyReport(String reportId, Supplier<ReportData> dataSupplier) {
this.reportId = reportId;
this.dataSupplier = dataSupplier;
// NON calcoliamo i dati nel costruttore
}
public ReportData getData() {
// Double-checked locking: calcolo solo al primo accesso
ReportData result = cachedData;
if (result == null) {
synchronized (this) {
result = cachedData;
if (result == null) {
cachedData = result = dataSupplier.get();
}
}
}
return result;
}
public String getReportId() {
return reportId; // Zero CPU: nessun calcolo costoso
}
}
// Confronto energetico:
// - Eager: 100 report creati, tutti calcolano dati = 100 query DB
// - Lazy: 100 report creati, solo 10 consultati = 10 query DB
// Risparmio: 90% energia per le query non necessarie
import csv
from typing import Generator, Iterator
def process_large_csv_green(filepath: str) -> Generator[dict, None, None]:
"""
Pattern Green: Streaming con generatore.
Elabora file da milioni di righe senza caricare tutto in memoria.
- Memoria: O(1) invece di O(n)
- Energia: proporzionale solo alle righe effettivamente processate
"""
with open(filepath, 'r', encoding='utf-8') as f:
reader = csv.DictReader(f)
for row in reader:
# Yield una riga alla volta: zero allocazione bulk
yield {
"id": row["id"],
"value": float(row["amount"]),
"processed": True,
}
def aggregate_green(rows: Iterator[dict], limit: int = 1000) -> dict:
"""
Aggregazione streaming: calcola statistiche senza
materializzare l'intera collezione in memoria.
"""
total = 0.0
count = 0
max_val = float('-inf')
for row in rows:
total += row["value"]
count += 1
if row["value"] > max_val:
max_val = row["value"]
if count >= limit:
break # Early termination: non sprechiamo energia
return {
"count": count,
"total": round(total, 2),
"average": round(total / count, 2) if count > 0 else 0,
"max": max_val,
}
# Confronto:
# Anti-pattern: data = list(csv.DictReader(f)) # Carica TUTTO in RAM
# - File 2GB = 2GB RAM + swap potenziale + GC overhead
# Pattern green: usa generatore + early termination
# - File 2GB = ~1KB RAM costante, si ferma appena ha abbastanza dati
Princip 3: Povědomí o uhlíku
Povědomí o uhlíku je nejinovativnější princip: dělat sám množství práce, ale v době nebo místě, kde je elektřina nejčistší. Intenzita uhlíku v elektrické síti se výrazně liší v závislosti na denní době, ročním období, na povětrnostní podmínky a energetický mix regionu.
Uhlíková intenzita elektrické sítě podle zemí (2024–2025)
| Země/oblast | gCO₂ekv/kWh (průměr) | Hlavní energetický mix | Klasifikace |
|---|---|---|---|
| Švédsko | ~12 | Vodní + jaderná | Velmi nízká |
| Francie | ~56 | Jaderná (70 %) | Nízký |
| Kanada | ~120 | Vodní + plyn | Průměrný |
| Německo | ~350 | Obnovitelné zdroje + uhlí | Vysoký |
| USA (průměr) | ~390 | Plyn + uhlí + obnovitelné zdroje | Vysoký |
| Polsko | ~650 | Uhlí (dominantní) | Velmi vysoká |
| Indie | ~700 | Uhlí (převládající) | Velmi vysoká |
Povědomí o uhlíku je implementováno pomocí dvou doplňkových strategií definovaných GSF:
Časové posouvání
Přesunout pracovní zátěž časem provádět je při uhlíkové intenzitě mřížky je nižší. Příklad: plánování nočních dávkových úloh při větrné energii produkuje více. Studie ukazují snížení 45–55 % emisí bez vliv na vnímaný výkon.
Prostorové posouvání
Přesunout pracovní zátěž ve vesmíru, provozovat je v datových centrech umístěných v regionech s čistší energií. Pokud má váš poskytovatel cloudu regiony ve Švédsku (12 gCO₂/kWh) a v Polsku (650 gCO₂/kWh) volba Švédska snižuje emise o 98 % za stejnou pracovní zátěž.
API a nástroje pro povědomí o uhlíku
Různé služby poskytují v reálném čase data o uhlíkové intenzitě elektrické sítě, umožňuje softwaru činit informovaná rozhodnutí.
Hlavní poskytovatelé dat o intenzitě uhlíku
| Poskytovatelé | Krytí | Typ dat | Přístup |
|---|---|---|---|
| Mapy elektřiny | Globální (160+ zón) | Reálný čas + předpověď | API (dostupná bezplatná úroveň) |
| WattTime | USA, Evropa, Austrálie | Mezní emise | API (bezplatná registrace) |
| Carbon Intensity UK | Velká Británie | Předpověď na 96h + historická | Bezplatné veřejné API |
| Ember | Globální (200+ zemí) | Roční/měsíční průměr | Otevřít datové sady |
interface CarbonIntensityData {
readonly zone: string;
readonly carbonIntensity: number; // gCO2eq/kWh
readonly fossilFuelPercentage: number;
readonly datetime: string;
}
interface ScheduleDecision {
readonly shouldRun: boolean;
readonly currentIntensity: number;
readonly threshold: number;
readonly reason: string;
}
const CARBON_THRESHOLD_LOW = 100; // gCO2eq/kWh
const CARBON_THRESHOLD_HIGH = 400; // gCO2eq/kWh
async function getCarbonIntensity(zone: string): Promise<CarbonIntensityData> {
const response = await fetch(
`https://api.electricitymap.org/v3/carbon-intensity/latest?zone=${zone}`,
{
headers: {
'auth-token': process.env['ELECTRICITY_MAPS_TOKEN'] ?? '',
},
}
);
if (!response.ok) {
throw new Error(`Carbon API error: ${response.status}`);
}
return response.json();
}
async function shouldRunWorkload(
zone: string,
priority: 'low' | 'medium' | 'high'
): Promise<ScheduleDecision> {
const data = await getCarbonIntensity(zone);
const intensity = data.carbonIntensity;
// Alta priorità: esegui sempre (ma logga le emissioni)
if (priority === 'high') {
return {
shouldRun: true,
currentIntensity: intensity,
threshold: Infinity,
reason: 'High priority: executing regardless of carbon intensity',
};
}
// Media priorità: esegui sotto la soglia alta
if (priority === 'medium') {
return {
shouldRun: intensity < CARBON_THRESHOLD_HIGH,
currentIntensity: intensity,
threshold: CARBON_THRESHOLD_HIGH,
reason: intensity < CARBON_THRESHOLD_HIGH
? 'Medium priority: intensity acceptable'
: 'Medium priority: deferring to lower intensity period',
};
}
// Bassa priorità: esegui solo con energia pulita
return {
shouldRun: intensity < CARBON_THRESHOLD_LOW,
currentIntensity: intensity,
threshold: CARBON_THRESHOLD_LOW,
reason: intensity < CARBON_THRESHOLD_LOW
? 'Low priority: clean energy available'
: 'Low priority: waiting for cleaner energy window',
};
}
// Esempio d'uso:
// const decision = await shouldRunWorkload('IT-SO', 'low');
// if (decision.shouldRun) {
// await runBatchJob();
// } else {
// scheduleRetry(decision);
// }
Carbon Aware SDK od GSF
Green Software Foundation vyvíjí Carbon Aware SDK, nástroj s otevřeným zdrojovým kódem který odhaluje REST API a CLI pro dotazování na data o intenzitě uhlíku od více poskytovatelů (WattTime, mapy elektřiny). SDK umožňuje implementovat jak časový, tak prostorový posun posun pomocí několika řádků kódu, přímo integrující povědomí o uhlíku do CI/CD potrubí a orchestrační systémy.
Princip 4: Hardwarová efektivita
Hardwarová efektivita je to princip nejčastěji podceňovaný. Výroba elektronického zařízení generuje obrovské množství CO₂: to je ono vtělený uhlík (vložený uhlík). Pro notebook asi 70–80 % z celkových emisí jeho životního cyklu pochází z výroby, ne z používání.
Ztělesněný uhlík běžných zařízení
| Zařízení | Embodied Carbon (kg CO₂ekv) | Průměrný život | Roční amortizace |
|---|---|---|---|
| chytré telefony | ~70 | 3 roky | ~23 kg CO₂ekv/rok |
| Notebooky | ~300-400 | 4 roky | ~75-100 kg CO₂ekv./rok |
| Servery (stojany) | ~1 000-2 000 | 5-6 let | ~200-400 kg CO₂ekv./rok |
| Server GPU (AI) | ~5 000-8 000 | 3-5 let | ~1 000–2 600 kg CO₂ekv./rok |
Jako vývojáři můžeme ovlivnit efektivitu hardwaru dvěma způsoby:
Prodlužte životnost hardwaru
- Napište software, který je kompatibilní se starším hardwarem
- Vyhněte se závislosti na nepotřebných funkcích specifických pro hardware
- Podporujte plynulou degradaci na starších zařízeních
- Optimalizujte, abyste snížili minimální systémové požadavky
Maximalizujte využití
- Preferujte bezserverové architektury nebo optimalizované kontejnery
- Implementujte automatické škálování, abyste se vyhnuli nečinným serverům
- Pro nekritické úlohy používejte okamžité/preemptivní instance
- Konsolidujte služby a zvyšte průměrné využití serveru
Vliv dimenzování
Server se středním využitím 15 % vyplýtvá 85 % vloženého uhlíku. Přineste použití do 60 % snižuje ekologické náklady na jednotku práce o 4krát. Cloud computing a bezserverové řešení s tím nesmírně pomáhají, sdílení hardwaru mezi tisíce uživatelů a amortizace ztělesněného uhlíku napříč různými pracovními zátěžemi.
Zásada 5: Měření – specifikace SCI
"Pokud to nemůžete změřit, nemůžete to zlepšit." Princip měření je most mezi teorií a praxí. Tam Software Carbon Intensity (SCI). je specifikace vyvinutý společností GSF ke kvantifikaci uhlíkových emisí softwarové aplikace. V roce 2024 byla ratifikována jako mezinárodní standard ISO/IEC 21031:2024.
Formule SCI
Vzorec SCI vypočítá a splátky, ne celkem. To je základní: cíl je snížit intenzitu uhlíku na pracovní jednotku, nejen celkem emisí (které by mohly klesnout pouhým omezením používání softwaru).
Formule SCI
SCI = ((E x I) + M)/R
| Komponent | Význam | Jednotka | Jak měřit |
|---|---|---|---|
| E | Energie spotřebovaná softwarem | kWh | Měřič výkonu, RAPL, CodeCarbon, Cloud monitoring |
| I | Uhlíková náročnost elektrické sítě | gCO₂ekv/kWh | Electricity Maps API, WattTime, datová sada Ember |
| M | Ztělesněný karbon použitého hardwaru | gCO₂ekv | Výrobce datového listu, databáze LCA, poskytovatel cloudu |
| R | Funkční jednotka | Variabilní | Na volání API, na uživatele, na transakci, na token |
Praktický příklad: Výpočet SCI pro REST API
Pojďme vypočítat skóre SCI pro mikroslužbu API, která zpracovává 100 000 požadavků za den, hostované na cloudovém serveru v Německu.
# === Dati di Input ===
# E (Energia): il server consuma in media 150W
# Funziona 24h/giorno = 150W * 24h = 3.600 Wh = 3.6 kWh/giorno
E = 3.6 # kWh/giorno
# I (Intensità carbonica): grid tedesca media
I = 350 # gCO2eq/kWh (media Germania 2024-2025)
# M (Embodied carbon): server rack con 5 anni di vita
# Embodied totale: 1.500 kgCO2eq
# Ammortamento giornaliero: 1.500.000 / (5 * 365) = 821.9 gCO2eq/giorno
M = 822 # gCO2eq/giorno
# R (Functional unit): 100.000 richieste API al giorno
R = 100_000
# === Calcolo SCI ===
# Emissioni operative: E * I = 3.6 * 350 = 1.260 gCO2eq/giorno
operational = E * I # 1.260 gCO2eq
# Totale giornaliero: (E * I) + M = 1.260 + 822 = 2.082 gCO2eq/giorno
total_daily = operational + M # 2.082 gCO2eq
# SCI = totale / R = 2.082 / 100.000 = 0.02082 gCO2eq per richiesta
SCI = total_daily / R # 0.02082 gCO2eq/richiesta
# === Confronto: stessa API ospitata in Svezia ===
I_sweden = 12 # gCO2eq/kWh
operational_sweden = E * I_sweden # 3.6 * 12 = 43.2 gCO2eq
total_sweden = operational_sweden + M # 43.2 + 822 = 865.2 gCO2eq
SCI_sweden = total_sweden / R # 0.00865 gCO2eq/richiesta
# Riduzione: da 0.02082 a 0.00865 = -58.4% emissioni
# Solo cambiando la regione di hosting!
Volba funkční jednotky (R)
Funkční jednotka R je zásadní a musí odrážet skutečnou hodnotu softwaru. Špatný výběr R může způsobit, že skóre SCI bude zavádějící. Zde jsou doporučené možnosti podle typu aplikace:
- API/mikroslužby: na žádost API nebo na dokončenou transakci
- Webové aplikace: na aktivního uživatele nebo na relaci
- Modely AI/ML: odvozením, vygenerovaným tokenem nebo tréninkem
- Dávkové zpracování: za zpracovaný záznam nebo zpracovaný GB
- Streamování: za streamovanou minutu nebo za přenesený GB
SCI pro AI: Nový standard
V roce 2025 GSF specifikaci ratifikovala SCI pro AI, rozšíření SCI který pokrývá celý životní cyklus systémů umělé inteligence: od školení po inferenci, procházející přesným doladěním a RAG. Specifikace podporuje několik typů systémů: klasické strojové učení, počítačové vidění, NLP, generativní AI a agentní systémy s vyhrazenými funkčními jednotkami, jako je např žeton pro jazykové modely e odvození pro klasifikátory.
from codecarbon import EmissionsTracker
from dataclasses import dataclass
@dataclass(frozen=True)
class SCIResult:
"""Risultato immutabile del calcolo SCI."""
operational_emissions_g: float # E * I in gCO2eq
embodied_emissions_g: float # M in gCO2eq
functional_units: int # R
sci_score: float # SCI in gCO2eq/R
region: str
@property
def total_emissions_g(self) -> float:
return self.operational_emissions_g + self.embodied_emissions_g
def measure_api_sci(
handler_fn,
requests_count: int,
server_embodied_gco2: float = 822.0, # giornaliero
country_iso_code: str = "DEU",
) -> SCIResult:
"""
Misura lo SCI score di una funzione API usando CodeCarbon.
CodeCarbon traccia automaticamente E e calcola E*I basandosi
sulla grid locale.
"""
tracker = EmissionsTracker(
project_name="api-sci-measurement",
country_iso_code=country_iso_code,
log_level="warning",
)
tracker.start()
# Esegui il workload
for _ in range(requests_count):
handler_fn()
# Ottieni emissioni operative (E * I) in kg, convertiamo in grammi
emissions_kg = tracker.stop()
operational_g = emissions_kg * 1000
# Calcola SCI
total = operational_g + server_embodied_gco2
sci = total / requests_count if requests_count > 0 else 0
return SCIResult(
operational_emissions_g=round(operational_g, 4),
embodied_emissions_g=server_embodied_gco2,
functional_units=requests_count,
sci_score=round(sci, 6),
region=country_iso_code,
)
# Esempio d'uso:
# result = measure_api_sci(my_handler, requests_count=10000)
# print(f"SCI Score: {result.sci_score} gCO2eq/request")
# print(f"Total: {result.total_emissions_g} gCO2eq")
Zásada 6: Závazky v oblasti klimatu
Pochopení terminologie závazků v oblasti klimatu je nezbytné, abychom se vyhnuli jejímu pádu greenwashing. GSF jasně rozlišuje tři přístupy s úrovněmi velmi rozdílná účinnost.
Porovnání závazků v oblasti klimatu
| Přístup | Definice | Účinnost | Rizika |
|---|---|---|---|
| Uhlíkově neutrální | Kompenzujte emise uhlíkovými kredity | Průměrný | Variabilní kvalita kreditů, nesnižuje reálné emise |
| Čistá nula | Snižte emise o 90 %+ a kompenzujte zbytky | Vysoký | Často vzdálené časové osy (2040–2050) |
| Snížení emisí uhlíku | Eliminujte emise u zdroje | Maximum | Vysoké počáteční náklady, vyžaduje hlubokou transformaci |
Pozor na Greenwashing
Specifikace SCI nepřiznává kompenzace (kompenzace) jako mechanismus pro snížit skóre SCI. Pouze skutečné snížení emisí – prostřednictvím méně energie, energie čistší nebo efektivnější hardware – snižte SCI. To je volba rozhodl GSF podpořitsnížení (eliminace) ve srovnání s neutralizace (kompenzace).
Pro nás vývojáře se tento princip promítá do: nejprve snížit, pak kompenzovat. Každá optimalizace kódu, každá efektivnější architektonická volba, každá migrace na jednu region zelenějších mraků je skutečným snížením. Uhlíkové kredity jsou poslední možností.
Zásada 7: Efektivita vytváření sítí
Každý bajt přenesený po síti má náklady na energii. Přenos dat přes internet spotřebovává energii pro směrovače, přepínače, mobilní antény a podmořské kabely. Snižte provoz v síti je to přímá páka na snižování emisí.
Strategie pro snížení síťového provozu
- Komprese: povolit gzip/brotli pro odpovědi HTTP (snížení o 60–90 %)
- Optimalizace obrázků: používat moderní formáty (WebP, AVIF) a responzivní obrázky
- Líné načítání: načítat zdroje pouze v případě potřeby
- Efektivní API: GraphQL požadovat pouze nezbytná pole, stránkování, filtry na straně serveru
- CDN: poskytovat obsah z okrajového umístění nejblíže uživateli
- Záhlaví mezipaměti: ETag, Cache-Control, aby se zabránilo nadbytečným přenosům
- Rozdělení kódu: načíst pouze JavaScript potřebný pro aktuální stránku
# Nginx: configurazione ottimizzata per green networking
# Compressione Brotli (superiore a gzip: -20% dimensioni)
brotli on;
brotli_comp_level 6;
brotli_types text/html text/css application/javascript application/json;
# Cache aggressiva per asset statici (1 anno)
location /assets/ {
expires 1y;
add_header Cache-Control "public, immutable";
add_header Vary "Accept-Encoding";
}
# Cache per API responses con ETag
location /api/ {
add_header Cache-Control "public, max-age=300"; # 5 minuti
etag on;
}
# Risparmio stimato su 1M pagine/giorno:
# - Senza compressione: ~2TB/giorno trasferiti
# - Con Brotli + cache: ~200GB/giorno trasferiti
# - Riduzione: ~90% traffico = ~90% energia di rete
Princip 8: Formování poptávky
Il Formování poptávky je nejambicióznější princip: místo přizpůsobování software k dostupné energii (jako v Carbon Awareness), otázka sama o sobě uživatele na základě energetických podmínek. To může znamenat nabídnout verzi snížený provoz během období s vysokou intenzitou uhlíku nebo ladný degradace nejdražší funkce.
interface VideoQualityConfig {
readonly resolution: '4K' | '1080p' | '720p' | '480p';
readonly bitrate: number; // kbps
readonly estimatedKwhPerHour: number;
}
const QUALITY_PROFILES: Record<string, VideoQualityConfig> = {
ultra: { resolution: '4K', bitrate: 25000, estimatedKwhPerHour: 0.042 },
high: { resolution: '1080p', bitrate: 8000, estimatedKwhPerHour: 0.018 },
medium: { resolution: '720p', bitrate: 5000, estimatedKwhPerHour: 0.012 },
eco: { resolution: '480p', bitrate: 2500, estimatedKwhPerHour: 0.007 },
};
function selectQualityByCarbon(
carbonIntensity: number, // gCO2eq/kWh
userPreference: string = 'auto'
): VideoQualityConfig {
// Se l'utente ha scelto manualmente, rispetta la scelta
if (userPreference !== 'auto') {
return QUALITY_PROFILES[userPreference] ?? QUALITY_PROFILES['high'];
}
// Demand shaping: adatta la qualità all'energia disponibile
if (carbonIntensity < 50) {
return QUALITY_PROFILES['ultra']; // Energia pulita: massima qualità
}
if (carbonIntensity < 200) {
return QUALITY_PROFILES['high']; // Moderata: alta qualità
}
if (carbonIntensity < 400) {
return QUALITY_PROFILES['medium']; // Alta: qualità ridotta
}
return QUALITY_PROFILES['eco']; // Critica: modalità eco
}
// Trasparenza: mostra all'utente il motivo della scelta
function getEcoMessage(config: VideoQualityConfig, intensity: number): string {
const saved = QUALITY_PROFILES['ultra'].estimatedKwhPerHour
- config.estimatedKwhPerHour;
const savedPercent = (saved / QUALITY_PROFILES['ultra'].estimatedKwhPerHour * 100)
.toFixed(0);
return `Streaming in ${config.resolution} (grid: ${intensity} gCO2/kWh). `
+ `Risparmio energetico: ${savedPercent}% rispetto al 4K.`;
}
Formování poptávky v reálném světě
Firmy jako Google e Microsoft již realizují formy poptávky tvarování ve svých datových centrech, přesunutí zátěže indexování a školení ML do časů a regionů s čistší energií. Dokonce i spotřebitelské služby, jako je např ekologický režim z některé služby streamování videa jsou příklady formování poptávky aplikovaného na straně uživatele.
Nástroje a rámce měření
Ekosystém zelených softwarových nástrojů rychle roste. Zde jsou nejužitečnější nástroje vyzrálé a přijaté k měření a snižování uhlíkového dopadu softwaru.
Porovnání měřicích nástrojů
| Nástroj | Typ | Jazyky/platformy | Use Case |
|---|---|---|---|
| KódCarbon | Knihovna Python | Python (PyTorch, TF, HF) | Sledování emisí, školení ML a skripty |
| Cloudová uhlíková stopa | Palubní deska + CLI | AWS, GCP, Azure | Monitorování emisí cloudové infrastruktury |
| Carbon Aware SDK | SDK + REST API | Polyglot (.NET, REST) | Plánování s ohledem na uhlík a optimalizace regionů |
| Scaphandre | Monitorovací agent | Linux (holý kov + VM) | Monitorování napájení na úrovni procesu |
| Nástroj Zelené metriky | CI/CD platforma | Jakékoli (kontejnerové) | Energetický benchmark v potrubí CI |
| Climatiq API | REST API | Žádný | Emisní faktory pro výpočty LCA |
| Kumulátor | Python Toolkit | Krajta | Výpočet uhlíkové stopy + přenos dat ML |
CodeCarbon: Sledování emisí v Pythonu
KódCarbon je nejoblíbenější knihovna pro sledování emisí CO₂ kódu Python. Sledujte CPU, GPU a RAM za běhu a kombinujte data s intenzitou regionální uhlík pro odhad emisí. Nativně se integruje s PyTorch, TensorFlow a Objímání obličeje.
from codecarbon import track_emissions, EmissionsTracker
import pandas as pd
import numpy as np
# Metodo 1: Decoratore (più semplice)
@track_emissions(
project_name="data-pipeline",
output_dir="./emissions",
country_iso_code="ITA",
)
def run_data_pipeline(input_path: str) -> pd.DataFrame:
"""Pipeline di elaborazione dati con tracking automatico."""
df = pd.read_csv(input_path)
# ... trasformazioni ...
result = df.groupby("category").agg({
"revenue": ["sum", "mean"],
"transactions": "count",
})
return result
# Metodo 2: Context manager (più controllo)
def train_model_green(X_train, y_train, X_test, y_test):
"""Training con misurazione granulare delle emissioni."""
tracker = EmissionsTracker(
project_name="model-training",
measure_power_secs=15, # Campiona ogni 15 secondi
tracking_mode="process", # Solo il processo corrente
country_iso_code="ITA",
save_to_api=False, # Salva solo localmente
)
tracker.start()
# Fase 1: Preprocessing
tracker.start_task("preprocessing")
X_scaled = preprocess(X_train)
emissions_preprocess = tracker.stop_task("preprocessing")
# Fase 2: Training
tracker.start_task("training")
model = train(X_scaled, y_train)
emissions_training = tracker.stop_task("training")
# Fase 3: Evaluation
tracker.start_task("evaluation")
metrics = evaluate(model, X_test, y_test)
emissions_eval = tracker.stop_task("evaluation")
total_emissions = tracker.stop()
return {
"model": model,
"metrics": metrics,
"emissions": {
"preprocessing_kgCO2": emissions_preprocess,
"training_kgCO2": emissions_training,
"evaluation_kgCO2": emissions_eval,
"total_kgCO2": total_emissions,
},
}
Cloud Carbon Footprint: Cloud Infrastructure Monitoring
Cloudová uhlíková stopa (CCF) je nástroj s otevřeným zdrojovým kódem, který odhaduje emise CO₂ cloudové infrastruktury na AWS, Google Cloud a Azure. Analyzujte fakturační údaje a slouží k výpočtu spotřebované energie a souvisejících emisí a nabízí interaktivní řídicí panel a optimalizační doporučení.
# Installazione
npm install -g @cloud-carbon-footprint/cli
# Esecuzione (richiede credenziali cloud configurate)
ccf --startDate 2025-01-01 --endDate 2025-03-31
# Output esempio:
# +------------+----------+-----------+----------+
# | Servizio | kWh | kgCO2eq | Costo |
# +------------+----------+-----------+----------+
# | EC2 | 1,247.3 | 436.6 | $892.40 |
# | S3 | 89.2 | 31.2 | $45.60 |
# | RDS | 456.8 | 159.9 | $312.00 |
# | Lambda | 12.4 | 4.3 | $8.20 |
# +------------+----------+-----------+----------+
# | TOTALE | 1,805.7 | 632.0 | $1,258.2 |
# +------------+----------+-----------+----------+
#
# Top raccomandazioni:
# 1. Right-size EC2 i3.xlarge (util. 12%) -> risparmio 340 kgCO2/mese
# 2. Migra a Graviton (ARM) -> risparmio 15% energia
# 3. Abilita S3 Intelligent Tiering -> risparmio 40% storage
Průmyslové přijetí a trendy
Podle zprávy Stav zeleného softwaru 2025 GSF, uplatňování zásad zeleného softwaru rychle roste. Trh zelených datových center je ceněn přibližně 95 miliard dolarů v roce 2025 a očekává se, že dosáhne i 396 miliard do roku 2034. Softwarová komponenta je nejrychleji rostoucí kategorií, s CAGR 30,4 %.
Velké technologické zelené softwarové iniciativy
| Agentura | Objektivní | Klíčové iniciativy |
|---|---|---|
| Microsoft | Uhlíkový zápor do roku 2030 | Řídicí panel dopadu emisí, Windows Update s ohledem na emise uhlíku |
| 24/7 bezuhlíková energie do roku 2030 | Carbon-inteligentní výpočetní, Carbon Footprint palubní deska | |
| AWS | Čistá nula do roku 2040 | Customer Carbon Footprint Tool, Graviton (energetická účinnost) |
| Půl | Čistý nulový hodnotový řetězec do roku 2030 | Otevřený zdroj udržitelného výzkumu AI, efektivita datových center |
Role regulace
Evropská unie vede regulaci s Corporate Sustainability Reporting směrnice (CSRD), který vyžaduje, aby velké společnosti hlásily emise v rozsahu 1, 2 a 3. Pro softwarové společnosti rozsah 3 (nepřímé emise z dodavatelského řetězce, včetně použití softwaru zákazníky) často představuje 80–90 % z celkového počtu. Díky tomu měření SCI neexistuje více volitelný, ale požadavek na shodu.
Praktický plán: Od nuly k zelenému softwaru
Implementace principů zeleného softwaru nevyžaduje revoluci. Zde je progresivní plán integrovat uhlíkovou účinnost do vývojového cyklu.
Fáze 1: Měření (1.–2. týden)
- Integrovat KódCarbon o Cloudová uhlíková stopa ve vašem projektu
- Definujte funkční jednotka (R) pro váš software
- Vypočítejte základní skóre SCI
- Zdokumentujte aktuální spotřebu energie klíčových služeb
Fáze 2: Optimalizace (3.–6. týden)
- Nářadí strategické ukládání do mezipaměti snížit opakované výpočty
- Použít dávkování pro I/O a databázové operace
- Optimalizujte kritické algoritmy (profilování → hotspot → vylepšení)
- Schopnost komprese e líné načítání ve frontendu
- Zkontrolujte dimenzování serveru (správná velikost)
Fáze 3: Carbon-Aware (7.–10. týden)
- Integruje API z uhlíková intenzita (Mapy elektřiny, WattTime)
- Nářadí časový posun pro nekritické dávkové úlohy
- Vyhodnoťte prostorový posun: Je současná cloudová oblast nejzelenější?
- Přidejte metriky s ohledem na uhlík monitorovací palubní deska
Fáze 4: Kultura (pokračování)
- Integrujte to SCI skóre v CI/CD jako měřítko kvality
- Trénujte tým Certifikace Green Software Practitioner GSF
- Zahrňte uhlíkový dopad kontrola kódu
- Sdílejte výsledky: transparentnost v oblasti emisí a pokroku
Rychlé vítězství: 5 nejúčinnějších akcí
- 1. Povolit kompresi Brotli u všech odpovědí HTTP (→ -70 % síťového provozu)
- 2. Implementujte ukládání do mezipaměti s příslušnými TTL (→ -50-90 % DB dotazů)
- 3. Vyberte si nejzelenější dostupnou cloudovou oblast (→ až -98 % provozních emisí)
- 4. Servery správné velikosti a povolení automatického škálování (→ -30-60 % energie při nečinnosti)
- 5. Používejte líné načítání a rozdělování kódu ve frontendu (→ -40-60% přenos dat)
Závěr
8 principů Green Software Foundation není teoretickým rámcem vzdáleným realitě každodenní vývoj. jsem jeden praktický objektiv prostřednictvím kterého vyhodnocovat každé rozhodnutí technika: od výběru algoritmu po oblast nasazení, od strategie ukládání do mezipaměti až po politika škálování.
Specifikace SCI (ISO/IEC 21031:2024) poskytuje společný jazyk pro měření pokrok a ekosystém nástrojů – od CodeCarbon po sadu Carbon Aware SDK Od teorie k praxi je možné přejít s minimálními investicemi.
S tím, jak datová centra začínají spotřebovávat více 1 000 TWh ročně a regulace Evropská unie (CSRD), která vyžaduje transparentnost v oblasti emisí, zelený software již není a "hezké mít": je to a konkurenční a regulační požadavek. Nejlepší čas na to začátek byl včera. Druhý nejlepší čas je teď.
„Nejzelenější software není ten, který vyrovnává emise, ale co s nimi dělá produkuje méně na jednotku hodnoty. Skutečná udržitelnost se měří pomocí SCI, ne s uhlíkovými kredity." — Základní princip Green Software Foundation
Zdroje, kde se dozvíte více
- Naučte se zelený software — learn.greensoftware.foundation (bezplatný kurz)
- Specifikace SCI — sci.greensoftware.foundation (norma ISO/IEC 21031)
- Carbon Aware SDK — github.com/Green-Software-Foundation/carbon-aware-sdk
- KódCarbon — codecarbon.io (sledování emisí Pythonu)
- Mapy elektřiny — app.electricitymaps.com (intenzita uhlíku v reálném čase)
- Cloudová uhlíková stopa — cloudcarbonfootprint.org (sledování v cloudu)
- Green Software Practitioner — Oficiální certifikace GSF
V dalším článku ze série se budeme hlouběji zabývat udržitelný designový vzor se specifickými architekturami pro mikroslužby, frontendy a datové kanály, s metrikami úspor měřitelné pro každý vzor.







