Die achtzigfache Joule-Menge in Python und Perl für dieselbe AufgabeNachhaltigkeit in Code - Tools, Sprachen, Roadmaps
Von
Anna Kobylinska und Filipe Martins*
7 min Lesedauer
Green Coding, auch bekannt als umweltfreundliche oder nachhaltige Software-Entwicklung, will den Energieverbrauch und die sonstigen Umweltauswirkungen des Softwarebetriebs minimieren. Schnellere Software ist schon doch grüne Software, oder? Nicht automatisch.
Mit Green Coding ließe sich IT wesentlich umweltverträglicher gestalten - mit den richtigen Programmiersprachen, mit dem gut geählten Compiler, der passenden Garbage Collection und der schalnken virtuellen Maschine zum Beispiel.
(Bild: Nawarit - stock.adobe.com / KI-generiert)
Der Energieverbrauch von Rechenzentren steht seit jeher im Fokus von Diskussionen über Klimaschutz und Nachhaltigkeit. Ob containerisierte Anwendungen oder HPC-Arbeitslasten, ob KI-Training im Kern-Rechenzentrum oder Inferenz an der industriellen Edge: Das Rückgrat der digitalen Wirtschaft braucht einen kleineren Fußabdruck. Jetzt will die EU mehr wissen, was Unternehmen da so alles treiben.
Green Coding ist eine Philosophie. Sie betrachtet den gesamten Prozess der Entwicklung und Bereitstellung von Software durch die Brille der Nachhaltigkeit. Sie setzt sich die Minimierung der Umweltauswirkungen durch Softwarecode zum Ziel. Im Zeitalter orchestrierter Bereitstellung massiv skalierbarer und ressourcenhungriger KI-Arbeitslasten hat diese neue Disziplin stark an Bedeutung gewonnen.
Achtung, neue EU-Direktive!
Ab dem Geschäftsjahr 2024 findet die EU-Richtlinie CSRD (kurz für Corporate Sustainability Reporting Directive) in den ersten Unternehmen Anwendung. Sie erweitert die Anforderungen zur Nachhaltigkeitsberichterstattung von bestimmten EU- und nicht-EU-ansässigen Firmen, die im EU-Wirtschaftsraum bestimmte Umsatzschwellen überschreiten. In den Umfang dieser Richtlinie fallen Informationen über die Umweltauswirkungen des Betriebs.
Unternehmen, die unter diese Richtlinie fallen, müssen ab dem Geschäftsjahr 2024 ihre Nachhaltigkeitsberichte gemäß den Anforderungen der CSRD erstellen und veröffentlichen. Die Anwendung der CSRD auf Unternehmen erfolgt schrittweise zwischen dem Geschäftsjahr 2024 und 2026 in Abhängigkeit von diversen Kriterien.
Für viele Unternehmen wird dies bedeuten, dass sie ihre Datenverarbeitungs- und Berichtssysteme an die neuen Anforderungen anpassen müssen. Andere müssen zusätzlich auch noch im Hinblick auf ihre Metriken gut einen Zahn zulegen.
Mit einer Vielzahl von Projekten, Publikationen und Veranstaltungen zu Themen der betrieblichen Umweltinformatik, insbesondere der computergestützten Stoffstromanalyse, hat sich Professor Volker Wohlgemuth, Forschungspreisträger der HTW Berlin, einen Namen gemacht.
(Bild: HTW Berlin)
In Vorfreude auf die CSRD beginnen viele IT-starke Organisationen, über die Umweltkosten ihres Softwarebetriebs nachzugrübeln. Die einen oder anderen haben schon festgestellt: Softwarecode, der skalieren soll, skaliert auch unnötig die Stromrechnung hoch.
Organisationen, die sich mit dem Green Coding bereits die Finger bekleckert haben, haben einen Vorsprung. Der Ansatz zielt darauf ab, die Umweltauswirkungen von Softwarecode zu minimieren. Experten wie Professor Volker Wohlgemuth von der Berliner Hochschule für Technik Hochschule für Technik und Wirtschaft (HTW Berlin) betonen die Bedeutung der Auswahl von Programmiersprachen und spezifischen Bibliotheken für energieeffizientes Programmieren.
Also: Her mit dem Green Coding! Je schneller, desto besser, oder? Nicht so voreilig.
Zwei Einflussgrößen der Energie-Effizienz von Code
Ein sehr verbreitetes Missverständnis bei der Analyse der Effizienz von Softwarecode sei die Annahme, dass der Energieverbrauch mit der Ausführungszeit im Einklang stünde, schreiben Rui Pereira et al in ihrer Forschungsarbeit „Energy Efficiency Across Programming Languages“ (siehe: Abbildung).
Es herrscht in der Branche die Überzeugung vor, dass die Reduktion der Ausführungszeit von Code logischerweise den Energieverbrauch senken müsste. Das sei aber ein Irrtum, was bereits aus der Energiegleichung (im SI-Größen- und Einheitensystem) hervorgeht:
Energie (Joule) = Leistung (Watt) x Zeit (Sekunde)
Die Energiemenge, die ein System verbraucht, hängt demnach von der Leistung (also der Rate des Energieverbrauchs) und der Dauer der Nutzung ab. Eine schnellere Software ist jedoch nicht automatisch Energie-effizienter, weil die benötigte Leistung pro Problemstellung zwischen verschiedenen Implementierungen nicht als konstant angenommen werden kann.
Ob eine Implementierung „grüner“ läuft als eine andere hängt im Endeffekt davon ab, inwiefern sie zusätzliche Systemressourcen mit variablem Energieverbrauch während der Laufzeit beansprucht, um schneller durch die Ziellinie zu kommen.
Benchmarks haben schon länger nachgewiesen, dass unterschiedliche Programmiersprachen in ihrem Energieverbrauch, der Ausführungszeit und den Anforderungen an Arbeitsspeicher bei derselben Problemstellung generell sehr weit auseinanderliegen. Kompilierte Programmiersprachen sind generell schneller als interpretierte Skriptsprachen.
So kann beispielsweise die Verwendung vordefinierter Funktionen aus C-Bibliotheken in Python den Energieverbrauch um über 90 Prozent reduzieren. Doch der Teufel steckt in Details.
Jruby, eine Java-Implementierung der Programmiersprache Ruby, braucht für ein Referenzproblem nahezu das Zwanzigfache (19,94 Megabyte) an Arbeitsspeicher gegenüber Pascal (1,0 MB) oder Go (1,05 MB). Der höhere Bedarf an Arbeitsspeicher erhöht den Energieverbrauch, bedeutet jedoch nicht automatisch eine kürzere Ausführungszeit.
Stand: 08.12.2025
Es ist für uns eine Selbstverständlichkeit, dass wir verantwortungsvoll mit Ihren personenbezogenen Daten umgehen. Sofern wir personenbezogene Daten von Ihnen erheben, verarbeiten wir diese unter Beachtung der geltenden Datenschutzvorschriften. Detaillierte Informationen finden Sie in unserer Datenschutzerklärung.
Einwilligung in die Verwendung von Daten zu Werbezwecken
Ich bin damit einverstanden, dass die Vogel IT-Medien GmbH, Max-Josef-Metzger-Straße 21, 86157 Augsburg, einschließlich aller mit ihr im Sinne der §§ 15 ff. AktG verbundenen Unternehmen (im weiteren: Vogel Communications Group) meine E-Mail-Adresse für die Zusendung von Newslettern und Werbung nutzt. Auflistungen der jeweils zugehörigen Unternehmen können hier abgerufen werden.
Der Newsletterinhalt erstreckt sich dabei auf Produkte und Dienstleistungen aller zuvor genannten Unternehmen, darunter beispielsweise Fachzeitschriften und Fachbücher, Veranstaltungen und Messen sowie veranstaltungsbezogene Produkte und Dienstleistungen, Print- und Digital-Mediaangebote und Services wie weitere (redaktionelle) Newsletter, Gewinnspiele, Lead-Kampagnen, Marktforschung im Online- und Offline-Bereich, fachspezifische Webportale und E-Learning-Angebote. Wenn auch meine persönliche Telefonnummer erhoben wurde, darf diese für die Unterbreitung von Angeboten der vorgenannten Produkte und Dienstleistungen der vorgenannten Unternehmen und Marktforschung genutzt werden.
Meine Einwilligung umfasst zudem die Verarbeitung meiner E-Mail-Adresse und Telefonnummer für den Datenabgleich zu Marketingzwecken mit ausgewählten Werbepartnern wie z.B. LinkedIN, Google und Meta. Hierfür darf die Vogel Communications Group die genannten Daten gehasht an Werbepartner übermitteln, die diese Daten dann nutzen, um feststellen zu können, ob ich ebenfalls Mitglied auf den besagten Werbepartnerportalen bin. Die Vogel Communications Group nutzt diese Funktion zu Zwecken des Retargeting (Upselling, Crossselling und Kundenbindung), der Generierung von sog. Lookalike Audiences zur Neukundengewinnung und als Ausschlussgrundlage für laufende Werbekampagnen. Weitere Informationen kann ich dem Abschnitt „Datenabgleich zu Marketingzwecken“ in der Datenschutzerklärung entnehmen.
Falls ich im Internet auf Portalen der Vogel Communications Group einschließlich deren mit ihr im Sinne der §§ 15 ff. AktG verbundenen Unternehmen geschützte Inhalte abrufe, muss ich mich mit weiteren Daten für den Zugang zu diesen Inhalten registrieren. Im Gegenzug für diesen gebührenlosen Zugang zu redaktionellen Inhalten dürfen meine Daten im Sinne dieser Einwilligung für die hier genannten Zwecke verwendet werden. Dies gilt nicht für den Datenabgleich zu Marketingzwecken.
Recht auf Widerruf
Mir ist bewusst, dass ich diese Einwilligung jederzeit für die Zukunft widerrufen kann. Durch meinen Widerruf wird die Rechtmäßigkeit der aufgrund meiner Einwilligung bis zum Widerruf erfolgten Verarbeitung nicht berührt. Um meinen Widerruf zu erklären, kann ich als eine Möglichkeit das unter https://contact.vogel.de abrufbare Kontaktformular nutzen. Sofern ich einzelne von mir abonnierte Newsletter nicht mehr erhalten möchte, kann ich darüber hinaus auch den am Ende eines Newsletters eingebundenen Abmeldelink anklicken. Weitere Informationen zu meinem Widerrufsrecht und dessen Ausübung sowie zu den Folgen meines Widerrufs finde ich in der Datenschutzerklärung.
Das Achzigfache an Energie für dasselbe Problem
Noch weiter liegen verschiedene Programmiersprachen im Hinblick auf den Energieverbrauch und die erforderliche Ausführungszeit auseinander. Eine Aufgabenstellung, die sich in C oder Rust mit ca. einem Joule an Energie bewältigen lässt, verschlingt in Perl (79,58 Joule) oder Python (75,88 Joule) beinahe das Achtzigfache.
Eine Testaufgabe, die in einer der effizientesten kompilierten Sprachen wie C oder Rust eine Zeiteinheit braucht, verschlingt in einer interpretierten Skriptsprache wie Lua zur Laufzeit schon mal das Achtzigfache an Zeit.
Wie effizient ein bestimmter Code die betreffende Aufgabe zu lösen vermag, hängt nicht nur von den Eigenschaften der verwendeten Programmiersprache ab, sondern auch von Einflussgrößen wie der Qualität des Compilers, der virtuellen Maschine, des Garbage Collectors, der verfügbaren Bibliotheken und dergleichen anderen. Tatsächlich könne ein Softwareprogramm nicht nur durch Verbesserungen an seinem eigenen Quellcode schneller werden, sondern auch einfach durch die Verwendung optimierter Bibliotheken und/oder eines leistungsfähigeren Compilers.
Wer hätte das gedacht?
Im Falle von Jruby lässt sich der Speicherverbrauch durch die bloße Aktivierung des 'threadsafe'-Modus stark reduzieren. Zum anderen kann die Methode der Garbage-Collection die gewünschten Resultate herbeiführen. Eine andere Ruby-JIT-Implementierung namens YJIT weist einen deutlich geringeren Speicherverbrauch als eine JVM-basierte Implementierung wie JRuby. Noch besser schneiden Sprachen wie C ab, die ohne eine VM nativ auf der Hardware im Maschinencode laufen.
Im Vergleich des Ressourcenverbrauchs – Energieverbrauch der CPU und des DRAMs und Ausführungszeit – für kompilierte Programmiersprachen bei der Ausführung des Benchmarks „Fasta“ fällt Haskell als ein Ausreißer negativ auf - Rui Pereira et al. (2017) „Energy efficiency across programming languages: how do energy, time, and memory relate? In Proceedings of the 10th ACM SIGPLAN International Conference on Software Language Engineering (SLE 2017)“. Association for Computing Machinery.
(Bild: Rui Pereira et al./Association for Computing Machinery)
Was der betreffende Softwarecode mit der bereitgestellten Leistung in der Tat anstellt, ist noch eine ganz andere Frage. Hoffentlich macht er was Gutes, aber das steht schon auf einem anderen Blatt.
„Grüne“ Programmiersprachen sind alles schön und gut, aber nicht vergessen: Nachhaltigkeit von Softwarecode spielt sich auf der Ebene der Algorithmen ab. Hier kommt die Big-O-Notation ins Spiel.
Als die Faszination mit der unendlichen Skalierbarkeit der Cloud die Bedeutung der Softwarekomplexität in den Hintergrund stellte, spielte der Ressourcenverbrauch eine untergeordnete Rolle und so geriet die Big-O-Notation in Vergessenheit. Jetzt ist sie wieder „front and center“.
Big-O-Notation
Big-O-Notation ist ein Maßstab zur Bestimmung der Effizienz eines Algorithmus. Er hantiert mit zwei Faktoren: der Zeitkomplexität und der Raumkomplexität.
Die Zeitkomplexität eines Algorithmus gibt die Laufzeit an, die der Algorithmus in Abhängigkeit von der Größe seiner Eingabe für die Ausführung benötigt. Die Raumkomplexität spezifiziert die Gesamtmenge an Platz oder Speicher, die in Abhängigkeit von der Größe der Eingabe zur Ausführung erforderlich ist.
Die Big-O-Notation wird verwendet, um die Leistung von Algorithmen zu analysieren und zu vergleichen, insbesondere in Bezug auf ihre Effizienz bei der Verarbeitung großer Datenmengen. Sie ist ein grundlegendes Konzept in der Informatik und Software-Entwicklung und spielt eine wichtige Rolle bei der Optimierung von Algorithmen für effizientere und schnellere Datenverarbeitung.
Werkzeuge der Nachhaltigkeit
Die Umsetzung von Green Coding-Praktiken wäre ohne geeignete Werkzeuge nicht denkbar. Intel und ARM haben entsprechende Tools schon länger im Köcher.
Der „Intel Software Development Assistant“ ermöglicht es Entwickler/innen, Energiemessungen vom System während der Ausführung spezifischer Teile einer Anwendung auszuführen. Das „ARM Development Studio“ bietet mit dem Messwerkzeug „Energyprofiler“ ein Instrument, mit dem sich die Energie-Effizienz von Softwarecode auf ARM-basierten Prozessoren optimieren lässt.
Auch in der Java-Gemeinde kommen Entwickler/innen auf ihre Kosten. Ein Java-Framework für energiebasiertes Software-Profiling namens „Jouleunit“ kann den Energieverbrauch von Java-Anwendungen untersuchen. Die Java-Bibliothek „jPowermonitor“ ermöglicht direkte Messungen des Energieverbrauchs wahlweise auf der Ebene von Unit-Tests oder der Methoden eines beliebigen Java-Prozesses. Sie bietet eine jUnit-Erweiterung und einen Java-Agenten, um den Momentanverbrauch in Watt sowie den kumulierten Energieverbrauch pro Testfall in Wattstunden bzw. pro Methode in Joule zu erfassen.
Hilfreiche Tools
„Sonarqube“, ein Tool zur Qualitätsverwaltung von Code, unterstützt den Green Index zur Messung der Nachhaltigkeit von Code. Es führt eine statische Analyse des Codes basierend auf Standards des Consortium for Information and Software Quality (CISQ) durch.
Das CLI-Werkzeug perf kann Energiemessungen von verschiedenen Komponenten eines Linux-Systems sammeln. Das Linux-Werkzeug „Powertop“ kann den Energieverbrauch eines Prozessors und des Hauptspeichers während der Ausführung abschätzen und auf den 'Verbraucher' zurückverfolgen. Beispiele solcher Tools gibt es in der Linux-Gemeinde zu Genüge.
Eine Allianz für „grünen“ Code
Die Sustainable Digital Infrastructure Alliance (SDIA) macht sich seit Jahren für Green Coding stark. Mit ihrer The Green Coding Roadmap will sie das Tempo vorgeben. Im November 2023 hat die SDIA eine Konferenz im berühmten 'Französischen Dom' in Berlin einberufen.
Paneldiskussion auf dem „Green Coding Summit“ der Sustainable Digital Infrastructure Alliance (SDIA) im November 2023 in Berlin.
(Bild: SDIA)
Diese Veranstaltung, getauft auf den pfiffigen Namen Green Coding Summit, brachte führende Experten und Expertinnen aus der globalen Softwaregemeinschaft zusammen, um Fachwissen zu teilen und Diskussionen über die ökologischen Auswirkungen von Software und ressourcenschonendere Entwicklungspraktiken anzuregen.
Die Konferenz diente als ein Brennpunkt für die Förderung von umweltbewusster Software-Entwicklung. Neben Vorträgen und Keynotes von international anerkannten Organisationen bot die Konferenz auch Workshops und Diskussionsrunden rund um die Praxis des Green Coding. Die Teilnehmer hatten die Möglichkeit, von den Erfahrungen und Kenntnissen führender Softwareentwickler/innen zu lernen.
Im Oktober und November 2023 fand eine virtuelle Workshop-Reihe zu "Green Coding" der Gemeinde „Nachhaltige Digitalisierung“ statt. Den Inhalt der Präsentationen können Interessierte über das Kontaktformular des Umweltbundesamtes anfordern. Initiativen wie diese sind ein klares Signal, dass die Branche bereit ist, Verantwortung für den Fußabdruck der digitalen Landschaft zu übernehmen und aktiv an Lösungen für eine nachhaltigere Zukunft zu arbeiten.
*Das Autorenduo
Das Autorenduo besteht aus Anna Kobylinska und Filipe Pereia Martins. Die beiden arbeiten für McKinley Denali, Inc., USA.
Ihr Fazit lautet: In einem Zeitalter, in dem „Software die Welt verschlingt“, packt Green Coding das Problem an der Wurzel. Diese Praxis macht sich zum Ziel, Softwarecode zu entwickeln und bereitzustellen, die mit möglichst geringem Ressourcenverbrauch seine Aufgaben verrichtet.