Software wird immer effektiver … aber!
Wir alle lieben Balkendiagramme, wo der eine Balken größer ist als der Andere ;). Aber nicht nur auf dem (Marketing) Papier wird Software immer effektiver. Doch was ist die Konsequenz daraus für die Nachhaltigkeit von Software?
In der Softwareentwicklung findet eine stetige Optimierung der Technologien statt, welche kein Ende zu finden scheint. Einen besonders großen Effekt haben dabei Technologien, welche als Grundlagen für weitere Technologien dienen. Zum Beispiel haben neue Programmiersprachen wie zum Beispiel Zig oder Rust dafür gesorgt, dass viele Technologien wie z. B. Datenbanken in diesen Sprachen neu gedacht und implementiert werden. Die Folge ist eine neue Generation von Software mit weniger Bugs und einem effektiveren Ressourcenverbrauch. Werden dabei bestehende Standards und Schnittstellen eingehalten, dann ist der Umstieg sogar nur mit einem geringen Aufwand verbunden. Hier ein paar Beispiele:
Bun ist eine neue Plattform für Javascript Anwendungen und konkurriert damit mit Deno (zweite Generation) und Node.js (erste Generation). Bun wird mit der Sprache Zig entwickelt.
Dragonfly ist eine Redis kompatible Key-Value Datenbank, welche Millionen von Queries in der Sekunde leisten soll. Das wird dadurch erreicht, indem Dragonfly vorhandene Ressourcen wie CPU und Speicher besser ausnutzt.
TigerBeetle ist eine Accountingdatenbank, die über eine Million Transaktionen leisten kann und damit z. B. neue Geschäftsmodelle ermöglicht, die vorher mit höherem Aufwand verbunden waren (z. B. Mikrotransaktionen). TigerBeetle wird mit der Sprache Zig entwickelt.
Unikernels sind Images, welche Anwendungen und ein minimales Betriebssystem zusammenfassen. Durch den reduzierten Overhead soll die Effektivität und Sicherheit verbessert werden.
Natürlich klingen solche Vergleiche oft zu schön, um wahr zu sein und man muss sie immer mit Vorsicht genießen. Im Kern löst diese Entwicklung viele unserer Probleme, birgt aber auch Gefahren, denen wir uns bewusst sein sollten. Die Steigerung von Effektivität geht in der Regel mit dem Rebound Effekt einher.
Effizienzsteigerungen senken oft die Kosten für Produkte oder Dienstleistungen. Dies kann dazu führen, dass sich das Verhalten der Nutzerinnen und Nutzer ändert: Sie verbrauchen mehr – die ursprünglichen Einsparungen werden teilweise wieder aufgehoben. Dieser Effekt wird Rebound genannt. (Quelle)
Besonders Java Entwickler kennen diesen Effekt wahrscheinlich gut. Durch die Java Programmiersprache und dem einhergehenden Ökosystem lässt es sich bequem allerlei Software entwickeln ohne auf Dinge wie z. B. Memorymanagement zu achten. Die Folge waren viele neue Anwendungen mit tollen Funktionen. Diese Anwendungen waren aber eben auch dafür bekannt enorme Mengen an Arbeitsspeicher zu belegen, was erst dadurch akzeptabel wurde, dass Arbeitsspeicher in Mengen günstig verfügbar wurde. Notwendig, um die eigentliche Funktionalität bereitzustellen, war das nicht.
Deshalb ist es wichtig, dass wir a) diesen Effekt immer im Hinterkopf haben und b), dass wir kontinuierlich gegenlenken, z. B. indem wir hinterfragen, ob etwas überhaupt notwendig ist.