Kommentar Was bedeutet nachhaltige Software-Entwicklung?

Von Sebastian Gerstl

Software hat keine Masse, und auch wenn Datenträger und deren Verpackung Ressourcen aufwerfen, produziert Software keinen Müll, kann nicht im physischen Sinne recycled werden. Im Softwarekontext auf Nachhaltigkeit achten, das ergibt keinen Sinn – oder doch?

Anbieter zum Thema

Das Thema Nachhaltigkeit macht auch for Software-Entwicklung nicht halt. Aber wie macht es sich bemerkbar?
Das Thema Nachhaltigkeit macht auch for Software-Entwicklung nicht halt. Aber wie macht es sich bemerkbar?
(Bild: Clipdealer)

Nachhaltige Entwicklung klingt nach einem eher neuen Trend. Doch auch wenn das Interesse an Nachhaltigkeit in den letzten Jahren enorm zugenommen hat – für Ingenieure, bzw. für die Geräte-Entwicklung, ist das Thema keineswegs neu: „Dauerhafte Entwicklung ist Entwicklung, die die Bedürfnisse der Gegenwart befriedigt, ohne zu riskieren, dass künftige Generationen ihre eigenen Bedürfnisse nicht befriedigen können.“ Diese Position findet sich bereits im Brundtland-Bericht der Weltkommission für Umwelt und Entwicklung von 1987. Nachhaltige Entwicklung ist also bereits seit 35 Jahren ein konkretes Thema.

2015 haben die Vereinten Nationen zudem im Rahmen der politischen Agenda 2030 für nachhaltige Entwicklung 17 Ziele für nachhaltige Entwicklung definiert, was dem Thema für viele Länder und Unternehmen wieder neue Bedeutung verliehen hat. Dabei geht es in vielerlei Hinsicht um organisatorische, strukturelle und gesellschaftliche Bereiche, wie Gleichstellung der Geschlechter, das Sicherstellen von Ernährungs-, Wasser- und Energieversorgungen und ein eintreten gegen globale Armut. Für Geräteentwickler wird diese Agenda in mehrerlei Hinsicht interessant: Sie sollten nachhaltige Produktionsweisen sicherstellen. Das umfasst unter anderem Energieverbrauch, Produktionsmuster, und generell das Vermeiden von unnötiger Ressourcenverschwendung.

Was aber hat das mit Softwareentwicklung zu tun?

Studie: Es gibt energiehungrige und energiesparende Programmiersprachen

Direkter Vergleich: Unterschiede zwischen den getesteten Programmiersprachen hinsichtlich Energieverbrauch, Ausführzeit und Speicherbedarf.
Direkter Vergleich: Unterschiede zwischen den getesteten Programmiersprachen hinsichtlich Energieverbrauch, Ausführzeit und Speicherbedarf.
(Bild: Rui Pereira etl a, Universidade do Minho)

Bereits 2017 testeten portugiesische Forscher Programmiersprachen in einer Studie auf Energieeffizienz und veröffentlichten Ihre Erkenntnisse in einer Studie; 2021 machten Sie sich noch einmal daran, ihre Erkenntnisse auf einen aktuellen Stand zu bringen. Die Forscher nutzten quelloffene Algorithmen des „Computer Language Benchmarks Games“, die vergleichbar in unterschiedlichen Sprachen implementiert wurden, und maßen bei deren Ausführung direkt, wie viel Strom eine x86-basierte CPU bei deren Ausführung verbrauchte. Am Besten schnitten hier – vielleicht wenig überraschend – die hardwarenahen C und C++, aber auch das relativ neue Rust ab. Interessanterweise ist hier auch Java unter den 5 energiesparsamsten Implementierungsmethoden zu finden (wie zu erwarten ist, fällt Java aber beim Speicher- und damit dem Ressourcenbedarf deutlich nach hinten).

Viel überraschender: Python, die weithin meistgenutzte Programmiersprache, fiel im Test regelrecht durch! Lösungen in Python benötigten auf derselben Hardware bis zu 80-mal mehr Energie als Lösungen in C. Ein schlechteres Ergebnis unter den getesteten Sprachen konnte nur das besonders auf Datenbanken ausgelegte Perl aufweisen. Auch Ruby, dass vor allem in der iPhone- und iPad-Entwicklung zum Zuge kommt, schneidet in diesem Vergleich sehr schlecht ab.

In Python implementierte Algorithmen benötigen auf derselben Hardwareplattform bis zu 80-mal mehr Energie als Lösungen in C.

Auch wenn es um Ressourcen geht, kann sich C deutlich besser behaupten als ein Großteil der Konkurrenz: Die implementierten C-Lösungen kamen in der Regel mit deutlich weniger Speicherbedarf aus als die meisten anderen getesteten Programmiersprachen. Embedded-Entwickler dürfte das wenig überraschen, ist dies doch einer der Gründe, warum C im Embedded-Spektrum seit Jahrzehnten zu den beliebtesten Programmiersprachen zählt – und dort auf lange Sicht auch nicht wegzudenken ist?

Hardwarenahe Programmierung ist also energieeffizienter, ist also nachhaltiger?

War also Nachhaltigkeit schon immer ein Grundpfeiler effizienter Software? So einfach kann man sich die Sache nicht machen. Denn wenn dem so ist – warum ist dann gerade Python, im Vergleich eine der energiehungrigsten Sprachen, so populär?

Wie so oft wenn es um Nachhaltigkeit geht, haben wir hier offenbar einen Konflikt zwischen dem, was am sinnvollsten erscheint, und dem, was am komfortabelsten geht. Denn Aufgaben lassen sich mit Python in der Regel deutlich schneller lösen. Im Gegensatz zu C-Modulen sind vergleichsweise kurze Python-Skripts schnell geschrieben - und lassen sich sogar innerhalb von C oder C++ Code implementieren. Python-Code ist in der Regel auch viel schlanker und lässt sich schnell auf andere Plattformen übertragen.

Und hierin liegen auch zwei Kritikpunkte, die ich persönlich an der - ansonsten durchaus interessanten - Studie habe. Ein erfahrener Programmierer weiß: Es hängt nicht allein von meinem Code ab. Programmiersprachenversionen, unterschiedliche Compiler, Abweichungen in Testtools – all das sind Faktoren, die allein schon innerhalb ein und derselben Lösungen deutliche Unterschiede ergeben können, wie gut und effizient mein Code schließlich auf der Zielplattform läuft. Software und Hardware sind nicht zwei vollkommen losgelöste Entitäten, wie gut ein System letztendlich läuft hängt immer von deren Zusammenspiel ab.

Und wo wir vom Zusammenhang der Hardware sprechen: Zum anderen fehlt der Plattformvergleich. Gerade im Embedded-Umfeld muss Code oft auf unterschiedliche Plattformen portiert werden; eine ältere, auf Desktop-PCs ausgelegte x86-CPU kommt hier nicht in Frage. Aber wie gut lässt sich mein Code portieren, und wie effizient wird der Befehlssatz von meiner CPU ausgeführt? Wie gut wird mein Code auf ARM- oder RISC-V-basierten Systemen ausgeführt? Dies wäre aus Embedded-Sicht sicherlich sehr interessant - hier fehlen in der Studie allerdings die entsprechenden Daten.

Ein guter Programmierer weiß: Ein effizientes System hängt immer von einen guten Zusammenspiel von Software und Hardware ab.

Sebastian Gerstl, Redakteur bei der Redaktion ELEKTRONIKPRAXIS
Sebastian Gerstl, Redakteur bei der Redaktion ELEKTRONIKPRAXIS
(Bild: ELEKTRONIKPRAXIS)

Am Ende des Tages bleibt die Erkenntnis: Die nachhaltigste Software – ist gut geschriebene Software. Kompakter Code, der sich schnell ausführen lässt und wenig Speicher benötigt. Das klingt banal, und scheint doch oft genug wenig verinnerlicht zu sein. Denn Hand aufs Herz - wer greift nicht gerne in der Eile der Entwicklung auf ein vorgefertigtes Modul zurück, ohne zu prüfen, ob es nicht eine effizientere Lösung gäbe? Wer geht gerne nach Ende der Entwicklung noch einmal durch den Code um zu prüfen, ob er sich nicht noch weiter straffen lässt? Wer erliegt nicht gerne mal der Versuchung, oder spielt zumindest mit dem Gedanken, ein Board mit etwas mehr Speicher zu wählen, damit der Programmcode ins fertige System passt, statt noch mehr Zeit mit Optimierung zu verbringen? All diese Sachen sind komfortabler - aber nicht wirklich im Sinne von Nachhaltigkeit?

Wie stehen Sie zu diesen Fragen? Ich freue mich auf Ihre Meinungen zu diesem Thema!

Nachhaltige Programmierung steht übrigens auch im Fokus des diesjährigen ESE Kongress, der vom 05.–09.12.2022 in Sindelfingen stattfindet. Aktuell läuft hierfür noch unser Call for Papers. haben Sie Eindrücke und Erfahrungen zu dem Thema, dass Sie mit einem großen Fachpublikum teilen möchten? Dann reichen Sie doch Ihren Vorschlag direkt ein!

(ID:48118878)