Was ist ein 'headless' Programm oder eine 'headless' Anwendung?
Wenn du ein Backend-Programmierer bist, bist du höchstwahrscheinlich oft auf den Begriff von headless-Anwendungen (wie headless Java oder headless Chromium) gestoßen. Aber was bedeutet headless eigentlich?
headless bedeutet, dass es ohne graphical user interface (GUI) läuft*. In den meisten Fällen sind headless-Anwendungen Kommandozeilen-Anwendungen oder Anwendungen, die über eine Programmiersprache angesprochen werden.
Wenn du deinen Browser auf deinem Desktop oder Laptop öffnest, wirst du sehen, dass das Browserfenster aufploppt. Dieses Fenster ist eine graphical user interface (GUI). Es sei denn, du lebst unter einem Felsen, du hast deine faire Erfahrung mit GUIs gemacht und weißt, wie bequem sie manchmal sein können.
Jedoch sind Kommandozeilen-Benutzeroberflächen besonders in der professionellen IT-Welt ebenfalls üblich - meistens, weil sie auf Servern und lokalen PCs mit einem Bildschirm gleichermaßen verwendet werden können und sie viel einfacher zu automatisieren sind als GUIs.
Wenn du einige Zeit in der Anwendungsentwicklung gearbeitet hast, weißt du möglicherweise, dass GUI-Anwendungen eine riesige Anzahl unglaublich komplexer Bibliotheken benötigen, um zu laufen. Unter Linux gehört dazu der X11-Server (X11 ist das System, das alle Fenster und anderen grafischen Features auf deinem Bildschirm anzeigt und anordnet), einige Utility-Bibliotheken für X11 und möglicherweise einige Bibliotheken, um die High-Level-Benutzeroberflächen erstellen zu können, die in den meisten Anwendungen heute verwendet werden: Während High-Level-GUIs aus Buttons und Text-Inputs bestehen, bestehen Low-Level-GUIs aus Pixeln, farbigen Bereichen und Callback-Funktionen (aus denen die Buttons und Text-Inputs aufgebaut sind).
Wie bereits gesagt, laufen headless-Anwendungen ohne GUI. Unter den richtigen Umständen hat dies zwei Hauptvorteile:
- Du musst nicht so viel Zeit mit der Entwicklung einer komplexen grafischen Benutzeroberfläche verbringen
- Du kannst es einfach auf einem Server ausführen
Warum kannst du headless-Anwendungen auf einem Server ausführen, aber nicht normale GUI-Anwendungen?
Erstens, wie wir bereits gesagt haben, benötigen GUIs eine große Anzahl komplexer Bibliotheken und Software-Infrastruktur, die auf einem Server vorhanden sein muss. Auf vielen Servern (wie den meisten Linux-Servern) ist diese Software standardmäßig nicht installiert - da die Installation wertvolle Ressourcen wie Systemspeicher (RAM), Festplattenplatz verbrauchen würde und das System schwer zu warten wäre.
Contrary to common belief, running a GUI infrastructure on Linux (i.e. X server plus some utilities) does not require a screen or a dedicated graphics card. See our post on How to run X server using xserver-xorg-video-dummy driver on Ubuntu for an example on how to accomplish this.
Secondly, GUIs are hard to monitor, maintain and automate:
Stell dir vor, du hast 25 Server, auf denen jeweils dieselbe Anwendung läuft. Wenn dies eine GUI-Anwendung wäre, müsstest du dir 25 Fenster ansehen, die den Status der Anwendung anzeigen - nicht zu erwähnen die Zeit, die aufgewendet wird, um alle Fenster zuverlässig auf deinem lokalen Bildschirm anzuzeigen - oder die Entwicklungszeit, die für die GUI aufgewendet wurde
Using headless applications you can instead easily automate the task of monitoring the applications and therefore just display a summary on your local screen. Since you don’t have to spend time writing and maintaining GUIs, you can also spend your time more wisely.