<div dir="ltr"><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:10pt;text-align:justify" id="gmail-docs-internal-guid-a3ed3e7d-7fff-ebc8-3196-cc28bebdcaa8"><span style="font-size:11pt;font-family:"Fira Sans";color:rgb(0,0,0);background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap">Browser Architecture Newsletter #7 (S02E02)</span></p><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:10pt;text-align:justify"><span style="font-size:11pt;font-family:"Fira Sans";color:rgb(0,0,0);background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap">It’s been a long six months since the </span><a href="https://mail.mozilla.org/pipermail/firefox-dev/2018-March/006272.html" style="text-decoration:none"><span style="font-size:11pt;font-family:"Fira Sans";color:rgb(17,85,204);background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:underline;vertical-align:baseline;white-space:pre-wrap">last Browser Architecture newsletter</span></a><span style="font-size:11pt;font-family:"Fira Sans";color:rgb(0,0,0);background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap">.  Short and sweet and no theme for this newsletter.</span></p><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:10pt;text-align:justify"><span style="font-size:11pt;font-family:"Fira Sans";color:rgb(0,0,0);background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap">XUL/XBL Replacement</span></p><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:10pt;text-align:justify"><span style="font-size:11pt;font-family:"Fira Sans";color:rgb(0,0,0);background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap">The XUL/XBL replacement project is churning ahead.  There are two major goals right now:</span></p><ol style="margin-top:0pt;margin-bottom:0pt"><li dir="ltr" style="list-style-type:decimal;font-size:11pt;font-family:"Fira Sans";color:rgb(0,0,0);background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre"><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt;text-align:justify"><span style="font-size:11pt;font-family:"Fira Sans";color:rgb(0,0,0);background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap">Replacing XBL bindings with Web technologies like Custom Elements; and</span></p></li><li dir="ltr" style="list-style-type:decimal;font-size:11pt;font-family:"Fira Sans";color:rgb(0,0,0);background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre"><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:10pt;text-align:justify"><span style="font-size:11pt;font-family:"Fira Sans";color:rgb(0,0,0);background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap">Making the main browser window be an HTML document with (mostly) HTML DOM elements instead of a XUL document with (mostly) XUL DOM elements.</span></p></li></ol><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:10pt;text-align:justify"><span style="font-size:11pt;font-family:"Fira Sans";color:rgb(0,0,0);background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap">There’s been progress on both fronts; more details can be found in the latest </span><a href="https://mail.mozilla.org/pipermail/firefox-dev/2018-August/006760.html" style="text-decoration:none"><span style="font-size:11pt;font-family:"Fira Sans";color:rgb(17,85,204);background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:underline;vertical-align:baseline;white-space:pre-wrap">XUL/XBL Replacement newsletter</span></a><span style="font-size:11pt;font-family:"Fira Sans";color:rgb(0,0,0);background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap">.</span></p><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:10pt;text-align:justify"><span style="font-size:11pt;font-family:"Fira Sans";color:rgb(0,0,0);background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap">Fluent</span></p><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:10pt;text-align:justify"><span style="font-size:11pt;font-family:"Fira Sans";color:rgb(0,0,0);background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap">Fluent is the localization system that Firefox intends as the replacement for XML and DTD files.  The first Firefox feature to </span><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1415730" style="text-decoration:none"><span style="font-size:11pt;font-family:"Fira Sans";color:rgb(17,85,204);background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:underline;vertical-align:baseline;white-space:pre-wrap">convert to Fluent is about:preferences</span></a><span style="font-size:11pt;font-family:"Fira Sans";color:rgb(0,0,0);background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap">, which now has only 10 old-style strings remaining (down from an initial 1100 old-style strings)!  Behind the scenes, a big hurdle in the path to smooth future conversions landed recently: </span><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1455649" style="text-decoration:none"><span style="font-size:11pt;font-family:"Fira Sans";color:rgb(17,85,204);background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:underline;vertical-align:baseline;white-space:pre-wrap">Bug 1455649</span></a><span style="font-size:11pt;font-family:"Fira Sans";color:rgb(0,0,0);background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap"> integrated localization deeply into the (chrome-only) DOM.</span></p><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:10pt;text-align:justify"><span style="font-size:11pt;font-family:"Fira Sans";color:rgb(0,0,0);background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap">Sync and storage</span></p><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:10pt;text-align:justify"><a href="https://github.com/mozilla/rkv" style="text-decoration:none"><span style="font-size:11pt;font-family:"Fira Sans";color:rgb(17,85,204);background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:underline;vertical-align:baseline;white-space:pre-wrap">rkv</span></a><span style="font-size:11pt;font-family:"Fira Sans";color:rgb(0,0,0);background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap"> is a new lightweight Rust key-value storage engine built on top of LMDB.  We’re looking at using it for a variety of components, including XULStore and the search cache.  In order to let others “kick the tires” easily, Myk Melez </span><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1445451" style="text-decoration:none"><span style="font-size:11pt;font-family:"Fira Sans";color:rgb(17,85,204);background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:underline;vertical-align:baseline;white-space:pre-wrap">landed rkv into mozilla-central</span></a><span style="font-size:11pt;font-family:"Fira Sans";color:rgb(0,0,0);background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap">, although it’s not yet compiled into Firefox for Desktop.  If you’ve got some keys and some values that you’d like to persist efficiently, I know a guy.</span></p><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:10pt;text-align:justify"><a href="https://github.com/mozilla/mentat" style="text-decoration:none"><span style="font-size:11pt;font-family:"Fira Sans";color:rgb(17,85,204);background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:underline;vertical-align:baseline;white-space:pre-wrap">Mentat</span></a><span style="font-size:11pt;font-family:"Fira Sans";color:rgb(0,0,0);background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap"> was to be our heavyweight store for user data that we wanted to sync between devices.  But we couldn’t bring the technology to a meaningful market quickly enough, so </span><a href="https://mail.mozilla.org/pipermail/firefox-dev/2018-September/006780.html" style="text-decoration:none"><span style="font-size:11pt;font-family:"Fira Sans";color:rgb(17,85,204);background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:underline;vertical-align:baseline;white-space:pre-wrap">we’re not pursuing Mentat any further</span></a><span style="font-size:11pt;font-family:"Fira Sans";color:rgb(0,0,0);background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap">.  The Application Services team is </span><a href="https://github.com/mozilla/application-services" style="text-decoration:none"><span style="font-size:11pt;font-family:"Fira Sans";color:rgb(17,85,204);background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:underline;vertical-align:baseline;white-space:pre-wrap">rapidly building a cross-platform Sync 1.5 stack in Rust</span></a><span style="font-size:11pt;font-family:"Fira Sans";color:rgb(0,0,0);background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap"> and that will be the vehicle for improving the Firefox Sync experience for the foreseeable future.</span></p><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:10pt;text-align:justify"><span style="font-size:11pt;font-family:"Fira Sans";color:rgb(0,0,0);background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap">Node time! </span></p><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:10pt;text-align:justify"><span style="font-size:11pt;font-family:"Fira Sans";color:rgb(0,0,0);background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap">We have made significant progress toward enabling Node.js tooling in the Firefox build system.  This effort truly spans teams and projects: the build maintainers and the browser architecture team made a case for Node.js and set technical direction; the GitHub Integration working group incubated the effort; and Firefox feature teams including the Activity Stream team (Dan Mosedale), the ESLint team (Mark Banner), and the Devtools team (Jason Laster and Alexandre Poirot) are driving the work across the line!</span></p><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:10pt;text-align:justify"><span style="font-size:11pt;font-family:"Fira Sans";color:rgb(0,0,0);background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap">The build </span><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1483595" style="text-decoration:none"><span style="font-size:11pt;font-family:"Fira Sans";color:rgb(17,85,204);background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:underline;vertical-align:baseline;white-space:pre-wrap">now requires Node.js by default</span></a><span style="font-size:11pt;font-family:"Fira Sans";color:rgb(0,0,0);background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap">.  Up next is adding the ability to use this from moz.build files and then drafting proposals for how we’d like to manage node_modules.  The first consumers will be the Firefox debugger, Activity Stream, and the ESLint integration.  Thanks to the many folks who have helped and continue to help this project forward.</span></p><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:10pt;text-align:justify"><span style="font-size:11pt;font-family:"Fira Sans";color:rgb(0,0,0);background-color:transparent;font-weight:700;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap">Firefox technical leadership in the module ownership system</span></p><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:10pt;text-align:justify"><span style="font-size:11pt;font-family:"Fira Sans";color:rgb(0,0,0);background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap">Since the last newsletter the new Firefox Technical Leadership Module has been formed. You can see some of the discussion around it and its purpose in the </span><a href="https://groups.google.com/forum/#!msg/mozilla.governance/YTTqUzWaJ00/-MopTK71AwAJ" style="text-decoration:none"><span style="font-size:11pt;font-family:"Fira Sans";color:rgb(17,85,204);background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:underline;vertical-align:baseline;white-space:pre-wrap">governance thread</span></a><span style="font-size:11pt;font-family:"Fira Sans";color:rgb(0,0,0);background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap">. The FTLM has representation from the Browser Architecture team in the form of Dave Townsend.</span></p><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:10pt;text-align:justify"><span style="font-size:11pt;font-family:"Fira Sans";color:rgb(0,0,0);background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap"></span></p><p style="line-height:1.38;margin-top:0pt;margin-bottom:10pt;text-align:justify"><span style="font-size:11pt;font-family:"Fira Sans";color:rgb(0,0,0);background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap">You can always reach us on Slack or IRC (#browser-arch).  This newsletter is also available as a <a href="https://docs.google.com/document/d/1MR86LaXGJwVYrJ-Z7urFZUwB8xdYM2tlPwA9nQ_vMIE/edit" target="_blank">Google Doc</a>.<br></span></p><p style="line-height:1.38;margin-top:0pt;margin-bottom:10pt;text-align:justify"><span style="font-size:11pt;font-family:"Fira Sans";color:rgb(0,0,0);background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap">Nick (who promises a theme next time)</span></p></div>