7 Reaktionen

Firefox 48 besitzt in Rust geschriebenen Medien-Parser

Geschätzte Lesedauer:

Mozilla wird Anfang August Firefox 48 veröffentlichen. Dieser besitzt erstmals auf allen Desktop-Plattformen Code, welcher in Rust geschrieben ist und damit eine alte C++-Implementierung in einem sicherheitskritischen Bereich ersetzt.

Rust ist nicht nur die Programmiersprache, in welcher Mozillas kommende Rendering-Engine Servo entwickelt wird, nach und nach ersetzt Mozilla einzelne Komponenten von Firefox, welche bisher in C++ geschrieben sind, durch Rust-Code.

Mozilla unterstützt die Entwicklung der Programmiersprache Rust nun schon seit bereits knapp sieben Jahren. Im Mai dieses Jahres hat Rust seinen einjährigen Geburtstag seit der Fertigstellung von Rust 1.0 gefeiert. Einer der Vorteile von Rust ist, dass Rust einen Großteil von Speicherfehlern bereits auf Compiler-Ebene verhindert, was in Rust geschriebenen Code weniger anfällig für Abstürze und Sicherheitsprobleme macht als vergleichbarer Code, welcher in C++ geschrieben ist.

Was die Integration von Rust in Firefox betrifft, kann Mozilla mit Firefox 48 das Erreichen eines wichtigen Meilensteins verkünden: dann nämlich kommt zum ersten Mal plattformübergreifend auf dem Desktop in Rust geschriebener Code zum Einsatz. Genauer gesagt hat Mozilla in Firefox 48 den Medien-Parser für MP4-Dateien auch für Windows durch die Rust-Implementierung ersetzt – für Nutzer von Apple macOS sowie Linux ist dies bereits seit Firefox 45 der Fall.

Die Ausnutzung von Speicherfehlern durch manipulierte Mediendateien ist kein seltenes Angriffsszenario, um das System eines Anwenders zu kompromittieren. Darum ergibt es auch Sinn, dass sich Mozilla den Medien-Parser als erste Komponente herausgesucht hat, welche durch eine Rust-Implementierung ersetzt wird, wo Rust von Natur aus weniger Angriffsfläche durch mögliche Speicherfehler bieten soll.

Funktional entspricht die Rust-Implementierung zu 100 Prozent der vorherigen C++-Implementierung. Die Telemetrie-Daten von Firefox zeigen, dass der Rust-Code in der Entwicklungsphase bereits über eine Milliarde Mal ohne auch nur ein einziges Problem ausgeführt worden ist.

Rust in Firefox 48

Bei dieser Integration von Rust-Code in Firefox wird es nicht bleiben, in Zukunft werden weitere Komponenten von Firefox durch Rust-Implementierungen ersetzt werden. Auch die Unterstützung von Rust in Firefox für Android soll folgen.

Dieser Artikel wurde von Sören Hentzschel verfasst.

Sören Hentzschel ist Webentwickler und Mozilla Repräsentant (Alumnus). Neben diesem Mozilla-Blog betreibt er unter anderem noch firefoxosdevices.org sowie das Fußball-Portal Soccer-Zone und ist außerdem Administrator des deutschsprachigen Firefox Hilfeforums Camp Firefox.

7 Kommentare - bis jetzt!

Eigenen Kommentar verfassen
  1. Anon
    schrieb am :

    Einer der Vorteile von Rust ist, dass Rust einen Großteil von Speicherfehlern bereits auf Compiler-Ebene verhindert, was in Rust geschriebenen Code weniger anfällig für Abstürze und Sicherheitsprobleme macht als vergleichbarer Code, welcher in C++ geschrieben ist.

    Ein Großteil… welche Speicherfehler können bei Rust noch auftreten?

  2. Sören Hentzschel Verfasser des Artikels
    schrieb am :

    Naja, Rust schützt einen standardmäßig vor bestimmten Problemen, das heißt nicht, dass man keine Probleme erzeugen könnte. Ich vermeide bewusst eine Formulierung, welche aussagt, dass solche Probleme mit Rust vollkommen ausgeschlossen sind, weil der Entwickler durchaus Möglichkeiten hat, unsicheren Code zu schreiben. Das erstens, zweitens weiß ich gar nicht, ob Rust vor jeder Art von Speicherproblem standardmäßig schützt, ich bin kein Rust-Entwickler. 😉

  3. Klaus Rauser
    schrieb am :

    Als Applikationsverantwortlicher für die Browser (u.a. Firefox ESR) und als Entwickler (JS,PHP, Portale in JS/HTML/PHP, die Nutzung von Multimediaplayer z.B. JWPLayer/JSPLayer und APIs für RSS, Geodaten im Browser), sehe ich diese Entwicklung sehr "Positiv". Generell ist eine weitgehende Unabhängigkeit der Anwendung "Browser" vom Betriebssystem zwingend notwendig. Aber auch die Weiterentwicklung zur Seitendarstellung mit HTML5. Mit Sicherheit wird man auch mit Rust am Anfang mit "Kinderkrankeiten" (unsicheren Code oder Speicherprobleme) zu kämpfen haben. 

    Mehr zu Rust  oder https://www.rust-lang.org/en-US/

    Und übrigens Sören Hentschel, DANKE für das zeitnahe Einstellen von Informatioen über die Weiterentwicklung Firefox!

     

  4. Eric
    schrieb am :

    *gins* Danke für das Lächeln. Wenn ein Satz mit "…bereits über eine Milliarde Mal ohne auch nur ein einziges Problem ausgeführt worden ist." aufhört klingt es komisch wenn der nächste Satz mit "Dabei wird es nicht bleiben, in Zukunft werden…" beginnt.

    Und ja, ich weiß was du meinst. Trotzdem konnte ich mir das Lachen nicht verkneifen. 😉

  5. Sören Hentzschel Verfasser des Artikels
    schrieb am :

    @Klaus Rauser:

    Und übrigens Sören Hentschel, DANKE für das zeitnahe Einstellen von Informatioen über die Weiterentwicklung Firefox!

    Gerne. 🙂

    @Eric:

    *gins* Danke für das Lächeln. Wenn ein Satz mit "…bereits über eine Milliarde Mal ohne auch nur ein einziges Problem ausgeführt worden ist." aufhört klingt es komisch wenn der nächste Satz mit "Dabei wird es nicht bleiben, in Zukunft werden…" beginnt.

    Stimmt. 🙂 Werde ich besser formulieren. 😉

  6. foobar
    schrieb am :

    „dass der Rust-Code in der Entwicklungsphase bereits über eine Milliarde Mal ohne auch nur ein einziges Problem ausgeführt worden ist.“

    Dieser Satz enthält keine Aussage. Tatsächlich interessant wird es, wenn man aus dem gleichen Zeitraum eine Milliarde Ausführungen im C++-Äquivlanet danebenstellt und schaut, wie viele Probleme es da waren. Die gute alte Statistik. 😀

  7. Sören Hentzschel Verfasser des Artikels
    schrieb am :

    Natürlich enthält der Satz eine Aussage. Die Tatsache, dass der Rust-Code zuverlässig arbeitet, ist eine sehr wichtige Sache, immerhin geht es hier um die erste C++-Komponente überhaupt, welche in Firefox durch eine äquivalente Rust-Komponente ersetzt wird. Da ist es nicht selbstverständlich, dass direkt alles fehlerfrei funktioniert. Dass das keine Aussage wäre, kann man nicht sagen. Für den alten C++-Parser gibt es keine entsprechende Telemetrie. Ist aber auch gar nicht wichtig, da die Rust-Implementierung ja offensichtlich problemlos funktioniert und die C++-Implementierung nicht besser als 100 Prozent sein kann. Wäre es anders, dann wäre es sicher interessant um zu sehen, ob die Rust-Implementierung besser oder schlechter arbeitet, aber da schlechter ausgehend von den Telemetrie-Daten ja nicht möglich ist… 😉

Und jetzt du! Deine Meinung?

Erforderliche Felder sind mit einem Asterisk (*) gekennzeichnet. Die E-Mail-Adresse wird nicht veröffentlicht.