Open Source im professionellen Einsatz

Oracle veröffentlicht Container-Runtime und Debugger in Rust

06.07.2017

Mit Railcar veröffentlicht Oracle auf Github eine Rust-Implementierung des OCI-Runtime-Spec. Crashcart ist ein Microcontainer Debugging Tool.

462

Railcar ähnelt der Referenzimplementierung von Runc, ist aber komplett in Rust geschrieben. Das soll für Speichersicherheit sorgen und erlaubt es den Programmierern, sich nicht großartig mit Garbage Collection und Multithreading beschäftigen zu müssen. Oracle hat sich für die Software entschieden, weil Go Probleme im Umgang mit Linux Namespaces habe und C nicht sicher genug sei. Rust bewege sich zwischen beiden, erlaube eine weitgehende Kontrolle über das Threading und komme so auch mit Namespaces zurecht.

Crashcart erlaubt es hingegen, ein Images mit Linux-Binärdateien in einen Container zu laden. Ein Builder, der als privilegierter Container läuft, erzeugt aus dem Dockerfile ein "crashcart_builder"-Image. Den privilegierten Container braucht es, weil Crashcart das Image per Loopback-Mount auf Ext 3 erzeugt und dann Dateien hinein kopiert. Beim Erststart braucht das Image einige Zeit, weil im Hintergrund der Nix-Paketmanager die Binaries aus dem Quellcode erzeugt. Anschließend kann der User seine Binaries in einem Container seiner Wahl verwenden, zum Beispiel für Analysezwecke.

Oracle geht auch auf die Herausforderungen beim Implementieren von Railcar ein. Probleme bereite es unter anderem, ein Backend zur Zusammenarbeit mit Docker zu überreden, weil so viele verschiedene Prozesse involviert seien, was Debugging erschwere. Das Spec sei zudem nicht vollständig, denn Containerd und Runc unterstützen bestimmte wichtige Aufrufe, die nicht im Spec stehen. Auch an anderen Stellen folgt das Duo nicht exakt der Spezifikation. So sollte ein zweifaches Löschen von Containern eine Fehlermeldung ausgeben, was nicht der Fall ist. Auch die Implementierung der Pre- und Poststart-Hooks sei nicht ganz einfach gewesen, wohl auch, weil die Spezifikation noch recht jung sei.

Mit Railcar veröffentlicht Oracle eine Container-Runtime in Rust (Quelle: Oracle, https://github.com/oracle/railcar)

Nicht zuletzt gibt es Abweichungen von Runc: So erzeugt Railcar stets einen Initprozess, um Merkwürdigkeiten im Umgang mit Namespaces und PIDs zu umgehen. Mögliche ungewisse Auswirkungen könnte diese Entscheidung auf Stdout und Stderr haben, wenn man Railcar ohne Terminal betreibt, schreiben die Entwickler in einem begleitenden Blogpost. Dieses Problem wolle man als nächstes angehen, auch um Railcar kompatibler zu Runc zu machen. Ansonsten fehlt Railcar noch das "stats"-Kommando, automatische Tests gegen neuere Spec-Versionen stehen auch auf dem Fahrplan.

Insgesamt sei man aber sehr zufrieden mit der Wahl von Rust für das Projekt. Anders als Go habe man für die Rust-Implementierung keine C-Code-Injektion benötigt und man sei sehr zuversichtlich, was die Speichersicherheit von Railcar angehe. Die Startzeit für Container sei gut, hier bremse aber tatsächlich der Kernel: Das Anlegen von Cgroups und Network Namespaces sei der größte Bremsklotz in dem Konstrukt. Sowohl Railcar als auch Crashcart stehen jeweils unter zwei Lizenzen: der Universal Permissive License (UPL) 1.0 und der Apache-Lizenz 2.0 und lassen sich auf Github herunterladen.

Ähnliche Artikel

  • Rust

    Mit Version 1.0 legte Mozillas System-Programmiersprache Rust Mitte Mai nach längerer Entwicklungszeit eine erste Verschnaufpause ein. Ob sie sich im weiteren Rennverlauf gegen C und C++ behaupten kann, hängt außer von Mozillas Engagement auch davon ab, ob die Sprache mit ihren Features punktet.

  • Docker 1.11 mit RunC und Containerd

    Docker-Entwickler Arnaud Porterie kündigt mit Docker 1.11 die erste Ausgabe der Containerlösung an, die auf RunC und Containerd baut.

  • Docker 1.11: OCI-Standardkonform

    Mit Docker 1.11 machen die Entwickler ihre Containerlösung konform zu den Vorgaben der Open Container Initiative (OCI), indem sie die RunC-Runtime und den Container-Daemon "containerd" verwendet.

  • Rust Language Server soll Rust in IDEs integrieren

    Die von Mozilla entwickelte Programmiersprache Rust soll in möglichst zahlreiche IDEs Einzug finden. Projektentwickler setzen dafür auf das noch recht junge Language Server Protocol.

  • Rust: Mozilla veröffentlicht eigene Programmiersprache

    Die Mozilla Foundation veröffentlicht mit Rust nun eine eigene Programmiersprache.

comments powered by Disqus

Stellenmarkt

Artikelserien und interessante Workshops aus dem Magazin können Sie hier als Bundle erwerben.