BOB-Keynote 2015: Towards Functional Operating Systems
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?