Original-URL des Artikels: https://www.golem.de/1105/83594.html    Veröffentlicht: 19.05.2011 10:56    Kurz-URL: https://glm.io/83594

Termkit

Neue Generation von Unix-Werkzeugen

Steven Wittens hat mit Termkit eine neue Generation von Unix-Terminals vorgestellt. Sein System interpretiert die Grundphilosophie von Unix auf moderne Art und Weise mit dem Ziel, eine neue Generation von Unix-Werkzeugen zu schaffen.

Aktuelle Displays verfügen über eine hohe Auflösung von mehreren Millionen Pixeln und zeigen darauf Millionen von Farben, doch viele Administratoren arbeiten weiterhin mit einem Unix-Terminal, das in den 80er Jahren designt wurde. Viele der noch heute standardmäßig genutzten Unix-Werkzeuge stammen aus den 70er Jahren, wo Daten entweder binär oder Text waren und in nichtproportionaler Schrift (Monospace) angezeigt wurden. Die Interaktion des Nutzers sei auf rein lineare Tastenkommandos beschränkt, schreibt der Entwickler Steven Wittens und stellt mit Termkit eine neue Generation von Unix-Terminals vor, die eine neue Generation von Unix-Werkzeugen begründen soll.

Viele kleine Programme

Das Grundkonzept von Unix sei nach wie vor gut, befindet Wittens: viele kleine Programme, die kombiniert werden können. Doch viele der Werkzeuge seien in einer Zeit geschrieben worden, als Computer noch viel weniger Ressourcen hatten und die Interaktion mit Computern noch weitgehend unerforscht war.

Heute gebe es bessere Wege, Informationen anzuzeigen, als damals, man habe dank des Webs viel über Datenaustausch, Netzwerktransparenz und API-Design gelernt. Und man wisse heute, dass kleine Änderungen in der Umsetzung große Auswirkungen auf die Usability haben könnten. Während also die Idee einer flexiblen Werkzeugsammlung großartig sei, könnten die einzelnen Werkzeuge heute viel besser sein.

Bessere Darstellung

Mit Termkit hat Wittens ein Frontend auf Basis von Webkit geschrieben, das all das anzeigen kann, was auch ein Browser darstellt, einschließlich Bildern, Sound und Videos dank HTML5. Die Ausgabe ist aus generischen Widgets für Listen, Tabellen, Bildern, Dateien, Fortschrittsbalken und Ähnlichem zusammengesetzt.

So soll eine Lösung entstehen, die alltäglich verwendete Daten darstellt und mit Plugins erweitert werden kann. Das Backend streamt die Ausgabe als Serie von Objekten und Kommandos an das Frontend.

Unix-Pipes neu gedacht

Auch die in Unix oft genutzten Pipes hat Wittens neu gestaltet. Statt auf die drei Ströme Standard In, Standard Out und Standard Error setzt er auf eine Trennung zwischen Nutzereingaben und der Kommunikation zwischen Programmen.

Der Datenstrom unterscheidet sich kaum vom klassischen Standard In, wie er in Unix verwendet wird, mit einer Ausnahme: Ihm werden Mime-artige Header wie Content-Type oder Content-Length vorangestellt, wobei nur Content-Type zwingend erforderlich ist. So wissen Programme, welche Art von Daten sie erhalten, ohne dass sie dies selbst herausfinden müssen. Der eigentliche Datenstrom besteht aus Binärdaten.

Termkit nutzt Node.js, Socket.IO und Webkit

Die sogenannten "View Pipes" transportieren Widgets und UI-Kommandos von und zum Frontend via JSON. Damit die Daten in lesbarer Form dargestellt werden können, kann Termkit auf eine Bibliothek von Ausgabeformatierern zugreifen, die sich jeweils um eine bestimmte Art von Daten kümmern, beispielsweise Text, Code und Bilder. Termkit wählt die richtige Komponente anhand des übermittelten Content-Type aus und generiert daraus einen Stream von View-Updates, die über die View Out Pipe an die Ausgabe weitergeleitet werden.

So kann unter anderem mit dem Befehl "cat" eine PNG-Grafik angezeigt werden, ohne dass Termkit wissen muss, wie man eine PNG-Grafik anzeigt. Auch HTTP-GET- und POST-Requests lassen sich auf diesem Weg verarbeiten. Während in einem traditionellen Unix-Terminal die gesamte Interaktion synchron abläuft, setzt Termkit auf eine Trennung von Front- und Backend. So kann das Frontend lokal auf dem System laufen, das Backend auf einem in der Ferne stehenden Server. Die Verbindung wird über SSH getunnelt.

Sämtliche Display-Updates und Queries laufen dabei asynchron ab, das auf Webkit basierende HTML-Display besteht dafür aus mehreren View-Komponenten und die View-Pipes jedes Subprozesses werden zu ihren eigenen Views geroutet. Zugleich kann jedes Widget Callback-Nachrichten an seinen eigenen Prozess senden, sofern dieser noch läuft.

Bessere Syntax für die Kommandozeile

Für die Eingabe setzt Termkit auf ein Widget namens tokenfield.js und kommt ohne Escaping aus, da Kommandos immer als Tokens behandelt werden. Tasten mit spezieller Bedeutung wie Hochkomma werden doppelt gedrückt, wenn nur das jeweilige Zeichen geschrieben werden soll. Zudem bietet tokenfield.js eine automatische Vervollständigung und unterstützt Icon-Badges.

Statt unnötiger Abkürzungen und inkonsistenter Argumente (beispielsweise -r und -R) soll Termkit eine bessere Usability bieten. So könnten beim Tippen der jeweils relevante Teil einer Manpage als Tooltip eingeblendet und gefährliche Schalter in Rot eingefärbt werden.

Es geht nicht um Äußerlichkeiten

Wittens betont, es gehe ihm bei Termkit nicht um ein schickes Aussehen, sondern um grundlegende Verbesserungen "unter der Haube". Derzeit sei Termkit nur eine eher holprige Alphaversion, die in den nächsten Monaten viel mehr können soll. Die Architektur dafür sei vorhanden, schreibt Wittens in einem Blogeintrag. Wittens selbst arbeitet seit rund einem Jahr an Termkit, dessen Code auf Github zu finden ist. Die Software nutzt Node.js, Socket.IO, jQuery und Webkit.  (ji)


Verwandte Artikel:
Betriebssysteme: Oracle überrascht mit Solaris 11.4 Beta   
(02.02.2018, https://glm.io/132545 )
Microsoft: Windows-Server-Admins wünschen sich GUI-Schalter zurück   
(07.04.2017, https://glm.io/127205 )
Linux-Desktop: KDE Plasma 5.11 bringt neues Design der Systemeinstellungen   
(10.10.2017, https://glm.io/130535 )
In-Car-Entertainment: Mazda schließt drei Jahre alte Sicherheitslücke   
(15.06.2017, https://glm.io/128398 )
Microsoft: OpenBSD kommt für die Azure-Cloud   
(09.06.2017, https://glm.io/128295 )

© 1997–2019 Golem.de, https://www.golem.de/