Green Software Principles — Karbonu Mühendislik Disiplinine Çevirmek#
"Software is never carbon-neutral; it's just CO₂ that you decided not to measure." — Green Software Foundation
Bu rehber Green Software Foundation'un 8 prensibini somut mühendislik kararlarına çevirir, SCI metric'i ile ölçüm yapmayı, ve "yeşil yazılım"ı buzzword'den CI'da pass/fail metric'e dönüştürmeyi anlatır.
🎯 Niye 2026'da Önemli?#
Yasal zorunluluklar#
- EU CSRD (Corporate Sustainability Reporting Directive) — büyük şirket emisyon raporlamak zorunda (2024 yürürlük, kademeli kapsama)
- US SEC Climate Rule — public şirketler Scope ½/3 raporlamak
- EU Cyber Resilience Act + Sustainability — yazılımın karbon impact'i
- ISO 14001 ve benzeri standartlar yazılım gözlemine girdi
İş etki#
- Müşteri talebi — RFP'lerde "carbon disclosure" sorusu standart
- Yatırımcı baskısı — ESG metrikleri funding kararlarında
- Maliyet — yeşil = genelde verimli = ucuz (cost ↔ carbon dual optimize)
- Yetenek çekme — Gen-Z mühendislerin %70'i sürdürülebilirliği iş seçiminde sayar
🔑 2026'da "biz yeşili önemsemiyoruz" demek, "biz GDPR uyumu yapmıyoruz" demek gibi imkansızlaşıyor.
🌳 Green Software Foundation — 8 Prensip#
1. Carbon Efficiency#
Daha az karbon emisyonu ile aynı işi yap.
Pratik: Kod düzeyinde optimize et — daha az CPU, daha az IO.
2. Energy Efficiency#
Daha az watt ile aynı işi yap.
Pratik: - ARM/Graviton CPUs (per-watt 2-4x verimli) - Compiled languages (Go, Rust) interpreted'a göre verimli - Lazy evaluation, vectorization
3. Carbon Awareness#
Düşük-karbon zaman/yerde çalış.
Pratik: - Batch job'ları gece (rüzgar fazla, talep az) çalıştır - Trainging job'u carbon-low region'da yap
4. Hardware Efficiency#
Eski hardware'i daha verimli kullan; gereksiz yenilemekten kaçın.
Pratik: - "Embodied carbon" hardware üretiminden = uzun ömürlü server - Refurbished hardware on-prem - Cloud'da utilization artır → daha az fiziksel server
5. Measurement#
Ölçmediğini iyileştiremezsin.
Pratik: - SCI metric (aşağıda) - Cloud Carbon Footprint - Kepler (eBPF tabanlı pod-level energy)
6. Climate Commitments#
Şirketinin commitment'larını anla, destekle.
Pratik: ISO 14064, GHG Protocol, SBTi (Science Based Targets initiative).
7. Networking#
Data movement = enerji. Minimize et.
Pratik: - CDN (origin'den uzaklaştır) - Compression - Smaller payload (Protobuf vs JSON, gRPC) - Cache aggressive
8. Demand Shaping#
Uygulamayı yüke karşı esnek tasarla.
Pratik: - "Eco mode": düşük öncelik istek arka planda - Adaptive video quality - Gece batch yerine real-time
📊 SCI — Software Carbon Intensity#
SCI = ((E × I) + M) / R
E = Energy (kWh) uygulamanın tükettiği elektrik
I = Carbon Intensity (gCO₂eq/kWh) region+saat bazında elektriğin karbonu
M = Embodied carbon (gCO₂eq) hardware'in üretiminden gelen karbon (amorti)
R = functional unit 1000 request, 1 user, 1 transaction…
Birim: gCO₂eq / functional unit
Hedef: SCI'ı **azalt**. ASLA "compensate" / offset değil — sadece azaltma sayar.
Örnek hesap#
| Aşama | Değer |
|---|---|
| E (kWh) | 100 |
| I (gCO₂/kWh, eu-west-1 ortalama) | 250 |
| M (kg CO₂, server lifecycle) | 1500 |
| R (request) | 10,000,000 |
| SCI | (100 × 250 + 1500) / 10,000,000 = 2.65 gCO₂/req |
🔑 Hedef trend olarak düşürmek, mutlak rakam değil. Year-over-year %20 azalma "iyi".
🔧 SCI'ı Mühendisliğe Bağlamak#
Kim ölçer?#
| Tool | Ne ölçer | Lisans |
|---|---|---|
| Cloud Carbon Footprint | Cloud (AWS, GCP, Azure) — bill bazlı | Apache 2 |
| Kepler | K8s pod energy (eBPF) | Apache 2 |
| Scaphandre | VM/server energy (RAPL) | Apache 2 |
| AWS Customer Carbon Footprint Tool | AWS native | Free, AWS only |
| GCP Carbon Footprint | GCP native | Free, GCP only |
| Azure Emissions Impact Dashboard | Azure native | Free, Azure only |
| Boavizta API | Hardware embodied carbon | OSS |
Kepler kurulum#
helm install kepler kepler/kepler \
-n kepler --create-namespace \
--set serviceMonitor.enabled=true
Prometheus metrikleri:
# Pod başına joule
kepler_container_joules_total{pod_name="<POD>"}
# Namespace başına watt-saat (1 saat penceresinde)
sum by (namespace) (
rate(kepler_container_joules_total[1h])
) / 3600
Grafana Sustainability Dashboard#
- Cluster total carbon (gCO₂/saat)
- Per-namespace breakdown
- Top 10 carbon-heavy pod
- Trend (haftalık)
🌍 Region Seçimi — Karbon Yoğunluğu#
Cloud region'ları anlık karbon yoğunluğu farkı 5-10x olabilir.
2026 düşük-karbon region önerileri#
| Cloud | Region | Notlar |
|---|---|---|
| AWS | eu-north-1 (Stockholm) | Hidroelektrik + nükleer |
| AWS | us-west-2 (Oregon) | Hidroelektrik |
| AWS | eu-west-3 (Paris) | Nükleer ağırlıklı |
| GCP | europe-north1 (Finland) | Rüzgar + nükleer |
| GCP | europe-west1 (Belgium) | Mix, %85+ yenilenebilir |
| Azure | Sweden Central | Hidroelektrik |
| Azure | North Europe (Ireland) | Rüzgar |
Anti-örnek (yüksek karbon)#
- AWS
ap-southeast-3(Jakarta) — kömür ağırlıklı - AWS
cn-north-1(Beijing) — kömür ağırlıklı
⚠️ Latency vs carbon tradeoff: Müşteri Türkiye'deyse
eu-central-1(Frankfurt) latency için iyi ama karbon olarakeu-north-1'den fazla. Karar matrisine ekle.
Cloud Carbon Footprint kullanımı#
# Cloud Carbon Footprint AWS billing'i tarar
docker run --rm \
-e AWS_ACCESS_KEY_ID=... -e AWS_SECRET_ACCESS_KEY=... \
cloudcarbonfootprint/cloud-carbon-footprint:latest
# Web UI: localhost:4000
⚡ Carbon-Aware Computing#
Pattern: "düşük karbon saatlerde batch çalıştır"#
# CronJob: rüzgar yoğun saatlerde çalış (gece)
apiVersion: batch/v1
kind: CronJob
metadata:
name: nightly-rebuild
spec:
schedule: "0 2 * * *" # 02:00 — düşük talep, fazla rüzgar
jobTemplate:
spec:
template:
spec:
containers:
- name: rebuild
image: <APP>
Daha akıllı: dinamik scheduler#
Carbon Aware SDK (Microsoft, GSF) — ElectricityMaps API ile real-time karbon yoğunluğunu okur:
# GitHub Actions
jobs:
carbon-aware-rebuild:
runs-on: ubuntu-latest
if: ${{ steps.carbon.outputs.intensity == 'low' }}
steps:
- id: carbon
uses: green-software-foundation/carbon-aware-action@<VERSION>
with:
location: 'eu-north-1'
window: '6h'
- run: ./expensive-rebuild.sh
KEDA carbon scaler#
apiVersion: keda.sh/v1alpha1
kind: ScaledObject
metadata:
name: carbon-aware-batch
spec:
scaleTargetRef:
name: batch-worker
triggers:
- type: external
metadata:
scalerAddress: carbon-aware-scaler:8080
location: "eu-west-1"
intensity-threshold: "200" # gCO₂/kWh altıysa scale up
🔧 Quick Wins (Hızlı Etki)#
| Aksiyon | Tasarruf (kabaca) | Süre |
|---|---|---|
| Idle resource cleanup (kullanılmayan EC2, EBS, RDS) | %10-30 | 1 hafta |
| ARM/Graviton'a geçiş (uygun workload) | %20-40 watt | 2-4 hafta |
| Spot instance (idle kapasite) | %70 maliyet, ekstra hardware üretmiyor | 1-2 hafta |
| Right-sizing (over-provisioned'ı küçült) | %20 | 2 hafta |
| Cron scaler dev/staging (gece kapalı) | %60 dev maliyeti | 3 gün |
| Compression (HTTP gzip/brotli) | %5-15 network | 1 gün |
| Image tag immutable + cache | Build re-run azalır | 1 gün |
| CDN (static asset edge'e) | %20-40 origin trafik | 1-2 hafta |
| Cold tier (eski log → S3 Glacier) | %80 storage maliyeti | 1 hafta |
| Database autovacuum + bloat cleanup | %15 disk + IO | 1 gün |
🔑 Quick win listesi cost ↔ carbon dual'i. FinOps + Sustainability aynı eylemleri çoğu zaman önerir.
🧪 CI'da Carbon Gate#
# .github/workflows/sustainability-check.yml
name: Sustainability Check
on: [pull_request]
jobs:
bundle-size:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@<VERSION>
- run: npm ci && npm run build
- uses: andresz1/size-limit-action@<VERSION>
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
image-size:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@<VERSION>
- run: docker build -t <APP>:test .
- id: size
run: |
SIZE=$(docker image inspect <APP>:test --format '{{.Size}}')
echo "size=$SIZE" >> $GITHUB_OUTPUT
if [ $SIZE -gt 100000000 ]; then
echo "::error::Image > 100 MB, sustainability budget aşıldı"
exit 1
fi
🔑 Bundle size, image size, dependency count — proxy metrikler. SCI tam ölçemiyorsan bunlar iyi başlangıç.
🚫 Anti-Pattern Tablosu#
| Anti-pattern | Niye kötü | Doğru |
|---|---|---|
| "Carbon offset alıyoruz" | Pazarlama, gerçek azalma yok | Önce azalt, sonra residual'i offset (niye offset >> azalma kabul edilmiyor) |
| 4 vCPU allocate, %5 kullanım | Gereksiz embodied carbon + idle | Right-sizing, HPA, VPA |
| Always-on dev env | Hafta sonu boşa watt | Cron scaler |
| Region seçimi sadece latency | Karbon ihmal edilir | Karar matrisine carbon ekle |
| Logging her şeyi "olur belki" | Storage = enerji | Severity filter, retention policy |
:latest tag → CI cache miss | Aynı build N kez | Digest pin + cache |
| 4 GB Docker image | Pull başına bandwidth + storage | Distroless, multi-stage |
| Test her şeyi her PR'da | CPU israf | Selective testing, change-based |
| Synchronous I/O hot path'te | CPU bekler | Async / batched |
| Cache'siz database query | Aynı sonuç N kez compute | Redis cache, materialized view |
| HDD on-prem, %10 kullanım | Embodied carbon yüksek, watt yüksek | Konsolide → daha az server, daha çok kullanım |
📋 Sustainability Engineering Checklist#
[ ] Cloud Carbon Footprint kurulu, dashboard görünür
[ ] Kepler veya equivalent K8s pod-level energy
[ ] SCI metric tanımlı, baseline ölçülmüş
[ ] Quarterly: SCI trend report (yöneticilere)
[ ] Region seçim matrisi: latency + carbon + cost
[ ] ARM/Graviton (Java, Go, Python uygun) migration tamamlandı
[ ] Spot instance: %30+ workload
[ ] Idle resource cleaner cron (haftalık)
[ ] Right-sizing: VPA + manuel review
[ ] Dev cluster gece kapanır (cron scaler)
[ ] CDN: static asset edge'e
[ ] Cold tier: 90+ gün log S3 Glacier
[ ] Bundle size budget CI'da gate
[ ] Image size budget CI'da gate
[ ] Carbon-aware batch (rüzgar saatlerinde)
[ ] Hardware lifecycle policy (4-5 yıl, sonra refurbish)
[ ] Carbon report müşteri tarafına (B2B müşteri talebi)
[ ] CSRD raporlama hazırlığı (büyük şirket ise)
[ ] Quarterly: yeşil yazılım eğitimi (mühendis on-boarding)
📚 Referanslar#
- Green Software Foundation — greensoftware.foundation
- Principles — principles.green
- SCI Spec — sci.greensoftware.foundation
- Cloud Carbon Footprint — cloudcarbonfootprint.org
- Kepler — sustainable-computing.io
- Climate Action Tech — climateaction.tech
- Boavizta — boavizta.org
- ElectricityMaps API — electricitymaps.com
- AWS Customer Carbon Footprint Tool
- GCP Carbon Footprint
- Azure Emissions Impact Dashboard
Carbon-Aware-Computing.mdMeasuring-Software-Carbon.mdRegion-Selection.md12-FinOps/Cloud-Cost-Allocation.md— cost ↔ carbon dual
"Yeşil yazılım 'opsiyonel iyilik' değil, mühendislik disiplini. Bir kararın 'cost', 'latency', 'security' boyutunu sorduğun gibi 'carbon' boyutunu sorulmaz hale getirme."