Programme sind das Mittel zum Einsatz von Rechnern und die Vielfalt an ihnen ist kaum zu überbieten. Je besser Software beschaffen ist desto effizienter fällt die Rechnernutzung aus. Welche Merkmale aber sind es, die die Qualität ausmachen?

Eine Hilfestellung kann der Ressourcenbedarf liefern. Dieser ist nicht nur durch den Umfang der Software charakterisiert, aber ihre Größe ist ein Faktor und an die Betrachtung der Größe eines Programmes ist stets die Frage geknüpft, was man mit der Software machen kann. Kann etwas weggelassen werden um das selbe Ergebnis zu erzielen?

Ein Vergleich des Umfangs verschiedener Softwarepakete kann hilfreich zur Qualitätsbeurteilung sein und soll hier unternommen werden.

Größenvergleich von Software-Paketen

Hier werden die Größen ausgewählter Software-Pakete dargestellt. Zur Feststellung der Größe wurde jeweils mit VirtualBox eine virtuelle Maschine erstellt. Die dargestellte Größe ergibt sich mit dem Vergleich der VM-Größe vor und nach Installation der betreffenden Software.

Tabelle 1. Platzbedarf von Ablaufumgebungen
Nr Inhalt Basis Größe (MB) Summe (MB) Anmerkungen

1

Alpine Linux

-

145,9

145,9

3.12.0 x86 64

2

Weiterer Benutzer und nano

1

2,2

148,1

-

3

Ubuntu Desktop

-

9.300

9.300

20.04

4

Ubuntu Server

-

4.500

4.500

20.04

5

Ubuntu Core

-

260

260

nur mit Konto bei Ubuntu

6

RedHat CoreOS

-

807

807

-

7

Windows

-

12.000

12.000

10

8

Gnome Desktop

1

2.650

2.800

-

9

VirtualBox

3

209,8

9.510

6.1.8-Ubuntu-amd64

10

Docker

1

325

470,9

-

11

NodeJS

1

35,5

181,4

v12.17.0-linux-x64

12

Java 8 JRE

1

85,6

231,5

openjdk8-jre

13

ffmpeg

1

66,4

212,3

-

14

ffmpeg Image

1+10

127

597,9

jrottenberg/ffmpeg

15

ffmpeg Image

1+10

106,7

577,6

opencoconut/ffmpeg

16

web ui für ffmpeg

1+12+13

2,2

300,1

winstone und .war-Datei

17

Hallo Welt java

1

49,9

195,8

jlink modules

18

lighttpd

1

8,2

154,1

1.4.55

19

nginx

1

4,2

150,1

1.19.0

20

php

1+18

76,6

230,7

7.4.7

21

Tomcat

1+12

12,5

244

9.0.29

22

Jetty

1+12

16,8

248,3

9.4.30

23

Undertow

1+12

2,8

234,3

2.1.3 core & servlet

24

Winstone

1+12

0,3

231,8

0.9.10

25

Winstone Standalone

1

60,3

206,2

0.9.10

26

MySQL

1

165,8

311,7

mysql und mysql-client

27

Derby SQL Server

1+12

5

235,9

10.15.2

28

SQLite

1

4,3

150,2

Für das Paket 17 wurde eine Java-Klasse, die nur "Hallo Welt" ausgibt, mit javac kompiliert und anschließend mit dem in Java 9 eingeführten Programm jlink zu einem eigenständigen, ohne JRE lauffähigen Linux-Paket gemacht. Hierbei wird die mit Java 9 eingeführte Modularisierung der Java-Plattform genutzt.

Ähnlich wurde bei Paket 25 verfahren. Allerdings wurde hier nicht eine einzelne Klasse sondern der Quellcode des gesamten Winstone Servlet Containers kompiliert und mit jlink in ein eigenständiges, ohne JRE lauffähiges Linux-Paket überführt.

Bei den Paketen Tomcat (21) und Jetty (22) wurden Beispiele und Dokumentation weggelassen.

Anmerkungen

Bei der Betrachtung des Größenvergleichs ergeben sich eine Reihe von Feststellungen.

Betriebssysteme

Der Unterschied zwischen Alpine Linux und anderen Betriebssystemen ist beträchtlich. Bei der Entscheidung für ein Betriebssystem sollte darauf geachtet werden, ob der Zweck den Einsatz eines anderen Systems erfordert.

Docker

Docker alleine ist bereits mehr als doppelt so groß wie Alpine Linux. Hier könnte vielleicht noch Luft zum Weglassen gewisser Teile sein.

ffmpeg

Der Vergleich eines Linux-Pakets wie etwa des ffmpeg-Pakets für Alpine (apk add ffmpeg) mit den ffmpeg-Containern für Docker zeigt, dass die Docker-Images viel größer ausfallen und bis hin zum Doppelten des Linux-Pakets geraten.

Java und NodeJS

Mit der Modularisierung seit Java 9 ist das Basismodul der JRE nur noch unwesentlich größer als das NodeJS-Paket. Auf einer der beiden Plattformen beruhende Apps sind damit jeweils ziemlich vergleichbar.

Winstone

Es ist bemerkenswert, dass mit Winstone ein nur 300 KB kleiner Servlet Container existiert. Obwohl der Code seit 2007 nicht mehr gepflegt wird läuft er unverändert auch mit aktuellen Web-Apps. Der Quellcode lässt sich fehlerfrei mit einem JDK 14 neu kompilieren und mit jlink in eine allein lauffähige App übersetzen. So ist eine Java-Web-App mitsamt Webserver, Servlet Container und Unterstützung von Java Server Pages möglich, die bei einer Größe von 60,3 MB eigenständig ohne JRE auf Linux läuft.

Fazit

Bei der Entscheidung für eine Ablaufumgebung sollte deren Ressourcenbedarf nicht unbeachtet bleiben und gefragt werden, was alles weggelassen werden kann, um eine gegebene Aufgabe mit Software auszuführen.

Hersteller sollten stets transparent und nachvollziehbar machen, was eine Software benötigt und in Fällen, wo sich große Unterschiede zu vergleichbaren Paketen ergeben, diesen zusätzlichen Bedarf näher erklären.