Die BOB 2015 ist passiert! Wir hatten
einen tollen Konferenztag mit vielen Vorträgen und
Tutorials
zum Besten in der Software-Entwicklung.
Besonders beeindruckt hat uns der Vortrag von unserem Eröffnungsredner
Anil Madhavapeddy von der Universität
Cambridge, der über das Projekt Mirage
berichtete - ein Framework, um komplette Betriebssystem-Images aus
OCaml-Code zusammenzustellen. Mirage ist damit eine spektakuläre
Anwendung funktionaler Programmierung in der Praxis. Ein
Vortragsvideo sowie die Folien zu Dr. Madhavapeddys Vortrag stehen
auf der BOB-Seite. Dieses
Posting fasst die wichtigsten Aspekte von Mirage zusammen.
Hintergrund
Wer heutzutage einen Dienst im Internet anbieten muss, greift oft auf
eine Kombination von Betriebssystem und Webserver wie den
LAMP-Stack
zu.
Zu LAMP gehört allerdings ein komplettes Linux mit
Multi-User-Verwaltung, Prozessverwaltung, jeder Menge
Betriebssystemtreiber und haufenweise weiterer Funktionalität, die
Angriffe wie
Shellshock
ermöglicht. Je mehr Code im System vorhanden ist, desto anfälliger
ist das System. Außerdem ist der größte Teil dieser Funktionalität in
C geschrieben und damit anfällig für Sicherheitsprobleme wie
Heartbleed.
Muss das sein, wenn ein Dienst im Internet doch all diese
Funktionalität des drumherumliegenden Systems gar nicht benötigt?
Natürlich nicht.
Mirage
Mirage ist ein Framework, um sogenannte Unikernels zu bauen, also
Betriebssystem-Images, die jeweils auf eine bestimmte Aufgabe
spezialisiert sind. Dazu wird der Code, der den Dienst implementiert,
in OCaml geschrieben. Mirage macht daraus ein
Image, das direkt unter Xen laufen kann -
ohne dass ein Linux oder anderes Betriebssystem drumherum benötigt
wird. Diese Images nehmen typischerweise nur wenige Megabytes ein
(manchmal sogar weniger als ein Megabyte), verglichen mit den
Gigabytes, die eine moderne Linux-Installation verschlingt. Xen ist
um mehrere Größenordnungen weniger komplex als z.B. Linux und isoliert
virtuelle Maschinen deutlich besser als Linux Prozesse voneinander
trennt. Diese virtuellen Maschinen können so schnell gestartet
werden, dass es sogar möglich ist, Internet-Services so zu bauen, dass
die VM pro Anfrage neu gestartet wird. (Ein Mirage-Image kann
innerhalb weniger Millisekunden hochfahren.)
Zu Mirage gehören ein kompletter TCP/IP-Stack und eine ganze
Reihe von Internet-Protokollen, insbesondere eine Implementierung von
TLS. Damit können eine Reihe
von Internet-Services auf Basis solcher Unikernels aufgesetzt werden,
angefangen mit dem Mirage-Web-Server.
Die TLS-Implementierung ist exemplarisch für die weiteren,
entscheidenden Vorteile, die in OCaml geschriebene Software mit sich
bringt:
- mehr Produktivität
- weniger Fehler
- exzellente Unterstützung für Modularität
- insbesondere sind
Buffer-Overflow-Probleme
von vornherein ausgeschlossen - das OCaml-TLS ist deswegen natürlich
nicht anfällig für Heartbleed und ähnliche
Probleme
Das Modulsystem von OCaml wird insbesondere benutzt, um Mirage sehr
weitgehend konfigurierbar zu machen. So ist es möglich, einen
Mirage-Kernel zu Testzwecken erst einmal als „normales“ Programm
laufen zu lassen, indem die Implementierungen der Module für den
TCP/IP-Stack etc. durch solche ausgetauscht werden, welche das
drumherumliegende Betriebssystem benutzen.
Mirage ist Open Source und seit 2013 produktiv. Die
Web-Seite enthält umfangreiche
Dokumentation, und die Community um das Projekt wächst
täglich.
Vielleicht probieren Sie es auch mal aus?