<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.mozilla.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Rillian</id>
	<title>MozillaWiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.mozilla.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Rillian"/>
	<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/Special:Contributions/Rillian"/>
	<updated>2026-05-19T00:21:27Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.10</generator>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Media/Bugs&amp;diff=1189037</id>
		<title>Media/Bugs</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Media/Bugs&amp;diff=1189037"/>
		<updated>2018-02-15T00:51:42Z</updated>

		<summary type="html">&lt;p&gt;Rillian: /* Core::Audio/Video - Playback Queries */ Fix url formatting&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Media Bugs - Common Searches to see Product Backlog ==&lt;br /&gt;
&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[https://mzl.la/2nxVkSy &amp;quot;Real-time Media&amp;quot; Bugs] that have landed during Firefox 55&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[https://mzl.la/2ny2tlV &amp;quot;Playback&amp;quot; Bugs&amp;quot;] that have landed during Firefox 55&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===WebRTC, WebAudio, Cubeb, MediaStreamGraph and Media Recording (combined)===&lt;br /&gt;
* [http://mzl.la/1U5l5GE Un-triaged bugs]&lt;br /&gt;
* [http://mzl.la/1U5ltES Unconfirmed bugs]&lt;br /&gt;
* [http://mzl.la/1XhyImX P1 bugs]&lt;br /&gt;
* [https://crash-stats.mozilla.com/search/?proto_signature=~Webrtc&amp;amp;proto_signature=~webrtc&amp;amp;proto_signature=~jsep&amp;amp;proto_signature=~VideoConduit&amp;amp;proto_signature=~MediaRecorder&amp;amp;proto_signature=~MediaStreamGraph&amp;amp;proto_signature=~rtc%3A%3A&amp;amp;proto_signature=~cubeb&amp;amp;proto_signature=~MediaEncoder&amp;amp;proto_signature=~MediaEngine&amp;amp;proto_signature=~MediaManager&amp;amp;product=Firefox&amp;amp;_sort=-date&amp;amp;_facets=signature&amp;amp;_columns=date&amp;amp;_columns=signature&amp;amp;_columns=product&amp;amp;_columns=version&amp;amp;_columns=build_id&amp;amp;_columns=platform#facet-signature Crashes in WebRTC, MediaStreamGraph, cubeb, MediaRecorder]&lt;br /&gt;
** [https://crash-stats.mozilla.com/search/?proto_signature=~Webrtc&amp;amp;proto_signature=~webrtc&amp;amp;proto_signature=~jsep&amp;amp;proto_signature=~VideoConduit&amp;amp;proto_signature=~MediaRecorder&amp;amp;proto_signature=~MediaStreamGraph&amp;amp;proto_signature=~rtc%3A%3A&amp;amp;proto_signature=~cubeb&amp;amp;proto_signature=~MediaEncoder&amp;amp;proto_signature=~MediaEngine&amp;amp;proto_signature=~MediaManager&amp;amp;product=Firefox&amp;amp;version=53.0a1&amp;amp;version=53.0a2&amp;amp;version=54.0a1&amp;amp;version=54.0b1&amp;amp;version=55.0a1&amp;amp;_sort=-date&amp;amp;_facets=signature&amp;amp;_columns=date&amp;amp;_columns=signature&amp;amp;_columns=product&amp;amp;_columns=version&amp;amp;_columns=build_id&amp;amp;_columns=platform#facet-signature Just in 53/54/55 (Note: URL will need updates occasionally)]&lt;br /&gt;
* WebAudio: Note that this has to be split due to URL-length limits in the server&lt;br /&gt;
** [https://crash-stats.mozilla.com/search/?proto_signature=~WebAudio&amp;amp;proto_signature=~AudioNode&amp;amp;proto_signature=~AudioContext&amp;amp;proto_signature=~BufferDecoder&amp;amp;proto_signature=~OscillatorNode&amp;amp;proto_signature=~AudioDestination&amp;amp;proto_signature=~ScriptProcessorNode&amp;amp;proto_signature=~DelayNode&amp;amp;proto_signature=~AudioScheduled&amp;amp;proto_signature=~CompressorNode&amp;amp;proto_signature=~AudioListener&amp;amp;proto_signature=~ConstantSource&amp;amp;proto_signature=~PannerNode&amp;amp;proto_signature=~FilterNode&amp;amp;product=Firefox&amp;amp;_sort=-date&amp;amp;_facets=signature&amp;amp;_columns=date&amp;amp;_columns=signature&amp;amp;_columns=product&amp;amp;_columns=version&amp;amp;_columns=build_id&amp;amp;_columns=platform#facet-signature WebAudio crashes -- first half]&lt;br /&gt;
** [https://crash-stats.mozilla.com/search/?proto_signature=~DelayBuffer&amp;amp;proto_signature=~GainNode&amp;amp;proto_signature=~ShaperNode&amp;amp;proto_signature=~AudioSourceNode&amp;amp;proto_signature=~AudioEvent&amp;amp;proto_signature=~AudioProcessing&amp;amp;proto_signature=~ConvolverNode&amp;amp;proto_signature=~AudioParam&amp;amp;proto_signature=~HRTF&amp;amp;proto_signature=~WebCore&amp;amp;proto_signature=~AudioBuffer&amp;amp;proto_signature=~AnalyserNode&amp;amp;product=Firefox&amp;amp;_facets=signature&amp;amp;_columns=date&amp;amp;_columns=signature&amp;amp;_columns=product&amp;amp;_columns=version&amp;amp;_columns=build_id&amp;amp;_columns=platform#facet-signature WebAudio crashes -- 2nd half]&lt;br /&gt;
&lt;br /&gt;
===Core::Audio/Video (Main Component) Queries===&lt;br /&gt;
&lt;br /&gt;
* [http://mzl.la/1h3slCq Un-triaged Audio/Video bugs]&lt;br /&gt;
** Help us triage.  Any bug found in this search needs to be moved to one of the other media components (shown below)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Core::Audio/Video - Playback Queries===&lt;br /&gt;
&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?bug_status=UNCONFIRMED&amp;amp;bug_status=NEW&amp;amp;bug_status=ASSIGNED&amp;amp;bug_status=REOPENED&amp;amp;component=Audio%2FVideo&amp;amp;component=Audio%2FVideo%3A%20Playback&amp;amp;list_id=14006559&amp;amp;priority=--&amp;amp;product=Core&amp;amp;query_format=advanced&amp;amp;query_based_on=&amp;amp;columnlist=product%2Ccomponent%2Cassigned_to%2Cbug_status%2Cshort_desc%2Cpriority%2Cchangeddate Untriaged Playback bugs]&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?priority=P1&amp;amp;query_format=advanced&amp;amp;bug_status=UNCONFIRMED&amp;amp;bug_status=NEW&amp;amp;bug_status=ASSIGNED&amp;amp;bug_status=REOPENED&amp;amp;component=Audio%2FVideo%3A%20Playback&amp;amp;product=Core P1 Playback bugs]&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?priority=P2&amp;amp;query_format=advanced&amp;amp;bug_status=UNCONFIRMED&amp;amp;bug_status=NEW&amp;amp;bug_status=ASSIGNED&amp;amp;bug_status=REOPENED&amp;amp;component=Audio%2FVideo%3A%20Playback&amp;amp;product=Core P2 Playback bugs]&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?priority=P3&amp;amp;query_format=advanced&amp;amp;bug_status=UNCONFIRMED&amp;amp;bug_status=NEW&amp;amp;bug_status=ASSIGNED&amp;amp;bug_status=REOPENED&amp;amp;component=Audio%2FVideo%3A%20Playback&amp;amp;product=Core P3 Playback bugs]&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?priority=P5&amp;amp;query_format=advanced&amp;amp;bug_status=UNCONFIRMED&amp;amp;bug_status=NEW&amp;amp;bug_status=ASSIGNED&amp;amp;bug_status=REOPENED&amp;amp;component=Audio%2FVideo%3A%20Playback&amp;amp;product=Core P5 Playback bugs]&lt;br /&gt;
* [https://is.gd/media_playback_triaged Open Playback bugs]&lt;br /&gt;
** Ralph Giles (rillian on irc) leads Playback. Please reach out to them directly if you have suggestions/questions about Playback bugs.&lt;br /&gt;
&lt;br /&gt;
===Core::Audio/Video - MediaStreamGraph Bugzilla Queries===&lt;br /&gt;
&lt;br /&gt;
* [http://mzl.la/1RC0aXs Bugzilla Ranked &amp;quot;P1&amp;quot;&amp;quot; list] &lt;br /&gt;
**Add the &amp;quot;Rank&amp;quot; Column to your results and sort on Rank &lt;br /&gt;
* [http://mzl.la/1RC0fug Bugzilla Ranked &amp;quot;P2&amp;quot; list] &lt;br /&gt;
**Add the &amp;quot;Rank&amp;quot; Column to your results and sort on Rank &lt;br /&gt;
***The option to &amp;quot;Change columns&amp;quot; is at bottom of search results&lt;br /&gt;
* [http://mzl.la/1RC0oxP Bugzilla Ranked &amp;quot;P3 to P5 list] &lt;br /&gt;
** P3 bugs are unlikely to be fixed within the next 6 months; patches are welcome. P4 and P5 bugs will not get engineering time, but we will accept patches for P4 bugs.  If you need a bug fixed sooner and can&#039;t contribute a patch or if you disagree with how a bug is prioritized, please needinfo the triage owner of that bug about raising the priority.&lt;br /&gt;
* [http://mzl.la/1RBZUb6 Un-triaged MediaStreamGraph bugs]&lt;br /&gt;
**Search based on Open MediaStreamGraph component bugs that have priority flag set]&lt;br /&gt;
* [http://mzl.la/1RC02r8 Unconfirmed MediaStreamGraph bugs]&lt;br /&gt;
**Search based on Open MediaStreamGraph component bugs that have priority flag set]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Core::Audio/Video - Cubeb Bugzilla Queries===&lt;br /&gt;
&lt;br /&gt;
* [http://mzl.la/1HjtQrV Bugzilla Ranked &amp;quot;P1&amp;quot;&amp;quot; list] &lt;br /&gt;
**Add the &amp;quot;Rank&amp;quot; Column to your results and sort on Rank &lt;br /&gt;
* [http://mzl.la/1HjtUIj Bugzilla Ranked &amp;quot;P2&amp;quot; list] &lt;br /&gt;
**Add the &amp;quot;Rank&amp;quot; Column to your results and sort on Rank &lt;br /&gt;
***The option to &amp;quot;Change columns&amp;quot; is at bottom of search results&lt;br /&gt;
* [http://mzl.la/1HjtW2Y Bugzilla Ranked &amp;quot;P3 to P5 list] &lt;br /&gt;
** P3 bugs are unlikely to be fixed within the next 6 months; patches are welcome. P4 and P5 bugs will not get engineering time, but we will accept patches for P4 bugs.  If you need a bug fixed sooner and can&#039;t contribute a patch or if you disagree with how a bug is prioritized, please needinfo the triage owner of that bug about raising the priority.&lt;br /&gt;
* [http://mzl.la/1Hju0Qg Un-triaged Cubeb bugs]&lt;br /&gt;
**Search based on Open Cubeb component bugs that have priority flag set]&lt;br /&gt;
* [http://mzl.la/1Hju7Lu Unconfirmed Cubeb bugs]&lt;br /&gt;
**Search based on Open Cubeb component bugs that have priority flag set]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Core::Audio/Video - GMP (Gecko Media Plugin) Bugzilla Queries===&lt;br /&gt;
&lt;br /&gt;
* [http://mzl.la/1Q3CLBo Bugzilla Ranked &amp;quot;P1&amp;quot;&amp;quot; list] &lt;br /&gt;
**Add the &amp;quot;Rank&amp;quot; Column to your results and sort on Rank &lt;br /&gt;
* [http://mzl.la/1HjuaXK Bugzilla Ranked &amp;quot;P2&amp;quot; list] &lt;br /&gt;
**Add the &amp;quot;Rank&amp;quot; Column to your results and sort on Rank &lt;br /&gt;
***The option to &amp;quot;Change columns&amp;quot; is at bottom of search results &lt;br /&gt;
* [http://mzl.la/1NceYey Bugzilla Ranked &amp;quot;P3 to P5 list] &lt;br /&gt;
** P3 bugs are unlikely to be fixed within the next 6 months; patches are welcome. P4 and P5 bugs will not get engineering time, but we will accept patches for P4 bugs.  If you need a bug fixed sooner and can&#039;t contribute a patch or if you disagree with how a bug is prioritized, please needinfo the triage owner of that bug about raising the priority.&lt;br /&gt;
* [http://mzl.la/1Hjujui Un-triaged GMP bugs]&lt;br /&gt;
**Search based on Open GMP component bugs that have priority flag set]&lt;br /&gt;
* [http://mzl.la/1HjuoOK Unconfirmed GMP bugs]&lt;br /&gt;
**Search based on Open GMP component bugs that have priority flag set]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Core::Audio/Video - Recording Bugzilla Queries===&lt;br /&gt;
&lt;br /&gt;
* [http://mzl.la/1jXz16N Bugzilla Ranked &amp;quot;P1&amp;quot;&amp;quot; list] &lt;br /&gt;
**Add the &amp;quot;Rank&amp;quot; Column to your results and sort on Rank &lt;br /&gt;
* [http://mzl.la/1M0rudk Bugzilla Ranked &amp;quot;P2&amp;quot; list] &lt;br /&gt;
**Add the &amp;quot;Rank&amp;quot; Column to your results and sort on Rank &lt;br /&gt;
***The option to &amp;quot;Change columns&amp;quot; is at bottom of search results&lt;br /&gt;
* [http://mzl.la/1MTEvYw Bugzilla Ranked &amp;quot;P3 to P5 list] &lt;br /&gt;
** P3 bugs are unlikely to be fixed within the next 6 months; patches are welcome. P4 and P5 bugs will not get engineering time, but we will accept patches for P4 bugs.  If you need a bug fixed sooner and can&#039;t contribute a patch or if you disagree with how a bug is prioritized, please needinfo the triage owner of that bug about raising the priority. &lt;br /&gt;
* [http://mzl.la/1iH134R Un-triaged Recording bugs]&lt;br /&gt;
**Search based on Open Recording component bugs that have no Backlog flag being set]&lt;br /&gt;
* [http://mzl.la/1M0qXZ2 Unconfirmed Recording bugs]&lt;br /&gt;
**Search based on Open Recording component bugs that have no Backlog flag being set]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Web Audio Bugzilla Queries===&lt;br /&gt;
&lt;br /&gt;
* [http://mzl.la/1MTEa8b Bugzilla Ranked &amp;quot;P1&amp;quot;&amp;quot; list] &lt;br /&gt;
**Add the &amp;quot;Rank&amp;quot; Column to your results and sort on Rank &lt;br /&gt;
* [http://mzl.la/1MTEbsR Bugzilla Ranked &amp;quot;P2&amp;quot; list] &lt;br /&gt;
**Add the &amp;quot;Rank&amp;quot; Column to your results and sort on Rank &lt;br /&gt;
***The option to &amp;quot;Change columns&amp;quot; is at bottom of search results&lt;br /&gt;
* [http://mzl.la/1MTEbJp Bugzilla Ranked &amp;quot;P3 to P5 list] &lt;br /&gt;
** P3 bugs are unlikely to be fixed within the next 6 months; patches are welcome. P4 and P5 bugs will not get engineering time, but we will accept patches for P4 bugs.  If you need a bug fixed sooner and can&#039;t contribute a patch or if you disagree with how a bug is prioritized, please needinfo the triage owner of that bug about raising the priority. &lt;br /&gt;
* [http://mzl.la/1M0izbQ Un-triaged Web Audio bugs]&lt;br /&gt;
**Search based on Open WebAudio component bugs that have no Backlog flag being set]&lt;br /&gt;
* [http://mzl.la/1MTEggc Unconfirmed Web Audio bugs]&lt;br /&gt;
**Search based on Open WebAudio component bugs that have no Backlog flag being set]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===WebRTC Bugzilla Queries===&lt;br /&gt;
&lt;br /&gt;
* [http://mzl.la/1S1PrWF Bugzilla Ranked &amp;quot;P1&amp;quot; - backlog=&amp;quot;webRTC+&amp;quot; or &amp;quot;backlog&amp;quot;=&amp;quot;tech-debt&amp;quot; list] &lt;br /&gt;
**Add the &amp;quot;Rank&amp;quot; Column to your results and sort on Rank &lt;br /&gt;
* [http://mzl.la/1RPW8tq Bugzilla Ranked &amp;quot;P2&amp;quot; - backlog=&amp;quot;webRTC+&amp;quot; or &amp;quot;backlog&amp;quot;=&amp;quot;tech-debt&amp;quot; list] &lt;br /&gt;
**Add the &amp;quot;Rank&amp;quot; Column to your results and sort on Rank &lt;br /&gt;
* [http://mzl.la/1Cos5lF Bugzilla Ranked &amp;quot;P3 to P5 - backlog=&amp;quot;webRTC+&amp;quot; or &amp;quot;backlog&amp;quot;=&amp;quot;tech-debt&amp;quot; list] &lt;br /&gt;
**Add the &amp;quot;Rank&amp;quot; Column to your results and sort on Rank &lt;br /&gt;
***The option to &amp;quot;Change columns&amp;quot; is at bottom of search results&lt;br /&gt;
** P3 bugs are unlikely to be fixed within the next 6 months; patches are welcome. P4 and P5 bugs will not get engineering time, but we will accept patches for P4 bugs.  If you need a bug fixed sooner and can&#039;t contribute a patch or if you disagree with how a bug is prioritized, please needinfo the triage owner of that bug about raising the priority.&lt;br /&gt;
* [http://mzl.la/1h2L6WT Un-triaged WebRTC bugs]&lt;br /&gt;
**Search based on Open WebRTC bugs that have no Backlog flag set]&lt;br /&gt;
* [http://mzl.la/1S1RN7L Unconfirmed WebRTC bugs]&lt;br /&gt;
**Search based on Open WebRTC bugs that have no Backlog flag set]&lt;br /&gt;
* [http://mzl.la/1MUt9bh Parking-lot bugs]&lt;br /&gt;
** Search based on Open WebRTC bugs that have the parking-lot flag set]&lt;br /&gt;
** NOTE: parking-lot bugs are the same as P5 bugs;  we will not be dedicating time to fixing these.  If you need a parking-lot bug fixed, please needinfo the triage owner of that bug about raising the priority.&lt;/div&gt;</summary>
		<author><name>Rillian</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Media/Bugs&amp;diff=1189036</id>
		<title>Media/Bugs</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Media/Bugs&amp;diff=1189036"/>
		<updated>2018-02-15T00:32:45Z</updated>

		<summary type="html">&lt;p&gt;Rillian: /* Core::Audio/Video - Playback Queries */ Update priority bugzilla queries&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Media Bugs - Common Searches to see Product Backlog ==&lt;br /&gt;
&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[https://mzl.la/2nxVkSy &amp;quot;Real-time Media&amp;quot; Bugs] that have landed during Firefox 55&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[https://mzl.la/2ny2tlV &amp;quot;Playback&amp;quot; Bugs&amp;quot;] that have landed during Firefox 55&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===WebRTC, WebAudio, Cubeb, MediaStreamGraph and Media Recording (combined)===&lt;br /&gt;
* [http://mzl.la/1U5l5GE Un-triaged bugs]&lt;br /&gt;
* [http://mzl.la/1U5ltES Unconfirmed bugs]&lt;br /&gt;
* [http://mzl.la/1XhyImX P1 bugs]&lt;br /&gt;
* [https://crash-stats.mozilla.com/search/?proto_signature=~Webrtc&amp;amp;proto_signature=~webrtc&amp;amp;proto_signature=~jsep&amp;amp;proto_signature=~VideoConduit&amp;amp;proto_signature=~MediaRecorder&amp;amp;proto_signature=~MediaStreamGraph&amp;amp;proto_signature=~rtc%3A%3A&amp;amp;proto_signature=~cubeb&amp;amp;proto_signature=~MediaEncoder&amp;amp;proto_signature=~MediaEngine&amp;amp;proto_signature=~MediaManager&amp;amp;product=Firefox&amp;amp;_sort=-date&amp;amp;_facets=signature&amp;amp;_columns=date&amp;amp;_columns=signature&amp;amp;_columns=product&amp;amp;_columns=version&amp;amp;_columns=build_id&amp;amp;_columns=platform#facet-signature Crashes in WebRTC, MediaStreamGraph, cubeb, MediaRecorder]&lt;br /&gt;
** [https://crash-stats.mozilla.com/search/?proto_signature=~Webrtc&amp;amp;proto_signature=~webrtc&amp;amp;proto_signature=~jsep&amp;amp;proto_signature=~VideoConduit&amp;amp;proto_signature=~MediaRecorder&amp;amp;proto_signature=~MediaStreamGraph&amp;amp;proto_signature=~rtc%3A%3A&amp;amp;proto_signature=~cubeb&amp;amp;proto_signature=~MediaEncoder&amp;amp;proto_signature=~MediaEngine&amp;amp;proto_signature=~MediaManager&amp;amp;product=Firefox&amp;amp;version=53.0a1&amp;amp;version=53.0a2&amp;amp;version=54.0a1&amp;amp;version=54.0b1&amp;amp;version=55.0a1&amp;amp;_sort=-date&amp;amp;_facets=signature&amp;amp;_columns=date&amp;amp;_columns=signature&amp;amp;_columns=product&amp;amp;_columns=version&amp;amp;_columns=build_id&amp;amp;_columns=platform#facet-signature Just in 53/54/55 (Note: URL will need updates occasionally)]&lt;br /&gt;
* WebAudio: Note that this has to be split due to URL-length limits in the server&lt;br /&gt;
** [https://crash-stats.mozilla.com/search/?proto_signature=~WebAudio&amp;amp;proto_signature=~AudioNode&amp;amp;proto_signature=~AudioContext&amp;amp;proto_signature=~BufferDecoder&amp;amp;proto_signature=~OscillatorNode&amp;amp;proto_signature=~AudioDestination&amp;amp;proto_signature=~ScriptProcessorNode&amp;amp;proto_signature=~DelayNode&amp;amp;proto_signature=~AudioScheduled&amp;amp;proto_signature=~CompressorNode&amp;amp;proto_signature=~AudioListener&amp;amp;proto_signature=~ConstantSource&amp;amp;proto_signature=~PannerNode&amp;amp;proto_signature=~FilterNode&amp;amp;product=Firefox&amp;amp;_sort=-date&amp;amp;_facets=signature&amp;amp;_columns=date&amp;amp;_columns=signature&amp;amp;_columns=product&amp;amp;_columns=version&amp;amp;_columns=build_id&amp;amp;_columns=platform#facet-signature WebAudio crashes -- first half]&lt;br /&gt;
** [https://crash-stats.mozilla.com/search/?proto_signature=~DelayBuffer&amp;amp;proto_signature=~GainNode&amp;amp;proto_signature=~ShaperNode&amp;amp;proto_signature=~AudioSourceNode&amp;amp;proto_signature=~AudioEvent&amp;amp;proto_signature=~AudioProcessing&amp;amp;proto_signature=~ConvolverNode&amp;amp;proto_signature=~AudioParam&amp;amp;proto_signature=~HRTF&amp;amp;proto_signature=~WebCore&amp;amp;proto_signature=~AudioBuffer&amp;amp;proto_signature=~AnalyserNode&amp;amp;product=Firefox&amp;amp;_facets=signature&amp;amp;_columns=date&amp;amp;_columns=signature&amp;amp;_columns=product&amp;amp;_columns=version&amp;amp;_columns=build_id&amp;amp;_columns=platform#facet-signature WebAudio crashes -- 2nd half]&lt;br /&gt;
&lt;br /&gt;
===Core::Audio/Video (Main Component) Queries===&lt;br /&gt;
&lt;br /&gt;
* [http://mzl.la/1h3slCq Un-triaged Audio/Video bugs]&lt;br /&gt;
** Help us triage.  Any bug found in this search needs to be moved to one of the other media components (shown below)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Core::Audio/Video - Playback Queries===&lt;br /&gt;
&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?bug_status=UNCONFIRMED&amp;amp;bug_status=NEW&amp;amp;bug_status=ASSIGNED&amp;amp;bug_status=REOPENED&amp;amp;component=Audio%2FVideo&amp;amp;component=Audio%2FVideo%3A%20Playback&amp;amp;list_id=14006559&amp;amp;priority=--&amp;amp;product=Core&amp;amp;query_format=advanced&amp;amp;query_based_on=&amp;amp;columnlist=product%2Ccomponent%2Cassigned_to%2Cbug_status%2Cshort_desc%2Cpriority%2Cchangeddate Untriaged Playback bugs]&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?priority=P1&amp;amp;query_format=advanced&amp;amp;bug_status=UNCONFIRMED&amp;amp;bug_status=NEW&amp;amp;bug_status=ASSIGNED&amp;amp;bug_status=REOPENED&amp;amp;component=Audio%2FVideo%3A Playback&amp;amp;product=Core P1 Playback bugs]&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?priority=P2&amp;amp;query_format=advanced&amp;amp;bug_status=UNCONFIRMED&amp;amp;bug_status=NEW&amp;amp;bug_status=ASSIGNED&amp;amp;bug_status=REOPENED&amp;amp;component=Audio%2FVideo%3A Playback&amp;amp;product=Core P2 Playback bugs]&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?priority=P3&amp;amp;query_format=advanced&amp;amp;bug_status=UNCONFIRMED&amp;amp;bug_status=NEW&amp;amp;bug_status=ASSIGNED&amp;amp;bug_status=REOPENED&amp;amp;component=Audio%2FVideo%3A Playback&amp;amp;product=Core P3 Playback bugs]&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?priority=P5&amp;amp;query_format=advanced&amp;amp;bug_status=UNCONFIRMED&amp;amp;bug_status=NEW&amp;amp;bug_status=ASSIGNED&amp;amp;bug_status=REOPENED&amp;amp;component=Audio%2FVideo%3A Playback&amp;amp;product=Core P5 Playback bugs]&lt;br /&gt;
* [https://is.gd/media_playback_triaged Open Playback bugs]&lt;br /&gt;
** Ralph Giles (rillian on irc) leads Playback. Please reach out to them directly if you have suggestions/questions about Playback bugs.&lt;br /&gt;
&lt;br /&gt;
===Core::Audio/Video - MediaStreamGraph Bugzilla Queries===&lt;br /&gt;
&lt;br /&gt;
* [http://mzl.la/1RC0aXs Bugzilla Ranked &amp;quot;P1&amp;quot;&amp;quot; list] &lt;br /&gt;
**Add the &amp;quot;Rank&amp;quot; Column to your results and sort on Rank &lt;br /&gt;
* [http://mzl.la/1RC0fug Bugzilla Ranked &amp;quot;P2&amp;quot; list] &lt;br /&gt;
**Add the &amp;quot;Rank&amp;quot; Column to your results and sort on Rank &lt;br /&gt;
***The option to &amp;quot;Change columns&amp;quot; is at bottom of search results&lt;br /&gt;
* [http://mzl.la/1RC0oxP Bugzilla Ranked &amp;quot;P3 to P5 list] &lt;br /&gt;
** P3 bugs are unlikely to be fixed within the next 6 months; patches are welcome. P4 and P5 bugs will not get engineering time, but we will accept patches for P4 bugs.  If you need a bug fixed sooner and can&#039;t contribute a patch or if you disagree with how a bug is prioritized, please needinfo the triage owner of that bug about raising the priority.&lt;br /&gt;
* [http://mzl.la/1RBZUb6 Un-triaged MediaStreamGraph bugs]&lt;br /&gt;
**Search based on Open MediaStreamGraph component bugs that have priority flag set]&lt;br /&gt;
* [http://mzl.la/1RC02r8 Unconfirmed MediaStreamGraph bugs]&lt;br /&gt;
**Search based on Open MediaStreamGraph component bugs that have priority flag set]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Core::Audio/Video - Cubeb Bugzilla Queries===&lt;br /&gt;
&lt;br /&gt;
* [http://mzl.la/1HjtQrV Bugzilla Ranked &amp;quot;P1&amp;quot;&amp;quot; list] &lt;br /&gt;
**Add the &amp;quot;Rank&amp;quot; Column to your results and sort on Rank &lt;br /&gt;
* [http://mzl.la/1HjtUIj Bugzilla Ranked &amp;quot;P2&amp;quot; list] &lt;br /&gt;
**Add the &amp;quot;Rank&amp;quot; Column to your results and sort on Rank &lt;br /&gt;
***The option to &amp;quot;Change columns&amp;quot; is at bottom of search results&lt;br /&gt;
* [http://mzl.la/1HjtW2Y Bugzilla Ranked &amp;quot;P3 to P5 list] &lt;br /&gt;
** P3 bugs are unlikely to be fixed within the next 6 months; patches are welcome. P4 and P5 bugs will not get engineering time, but we will accept patches for P4 bugs.  If you need a bug fixed sooner and can&#039;t contribute a patch or if you disagree with how a bug is prioritized, please needinfo the triage owner of that bug about raising the priority.&lt;br /&gt;
* [http://mzl.la/1Hju0Qg Un-triaged Cubeb bugs]&lt;br /&gt;
**Search based on Open Cubeb component bugs that have priority flag set]&lt;br /&gt;
* [http://mzl.la/1Hju7Lu Unconfirmed Cubeb bugs]&lt;br /&gt;
**Search based on Open Cubeb component bugs that have priority flag set]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Core::Audio/Video - GMP (Gecko Media Plugin) Bugzilla Queries===&lt;br /&gt;
&lt;br /&gt;
* [http://mzl.la/1Q3CLBo Bugzilla Ranked &amp;quot;P1&amp;quot;&amp;quot; list] &lt;br /&gt;
**Add the &amp;quot;Rank&amp;quot; Column to your results and sort on Rank &lt;br /&gt;
* [http://mzl.la/1HjuaXK Bugzilla Ranked &amp;quot;P2&amp;quot; list] &lt;br /&gt;
**Add the &amp;quot;Rank&amp;quot; Column to your results and sort on Rank &lt;br /&gt;
***The option to &amp;quot;Change columns&amp;quot; is at bottom of search results &lt;br /&gt;
* [http://mzl.la/1NceYey Bugzilla Ranked &amp;quot;P3 to P5 list] &lt;br /&gt;
** P3 bugs are unlikely to be fixed within the next 6 months; patches are welcome. P4 and P5 bugs will not get engineering time, but we will accept patches for P4 bugs.  If you need a bug fixed sooner and can&#039;t contribute a patch or if you disagree with how a bug is prioritized, please needinfo the triage owner of that bug about raising the priority.&lt;br /&gt;
* [http://mzl.la/1Hjujui Un-triaged GMP bugs]&lt;br /&gt;
**Search based on Open GMP component bugs that have priority flag set]&lt;br /&gt;
* [http://mzl.la/1HjuoOK Unconfirmed GMP bugs]&lt;br /&gt;
**Search based on Open GMP component bugs that have priority flag set]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Core::Audio/Video - Recording Bugzilla Queries===&lt;br /&gt;
&lt;br /&gt;
* [http://mzl.la/1jXz16N Bugzilla Ranked &amp;quot;P1&amp;quot;&amp;quot; list] &lt;br /&gt;
**Add the &amp;quot;Rank&amp;quot; Column to your results and sort on Rank &lt;br /&gt;
* [http://mzl.la/1M0rudk Bugzilla Ranked &amp;quot;P2&amp;quot; list] &lt;br /&gt;
**Add the &amp;quot;Rank&amp;quot; Column to your results and sort on Rank &lt;br /&gt;
***The option to &amp;quot;Change columns&amp;quot; is at bottom of search results&lt;br /&gt;
* [http://mzl.la/1MTEvYw Bugzilla Ranked &amp;quot;P3 to P5 list] &lt;br /&gt;
** P3 bugs are unlikely to be fixed within the next 6 months; patches are welcome. P4 and P5 bugs will not get engineering time, but we will accept patches for P4 bugs.  If you need a bug fixed sooner and can&#039;t contribute a patch or if you disagree with how a bug is prioritized, please needinfo the triage owner of that bug about raising the priority. &lt;br /&gt;
* [http://mzl.la/1iH134R Un-triaged Recording bugs]&lt;br /&gt;
**Search based on Open Recording component bugs that have no Backlog flag being set]&lt;br /&gt;
* [http://mzl.la/1M0qXZ2 Unconfirmed Recording bugs]&lt;br /&gt;
**Search based on Open Recording component bugs that have no Backlog flag being set]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Web Audio Bugzilla Queries===&lt;br /&gt;
&lt;br /&gt;
* [http://mzl.la/1MTEa8b Bugzilla Ranked &amp;quot;P1&amp;quot;&amp;quot; list] &lt;br /&gt;
**Add the &amp;quot;Rank&amp;quot; Column to your results and sort on Rank &lt;br /&gt;
* [http://mzl.la/1MTEbsR Bugzilla Ranked &amp;quot;P2&amp;quot; list] &lt;br /&gt;
**Add the &amp;quot;Rank&amp;quot; Column to your results and sort on Rank &lt;br /&gt;
***The option to &amp;quot;Change columns&amp;quot; is at bottom of search results&lt;br /&gt;
* [http://mzl.la/1MTEbJp Bugzilla Ranked &amp;quot;P3 to P5 list] &lt;br /&gt;
** P3 bugs are unlikely to be fixed within the next 6 months; patches are welcome. P4 and P5 bugs will not get engineering time, but we will accept patches for P4 bugs.  If you need a bug fixed sooner and can&#039;t contribute a patch or if you disagree with how a bug is prioritized, please needinfo the triage owner of that bug about raising the priority. &lt;br /&gt;
* [http://mzl.la/1M0izbQ Un-triaged Web Audio bugs]&lt;br /&gt;
**Search based on Open WebAudio component bugs that have no Backlog flag being set]&lt;br /&gt;
* [http://mzl.la/1MTEggc Unconfirmed Web Audio bugs]&lt;br /&gt;
**Search based on Open WebAudio component bugs that have no Backlog flag being set]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===WebRTC Bugzilla Queries===&lt;br /&gt;
&lt;br /&gt;
* [http://mzl.la/1S1PrWF Bugzilla Ranked &amp;quot;P1&amp;quot; - backlog=&amp;quot;webRTC+&amp;quot; or &amp;quot;backlog&amp;quot;=&amp;quot;tech-debt&amp;quot; list] &lt;br /&gt;
**Add the &amp;quot;Rank&amp;quot; Column to your results and sort on Rank &lt;br /&gt;
* [http://mzl.la/1RPW8tq Bugzilla Ranked &amp;quot;P2&amp;quot; - backlog=&amp;quot;webRTC+&amp;quot; or &amp;quot;backlog&amp;quot;=&amp;quot;tech-debt&amp;quot; list] &lt;br /&gt;
**Add the &amp;quot;Rank&amp;quot; Column to your results and sort on Rank &lt;br /&gt;
* [http://mzl.la/1Cos5lF Bugzilla Ranked &amp;quot;P3 to P5 - backlog=&amp;quot;webRTC+&amp;quot; or &amp;quot;backlog&amp;quot;=&amp;quot;tech-debt&amp;quot; list] &lt;br /&gt;
**Add the &amp;quot;Rank&amp;quot; Column to your results and sort on Rank &lt;br /&gt;
***The option to &amp;quot;Change columns&amp;quot; is at bottom of search results&lt;br /&gt;
** P3 bugs are unlikely to be fixed within the next 6 months; patches are welcome. P4 and P5 bugs will not get engineering time, but we will accept patches for P4 bugs.  If you need a bug fixed sooner and can&#039;t contribute a patch or if you disagree with how a bug is prioritized, please needinfo the triage owner of that bug about raising the priority.&lt;br /&gt;
* [http://mzl.la/1h2L6WT Un-triaged WebRTC bugs]&lt;br /&gt;
**Search based on Open WebRTC bugs that have no Backlog flag set]&lt;br /&gt;
* [http://mzl.la/1S1RN7L Unconfirmed WebRTC bugs]&lt;br /&gt;
**Search based on Open WebRTC bugs that have no Backlog flag set]&lt;br /&gt;
* [http://mzl.la/1MUt9bh Parking-lot bugs]&lt;br /&gt;
** Search based on Open WebRTC bugs that have the parking-lot flag set]&lt;br /&gt;
** NOTE: parking-lot bugs are the same as P5 bugs;  we will not be dedicating time to fixing these.  If you need a parking-lot bug fixed, please needinfo the triage owner of that bug about raising the priority.&lt;/div&gt;</summary>
		<author><name>Rillian</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Rust_Update_Policy_for_Firefox&amp;diff=1188975</id>
		<title>Rust Update Policy for Firefox</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Rust_Update_Policy_for_Firefox&amp;diff=1188975"/>
		<updated>2018-02-13T19:24:19Z</updated>

		<summary type="html">&lt;p&gt;Rillian: Expect to require Rust 1.24 for Firefox 60. This avoids an issue with the simd crate and -C cpu-target.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Firefox [[Oxidation|depends on code]] written in the [https://www.rust-lang.org/ Rust programming language].&lt;br /&gt;
&lt;br /&gt;
We document here the decision making and planning around when we update the Rust toolchains used and required to build Firefox.&lt;br /&gt;
&lt;br /&gt;
This allows contributors to know when new features will be usable, and&lt;br /&gt;
downstream packagers to know what toolchain will be required for each&lt;br /&gt;
Firefox release. Both benefit from the predictability of a schedule.&lt;br /&gt;
&lt;br /&gt;
== Schedule ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Release Firefox requirements:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Firefox Version !! Requires !! Rust release date !! Firefox release date&lt;br /&gt;
|-&lt;br /&gt;
| Firefox 56 || Rust 1.17.0 || 2017 April 27 || 2017 September 26&lt;br /&gt;
|-&lt;br /&gt;
| Firefox 57 || Rust 1.19.0 || 2017 July 20 || 2017 November 14&lt;br /&gt;
|-&lt;br /&gt;
| Firefox 58 || Rust 1.21.0 || 2017 October 12 ||2018 January 16&lt;br /&gt;
|-&lt;br /&gt;
| Firefox 59 || Rust 1.22.1 || 2017 November 23 || 2018 March 13&lt;br /&gt;
|-&lt;br /&gt;
| Firefox 60 || Rust 1.24.0 || 2018 February 15 || 2018 May 9&lt;br /&gt;
|-&lt;br /&gt;
| Firefox 61 || Rust 1.25.0 || 2018 March 29 || 2018 June 26&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;New feature adoption schedule:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Mozilla-central can use !! Starting on (Rust release + 2 weeks)&lt;br /&gt;
|- &lt;br /&gt;
| Rust 1.19.0 || 2017 August 3&lt;br /&gt;
|-&lt;br /&gt;
| Rust 1.20.0 || 2017 October 17 ([https://bugzilla.mozilla.org/show_bug.cgi?id=1396884 was] September 14)&lt;br /&gt;
|-&lt;br /&gt;
| Rust 1.21.0 || 2017 October 26&lt;br /&gt;
|-&lt;br /&gt;
| Rust 1.22.0 || 2017 December 7&lt;br /&gt;
|-&lt;br /&gt;
| Rust 1.23.0 || 2018 January 26 ([https://bugzilla.mozilla.org/show_bug.cgi?id=1418081#c8 was] January 18)&lt;br /&gt;
|-&lt;br /&gt;
| Rust 1.24.0 || 2018 March 1&lt;br /&gt;
|-&lt;br /&gt;
| Rust 1.25.0 || 2018 April 12&lt;br /&gt;
|-&lt;br /&gt;
| Rust 1.26.0 || 2018 May 24&lt;br /&gt;
|-&lt;br /&gt;
| Rust 1.27.0 || 2018 July 5&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Policy ==&lt;br /&gt;
&lt;br /&gt;
=== Official builds ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;We ship official stable Firefox with stable Rust.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Typically we build Firefox Nightly with the current stable Rust and let&lt;br /&gt;
that configuration ride through beta to release. There have been frequent&lt;br /&gt;
exceptions where we&#039;ve adopted a beta Rust during the Nightly phase to&lt;br /&gt;
address some platform support issue, and later updated when that Rust&lt;br /&gt;
version became stable. For example, we needed to use beta Rust for our&lt;br /&gt;
own builds when we first added Rust support to Firefox for Android.&lt;br /&gt;
&lt;br /&gt;
The policy provides good stability guarantees once Firefox is in&lt;br /&gt;
release, while giving us the freedom to respond to the issues experience&lt;br /&gt;
shows we&#039;ll need to address during development.&lt;br /&gt;
&lt;br /&gt;
=== Developer builds ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Local developer builds use whatever Rust toolchain is available on the system.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Someone building Firefox can maintain the latest stable Rust with the&lt;br /&gt;
`rustup` for `mach bootstrap` tools, or try other variations.&lt;br /&gt;
&lt;br /&gt;
=== Required versions ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;We require a new stable Rust starting 2 weeks after it is released.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This policy effectively removes the difference between the required&lt;br /&gt;
Rust version and the default target for official builds, while still&lt;br /&gt;
giving tier-3 developers some time to process toolchain updates.&lt;br /&gt;
&lt;br /&gt;
Downstream packagers still have 2-3 months to package each stable&lt;br /&gt;
Rust release before it’s required by a new Firefox release.&lt;br /&gt;
&lt;br /&gt;
The stable+two weeks requirement is a rough target. We expect to hit&lt;br /&gt;
it within a few days for most Rust releases. But, for example, when the&lt;br /&gt;
target date falls within a mozilla-central soft freeze (before branching&lt;br /&gt;
for a beta release) we may update a week later.&lt;br /&gt;
&lt;br /&gt;
We expect esr releases will stay on the same minimum Rust version,&lt;br /&gt;
so backporting security fixes may require Rust compatibility work too.&lt;br /&gt;
&lt;br /&gt;
=== Rationale ===&lt;br /&gt;
&lt;br /&gt;
We need to be fast and efficient across the whole system which includes&lt;br /&gt;
the Rust, Servo, and Firefox development teams. We realise that the&lt;br /&gt;
decisions we make have an impact downstream, and we want to minimise the&lt;br /&gt;
negative aspects of that impact. However, we cannot do so at the expense&lt;br /&gt;
of our own productivity.&lt;br /&gt;
&lt;br /&gt;
There are many other stakeholders, of course, but our work in Gecko and&lt;br /&gt;
Servo are major drivers for Rust language, compiler, and library&lt;br /&gt;
development. That influence is more effective if we can iterate quickly.&lt;br /&gt;
Servo itself often uses experimental language features to give the&lt;br /&gt;
necessary early feedback on features as they evolve. &lt;br /&gt;
&lt;br /&gt;
Rust updates every six weeks, just like Firefox. This is more like web&lt;br /&gt;
languages than native languages, but it&#039;s been great for building&lt;br /&gt;
community. We (as Gecko developers) should embrace it.&lt;br /&gt;
&lt;br /&gt;
Many of us think of the toolchain and source code as being conceptually&lt;br /&gt;
different. At this point in time, Rust is evolving much more quickly&lt;br /&gt;
than Python or C++. For now it is easier to think of Rust as being part&lt;br /&gt;
of Firefox, rather than thinking of it like a C++ toolchain with decades&lt;br /&gt;
of history which we we have little influence on.&lt;br /&gt;
&lt;br /&gt;
Official build configurations are generally part of the Firefox&lt;br /&gt;
code itself, subject to normal review, and don&#039;t affect anyone else.&lt;br /&gt;
Therefore it&#039;s straightforward to manage the Rust toolchain we use&lt;br /&gt;
directly like any other change.&lt;br /&gt;
&lt;br /&gt;
For contributors, we maintain a minimum supported Rust toolchain&lt;br /&gt;
This helps those working on tier-3 platforms, where updating Rust can be&lt;br /&gt;
more difficult than just running `rustup update`, by giving them time to adapt.&lt;br /&gt;
However, it means other contributors must backport newer work to&lt;br /&gt;
maintain compatibility. As more Rust code was merged into Firefox this&lt;br /&gt;
became expensive.&lt;br /&gt;
&lt;br /&gt;
Historically we bumped this minimum every 3-4 Rust releases, which also&lt;br /&gt;
helped contributors on slow network connections since they didn&#039;t have&lt;br /&gt;
to download toolchains as often. Deciding to bump this way involved&lt;br /&gt;
negotiating each change, which by late 2017 many contributors felt was a&lt;br /&gt;
more significant burden. Delaying to give tier-3 platforms months instead of&lt;br /&gt;
weeks to update their Rust packages is also not considered a good&lt;br /&gt;
trade-off.&lt;br /&gt;
&lt;br /&gt;
My experience is that it takes about a week for version bumps to start&lt;br /&gt;
pulling in dependent crates using new language features, so updating&lt;br /&gt;
after a couple of weeks acts as only a moderate restraint on Servo&lt;br /&gt;
developers working on Gecko modules.&lt;br /&gt;
I think this is the correct trade-off between those two groups.&lt;br /&gt;
&lt;br /&gt;
==== Alternate Proposals ====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;We require nightly Rust&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This would certainly speed up the feedback with language design.&lt;br /&gt;
However, we would frequently encounter build breakage when unstable&lt;br /&gt;
language features change. Even Servo pins to a specific nightly to avoid&lt;br /&gt;
this problem. That’s appropriate for a smaller research project, but not&lt;br /&gt;
something the size of Firefox.&lt;br /&gt;
&lt;br /&gt;
We should and do test building Firefox with nightly Rust to catch&lt;br /&gt;
compiler issues, but that’s different from requiring everyone to use&lt;br /&gt;
unstable Rust.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;We require beta Rust&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
I don’t think anyone has suggested this, but I thought I’d include&lt;br /&gt;
it for completeness. This shortens the feedback cycle for new features&lt;br /&gt;
at the expense of more churn for contributors. It’s not a good trade-off&lt;br /&gt;
because by the time a new feature is stabilized in beta Rust, it’s too&lt;br /&gt;
late to change it much. This is better served by particular developers&lt;br /&gt;
working with upstream directly. I believe beta is also something of an&lt;br /&gt;
“excluded middle” in the Rust ecosystem, with most contributors working&lt;br /&gt;
with either stable or unstable nightly Rust.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;We require the previous stable Rust once a new stable Rust is released.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
That is, we bump the Firefox minimum to Rust 1.n.m when rust 1.(n+1).0&lt;br /&gt;
stable is released. This is roughly every 6 weeks, with six weeks to&lt;br /&gt;
update before bumping into the new requirement.  This policy might be&lt;br /&gt;
simpler for contributors to remember. There&#039;s not much difference in the&lt;br /&gt;
amount of time downstream packager receive for a particular Firefox&lt;br /&gt;
release. This is a trade-off of more time for tier-3 developers against&lt;br /&gt;
people working on Gecko/Servo components doing extra work to maintain&lt;br /&gt;
compatibility. As I say above, I think this is the wrong choice.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;We bump the minimum Rust version only when new features are compelling.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This reduces churn for developers, but the need to negotiate each bump&lt;br /&gt;
takes time better spent on development. See the motivation section&lt;br /&gt;
above.&lt;/div&gt;</summary>
		<author><name>Rillian</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Media/Bugs&amp;diff=1188795</id>
		<title>Media/Bugs</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Media/Bugs&amp;diff=1188795"/>
		<updated>2018-02-09T18:29:20Z</updated>

		<summary type="html">&lt;p&gt;Rillian: /* Core::Audio/Video - Playback Queries */ Use a full url for the untriaged link. The previous shortener went to a user-specific saved search&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Media Bugs - Common Searches to see Product Backlog ==&lt;br /&gt;
&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[https://mzl.la/2nxVkSy &amp;quot;Real-time Media&amp;quot; Bugs] that have landed during Firefox 55&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[https://mzl.la/2ny2tlV &amp;quot;Playback&amp;quot; Bugs&amp;quot;] that have landed during Firefox 55&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===WebRTC, WebAudio, Cubeb, MediaStreamGraph and Media Recording (combined)===&lt;br /&gt;
* [http://mzl.la/1U5l5GE Un-triaged bugs]&lt;br /&gt;
* [http://mzl.la/1U5ltES Unconfirmed bugs]&lt;br /&gt;
* [http://mzl.la/1XhyImX P1 bugs]&lt;br /&gt;
* [https://crash-stats.mozilla.com/search/?proto_signature=~Webrtc&amp;amp;proto_signature=~webrtc&amp;amp;proto_signature=~jsep&amp;amp;proto_signature=~VideoConduit&amp;amp;proto_signature=~MediaRecorder&amp;amp;proto_signature=~MediaStreamGraph&amp;amp;proto_signature=~rtc%3A%3A&amp;amp;proto_signature=~cubeb&amp;amp;proto_signature=~MediaEncoder&amp;amp;proto_signature=~MediaEngine&amp;amp;proto_signature=~MediaManager&amp;amp;product=Firefox&amp;amp;_sort=-date&amp;amp;_facets=signature&amp;amp;_columns=date&amp;amp;_columns=signature&amp;amp;_columns=product&amp;amp;_columns=version&amp;amp;_columns=build_id&amp;amp;_columns=platform#facet-signature Crashes in WebRTC, MediaStreamGraph, cubeb, MediaRecorder]&lt;br /&gt;
** [https://crash-stats.mozilla.com/search/?proto_signature=~Webrtc&amp;amp;proto_signature=~webrtc&amp;amp;proto_signature=~jsep&amp;amp;proto_signature=~VideoConduit&amp;amp;proto_signature=~MediaRecorder&amp;amp;proto_signature=~MediaStreamGraph&amp;amp;proto_signature=~rtc%3A%3A&amp;amp;proto_signature=~cubeb&amp;amp;proto_signature=~MediaEncoder&amp;amp;proto_signature=~MediaEngine&amp;amp;proto_signature=~MediaManager&amp;amp;product=Firefox&amp;amp;version=53.0a1&amp;amp;version=53.0a2&amp;amp;version=54.0a1&amp;amp;version=54.0b1&amp;amp;version=55.0a1&amp;amp;_sort=-date&amp;amp;_facets=signature&amp;amp;_columns=date&amp;amp;_columns=signature&amp;amp;_columns=product&amp;amp;_columns=version&amp;amp;_columns=build_id&amp;amp;_columns=platform#facet-signature Just in 53/54/55 (Note: URL will need updates occasionally)]&lt;br /&gt;
* WebAudio: Note that this has to be split due to URL-length limits in the server&lt;br /&gt;
** [https://crash-stats.mozilla.com/search/?proto_signature=~WebAudio&amp;amp;proto_signature=~AudioNode&amp;amp;proto_signature=~AudioContext&amp;amp;proto_signature=~BufferDecoder&amp;amp;proto_signature=~OscillatorNode&amp;amp;proto_signature=~AudioDestination&amp;amp;proto_signature=~ScriptProcessorNode&amp;amp;proto_signature=~DelayNode&amp;amp;proto_signature=~AudioScheduled&amp;amp;proto_signature=~CompressorNode&amp;amp;proto_signature=~AudioListener&amp;amp;proto_signature=~ConstantSource&amp;amp;proto_signature=~PannerNode&amp;amp;proto_signature=~FilterNode&amp;amp;product=Firefox&amp;amp;_sort=-date&amp;amp;_facets=signature&amp;amp;_columns=date&amp;amp;_columns=signature&amp;amp;_columns=product&amp;amp;_columns=version&amp;amp;_columns=build_id&amp;amp;_columns=platform#facet-signature WebAudio crashes -- first half]&lt;br /&gt;
** [https://crash-stats.mozilla.com/search/?proto_signature=~DelayBuffer&amp;amp;proto_signature=~GainNode&amp;amp;proto_signature=~ShaperNode&amp;amp;proto_signature=~AudioSourceNode&amp;amp;proto_signature=~AudioEvent&amp;amp;proto_signature=~AudioProcessing&amp;amp;proto_signature=~ConvolverNode&amp;amp;proto_signature=~AudioParam&amp;amp;proto_signature=~HRTF&amp;amp;proto_signature=~WebCore&amp;amp;proto_signature=~AudioBuffer&amp;amp;proto_signature=~AnalyserNode&amp;amp;product=Firefox&amp;amp;_facets=signature&amp;amp;_columns=date&amp;amp;_columns=signature&amp;amp;_columns=product&amp;amp;_columns=version&amp;amp;_columns=build_id&amp;amp;_columns=platform#facet-signature WebAudio crashes -- 2nd half]&lt;br /&gt;
&lt;br /&gt;
===Core::Audio/Video (Main Component) Queries===&lt;br /&gt;
&lt;br /&gt;
* [http://mzl.la/1h3slCq Un-triaged Audio/Video bugs]&lt;br /&gt;
** Help us triage.  Any bug found in this search needs to be moved to one of the other media components (shown below)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Core::Audio/Video - Playback Queries===&lt;br /&gt;
&lt;br /&gt;
* [https://bugzilla.mozilla.org/buglist.cgi?bug_status=UNCONFIRMED&amp;amp;bug_status=NEW&amp;amp;bug_status=ASSIGNED&amp;amp;bug_status=REOPENED&amp;amp;component=Audio%2FVideo&amp;amp;component=Audio%2FVideo%3A%20Playback&amp;amp;list_id=14006559&amp;amp;priority=--&amp;amp;product=Core&amp;amp;query_format=advanced&amp;amp;query_based_on=&amp;amp;columnlist=product%2Ccomponent%2Cassigned_to%2Cbug_status%2Cshort_desc%2Cpriority%2Cchangeddate Untriaged Playback bugs]&lt;br /&gt;
* [https://goo.gl/RoZiEn P1 Playback bugs]&lt;br /&gt;
* [https://is.gd/media_playback_p3 P3 Playback bugs]&lt;br /&gt;
* [https://is.gd/media_playback_p5 P5 Playback bugs]&lt;br /&gt;
* [https://is.gd/media_playback_triaged Open Playback bugs]&lt;br /&gt;
** Anthony Jones (kentuckyfriedtakahe on irc) leads Playback. Please reach out to them directly if you have suggestions/questions about Playback bugs.&lt;br /&gt;
&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Core::Audio/Video - MediaStreamGraph Bugzilla Queries===&lt;br /&gt;
&lt;br /&gt;
* [http://mzl.la/1RC0aXs Bugzilla Ranked &amp;quot;P1&amp;quot;&amp;quot; list] &lt;br /&gt;
**Add the &amp;quot;Rank&amp;quot; Column to your results and sort on Rank &lt;br /&gt;
* [http://mzl.la/1RC0fug Bugzilla Ranked &amp;quot;P2&amp;quot; list] &lt;br /&gt;
**Add the &amp;quot;Rank&amp;quot; Column to your results and sort on Rank &lt;br /&gt;
***The option to &amp;quot;Change columns&amp;quot; is at bottom of search results&lt;br /&gt;
* [http://mzl.la/1RC0oxP Bugzilla Ranked &amp;quot;P3 to P5 list] &lt;br /&gt;
** P3 bugs are unlikely to be fixed within the next 6 months; patches are welcome. P4 and P5 bugs will not get engineering time, but we will accept patches for P4 bugs.  If you need a bug fixed sooner and can&#039;t contribute a patch or if you disagree with how a bug is prioritized, please needinfo the triage owner of that bug about raising the priority.&lt;br /&gt;
* [http://mzl.la/1RBZUb6 Un-triaged MediaStreamGraph bugs]&lt;br /&gt;
**Search based on Open MediaStreamGraph component bugs that have priority flag set]&lt;br /&gt;
* [http://mzl.la/1RC02r8 Unconfirmed MediaStreamGraph bugs]&lt;br /&gt;
**Search based on Open MediaStreamGraph component bugs that have priority flag set]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Core::Audio/Video - Cubeb Bugzilla Queries===&lt;br /&gt;
&lt;br /&gt;
* [http://mzl.la/1HjtQrV Bugzilla Ranked &amp;quot;P1&amp;quot;&amp;quot; list] &lt;br /&gt;
**Add the &amp;quot;Rank&amp;quot; Column to your results and sort on Rank &lt;br /&gt;
* [http://mzl.la/1HjtUIj Bugzilla Ranked &amp;quot;P2&amp;quot; list] &lt;br /&gt;
**Add the &amp;quot;Rank&amp;quot; Column to your results and sort on Rank &lt;br /&gt;
***The option to &amp;quot;Change columns&amp;quot; is at bottom of search results&lt;br /&gt;
* [http://mzl.la/1HjtW2Y Bugzilla Ranked &amp;quot;P3 to P5 list] &lt;br /&gt;
** P3 bugs are unlikely to be fixed within the next 6 months; patches are welcome. P4 and P5 bugs will not get engineering time, but we will accept patches for P4 bugs.  If you need a bug fixed sooner and can&#039;t contribute a patch or if you disagree with how a bug is prioritized, please needinfo the triage owner of that bug about raising the priority.&lt;br /&gt;
* [http://mzl.la/1Hju0Qg Un-triaged Cubeb bugs]&lt;br /&gt;
**Search based on Open Cubeb component bugs that have priority flag set]&lt;br /&gt;
* [http://mzl.la/1Hju7Lu Unconfirmed Cubeb bugs]&lt;br /&gt;
**Search based on Open Cubeb component bugs that have priority flag set]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Core::Audio/Video - GMP (Gecko Media Plugin) Bugzilla Queries===&lt;br /&gt;
&lt;br /&gt;
* [http://mzl.la/1Q3CLBo Bugzilla Ranked &amp;quot;P1&amp;quot;&amp;quot; list] &lt;br /&gt;
**Add the &amp;quot;Rank&amp;quot; Column to your results and sort on Rank &lt;br /&gt;
* [http://mzl.la/1HjuaXK Bugzilla Ranked &amp;quot;P2&amp;quot; list] &lt;br /&gt;
**Add the &amp;quot;Rank&amp;quot; Column to your results and sort on Rank &lt;br /&gt;
***The option to &amp;quot;Change columns&amp;quot; is at bottom of search results &lt;br /&gt;
* [http://mzl.la/1NceYey Bugzilla Ranked &amp;quot;P3 to P5 list] &lt;br /&gt;
** P3 bugs are unlikely to be fixed within the next 6 months; patches are welcome. P4 and P5 bugs will not get engineering time, but we will accept patches for P4 bugs.  If you need a bug fixed sooner and can&#039;t contribute a patch or if you disagree with how a bug is prioritized, please needinfo the triage owner of that bug about raising the priority.&lt;br /&gt;
* [http://mzl.la/1Hjujui Un-triaged GMP bugs]&lt;br /&gt;
**Search based on Open GMP component bugs that have priority flag set]&lt;br /&gt;
* [http://mzl.la/1HjuoOK Unconfirmed GMP bugs]&lt;br /&gt;
**Search based on Open GMP component bugs that have priority flag set]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Core::Audio/Video - Recording Bugzilla Queries===&lt;br /&gt;
&lt;br /&gt;
* [http://mzl.la/1jXz16N Bugzilla Ranked &amp;quot;P1&amp;quot;&amp;quot; list] &lt;br /&gt;
**Add the &amp;quot;Rank&amp;quot; Column to your results and sort on Rank &lt;br /&gt;
* [http://mzl.la/1M0rudk Bugzilla Ranked &amp;quot;P2&amp;quot; list] &lt;br /&gt;
**Add the &amp;quot;Rank&amp;quot; Column to your results and sort on Rank &lt;br /&gt;
***The option to &amp;quot;Change columns&amp;quot; is at bottom of search results&lt;br /&gt;
* [http://mzl.la/1MTEvYw Bugzilla Ranked &amp;quot;P3 to P5 list] &lt;br /&gt;
** P3 bugs are unlikely to be fixed within the next 6 months; patches are welcome. P4 and P5 bugs will not get engineering time, but we will accept patches for P4 bugs.  If you need a bug fixed sooner and can&#039;t contribute a patch or if you disagree with how a bug is prioritized, please needinfo the triage owner of that bug about raising the priority. &lt;br /&gt;
* [http://mzl.la/1iH134R Un-triaged Recording bugs]&lt;br /&gt;
**Search based on Open Recording component bugs that have no Backlog flag being set]&lt;br /&gt;
* [http://mzl.la/1M0qXZ2 Unconfirmed Recording bugs]&lt;br /&gt;
**Search based on Open Recording component bugs that have no Backlog flag being set]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Web Audio Bugzilla Queries===&lt;br /&gt;
&lt;br /&gt;
* [http://mzl.la/1MTEa8b Bugzilla Ranked &amp;quot;P1&amp;quot;&amp;quot; list] &lt;br /&gt;
**Add the &amp;quot;Rank&amp;quot; Column to your results and sort on Rank &lt;br /&gt;
* [http://mzl.la/1MTEbsR Bugzilla Ranked &amp;quot;P2&amp;quot; list] &lt;br /&gt;
**Add the &amp;quot;Rank&amp;quot; Column to your results and sort on Rank &lt;br /&gt;
***The option to &amp;quot;Change columns&amp;quot; is at bottom of search results&lt;br /&gt;
* [http://mzl.la/1MTEbJp Bugzilla Ranked &amp;quot;P3 to P5 list] &lt;br /&gt;
** P3 bugs are unlikely to be fixed within the next 6 months; patches are welcome. P4 and P5 bugs will not get engineering time, but we will accept patches for P4 bugs.  If you need a bug fixed sooner and can&#039;t contribute a patch or if you disagree with how a bug is prioritized, please needinfo the triage owner of that bug about raising the priority. &lt;br /&gt;
* [http://mzl.la/1M0izbQ Un-triaged Web Audio bugs]&lt;br /&gt;
**Search based on Open WebAudio component bugs that have no Backlog flag being set]&lt;br /&gt;
* [http://mzl.la/1MTEggc Unconfirmed Web Audio bugs]&lt;br /&gt;
**Search based on Open WebAudio component bugs that have no Backlog flag being set]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===WebRTC Bugzilla Queries===&lt;br /&gt;
&lt;br /&gt;
* [http://mzl.la/1S1PrWF Bugzilla Ranked &amp;quot;P1&amp;quot; - backlog=&amp;quot;webRTC+&amp;quot; or &amp;quot;backlog&amp;quot;=&amp;quot;tech-debt&amp;quot; list] &lt;br /&gt;
**Add the &amp;quot;Rank&amp;quot; Column to your results and sort on Rank &lt;br /&gt;
* [http://mzl.la/1RPW8tq Bugzilla Ranked &amp;quot;P2&amp;quot; - backlog=&amp;quot;webRTC+&amp;quot; or &amp;quot;backlog&amp;quot;=&amp;quot;tech-debt&amp;quot; list] &lt;br /&gt;
**Add the &amp;quot;Rank&amp;quot; Column to your results and sort on Rank &lt;br /&gt;
* [http://mzl.la/1Cos5lF Bugzilla Ranked &amp;quot;P3 to P5 - backlog=&amp;quot;webRTC+&amp;quot; or &amp;quot;backlog&amp;quot;=&amp;quot;tech-debt&amp;quot; list] &lt;br /&gt;
**Add the &amp;quot;Rank&amp;quot; Column to your results and sort on Rank &lt;br /&gt;
***The option to &amp;quot;Change columns&amp;quot; is at bottom of search results&lt;br /&gt;
** P3 bugs are unlikely to be fixed within the next 6 months; patches are welcome. P4 and P5 bugs will not get engineering time, but we will accept patches for P4 bugs.  If you need a bug fixed sooner and can&#039;t contribute a patch or if you disagree with how a bug is prioritized, please needinfo the triage owner of that bug about raising the priority.&lt;br /&gt;
* [http://mzl.la/1h2L6WT Un-triaged WebRTC bugs]&lt;br /&gt;
**Search based on Open WebRTC bugs that have no Backlog flag set]&lt;br /&gt;
* [http://mzl.la/1S1RN7L Unconfirmed WebRTC bugs]&lt;br /&gt;
**Search based on Open WebRTC bugs that have no Backlog flag set]&lt;br /&gt;
* [http://mzl.la/1MUt9bh Parking-lot bugs]&lt;br /&gt;
** Search based on Open WebRTC bugs that have the parking-lot flag set]&lt;br /&gt;
** NOTE: parking-lot bugs are the same as P5 bugs;  we will not be dedicating time to fixing these.  If you need a parking-lot bug fixed, please needinfo the triage owner of that bug about raising the priority.&lt;/div&gt;</summary>
		<author><name>Rillian</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Rust_Update_Policy_for_Firefox&amp;diff=1188299</id>
		<title>Rust Update Policy for Firefox</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Rust_Update_Policy_for_Firefox&amp;diff=1188299"/>
		<updated>2018-01-31T17:37:37Z</updated>

		<summary type="html">&lt;p&gt;Rillian: /* Schedule */ Rust 1.23 was released January 4.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Firefox [[Oxidation|depends on code]] written in the [https://www.rust-lang.org/ Rust programming language].&lt;br /&gt;
&lt;br /&gt;
We document here the decision making and planning around when we update the Rust toolchains used and required to build Firefox.&lt;br /&gt;
&lt;br /&gt;
This allows contributors to know when new features will be usable, and&lt;br /&gt;
downstream packagers to know what toolchain will be required for each&lt;br /&gt;
Firefox release. Both benefit from the predictability of a schedule.&lt;br /&gt;
&lt;br /&gt;
== Schedule ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Release Firefox requirements:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Firefox Version !! Requires !! Rust release date !! Firefox release date&lt;br /&gt;
|-&lt;br /&gt;
| Firefox 56 || Rust 1.17.0 || 2017 April 27 || 2017 September 26&lt;br /&gt;
|-&lt;br /&gt;
| Firefox 57 || Rust 1.19.0 || 2017 July 20 || 2017 November 14&lt;br /&gt;
|-&lt;br /&gt;
| Firefox 58 || Rust 1.21.0 || 2017 October 12 ||2018 January 16&lt;br /&gt;
|-&lt;br /&gt;
| Firefox 59 || Rust 1.22.1 || 2017 November 23 || 2018 March 6&lt;br /&gt;
|-&lt;br /&gt;
| Firefox 60 || Rust 1.23.0 || 2018 January 4 || 2018 May 1&lt;br /&gt;
|-&lt;br /&gt;
| Firefox 61 || Rust 1.25.0 || 2018 March 29 || 2018 June 26&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;New feature adoption schedule:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Mozilla-central can use !! Starting on (Rust release + 2 weeks)&lt;br /&gt;
|- &lt;br /&gt;
| Rust 1.19.0 || 2017 August 3&lt;br /&gt;
|-&lt;br /&gt;
| Rust 1.20.0 || 2017 October 17 ([https://bugzilla.mozilla.org/show_bug.cgi?id=1396884 was] September 14)&lt;br /&gt;
|-&lt;br /&gt;
| Rust 1.21.0 || 2017 October 26&lt;br /&gt;
|-&lt;br /&gt;
| Rust 1.22.0 || 2017 December 7&lt;br /&gt;
|-&lt;br /&gt;
| Rust 1.23.0 || 2018 January 26 ([https://bugzilla.mozilla.org/show_bug.cgi?id=1418081#c8 was] January 18)&lt;br /&gt;
|-&lt;br /&gt;
| Rust 1.24.0 || 2018 March 6&lt;br /&gt;
|-&lt;br /&gt;
| Rust 1.25.0 || 2018 April 12&lt;br /&gt;
|-&lt;br /&gt;
| Rust 1.26.0 || 2018 May 24&lt;br /&gt;
|-&lt;br /&gt;
| Rust 1.27.0 || 2018 July 5&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Policy ==&lt;br /&gt;
&lt;br /&gt;
=== Official builds ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;We ship official stable Firefox with stable Rust.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Typically we build Firefox Nightly with the current stable Rust and let&lt;br /&gt;
that configuration ride through beta to release. There have been frequent&lt;br /&gt;
exceptions where we&#039;ve adopted a beta Rust during the Nightly phase to&lt;br /&gt;
address some platform support issue, and later updated when that Rust&lt;br /&gt;
version became stable. For example, we needed to use beta Rust for our&lt;br /&gt;
own builds when we first added Rust support to Firefox for Android.&lt;br /&gt;
&lt;br /&gt;
The policy provides good stability guarantees once Firefox is in&lt;br /&gt;
release, while giving us the freedom to respond to the issues experience&lt;br /&gt;
shows we&#039;ll need to address during development.&lt;br /&gt;
&lt;br /&gt;
=== Developer builds ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Local developer builds use whatever Rust toolchain is available on the system.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Someone building Firefox can maintain the latest stable Rust with the&lt;br /&gt;
`rustup` for `mach bootstrap` tools, or try other variations.&lt;br /&gt;
&lt;br /&gt;
=== Required versions ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;We require a new stable Rust starting 2 weeks after it is released.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This policy effectively removes the difference between the required&lt;br /&gt;
Rust version and the default target for official builds, while still&lt;br /&gt;
giving tier-3 developers some time to process toolchain updates.&lt;br /&gt;
&lt;br /&gt;
Downstream packagers still have 2-3 months to package each stable&lt;br /&gt;
Rust release before it’s required by a new Firefox release.&lt;br /&gt;
&lt;br /&gt;
The stable+two weeks requirement is a rough target. We expect to hit&lt;br /&gt;
it within a few days for most Rust releases. But, for example, when the&lt;br /&gt;
target date falls within a mozilla-central soft freeze (before branching&lt;br /&gt;
for a beta release) we may update a week later.&lt;br /&gt;
&lt;br /&gt;
We expect esr releases will stay on the same minimum Rust version,&lt;br /&gt;
so backporting security fixes may require Rust compatibility work too.&lt;br /&gt;
&lt;br /&gt;
=== Rationale ===&lt;br /&gt;
&lt;br /&gt;
We need to be fast and efficient across the whole system which includes&lt;br /&gt;
the Rust, Servo, and Firefox development teams. We realise that the&lt;br /&gt;
decisions we make have an impact downstream, and we want to minimise the&lt;br /&gt;
negative aspects of that impact. However, we cannot do so at the expense&lt;br /&gt;
of our own productivity.&lt;br /&gt;
&lt;br /&gt;
There are many other stakeholders, of course, but our work in Gecko and&lt;br /&gt;
Servo are major drivers for Rust language, compiler, and library&lt;br /&gt;
development. That influence is more effective if we can iterate quickly.&lt;br /&gt;
Servo itself often uses experimental language features to give the&lt;br /&gt;
necessary early feedback on features as they evolve. &lt;br /&gt;
&lt;br /&gt;
Rust updates every six weeks, just like Firefox. This is more like web&lt;br /&gt;
languages than native languages, but it&#039;s been great for building&lt;br /&gt;
community. We (as Gecko developers) should embrace it.&lt;br /&gt;
&lt;br /&gt;
Many of us think of the toolchain and source code as being conceptually&lt;br /&gt;
different. At this point in time, Rust is evolving much more quickly&lt;br /&gt;
than Python or C++. For now it is easier to think of Rust as being part&lt;br /&gt;
of Firefox, rather than thinking of it like a C++ toolchain with decades&lt;br /&gt;
of history which we we have little influence on.&lt;br /&gt;
&lt;br /&gt;
Official build configurations are generally part of the Firefox&lt;br /&gt;
code itself, subject to normal review, and don&#039;t affect anyone else.&lt;br /&gt;
Therefore it&#039;s straightforward to manage the Rust toolchain we use&lt;br /&gt;
directly like any other change.&lt;br /&gt;
&lt;br /&gt;
For contributors, we maintain a minimum supported Rust toolchain&lt;br /&gt;
This helps those working on tier-3 platforms, where updating Rust can be&lt;br /&gt;
more difficult than just running `rustup update`, by giving them time to adapt.&lt;br /&gt;
However, it means other contributors must backport newer work to&lt;br /&gt;
maintain compatibility. As more Rust code was merged into Firefox this&lt;br /&gt;
became expensive.&lt;br /&gt;
&lt;br /&gt;
Historically we bumped this minimum every 3-4 Rust releases, which also&lt;br /&gt;
helped contributors on slow network connections since they didn&#039;t have&lt;br /&gt;
to download toolchains as often. Deciding to bump this way involved&lt;br /&gt;
negotiating each change, which by late 2017 many contributors felt was a&lt;br /&gt;
more significant burden. Delaying to give tier-3 platforms months instead of&lt;br /&gt;
weeks to update their Rust packages is also not considered a good&lt;br /&gt;
trade-off.&lt;br /&gt;
&lt;br /&gt;
My experience is that it takes about a week for version bumps to start&lt;br /&gt;
pulling in dependent crates using new language features, so updating&lt;br /&gt;
after a couple of weeks acts as only a moderate restraint on Servo&lt;br /&gt;
developers working on Gecko modules.&lt;br /&gt;
I think this is the correct trade-off between those two groups.&lt;br /&gt;
&lt;br /&gt;
==== Alternate Proposals ====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;We require nightly Rust&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This would certainly speed up the feedback with language design.&lt;br /&gt;
However, we would frequently encounter build breakage when unstable&lt;br /&gt;
language features change. Even Servo pins to a specific nightly to avoid&lt;br /&gt;
this problem. That’s appropriate for a smaller research project, but not&lt;br /&gt;
something the size of Firefox.&lt;br /&gt;
&lt;br /&gt;
We should and do test building Firefox with nightly Rust to catch&lt;br /&gt;
compiler issues, but that’s different from requiring everyone to use&lt;br /&gt;
unstable Rust.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;We require beta Rust&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
I don’t think anyone has suggested this, but I thought I’d include&lt;br /&gt;
it for completeness. This shortens the feedback cycle for new features&lt;br /&gt;
at the expense of more churn for contributors. It’s not a good trade-off&lt;br /&gt;
because by the time a new feature is stabilized in beta Rust, it’s too&lt;br /&gt;
late to change it much. This is better served by particular developers&lt;br /&gt;
working with upstream directly. I believe beta is also something of an&lt;br /&gt;
“excluded middle” in the Rust ecosystem, with most contributors working&lt;br /&gt;
with either stable or unstable nightly Rust.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;We require the previous stable Rust once a new stable Rust is released.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
That is, we bump the Firefox minimum to Rust 1.n.m when rust 1.(n+1).0&lt;br /&gt;
stable is released. This is roughly every 6 weeks, with six weeks to&lt;br /&gt;
update before bumping into the new requirement.  This policy might be&lt;br /&gt;
simpler for contributors to remember. There&#039;s not much difference in the&lt;br /&gt;
amount of time downstream packager receive for a particular Firefox&lt;br /&gt;
release. This is a trade-off of more time for tier-3 developers against&lt;br /&gt;
people working on Gecko/Servo components doing extra work to maintain&lt;br /&gt;
compatibility. As I say above, I think this is the wrong choice.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;We bump the minimum Rust version only when new features are compelling.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This reduces churn for developers, but the need to negotiate each bump&lt;br /&gt;
takes time better spent on development. See the motivation section&lt;br /&gt;
above.&lt;/div&gt;</summary>
		<author><name>Rillian</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Rust_Update_Policy_for_Firefox&amp;diff=1188298</id>
		<title>Rust Update Policy for Firefox</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Rust_Update_Policy_for_Firefox&amp;diff=1188298"/>
		<updated>2018-01-31T17:36:27Z</updated>

		<summary type="html">&lt;p&gt;Rillian: /* Schedule */ Requiring rust 1.23 slipped to January 26. https://bugzilla.mozilla.org/show_bug.cgi?id=1433185&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Firefox [[Oxidation|depends on code]] written in the [https://www.rust-lang.org/ Rust programming language].&lt;br /&gt;
&lt;br /&gt;
We document here the decision making and planning around when we update the Rust toolchains used and required to build Firefox.&lt;br /&gt;
&lt;br /&gt;
This allows contributors to know when new features will be usable, and&lt;br /&gt;
downstream packagers to know what toolchain will be required for each&lt;br /&gt;
Firefox release. Both benefit from the predictability of a schedule.&lt;br /&gt;
&lt;br /&gt;
== Schedule ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Release Firefox requirements:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Firefox Version !! Requires !! Rust release date !! Firefox release date&lt;br /&gt;
|-&lt;br /&gt;
| Firefox 56 || Rust 1.17.0 || 2017 April 27 || 2017 September 26&lt;br /&gt;
|-&lt;br /&gt;
| Firefox 57 || Rust 1.19.0 || 2017 July 20 || 2017 November 14&lt;br /&gt;
|-&lt;br /&gt;
| Firefox 58 || Rust 1.21.0 || 2017 October 12 ||2018 January 16&lt;br /&gt;
|-&lt;br /&gt;
| Firefox 59 || Rust 1.22.1 || 2017 November 23 || 2018 March 6&lt;br /&gt;
|-&lt;br /&gt;
| Firefox 60 || Rust 1.23.0 || 2018 February 15 || 2018 May 1&lt;br /&gt;
|-&lt;br /&gt;
| Firefox 61 || Rust 1.25.0 || 2018 March 29 || 2018 June 26&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;New feature adoption schedule:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Mozilla-central can use !! Starting on (Rust release + 2 weeks)&lt;br /&gt;
|- &lt;br /&gt;
| Rust 1.19.0 || 2017 August 3&lt;br /&gt;
|-&lt;br /&gt;
| Rust 1.20.0 || 2017 October 17 ([https://bugzilla.mozilla.org/show_bug.cgi?id=1396884 was] September 14)&lt;br /&gt;
|-&lt;br /&gt;
| Rust 1.21.0 || 2017 October 26&lt;br /&gt;
|-&lt;br /&gt;
| Rust 1.22.0 || 2017 December 7&lt;br /&gt;
|-&lt;br /&gt;
| Rust 1.23.0 || 2018 January 26 ([https://bugzilla.mozilla.org/show_bug.cgi?id=1418081#c8 was] January 18)&lt;br /&gt;
|-&lt;br /&gt;
| Rust 1.24.0 || 2018 March 6&lt;br /&gt;
|-&lt;br /&gt;
| Rust 1.25.0 || 2018 April 12&lt;br /&gt;
|-&lt;br /&gt;
| Rust 1.26.0 || 2018 May 24&lt;br /&gt;
|-&lt;br /&gt;
| Rust 1.27.0 || 2018 July 5&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Policy ==&lt;br /&gt;
&lt;br /&gt;
=== Official builds ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;We ship official stable Firefox with stable Rust.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Typically we build Firefox Nightly with the current stable Rust and let&lt;br /&gt;
that configuration ride through beta to release. There have been frequent&lt;br /&gt;
exceptions where we&#039;ve adopted a beta Rust during the Nightly phase to&lt;br /&gt;
address some platform support issue, and later updated when that Rust&lt;br /&gt;
version became stable. For example, we needed to use beta Rust for our&lt;br /&gt;
own builds when we first added Rust support to Firefox for Android.&lt;br /&gt;
&lt;br /&gt;
The policy provides good stability guarantees once Firefox is in&lt;br /&gt;
release, while giving us the freedom to respond to the issues experience&lt;br /&gt;
shows we&#039;ll need to address during development.&lt;br /&gt;
&lt;br /&gt;
=== Developer builds ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Local developer builds use whatever Rust toolchain is available on the system.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Someone building Firefox can maintain the latest stable Rust with the&lt;br /&gt;
`rustup` for `mach bootstrap` tools, or try other variations.&lt;br /&gt;
&lt;br /&gt;
=== Required versions ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;We require a new stable Rust starting 2 weeks after it is released.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This policy effectively removes the difference between the required&lt;br /&gt;
Rust version and the default target for official builds, while still&lt;br /&gt;
giving tier-3 developers some time to process toolchain updates.&lt;br /&gt;
&lt;br /&gt;
Downstream packagers still have 2-3 months to package each stable&lt;br /&gt;
Rust release before it’s required by a new Firefox release.&lt;br /&gt;
&lt;br /&gt;
The stable+two weeks requirement is a rough target. We expect to hit&lt;br /&gt;
it within a few days for most Rust releases. But, for example, when the&lt;br /&gt;
target date falls within a mozilla-central soft freeze (before branching&lt;br /&gt;
for a beta release) we may update a week later.&lt;br /&gt;
&lt;br /&gt;
We expect esr releases will stay on the same minimum Rust version,&lt;br /&gt;
so backporting security fixes may require Rust compatibility work too.&lt;br /&gt;
&lt;br /&gt;
=== Rationale ===&lt;br /&gt;
&lt;br /&gt;
We need to be fast and efficient across the whole system which includes&lt;br /&gt;
the Rust, Servo, and Firefox development teams. We realise that the&lt;br /&gt;
decisions we make have an impact downstream, and we want to minimise the&lt;br /&gt;
negative aspects of that impact. However, we cannot do so at the expense&lt;br /&gt;
of our own productivity.&lt;br /&gt;
&lt;br /&gt;
There are many other stakeholders, of course, but our work in Gecko and&lt;br /&gt;
Servo are major drivers for Rust language, compiler, and library&lt;br /&gt;
development. That influence is more effective if we can iterate quickly.&lt;br /&gt;
Servo itself often uses experimental language features to give the&lt;br /&gt;
necessary early feedback on features as they evolve. &lt;br /&gt;
&lt;br /&gt;
Rust updates every six weeks, just like Firefox. This is more like web&lt;br /&gt;
languages than native languages, but it&#039;s been great for building&lt;br /&gt;
community. We (as Gecko developers) should embrace it.&lt;br /&gt;
&lt;br /&gt;
Many of us think of the toolchain and source code as being conceptually&lt;br /&gt;
different. At this point in time, Rust is evolving much more quickly&lt;br /&gt;
than Python or C++. For now it is easier to think of Rust as being part&lt;br /&gt;
of Firefox, rather than thinking of it like a C++ toolchain with decades&lt;br /&gt;
of history which we we have little influence on.&lt;br /&gt;
&lt;br /&gt;
Official build configurations are generally part of the Firefox&lt;br /&gt;
code itself, subject to normal review, and don&#039;t affect anyone else.&lt;br /&gt;
Therefore it&#039;s straightforward to manage the Rust toolchain we use&lt;br /&gt;
directly like any other change.&lt;br /&gt;
&lt;br /&gt;
For contributors, we maintain a minimum supported Rust toolchain&lt;br /&gt;
This helps those working on tier-3 platforms, where updating Rust can be&lt;br /&gt;
more difficult than just running `rustup update`, by giving them time to adapt.&lt;br /&gt;
However, it means other contributors must backport newer work to&lt;br /&gt;
maintain compatibility. As more Rust code was merged into Firefox this&lt;br /&gt;
became expensive.&lt;br /&gt;
&lt;br /&gt;
Historically we bumped this minimum every 3-4 Rust releases, which also&lt;br /&gt;
helped contributors on slow network connections since they didn&#039;t have&lt;br /&gt;
to download toolchains as often. Deciding to bump this way involved&lt;br /&gt;
negotiating each change, which by late 2017 many contributors felt was a&lt;br /&gt;
more significant burden. Delaying to give tier-3 platforms months instead of&lt;br /&gt;
weeks to update their Rust packages is also not considered a good&lt;br /&gt;
trade-off.&lt;br /&gt;
&lt;br /&gt;
My experience is that it takes about a week for version bumps to start&lt;br /&gt;
pulling in dependent crates using new language features, so updating&lt;br /&gt;
after a couple of weeks acts as only a moderate restraint on Servo&lt;br /&gt;
developers working on Gecko modules.&lt;br /&gt;
I think this is the correct trade-off between those two groups.&lt;br /&gt;
&lt;br /&gt;
==== Alternate Proposals ====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;We require nightly Rust&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This would certainly speed up the feedback with language design.&lt;br /&gt;
However, we would frequently encounter build breakage when unstable&lt;br /&gt;
language features change. Even Servo pins to a specific nightly to avoid&lt;br /&gt;
this problem. That’s appropriate for a smaller research project, but not&lt;br /&gt;
something the size of Firefox.&lt;br /&gt;
&lt;br /&gt;
We should and do test building Firefox with nightly Rust to catch&lt;br /&gt;
compiler issues, but that’s different from requiring everyone to use&lt;br /&gt;
unstable Rust.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;We require beta Rust&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
I don’t think anyone has suggested this, but I thought I’d include&lt;br /&gt;
it for completeness. This shortens the feedback cycle for new features&lt;br /&gt;
at the expense of more churn for contributors. It’s not a good trade-off&lt;br /&gt;
because by the time a new feature is stabilized in beta Rust, it’s too&lt;br /&gt;
late to change it much. This is better served by particular developers&lt;br /&gt;
working with upstream directly. I believe beta is also something of an&lt;br /&gt;
“excluded middle” in the Rust ecosystem, with most contributors working&lt;br /&gt;
with either stable or unstable nightly Rust.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;We require the previous stable Rust once a new stable Rust is released.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
That is, we bump the Firefox minimum to Rust 1.n.m when rust 1.(n+1).0&lt;br /&gt;
stable is released. This is roughly every 6 weeks, with six weeks to&lt;br /&gt;
update before bumping into the new requirement.  This policy might be&lt;br /&gt;
simpler for contributors to remember. There&#039;s not much difference in the&lt;br /&gt;
amount of time downstream packager receive for a particular Firefox&lt;br /&gt;
release. This is a trade-off of more time for tier-3 developers against&lt;br /&gt;
people working on Gecko/Servo components doing extra work to maintain&lt;br /&gt;
compatibility. As I say above, I think this is the wrong choice.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;We bump the minimum Rust version only when new features are compelling.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This reduces churn for developers, but the need to negotiate each bump&lt;br /&gt;
takes time better spent on development. See the motivation section&lt;br /&gt;
above.&lt;/div&gt;</summary>
		<author><name>Rillian</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Rust_Update_Policy_for_Firefox&amp;diff=1186910</id>
		<title>Rust Update Policy for Firefox</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Rust_Update_Policy_for_Firefox&amp;diff=1186910"/>
		<updated>2018-01-16T23:42:31Z</updated>

		<summary type="html">&lt;p&gt;Rillian: /* Schedule */ typo&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Firefox [[Oxidation|depends on code]] written in the [https://www.rust-lang.org/ Rust programming language].&lt;br /&gt;
&lt;br /&gt;
We document here the decision making and planning around when we update the Rust toolchains used and required to build Firefox.&lt;br /&gt;
&lt;br /&gt;
This allows contributors to know when new features will be usable, and&lt;br /&gt;
downstream packagers to know what toolchain will be required for each&lt;br /&gt;
Firefox release. Both benefit from the predictability of a schedule.&lt;br /&gt;
&lt;br /&gt;
== Schedule ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Release Firefox requirements:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Firefox Version !! Requires !! Rust release date !! Firefox release date&lt;br /&gt;
|-&lt;br /&gt;
| Firefox 56 || Rust 1.17.0 || 2017 April 27 || 2017 September 26&lt;br /&gt;
|-&lt;br /&gt;
| Firefox 57 || Rust 1.19.0 || 2017 July 20 || 2017 November 14&lt;br /&gt;
|-&lt;br /&gt;
| Firefox 58 || Rust 1.21.0 || 2017 October 12 ||2018 January 16&lt;br /&gt;
|-&lt;br /&gt;
| Firefox 59 || Rust 1.22.1 || 2017 November 23 || 2018 March 6&lt;br /&gt;
|-&lt;br /&gt;
| Firefox 60 || Rust 1.23.0 || 2018 February 15 || 2018 May 1&lt;br /&gt;
|-&lt;br /&gt;
| Firefox 61 || Rust 1.25.0 || 2018 March 29 || 2018 June 26&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;New feature adoption schedule:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Mozilla-central can use !! Starting on (Rust release + 2 weeks)&lt;br /&gt;
|- &lt;br /&gt;
| Rust 1.19.0 || 2017 August 3&lt;br /&gt;
|-&lt;br /&gt;
| Rust 1.20.0 || 2017 October 17 ([https://bugzilla.mozilla.org/show_bug.cgi?id=1396884 was] September 14)&lt;br /&gt;
|-&lt;br /&gt;
| Rust 1.21.0 || 2017 October 26&lt;br /&gt;
|-&lt;br /&gt;
| Rust 1.22.0 || 2017 December 7&lt;br /&gt;
|-&lt;br /&gt;
| Rust 1.23.0 || 2018 January 23&lt;br /&gt;
|-&lt;br /&gt;
| Rust 1.24.0 || 2018 March 6&lt;br /&gt;
|-&lt;br /&gt;
| Rust 1.25.0 || 2018 April 12&lt;br /&gt;
|-&lt;br /&gt;
| Rust 1.26.0 || 2018 May 24&lt;br /&gt;
|-&lt;br /&gt;
| Rust 1.27.0 || 2018 July 5&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Policy ==&lt;br /&gt;
&lt;br /&gt;
=== Official builds ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;We ship official stable Firefox with stable Rust.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Typically we build Firefox Nightly with the current stable Rust and let&lt;br /&gt;
that configuration ride through beta to release. There have been frequent&lt;br /&gt;
exceptions where we&#039;ve adopted a beta Rust during the Nightly phase to&lt;br /&gt;
address some platform support issue, and later updated when that Rust&lt;br /&gt;
version became stable. For example, we needed to use beta Rust for our&lt;br /&gt;
own builds when we first added Rust support to Firefox for Android.&lt;br /&gt;
&lt;br /&gt;
The policy provides good stability guarantees once Firefox is in&lt;br /&gt;
release, while giving us the freedom to respond to the issues experience&lt;br /&gt;
shows we&#039;ll need to address during development.&lt;br /&gt;
&lt;br /&gt;
=== Developer builds ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Local developer builds use whatever Rust toolchain is available on the system.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Someone building Firefox can maintain the latest stable Rust with the&lt;br /&gt;
`rustup` for `mach bootstrap` tools, or try other variations.&lt;br /&gt;
&lt;br /&gt;
=== Required versions ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;We require a new stable Rust starting 2 weeks after it is released.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This policy effectively removes the difference between the required&lt;br /&gt;
Rust version and the default target for official builds, while still&lt;br /&gt;
giving tier-3 developers some time to process toolchain updates.&lt;br /&gt;
&lt;br /&gt;
Downstream packagers still have 2-3 months to package each stable&lt;br /&gt;
Rust release before it’s required by a new Firefox release.&lt;br /&gt;
&lt;br /&gt;
The stable+two weeks requirement is a rough target. We expect to hit&lt;br /&gt;
it within a few days for most Rust releases. But, for example, when the&lt;br /&gt;
target date falls within a mozilla-central soft freeze (before branching&lt;br /&gt;
for a beta release) we may update a week later.&lt;br /&gt;
&lt;br /&gt;
We expect esr releases will stay on the same minimum Rust version,&lt;br /&gt;
so backporting security fixes may require Rust compatibility work too.&lt;br /&gt;
&lt;br /&gt;
=== Rationale ===&lt;br /&gt;
&lt;br /&gt;
We need to be fast and efficient across the whole system which includes&lt;br /&gt;
the Rust, Servo, and Firefox development teams. We realise that the&lt;br /&gt;
decisions we make have an impact downstream, and we want to minimise the&lt;br /&gt;
negative aspects of that impact. However, we cannot do so at the expense&lt;br /&gt;
of our own productivity.&lt;br /&gt;
&lt;br /&gt;
There are many other stakeholders, of course, but our work in Gecko and&lt;br /&gt;
Servo are major drivers for Rust language, compiler, and library&lt;br /&gt;
development. That influence is more effective if we can iterate quickly.&lt;br /&gt;
Servo itself often uses experimental language features to give the&lt;br /&gt;
necessary early feedback on features as they evolve. &lt;br /&gt;
&lt;br /&gt;
Rust updates every six weeks, just like Firefox. This is more like web&lt;br /&gt;
languages than native languages, but it&#039;s been great for building&lt;br /&gt;
community. We (as Gecko developers) should embrace it.&lt;br /&gt;
&lt;br /&gt;
Many of us think of the toolchain and source code as being conceptually&lt;br /&gt;
different. At this point in time, Rust is evolving much more quickly&lt;br /&gt;
than Python or C++. For now it is easier to think of Rust as being part&lt;br /&gt;
of Firefox, rather than thinking of it like a C++ toolchain with decades&lt;br /&gt;
of history which we we have little influence on.&lt;br /&gt;
&lt;br /&gt;
Official build configurations are generally part of the Firefox&lt;br /&gt;
code itself, subject to normal review, and don&#039;t affect anyone else.&lt;br /&gt;
Therefore it&#039;s straightforward to manage the Rust toolchain we use&lt;br /&gt;
directly like any other change.&lt;br /&gt;
&lt;br /&gt;
For contributors, we maintain a minimum supported Rust toolchain&lt;br /&gt;
This helps those working on tier-3 platforms, where updating Rust can be&lt;br /&gt;
more difficult than just running `rustup update`, by giving them time to adapt.&lt;br /&gt;
However, it means other contributors must backport newer work to&lt;br /&gt;
maintain compatibility. As more Rust code was merged into Firefox this&lt;br /&gt;
became expensive.&lt;br /&gt;
&lt;br /&gt;
Historically we bumped this minimum every 3-4 Rust releases, which also&lt;br /&gt;
helped contributors on slow network connections since they didn&#039;t have&lt;br /&gt;
to download toolchains as often. Deciding to bump this way involved&lt;br /&gt;
negotiating each change, which by late 2017 many contributors felt was a&lt;br /&gt;
more significant burden. Delaying to give tier-3 platforms months instead of&lt;br /&gt;
weeks to update their Rust packages is also not considered a good&lt;br /&gt;
trade-off.&lt;br /&gt;
&lt;br /&gt;
My experience is that it takes about a week for version bumps to start&lt;br /&gt;
pulling in dependent crates using new language features, so updating&lt;br /&gt;
after a couple of weeks acts as only a moderate restraint on Servo&lt;br /&gt;
developers working on Gecko modules.&lt;br /&gt;
I think this is the correct trade-off between those two groups.&lt;br /&gt;
&lt;br /&gt;
==== Alternate Proposals ====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;We require nightly Rust&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This would certainly speed up the feedback with language design.&lt;br /&gt;
However, we would frequently encounter build breakage when unstable&lt;br /&gt;
language features change. Even Servo pins to a specific nightly to avoid&lt;br /&gt;
this problem. That’s appropriate for a smaller research project, but not&lt;br /&gt;
something the size of Firefox.&lt;br /&gt;
&lt;br /&gt;
We should and do test building Firefox with nightly Rust to catch&lt;br /&gt;
compiler issues, but that’s different from requiring everyone to use&lt;br /&gt;
unstable Rust.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;We require beta Rust&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
I don’t think anyone has suggested this, but I thought I’d include&lt;br /&gt;
it for completeness. This shortens the feedback cycle for new features&lt;br /&gt;
at the expense of more churn for contributors. It’s not a good trade-off&lt;br /&gt;
because by the time a new feature is stabilized in beta Rust, it’s too&lt;br /&gt;
late to change it much. This is better served by particular developers&lt;br /&gt;
working with upstream directly. I believe beta is also something of an&lt;br /&gt;
“excluded middle” in the Rust ecosystem, with most contributors working&lt;br /&gt;
with either stable or unstable nightly Rust.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;We require the previous stable Rust once a new stable Rust is released.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
That is, we bump the Firefox minimum to Rust 1.n.m when rust 1.(n+1).0&lt;br /&gt;
stable is released. This is roughly every 6 weeks, with six weeks to&lt;br /&gt;
update before bumping into the new requirement.  This policy might be&lt;br /&gt;
simpler for contributors to remember. There&#039;s not much difference in the&lt;br /&gt;
amount of time downstream packager receive for a particular Firefox&lt;br /&gt;
release. This is a trade-off of more time for tier-3 developers against&lt;br /&gt;
people working on Gecko/Servo components doing extra work to maintain&lt;br /&gt;
compatibility. As I say above, I think this is the wrong choice.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;We bump the minimum Rust version only when new features are compelling.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This reduces churn for developers, but the need to negotiate each bump&lt;br /&gt;
takes time better spent on development. See the motivation section&lt;br /&gt;
above.&lt;/div&gt;</summary>
		<author><name>Rillian</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Rust_Update_Policy_for_Firefox&amp;diff=1186909</id>
		<title>Rust Update Policy for Firefox</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Rust_Update_Policy_for_Firefox&amp;diff=1186909"/>
		<updated>2018-01-16T23:42:12Z</updated>

		<summary type="html">&lt;p&gt;Rillian: Building with rust 1.23 slipped into the soft freeze for Firefox 59, so requiring that version is delayed further.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Firefox [[Oxidation|depends on code]] written in the [https://www.rust-lang.org/ Rust programming language].&lt;br /&gt;
&lt;br /&gt;
We document here the decision making and planning around when we update the Rust toolchains used and required to build Firefox.&lt;br /&gt;
&lt;br /&gt;
This allows contributors to know when new features will be usable, and&lt;br /&gt;
downstream packagers to know what toolchain will be required for each&lt;br /&gt;
Firefox release. Both benefit from the predictability of a schedule.&lt;br /&gt;
&lt;br /&gt;
== Schedule ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Release Firefox requirements:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Firefox Version !! Requires !! Rust release date !! Firefox release date&lt;br /&gt;
|-&lt;br /&gt;
| Firefox 56 || Rust 1.17.0 || 2017 April 27 || 2017 September 26&lt;br /&gt;
|-&lt;br /&gt;
| Firefox 57 || Rust 1.19.0 || 2017 July 20 || 2017 November 14&lt;br /&gt;
|-&lt;br /&gt;
| Firefox 58 || Rust 1.21.0 || 2017 October 12 ||2018 January 16&lt;br /&gt;
|-&lt;br /&gt;
| Firefox 59 || Rust 1.22.1 || 2017 November 23 || 2018 March 6&lt;br /&gt;
|-&lt;br /&gt;
| Firefox 60 || Rust 1.23.0 || 2015 February 15 || 2018 May 1&lt;br /&gt;
|-&lt;br /&gt;
| Firefox 61 || Rust 1.25.0 || 2018 March 29 || 2018 June 26&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;New feature adoption schedule:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Mozilla-central can use !! Starting on (Rust release + 2 weeks)&lt;br /&gt;
|- &lt;br /&gt;
| Rust 1.19.0 || 2017 August 3&lt;br /&gt;
|-&lt;br /&gt;
| Rust 1.20.0 || 2017 October 17 ([https://bugzilla.mozilla.org/show_bug.cgi?id=1396884 was] September 14)&lt;br /&gt;
|-&lt;br /&gt;
| Rust 1.21.0 || 2017 October 26&lt;br /&gt;
|-&lt;br /&gt;
| Rust 1.22.0 || 2017 December 7&lt;br /&gt;
|-&lt;br /&gt;
| Rust 1.23.0 || 2018 January 23&lt;br /&gt;
|-&lt;br /&gt;
| Rust 1.24.0 || 2018 March 6&lt;br /&gt;
|-&lt;br /&gt;
| Rust 1.25.0 || 2018 April 12&lt;br /&gt;
|-&lt;br /&gt;
| Rust 1.26.0 || 2018 May 24&lt;br /&gt;
|-&lt;br /&gt;
| Rust 1.27.0 || 2018 July 5&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Policy ==&lt;br /&gt;
&lt;br /&gt;
=== Official builds ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;We ship official stable Firefox with stable Rust.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Typically we build Firefox Nightly with the current stable Rust and let&lt;br /&gt;
that configuration ride through beta to release. There have been frequent&lt;br /&gt;
exceptions where we&#039;ve adopted a beta Rust during the Nightly phase to&lt;br /&gt;
address some platform support issue, and later updated when that Rust&lt;br /&gt;
version became stable. For example, we needed to use beta Rust for our&lt;br /&gt;
own builds when we first added Rust support to Firefox for Android.&lt;br /&gt;
&lt;br /&gt;
The policy provides good stability guarantees once Firefox is in&lt;br /&gt;
release, while giving us the freedom to respond to the issues experience&lt;br /&gt;
shows we&#039;ll need to address during development.&lt;br /&gt;
&lt;br /&gt;
=== Developer builds ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Local developer builds use whatever Rust toolchain is available on the system.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Someone building Firefox can maintain the latest stable Rust with the&lt;br /&gt;
`rustup` for `mach bootstrap` tools, or try other variations.&lt;br /&gt;
&lt;br /&gt;
=== Required versions ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;We require a new stable Rust starting 2 weeks after it is released.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This policy effectively removes the difference between the required&lt;br /&gt;
Rust version and the default target for official builds, while still&lt;br /&gt;
giving tier-3 developers some time to process toolchain updates.&lt;br /&gt;
&lt;br /&gt;
Downstream packagers still have 2-3 months to package each stable&lt;br /&gt;
Rust release before it’s required by a new Firefox release.&lt;br /&gt;
&lt;br /&gt;
The stable+two weeks requirement is a rough target. We expect to hit&lt;br /&gt;
it within a few days for most Rust releases. But, for example, when the&lt;br /&gt;
target date falls within a mozilla-central soft freeze (before branching&lt;br /&gt;
for a beta release) we may update a week later.&lt;br /&gt;
&lt;br /&gt;
We expect esr releases will stay on the same minimum Rust version,&lt;br /&gt;
so backporting security fixes may require Rust compatibility work too.&lt;br /&gt;
&lt;br /&gt;
=== Rationale ===&lt;br /&gt;
&lt;br /&gt;
We need to be fast and efficient across the whole system which includes&lt;br /&gt;
the Rust, Servo, and Firefox development teams. We realise that the&lt;br /&gt;
decisions we make have an impact downstream, and we want to minimise the&lt;br /&gt;
negative aspects of that impact. However, we cannot do so at the expense&lt;br /&gt;
of our own productivity.&lt;br /&gt;
&lt;br /&gt;
There are many other stakeholders, of course, but our work in Gecko and&lt;br /&gt;
Servo are major drivers for Rust language, compiler, and library&lt;br /&gt;
development. That influence is more effective if we can iterate quickly.&lt;br /&gt;
Servo itself often uses experimental language features to give the&lt;br /&gt;
necessary early feedback on features as they evolve. &lt;br /&gt;
&lt;br /&gt;
Rust updates every six weeks, just like Firefox. This is more like web&lt;br /&gt;
languages than native languages, but it&#039;s been great for building&lt;br /&gt;
community. We (as Gecko developers) should embrace it.&lt;br /&gt;
&lt;br /&gt;
Many of us think of the toolchain and source code as being conceptually&lt;br /&gt;
different. At this point in time, Rust is evolving much more quickly&lt;br /&gt;
than Python or C++. For now it is easier to think of Rust as being part&lt;br /&gt;
of Firefox, rather than thinking of it like a C++ toolchain with decades&lt;br /&gt;
of history which we we have little influence on.&lt;br /&gt;
&lt;br /&gt;
Official build configurations are generally part of the Firefox&lt;br /&gt;
code itself, subject to normal review, and don&#039;t affect anyone else.&lt;br /&gt;
Therefore it&#039;s straightforward to manage the Rust toolchain we use&lt;br /&gt;
directly like any other change.&lt;br /&gt;
&lt;br /&gt;
For contributors, we maintain a minimum supported Rust toolchain&lt;br /&gt;
This helps those working on tier-3 platforms, where updating Rust can be&lt;br /&gt;
more difficult than just running `rustup update`, by giving them time to adapt.&lt;br /&gt;
However, it means other contributors must backport newer work to&lt;br /&gt;
maintain compatibility. As more Rust code was merged into Firefox this&lt;br /&gt;
became expensive.&lt;br /&gt;
&lt;br /&gt;
Historically we bumped this minimum every 3-4 Rust releases, which also&lt;br /&gt;
helped contributors on slow network connections since they didn&#039;t have&lt;br /&gt;
to download toolchains as often. Deciding to bump this way involved&lt;br /&gt;
negotiating each change, which by late 2017 many contributors felt was a&lt;br /&gt;
more significant burden. Delaying to give tier-3 platforms months instead of&lt;br /&gt;
weeks to update their Rust packages is also not considered a good&lt;br /&gt;
trade-off.&lt;br /&gt;
&lt;br /&gt;
My experience is that it takes about a week for version bumps to start&lt;br /&gt;
pulling in dependent crates using new language features, so updating&lt;br /&gt;
after a couple of weeks acts as only a moderate restraint on Servo&lt;br /&gt;
developers working on Gecko modules.&lt;br /&gt;
I think this is the correct trade-off between those two groups.&lt;br /&gt;
&lt;br /&gt;
==== Alternate Proposals ====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;We require nightly Rust&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This would certainly speed up the feedback with language design.&lt;br /&gt;
However, we would frequently encounter build breakage when unstable&lt;br /&gt;
language features change. Even Servo pins to a specific nightly to avoid&lt;br /&gt;
this problem. That’s appropriate for a smaller research project, but not&lt;br /&gt;
something the size of Firefox.&lt;br /&gt;
&lt;br /&gt;
We should and do test building Firefox with nightly Rust to catch&lt;br /&gt;
compiler issues, but that’s different from requiring everyone to use&lt;br /&gt;
unstable Rust.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;We require beta Rust&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
I don’t think anyone has suggested this, but I thought I’d include&lt;br /&gt;
it for completeness. This shortens the feedback cycle for new features&lt;br /&gt;
at the expense of more churn for contributors. It’s not a good trade-off&lt;br /&gt;
because by the time a new feature is stabilized in beta Rust, it’s too&lt;br /&gt;
late to change it much. This is better served by particular developers&lt;br /&gt;
working with upstream directly. I believe beta is also something of an&lt;br /&gt;
“excluded middle” in the Rust ecosystem, with most contributors working&lt;br /&gt;
with either stable or unstable nightly Rust.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;We require the previous stable Rust once a new stable Rust is released.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
That is, we bump the Firefox minimum to Rust 1.n.m when rust 1.(n+1).0&lt;br /&gt;
stable is released. This is roughly every 6 weeks, with six weeks to&lt;br /&gt;
update before bumping into the new requirement.  This policy might be&lt;br /&gt;
simpler for contributors to remember. There&#039;s not much difference in the&lt;br /&gt;
amount of time downstream packager receive for a particular Firefox&lt;br /&gt;
release. This is a trade-off of more time for tier-3 developers against&lt;br /&gt;
people working on Gecko/Servo components doing extra work to maintain&lt;br /&gt;
compatibility. As I say above, I think this is the wrong choice.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;We bump the minimum Rust version only when new features are compelling.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This reduces churn for developers, but the need to negotiate each bump&lt;br /&gt;
takes time better spent on development. See the motivation section&lt;br /&gt;
above.&lt;/div&gt;</summary>
		<author><name>Rillian</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Oxidation&amp;diff=1185391</id>
		<title>Oxidation</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Oxidation&amp;diff=1185391"/>
		<updated>2017-12-05T23:54:18Z</updated>

		<summary type="html">&lt;p&gt;Rillian: /* Within Firefox */ Move media playback stack to the in-progress section.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Oxidation&#039;&#039;&#039; is a project to integrate [https://www.rust-lang.org/ Rust] code in and around Firefox. &lt;br /&gt;
&lt;br /&gt;
Rust support has been required on all platforms since Firefox 54, and the first major Rust components were shipped in Firefox 56 (encoding_rs) and 57 (Stylo). Moving forward, the goal of Oxidation is to make it easier and more pleasant to use Rust in Firefox, and correspondingly to increase the amount of Rust code in Firefox.&lt;br /&gt;
&lt;br /&gt;
This page is intended to serve as the starting point for all matters relating to Rust code in Firefox: the what, the why, and the how.&lt;br /&gt;
&lt;br /&gt;
= Guidelines =&lt;br /&gt;
&lt;br /&gt;
The goal of this section is to provide some high-level guidelines about when Rust should be used. &lt;br /&gt;
&lt;br /&gt;
In summary, Rust should be used in the following situations.&lt;br /&gt;
* For new components and completely rewritten components there should be a strong bias towards using Rust, especially for code around Firefox but not within Firefox.&lt;br /&gt;
* For existing components it&#039;s more complicated!&lt;br /&gt;
&lt;br /&gt;
The following sections have more detail. Ultimately, choice of language for a code component is an engineering decision, with corresponding trade-offs, and is best decided by individual teams.&lt;br /&gt;
&lt;br /&gt;
== Rust Strengths ==&lt;br /&gt;
&lt;br /&gt;
Rust has the following strengths.&lt;br /&gt;
* Memory safety, which prevents crashes and security vulnerabilities.&lt;br /&gt;
* Thread safety, which enables improved performance via parallelism.&lt;br /&gt;
* High expressiveness.&lt;br /&gt;
* A great community.&lt;br /&gt;
&lt;br /&gt;
== Rust Weaknesses ==&lt;br /&gt;
&lt;br /&gt;
One major issue with Rust relates to personnel. There is a wide variety of experience levels within Mozilla, for both coding and reviewing. Also, Rust&#039;s learning curve is steep at the start, which can be intimidating.&lt;br /&gt;
&lt;br /&gt;
There are also technical challenges.&lt;br /&gt;
* Compile times are currently slow.&lt;br /&gt;
* Crossing the C++/Rust boundary layer can be difficult, and is relatively slow due to no inlining.&lt;br /&gt;
** Bindgen can be tricky, especially working around clang bugs in different versions and on different platforms&lt;br /&gt;
* Android is currently [https://forge.rust-lang.org/platform-support.html not a Tier 1 platform].&lt;br /&gt;
** rillian: &amp;quot;As I understand it, the problem is no one has set up tests on a cloud service, so there&#039;s no way for upstream to gate work on Android regressions. Qemu emulation is too slow. There aren&#039;t many services with arm support, but there are a couple of new options. If someone does the work of setting something up we should be able to get the Rust team to adopt it.&amp;quot;&lt;br /&gt;
* Integration with Gecko often requires adding wrapper/glue code. Such code is typically valuable and reusable, however.&lt;br /&gt;
* Sharing components between Gecko and Servo is difficult.&lt;br /&gt;
** The workflow is annoying and inefficient. Furthermore, permission to land directly on autoland is sometimes needed to fix problems, but few people have that.&lt;br /&gt;
*** vcs-sync/Phabricator/Lando will hopefully fix this.&lt;br /&gt;
** There are continuous integration mismatches.&lt;br /&gt;
** Servo CI is potentially under-resourced.&lt;br /&gt;
** This is not relevant for Gecko-only Rust components, however.&lt;br /&gt;
&lt;br /&gt;
== Recommendations ==&lt;br /&gt;
&lt;br /&gt;
Therefore, Rust is most suitable in the following situations.&lt;br /&gt;
* For components that are relatively standalone, with small and simple APIs.&lt;br /&gt;
** This minimizes the C++/Rust boundary layer issues.&lt;br /&gt;
** Infrastructure tools that are standalone programs are ideal.&lt;br /&gt;
** Note that it&#039;s good software engineering practice to write loosely-coupled components anyway.&lt;br /&gt;
* For components that process untrusted input, e.g. parsers.&lt;br /&gt;
** Rust&#039;s memory safety is a big help here.&lt;br /&gt;
** See the [http://spw17.langsec.org/papers/chifflier-parsing-in-2017.pdf &amp;quot;Writing parsers like it is 2017&amp;quot;] paper for lots of good details.&lt;br /&gt;
* For components where parallelism can provide big performance wins.&lt;br /&gt;
* For components where Servo has demonstrated success.&lt;br /&gt;
&lt;br /&gt;
In terms of where to keep Rust crates, there are three options, from most-coupled to least-coupled.&lt;br /&gt;
* Put the crate in mozilla-central or in Servo&#039;s repository.&lt;br /&gt;
** For binding code, the decision to put it into Gecko or Servo can be difficult. The best choice depend on the details of the binding code in question.&lt;br /&gt;
* Put the crate somewhere else (e.g. a separate GitHub repository), and regularly vendor it into mozilla-central.&lt;br /&gt;
** This works well if relatively few people are working on the crate, and the API isn&#039;t too complex.&lt;br /&gt;
** Can be useful if useful development can be done using just that crate, without the rest of Gecko or Servo.&lt;br /&gt;
** This also makes sense for pre-existing third-party crates that we choose to import.&lt;br /&gt;
** This is done by WebRender, for example.&lt;br /&gt;
* Put the crate somewhere else (e.g. [https://crates.io crates.io]), and use Cargo to access it at build-time.&lt;br /&gt;
** This is only suitable for highly general-purpose crates.&lt;br /&gt;
&lt;br /&gt;
In general, erring on the side of tighter coupling is advisable. For example, the &amp;lt;tt&amp;gt;heapsize&amp;lt;/tt&amp;gt; crate used in memory reporting was moved to crates.io, and then other crates came to depend on it. Later on it needed major API changes, and we ended up replacing it with a new crate called &amp;lt;tt&amp;gt;malloc_size_of&amp;lt;/tt&amp;gt; (stored in Servo&#039;s repository) because that was easier than modifying &amp;lt;tt&amp;gt;heapsize&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
= Documentation =&lt;br /&gt;
&lt;br /&gt;
== Rust in general ==&lt;br /&gt;
&lt;br /&gt;
* The [https://www.rust-lang.org/en-US/documentation.html Rust Documentation] page is the best place to start. In particular, the [https://doc.rust-lang.org/book/ The Rust Programming Language] provides a good overview.&lt;br /&gt;
* [https://www.rust-lang.org/en-US/community.html The Rust Community] page lists IRC channels, forums, and other places where Rust assistance can be obtained.&lt;br /&gt;
* [http://shop.oreilly.com/product/0636920040385.do Programming Rust: Fast, Safe Systems Development], by Jim Blandy &amp;amp; Jason Orendorff, is a detailed guide to the language.&lt;br /&gt;
&lt;br /&gt;
== Rust in Firefox ==&lt;br /&gt;
&lt;br /&gt;
* [https://developer.mozilla.org/en-US/Firefox/Building_Firefox_with_Rust_code Developer Documentation]&lt;br /&gt;
* [https://firefox-source-docs.mozilla.org/build/buildsystem/rust.html Build System Documentation]&lt;br /&gt;
* [https://public.etherpad-mozilla.org/p/stylo Stylo workflow] (applies to any changes that straddle Gecko and Servo)&lt;br /&gt;
&lt;br /&gt;
= Supported Rust versions for Firefox builds =&lt;br /&gt;
&lt;br /&gt;
Below are [[Rust Update Policy for Firefox|our expectations]] if everything goes smoothly; we may need newer toolchains to address specific issues. Our ultimate policy is just that release Firefox will not require unstable or beta Rust to build.&lt;br /&gt;
&lt;br /&gt;
* Firefox 56 (released 2017 September 26) requires Rust 1.17.0 or later.&lt;br /&gt;
** Official builds will use Rust 1.19.0.&lt;br /&gt;
* Firefox 57 (released 2017 November 14) requires Rust 1.20.0.&lt;br /&gt;
** Mozilla-central can start using Rust 1.19.0 language features 2017 August 3.&lt;br /&gt;
** Mozilla-central can start using Rust 1.20.0 features 2017 September 14.&lt;br /&gt;
* Firefox 58 (released 2018 January 16) requires Rust 1.21.0.&lt;br /&gt;
** Mozilla-central can use Rust 1.21.0 language features 2017 October 26.&lt;br /&gt;
* Firefox 59 (released 2018 March 6) requires Rust 1.22.0.&lt;br /&gt;
** Mozilla-central can use Rust 1.22.0 features 2017 December 7.&lt;br /&gt;
** Firefox 59 ESR is expected to continue to work with Rust 1.22 throughout its support lifetime.&lt;br /&gt;
* Firefox 60 (released 2018 May 1) requires Rust 1.23.0.&lt;br /&gt;
** Mozilla-central can use Rust 1.23.0 features 2018 January 18.&lt;br /&gt;
* Firefox 61 (released 2018 June 26) requires Rust 1.25.0.&lt;br /&gt;
** Mozilla-central can use Rust 1.24.0 features 2018 March 6.&lt;br /&gt;
** Mozilla-central can use Rust 1.25.0 features 2018 April 12.&lt;br /&gt;
&lt;br /&gt;
= Rust Components =&lt;br /&gt;
&lt;br /&gt;
== Within Firefox ==&lt;br /&gt;
&lt;br /&gt;
=== Completed ===&lt;br /&gt;
&lt;br /&gt;
* MP4 metadata parser: {{bug|1161350}} (shipped for desktop in Firefox 48)&lt;br /&gt;
** &#039;&#039;&#039;Why Rust?&#039;&#039;&#039; Parses untrusted input, replaces libstagefright, a 3rd-party library with a history of security vulnerabilities.&lt;br /&gt;
* Replace uconv with encoding-rs: {{bug|1261841}} (shipped in Firefox 56)&lt;br /&gt;
* CSS style calculation (from Servo): {{bug|stylo}} (shipped for desktop in Firefox 57)&lt;br /&gt;
** &#039;&#039;&#039;Why Rust?&#039;&#039;&#039; Code taken from Servo, uses parallel algorithms.&lt;br /&gt;
* U2F HID backend: {{bug|1388843}} (shipped in Firefox 57)&lt;br /&gt;
&lt;br /&gt;
=== In progress ===&lt;br /&gt;
&lt;br /&gt;
* URL parser: {{bug|url-oxidation}}&lt;br /&gt;
* WebM demuxer: {{bug|1267492}}&lt;br /&gt;
* WebRender: {{bug|webrender}}&lt;br /&gt;
** &#039;&#039;&#039;Why Rust?&#039;&#039;&#039; Code taken from Servo, has high performance; Rust&#039;s memory and thread safety provides protection against complexity.&lt;br /&gt;
* Audio remoting for Linux: {{bug|1362220}}&lt;br /&gt;
* SDP parsing in WebRTC: {{bug|1365792}} (aiming for Firefox 59)&lt;br /&gt;
* Linebreaking with xi-unicode: {{bug|1290022}}&lt;br /&gt;
* Optimizing WebVM compiler backend: [https://github.com/stoklund/cretonne/ cretonne]&lt;br /&gt;
** &#039;&#039;&#039;Why Rust?&#039;&#039;&#039; Well-separated component with a clear interface.&lt;br /&gt;
* Share [https://github.com/servo/gecko-media media playback stack] with Servo.&lt;br /&gt;
** &#039;&#039;&#039;Why Rust?&#039;&#039;&#039; We&#039;re not rewriting this in Rust because the current code is well-tested and performant. The plan is to first port the C++ module from Firefox into Servo.&lt;br /&gt;
** Once the module is shared, work can begin on smoothing the interface and migrating piecemeal.&lt;br /&gt;
&lt;br /&gt;
=== Proposed ===&lt;br /&gt;
&lt;br /&gt;
* Parallel layout&lt;br /&gt;
** Code from Servo.&lt;br /&gt;
* Replace the XML parser&lt;br /&gt;
** &#039;&#039;&#039;Why Rust?&#039;&#039;&#039; Parses untrusted input, replaces expat, a 3rd-party library with a history of security vulnerabilities.&lt;br /&gt;
* WebMIDI: {{bug|1201593}}, {{bug|1201596}}, {{bug|1201598}}&lt;br /&gt;
* Gamepad code: {{bug|1286699}}&lt;br /&gt;
* Replace the telemetry module(?)&lt;br /&gt;
** &#039;&#039;&#039;Why Rust?&#039;&#039;&#039; The existing C++ code has a history of threading problems.&lt;br /&gt;
* Replace DOM serializers (XML, HTML for Save As.., plain text)&lt;br /&gt;
* Image decoders?&lt;br /&gt;
** &#039;&#039;&#039;Why Rust?&#039;&#039;&#039; Parsing untrusted input, some history of security vulnerabilities.&lt;br /&gt;
&lt;br /&gt;
== Outside Firefox ==&lt;br /&gt;
&lt;br /&gt;
=== Completed ===&lt;br /&gt;
&lt;br /&gt;
* GeckoDriver, a WebDriver implementation for Firefox integrated via marionette protocol: {{bug|1340637}} ([https://github.com/mozilla/geckodriver/releases standalone releases])&lt;br /&gt;
* [https://github.com/mozilla/sccache/ sccache], compiler cache with s3 storage. Caching C++ and Rust compilation, used in Firefox CI&lt;br /&gt;
* [https://github.com/luser/rust-makecab makecab], reimplementation of Microsoft&#039;s makecab tool. Used to compress PDB files before uploading to symbol server in Firefox CI.&lt;br /&gt;
&lt;br /&gt;
= Blockers and obstacles =&lt;br /&gt;
&lt;br /&gt;
This section lists areas where Rust integration could be improved.&lt;br /&gt;
&lt;br /&gt;
* Tracking bug: Make the developer experience for Firefox + Rust great: {{Bug|rust-great}}&lt;br /&gt;
* Bindings/interop&lt;br /&gt;
** No IPDL binding generator&lt;br /&gt;
** No WebIDL binding generator for DOM components (Servo must have something here?)&lt;br /&gt;
** No XPIDL binding generator ({{bug|1293362}})&lt;br /&gt;
** Immature rust-bindgen and cheddar/cbindgen tools for general cross-language support.&lt;br /&gt;
* Compile speed&lt;br /&gt;
** Incremental compilation ([https://github.com/rust-lang/rust/labels/A-incr-comp A-incr-comp issues], [https://github.com/rust-lang/rust/labels/WG-compiler-incr WG-compiler-incr issues])&lt;br /&gt;
** [https://github.com/rust-lang/rust/pull/44841 ThinLTO]&lt;br /&gt;
** [https://users.rust-lang.org/t/contract-opportunity-mozilla-distributed-compilation-cache-written-in-rust/13898 Distributed compilation cache]&lt;br /&gt;
** [https://github.com/rust-lang/cargo/issues/1997 Artifact caching]?&lt;br /&gt;
* Management (landing, merging, etc.) of Shared Gecko/Servo components&lt;br /&gt;
* Remaining minor crash report issues {{bug|1348896}}&lt;br /&gt;
* Debugging: improve gdb and lldb support for Rust. The first step is to establish Rust language support in DWARF distinct from the existing C++ support.&lt;br /&gt;
* IDE/symbol lookup support?&lt;br /&gt;
* Code coverage?&lt;br /&gt;
* Profiling improvements? Especially for parallel code&lt;br /&gt;
* Test integration?&lt;br /&gt;
&lt;br /&gt;
= Meetings =&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/servo/servo/wiki/Mozlando-Oxidation Mozlando, Dec 2015]&lt;br /&gt;
* [https://github.com/servo/servo/wiki/Oxidation-2015-11-05 Oxidation, Nov 2015]&lt;br /&gt;
* [https://github.com/servo/servo/wiki/Whistler-GFX#servo-in-gecko Whistler, June 2015]&lt;br /&gt;
* [https://github.com/servo/servo/wiki/Mozlandia-Rust-In-Gecko Mozlandia, Dec 2014]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
= People =&lt;br /&gt;
&lt;br /&gt;
* Ralph Giles: build system, integration&lt;br /&gt;
* Tom Tromey: debugging&lt;br /&gt;
* Boris Zbarsky: Stylo, Gecko&lt;br /&gt;
* Nathan Froyd: build system, integration, Cargo&lt;br /&gt;
* Ted Mielczarek: build system, crash reporting, releng&lt;br /&gt;
* Emilio Cobos Álvarez: Stylo&lt;br /&gt;
* Manish Goregaokar: Stylo, Rust internals&lt;br /&gt;
* Kartikaya Gupta: gfx, WebRender&lt;br /&gt;
* Bobby Holley: Stylo, Gecko&lt;br /&gt;
* Nicholas Nethercote: coordination&lt;br /&gt;
* Anthony Jones: coordination&lt;br /&gt;
* Selena Deckelmann: coordination&lt;br /&gt;
* Nick Fitzgerald: bindgen&lt;br /&gt;
* Nika Layzell: bindings&lt;br /&gt;
* Alex Crichton: rustc, Cargo&lt;br /&gt;
* Michael Woerister: rustc&lt;br /&gt;
* Mike Hommey: build system, allocator, Linux distros&lt;br /&gt;
--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rillian</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Rust_Update_Policy_for_Firefox&amp;diff=1182511</id>
		<title>Rust Update Policy for Firefox</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Rust_Update_Policy_for_Firefox&amp;diff=1182511"/>
		<updated>2017-10-18T23:26:33Z</updated>

		<summary type="html">&lt;p&gt;Rillian: /* Schedule */ Link bug 1396884 for why 1.20 adoption was delayed&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Firefox [[Oxidation|depends on code]] written in the [https://www.rust-lang.org/ Rust programming language].&lt;br /&gt;
&lt;br /&gt;
We document here the decision making and planning around when we update the Rust toolchains used and required to build Firefox.&lt;br /&gt;
&lt;br /&gt;
This allows contributors to know when new features will be usable, and&lt;br /&gt;
downstream packagers to know what toolchain will be required for each&lt;br /&gt;
Firefox release. Both benefit from the predictability of a schedule.&lt;br /&gt;
&lt;br /&gt;
== Schedule ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Release Firefox requirements:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Firefox Version !! Requires !! Rust release date !! Firefox release date&lt;br /&gt;
|-&lt;br /&gt;
| Firefox 56 || Rust 1.17.0 || 2017 April 27 || 2017 September 26&lt;br /&gt;
|-&lt;br /&gt;
| Firefox 57 || Rust 1.19.0 || 2017 July 20 || 2017 November 14&lt;br /&gt;
|-&lt;br /&gt;
| Firefox 58 || Rust 1.21.0 || 2017 October 12 ||2018 January 16&lt;br /&gt;
|-&lt;br /&gt;
| Firefox 59 || Rust 1.22.0 || 2017 November 23 || 2018 March 6&lt;br /&gt;
|-&lt;br /&gt;
| Firefox 60 || Rust 1.23.0 || 2018 February 15 || 2018 May 1&lt;br /&gt;
|-&lt;br /&gt;
| Firefox 61 || Rust 1.25.0 || 2018 March 29 || 2018 June 26&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;New feature adoption schedule:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Mozilla-central can use !! Starting on (Rust release + 2 weeks)&lt;br /&gt;
|- &lt;br /&gt;
| Rust 1.19.0 || 2017 August 3&lt;br /&gt;
|-&lt;br /&gt;
| Rust 1.20.0 || 2017 October 17 ([https://bugzilla.mozilla.org/show_bug.cgi?id=1396884 was] September 14)&lt;br /&gt;
|-&lt;br /&gt;
| Rust 1.21.0 || 2017 October 26&lt;br /&gt;
|-&lt;br /&gt;
| Rust 1.22.0 || 2017 December 7&lt;br /&gt;
|-&lt;br /&gt;
| Rust 1.23.0 || 2018 January 18&lt;br /&gt;
|-&lt;br /&gt;
| Rust 1.24.0 || 2018 March 6&lt;br /&gt;
|-&lt;br /&gt;
| Rust 1.25.0 || 2018 April 12&lt;br /&gt;
|-&lt;br /&gt;
| Rust 1.26.0 || 2018 May 24&lt;br /&gt;
|-&lt;br /&gt;
| Rust 1.27.0 || 2018 July 5&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Policy ==&lt;br /&gt;
&lt;br /&gt;
=== Official builds ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;We ship official stable Firefox with stable Rust.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Typically we build Firefox Nightly with the current stable Rust and let&lt;br /&gt;
that configuration ride through beta to release. There have been frequent&lt;br /&gt;
exceptions where we&#039;ve adopted a beta Rust during the Nightly phase to&lt;br /&gt;
address some platform support issue, and later updated when that Rust&lt;br /&gt;
version became stable. For example, we needed to use beta Rust for our&lt;br /&gt;
own builds when we first added Rust support to Firefox for Android.&lt;br /&gt;
&lt;br /&gt;
The policy provides good stability guarantees once Firefox is in&lt;br /&gt;
release, while giving us the freedom to respond to the issues experience&lt;br /&gt;
shows we&#039;ll need to address during development.&lt;br /&gt;
&lt;br /&gt;
=== Developer builds ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Local developer builds use whatever Rust toolchain is available on the system.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Someone building Firefox can maintain the latest stable Rust with the&lt;br /&gt;
`rustup` for `mach bootstrap` tools, or try other variations.&lt;br /&gt;
&lt;br /&gt;
=== Required versions ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;We require a new stable Rust starting 2 weeks after it is released.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This policy effectively removes the difference between the required&lt;br /&gt;
Rust version and the default target for official builds, while still&lt;br /&gt;
giving tier-3 developers some time to process toolchain updates.&lt;br /&gt;
&lt;br /&gt;
Downstream packagers still have 2-3 months to package each stable&lt;br /&gt;
Rust release before it’s required by a new Firefox release.&lt;br /&gt;
&lt;br /&gt;
The stable+two weeks requirement is a rough target. We expect to hit&lt;br /&gt;
it within a few days for most Rust releases. But, for example, when the&lt;br /&gt;
target date falls within a mozilla-central soft freeze (before branching&lt;br /&gt;
for a beta release) we may update a week later.&lt;br /&gt;
&lt;br /&gt;
We expect esr releases will stay on the same minimum Rust version,&lt;br /&gt;
so backporting security fixes may require Rust compatibility work too.&lt;br /&gt;
&lt;br /&gt;
=== Rationale ===&lt;br /&gt;
&lt;br /&gt;
We need to be fast and efficient across the whole system which includes&lt;br /&gt;
the Rust, Servo, and Firefox development teams. We realise that the&lt;br /&gt;
decisions we make have an impact downstream, and we want to minimise the&lt;br /&gt;
negative aspects of that impact. However, we cannot do so at the expense&lt;br /&gt;
of our own productivity.&lt;br /&gt;
&lt;br /&gt;
There are many other stakeholders, of course, but our work in Gecko and&lt;br /&gt;
Servo are major drivers for Rust language, compiler, and library&lt;br /&gt;
development. That influence is more effective if we can iterate quickly.&lt;br /&gt;
Servo itself often uses experimental language features to give the&lt;br /&gt;
necessary early feedback on features as they evolve. &lt;br /&gt;
&lt;br /&gt;
Rust updates every six weeks, just like Firefox. This is more like web&lt;br /&gt;
languages than native languages, but it&#039;s been great for building&lt;br /&gt;
community. We (as Gecko developers) should embrace it.&lt;br /&gt;
&lt;br /&gt;
Many of us think of the toolchain and source code as being conceptually&lt;br /&gt;
different. At this point in time, Rust is evolving much more quickly&lt;br /&gt;
than Python or C++. For now it is easier to think of Rust as being part&lt;br /&gt;
of Firefox, rather than thinking of it like a C++ toolchain with decades&lt;br /&gt;
of history which we we have little influence on.&lt;br /&gt;
&lt;br /&gt;
Official build configurations are generally part of the Firefox&lt;br /&gt;
code itself, subject to normal review, and don&#039;t affect anyone else.&lt;br /&gt;
Therefore it&#039;s straightforward to manage the Rust toolchain we use&lt;br /&gt;
directly like any other change.&lt;br /&gt;
&lt;br /&gt;
For contributors, we maintain a minimum supported Rust toolchain&lt;br /&gt;
This helps those working on tier-3 platforms, where updating Rust can be&lt;br /&gt;
more difficult than just running `rustup update`, by giving them time to adapt.&lt;br /&gt;
However, it means other contributors must backport newer work to&lt;br /&gt;
maintain compatibility. As more Rust code was merged into Firefox this&lt;br /&gt;
became expensive.&lt;br /&gt;
&lt;br /&gt;
Historically we bumped this minimum every 3-4 Rust releases, which also&lt;br /&gt;
helped contributors on slow network connections since they didn&#039;t have&lt;br /&gt;
to download toolchains as often. Deciding to bump this way involved&lt;br /&gt;
negotiating each change, which by late 2017 many contributors felt was a&lt;br /&gt;
more significant burden. Delaying to give tier-3 platforms months instead of&lt;br /&gt;
weeks to update their Rust packages is also not considered a good&lt;br /&gt;
trade-off.&lt;br /&gt;
&lt;br /&gt;
My experience is that it takes about a week for version bumps to start&lt;br /&gt;
pulling in dependent crates using new language features, so updating&lt;br /&gt;
after a couple of weeks acts as only a moderate restraint on Servo&lt;br /&gt;
developers working on Gecko modules.&lt;br /&gt;
I think this is the correct trade-off between those two groups.&lt;br /&gt;
&lt;br /&gt;
==== Alternate Proposals ====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;We require nightly Rust&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This would certainly speed up the feedback with language design.&lt;br /&gt;
However, we would frequently encounter build breakage when unstable&lt;br /&gt;
language features change. Even Servo pins to a specific nightly to avoid&lt;br /&gt;
this problem. That’s appropriate for a smaller research project, but not&lt;br /&gt;
something the size of Firefox.&lt;br /&gt;
&lt;br /&gt;
We should and do test building Firefox with nightly Rust to catch&lt;br /&gt;
compiler issues, but that’s different from requiring everyone to use&lt;br /&gt;
unstable Rust.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;We require beta Rust&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
I don’t think anyone has suggested this, but I thought I’d include&lt;br /&gt;
it for completeness. This shortens the feedback cycle for new features&lt;br /&gt;
at the expense of more churn for contributors. It’s not a good trade-off&lt;br /&gt;
because by the time a new feature is stabilized in beta Rust, it’s too&lt;br /&gt;
late to change it much. This is better served by particular developers&lt;br /&gt;
working with upstream directly. I believe beta is also something of an&lt;br /&gt;
“excluded middle” in the Rust ecosystem, with most contributors working&lt;br /&gt;
with either stable or unstable nightly Rust.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;We require the previous stable Rust once a new stable Rust is released.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
That is, we bump the Firefox minimum to Rust 1.n.m when rust 1.(n+1).0&lt;br /&gt;
stable is released. This is roughly every 6 weeks, with six weeks to&lt;br /&gt;
update before bumping into the new requirement.  This policy might be&lt;br /&gt;
simpler for contributors to remember. There&#039;s not much difference in the&lt;br /&gt;
amount of time downstream packager receive for a particular Firefox&lt;br /&gt;
release. This is a trade-off of more time for tier-3 developers against&lt;br /&gt;
people working on Gecko/Servo components doing extra work to maintain&lt;br /&gt;
compatibility. As I say above, I think this is the wrong choice.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;We bump the minimum Rust version only when new features are compelling.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This reduces churn for developers, but the need to negotiate each bump&lt;br /&gt;
takes time better spent on development. See the motivation section&lt;br /&gt;
above.&lt;/div&gt;</summary>
		<author><name>Rillian</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Rust_Update_Policy_for_Firefox&amp;diff=1182509</id>
		<title>Rust Update Policy for Firefox</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Rust_Update_Policy_for_Firefox&amp;diff=1182509"/>
		<updated>2017-10-18T23:23:14Z</updated>

		<summary type="html">&lt;p&gt;Rillian: /* Schedule */ Expand abbreviation&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Firefox [[Oxidation|depends on code]] written in the [https://www.rust-lang.org/ Rust programming language].&lt;br /&gt;
&lt;br /&gt;
We document here the decision making and planning around when we update the Rust toolchains used and required to build Firefox.&lt;br /&gt;
&lt;br /&gt;
This allows contributors to know when new features will be usable, and&lt;br /&gt;
downstream packagers to know what toolchain will be required for each&lt;br /&gt;
Firefox release. Both benefit from the predictability of a schedule.&lt;br /&gt;
&lt;br /&gt;
== Schedule ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Release Firefox requirements:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Firefox Version !! Requires !! Rust release date !! Firefox release date&lt;br /&gt;
|-&lt;br /&gt;
| Firefox 56 || Rust 1.17.0 || 2017 April 27 || 2017 September 26&lt;br /&gt;
|-&lt;br /&gt;
| Firefox 57 || Rust 1.19.0 || 2017 July 20 || 2017 November 14&lt;br /&gt;
|-&lt;br /&gt;
| Firefox 58 || Rust 1.21.0 || 2017 October 12 ||2018 January 16&lt;br /&gt;
|-&lt;br /&gt;
| Firefox 59 || Rust 1.22.0 || 2017 November 23 || 2018 March 6&lt;br /&gt;
|-&lt;br /&gt;
| Firefox 60 || Rust 1.23.0 || 2018 February 15 || 2018 May 1&lt;br /&gt;
|-&lt;br /&gt;
| Firefox 61 || Rust 1.25.0 || 2018 March 29 || 2018 June 26&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;New feature adoption schedule:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Mozilla-central can use !! Starting on (Rust release + 2 weeks)&lt;br /&gt;
|- &lt;br /&gt;
| Rust 1.19.0 || 2017 August 3&lt;br /&gt;
|-&lt;br /&gt;
| Rust 1.20.0 || 2017 October 17 (was September 14)&lt;br /&gt;
|-&lt;br /&gt;
| Rust 1.21.0 || 2017 October 26&lt;br /&gt;
|-&lt;br /&gt;
| Rust 1.22.0 || 2017 December 7&lt;br /&gt;
|-&lt;br /&gt;
| Rust 1.23.0 || 2018 January 18&lt;br /&gt;
|-&lt;br /&gt;
| Rust 1.24.0 || 2018 March 6&lt;br /&gt;
|-&lt;br /&gt;
| Rust 1.25.0 || 2018 April 12&lt;br /&gt;
|-&lt;br /&gt;
| Rust 1.26.0 || 2018 May 24&lt;br /&gt;
|-&lt;br /&gt;
| Rust 1.27.0 || 2018 July 5&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Policy ==&lt;br /&gt;
&lt;br /&gt;
=== Official builds ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;We ship official stable Firefox with stable Rust.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Typically we build Firefox Nightly with the current stable Rust and let&lt;br /&gt;
that configuration ride through beta to release. There have been frequent&lt;br /&gt;
exceptions where we&#039;ve adopted a beta Rust during the Nightly phase to&lt;br /&gt;
address some platform support issue, and later updated when that Rust&lt;br /&gt;
version became stable. For example, we needed to use beta Rust for our&lt;br /&gt;
own builds when we first added Rust support to Firefox for Android.&lt;br /&gt;
&lt;br /&gt;
The policy provides good stability guarantees once Firefox is in&lt;br /&gt;
release, while giving us the freedom to respond to the issues experience&lt;br /&gt;
shows we&#039;ll need to address during development.&lt;br /&gt;
&lt;br /&gt;
=== Developer builds ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Local developer builds use whatever Rust toolchain is available on the system.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Someone building Firefox can maintain the latest stable Rust with the&lt;br /&gt;
`rustup` for `mach bootstrap` tools, or try other variations.&lt;br /&gt;
&lt;br /&gt;
=== Required versions ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;We require a new stable Rust starting 2 weeks after it is released.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This policy effectively removes the difference between the required&lt;br /&gt;
Rust version and the default target for official builds, while still&lt;br /&gt;
giving tier-3 developers some time to process toolchain updates.&lt;br /&gt;
&lt;br /&gt;
Downstream packagers still have 2-3 months to package each stable&lt;br /&gt;
Rust release before it’s required by a new Firefox release.&lt;br /&gt;
&lt;br /&gt;
The stable+two weeks requirement is a rough target. We expect to hit&lt;br /&gt;
it within a few days for most Rust releases. But, for example, when the&lt;br /&gt;
target date falls within a mozilla-central soft freeze (before branching&lt;br /&gt;
for a beta release) we may update a week later.&lt;br /&gt;
&lt;br /&gt;
We expect esr releases will stay on the same minimum Rust version,&lt;br /&gt;
so backporting security fixes may require Rust compatibility work too.&lt;br /&gt;
&lt;br /&gt;
=== Rationale ===&lt;br /&gt;
&lt;br /&gt;
We need to be fast and efficient across the whole system which includes&lt;br /&gt;
the Rust, Servo, and Firefox development teams. We realise that the&lt;br /&gt;
decisions we make have an impact downstream, and we want to minimise the&lt;br /&gt;
negative aspects of that impact. However, we cannot do so at the expense&lt;br /&gt;
of our own productivity.&lt;br /&gt;
&lt;br /&gt;
There are many other stakeholders, of course, but our work in Gecko and&lt;br /&gt;
Servo are major drivers for Rust language, compiler, and library&lt;br /&gt;
development. That influence is more effective if we can iterate quickly.&lt;br /&gt;
Servo itself often uses experimental language features to give the&lt;br /&gt;
necessary early feedback on features as they evolve. &lt;br /&gt;
&lt;br /&gt;
Rust updates every six weeks, just like Firefox. This is more like web&lt;br /&gt;
languages than native languages, but it&#039;s been great for building&lt;br /&gt;
community. We (as Gecko developers) should embrace it.&lt;br /&gt;
&lt;br /&gt;
Many of us think of the toolchain and source code as being conceptually&lt;br /&gt;
different. At this point in time, Rust is evolving much more quickly&lt;br /&gt;
than Python or C++. For now it is easier to think of Rust as being part&lt;br /&gt;
of Firefox, rather than thinking of it like a C++ toolchain with decades&lt;br /&gt;
of history which we we have little influence on.&lt;br /&gt;
&lt;br /&gt;
Official build configurations are generally part of the Firefox&lt;br /&gt;
code itself, subject to normal review, and don&#039;t affect anyone else.&lt;br /&gt;
Therefore it&#039;s straightforward to manage the Rust toolchain we use&lt;br /&gt;
directly like any other change.&lt;br /&gt;
&lt;br /&gt;
For contributors, we maintain a minimum supported Rust toolchain&lt;br /&gt;
This helps those working on tier-3 platforms, where updating Rust can be&lt;br /&gt;
more difficult than just running `rustup update`, by giving them time to adapt.&lt;br /&gt;
However, it means other contributors must backport newer work to&lt;br /&gt;
maintain compatibility. As more Rust code was merged into Firefox this&lt;br /&gt;
became expensive.&lt;br /&gt;
&lt;br /&gt;
Historically we bumped this minimum every 3-4 Rust releases, which also&lt;br /&gt;
helped contributors on slow network connections since they didn&#039;t have&lt;br /&gt;
to download toolchains as often. Deciding to bump this way involved&lt;br /&gt;
negotiating each change, which by late 2017 many contributors felt was a&lt;br /&gt;
more significant burden. Delaying to give tier-3 platforms months instead of&lt;br /&gt;
weeks to update their Rust packages is also not considered a good&lt;br /&gt;
trade-off.&lt;br /&gt;
&lt;br /&gt;
My experience is that it takes about a week for version bumps to start&lt;br /&gt;
pulling in dependent crates using new language features, so updating&lt;br /&gt;
after a couple of weeks acts as only a moderate restraint on Servo&lt;br /&gt;
developers working on Gecko modules.&lt;br /&gt;
I think this is the correct trade-off between those two groups.&lt;br /&gt;
&lt;br /&gt;
==== Alternate Proposals ====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;We require nightly Rust&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This would certainly speed up the feedback with language design.&lt;br /&gt;
However, we would frequently encounter build breakage when unstable&lt;br /&gt;
language features change. Even Servo pins to a specific nightly to avoid&lt;br /&gt;
this problem. That’s appropriate for a smaller research project, but not&lt;br /&gt;
something the size of Firefox.&lt;br /&gt;
&lt;br /&gt;
We should and do test building Firefox with nightly Rust to catch&lt;br /&gt;
compiler issues, but that’s different from requiring everyone to use&lt;br /&gt;
unstable Rust.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;We require beta Rust&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
I don’t think anyone has suggested this, but I thought I’d include&lt;br /&gt;
it for completeness. This shortens the feedback cycle for new features&lt;br /&gt;
at the expense of more churn for contributors. It’s not a good trade-off&lt;br /&gt;
because by the time a new feature is stabilized in beta Rust, it’s too&lt;br /&gt;
late to change it much. This is better served by particular developers&lt;br /&gt;
working with upstream directly. I believe beta is also something of an&lt;br /&gt;
“excluded middle” in the Rust ecosystem, with most contributors working&lt;br /&gt;
with either stable or unstable nightly Rust.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;We require the previous stable Rust once a new stable Rust is released.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
That is, we bump the Firefox minimum to Rust 1.n.m when rust 1.(n+1).0&lt;br /&gt;
stable is released. This is roughly every 6 weeks, with six weeks to&lt;br /&gt;
update before bumping into the new requirement.  This policy might be&lt;br /&gt;
simpler for contributors to remember. There&#039;s not much difference in the&lt;br /&gt;
amount of time downstream packager receive for a particular Firefox&lt;br /&gt;
release. This is a trade-off of more time for tier-3 developers against&lt;br /&gt;
people working on Gecko/Servo components doing extra work to maintain&lt;br /&gt;
compatibility. As I say above, I think this is the wrong choice.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;We bump the minimum Rust version only when new features are compelling.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This reduces churn for developers, but the need to negotiate each bump&lt;br /&gt;
takes time better spent on development. See the motivation section&lt;br /&gt;
above.&lt;/div&gt;</summary>
		<author><name>Rillian</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Rust_Update_Policy_for_Firefox&amp;diff=1182508</id>
		<title>Rust Update Policy for Firefox</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Rust_Update_Policy_for_Firefox&amp;diff=1182508"/>
		<updated>2017-10-18T23:22:15Z</updated>

		<summary type="html">&lt;p&gt;Rillian: Move more motivation out of the Introduction&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Firefox [[Oxidation|depends on code]] written in the [https://www.rust-lang.org/ Rust programming language].&lt;br /&gt;
&lt;br /&gt;
We document here the decision making and planning around when we update the Rust toolchains used and required to build Firefox.&lt;br /&gt;
&lt;br /&gt;
This allows contributors to know when new features will be usable, and&lt;br /&gt;
downstream packagers to know what toolchain will be required for each&lt;br /&gt;
Firefox release. Both benefit from the predictability of a schedule.&lt;br /&gt;
&lt;br /&gt;
== Schedule ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Release Firefox requirements:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Firefox Version !! Requires !! Rust release date !! Firefox release date&lt;br /&gt;
|-&lt;br /&gt;
| Firefox 56 || Rust 1.17.0 || 2017 April 27 || 2017 September 26&lt;br /&gt;
|-&lt;br /&gt;
| Firefox 57 || Rust 1.19.0 || 2017 July 20 || 2017 November 14&lt;br /&gt;
|-&lt;br /&gt;
| Firefox 58 || Rust 1.21.0 || 2017 October 12 ||2018 January 16&lt;br /&gt;
|-&lt;br /&gt;
| Firefox 59 || Rust 1.22.0 || 2017 November 23 || 2018 March 6&lt;br /&gt;
|-&lt;br /&gt;
| Firefox 60 || Rust 1.23.0 || 2018 Feb 15 || 2018 May 1&lt;br /&gt;
|-&lt;br /&gt;
| Firefox 61 || Rust 1.25.0 || 2018 March 29 || 2018 June 26&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;New feature adoption schedule:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Mozilla-central can use !! Starting on (Rust release + 2 weeks)&lt;br /&gt;
|- &lt;br /&gt;
| Rust 1.19.0 || 2017 August 3&lt;br /&gt;
|-&lt;br /&gt;
| Rust 1.20.0 || 2017 October 17 (was September 14)&lt;br /&gt;
|-&lt;br /&gt;
| Rust 1.21.0 || 2017 October 26&lt;br /&gt;
|-&lt;br /&gt;
| Rust 1.22.0 || 2017 December 7&lt;br /&gt;
|-&lt;br /&gt;
| Rust 1.23.0 || 2018 January 18&lt;br /&gt;
|-&lt;br /&gt;
| Rust 1.24.0 || 2018 March 6&lt;br /&gt;
|-&lt;br /&gt;
| Rust 1.25.0 || 2018 April 12&lt;br /&gt;
|-&lt;br /&gt;
| Rust 1.26.0 || 2018 May 24&lt;br /&gt;
|-&lt;br /&gt;
| Rust 1.27.0 || 2018 July 5&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Policy ==&lt;br /&gt;
&lt;br /&gt;
=== Official builds ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;We ship official stable Firefox with stable Rust.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Typically we build Firefox Nightly with the current stable Rust and let&lt;br /&gt;
that configuration ride through beta to release. There have been frequent&lt;br /&gt;
exceptions where we&#039;ve adopted a beta Rust during the Nightly phase to&lt;br /&gt;
address some platform support issue, and later updated when that Rust&lt;br /&gt;
version became stable. For example, we needed to use beta Rust for our&lt;br /&gt;
own builds when we first added Rust support to Firefox for Android.&lt;br /&gt;
&lt;br /&gt;
The policy provides good stability guarantees once Firefox is in&lt;br /&gt;
release, while giving us the freedom to respond to the issues experience&lt;br /&gt;
shows we&#039;ll need to address during development.&lt;br /&gt;
&lt;br /&gt;
=== Developer builds ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Local developer builds use whatever Rust toolchain is available on the system.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Someone building Firefox can maintain the latest stable Rust with the&lt;br /&gt;
`rustup` for `mach bootstrap` tools, or try other variations.&lt;br /&gt;
&lt;br /&gt;
=== Required versions ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;We require a new stable Rust starting 2 weeks after it is released.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This policy effectively removes the difference between the required&lt;br /&gt;
Rust version and the default target for official builds, while still&lt;br /&gt;
giving tier-3 developers some time to process toolchain updates.&lt;br /&gt;
&lt;br /&gt;
Downstream packagers still have 2-3 months to package each stable&lt;br /&gt;
Rust release before it’s required by a new Firefox release.&lt;br /&gt;
&lt;br /&gt;
The stable+two weeks requirement is a rough target. We expect to hit&lt;br /&gt;
it within a few days for most Rust releases. But, for example, when the&lt;br /&gt;
target date falls within a mozilla-central soft freeze (before branching&lt;br /&gt;
for a beta release) we may update a week later.&lt;br /&gt;
&lt;br /&gt;
We expect esr releases will stay on the same minimum Rust version,&lt;br /&gt;
so backporting security fixes may require Rust compatibility work too.&lt;br /&gt;
&lt;br /&gt;
=== Rationale ===&lt;br /&gt;
&lt;br /&gt;
We need to be fast and efficient across the whole system which includes&lt;br /&gt;
the Rust, Servo, and Firefox development teams. We realise that the&lt;br /&gt;
decisions we make have an impact downstream, and we want to minimise the&lt;br /&gt;
negative aspects of that impact. However, we cannot do so at the expense&lt;br /&gt;
of our own productivity.&lt;br /&gt;
&lt;br /&gt;
There are many other stakeholders, of course, but our work in Gecko and&lt;br /&gt;
Servo are major drivers for Rust language, compiler, and library&lt;br /&gt;
development. That influence is more effective if we can iterate quickly.&lt;br /&gt;
Servo itself often uses experimental language features to give the&lt;br /&gt;
necessary early feedback on features as they evolve. &lt;br /&gt;
&lt;br /&gt;
Rust updates every six weeks, just like Firefox. This is more like web&lt;br /&gt;
languages than native languages, but it&#039;s been great for building&lt;br /&gt;
community. We (as Gecko developers) should embrace it.&lt;br /&gt;
&lt;br /&gt;
Many of us think of the toolchain and source code as being conceptually&lt;br /&gt;
different. At this point in time, Rust is evolving much more quickly&lt;br /&gt;
than Python or C++. For now it is easier to think of Rust as being part&lt;br /&gt;
of Firefox, rather than thinking of it like a C++ toolchain with decades&lt;br /&gt;
of history which we we have little influence on.&lt;br /&gt;
&lt;br /&gt;
Official build configurations are generally part of the Firefox&lt;br /&gt;
code itself, subject to normal review, and don&#039;t affect anyone else.&lt;br /&gt;
Therefore it&#039;s straightforward to manage the Rust toolchain we use&lt;br /&gt;
directly like any other change.&lt;br /&gt;
&lt;br /&gt;
For contributors, we maintain a minimum supported Rust toolchain&lt;br /&gt;
This helps those working on tier-3 platforms, where updating Rust can be&lt;br /&gt;
more difficult than just running `rustup update`, by giving them time to adapt.&lt;br /&gt;
However, it means other contributors must backport newer work to&lt;br /&gt;
maintain compatibility. As more Rust code was merged into Firefox this&lt;br /&gt;
became expensive.&lt;br /&gt;
&lt;br /&gt;
Historically we bumped this minimum every 3-4 Rust releases, which also&lt;br /&gt;
helped contributors on slow network connections since they didn&#039;t have&lt;br /&gt;
to download toolchains as often. Deciding to bump this way involved&lt;br /&gt;
negotiating each change, which by late 2017 many contributors felt was a&lt;br /&gt;
more significant burden. Delaying to give tier-3 platforms months instead of&lt;br /&gt;
weeks to update their Rust packages is also not considered a good&lt;br /&gt;
trade-off.&lt;br /&gt;
&lt;br /&gt;
My experience is that it takes about a week for version bumps to start&lt;br /&gt;
pulling in dependent crates using new language features, so updating&lt;br /&gt;
after a couple of weeks acts as only a moderate restraint on Servo&lt;br /&gt;
developers working on Gecko modules.&lt;br /&gt;
I think this is the correct trade-off between those two groups.&lt;br /&gt;
&lt;br /&gt;
==== Alternate Proposals ====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;We require nightly Rust&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This would certainly speed up the feedback with language design.&lt;br /&gt;
However, we would frequently encounter build breakage when unstable&lt;br /&gt;
language features change. Even Servo pins to a specific nightly to avoid&lt;br /&gt;
this problem. That’s appropriate for a smaller research project, but not&lt;br /&gt;
something the size of Firefox.&lt;br /&gt;
&lt;br /&gt;
We should and do test building Firefox with nightly Rust to catch&lt;br /&gt;
compiler issues, but that’s different from requiring everyone to use&lt;br /&gt;
unstable Rust.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;We require beta Rust&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
I don’t think anyone has suggested this, but I thought I’d include&lt;br /&gt;
it for completeness. This shortens the feedback cycle for new features&lt;br /&gt;
at the expense of more churn for contributors. It’s not a good trade-off&lt;br /&gt;
because by the time a new feature is stabilized in beta Rust, it’s too&lt;br /&gt;
late to change it much. This is better served by particular developers&lt;br /&gt;
working with upstream directly. I believe beta is also something of an&lt;br /&gt;
“excluded middle” in the Rust ecosystem, with most contributors working&lt;br /&gt;
with either stable or unstable nightly Rust.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;We require the previous stable Rust once a new stable Rust is released.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
That is, we bump the Firefox minimum to Rust 1.n.m when rust 1.(n+1).0&lt;br /&gt;
stable is released. This is roughly every 6 weeks, with six weeks to&lt;br /&gt;
update before bumping into the new requirement.  This policy might be&lt;br /&gt;
simpler for contributors to remember. There&#039;s not much difference in the&lt;br /&gt;
amount of time downstream packager receive for a particular Firefox&lt;br /&gt;
release. This is a trade-off of more time for tier-3 developers against&lt;br /&gt;
people working on Gecko/Servo components doing extra work to maintain&lt;br /&gt;
compatibility. As I say above, I think this is the wrong choice.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;We bump the minimum Rust version only when new features are compelling.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This reduces churn for developers, but the need to negotiate each bump&lt;br /&gt;
takes time better spent on development. See the motivation section&lt;br /&gt;
above.&lt;/div&gt;</summary>
		<author><name>Rillian</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Rust_Update_Policy_for_Firefox&amp;diff=1182505</id>
		<title>Rust Update Policy for Firefox</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Rust_Update_Policy_for_Firefox&amp;diff=1182505"/>
		<updated>2017-10-18T23:11:31Z</updated>

		<summary type="html">&lt;p&gt;Rillian: Mark proposed schedule as adopted and improve layout&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Firefox [[Oxidation|depends on code]] written in the [https://www.rust-lang.org/ Rust programming language].&lt;br /&gt;
Rust toolchain dependency changes have been made on an ad-hoc basis. We&lt;br /&gt;
want to clarify the decision making and planning around this. We are&lt;br /&gt;
therefore defining a policy for when we update the Rust toolchains used&lt;br /&gt;
and required to build Firefox.&lt;br /&gt;
&lt;br /&gt;
This allows contributors to know when new features will be usable, and&lt;br /&gt;
downstream packagers to know what toolchain will be required for each&lt;br /&gt;
Firefox release. Both benefit from the predictability of a schedule.&lt;br /&gt;
&lt;br /&gt;
We need to be fast and efficient across the whole system which includes&lt;br /&gt;
the Rust, Servo, and Firefox development teams. We realise that the&lt;br /&gt;
decisions we make have an impact downstream, and we want to minimise the&lt;br /&gt;
negative aspects of that impact. However, we cannot do so at the expense&lt;br /&gt;
of our own productivity.&lt;br /&gt;
&lt;br /&gt;
Many of us think of the toolchain and source code as being conceptually&lt;br /&gt;
different. At this point in time, Rust is evolving much more quickly&lt;br /&gt;
than Python or C++. For now it is easier to think of Rust as being part&lt;br /&gt;
of Firefox, rather than thinking of it like a C++ toolchain with decades&lt;br /&gt;
of history which we we have little influence on.&lt;br /&gt;
&lt;br /&gt;
There are many other stakeholders, of course, but our work in Gecko and&lt;br /&gt;
Servo are major drivers for Rust language, compiler, and library&lt;br /&gt;
development. That influence is more effective if we can iterate quickly.&lt;br /&gt;
Servo itself often uses experimental language features to give the&lt;br /&gt;
necessary early feedback on features as they evolve. &lt;br /&gt;
&lt;br /&gt;
Rust updates every six weeks, just like Firefox. This is more like web&lt;br /&gt;
languages than native languages, but it&#039;s been great for building&lt;br /&gt;
community. We (as Gecko developers) should embrace it.&lt;br /&gt;
&lt;br /&gt;
== Schedule ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Release Firefox requirements:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Firefox Version !! Requires !! Rust release date !! Firefox release date&lt;br /&gt;
|-&lt;br /&gt;
| Firefox 56 || Rust 1.17.0 || 2017 April 27 || 2017 September 26&lt;br /&gt;
|-&lt;br /&gt;
| Firefox 57 || Rust 1.19.0 || 2017 July 20 || 2017 November 14&lt;br /&gt;
|-&lt;br /&gt;
| Firefox 58 || Rust 1.21.0 || 2017 October 12 ||2018 January 16&lt;br /&gt;
|-&lt;br /&gt;
| Firefox 59 || Rust 1.22.0 || 2017 November 23 || 2018 March 6&lt;br /&gt;
|-&lt;br /&gt;
| Firefox 60 || Rust 1.23.0 || 2018 Feb 15 || 2018 May 1&lt;br /&gt;
|-&lt;br /&gt;
| Firefox 61 || Rust 1.25.0 || 2018 March 29 || 2018 June 26&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;New feature adoption schedule:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Mozilla-central can use !! Starting on (Rust release + 2 weeks)&lt;br /&gt;
|- &lt;br /&gt;
| Rust 1.19.0 || 2017 August 3&lt;br /&gt;
|-&lt;br /&gt;
| Rust 1.20.0 || 2017 October 17 (was September 14)&lt;br /&gt;
|-&lt;br /&gt;
| Rust 1.21.0 || 2017 October 26&lt;br /&gt;
|-&lt;br /&gt;
| Rust 1.22.0 || 2017 December 7&lt;br /&gt;
|-&lt;br /&gt;
| Rust 1.23.0 || 2018 January 18&lt;br /&gt;
|-&lt;br /&gt;
| Rust 1.24.0 || 2018 March 6&lt;br /&gt;
|-&lt;br /&gt;
| Rust 1.25.0 || 2018 April 12&lt;br /&gt;
|-&lt;br /&gt;
| Rust 1.26.0 || 2018 May 24&lt;br /&gt;
|-&lt;br /&gt;
| Rust 1.27.0 || 2018 July 5&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Policy ==&lt;br /&gt;
&lt;br /&gt;
=== Official builds ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;We ship official stable Firefox with stable Rust.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
So far we&#039;ve had no problem meeting this requirement. Typically we build&lt;br /&gt;
Firefox Nightly with the current stable Rust and let that configuration&lt;br /&gt;
ride through beta to release. There have been frequent exceptions where&lt;br /&gt;
we&#039;ve adopted a beta Rust during the Nightly phase to address some&lt;br /&gt;
platform support issue, and later updated when that Rust version became&lt;br /&gt;
stable. For example, we needed to use beta Rust for our own builds when&lt;br /&gt;
we first added Rust support to Firefox for Android.&lt;br /&gt;
&lt;br /&gt;
The policy provides good stability guarantees once Firefox is in&lt;br /&gt;
release, while giving us the freedom to respond to the issues experience&lt;br /&gt;
shows we&#039;ll need to address during development.&lt;br /&gt;
&lt;br /&gt;
=== Developer builds ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Local developer builds use whatever Rust toolchain is available on the system.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Someone building Firefox can maintain the latest stable Rust with the&lt;br /&gt;
`rustup` for `mach bootstrap` tools, or try other variations.&lt;br /&gt;
&lt;br /&gt;
=== Required versions ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;We require a new stable Rust starting 2 weeks after it is released.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This policy effectively removes the difference between the required&lt;br /&gt;
Rust version and the default target for official builds, while still&lt;br /&gt;
giving tier-3 developers some time to process toolchain updates.&lt;br /&gt;
&lt;br /&gt;
Downstream packagers still have 2-3 months to package each stable&lt;br /&gt;
Rust release before it’s required by a new Firefox release.&lt;br /&gt;
&lt;br /&gt;
The stable+two weeks requirement is a rough target. We expect to hit&lt;br /&gt;
it within a few days for most Rust releases. But, for example, when the&lt;br /&gt;
target date falls within a mozilla-central soft freeze (before branching&lt;br /&gt;
for a beta release) we may update a week later.&lt;br /&gt;
&lt;br /&gt;
We expect esr releases will stay on the same minimum Rust version,&lt;br /&gt;
so backporting security fixes may require Rust compatibility work too.&lt;br /&gt;
&lt;br /&gt;
=== Rationale ===&lt;br /&gt;
&lt;br /&gt;
Official build configurations are generally part of the Firefox&lt;br /&gt;
code itself, subject to normal review, and don&#039;t affect anyone else.&lt;br /&gt;
Therefore it&#039;s straightforward to manage the Rust toolchain we use&lt;br /&gt;
directly like any other change.&lt;br /&gt;
&lt;br /&gt;
For contributors, we maintain a minimum supported Rust toolchain&lt;br /&gt;
This helps those working on tier-3 platforms, where updating Rust can be&lt;br /&gt;
more difficult than just running `rustup update`, by giving them time to adapt.&lt;br /&gt;
However, it means other contributors must backport newer work to&lt;br /&gt;
maintain compatibility. As more Rust code was merged into Firefox this&lt;br /&gt;
became expensive.&lt;br /&gt;
&lt;br /&gt;
Historically we bumped this minimum every 3-4 Rust releases, which also&lt;br /&gt;
helped contributors on slow network connections since they didn&#039;t have&lt;br /&gt;
to download toolchains as often. Deciding to bump this way involved&lt;br /&gt;
negotiating each change, which by late 2017 many contributors felt was a&lt;br /&gt;
more significant burden. Delaying to give tier-3 platforms months instead of&lt;br /&gt;
weeks to update their Rust packages is also not considered a good&lt;br /&gt;
trade-off.&lt;br /&gt;
&lt;br /&gt;
My experience is that it takes about a week for version bumps to start&lt;br /&gt;
pulling in dependent crates using new language features, so updating&lt;br /&gt;
after a couple of weeks acts as only a moderate restraint on Servo&lt;br /&gt;
developers working on Gecko modules.&lt;br /&gt;
I think this is the correct trade-off between those two groups.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Alternate Proposals ====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;We require nightly Rust&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This would certainly speed up the feedback with language design.&lt;br /&gt;
However, we would frequently encounter build breakage when unstable&lt;br /&gt;
language features change. Even Servo pins to a specific nightly to avoid&lt;br /&gt;
this problem. That’s appropriate for a smaller research project, but not&lt;br /&gt;
something the size of Firefox.&lt;br /&gt;
&lt;br /&gt;
We should and do test building Firefox with nightly Rust to catch&lt;br /&gt;
compiler issues, but that’s different from requiring everyone to use&lt;br /&gt;
unstable Rust.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;We require beta Rust&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
I don’t think anyone has suggested this, but I thought I’d include&lt;br /&gt;
it for completeness. This shortens the feedback cycle for new features&lt;br /&gt;
at the expense of more churn for contributors. It’s not a good trade-off&lt;br /&gt;
because by the time a new feature is stabilized in beta Rust, it’s too&lt;br /&gt;
late to change it much. This is better served by particular developers&lt;br /&gt;
working with upstream directly. I believe beta is also something of an&lt;br /&gt;
“excluded middle” in the Rust ecosystem, with most contributors working&lt;br /&gt;
with either stable or unstable nightly Rust.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;We require the previous stable Rust once a new stable Rust is released.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
That is, we bump the Firefox minimum to Rust 1.n.m when rust 1.(n+1).0&lt;br /&gt;
stable is released. This is roughly every 6 weeks, with six weeks to&lt;br /&gt;
update before bumping into the new requirement.  This policy might be&lt;br /&gt;
simpler for contributors to remember. There&#039;s not much difference in the&lt;br /&gt;
amount of time downstream packager receive for a particular Firefox&lt;br /&gt;
release. This is a trade-off of more time for tier-3 developers against&lt;br /&gt;
people working on Gecko/Servo components doing extra work to maintain&lt;br /&gt;
compatibility. As I say above, I think this is the wrong choice.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;We bump the minimum Rust version only when new features are compelling.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This reduces churn for developers, but the need to negotiate each bump&lt;br /&gt;
takes time better spent on development. See the motivation section&lt;br /&gt;
above.&lt;/div&gt;</summary>
		<author><name>Rillian</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Rust_Update_Policy_for_Firefox&amp;diff=1182504</id>
		<title>Rust Update Policy for Firefox</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Rust_Update_Policy_for_Firefox&amp;diff=1182504"/>
		<updated>2017-10-18T22:58:00Z</updated>

		<summary type="html">&lt;p&gt;Rillian: /* Proposed policy update */ Document Firefox 57 slipping to Rust 1.19.0&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Firefox [[Oxidation|depends on code]] written in the [https://www.rust-lang.org/ Rust programming language].&lt;br /&gt;
Rust toolchain dependency changes have been made on an ad-hoc basis. We&lt;br /&gt;
want to clarify the decision making and planning around this. We are&lt;br /&gt;
therefore defining a policy for when we update the Rust toolchains used&lt;br /&gt;
and required to build Firefox.&lt;br /&gt;
&lt;br /&gt;
This allows contributors to know when new features will be usable, and&lt;br /&gt;
downstream packagers to know what toolchain will be required for each&lt;br /&gt;
Firefox release. Both benefit from the predictability of a schedule.&lt;br /&gt;
&lt;br /&gt;
We need to be fast and efficient across the whole system which includes&lt;br /&gt;
the Rust, Servo, and Firefox development teams. We realise that the&lt;br /&gt;
decisions we make have an impact downstream, and we want to minimise the&lt;br /&gt;
negative aspects of that impact. However, we cannot do so at the expense&lt;br /&gt;
of our own productivity.&lt;br /&gt;
&lt;br /&gt;
Many of us think of the toolchain and source code as being conceptually&lt;br /&gt;
different. At this point in time, Rust is evolving much more quickly&lt;br /&gt;
than Python or C++. For now it is easier to think of Rust as being part&lt;br /&gt;
of Firefox, rather than thinking of it like a C++ toolchain with decades&lt;br /&gt;
of history which we we have little influence on.&lt;br /&gt;
&lt;br /&gt;
There are many other stakeholders, of course, but our work in Gecko and&lt;br /&gt;
Servo are major drivers for Rust language, compiler, and library&lt;br /&gt;
development. That influence is more effective if we can iterate quickly.&lt;br /&gt;
Servo itself often uses experimental language features to give the&lt;br /&gt;
necessary early feedback on features as they evolve. &lt;br /&gt;
&lt;br /&gt;
Rust updates every six weeks, just like Firefox. This is more like web&lt;br /&gt;
languages than native languages, but it&#039;s been great for building&lt;br /&gt;
community. We (as Gecko developers) should embrace it.&lt;br /&gt;
&lt;br /&gt;
== Current policy ==&lt;br /&gt;
&lt;br /&gt;
=== Official builds ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;We ship official stable Firefox with stable Rust.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
So far we&#039;ve had no problem meeting this requirement. Typically we build&lt;br /&gt;
Firefox Nightly with the current stable Rust and let that configuration&lt;br /&gt;
ride through beta to release. There have been frequent exceptions where&lt;br /&gt;
we&#039;ve adopted a beta Rust during the Nightly phase to address some&lt;br /&gt;
platform support issue, and later updated when that Rust version became&lt;br /&gt;
stable. For example, we needed to use beta Rust for our own builds when&lt;br /&gt;
we first added Rust support to Firefox for Android.&lt;br /&gt;
&lt;br /&gt;
The policy provides good stability guarantees once Firefox is in&lt;br /&gt;
release, while giving us the freedom to respond to the issues experience&lt;br /&gt;
shows we&#039;ll need to address during development.&lt;br /&gt;
&lt;br /&gt;
=== Developer builds ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Local developer builds use whatever Rust toolchain is available on the system.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Someone building Firefox can maintain the latest stable Rust with the&lt;br /&gt;
`rustup` for `mach bootstrap` tools, or try other variations.&lt;br /&gt;
&lt;br /&gt;
We do not currently follow a strict policy for when to increase the&lt;br /&gt;
minimum Rust version required by a specific Firefox version. In the&lt;br /&gt;
absence of a policy, we have incremented the minimum Rust version&lt;br /&gt;
whenever someone wanted to use a new feature, or a library required it.&lt;br /&gt;
So far, it hasn’t been necessary to require developers use unstable&lt;br /&gt;
Rust.&lt;br /&gt;
&lt;br /&gt;
==== The need to clarify our developer policy ====&lt;br /&gt;
&lt;br /&gt;
For contributors, we also maintain a minimum supported Rust toolchain&lt;br /&gt;
This helps those working on tier-3 platforms, where updating Rust can be&lt;br /&gt;
more difficult than just running `rustup update`, by giving them time to adapt.&lt;br /&gt;
However, it means other contributors must backport newer work to&lt;br /&gt;
maintain compatibility. As more Rust code is merged into Firefox this&lt;br /&gt;
has become more expensive.&lt;br /&gt;
&lt;br /&gt;
Historically we&#039;ve bumped this minimum every 3-4 Rust releases, which&lt;br /&gt;
helped contributors on slow network connections since they didn&#039;t have&lt;br /&gt;
to download toolchains as often. Deciding to bump this way involved&lt;br /&gt;
negotiating each change, which many contributors felt was a more&lt;br /&gt;
significant burden. Delaying to give tier-3 platforms months instead of&lt;br /&gt;
weeks to update their Rust packages is also not considered a good&lt;br /&gt;
trade-off.&lt;br /&gt;
&lt;br /&gt;
The lack of a clear update policy creates unnecessary tension between&lt;br /&gt;
upstream Servo developers, Firefox developers and downstream community.&lt;br /&gt;
&lt;br /&gt;
== Proposed policy update ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;We require a new stable Rust starting 2 weeks after it is released.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This proposal effectively removes the difference between the required&lt;br /&gt;
Rust version and the default target for official builds, while still&lt;br /&gt;
giving tier-3 developers some time to process toolchain updates.&lt;br /&gt;
&lt;br /&gt;
Downstream packagers will still have 2-3 months to package each stable&lt;br /&gt;
Rust release before it’s required by a new Firefox release.&lt;br /&gt;
&lt;br /&gt;
The stable+two weeks requirement is a rough target. We expect to hit&lt;br /&gt;
it within a few days for most Rust releases. But, for example, when the&lt;br /&gt;
target date falls within a mozilla-central soft freeze (before branching&lt;br /&gt;
for a beta release) we may update a week later.&lt;br /&gt;
&lt;br /&gt;
We expect esr releases will stay on the same minimum Rust version,&lt;br /&gt;
so backporting security fixes may require Rust compatibility work too.&lt;br /&gt;
&lt;br /&gt;
My experience is that it takes about a week for version bumps to start&lt;br /&gt;
pulling in dependent crates using new language features, so this will&lt;br /&gt;
act as only a moderate restraint on Servo developers working on Gecko&lt;br /&gt;
modules. I think this is the correct trade-off between those two groups.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Release Firefox requirements under this proposal:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Firefox Version !! Requires !! Rust release date !! Firefox release date&lt;br /&gt;
|-&lt;br /&gt;
| Firefox 56 || Rust 1.17.0 || 2017 April 27 || 2017 September 26&lt;br /&gt;
|-&lt;br /&gt;
| Firefox 57 || Rust 1.19.0 || 2017 July 20 || 2017 November 14&lt;br /&gt;
|-&lt;br /&gt;
| Firefox 58 || Rust 1.21.0 || 2017 October 12 ||2018 January 16&lt;br /&gt;
|-&lt;br /&gt;
| Firefox 59 || Rust 1.22.0 || 2017 November 23 || 2018 March 6&lt;br /&gt;
|-&lt;br /&gt;
| Firefox 60 || Rust 1.23.0 || 2018 Feb 15 || 2018 May 1&lt;br /&gt;
|-&lt;br /&gt;
| Firefox 61 || Rust 1.25.0 || 2018 March 29 || 2018 June 26&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;New feature adoption schedule under this proposal:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Mozilla-central can use !! Starting on (Rust release + 2 weeks)&lt;br /&gt;
|- &lt;br /&gt;
| Rust 1.19.0 || 2017 August 3&lt;br /&gt;
|-&lt;br /&gt;
| Rust 1.20.0 || 2017 October 17 (was September 14)&lt;br /&gt;
|-&lt;br /&gt;
| Rust 1.21.0 || 2017 October 26&lt;br /&gt;
|-&lt;br /&gt;
| Rust 1.22.0 || 2017 December 7&lt;br /&gt;
|-&lt;br /&gt;
| Rust 1.23.0 || 2018 January 18&lt;br /&gt;
|-&lt;br /&gt;
| Rust 1.24.0 || 2018 March 6&lt;br /&gt;
|-&lt;br /&gt;
| Rust 1.25.0 || 2018 April 12&lt;br /&gt;
|-&lt;br /&gt;
| Rust 1.26.0 || 2018 May 24&lt;br /&gt;
|-&lt;br /&gt;
| Rust 1.27.0 || 2018 July 5&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Alternate Proposals ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;We require nightly Rust&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This would certainly speed up the feedback with language design.&lt;br /&gt;
However, we would frequently encounter build breakage when unstable&lt;br /&gt;
language features change. Even Servo pins to a specific nightly to avoid&lt;br /&gt;
this problem. That’s appropriate for a smaller research project, but not&lt;br /&gt;
something the size of Firefox.&lt;br /&gt;
&lt;br /&gt;
We should and do test building Firefox with nightly Rust to catch&lt;br /&gt;
compiler issues, but that’s different from requiring everyone to use&lt;br /&gt;
unstable Rust.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;We require beta Rust&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
I don’t think anyone has suggested this to me, but I thought I’d include&lt;br /&gt;
it for completeness. This shortens the feedback cycle for new features&lt;br /&gt;
at the expense of more churn for contributors. It’s not a good trade-off&lt;br /&gt;
because by the time a new feature is stabilized in beta Rust, it’s too&lt;br /&gt;
late to change it much. This is better served by particular developers&lt;br /&gt;
working with upstream directly. I believe beta is also something of an&lt;br /&gt;
“excluded middle” in the Rust ecosystem, with most contributors working&lt;br /&gt;
with either stable or unstable nightly Rust.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;We require the previous stable Rust once a new stable Rust is released.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
That is, we bump the Firefox minimum to Rust 1.n.m when rust 1.(n+1).0&lt;br /&gt;
stable is released. This is roughly every 6 weeks, with six weeks to&lt;br /&gt;
update before bumping into the new requirement.  This policy might be&lt;br /&gt;
simpler for contributors to remember. There&#039;s not much difference in the&lt;br /&gt;
amount of time downstream packager receive for a particular Firefox&lt;br /&gt;
release. This is a trade-off of more time for tier-3 developers against&lt;br /&gt;
people working on Gecko/Servo components doing extra work to maintain&lt;br /&gt;
compatibility. As I say above, I think this is the wrong choice.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;We bump the minimum Rust version only when new features are compelling.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This reduces churn for developers, but the need to negotiate each bump&lt;br /&gt;
takes time better spent on development. See the motivation section&lt;br /&gt;
above.&lt;/div&gt;</summary>
		<author><name>Rillian</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Oxidation&amp;diff=1177011</id>
		<title>Oxidation</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Oxidation&amp;diff=1177011"/>
		<updated>2017-08-01T00:35:34Z</updated>

		<summary type="html">&lt;p&gt;Rillian: /* Supported Rust versions for Firefox builds */ Delay 1.24.0 requirement to Firefox 61&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Oxidation&#039;&#039;&#039; is a project to integrate [https://www.rust-lang.org/ Rust] code into Gecko and Firefox. &lt;br /&gt;
&lt;br /&gt;
Rust has been required on all platforms since Firefox 54, and we are actively adding new code modules written in Rust to Firefox and related programs.&lt;br /&gt;
&lt;br /&gt;
= Documentation =&lt;br /&gt;
&lt;br /&gt;
* [https://developer.mozilla.org/en-US/Firefox/Building_Firefox_with_Rust_code Developer Documentation]&lt;br /&gt;
* [https://gecko.readthedocs.io/en/latest/build/buildsystem/rust.html Build System Documentation]&lt;br /&gt;
&lt;br /&gt;
= Supported Rust versions for Firefox builds =&lt;br /&gt;
&lt;br /&gt;
Below are [[Rust Update Policy for Firefox|our expectations]] if everything goes smoothly; we may need newer toolchains to address specific issues. Our ultimate policy is just that release Firefox will not require unstable or beta Rust to build.&lt;br /&gt;
&lt;br /&gt;
* Firefox 56 (released 2017 September 26) requires Rust 1.17.0 or later.&lt;br /&gt;
** Official builds will use Rust 1.19.0.&lt;br /&gt;
* Firefox 57 (released 2017 November 14) requires Rust 1.20.0.&lt;br /&gt;
** Mozilla-central can start using Rust 1.19.0 language features 2017 August 3.&lt;br /&gt;
** Mozilla-central can start using Rust 1.20.0 features 2017 September 14.&lt;br /&gt;
* Firefox 58 (released 2018 January 16) requires Rust 1.21.0.&lt;br /&gt;
** Mozilla-central can use Rust 1.21.0 language features 2017 October 26.&lt;br /&gt;
* Firefox 59 (released 2017 March 6) requires Rust 1.22.0.&lt;br /&gt;
** Mozilla-central can use Rust 1.22.0 features 2017 December 7.&lt;br /&gt;
** Firefox 59 ESR is expected to continue to work with Rust 1.22 throughout its support lifetime.&lt;br /&gt;
* Firefox 60 (released 2017 May 1) requires Rust 1.23.0.&lt;br /&gt;
** Mozilla-central can use Rust 1.23.0 features 2018 January 18.&lt;br /&gt;
* Firefox 61 (released 2017 June 26) requires Rust 1.25.0.&lt;br /&gt;
** Mozilla-central can use Rust 1.24.0 features 2018 March 6.&lt;br /&gt;
** Mozilla-central can use Rust 1.25.0 features 2018 April 12.&lt;br /&gt;
&lt;br /&gt;
= Rust components in Firefox =&lt;br /&gt;
&lt;br /&gt;
Completed&lt;br /&gt;
* MP4 metadata parser: {{bug|1161350}} (shipped for desktop in Firefox 48)&lt;br /&gt;
* Replace uconv with encoding-rs: {{bug|1261841}} (shipping in Firefox 56)&lt;br /&gt;
In progress&lt;br /&gt;
* URL parser: {{bug|url-oxidation}}&lt;br /&gt;
* CSS style calculation (from Servo): {{bug|stylo}}&lt;br /&gt;
* WebM demuxer: {{bug|1267492}}&lt;br /&gt;
* WebRender (from Servo): {{bug|webrender}}&lt;br /&gt;
* Audio remoting for Linux: {{bug|1362220}}&lt;br /&gt;
* SDP parsing in WebRTC: {{bug|1365792}}&lt;br /&gt;
* Linebreaking with xi-unicode: {{bug|1290022}}&lt;br /&gt;
Proposed&lt;br /&gt;
* Replace the XML parser&lt;br /&gt;
* Replace the preferences module: {{bug|1379383}}&lt;br /&gt;
* WebMIDI: {{bug|1201593}}, {{bug|1201596}}, {{bug|1201598}}&lt;br /&gt;
* Gamepad code: {{bug|1286699}}&lt;br /&gt;
* Replace the telemetry module(?)&lt;br /&gt;
* Share media playback stack with Servo(?)&lt;br /&gt;
* Replace DOM serializers (XML, HTML for Save As.., plain text)&lt;br /&gt;
&lt;br /&gt;
= Rust components outside Firefox =&lt;br /&gt;
&lt;br /&gt;
Completed&lt;br /&gt;
* GeckoDriver - WebDriver implementation for Firefox integrated via marionette protocol ({{bug|1340637}}) released as a standalone binary ([https://github.com/mozilla/geckodriver/releases releases])&lt;br /&gt;
&lt;br /&gt;
= Blockers and obstacles =&lt;br /&gt;
== Raw Rust code (lives in m-c) blockers ==&lt;br /&gt;
&lt;br /&gt;
* {{done|}} Top-level metabug: {{bug|oxidation}}&lt;br /&gt;
* {{done|}} Android support: {{bug|1220307}}&lt;br /&gt;
** Though Android still not a Tier-1 Rust platform: https://forge.rust-lang.org/platform-support.html&lt;br /&gt;
* Linux distro support for Rust: [https://internals.rust-lang.org/t/perfecting-rust-packaging/2623]&lt;br /&gt;
* {{done|}} Need to improve call stacks: {{bug|1268328 }}&lt;br /&gt;
&lt;br /&gt;
== Cargo / GitHub blockers ==&lt;br /&gt;
&lt;br /&gt;
* {{done|}} Tracking bug {{bug|1231764}}&lt;br /&gt;
* Improve working with vendored Cargo crates [https://github.com/rust-lang/cargo/issues/1926] [https://github.com/rust-lang/cargo/issues/2212]&lt;br /&gt;
&lt;br /&gt;
== Rust / Cargo nice-to-haves ==&lt;br /&gt;
&lt;br /&gt;
* Tracking bug: Make the developer experience for Firefox + Rust great: {{Bug|rust-great}}&lt;br /&gt;
* {{done|}} Per-crate integer overflow checking [https://github.com/rust-lang/cargo/issues/2262]&lt;br /&gt;
* Artifact caching [https://github.com/rust-lang/cargo/issues/1997]&lt;br /&gt;
&lt;br /&gt;
== Things blocking new components from being written in Rust ==&lt;br /&gt;
&lt;br /&gt;
* Lack of Mozilla-wide Rust training for engineers&lt;br /&gt;
* Lack of IPC/IPDL integration (e.g. generated Rust bindings)&lt;br /&gt;
* Lack of a WebIDL binding generator for dom components (servo must have something here?)&lt;br /&gt;
* Immature rust-bindgen and cheddar/cbindgen tools for general cross-language support.&lt;br /&gt;
* Slow compile times&lt;br /&gt;
&lt;br /&gt;
= Meetings =&lt;br /&gt;
&lt;br /&gt;
* Mozlando [https://github.com/servo/servo/wiki/Mozlando-Oxidation]&lt;br /&gt;
* Oxidation Nov. 2015 [https://github.com/servo/servo/wiki/Oxidation-2015-11-05]&lt;br /&gt;
* Mozlandia [https://github.com/servo/servo/wiki/Mozlandia-Rust-In-Gecko]&lt;br /&gt;
* Whistler [https://github.com/servo/servo/wiki/Whistler-GFX#servo-in-gecko]&lt;/div&gt;</summary>
		<author><name>Rillian</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Rust_Update_Policy_for_Firefox&amp;diff=1177010</id>
		<title>Rust Update Policy for Firefox</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Rust_Update_Policy_for_Firefox&amp;diff=1177010"/>
		<updated>2017-08-01T00:29:45Z</updated>

		<summary type="html">&lt;p&gt;Rillian: /* Proposed policy update */ Delay the update to Rust 1.23.x until after Firefox 60 goes to beta&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Firefox [[Oxidation|depends on code]] written in the [https://www.rust-lang.org/ Rust programming language].&lt;br /&gt;
Rust toolchain dependency changes have been made on an ad-hoc basis. We&lt;br /&gt;
want to clarify the decision making and planning around this. We are&lt;br /&gt;
therefore defining a policy for when we update the Rust toolchains used&lt;br /&gt;
and required to build Firefox.&lt;br /&gt;
&lt;br /&gt;
This allows contributors to know when new features will be usable, and&lt;br /&gt;
downstream packagers to know what toolchain will be required for each&lt;br /&gt;
Firefox release. Both benefit from the predictability of a schedule.&lt;br /&gt;
&lt;br /&gt;
We need to be fast and efficient across the whole system which includes&lt;br /&gt;
the Rust, Servo, and Firefox development teams. We realise that the&lt;br /&gt;
decisions we make have an impact downstream, and we want to minimise the&lt;br /&gt;
negative aspects of that impact. However, we cannot do so at the expense&lt;br /&gt;
of our own productivity.&lt;br /&gt;
&lt;br /&gt;
Many of us think of the toolchain and source code as being conceptually&lt;br /&gt;
different. At this point in time, Rust is evolving much more quickly&lt;br /&gt;
than Python or C++. For now it is easier to think of Rust as being part&lt;br /&gt;
of Firefox, rather than thinking of it like a C++ toolchain with decades&lt;br /&gt;
of history which we we have little influence on.&lt;br /&gt;
&lt;br /&gt;
There are many other stakeholders, of course, but our work in Gecko and&lt;br /&gt;
Servo are major drivers for Rust language, compiler, and library&lt;br /&gt;
development. That influence is more effective if we can iterate quickly.&lt;br /&gt;
Servo itself often uses experimental language features to give the&lt;br /&gt;
necessary early feedback on features as they evolve. &lt;br /&gt;
&lt;br /&gt;
Rust updates every six weeks, just like Firefox. This is more like web&lt;br /&gt;
languages than native languages, but it&#039;s been great for building&lt;br /&gt;
community. We (as Gecko developers) should embrace it.&lt;br /&gt;
&lt;br /&gt;
== Current policy ==&lt;br /&gt;
&lt;br /&gt;
=== Official builds ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;We ship official stable Firefox with stable Rust.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
So far we&#039;ve had no problem meeting this requirement. Typically we build&lt;br /&gt;
Firefox Nightly with the current stable Rust and let that configuration&lt;br /&gt;
ride through beta to release. There have been frequent exceptions where&lt;br /&gt;
we&#039;ve adopted a beta Rust during the Nightly phase to address some&lt;br /&gt;
platform support issue, and later updated when that Rust version became&lt;br /&gt;
stable. For example, we needed to use beta Rust for our own builds when&lt;br /&gt;
we first added Rust support to Firefox for Android.&lt;br /&gt;
&lt;br /&gt;
The policy provides good stability guarantees once Firefox is in&lt;br /&gt;
release, while giving us the freedom to respond to the issues experience&lt;br /&gt;
shows we&#039;ll need to address during development.&lt;br /&gt;
&lt;br /&gt;
=== Developer builds ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Local developer builds use whatever Rust toolchain is available on the system.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Someone building Firefox can maintain the latest stable Rust with the&lt;br /&gt;
`rustup` for `mach bootstrap` tools, or try other variations.&lt;br /&gt;
&lt;br /&gt;
We do not currently follow a strict policy for when to increase the&lt;br /&gt;
minimum Rust version required by a specific Firefox version. In the&lt;br /&gt;
absence of a policy, we have incremented the minimum Rust version&lt;br /&gt;
whenever someone wanted to use a new feature, or a library required it.&lt;br /&gt;
So far, it hasn’t been necessary to require developers use unstable&lt;br /&gt;
Rust.&lt;br /&gt;
&lt;br /&gt;
==== The need to clarify our developer policy ====&lt;br /&gt;
&lt;br /&gt;
For contributors, we also maintain a minimum supported Rust toolchain&lt;br /&gt;
This helps those working on tier-3 platforms, where updating Rust can be&lt;br /&gt;
more difficult than just running `rustup update`, by giving them time to adapt.&lt;br /&gt;
However, it means other contributors must backport newer work to&lt;br /&gt;
maintain compatibility. As more Rust code is merged into Firefox this&lt;br /&gt;
has become more expensive.&lt;br /&gt;
&lt;br /&gt;
Historically we&#039;ve bumped this minimum every 3-4 Rust releases, which&lt;br /&gt;
helped contributors on slow network connections since they didn&#039;t have&lt;br /&gt;
to download toolchains as often. Deciding to bump this way involved&lt;br /&gt;
negotiating each change, which many contributors felt was a more&lt;br /&gt;
significant burden. Delaying to give tier-3 platforms months instead of&lt;br /&gt;
weeks to update their Rust packages is also not considered a good&lt;br /&gt;
trade-off.&lt;br /&gt;
&lt;br /&gt;
The lack of a clear update policy creates unnecessary tension between&lt;br /&gt;
upstream Servo developers, Firefox developers and downstream community.&lt;br /&gt;
&lt;br /&gt;
== Proposed policy update ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;We require a new stable Rust starting 2 weeks after it is released.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This proposal effectively removes the difference between the required&lt;br /&gt;
Rust version and the default target for official builds, while still&lt;br /&gt;
giving tier-3 developers some time to process toolchain updates.&lt;br /&gt;
&lt;br /&gt;
Downstream packagers will still have 2-3 months to package each stable&lt;br /&gt;
Rust release before it’s required by a new Firefox release.&lt;br /&gt;
&lt;br /&gt;
The stable+two weeks requirement is a rough target. We expect to hit&lt;br /&gt;
it within a few days for most Rust releases. But, for example, when the&lt;br /&gt;
target date falls within a mozilla-central soft freeze (before branching&lt;br /&gt;
for a beta release) we may update a week later.&lt;br /&gt;
&lt;br /&gt;
We expect esr releases will stay on the same minimum Rust version,&lt;br /&gt;
so backporting security fixes may require Rust compatibility work too.&lt;br /&gt;
&lt;br /&gt;
My experience is that it takes about a week for version bumps to start&lt;br /&gt;
pulling in dependent crates using new language features, so this will&lt;br /&gt;
act as only a moderate restraint on Servo developers working on Gecko&lt;br /&gt;
modules. I think this is the correct trade-off between those two groups.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Release Firefox requirements under this proposal:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Firefox Version !! Requires !! Rust release date !! Firefox release date&lt;br /&gt;
|-&lt;br /&gt;
| Firefox 56 || Rust 1.17.0 || 2017 April 27 || 2017 September 26&lt;br /&gt;
|-&lt;br /&gt;
| Firefox 57 || Rust 1.20.0 || 2017 August 31 || 2017 November 14&lt;br /&gt;
|-&lt;br /&gt;
| Firefox 58 || Rust 1.21.0 || 2017 October 12 ||2018 January 16&lt;br /&gt;
|-&lt;br /&gt;
| Firefox 59 || Rust 1.22.0 || 2017 November 23 || 2018 March 6&lt;br /&gt;
|-&lt;br /&gt;
| Firefox 60 || Rust 1.23.0 || 2018 Feb 15 || 2018 May 1&lt;br /&gt;
|-&lt;br /&gt;
| Firefox 61 || Rust 1.25.0 || 2018 March 29 || 2018 June 26&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;New feature adoption schedule under this proposal:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Mozilla-central can use !! Starting on (Rust release + 2 weeks)&lt;br /&gt;
|- &lt;br /&gt;
| Rust 1.19.0 || 2017 August 3&lt;br /&gt;
|-&lt;br /&gt;
| Rust 1.20.0 || 2017 September 14&lt;br /&gt;
|-&lt;br /&gt;
| Rust 1.21.0 || 2017 October 26&lt;br /&gt;
|-&lt;br /&gt;
| Rust 1.22.0 || 2017 December 7&lt;br /&gt;
|-&lt;br /&gt;
| Rust 1.23.0 || 2018 January 18&lt;br /&gt;
|-&lt;br /&gt;
| Rust 1.24.0 || 2018 March 6&lt;br /&gt;
|-&lt;br /&gt;
| Rust 1.25.0 || 2018 April 12&lt;br /&gt;
|-&lt;br /&gt;
| Rust 1.26.0 || 2018 May 24&lt;br /&gt;
|-&lt;br /&gt;
| Rust 1.27.0 || 2018 July 5&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Alternate Proposals ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;We require nightly Rust&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This would certainly speed up the feedback with language design.&lt;br /&gt;
However, we would frequently encounter build breakage when unstable&lt;br /&gt;
language features change. Even Servo pins to a specific nightly to avoid&lt;br /&gt;
this problem. That’s appropriate for a smaller research project, but not&lt;br /&gt;
something the size of Firefox.&lt;br /&gt;
&lt;br /&gt;
We should and do test building Firefox with nightly Rust to catch&lt;br /&gt;
compiler issues, but that’s different from requiring everyone to use&lt;br /&gt;
unstable Rust.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;We require beta Rust&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
I don’t think anyone has suggested this to me, but I thought I’d include&lt;br /&gt;
it for completeness. This shortens the feedback cycle for new features&lt;br /&gt;
at the expense of more churn for contributors. It’s not a good trade-off&lt;br /&gt;
because by the time a new feature is stabilized in beta Rust, it’s too&lt;br /&gt;
late to change it much. This is better served by particular developers&lt;br /&gt;
working with upstream directly. I believe beta is also something of an&lt;br /&gt;
“excluded middle” in the Rust ecosystem, with most contributors working&lt;br /&gt;
with either stable or unstable nightly Rust.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;We require the previous stable Rust once a new stable Rust is released.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
That is, we bump the Firefox minimum to Rust 1.n.m when rust 1.(n+1).0&lt;br /&gt;
stable is released. This is roughly every 6 weeks, with six weeks to&lt;br /&gt;
update before bumping into the new requirement.  This policy might be&lt;br /&gt;
simpler for contributors to remember. There&#039;s not much difference in the&lt;br /&gt;
amount of time downstream packager receive for a particular Firefox&lt;br /&gt;
release. This is a trade-off of more time for tier-3 developers against&lt;br /&gt;
people working on Gecko/Servo components doing extra work to maintain&lt;br /&gt;
compatibility. As I say above, I think this is the wrong choice.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;We bump the minimum Rust version only when new features are compelling.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This reduces churn for developers, but the need to negotiate each bump&lt;br /&gt;
takes time better spent on development. See the motivation section&lt;br /&gt;
above.&lt;/div&gt;</summary>
		<author><name>Rillian</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Rust_Update_Policy_for_Firefox&amp;diff=1177009</id>
		<title>Rust Update Policy for Firefox</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Rust_Update_Policy_for_Firefox&amp;diff=1177009"/>
		<updated>2017-08-01T00:27:46Z</updated>

		<summary type="html">&lt;p&gt;Rillian: /* Proposed policy update */ Fix table formatting&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Firefox [[Oxidation|depends on code]] written in the [https://www.rust-lang.org/ Rust programming language].&lt;br /&gt;
Rust toolchain dependency changes have been made on an ad-hoc basis. We&lt;br /&gt;
want to clarify the decision making and planning around this. We are&lt;br /&gt;
therefore defining a policy for when we update the Rust toolchains used&lt;br /&gt;
and required to build Firefox.&lt;br /&gt;
&lt;br /&gt;
This allows contributors to know when new features will be usable, and&lt;br /&gt;
downstream packagers to know what toolchain will be required for each&lt;br /&gt;
Firefox release. Both benefit from the predictability of a schedule.&lt;br /&gt;
&lt;br /&gt;
We need to be fast and efficient across the whole system which includes&lt;br /&gt;
the Rust, Servo, and Firefox development teams. We realise that the&lt;br /&gt;
decisions we make have an impact downstream, and we want to minimise the&lt;br /&gt;
negative aspects of that impact. However, we cannot do so at the expense&lt;br /&gt;
of our own productivity.&lt;br /&gt;
&lt;br /&gt;
Many of us think of the toolchain and source code as being conceptually&lt;br /&gt;
different. At this point in time, Rust is evolving much more quickly&lt;br /&gt;
than Python or C++. For now it is easier to think of Rust as being part&lt;br /&gt;
of Firefox, rather than thinking of it like a C++ toolchain with decades&lt;br /&gt;
of history which we we have little influence on.&lt;br /&gt;
&lt;br /&gt;
There are many other stakeholders, of course, but our work in Gecko and&lt;br /&gt;
Servo are major drivers for Rust language, compiler, and library&lt;br /&gt;
development. That influence is more effective if we can iterate quickly.&lt;br /&gt;
Servo itself often uses experimental language features to give the&lt;br /&gt;
necessary early feedback on features as they evolve. &lt;br /&gt;
&lt;br /&gt;
Rust updates every six weeks, just like Firefox. This is more like web&lt;br /&gt;
languages than native languages, but it&#039;s been great for building&lt;br /&gt;
community. We (as Gecko developers) should embrace it.&lt;br /&gt;
&lt;br /&gt;
== Current policy ==&lt;br /&gt;
&lt;br /&gt;
=== Official builds ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;We ship official stable Firefox with stable Rust.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
So far we&#039;ve had no problem meeting this requirement. Typically we build&lt;br /&gt;
Firefox Nightly with the current stable Rust and let that configuration&lt;br /&gt;
ride through beta to release. There have been frequent exceptions where&lt;br /&gt;
we&#039;ve adopted a beta Rust during the Nightly phase to address some&lt;br /&gt;
platform support issue, and later updated when that Rust version became&lt;br /&gt;
stable. For example, we needed to use beta Rust for our own builds when&lt;br /&gt;
we first added Rust support to Firefox for Android.&lt;br /&gt;
&lt;br /&gt;
The policy provides good stability guarantees once Firefox is in&lt;br /&gt;
release, while giving us the freedom to respond to the issues experience&lt;br /&gt;
shows we&#039;ll need to address during development.&lt;br /&gt;
&lt;br /&gt;
=== Developer builds ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Local developer builds use whatever Rust toolchain is available on the system.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Someone building Firefox can maintain the latest stable Rust with the&lt;br /&gt;
`rustup` for `mach bootstrap` tools, or try other variations.&lt;br /&gt;
&lt;br /&gt;
We do not currently follow a strict policy for when to increase the&lt;br /&gt;
minimum Rust version required by a specific Firefox version. In the&lt;br /&gt;
absence of a policy, we have incremented the minimum Rust version&lt;br /&gt;
whenever someone wanted to use a new feature, or a library required it.&lt;br /&gt;
So far, it hasn’t been necessary to require developers use unstable&lt;br /&gt;
Rust.&lt;br /&gt;
&lt;br /&gt;
==== The need to clarify our developer policy ====&lt;br /&gt;
&lt;br /&gt;
For contributors, we also maintain a minimum supported Rust toolchain&lt;br /&gt;
This helps those working on tier-3 platforms, where updating Rust can be&lt;br /&gt;
more difficult than just running `rustup update`, by giving them time to adapt.&lt;br /&gt;
However, it means other contributors must backport newer work to&lt;br /&gt;
maintain compatibility. As more Rust code is merged into Firefox this&lt;br /&gt;
has become more expensive.&lt;br /&gt;
&lt;br /&gt;
Historically we&#039;ve bumped this minimum every 3-4 Rust releases, which&lt;br /&gt;
helped contributors on slow network connections since they didn&#039;t have&lt;br /&gt;
to download toolchains as often. Deciding to bump this way involved&lt;br /&gt;
negotiating each change, which many contributors felt was a more&lt;br /&gt;
significant burden. Delaying to give tier-3 platforms months instead of&lt;br /&gt;
weeks to update their Rust packages is also not considered a good&lt;br /&gt;
trade-off.&lt;br /&gt;
&lt;br /&gt;
The lack of a clear update policy creates unnecessary tension between&lt;br /&gt;
upstream Servo developers, Firefox developers and downstream community.&lt;br /&gt;
&lt;br /&gt;
== Proposed policy update ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;We require a new stable Rust starting 2 weeks after it is released.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This proposal effectively removes the difference between the required&lt;br /&gt;
Rust version and the default target for official builds, while still&lt;br /&gt;
giving tier-3 developers some time to process toolchain updates.&lt;br /&gt;
&lt;br /&gt;
Downstream packagers will still have 2-3 months to package each stable&lt;br /&gt;
Rust release before it’s required by a new Firefox release.&lt;br /&gt;
&lt;br /&gt;
The stable+two weeks requirement is a rough target. We expect to hit&lt;br /&gt;
it within a few days for most Rust releases. But, for example, when the&lt;br /&gt;
target date falls within a mozilla-central soft freeze (before branching&lt;br /&gt;
for a beta release) we may update a week later.&lt;br /&gt;
&lt;br /&gt;
We expect esr releases will stay on the same minimum Rust version,&lt;br /&gt;
so backporting security fixes may require Rust compatibility work too.&lt;br /&gt;
&lt;br /&gt;
My experience is that it takes about a week for version bumps to start&lt;br /&gt;
pulling in dependent crates using new language features, so this will&lt;br /&gt;
act as only a moderate restraint on Servo developers working on Gecko&lt;br /&gt;
modules. I think this is the correct trade-off between those two groups.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Release Firefox requirements under this proposal:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Firefox Version !! Requires !! Ruse release date !! Firefox release date&lt;br /&gt;
|-&lt;br /&gt;
| Firefox 56 || Rust 1.17.0 || 2017 April 27 || 2017 September 26&lt;br /&gt;
|-&lt;br /&gt;
| Firefox 57 || Rust 1.20.0 || 2017 August 31 || 2017 November 14&lt;br /&gt;
|-&lt;br /&gt;
| Firefox 58 || Rust 1.21.0 || 2017 October 12 ||2018 January 16&lt;br /&gt;
|-&lt;br /&gt;
| Firefox 59 || Rust 1.22.0 || 2017 November 23 || 2018 March 6&lt;br /&gt;
|-&lt;br /&gt;
| Firefox 60 || Rust 1.24.0 || 2018 Feb 15 || 2018 May 1&lt;br /&gt;
|-&lt;br /&gt;
| Firefox 61 || Rust 1.25.0 || 2018 March 29 || 2018 June 26&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;New feature adoption schedule under this proposal:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Mozilla-central can use !! Starting on (Rust release + 2 weeks)&lt;br /&gt;
|- &lt;br /&gt;
| Rust 1.19.0 || 2017 August 3&lt;br /&gt;
|-&lt;br /&gt;
| Rust 1.20.0 || 2017 September 14&lt;br /&gt;
|-&lt;br /&gt;
| Rust 1.21.0 || 2017 October 26&lt;br /&gt;
|-&lt;br /&gt;
| Rust 1.22.0 || 2017 December 7&lt;br /&gt;
|-&lt;br /&gt;
| Rust 1.23.0 || 2018 January 18&lt;br /&gt;
|-&lt;br /&gt;
| Rust 1.24.0 || 2018 March 1&lt;br /&gt;
|-&lt;br /&gt;
| Rust 1.25.0 || 2018 April 12&lt;br /&gt;
|-&lt;br /&gt;
| Rust 1.26.0 || 2018 May 24&lt;br /&gt;
|-&lt;br /&gt;
| Rust 1.27.0 || 2018 July 5&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Alternate Proposals ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;We require nightly Rust&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This would certainly speed up the feedback with language design.&lt;br /&gt;
However, we would frequently encounter build breakage when unstable&lt;br /&gt;
language features change. Even Servo pins to a specific nightly to avoid&lt;br /&gt;
this problem. That’s appropriate for a smaller research project, but not&lt;br /&gt;
something the size of Firefox.&lt;br /&gt;
&lt;br /&gt;
We should and do test building Firefox with nightly Rust to catch&lt;br /&gt;
compiler issues, but that’s different from requiring everyone to use&lt;br /&gt;
unstable Rust.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;We require beta Rust&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
I don’t think anyone has suggested this to me, but I thought I’d include&lt;br /&gt;
it for completeness. This shortens the feedback cycle for new features&lt;br /&gt;
at the expense of more churn for contributors. It’s not a good trade-off&lt;br /&gt;
because by the time a new feature is stabilized in beta Rust, it’s too&lt;br /&gt;
late to change it much. This is better served by particular developers&lt;br /&gt;
working with upstream directly. I believe beta is also something of an&lt;br /&gt;
“excluded middle” in the Rust ecosystem, with most contributors working&lt;br /&gt;
with either stable or unstable nightly Rust.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;We require the previous stable Rust once a new stable Rust is released.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
That is, we bump the Firefox minimum to Rust 1.n.m when rust 1.(n+1).0&lt;br /&gt;
stable is released. This is roughly every 6 weeks, with six weeks to&lt;br /&gt;
update before bumping into the new requirement.  This policy might be&lt;br /&gt;
simpler for contributors to remember. There&#039;s not much difference in the&lt;br /&gt;
amount of time downstream packager receive for a particular Firefox&lt;br /&gt;
release. This is a trade-off of more time for tier-3 developers against&lt;br /&gt;
people working on Gecko/Servo components doing extra work to maintain&lt;br /&gt;
compatibility. As I say above, I think this is the wrong choice.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;We bump the minimum Rust version only when new features are compelling.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This reduces churn for developers, but the need to negotiate each bump&lt;br /&gt;
takes time better spent on development. See the motivation section&lt;br /&gt;
above.&lt;/div&gt;</summary>
		<author><name>Rillian</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Oxidation&amp;diff=1177006</id>
		<title>Oxidation</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Oxidation&amp;diff=1177006"/>
		<updated>2017-07-31T23:06:30Z</updated>

		<summary type="html">&lt;p&gt;Rillian: Update link to the wikified rust update policy&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Oxidation&#039;&#039;&#039; is a project to integrate [https://www.rust-lang.org/ Rust] code into Gecko and Firefox. &lt;br /&gt;
&lt;br /&gt;
Rust has been required on all platforms since Firefox 54, and we are actively adding new code modules written in Rust to Firefox and related programs.&lt;br /&gt;
&lt;br /&gt;
= Documentation =&lt;br /&gt;
&lt;br /&gt;
* [https://developer.mozilla.org/en-US/Firefox/Building_Firefox_with_Rust_code Developer Documentation]&lt;br /&gt;
* [https://gecko.readthedocs.io/en/latest/build/buildsystem/rust.html Build System Documentation]&lt;br /&gt;
&lt;br /&gt;
= Supported Rust versions for Firefox builds =&lt;br /&gt;
&lt;br /&gt;
Below are [[Rust Update Policy for Firefox|our expectations]] if everything goes smoothly; we may need newer toolchains to address specific issues. Our ultimate policy is just that release Firefox will not require unstable or beta Rust to build.&lt;br /&gt;
&lt;br /&gt;
* Firefox 56 (released 2017 September 26) requires Rust 1.17.0 or later.&lt;br /&gt;
** Official builds will use Rust 1.19.0.&lt;br /&gt;
* Firefox 57 (released 2017 November 14) requires Rust 1.20.0.&lt;br /&gt;
** Mozilla-central can start using Rust 1.19.0 language features 2017 August 3.&lt;br /&gt;
** Mozilla-central can start using Rust 1.20.0 features 2017 September 14.&lt;br /&gt;
* Firefox 58 (released 2018 January 16) requires Rust 1.21.0.&lt;br /&gt;
** Mozilla-central can use Rust 1.21.0 language features 2017 October 26.&lt;br /&gt;
* Firefox 59 (released 2017 March 6) requires Rust 1.22.0.&lt;br /&gt;
** Mozilla-central can use Rust 1.22.0 features 2017 December 7.&lt;br /&gt;
** Firefox 59 ESR is expected to continue to work with Rust 1.22 throughout its support lifetime.&lt;br /&gt;
* Firefox 60 (released 2017 May 1) requires Rust 1.24.0.&lt;br /&gt;
** Mozilla-central can use Rust 1.23.0 features 2018 January 18.&lt;br /&gt;
** Mozilla-central can use Rust 1.24.0 features 2018 March 1.&lt;br /&gt;
* Firefox 61 (released 2017 June 26) requires Rust 1.25.0.&lt;br /&gt;
** Mozilla-central can use Rust 1.25.0 features 2018 April 12.&lt;br /&gt;
&lt;br /&gt;
= Rust components in Firefox =&lt;br /&gt;
&lt;br /&gt;
Completed&lt;br /&gt;
* MP4 metadata parser: {{bug|1161350}} (shipped for desktop in Firefox 48)&lt;br /&gt;
* Replace uconv with encoding-rs: {{bug|1261841}} (shipping in Firefox 56)&lt;br /&gt;
In progress&lt;br /&gt;
* URL parser: {{bug|url-oxidation}}&lt;br /&gt;
* CSS style calculation (from Servo): {{bug|stylo}}&lt;br /&gt;
* WebM demuxer: {{bug|1267492}}&lt;br /&gt;
* WebRender (from Servo): {{bug|webrender}}&lt;br /&gt;
* Audio remoting for Linux: {{bug|1362220}}&lt;br /&gt;
* SDP parsing in WebRTC: {{bug|1365792}}&lt;br /&gt;
* Linebreaking with xi-unicode: {{bug|1290022}}&lt;br /&gt;
Proposed&lt;br /&gt;
* Replace the XML parser&lt;br /&gt;
* Replace the preferences module: {{bug|1379383}}&lt;br /&gt;
* WebMIDI: {{bug|1201593}}, {{bug|1201596}}, {{bug|1201598}}&lt;br /&gt;
* Gamepad code: {{bug|1286699}}&lt;br /&gt;
* Replace the telemetry module(?)&lt;br /&gt;
* Share media playback stack with Servo(?)&lt;br /&gt;
* Replace DOM serializers (XML, HTML for Save As.., plain text)&lt;br /&gt;
&lt;br /&gt;
= Rust components outside Firefox =&lt;br /&gt;
&lt;br /&gt;
Completed&lt;br /&gt;
* GeckoDriver - WebDriver implementation for Firefox integrated via marionette protocol ({{bug|1340637}}) released as a standalone binary ([https://github.com/mozilla/geckodriver/releases releases])&lt;br /&gt;
&lt;br /&gt;
= Blockers and obstacles =&lt;br /&gt;
== Raw Rust code (lives in m-c) blockers ==&lt;br /&gt;
&lt;br /&gt;
* {{done|}} Top-level metabug: {{bug|oxidation}}&lt;br /&gt;
* {{done|}} Android support: {{bug|1220307}}&lt;br /&gt;
** Though Android still not a Tier-1 Rust platform: https://forge.rust-lang.org/platform-support.html&lt;br /&gt;
* Linux distro support for Rust: [https://internals.rust-lang.org/t/perfecting-rust-packaging/2623]&lt;br /&gt;
* {{done|}} Need to improve call stacks: {{bug|1268328 }}&lt;br /&gt;
&lt;br /&gt;
== Cargo / GitHub blockers ==&lt;br /&gt;
&lt;br /&gt;
* {{done|}} Tracking bug {{bug|1231764}}&lt;br /&gt;
* Improve working with vendored Cargo crates [https://github.com/rust-lang/cargo/issues/1926] [https://github.com/rust-lang/cargo/issues/2212]&lt;br /&gt;
&lt;br /&gt;
== Rust / Cargo nice-to-haves ==&lt;br /&gt;
&lt;br /&gt;
* Tracking bug: Make the developer experience for Firefox + Rust great: {{Bug|rust-great}}&lt;br /&gt;
* {{done|}} Per-crate integer overflow checking [https://github.com/rust-lang/cargo/issues/2262]&lt;br /&gt;
* Artifact caching [https://github.com/rust-lang/cargo/issues/1997]&lt;br /&gt;
&lt;br /&gt;
== Things blocking new components from being written in Rust ==&lt;br /&gt;
&lt;br /&gt;
* Lack of Mozilla-wide Rust training for engineers&lt;br /&gt;
* Lack of IPC/IPDL integration (e.g. generated Rust bindings)&lt;br /&gt;
* Lack of a WebIDL binding generator for dom components (servo must have something here?)&lt;br /&gt;
* Immature rust-bindgen and cheddar/cbindgen tools for general cross-language support.&lt;br /&gt;
* Slow compile times&lt;br /&gt;
&lt;br /&gt;
= Meetings =&lt;br /&gt;
&lt;br /&gt;
* Mozlando [https://github.com/servo/servo/wiki/Mozlando-Oxidation]&lt;br /&gt;
* Oxidation Nov. 2015 [https://github.com/servo/servo/wiki/Oxidation-2015-11-05]&lt;br /&gt;
* Mozlandia [https://github.com/servo/servo/wiki/Mozlandia-Rust-In-Gecko]&lt;br /&gt;
* Whistler [https://github.com/servo/servo/wiki/Whistler-GFX#servo-in-gecko]&lt;/div&gt;</summary>
		<author><name>Rillian</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Rust_Update_Policy_for_Firefox&amp;diff=1177005</id>
		<title>Rust Update Policy for Firefox</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Rust_Update_Policy_for_Firefox&amp;diff=1177005"/>
		<updated>2017-07-31T23:04:16Z</updated>

		<summary type="html">&lt;p&gt;Rillian: Link to the Oxidation project page and the Rust homepage.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Firefox [[Oxidation|depends on code]] written in the [https://www.rust-lang.org/ Rust programming language].&lt;br /&gt;
Rust toolchain dependency changes have been made on an ad-hoc basis. We&lt;br /&gt;
want to clarify the decision making and planning around this. We are&lt;br /&gt;
therefore defining a policy for when we update the Rust toolchains used&lt;br /&gt;
and required to build Firefox.&lt;br /&gt;
&lt;br /&gt;
This allows contributors to know when new features will be usable, and&lt;br /&gt;
downstream packagers to know what toolchain will be required for each&lt;br /&gt;
Firefox release. Both benefit from the predictability of a schedule.&lt;br /&gt;
&lt;br /&gt;
We need to be fast and efficient across the whole system which includes&lt;br /&gt;
the Rust, Servo, and Firefox development teams. We realise that the&lt;br /&gt;
decisions we make have an impact downstream, and we want to minimise the&lt;br /&gt;
negative aspects of that impact. However, we cannot do so at the expense&lt;br /&gt;
of our own productivity.&lt;br /&gt;
&lt;br /&gt;
Many of us think of the toolchain and source code as being conceptually&lt;br /&gt;
different. At this point in time, Rust is evolving much more quickly&lt;br /&gt;
than Python or C++. For now it is easier to think of Rust as being part&lt;br /&gt;
of Firefox, rather than thinking of it like a C++ toolchain with decades&lt;br /&gt;
of history which we we have little influence on.&lt;br /&gt;
&lt;br /&gt;
There are many other stakeholders, of course, but our work in Gecko and&lt;br /&gt;
Servo are major drivers for Rust language, compiler, and library&lt;br /&gt;
development. That influence is more effective if we can iterate quickly.&lt;br /&gt;
Servo itself often uses experimental language features to give the&lt;br /&gt;
necessary early feedback on features as they evolve. &lt;br /&gt;
&lt;br /&gt;
Rust updates every six weeks, just like Firefox. This is more like web&lt;br /&gt;
languages than native languages, but it&#039;s been great for building&lt;br /&gt;
community. We (as Gecko developers) should embrace it.&lt;br /&gt;
&lt;br /&gt;
== Current policy ==&lt;br /&gt;
&lt;br /&gt;
=== Official builds ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;We ship official stable Firefox with stable Rust.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
So far we&#039;ve had no problem meeting this requirement. Typically we build&lt;br /&gt;
Firefox Nightly with the current stable Rust and let that configuration&lt;br /&gt;
ride through beta to release. There have been frequent exceptions where&lt;br /&gt;
we&#039;ve adopted a beta Rust during the Nightly phase to address some&lt;br /&gt;
platform support issue, and later updated when that Rust version became&lt;br /&gt;
stable. For example, we needed to use beta Rust for our own builds when&lt;br /&gt;
we first added Rust support to Firefox for Android.&lt;br /&gt;
&lt;br /&gt;
The policy provides good stability guarantees once Firefox is in&lt;br /&gt;
release, while giving us the freedom to respond to the issues experience&lt;br /&gt;
shows we&#039;ll need to address during development.&lt;br /&gt;
&lt;br /&gt;
=== Developer builds ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Local developer builds use whatever Rust toolchain is available on the system.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Someone building Firefox can maintain the latest stable Rust with the&lt;br /&gt;
`rustup` for `mach bootstrap` tools, or try other variations.&lt;br /&gt;
&lt;br /&gt;
We do not currently follow a strict policy for when to increase the&lt;br /&gt;
minimum Rust version required by a specific Firefox version. In the&lt;br /&gt;
absence of a policy, we have incremented the minimum Rust version&lt;br /&gt;
whenever someone wanted to use a new feature, or a library required it.&lt;br /&gt;
So far, it hasn’t been necessary to require developers use unstable&lt;br /&gt;
Rust.&lt;br /&gt;
&lt;br /&gt;
==== The need to clarify our developer policy ====&lt;br /&gt;
&lt;br /&gt;
For contributors, we also maintain a minimum supported Rust toolchain&lt;br /&gt;
This helps those working on tier-3 platforms, where updating Rust can be&lt;br /&gt;
more difficult than just running `rustup update`, by giving them time to adapt.&lt;br /&gt;
However, it means other contributors must backport newer work to&lt;br /&gt;
maintain compatibility. As more Rust code is merged into Firefox this&lt;br /&gt;
has become more expensive.&lt;br /&gt;
&lt;br /&gt;
Historically we&#039;ve bumped this minimum every 3-4 Rust releases, which&lt;br /&gt;
helped contributors on slow network connections since they didn&#039;t have&lt;br /&gt;
to download toolchains as often. Deciding to bump this way involved&lt;br /&gt;
negotiating each change, which many contributors felt was a more&lt;br /&gt;
significant burden. Delaying to give tier-3 platforms months instead of&lt;br /&gt;
weeks to update their Rust packages is also not considered a good&lt;br /&gt;
trade-off.&lt;br /&gt;
&lt;br /&gt;
The lack of a clear update policy creates unnecessary tension between&lt;br /&gt;
upstream Servo developers, Firefox developers and downstream community.&lt;br /&gt;
&lt;br /&gt;
== Proposed policy update ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;We require a new stable Rust starting 2 weeks after it is released.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This proposal effectively removes the difference between the required&lt;br /&gt;
Rust version and the default target for official builds, while still&lt;br /&gt;
giving tier-3 developers some time to process toolchain updates.&lt;br /&gt;
&lt;br /&gt;
Downstream packagers will still have 2-3 months to package each stable&lt;br /&gt;
Rust release before it’s required by a new Firefox release.&lt;br /&gt;
&lt;br /&gt;
The stable+two weeks requirement is a rough target. We expect to hit&lt;br /&gt;
it within a few days for most Rust releases. But, for example, when the&lt;br /&gt;
target date falls within a mozilla-central soft freeze (before branching&lt;br /&gt;
for a beta release) we may update a week later.&lt;br /&gt;
&lt;br /&gt;
We expect esr releases will stay on the same minimum Rust version,&lt;br /&gt;
so backporting security fixes may require Rust compatibility work too.&lt;br /&gt;
&lt;br /&gt;
My experience is that it takes about a week for version bumps to start&lt;br /&gt;
pulling in dependent crates using new language features, so this will&lt;br /&gt;
act as only a moderate restraint on Servo developers working on Gecko&lt;br /&gt;
modules. I think this is the correct trade-off between those two groups.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Release Firefox requirements under this proposal:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Firefox Version !! Requires !! Ruse release date !! Firefox release date&lt;br /&gt;
|-&lt;br /&gt;
| Firefox 56 || Rust 1.17.0 || 2017 April 27 || 2017 September 26&lt;br /&gt;
|-&lt;br /&gt;
| Firefox 57 || Rust 1.20.0 || 2017 August 31 || 2017 November 14&lt;br /&gt;
|-&lt;br /&gt;
| Firefox 58 || Rust 1.21.0 || 2017 October 12 ||2018 January 16&lt;br /&gt;
|-&lt;br /&gt;
| Firefox 59 || Rust 1.22.0 || 2017 November 23 || 2018 March 6&lt;br /&gt;
|-&lt;br /&gt;
| Firefox 60 || Rust 1.24.0 || 2018 Feb 15 || 2018 May 1&lt;br /&gt;
|-&lt;br /&gt;
| Firefox 61 || Rust 1.25.0 || 2018 March 29 || 2018 June 26&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;New feature adoption schedule under this proposal:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Mozilla-central can use !! Starting on (Rust release + 2 weeks)&lt;br /&gt;
|- &lt;br /&gt;
| Rust 1.19.0 || 2017 August 3&lt;br /&gt;
|-&lt;br /&gt;
| Rust 1.20.0 || 2017 September 14&lt;br /&gt;
|-&lt;br /&gt;
| Rust 1.21.0 || 2017 October 26&lt;br /&gt;
|-&lt;br /&gt;
| Rust 1.22.0 || 2017 December 7&lt;br /&gt;
|-&lt;br /&gt;
| Rust 1.23.0 || 2018 January 18&lt;br /&gt;
|-&lt;br /&gt;
| Rust 1.24.0 || 2018 March 1&lt;br /&gt;
|-&lt;br /&gt;
| Rust 1.25.0 || 2018 April 12&lt;br /&gt;
|-&lt;br /&gt;
| Rust 1.26.0 || 2018 May 24&lt;br /&gt;
|- Rust 1.27.0 || 2018 July 5&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Alternate Proposals ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;We require nightly Rust&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This would certainly speed up the feedback with language design.&lt;br /&gt;
However, we would frequently encounter build breakage when unstable&lt;br /&gt;
language features change. Even Servo pins to a specific nightly to avoid&lt;br /&gt;
this problem. That’s appropriate for a smaller research project, but not&lt;br /&gt;
something the size of Firefox.&lt;br /&gt;
&lt;br /&gt;
We should and do test building Firefox with nightly Rust to catch&lt;br /&gt;
compiler issues, but that’s different from requiring everyone to use&lt;br /&gt;
unstable Rust.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;We require beta Rust&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
I don’t think anyone has suggested this to me, but I thought I’d include&lt;br /&gt;
it for completeness. This shortens the feedback cycle for new features&lt;br /&gt;
at the expense of more churn for contributors. It’s not a good trade-off&lt;br /&gt;
because by the time a new feature is stabilized in beta Rust, it’s too&lt;br /&gt;
late to change it much. This is better served by particular developers&lt;br /&gt;
working with upstream directly. I believe beta is also something of an&lt;br /&gt;
“excluded middle” in the Rust ecosystem, with most contributors working&lt;br /&gt;
with either stable or unstable nightly Rust.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;We require the previous stable Rust once a new stable Rust is released.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
That is, we bump the Firefox minimum to Rust 1.n.m when rust 1.(n+1).0&lt;br /&gt;
stable is released. This is roughly every 6 weeks, with six weeks to&lt;br /&gt;
update before bumping into the new requirement.  This policy might be&lt;br /&gt;
simpler for contributors to remember. There&#039;s not much difference in the&lt;br /&gt;
amount of time downstream packager receive for a particular Firefox&lt;br /&gt;
release. This is a trade-off of more time for tier-3 developers against&lt;br /&gt;
people working on Gecko/Servo components doing extra work to maintain&lt;br /&gt;
compatibility. As I say above, I think this is the wrong choice.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;We bump the minimum Rust version only when new features are compelling.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This reduces churn for developers, but the need to negotiate each bump&lt;br /&gt;
takes time better spent on development. See the motivation section&lt;br /&gt;
above.&lt;/div&gt;</summary>
		<author><name>Rillian</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Rust_Update_Policy_for_Firefox&amp;diff=1177004</id>
		<title>Rust Update Policy for Firefox</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Rust_Update_Policy_for_Firefox&amp;diff=1177004"/>
		<updated>2017-07-31T23:01:45Z</updated>

		<summary type="html">&lt;p&gt;Rillian: Port update policy summary from https://public.etherpad-mozilla.org/p/rust-update-policy&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Rust toolchain dependency changes have been made on an ad-hoc basis. We&lt;br /&gt;
want to clarify the decision making and planning around this. We are&lt;br /&gt;
therefore defining a policy for when we update the Rust toolchains used&lt;br /&gt;
and required to build Firefox.&lt;br /&gt;
&lt;br /&gt;
This allows contributors to know when new features will be usable, and&lt;br /&gt;
downstream packagers to know what toolchain will be required for each&lt;br /&gt;
Firefox release. Both benefit from the predictability of a schedule.&lt;br /&gt;
&lt;br /&gt;
We need to be fast and efficient across the whole system which includes&lt;br /&gt;
the Rust, Servo, and Firefox development teams. We realise that the&lt;br /&gt;
decisions we make have an impact downstream, and we want to minimise the&lt;br /&gt;
negative aspects of that impact. However, we cannot do so at the expense&lt;br /&gt;
of our own productivity.&lt;br /&gt;
&lt;br /&gt;
Many of us think of the toolchain and source code as being conceptually&lt;br /&gt;
different. At this point in time, Rust is evolving much more quickly&lt;br /&gt;
than Python or C++. For now it is easier to think of Rust as being part&lt;br /&gt;
of Firefox, rather than thinking of it like a C++ toolchain with decades&lt;br /&gt;
of history which we we have little influence on.&lt;br /&gt;
&lt;br /&gt;
There are many other stakeholders, of course, but our work in Gecko and&lt;br /&gt;
Servo are major drivers for Rust language, compiler, and library&lt;br /&gt;
development. That influence is more effective if we can iterate quickly.&lt;br /&gt;
Servo itself often uses experimental language features to give the&lt;br /&gt;
necessary early feedback on features as they evolve. &lt;br /&gt;
&lt;br /&gt;
Rust updates every six weeks, just like Firefox. This is more like web&lt;br /&gt;
languages than native languages, but it&#039;s been great for building&lt;br /&gt;
community. We (as Gecko developers) should embrace it.&lt;br /&gt;
&lt;br /&gt;
== Current policy ==&lt;br /&gt;
&lt;br /&gt;
=== Official builds ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;We ship official stable Firefox with stable Rust.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
So far we&#039;ve had no problem meeting this requirement. Typically we build&lt;br /&gt;
Firefox Nightly with the current stable Rust and let that configuration&lt;br /&gt;
ride through beta to release. There have been frequent exceptions where&lt;br /&gt;
we&#039;ve adopted a beta Rust during the Nightly phase to address some&lt;br /&gt;
platform support issue, and later updated when that Rust version became&lt;br /&gt;
stable. For example, we needed to use beta Rust for our own builds when&lt;br /&gt;
we first added Rust support to Firefox for Android.&lt;br /&gt;
&lt;br /&gt;
The policy provides good stability guarantees once Firefox is in&lt;br /&gt;
release, while giving us the freedom to respond to the issues experience&lt;br /&gt;
shows we&#039;ll need to address during development.&lt;br /&gt;
&lt;br /&gt;
=== Developer builds ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Local developer builds use whatever Rust toolchain is available on the system.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Someone building Firefox can maintain the latest stable Rust with the&lt;br /&gt;
`rustup` for `mach bootstrap` tools, or try other variations.&lt;br /&gt;
&lt;br /&gt;
We do not currently follow a strict policy for when to increase the&lt;br /&gt;
minimum Rust version required by a specific Firefox version. In the&lt;br /&gt;
absence of a policy, we have incremented the minimum Rust version&lt;br /&gt;
whenever someone wanted to use a new feature, or a library required it.&lt;br /&gt;
So far, it hasn’t been necessary to require developers use unstable&lt;br /&gt;
Rust.&lt;br /&gt;
&lt;br /&gt;
==== The need to clarify our developer policy ====&lt;br /&gt;
&lt;br /&gt;
For contributors, we also maintain a minimum supported Rust toolchain&lt;br /&gt;
This helps those working on tier-3 platforms, where updating Rust can be&lt;br /&gt;
more difficult than just running `rustup update`, by giving them time to adapt.&lt;br /&gt;
However, it means other contributors must backport newer work to&lt;br /&gt;
maintain compatibility. As more Rust code is merged into Firefox this&lt;br /&gt;
has become more expensive.&lt;br /&gt;
&lt;br /&gt;
Historically we&#039;ve bumped this minimum every 3-4 Rust releases, which&lt;br /&gt;
helped contributors on slow network connections since they didn&#039;t have&lt;br /&gt;
to download toolchains as often. Deciding to bump this way involved&lt;br /&gt;
negotiating each change, which many contributors felt was a more&lt;br /&gt;
significant burden. Delaying to give tier-3 platforms months instead of&lt;br /&gt;
weeks to update their Rust packages is also not considered a good&lt;br /&gt;
trade-off.&lt;br /&gt;
&lt;br /&gt;
The lack of a clear update policy creates unnecessary tension between&lt;br /&gt;
upstream Servo developers, Firefox developers and downstream community.&lt;br /&gt;
&lt;br /&gt;
== Proposed policy update ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;We require a new stable Rust starting 2 weeks after it is released.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This proposal effectively removes the difference between the required&lt;br /&gt;
Rust version and the default target for official builds, while still&lt;br /&gt;
giving tier-3 developers some time to process toolchain updates.&lt;br /&gt;
&lt;br /&gt;
Downstream packagers will still have 2-3 months to package each stable&lt;br /&gt;
Rust release before it’s required by a new Firefox release.&lt;br /&gt;
&lt;br /&gt;
The stable+two weeks requirement is a rough target. We expect to hit&lt;br /&gt;
it within a few days for most Rust releases. But, for example, when the&lt;br /&gt;
target date falls within a mozilla-central soft freeze (before branching&lt;br /&gt;
for a beta release) we may update a week later.&lt;br /&gt;
&lt;br /&gt;
We expect esr releases will stay on the same minimum Rust version,&lt;br /&gt;
so backporting security fixes may require Rust compatibility work too.&lt;br /&gt;
&lt;br /&gt;
My experience is that it takes about a week for version bumps to start&lt;br /&gt;
pulling in dependent crates using new language features, so this will&lt;br /&gt;
act as only a moderate restraint on Servo developers working on Gecko&lt;br /&gt;
modules. I think this is the correct trade-off between those two groups.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Release Firefox requirements under this proposal:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Firefox Version !! Requires !! Ruse release date !! Firefox release date&lt;br /&gt;
|-&lt;br /&gt;
| Firefox 56 || Rust 1.17.0 || 2017 April 27 || 2017 September 26&lt;br /&gt;
|-&lt;br /&gt;
| Firefox 57 || Rust 1.20.0 || 2017 August 31 || 2017 November 14&lt;br /&gt;
|-&lt;br /&gt;
| Firefox 58 || Rust 1.21.0 || 2017 October 12 ||2018 January 16&lt;br /&gt;
|-&lt;br /&gt;
| Firefox 59 || Rust 1.22.0 || 2017 November 23 || 2018 March 6&lt;br /&gt;
|-&lt;br /&gt;
| Firefox 60 || Rust 1.24.0 || 2018 Feb 15 || 2018 May 1&lt;br /&gt;
|-&lt;br /&gt;
| Firefox 61 || Rust 1.25.0 || 2018 March 29 || 2018 June 26&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;New feature adoption schedule under this proposal:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Mozilla-central can use !! Starting on (Rust release + 2 weeks)&lt;br /&gt;
|- &lt;br /&gt;
| Rust 1.19.0 || 2017 August 3&lt;br /&gt;
|-&lt;br /&gt;
| Rust 1.20.0 || 2017 September 14&lt;br /&gt;
|-&lt;br /&gt;
| Rust 1.21.0 || 2017 October 26&lt;br /&gt;
|-&lt;br /&gt;
| Rust 1.22.0 || 2017 December 7&lt;br /&gt;
|-&lt;br /&gt;
| Rust 1.23.0 || 2018 January 18&lt;br /&gt;
|-&lt;br /&gt;
| Rust 1.24.0 || 2018 March 1&lt;br /&gt;
|-&lt;br /&gt;
| Rust 1.25.0 || 2018 April 12&lt;br /&gt;
|-&lt;br /&gt;
| Rust 1.26.0 || 2018 May 24&lt;br /&gt;
|- Rust 1.27.0 || 2018 July 5&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Alternate Proposals ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;We require nightly Rust&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This would certainly speed up the feedback with language design.&lt;br /&gt;
However, we would frequently encounter build breakage when unstable&lt;br /&gt;
language features change. Even Servo pins to a specific nightly to avoid&lt;br /&gt;
this problem. That’s appropriate for a smaller research project, but not&lt;br /&gt;
something the size of Firefox.&lt;br /&gt;
&lt;br /&gt;
We should and do test building Firefox with nightly Rust to catch&lt;br /&gt;
compiler issues, but that’s different from requiring everyone to use&lt;br /&gt;
unstable Rust.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;We require beta Rust&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
I don’t think anyone has suggested this to me, but I thought I’d include&lt;br /&gt;
it for completeness. This shortens the feedback cycle for new features&lt;br /&gt;
at the expense of more churn for contributors. It’s not a good trade-off&lt;br /&gt;
because by the time a new feature is stabilized in beta Rust, it’s too&lt;br /&gt;
late to change it much. This is better served by particular developers&lt;br /&gt;
working with upstream directly. I believe beta is also something of an&lt;br /&gt;
“excluded middle” in the Rust ecosystem, with most contributors working&lt;br /&gt;
with either stable or unstable nightly Rust.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;We require the previous stable Rust once a new stable Rust is released.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
That is, we bump the Firefox minimum to Rust 1.n.m when rust 1.(n+1).0&lt;br /&gt;
stable is released. This is roughly every 6 weeks, with six weeks to&lt;br /&gt;
update before bumping into the new requirement.  This policy might be&lt;br /&gt;
simpler for contributors to remember. There&#039;s not much difference in the&lt;br /&gt;
amount of time downstream packager receive for a particular Firefox&lt;br /&gt;
release. This is a trade-off of more time for tier-3 developers against&lt;br /&gt;
people working on Gecko/Servo components doing extra work to maintain&lt;br /&gt;
compatibility. As I say above, I think this is the wrong choice.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;We bump the minimum Rust version only when new features are compelling.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This reduces churn for developers, but the need to negotiate each bump&lt;br /&gt;
takes time better spent on development. See the motivation section&lt;br /&gt;
above.&lt;/div&gt;</summary>
		<author><name>Rillian</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Oxidation&amp;diff=1176557</id>
		<title>Oxidation</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Oxidation&amp;diff=1176557"/>
		<updated>2017-07-26T19:34:03Z</updated>

		<summary type="html">&lt;p&gt;Rillian: /* Supported Rust versions for Firefox builds */ Document 59 esr staying on rust 1.22.x&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Oxidation&#039;&#039;&#039; is a project to integrate [https://www.rust-lang.org/ Rust] code into Gecko and Firefox. &lt;br /&gt;
&lt;br /&gt;
Rust has been required on all platforms since Firefox 54, and we are actively adding new code modules written in Rust to Firefox and related programs.&lt;br /&gt;
&lt;br /&gt;
= Documentation =&lt;br /&gt;
&lt;br /&gt;
* [https://developer.mozilla.org/en-US/Firefox/Building_Firefox_with_Rust_code Developer Documentation]&lt;br /&gt;
* [https://gecko.readthedocs.io/en/latest/build/buildsystem/rust.html Build System Documentation]&lt;br /&gt;
&lt;br /&gt;
= Supported Rust versions for Firefox builds =&lt;br /&gt;
&lt;br /&gt;
Below are [https://public.etherpad-mozilla.org/p/rust-update-policy our expectations] if everything goes smoothly; we may need newer toolchains to address specific issues. Our ultimate policy is just that release Firefox will not require unstable or beta Rust to build.&lt;br /&gt;
&lt;br /&gt;
* Firefox 56 (released 2017 September 26) requires Rust 1.17.0 or later.&lt;br /&gt;
** Official builds will use Rust 1.19.0.&lt;br /&gt;
* Firefox 57 (released 2017 November 14) requires Rust 1.20.0.&lt;br /&gt;
** Mozilla-central can start using Rust 1.19.0 language features 2017 August 3.&lt;br /&gt;
** Mozilla-central can start using Rust 1.20.0 features 2017 September 14.&lt;br /&gt;
* Firefox 58 (released 2018 January 16) requires Rust 1.21.0.&lt;br /&gt;
** Mozilla-central can use Rust 1.21.0 language features 2017 October 26.&lt;br /&gt;
* Firefox 59 (released 2017 March 6) requires Rust 1.22.0.&lt;br /&gt;
** Mozilla-central can use Rust 1.22.0 features 2017 December 7.&lt;br /&gt;
** Firefox 59 ESR is expected to continue to work with Rust 1.22 throughout its support lifetime.&lt;br /&gt;
* Firefox 60 (released 2017 May 1) requires Rust 1.24.0.&lt;br /&gt;
** Mozilla-central can use Rust 1.23.0 features 2018 January 18.&lt;br /&gt;
** Mozilla-central can use Rust 1.24.0 features 2018 March 1.&lt;br /&gt;
* Firefox 61 (released 2017 June 26) requires Rust 1.25.0.&lt;br /&gt;
** Mozilla-central can use Rust 1.25.0 features 2018 April 12.&lt;br /&gt;
&lt;br /&gt;
= Rust components in Firefox =&lt;br /&gt;
&lt;br /&gt;
Completed&lt;br /&gt;
* MP4 metadata parser: {{bug|1161350}} (shipped for desktop in Firefox 48)&lt;br /&gt;
* Replace uconv with encoding-rs: {{bug|1261841}} (shipping in Firefox 56)&lt;br /&gt;
In progress&lt;br /&gt;
* URL parser: {{bug|url-oxidation}}&lt;br /&gt;
* CSS style calculation (from Servo): {{bug|stylo}}&lt;br /&gt;
* WebM demuxer: {{bug|1267492}}&lt;br /&gt;
* WebRender (from Servo): {{bug|webrender}}&lt;br /&gt;
* Audio remoting for Linux: {{bug|1362220}}&lt;br /&gt;
* SDP parsing in WebRTC: {{bug|1365792}}&lt;br /&gt;
* Linebreaking with xi-unicode: {{bug|1290022}}&lt;br /&gt;
Proposed&lt;br /&gt;
* Replace the XML parser&lt;br /&gt;
* Replace the preferences module: {{bug|1379383}}&lt;br /&gt;
* WebMIDI: {{bug|1201593}}, {{bug|1201596}}, {{bug|1201598}}&lt;br /&gt;
* Gamepad code: {{bug|1286699}}&lt;br /&gt;
* Replace the telemetry module(?)&lt;br /&gt;
* Share media playback stack with Servo(?)&lt;br /&gt;
* Replace DOM serializers (XML, HTML for Save As.., plain text)&lt;br /&gt;
&lt;br /&gt;
= Rust components outside Firefox =&lt;br /&gt;
&lt;br /&gt;
Completed&lt;br /&gt;
* GeckoDriver - WebDriver implementation for Firefox integrated via marionette protocol ({{bug|1340637}}) released as a standalone binary ([https://github.com/mozilla/geckodriver/releases releases])&lt;br /&gt;
&lt;br /&gt;
= Blockers and obstacles =&lt;br /&gt;
== Raw Rust code (lives in m-c) blockers ==&lt;br /&gt;
&lt;br /&gt;
* {{done|}} Top-level metabug: {{bug|oxidation}}&lt;br /&gt;
* {{done|}} Android support: {{bug|1220307}}&lt;br /&gt;
** Though Android still not a Tier-1 Rust platform: https://forge.rust-lang.org/platform-support.html&lt;br /&gt;
* Linux distro support for Rust: [https://internals.rust-lang.org/t/perfecting-rust-packaging/2623]&lt;br /&gt;
* {{done|}} Need to improve call stacks: {{bug|1268328 }}&lt;br /&gt;
&lt;br /&gt;
== Cargo / GitHub blockers ==&lt;br /&gt;
&lt;br /&gt;
* {{done|}} Tracking bug {{bug|1231764}}&lt;br /&gt;
* Improve working with vendored Cargo crates [https://github.com/rust-lang/cargo/issues/1926] [https://github.com/rust-lang/cargo/issues/2212]&lt;br /&gt;
&lt;br /&gt;
== Rust / Cargo nice-to-haves ==&lt;br /&gt;
&lt;br /&gt;
* Tracking bug: Make the developer experience for Firefox + Rust great: {{Bug|rust-great}}&lt;br /&gt;
* {{done|}} Per-crate integer overflow checking [https://github.com/rust-lang/cargo/issues/2262]&lt;br /&gt;
* Artifact caching [https://github.com/rust-lang/cargo/issues/1997]&lt;br /&gt;
&lt;br /&gt;
== Things blocking new components from being written in Rust ==&lt;br /&gt;
&lt;br /&gt;
* Lack of Mozilla-wide Rust training for engineers&lt;br /&gt;
* Lack of IPC/IPDL integration (e.g. generated Rust bindings)&lt;br /&gt;
* Lack of a WebIDL binding generator for dom components (servo must have something here?)&lt;br /&gt;
* Immature rust-bindgen and cheddar/cbindgen tools for general cross-language support.&lt;br /&gt;
* Slow compile times&lt;br /&gt;
&lt;br /&gt;
= Meetings =&lt;br /&gt;
&lt;br /&gt;
* Mozlando [https://github.com/servo/servo/wiki/Mozlando-Oxidation]&lt;br /&gt;
* Oxidation Nov. 2015 [https://github.com/servo/servo/wiki/Oxidation-2015-11-05]&lt;br /&gt;
* Mozlandia [https://github.com/servo/servo/wiki/Mozlandia-Rust-In-Gecko]&lt;br /&gt;
* Whistler [https://github.com/servo/servo/wiki/Whistler-GFX#servo-in-gecko]&lt;/div&gt;</summary>
		<author><name>Rillian</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Oxidation&amp;diff=1176505</id>
		<title>Oxidation</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Oxidation&amp;diff=1176505"/>
		<updated>2017-07-26T00:46:59Z</updated>

		<summary type="html">&lt;p&gt;Rillian: /* Things blocking new components from being written in Rust */ Mention bindgen and webidl&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Oxidation&#039;&#039;&#039; is a project to integrate [https://www.rust-lang.org/ Rust] code into Gecko and Firefox. &lt;br /&gt;
&lt;br /&gt;
Rust has been required on all platforms since Firefox 54, and we are actively adding new code modules written in Rust to Firefox and related programs.&lt;br /&gt;
&lt;br /&gt;
= Documentation =&lt;br /&gt;
&lt;br /&gt;
* [https://developer.mozilla.org/en-US/Firefox/Building_Firefox_with_Rust_code Developer Documentation]&lt;br /&gt;
* [https://gecko.readthedocs.io/en/latest/build/buildsystem/rust.html Build System Documentation]&lt;br /&gt;
&lt;br /&gt;
= Supported Rust versions for Firefox builds =&lt;br /&gt;
&lt;br /&gt;
Below are [https://public.etherpad-mozilla.org/p/rust-update-policy our expectations] if everything goes smoothly; we may need newer toolchains to address specific issues. Our ultimate policy is just that release Firefox will not require unstable or beta Rust to build.&lt;br /&gt;
&lt;br /&gt;
* Firefox 56 (released 2017 September 26) requires Rust 1.17.0 or later.&lt;br /&gt;
** Official builds will use Rust 1.19.0.&lt;br /&gt;
* Firefox 57 (released 2017 November 14) requires Rust 1.20.0.&lt;br /&gt;
** Mozilla-central can start using Rust 1.19.0 language features 2017 August 3.&lt;br /&gt;
** Mozilla-central can start using Rust 1.20.0 features 2017 September 14.&lt;br /&gt;
* Firefox 58 (released 2018 January 16) requires Rust 1.21.0.&lt;br /&gt;
** Mozilla-central can use Rust 1.21.0 language features 2017 October 26.&lt;br /&gt;
* Firefox 59 (released 2017 March 6) requires Rust 1.22.0.&lt;br /&gt;
** Mozilla-central can use Rust 1.22.0 features 2017 December 7.&lt;br /&gt;
* Firefox 60 (released 2017 May 1) requires Rust 1.24.0.&lt;br /&gt;
** Mozilla-central can use Rust 1.23.0 features 2018 January 18.&lt;br /&gt;
** Mozilla-central can use Rust 1.24.0 features 2018 March 1.&lt;br /&gt;
* Firefox 61 (released 2017 June 26) requires Rust 1.25.0.&lt;br /&gt;
** Mozilla-central can use Rust 1.25.0 features 2018 April 12.&lt;br /&gt;
&lt;br /&gt;
= Rust components in Firefox =&lt;br /&gt;
&lt;br /&gt;
Completed&lt;br /&gt;
* MP4 metadata parser: {{bug|1161350}} (shipped for desktop in Firefox 48)&lt;br /&gt;
* Replace uconv with encoding-rs: {{bug|1261841}} (shipping in Firefox 56)&lt;br /&gt;
In progress&lt;br /&gt;
* URL parser: {{bug|url-oxidation}}&lt;br /&gt;
* CSS style calculation (from Servo): {{bug|stylo}}&lt;br /&gt;
* WebM demuxer: {{bug|1267492}}&lt;br /&gt;
* WebRender (from Servo): {{bug|webrender}}&lt;br /&gt;
* Audio remoting for Linux: {{bug|1362220}}&lt;br /&gt;
* SDP parsing in WebRTC {{bug|1365792}}&lt;br /&gt;
Proposed&lt;br /&gt;
* Replace the XML parser&lt;br /&gt;
* Replace the preferences module: {{bug|1379383}}&lt;br /&gt;
* Replace the telemetry module(?)&lt;br /&gt;
* Share media playback stack with Servo(?)&lt;br /&gt;
* Replace DOM serializers (XML, HTML for Save As.., plain text)&lt;br /&gt;
&lt;br /&gt;
= Rust components outside Firefox =&lt;br /&gt;
&lt;br /&gt;
Completed&lt;br /&gt;
* GeckoDriver - WebDriver implementation for Firefox integrated via marionette protocol ({{bug|1340637}}) released as a standalone binary ([https://github.com/mozilla/geckodriver/releases releases])&lt;br /&gt;
&lt;br /&gt;
= Blockers and obstacles =&lt;br /&gt;
== Raw Rust code (lives in m-c) blockers ==&lt;br /&gt;
&lt;br /&gt;
* {{done|}} Top-level metabug: {{bug|oxidation}}&lt;br /&gt;
* {{done|}} Android support: {{bug|1220307}}&lt;br /&gt;
** Though Android still not a Tier-1 Rust platform: https://forge.rust-lang.org/platform-support.html&lt;br /&gt;
* Linux distro support for Rust: [https://internals.rust-lang.org/t/perfecting-rust-packaging/2623]&lt;br /&gt;
* {{done|}} Need to improve call stacks: {{bug|1268328 }}&lt;br /&gt;
&lt;br /&gt;
== Cargo / GitHub blockers ==&lt;br /&gt;
&lt;br /&gt;
* {{done|}} Tracking bug {{bug|1231764}}&lt;br /&gt;
* Improve working with vendored Cargo crates [https://github.com/rust-lang/cargo/issues/1926] [https://github.com/rust-lang/cargo/issues/2212]&lt;br /&gt;
&lt;br /&gt;
== Rust / Cargo nice-to-haves ==&lt;br /&gt;
&lt;br /&gt;
* Tracking bug: Make the developer experience for Firefox + Rust great: {{Bug|rust-great}}&lt;br /&gt;
* {{done|}} Per-crate integer overflow checking [https://github.com/rust-lang/cargo/issues/2262]&lt;br /&gt;
* Artifact caching [https://github.com/rust-lang/cargo/issues/1997]&lt;br /&gt;
&lt;br /&gt;
== Things blocking new components from being written in Rust ==&lt;br /&gt;
&lt;br /&gt;
* Lack of Mozilla-wide Rust training for engineers&lt;br /&gt;
* Lack of IPC/IPDL integration (e.g. generated Rust bindings)&lt;br /&gt;
* Lack of a WebIDL binding generator for dom components (servo must have something here?)&lt;br /&gt;
* Immature rust-bindgen and cheddar/cbindgen tools for general cross-language support.&lt;br /&gt;
* Slow compile times&lt;br /&gt;
&lt;br /&gt;
= Meetings =&lt;br /&gt;
&lt;br /&gt;
* Mozlando [https://github.com/servo/servo/wiki/Mozlando-Oxidation]&lt;br /&gt;
* Oxidation Nov. 2015 [https://github.com/servo/servo/wiki/Oxidation-2015-11-05]&lt;br /&gt;
* Mozlandia [https://github.com/servo/servo/wiki/Mozlandia-Rust-In-Gecko]&lt;br /&gt;
* Whistler [https://github.com/servo/servo/wiki/Whistler-GFX#servo-in-gecko]&lt;/div&gt;</summary>
		<author><name>Rillian</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Oxidation&amp;diff=1176480</id>
		<title>Oxidation</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Oxidation&amp;diff=1176480"/>
		<updated>2017-07-25T18:37:43Z</updated>

		<summary type="html">&lt;p&gt;Rillian: /* Supported Rust versions for Firefox builds */ Link to minimum-version policy document.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Oxidation&#039;&#039;&#039; is a project to integrate [https://www.rust-lang.org/ Rust] code into Gecko and Firefox. &lt;br /&gt;
&lt;br /&gt;
Rust has been required on all platforms since Firefox 54, and we are actively adding new code modules written in Rust to Firefox and related programs.&lt;br /&gt;
&lt;br /&gt;
= Documentation =&lt;br /&gt;
&lt;br /&gt;
* [https://developer.mozilla.org/en-US/Firefox/Building_Firefox_with_Rust_code Developer Documentation]&lt;br /&gt;
* [https://gecko.readthedocs.io/en/latest/build/buildsystem/rust.html Build System Documentation]&lt;br /&gt;
&lt;br /&gt;
= Supported Rust versions for Firefox builds =&lt;br /&gt;
&lt;br /&gt;
Below are [https://public.etherpad-mozilla.org/p/rust-update-policy our expectations] if everything goes smoothly; we may need newer toolchains to address specific issues. Our ultimate policy is just that release Firefox will not require unstable or beta Rust to build.&lt;br /&gt;
&lt;br /&gt;
* Firefox 56 (released 2017 September 26) requires Rust 1.17.0 or later.&lt;br /&gt;
** Official builds will use Rust 1.19.0.&lt;br /&gt;
* Firefox 57 (released 2017 November 14) requires Rust 1.20.0.&lt;br /&gt;
** Mozilla-central can start using Rust 1.19.0 language features 2017 August 3.&lt;br /&gt;
** Mozilla-central can start using Rust 1.20.0 features 2017 September 14.&lt;br /&gt;
* Firefox 58 (released 2018 January 16) requires Rust 1.21.0.&lt;br /&gt;
** Mozilla-central can use Rust 1.21.0 language features 2017 October 26.&lt;br /&gt;
* Firefox 59 (released 2017 March 6) requires Rust 1.22.0.&lt;br /&gt;
** Mozilla-central can use Rust 1.22.0 features 2017 December 7.&lt;br /&gt;
* Firefox 60 (released 2017 May 1) requires Rust 1.24.0.&lt;br /&gt;
** Mozilla-central can use Rust 1.23.0 features 2018 January 18.&lt;br /&gt;
** Mozilla-central can use Rust 1.24.0 features 2018 March 1.&lt;br /&gt;
* Firefox 61 (released 2017 June 26) requires Rust 1.25.0.&lt;br /&gt;
** Mozilla-central can use Rust 1.25.0 features 2018 April 12.&lt;br /&gt;
&lt;br /&gt;
= Rust components in Firefox =&lt;br /&gt;
&lt;br /&gt;
Completed&lt;br /&gt;
* MP4 metadata parser: {{bug|1161350}} (shipped for desktop in Firefox 48)&lt;br /&gt;
* Replace uconv with encoding-rs: {{bug|1261841}} (shipping in Firefox 56)&lt;br /&gt;
In progress&lt;br /&gt;
* URL parser: {{bug|url-oxidation}}&lt;br /&gt;
* CSS style calculation (from Servo): {{bug|stylo}}&lt;br /&gt;
* WebM demuxer: {{bug|1267492}}&lt;br /&gt;
* WebRender (from Servo): {{bug|webrender}}&lt;br /&gt;
* Audio remoting for Linux: {{bug|1362220}}&lt;br /&gt;
* SDP parsing in WebRTC {{bug|1365792}}&lt;br /&gt;
Proposed&lt;br /&gt;
* Replace the XML parser&lt;br /&gt;
* Replace the preferences module: {{bug|1379383}}&lt;br /&gt;
* Replace the telemetry module(?)&lt;br /&gt;
* Share media playback stack with Servo(?)&lt;br /&gt;
* Replace DOM serializers (XML, HTML for Save As.., plain text)&lt;br /&gt;
&lt;br /&gt;
= Rust components outside Firefox =&lt;br /&gt;
&lt;br /&gt;
Completed&lt;br /&gt;
* GeckoDriver - WebDriver implementation for Firefox integrated via marionette protocol ({{bug|1340637}}) released as a standalone binary ([https://github.com/mozilla/geckodriver/releases releases])&lt;br /&gt;
&lt;br /&gt;
= Blockers and obstacles =&lt;br /&gt;
== Raw Rust code (lives in m-c) blockers ==&lt;br /&gt;
&lt;br /&gt;
* {{done|}} Top-level metabug: {{bug|oxidation}}&lt;br /&gt;
* {{done|}} Android support: {{bug|1220307}}&lt;br /&gt;
** Though Android still not a Tier-1 Rust platform: https://forge.rust-lang.org/platform-support.html&lt;br /&gt;
* Linux distro support for Rust: [https://internals.rust-lang.org/t/perfecting-rust-packaging/2623]&lt;br /&gt;
* {{done|}} Need to improve call stacks: {{bug|1268328 }}&lt;br /&gt;
&lt;br /&gt;
== Cargo / GitHub blockers ==&lt;br /&gt;
&lt;br /&gt;
* {{done|}} Tracking bug {{bug|1231764}}&lt;br /&gt;
* Improve working with vendored Cargo crates [https://github.com/rust-lang/cargo/issues/1926] [https://github.com/rust-lang/cargo/issues/2212]&lt;br /&gt;
&lt;br /&gt;
== Rust / Cargo nice-to-haves ==&lt;br /&gt;
&lt;br /&gt;
* Tracking bug: Make the developer experience for Firefox + Rust great: {{Bug|rust-great}}&lt;br /&gt;
* {{done|}} Per-crate integer overflow checking [https://github.com/rust-lang/cargo/issues/2262]&lt;br /&gt;
* Artifact caching [https://github.com/rust-lang/cargo/issues/1997]&lt;br /&gt;
&lt;br /&gt;
== Things blocking new components from being written in Rust ==&lt;br /&gt;
&lt;br /&gt;
* Lack of Mozilla-wide Rust training for engineers&lt;br /&gt;
* Lack of IPC/IPDL integration (e.g. generated Rust bindings)&lt;br /&gt;
* Slow compile times&lt;br /&gt;
&lt;br /&gt;
= Meetings =&lt;br /&gt;
&lt;br /&gt;
* Mozlando [https://github.com/servo/servo/wiki/Mozlando-Oxidation]&lt;br /&gt;
* Oxidation Nov. 2015 [https://github.com/servo/servo/wiki/Oxidation-2015-11-05]&lt;br /&gt;
* Mozlandia [https://github.com/servo/servo/wiki/Mozlandia-Rust-In-Gecko]&lt;br /&gt;
* Whistler [https://github.com/servo/servo/wiki/Whistler-GFX#servo-in-gecko]&lt;/div&gt;</summary>
		<author><name>Rillian</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Oxidation&amp;diff=1176424</id>
		<title>Oxidation</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Oxidation&amp;diff=1176424"/>
		<updated>2017-07-24T20:55:22Z</updated>

		<summary type="html">&lt;p&gt;Rillian: /* Rust components in Firefox */ Mark mp4 parser as completed&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Oxidation&#039;&#039;&#039; is a project to integrate [https://www.rust-lang.org/ Rust] code into Gecko and Firefox. &lt;br /&gt;
&lt;br /&gt;
Rust has been required on all platforms since Firefox 54, and we are actively adding new code modules written in Rust to Firefox and related programs.&lt;br /&gt;
&lt;br /&gt;
= Documentation =&lt;br /&gt;
&lt;br /&gt;
* [https://developer.mozilla.org/en-US/Firefox/Building_Firefox_with_Rust_code Developer Documentation]&lt;br /&gt;
* [https://gecko.readthedocs.io/en/latest/build/buildsystem/rust.html Build System Documentation]&lt;br /&gt;
&lt;br /&gt;
= Supported Rust versions for Firefox builds =&lt;br /&gt;
&lt;br /&gt;
Below are our expectations if everything goes smoothly; we may need newer toolchains to address specific issues. Our ultimate policy is just that release Firefox will not require unstable or beta Rust to build.&lt;br /&gt;
&lt;br /&gt;
* Firefox 56 (released 2017 September 26) requires Rust 1.17.0 or later.&lt;br /&gt;
** Official builds will use Rust 1.19.0.&lt;br /&gt;
* Firefox 57 (released 2017 November 14) requires Rust 1.20.0.&lt;br /&gt;
** Mozilla-central can start using Rust 1.19.0 language features 2017 August 3.&lt;br /&gt;
** Mozilla-central can start using Rust 1.20.0 features 2017 September 14.&lt;br /&gt;
* Firefox 58 (released 2018 January 16) requires Rust 1.21.0.&lt;br /&gt;
** Mozilla-central can use Rust 1.21.0 language features 2017 October 26.&lt;br /&gt;
* Firefox 59 (released 2017 March 6) requires Rust 1.22.0.&lt;br /&gt;
** Mozilla-central can use Rust 1.22.0 features 2017 December 7.&lt;br /&gt;
* Firefox 60 (released 2017 May 1) requires Rust 1.24.0.&lt;br /&gt;
** Mozilla-central can use Rust 1.23.0 features 2018 January 18.&lt;br /&gt;
** Mozilla-central can use Rust 1.24.0 features 2018 March 1.&lt;br /&gt;
* Firefox 61 (released 2017 June 26) requires Rust 1.25.0.&lt;br /&gt;
** Mozilla-central can use Rust 1.25.0 features 2018 April 12.&lt;br /&gt;
&lt;br /&gt;
= Rust components in Firefox =&lt;br /&gt;
&lt;br /&gt;
Completed&lt;br /&gt;
* MP4 metadata parser: {{bug|1161350}} (shipped for desktop in Firefox 48)&lt;br /&gt;
* Replace uconv with encoding-rs: {{bug|1261841}} (shipping in Firefox 56)&lt;br /&gt;
In progress&lt;br /&gt;
* URL parser: {{bug|url-oxidation}}&lt;br /&gt;
* CSS style calculation (from Servo): {{bug|stylo}}&lt;br /&gt;
* WebM demuxer: {{bug|1267492}}&lt;br /&gt;
* WebRender (from Servo): {{bug|webrender}}&lt;br /&gt;
* Audio remoting for Linux: {{bug|1362220}}&lt;br /&gt;
* SDP parsing in WebRTC {{bug|1365792}}&lt;br /&gt;
Proposed&lt;br /&gt;
* Replace the XML parser&lt;br /&gt;
* Replace the preferences module: {{bug|1379383}}&lt;br /&gt;
* Replace the telemetry module(?)&lt;br /&gt;
* Share media playback stack with Servo(?)&lt;br /&gt;
* Replace DOM serializers (XML, HTML for Save As.., plain text)&lt;br /&gt;
&lt;br /&gt;
= Rust components outside Firefox =&lt;br /&gt;
&lt;br /&gt;
Completed&lt;br /&gt;
* GeckoDriver - WebDriver implementation for Firefox integrated via marionette protocol ({{bug|1340637}}) released as a standalone binary ([https://github.com/mozilla/geckodriver/releases releases])&lt;br /&gt;
&lt;br /&gt;
= Blockers and obstacles =&lt;br /&gt;
== Raw Rust code (lives in m-c) blockers ==&lt;br /&gt;
&lt;br /&gt;
* {{done|}} Top-level metabug: {{bug|oxidation}}&lt;br /&gt;
* {{done|}} Android support: {{bug|1220307}}&lt;br /&gt;
** Though Android still not a Tier-1 Rust platform: https://forge.rust-lang.org/platform-support.html&lt;br /&gt;
* Linux distro support for Rust: [https://internals.rust-lang.org/t/perfecting-rust-packaging/2623]&lt;br /&gt;
* {{done|}} Need to improve call stacks: {{bug|1268328 }}&lt;br /&gt;
&lt;br /&gt;
== Cargo / GitHub blockers ==&lt;br /&gt;
&lt;br /&gt;
* {{done|}} Tracking bug {{bug|1231764}}&lt;br /&gt;
* Improve working with vendored Cargo crates [https://github.com/rust-lang/cargo/issues/1926] [https://github.com/rust-lang/cargo/issues/2212]&lt;br /&gt;
&lt;br /&gt;
== Rust / Cargo nice-to-haves ==&lt;br /&gt;
&lt;br /&gt;
* Tracking bug: Make the developer experience for Firefox + Rust great: {{Bug|rust-great}}&lt;br /&gt;
* {{done|}} Per-crate integer overflow checking [https://github.com/rust-lang/cargo/issues/2262]&lt;br /&gt;
* Artifact caching [https://github.com/rust-lang/cargo/issues/1997]&lt;br /&gt;
&lt;br /&gt;
== Things blocking new components from being written in Rust ==&lt;br /&gt;
&lt;br /&gt;
* Lack of Mozilla-wide Rust training for engineers&lt;br /&gt;
* Lack of IPC/IPDL integration (e.g. generated Rust bindings)&lt;br /&gt;
* Slow compile times&lt;br /&gt;
&lt;br /&gt;
= Meetings =&lt;br /&gt;
&lt;br /&gt;
* Mozlando [https://github.com/servo/servo/wiki/Mozlando-Oxidation]&lt;br /&gt;
* Oxidation Nov. 2015 [https://github.com/servo/servo/wiki/Oxidation-2015-11-05]&lt;br /&gt;
* Mozlandia [https://github.com/servo/servo/wiki/Mozlandia-Rust-In-Gecko]&lt;br /&gt;
* Whistler [https://github.com/servo/servo/wiki/Whistler-GFX#servo-in-gecko]&lt;/div&gt;</summary>
		<author><name>Rillian</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Oxidation&amp;diff=1175635</id>
		<title>Oxidation</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Oxidation&amp;diff=1175635"/>
		<updated>2017-07-12T20:14:52Z</updated>

		<summary type="html">&lt;p&gt;Rillian: /* Documentation */ Draft rust version requirements table for Firefox, based on stable+two weeks.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Oxidation&#039;&#039;&#039; is a project to integrate [https://www.rust-lang.org/ Rust] code into Gecko and Firefox. &lt;br /&gt;
&lt;br /&gt;
Rust has been required on all platforms since Firefox 54, and we are actively adding new code modules written in Rust to Firefox and related programs.&lt;br /&gt;
&lt;br /&gt;
= Documentation =&lt;br /&gt;
&lt;br /&gt;
* [https://developer.mozilla.org/en-US/Firefox/Building_Firefox_with_Rust_code Developer Documentation]&lt;br /&gt;
* [https://gecko.readthedocs.io/en/latest/build/buildsystem/rust.html Build System Documentation]&lt;br /&gt;
&lt;br /&gt;
= Supported Rust versions for Firefox builds =&lt;br /&gt;
&lt;br /&gt;
Below are our expectations if everything goes smoothly; we may need newer toolchains to address specific issues. Our ultimate policy is just that release Firefox will not require unstable or beta Rust to build.&lt;br /&gt;
&lt;br /&gt;
* Firefox 56 (released 2017 September 26) requires Rust 1.17.0 or later.&lt;br /&gt;
** Official builds will use Rust 1.19.0.&lt;br /&gt;
* Firefox 57 (released 2017 November 14) requires Rust 1.20.0.&lt;br /&gt;
** Mozilla-central can start using Rust 1.19.0 language features 2017 August 3.&lt;br /&gt;
** Mozilla-central can start using Rust 1.20.0 features 2017 September 14.&lt;br /&gt;
* Firefox 58 (released 2018 January 16) requires Rust 1.21.0.&lt;br /&gt;
** Mozilla-central can use Rust 1.21.0 language features 2017 October 26.&lt;br /&gt;
* Firefox 59 (released 2017 March 6) requires Rust 1.22.0.&lt;br /&gt;
** Mozilla-central can use Rust 1.22.0 features 2017 December 7.&lt;br /&gt;
* Firefox 60 (released 2017 May 1) requires Rust 1.24.0.&lt;br /&gt;
** Mozilla-central can use Rust 1.23.0 features 2018 January 18.&lt;br /&gt;
** Mozilla-central can use Rust 1.24.0 features 2018 March 1.&lt;br /&gt;
* Firefox 61 (released 2017 June 26) requires Rust 1.25.0.&lt;br /&gt;
** Mozilla-central can use Rust 1.25.0 features 2018 April 12.&lt;br /&gt;
&lt;br /&gt;
= Rust components in Firefox =&lt;br /&gt;
&lt;br /&gt;
Completed&lt;br /&gt;
* MP4 metadata parser: {{bug|1161350}} (shipped for desktop in Firefox 48)&lt;br /&gt;
* Replace uconv with encoding-rs: {{bug|1261841}} (shipping in Firefox 56)&lt;br /&gt;
In progress&lt;br /&gt;
* Replace stagefright&#039;s MP4 metadata parser with mp4parse crate {{bug|1161350}}&lt;br /&gt;
* URL parser: {{bug|url-oxidation}}&lt;br /&gt;
* CSS style calculation (from Servo): {{bug|stylo}}&lt;br /&gt;
* WebM demuxer: {{bug|1267492}}&lt;br /&gt;
* WebRender (from Servo): {{bug|webrender}}&lt;br /&gt;
* Audio remoting for Linux: {{bug|1362220}}&lt;br /&gt;
* SDP parsing in WebRTC {{bug|1365792}}&lt;br /&gt;
Proposed&lt;br /&gt;
* Replace the XML parser&lt;br /&gt;
* Replace the preferences module: {{bug|1379383}}&lt;br /&gt;
* Replace the telemetry module(?)&lt;br /&gt;
* Share media playback stack with Servo(?)&lt;br /&gt;
* Replace DOM serializers (XML, HTML for Save As.., plain text)&lt;br /&gt;
&lt;br /&gt;
= Rust components outside Firefox =&lt;br /&gt;
&lt;br /&gt;
Completed&lt;br /&gt;
* GeckoDriver - WebDriver implementation for Firefox integrated via marionette protocol ({{bug|1340637}}) released as a standalone binary ([https://github.com/mozilla/geckodriver/releases releases])&lt;br /&gt;
&lt;br /&gt;
= Blockers and obstacles =&lt;br /&gt;
== Raw Rust code (lives in m-c) blockers ==&lt;br /&gt;
&lt;br /&gt;
* Top-level metabug {{bug|oxidation}}&lt;br /&gt;
* {{done|}} Android support {{bug|1220307}}&lt;br /&gt;
** Though Android still not a Tier-1 Rust platform: https://forge.rust-lang.org/platform-support.html&lt;br /&gt;
* Linux distro support for Rust [https://internals.rust-lang.org/t/perfecting-rust-packaging/2623]&lt;br /&gt;
* {{done|}} Need to improve call stacks {{bug|1268328 }}&lt;br /&gt;
&lt;br /&gt;
== Cargo / GitHub blockers ==&lt;br /&gt;
&lt;br /&gt;
* {{done|}} Tracking bug {{bug|1231764}}&lt;br /&gt;
* Improve working with vendored Cargo crates [https://github.com/rust-lang/cargo/issues/1926] [https://github.com/rust-lang/cargo/issues/2212]&lt;br /&gt;
&lt;br /&gt;
== Rust / Cargo nice-to-haves ==&lt;br /&gt;
&lt;br /&gt;
* {{done|}} Per-crate integer overflow checking [https://github.com/rust-lang/cargo/issues/2262]&lt;br /&gt;
* Artifact caching [https://github.com/rust-lang/cargo/issues/1997]&lt;br /&gt;
&lt;br /&gt;
== Things blocking new components from being written in Rust ==&lt;br /&gt;
&lt;br /&gt;
* Lack of Mozilla-wide Rust training for engineers&lt;br /&gt;
* Lack of IPC/IPDL integration (e.g. generated Rust bindings)&lt;br /&gt;
* Slow compile times&lt;br /&gt;
&lt;br /&gt;
= Meetings =&lt;br /&gt;
&lt;br /&gt;
* Mozlando [https://github.com/servo/servo/wiki/Mozlando-Oxidation]&lt;br /&gt;
* Oxidation Nov. 2015 [https://github.com/servo/servo/wiki/Oxidation-2015-11-05]&lt;br /&gt;
* Mozlandia [https://github.com/servo/servo/wiki/Mozlandia-Rust-In-Gecko]&lt;br /&gt;
* Whistler [https://github.com/servo/servo/wiki/Whistler-GFX#servo-in-gecko]&lt;/div&gt;</summary>
		<author><name>Rillian</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Oxidation&amp;diff=1175626</id>
		<title>Oxidation</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Oxidation&amp;diff=1175626"/>
		<updated>2017-07-12T18:20:59Z</updated>

		<summary type="html">&lt;p&gt;Rillian: Move documentation links to the top of the page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Oxidation&#039;&#039;&#039; is a project to integrate [https://www.rust-lang.org/ Rust] code into Gecko and Firefox. &lt;br /&gt;
&lt;br /&gt;
Rust has been required on all platforms since Firefox 54, and we are actively adding new code modules written in Rust to Firefox and related programs.&lt;br /&gt;
&lt;br /&gt;
= Documentation =&lt;br /&gt;
&lt;br /&gt;
* [https://developer.mozilla.org/en-US/Firefox/Building_Firefox_with_Rust_code Developer Documentation]&lt;br /&gt;
* [https://gecko.readthedocs.io/en/latest/build/buildsystem/rust.html Build System Documentation]&lt;br /&gt;
&lt;br /&gt;
= Rust components in Firefox =&lt;br /&gt;
&lt;br /&gt;
Completed&lt;br /&gt;
* MP4 metadata parser: {{bug|1161350}} (shipped for desktop in Firefox 48)&lt;br /&gt;
* Replace uconv with encoding-rs: {{bug|1261841}} (shipping in Firefox 56)&lt;br /&gt;
In progress&lt;br /&gt;
* Replace stagefright&#039;s MP4 metadata parser with mp4parse crate {{bug|1161350}}&lt;br /&gt;
* URL parser: {{bug|url-oxidation}}&lt;br /&gt;
* CSS style calculation (from Servo): {{bug|stylo}}&lt;br /&gt;
* WebM demuxer: {{bug|1267492}}&lt;br /&gt;
* WebRender (from Servo): {{bug|webrender}}&lt;br /&gt;
* Audio remoting for Linux: {{bug|1362220}}&lt;br /&gt;
* SDP parsing in WebRTC {{bug|1365792}}&lt;br /&gt;
Proposed&lt;br /&gt;
* Replace the XML parser&lt;br /&gt;
* Replace the preferences module: {{bug|1379383}}&lt;br /&gt;
* Replace the telemetry module(?)&lt;br /&gt;
* Share media playback stack with Servo(?)&lt;br /&gt;
* Replace DOM serializers (XML, HTML for Save As.., plain text)&lt;br /&gt;
&lt;br /&gt;
= Rust components outside Firefox =&lt;br /&gt;
&lt;br /&gt;
Completed&lt;br /&gt;
* GeckoDriver - WebDriver implementation for Firefox integrated via marionette protocol ({{bug|1340637}}) released as a standalone binary ([https://github.com/mozilla/geckodriver/releases releases])&lt;br /&gt;
&lt;br /&gt;
= Blockers and obstacles =&lt;br /&gt;
== Raw Rust code (lives in m-c) blockers ==&lt;br /&gt;
&lt;br /&gt;
* Top-level metabug {{bug|oxidation}}&lt;br /&gt;
* {{done|}} Android support {{bug|1220307}}&lt;br /&gt;
** Though Android still not a Tier-1 Rust platform: https://forge.rust-lang.org/platform-support.html&lt;br /&gt;
* Linux distro support for Rust [https://internals.rust-lang.org/t/perfecting-rust-packaging/2623]&lt;br /&gt;
* {{done|}} Need to improve call stacks {{bug|1268328 }}&lt;br /&gt;
&lt;br /&gt;
== Cargo / GitHub blockers ==&lt;br /&gt;
&lt;br /&gt;
* {{done|}} Tracking bug {{bug|1231764}}&lt;br /&gt;
* Improve working with vendored Cargo crates [https://github.com/rust-lang/cargo/issues/1926] [https://github.com/rust-lang/cargo/issues/2212]&lt;br /&gt;
&lt;br /&gt;
== Rust / Cargo nice-to-haves ==&lt;br /&gt;
&lt;br /&gt;
* {{done|}} Per-crate integer overflow checking [https://github.com/rust-lang/cargo/issues/2262]&lt;br /&gt;
* Artifact caching [https://github.com/rust-lang/cargo/issues/1997]&lt;br /&gt;
&lt;br /&gt;
== Things blocking new components from being written in Rust ==&lt;br /&gt;
&lt;br /&gt;
* Lack of Mozilla-wide Rust training for engineers&lt;br /&gt;
* Lack of IPC/IPDL integration (e.g. generated Rust bindings)&lt;br /&gt;
* Slow compile times&lt;br /&gt;
&lt;br /&gt;
= Meetings =&lt;br /&gt;
&lt;br /&gt;
* Mozlando [https://github.com/servo/servo/wiki/Mozlando-Oxidation]&lt;br /&gt;
* Oxidation Nov. 2015 [https://github.com/servo/servo/wiki/Oxidation-2015-11-05]&lt;br /&gt;
* Mozlandia [https://github.com/servo/servo/wiki/Mozlandia-Rust-In-Gecko]&lt;br /&gt;
* Whistler [https://github.com/servo/servo/wiki/Whistler-GFX#servo-in-gecko]&lt;/div&gt;</summary>
		<author><name>Rillian</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Oxidation&amp;diff=1175625</id>
		<title>Oxidation</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Oxidation&amp;diff=1175625"/>
		<updated>2017-07-12T18:19:19Z</updated>

		<summary type="html">&lt;p&gt;Rillian: /* Rust components in Firefox */ Mark mp4 parser as completed&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Oxidation&#039;&#039;&#039; is a project to integrate [https://www.rust-lang.org/ Rust] code into Gecko and Firefox. &lt;br /&gt;
&lt;br /&gt;
Rust has been required on all platforms since Firefox 54, and we are actively adding new code modules written in Rust to Firefox and related programs.&lt;br /&gt;
&lt;br /&gt;
= Rust components in Firefox =&lt;br /&gt;
&lt;br /&gt;
Completed&lt;br /&gt;
* MP4 metadata parser: {{bug|1161350}} (shipped for desktop in Firefox 48)&lt;br /&gt;
* Replace uconv with encoding-rs: {{bug|1261841}} (shipping in Firefox 56)&lt;br /&gt;
In progress&lt;br /&gt;
* Replace stagefright&#039;s MP4 metadata parser with mp4parse crate {{bug|1161350}}&lt;br /&gt;
* URL parser: {{bug|url-oxidation}}&lt;br /&gt;
* CSS style calculation (from Servo): {{bug|stylo}}&lt;br /&gt;
* WebM demuxer: {{bug|1267492}}&lt;br /&gt;
* WebRender (from Servo): {{bug|webrender}}&lt;br /&gt;
* Audio remoting for Linux: {{bug|1362220}}&lt;br /&gt;
* SDP parsing in WebRTC {{bug|1365792}}&lt;br /&gt;
Proposed&lt;br /&gt;
* Replace the XML parser&lt;br /&gt;
* Replace the preferences module: {{bug|1379383}}&lt;br /&gt;
* Replace the telemetry module(?)&lt;br /&gt;
* Share media playback stack with Servo(?)&lt;br /&gt;
* Replace DOM serializers (XML, HTML for Save As.., plain text)&lt;br /&gt;
&lt;br /&gt;
= Rust components outside Firefox =&lt;br /&gt;
&lt;br /&gt;
Completed&lt;br /&gt;
* GeckoDriver - WebDriver implementation for Firefox integrated via marionette protocol ({{bug|1340637}}) released as a standalone binary ([https://github.com/mozilla/geckodriver/releases releases])&lt;br /&gt;
&lt;br /&gt;
= Documentation =&lt;br /&gt;
&lt;br /&gt;
* [https://developer.mozilla.org/en-US/Firefox/Building_Firefox_with_Rust_code Developer Documentation]&lt;br /&gt;
* [https://gecko.readthedocs.io/en/latest/build/buildsystem/rust.html Build System Documentation]&lt;br /&gt;
&lt;br /&gt;
= Blockers and obstacles =&lt;br /&gt;
== Raw Rust code (lives in m-c) blockers ==&lt;br /&gt;
&lt;br /&gt;
* Top-level metabug {{bug|oxidation}}&lt;br /&gt;
* {{done|}} Android support {{bug|1220307}}&lt;br /&gt;
** Though Android still not a Tier-1 Rust platform: https://forge.rust-lang.org/platform-support.html&lt;br /&gt;
* Linux distro support for Rust [https://internals.rust-lang.org/t/perfecting-rust-packaging/2623]&lt;br /&gt;
* {{done|}} Need to improve call stacks {{bug|1268328 }}&lt;br /&gt;
&lt;br /&gt;
== Cargo / GitHub blockers ==&lt;br /&gt;
&lt;br /&gt;
* {{done|}} Tracking bug {{bug|1231764}}&lt;br /&gt;
* Improve working with vendored Cargo crates [https://github.com/rust-lang/cargo/issues/1926] [https://github.com/rust-lang/cargo/issues/2212]&lt;br /&gt;
&lt;br /&gt;
== Rust / Cargo nice-to-haves ==&lt;br /&gt;
&lt;br /&gt;
* {{done|}} Per-crate integer overflow checking [https://github.com/rust-lang/cargo/issues/2262]&lt;br /&gt;
* Artifact caching [https://github.com/rust-lang/cargo/issues/1997]&lt;br /&gt;
&lt;br /&gt;
== Things blocking new components from being written in Rust ==&lt;br /&gt;
&lt;br /&gt;
* Lack of Mozilla-wide Rust training for engineers&lt;br /&gt;
* Lack of IPC/IPDL integration (e.g. generated Rust bindings)&lt;br /&gt;
* Slow compile times&lt;br /&gt;
&lt;br /&gt;
= Meetings =&lt;br /&gt;
&lt;br /&gt;
* Mozlando [https://github.com/servo/servo/wiki/Mozlando-Oxidation]&lt;br /&gt;
* Oxidation Nov. 2015 [https://github.com/servo/servo/wiki/Oxidation-2015-11-05]&lt;br /&gt;
* Mozlandia [https://github.com/servo/servo/wiki/Mozlandia-Rust-In-Gecko]&lt;br /&gt;
* Whistler [https://github.com/servo/servo/wiki/Whistler-GFX#servo-in-gecko]&lt;/div&gt;</summary>
		<author><name>Rillian</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Release_Management/Calendar&amp;diff=1175532</id>
		<title>Release Management/Calendar</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Release_Management/Calendar&amp;diff=1175532"/>
		<updated>2017-07-11T18:32:28Z</updated>

		<summary type="html">&lt;p&gt;Rillian: /* Future branch dates */ Remove the obsolete Aurora column&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
This schedule is based on the current [[RapidRelease]] plan. Future dates may change if the process changes.  Code is not always released to users on the same day as the branch migration.  The release to users may be a few days later, to allow for manual testing and sign-off.&lt;br /&gt;
&lt;br /&gt;
== Calendars ==&lt;br /&gt;
&lt;br /&gt;
This wiki page may not always have the most current information. Please refer to one of the following calendars for up-to-date scheduling:&lt;br /&gt;
&lt;br /&gt;
* [https://www.google.com/calendar/embed?src=mozilla.com_2d37383433353432352d3939%40resource.calendar.google.com Firefox Merge/Release Dates] ([https://www.google.com/calendar/ical/mozilla.com_2d37383433353432352d3939%40resource.calendar.google.com/public/basic.ics ICS for Thunderbird/Lightning or your calendar app]) (low noise)&lt;br /&gt;
* [https://www.google.com/calendar/embed?src=bW96aWxsYS5jb21fZGJxODRhbnI5aTh0Y25taGFiYXRzdHY1Y29AZ3JvdXAuY2FsZW5kYXIuZ29vZ2xlLmNvbQ Firefox Merge/Release Full Scheduling Calendar] ([https://calendar.google.com/calendar/ical/mozilla.com_dbq84anr9i8tcnmhabatstv5co%40group.calendar.google.com/public/basic.ics ICS]) (highly detailed - not up to date)&lt;br /&gt;
&lt;br /&gt;
== Future branch dates ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!quarter ||merge date ||central ||beta ||release date ||release || ESR&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;1&amp;quot;|Q3&lt;br /&gt;
!2017-08-02&lt;br /&gt;
|Firefox 57||Firefox 56&lt;br /&gt;
!2017-08-08&lt;br /&gt;
|Firefox 55&lt;br /&gt;
|Firefox 52.3&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;2&amp;quot;|Q4&lt;br /&gt;
!2017-09-20&lt;br /&gt;
|Firefox 58||Firefox 57&lt;br /&gt;
!2017-09-26&lt;br /&gt;
|Firefox 56&lt;br /&gt;
|Firefox 52.4&lt;br /&gt;
|-&lt;br /&gt;
!2017-11-13&lt;br /&gt;
|Firefox 59||Firefox 58&lt;br /&gt;
!2017-11-14&lt;br /&gt;
|Firefox 57&lt;br /&gt;
|Firefox 52.5&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;2&amp;quot;|Q1&lt;br /&gt;
!2018-01-15&lt;br /&gt;
|Firefox 60||Firefox 59&lt;br /&gt;
!2018-01-16&lt;br /&gt;
|Firefox 58&lt;br /&gt;
|Firefox 52.6&lt;br /&gt;
|-&lt;br /&gt;
!2018-03-05&lt;br /&gt;
|Firefox 61||Firefox 60&lt;br /&gt;
!2018-03-06&lt;br /&gt;
|Firefox 59&lt;br /&gt;
|Firefox 52.7; 59.0&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;2&amp;quot;|Q2&lt;br /&gt;
!2018-04-30&lt;br /&gt;
|Firefox 62||Firefox 61&lt;br /&gt;
!2018-05-01&lt;br /&gt;
|Firefox 60&lt;br /&gt;
|Firefox 52.8; 59.1&lt;br /&gt;
|-&lt;br /&gt;
!2018-06-25&lt;br /&gt;
|Firefox 63||Firefox 62&lt;br /&gt;
!2018-06-26&lt;br /&gt;
|Firefox 61&lt;br /&gt;
|Firefox 59.2&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;1&amp;quot;|Q3&lt;br /&gt;
!2018-08-20&lt;br /&gt;
|Firefox 64||Firefox 63&lt;br /&gt;
!2018-08-21&lt;br /&gt;
|Firefox 62&lt;br /&gt;
|Firefox 59.3&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;2&amp;quot;|Q4&lt;br /&gt;
!2018-10-15&lt;br /&gt;
|Firefox 65||Firefox 64&lt;br /&gt;
!2018-10-16&lt;br /&gt;
|Firefox 63&lt;br /&gt;
|Firefox 59.4&lt;br /&gt;
|-&lt;br /&gt;
!2018-11-26&lt;br /&gt;
|Firefox 66||Firefox 65&lt;br /&gt;
!2018-11-27&lt;br /&gt;
|Firefox 64&lt;br /&gt;
|Firefox 59.5&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Note that the merge from beta to release happens ahead of time (usually on the Mon/Tue a week before the release date). [[Release_Management/TeamWiki|Release manager list]]&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Past branch dates ==&lt;br /&gt;
More details on contents of releases can be found in [https://en.wikipedia.org/wiki/Firefox_release_history Wikipedia: Firefox release history].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!merge date||central||aurora||beta&lt;br /&gt;
!release date||release||ESR&lt;br /&gt;
|-&lt;br /&gt;
!2017-06-12&lt;br /&gt;
|Firefox 56||n/a||Firefox 55&lt;br /&gt;
!2017-06-13&lt;br /&gt;
|Firefox 54&lt;br /&gt;
|Firefox 52.2&lt;br /&gt;
|-&lt;br /&gt;
!2017-04-18&lt;br /&gt;
|Firefox 55||n/a||Firefox 54&lt;br /&gt;
!2017-04-19&lt;br /&gt;
|Firefox 53&lt;br /&gt;
|Firefox 45.9; 52.1&lt;br /&gt;
|-&lt;br /&gt;
!2017-03-06&lt;br /&gt;
|Firefox 55||Firefox 54||Firefox 53&lt;br /&gt;
!2017-03-07&lt;br /&gt;
|Firefox 52&lt;br /&gt;
|Firefox 45.8; 52.0&lt;br /&gt;
|-&lt;br /&gt;
!2017-01-23&lt;br /&gt;
|Firefox 54||Firefox 53||Firefox 52&lt;br /&gt;
!2017-01-24&lt;br /&gt;
|Firefox 51&lt;br /&gt;
|Firefox 45.7&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
!2016-12-13&lt;br /&gt;
|Firefox 50.1.0&lt;br /&gt;
|Firefox 45.6&lt;br /&gt;
|-&lt;br /&gt;
!2016-11-14&lt;br /&gt;
|Firefox 53||Firefox 52||Firefox 51&lt;br /&gt;
!2016-11-15&lt;br /&gt;
|Firefox 50&lt;br /&gt;
|Firefox 45.5&lt;br /&gt;
|-&lt;br /&gt;
!2016-09-19&lt;br /&gt;
|Firefox 52||Firefox 51||Firefox 50&lt;br /&gt;
!2016-09-20&lt;br /&gt;
|Firefox 49&lt;br /&gt;
|Firefox 45.4&lt;br /&gt;
|-&lt;br /&gt;
!2016-08-01&lt;br /&gt;
|Firefox 51||Firefox 50||Firefox 49&lt;br /&gt;
!2016-08-02&lt;br /&gt;
|Firefox 48&lt;br /&gt;
|Firefox 45.3&lt;br /&gt;
|-&lt;br /&gt;
!2016-06-06&lt;br /&gt;
|Firefox 50||Firefox 49||Firefox 48&lt;br /&gt;
!2016-06-07&lt;br /&gt;
|Firefox 47&lt;br /&gt;
|Firefox 45.2&lt;br /&gt;
|-&lt;br /&gt;
!2016-04-25&lt;br /&gt;
|Firefox 49||Firefox 48||Firefox 47&lt;br /&gt;
!2016-04-26&lt;br /&gt;
|Firefox 46&lt;br /&gt;
|Firefox 38.8; 45.1&lt;br /&gt;
|-&lt;br /&gt;
!2016-03-07&lt;br /&gt;
|Firefox 48||Firefox 47||Firefox 46&lt;br /&gt;
!2016-03-08&lt;br /&gt;
|Firefox 45&lt;br /&gt;
|Firefox 38.7; 45.0&lt;br /&gt;
|-&lt;br /&gt;
!2016-01-25&lt;br /&gt;
|Firefox 47||Firefox 46||Firefox 45&lt;br /&gt;
!2016-01-26&lt;br /&gt;
|Firefox 44&lt;br /&gt;
|Firefox 38.6&lt;br /&gt;
|-&lt;br /&gt;
!2015-12-14&lt;br /&gt;
|Firefox 46||Firefox 45||Firefox 44&lt;br /&gt;
!2015-12-15&lt;br /&gt;
|Firefox 43&lt;br /&gt;
|Firefox 38.5&lt;br /&gt;
|-&lt;br /&gt;
!2015-10-29&lt;br /&gt;
|Firefox 45||Firefox 44||Firefox 43&lt;br /&gt;
!2015-11-03&lt;br /&gt;
|Firefox 42&lt;br /&gt;
|Firefox 38.4&lt;br /&gt;
|-&lt;br /&gt;
!2015-09-21&lt;br /&gt;
|Firefox 44||Firefox 43||Firefox 42&lt;br /&gt;
!2015-09-22&lt;br /&gt;
|Firefox 41&lt;br /&gt;
|Firefox 38.3&lt;br /&gt;
|-&lt;br /&gt;
!2015-08-10&lt;br /&gt;
|Firefox 43||Firefox 42||Firefox 41&lt;br /&gt;
!2015-08-11&lt;br /&gt;
|Firefox 40&lt;br /&gt;
|Firefox 38.2&lt;br /&gt;
|-&lt;br /&gt;
!2015-06-29&lt;br /&gt;
|Firefox 42||Firefox 41||Firefox 40&lt;br /&gt;
!2015-06-30&lt;br /&gt;
|Firefox 39&lt;br /&gt;
|Firefox 31.8; 38.1&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
| || || &lt;br /&gt;
!2015-06-02&lt;br /&gt;
|Firefox 38.0.5&lt;br /&gt;
|-&lt;br /&gt;
!2015-05-11*&lt;br /&gt;
|Firefox 41||Firefox 40||Firefox 39&lt;br /&gt;
!2015-05-12*&lt;br /&gt;
|Firefox 38&lt;br /&gt;
|Firefox 31.7; 38.0&lt;br /&gt;
|-&lt;br /&gt;
!2015-03-30*&lt;br /&gt;
|Firefox 40||Firefox 39||Firefox 38&lt;br /&gt;
!2015-03-31*&lt;br /&gt;
|Firefox 37&lt;br /&gt;
|Firefox 31.6&lt;br /&gt;
|-&lt;br /&gt;
!2015-02-23&lt;br /&gt;
|Firefox 39||Firefox 38||Firefox 37&lt;br /&gt;
!2015-02-24&lt;br /&gt;
|Firefox 36&lt;br /&gt;
|Firefox 31.5&lt;br /&gt;
|-&lt;br /&gt;
!2015-01-12*&lt;br /&gt;
|Firefox 38||Firefox 37||Firefox 36&lt;br /&gt;
!2015-01-13*&lt;br /&gt;
|Firefox 35&lt;br /&gt;
|Firefox 31.4&lt;br /&gt;
|-&lt;br /&gt;
!2014-11-28*&lt;br /&gt;
|Firefox 37||Firefox 36||Firefox 35&lt;br /&gt;
!2014-12-01*&lt;br /&gt;
|Firefox 34&lt;br /&gt;
|Firefox 31.3&lt;br /&gt;
|-&lt;br /&gt;
!2014-10-13 &lt;br /&gt;
|Firefox 36||Firefox 35||Firefox 34&lt;br /&gt;
!2014-10-14&lt;br /&gt;
|Firefox 33&lt;br /&gt;
|Firefox 31.2&lt;br /&gt;
|-&lt;br /&gt;
!2014-09-02*&lt;br /&gt;
|Firefox 35||Firefox 34||Firefox 33&lt;br /&gt;
!2014-09-02&lt;br /&gt;
|Firefox 32&lt;br /&gt;
|Firefox 24.8; 31.1&lt;br /&gt;
|-&lt;br /&gt;
!2014-07-21&lt;br /&gt;
|Firefox 34||Firefox 33||Firefox 32&lt;br /&gt;
!2014-07-22&lt;br /&gt;
|Firefox 31&lt;br /&gt;
|Firefox 24.7; 31.0&lt;br /&gt;
|-&lt;br /&gt;
!2014-06-09&lt;br /&gt;
|Firefox 33||Firefox 32||Firefox 31&lt;br /&gt;
!2014-06-10&lt;br /&gt;
|Firefox 30&lt;br /&gt;
|Firefox 24.6&lt;br /&gt;
|-&lt;br /&gt;
!2014-04-28&lt;br /&gt;
|Firefox 32||Firefox 31||Firefox 30&lt;br /&gt;
!2014-04-29&lt;br /&gt;
|Firefox 29&lt;br /&gt;
|Firefox 24.5&lt;br /&gt;
|-&lt;br /&gt;
!2014-03-17&lt;br /&gt;
|Firefox 31||Firefox 30||Firefox 29&lt;br /&gt;
!2014-03-18&lt;br /&gt;
|Firefox 28&lt;br /&gt;
|Firefox 24.4&lt;br /&gt;
|-&lt;br /&gt;
!2014-02-03*&lt;br /&gt;
|Firefox 30||Firefox 29||Firefox 28&lt;br /&gt;
!2014-02-04*&lt;br /&gt;
|Firefox 27&lt;br /&gt;
|Firefox 24.3&lt;br /&gt;
|-&lt;br /&gt;
!2013-12-09&lt;br /&gt;
|Firefox 29||Firefox 28||Firefox 27&lt;br /&gt;
!2013-12-10&lt;br /&gt;
|Firefox 26&lt;br /&gt;
|Firefox 24.2&lt;br /&gt;
|-&lt;br /&gt;
!2013-10-28&lt;br /&gt;
|Firefox 28||Firefox 27||Firefox 26&lt;br /&gt;
!2013-10-29&lt;br /&gt;
|Firefox 25&lt;br /&gt;
|Firefox 17.0.10; 24.1&lt;br /&gt;
|-&lt;br /&gt;
!2013-09-16&lt;br /&gt;
|Firefox 27||Firefox 26||Firefox 25&lt;br /&gt;
!2013-09-17&lt;br /&gt;
|Firefox 24&lt;br /&gt;
|Firefox 17.0.9; 24.0&lt;br /&gt;
|-&lt;br /&gt;
!2013-08-05&lt;br /&gt;
|Firefox 26||Firefox 25||Firefox 24&lt;br /&gt;
!2013-08-06&lt;br /&gt;
|Firefox 23&lt;br /&gt;
|Firefox 17.0.8&lt;br /&gt;
|-&lt;br /&gt;
!2013-06-24&lt;br /&gt;
|Firefox 25||Firefox 24||Firefox 23&lt;br /&gt;
!2013-06-25&lt;br /&gt;
|Firefox 22&lt;br /&gt;
|Firefox 17.0.7&lt;br /&gt;
|-&lt;br /&gt;
!2013-05-13&lt;br /&gt;
|Firefox 24||Firefox 23||Firefox 22&lt;br /&gt;
!2013-05-14&lt;br /&gt;
|Firefox 21&lt;br /&gt;
|Firefox 17.0.6&lt;br /&gt;
|-&lt;br /&gt;
!2013-04-01&lt;br /&gt;
|Firefox 23||Firefox 22||Firefox 21&lt;br /&gt;
!2013-04-02&lt;br /&gt;
|Firefox 20&lt;br /&gt;
|Firefox 17.0.5&lt;br /&gt;
|-&lt;br /&gt;
!2013-02-19*&lt;br /&gt;
|Firefox 22||Firefox 21||Firefox 20&lt;br /&gt;
!2013-02-19&lt;br /&gt;
|Firefox 19&lt;br /&gt;
|Firefox 17.0.3&lt;br /&gt;
|-&lt;br /&gt;
!2013-01-07&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Firefox 21||Firefox 20||Firefox 19&lt;br /&gt;
!2013-01-08&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|Firefox 18&lt;br /&gt;
|Firefox 10.0.12; 17.0.2&lt;br /&gt;
|-&lt;br /&gt;
!2012-11-19&lt;br /&gt;
|Firefox 20||Firefox 19||Firefox 18&lt;br /&gt;
!2012-11-20&lt;br /&gt;
|Firefox 17&lt;br /&gt;
|Firefox 10.0.11; 17.0&lt;br /&gt;
|-&lt;br /&gt;
!2012-10-08&lt;br /&gt;
|Firefox 19&lt;br /&gt;
|Firefox 18&lt;br /&gt;
|Firefox 17&lt;br /&gt;
!2012-10-09&lt;br /&gt;
|Firefox 16&lt;br /&gt;
|Firefox 10.0.8&lt;br /&gt;
|-&lt;br /&gt;
!2012-08-27&lt;br /&gt;
|Firefox 18&lt;br /&gt;
|Firefox 17&lt;br /&gt;
|Firefox 16&lt;br /&gt;
!2012-08-28&lt;br /&gt;
|Firefox 15&lt;br /&gt;
|Firefox 10.0.7&lt;br /&gt;
|-&lt;br /&gt;
!2012-07-16&lt;br /&gt;
|Firefox 17&lt;br /&gt;
|Firefox 16&lt;br /&gt;
|Firefox 15&lt;br /&gt;
!2012-07-17&lt;br /&gt;
|Firefox 14&lt;br /&gt;
|Firefox 10.0.6&lt;br /&gt;
|-&lt;br /&gt;
!2012-06-05&lt;br /&gt;
|Firefox 16&lt;br /&gt;
|Firefox 15&lt;br /&gt;
|Firefox 14&lt;br /&gt;
!2012-06-05&lt;br /&gt;
|Firefox 13&lt;br /&gt;
|Firefox 10.0.5&lt;br /&gt;
|-&lt;br /&gt;
!2012-04-24&lt;br /&gt;
|Firefox 15&lt;br /&gt;
|Firefox 14&lt;br /&gt;
|Firefox 13&lt;br /&gt;
!2012-04-24&lt;br /&gt;
|Firefox 12&lt;br /&gt;
|Firefox 10.0.4&lt;br /&gt;
|-&lt;br /&gt;
!2012-03-13&lt;br /&gt;
|Firefox 14&lt;br /&gt;
|Firefox 13&lt;br /&gt;
|Firefox 12&lt;br /&gt;
!2012-03-13&lt;br /&gt;
|Firefox 11&lt;br /&gt;
|Firefox 10.0.3&lt;br /&gt;
|-&lt;br /&gt;
!2012-01-31&lt;br /&gt;
|Firefox 13&lt;br /&gt;
|Firefox 12&lt;br /&gt;
|Firefox 11&lt;br /&gt;
!2012-01-31&lt;br /&gt;
|Firefox 10&lt;br /&gt;
|Firefox 10.0&lt;br /&gt;
|-&lt;br /&gt;
!2011-12-20&lt;br /&gt;
|Firefox 12&lt;br /&gt;
|Firefox 11&lt;br /&gt;
|Firefox 10&lt;br /&gt;
!2011-12-20&lt;br /&gt;
|Firefox 9&lt;br /&gt;
|-&lt;br /&gt;
!2011-11-08&lt;br /&gt;
|Firefox 11&lt;br /&gt;
|Firefox 10&lt;br /&gt;
|Firefox 9&lt;br /&gt;
!2011-11-08&lt;br /&gt;
|Firefox 8&lt;br /&gt;
|-&lt;br /&gt;
!2011-09-27&lt;br /&gt;
|Firefox 10&lt;br /&gt;
|Firefox 9&lt;br /&gt;
|Firefox 8&lt;br /&gt;
!2011-09-27&lt;br /&gt;
|Firefox 7&lt;br /&gt;
|-&lt;br /&gt;
!2011-08-16&lt;br /&gt;
|Firefox 9&lt;br /&gt;
|Firefox 8&lt;br /&gt;
|Firefox 7&lt;br /&gt;
!2011-08-16&lt;br /&gt;
|Firefox 6&lt;br /&gt;
|-&lt;br /&gt;
!2011-07-05&lt;br /&gt;
|Firefox 8||Firefox 7||Firefox 6&lt;br /&gt;
!&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
| || || &lt;br /&gt;
!2011-06-21&lt;br /&gt;
|Firefox 5&lt;br /&gt;
|-&lt;br /&gt;
!2011-05-24&lt;br /&gt;
|Firefox 7||Firefox 6|| &lt;br /&gt;
|-&lt;br /&gt;
!2011-05-17&lt;br /&gt;
| || ||Firefox 5&lt;br /&gt;
|-&lt;br /&gt;
!2011-04-12&lt;br /&gt;
|Firefox 6||Firefox 5 &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;Some release dates and merge dates are rescheduled to avoid conflicts with holidays.&lt;br /&gt;
&lt;br /&gt;
Notes:&lt;br /&gt;
* Irregular scheduling starting 2016.&lt;br /&gt;
* Six week schedule from 2011 to 2015 (with some dates delayed to avoid conflicts with holidays).&lt;br /&gt;
* Firefox 5 was on a slightly different schedule. It spent five weeks each on Aurora and Beta while later releases spent six weeks on each branch.&lt;br /&gt;
&lt;br /&gt;
[[category:Release_Management|R]]&lt;/div&gt;</summary>
		<author><name>Rillian</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Oxidation&amp;diff=1175133</id>
		<title>Oxidation</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Oxidation&amp;diff=1175133"/>
		<updated>2017-07-05T21:36:17Z</updated>

		<summary type="html">&lt;p&gt;Rillian: Clean up current status&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Oxidation&#039;&#039;&#039; is a project to integrate [https://www.rust-lang.org/ Rust] code into Gecko and Firefox.&lt;br /&gt;
&lt;br /&gt;
* Tracking: {{bug|oxidation}}&lt;br /&gt;
* [https://developer.mozilla.org/en-US/Firefox/Building_Firefox_with_Rust_code Developer Documentation]&lt;br /&gt;
* [https://gecko.readthedocs.io/en/latest/build/buildsystem/rust.html Build System Documentation]&lt;br /&gt;
&lt;br /&gt;
Which components will use Rust code?&lt;br /&gt;
&lt;br /&gt;
* Completed&lt;br /&gt;
** URL parser: {{bug|1151899}}&lt;br /&gt;
** Replace uconv with encoding-rs: {{bug|1261841}}&lt;br /&gt;
* In progress&lt;br /&gt;
** CSS style calculation (from Servo): {{bug|stylo}}&lt;br /&gt;
** WebM demuxer: {{bug|1267492}}&lt;br /&gt;
** WebRender (from Servo): {{bug|webrender}}&lt;br /&gt;
** Audio remoting for Linux: {{bug|1362220}}&lt;br /&gt;
** SDP parsing in WebRTC {{bug|1365792}}&lt;br /&gt;
* Proposed&lt;br /&gt;
** Replace the XML parser&lt;br /&gt;
** Replace the preferences module&lt;br /&gt;
** Replace the telemetry module(?)&lt;br /&gt;
** Share media playback stack with Servo(?)&lt;br /&gt;
&lt;br /&gt;
What is the high-level status of things?&lt;br /&gt;
* We are actively adding new code modules written in Rust to Firefox.&lt;br /&gt;
* The MP4 metadata parser is enabled and shipped on release!&lt;br /&gt;
* Rust has been *required* on all platforms since Firefox 54.&lt;br /&gt;
&lt;br /&gt;
== Raw Rust code (lives in m-c) blockers ==&lt;br /&gt;
&lt;br /&gt;
* Top-level metabug {{bug|oxidation}}&lt;br /&gt;
* Android support {{bug|1220307}}&lt;br /&gt;
* Linux distro support for Rust [https://internals.rust-lang.org/t/perfecting-rust-packaging/2623]&lt;br /&gt;
* Need to improve call stacks {{bug|1268328 }}&lt;br /&gt;
&lt;br /&gt;
== Cargo / GitHub blockers ==&lt;br /&gt;
&lt;br /&gt;
* Tracking bug {{bug|1231764}}&lt;br /&gt;
* Improve working with vendored Cargo crates [https://github.com/rust-lang/cargo/issues/1926] [https://github.com/rust-lang/cargo/issues/2212]&lt;br /&gt;
&lt;br /&gt;
== Rust / Cargo nice-to-haves ==&lt;br /&gt;
&lt;br /&gt;
* Per-crate integer overflow checking [https://github.com/rust-lang/cargo/issues/2262]&lt;br /&gt;
* Artifact caching [https://github.com/rust-lang/cargo/issues/1997]&lt;br /&gt;
&lt;br /&gt;
== Meetings ==&lt;br /&gt;
&lt;br /&gt;
* Mozlando [https://github.com/servo/servo/wiki/Mozlando-Oxidation]&lt;br /&gt;
* Oxidation Nov. 2015 [https://github.com/servo/servo/wiki/Oxidation-2015-11-05]&lt;br /&gt;
* Mozlandia [https://github.com/servo/servo/wiki/Mozlandia-Rust-In-Gecko]&lt;br /&gt;
* Whistler [https://github.com/servo/servo/wiki/Whistler-GFX#servo-in-gecko]&lt;/div&gt;</summary>
		<author><name>Rillian</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Oxidation&amp;diff=1175132</id>
		<title>Oxidation</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Oxidation&amp;diff=1175132"/>
		<updated>2017-07-05T21:28:30Z</updated>

		<summary type="html">&lt;p&gt;Rillian: Add bug number for the SDP parser work.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Oxidation&#039;&#039;&#039; is a project to integrate [https://www.rust-lang.org/ Rust] code into Gecko and Firefox.&lt;br /&gt;
&lt;br /&gt;
* Tracking: {{bug|oxidation}}&lt;br /&gt;
* [https://developer.mozilla.org/en-US/Firefox/Building_Firefox_with_Rust_code Developer Documentation]&lt;br /&gt;
&lt;br /&gt;
Which components will use Rust code?&lt;br /&gt;
&lt;br /&gt;
* Completed&lt;br /&gt;
** URL parser: {{bug|1151899}}&lt;br /&gt;
** Replace uconv with encoding-rs: {{bug|1261841}}&lt;br /&gt;
* In progress&lt;br /&gt;
** CSS style calculation (from Servo): {{bug|stylo}}&lt;br /&gt;
** WebM demuxer: {{bug|1267492}}&lt;br /&gt;
** WebRender (from Servo): {{bug|webrender}}&lt;br /&gt;
** Audio remoting for Linux: {{bug|1362220}}&lt;br /&gt;
** SDP parsing in WebRTC {{bug|1365792}}&lt;br /&gt;
* Proposed&lt;br /&gt;
** Replace the XML parser&lt;br /&gt;
** Replace the preferences module&lt;br /&gt;
** Replace the telemetry module(?)&lt;br /&gt;
&lt;br /&gt;
What is the high-level status of things?&lt;br /&gt;
* Build system support for Rust is available, but not required by default.&lt;br /&gt;
* The MP4 metadata parser is enabled and shipped on release!&lt;br /&gt;
* Rust code is not currently enabled on Android.&lt;br /&gt;
* Rust has been *required* on all platforms since Firefox 54.&lt;br /&gt;
&lt;br /&gt;
== Raw Rust code (lives in m-c) blockers ==&lt;br /&gt;
&lt;br /&gt;
* Top-level metabug {{bug|oxidation}}&lt;br /&gt;
* Android support {{bug|1220307}}&lt;br /&gt;
* Linux distro support for Rust [https://internals.rust-lang.org/t/perfecting-rust-packaging/2623]&lt;br /&gt;
* Need to improve call stacks {{bug|1268328 }}&lt;br /&gt;
&lt;br /&gt;
== Cargo / GitHub blockers ==&lt;br /&gt;
&lt;br /&gt;
* Tracking bug {{bug|1231764}}&lt;br /&gt;
* Vendoring Cargo crates [https://github.com/rust-lang/cargo/issues/1926] [https://github.com/rust-lang/cargo/issues/2212] [https://github.com/rust-lang/cargo/pull/2361]&lt;br /&gt;
* Two-way source sync (design still in progress) [[https://groups.google.com/forum/#!topic/mozilla.dev.servo/qESJoCIsPU8 Discussion]&lt;br /&gt;
&lt;br /&gt;
== Rust / Cargo nice-to-haves ==&lt;br /&gt;
&lt;br /&gt;
* Per-crate integer overflow checking [https://github.com/rust-lang/cargo/issues/2262]&lt;br /&gt;
* Artifact caching [https://github.com/rust-lang/cargo/issues/1997]&lt;br /&gt;
&lt;br /&gt;
== Meetings ==&lt;br /&gt;
&lt;br /&gt;
* Mozlando [https://github.com/servo/servo/wiki/Mozlando-Oxidation]&lt;br /&gt;
* Oxidation Nov. 2015 [https://github.com/servo/servo/wiki/Oxidation-2015-11-05]&lt;br /&gt;
* Mozlandia [https://github.com/servo/servo/wiki/Mozlandia-Rust-In-Gecko]&lt;br /&gt;
* Whistler [https://github.com/servo/servo/wiki/Whistler-GFX#servo-in-gecko]&lt;/div&gt;</summary>
		<author><name>Rillian</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=MOSS/Foundational_Technology/Projects_We_Use&amp;diff=1162449</id>
		<title>MOSS/Foundational Technology/Projects We Use</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=MOSS/Foundational_Technology/Projects_We_Use&amp;diff=1162449"/>
		<updated>2017-02-09T17:24:24Z</updated>

		<summary type="html">&lt;p&gt;Rillian: Fix formatting&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is an incomplete list of the free software and open source projects Mozilla relies upon. As a starting point, it lists each project along with a short statement of how we depend on it. Where practical it would also be helpful to identify a Mozillian most closely associated with our use of each project.&lt;br /&gt;
&lt;br /&gt;
Note that presence on this list isn&#039;t the same as, nor is it a prerequisite for, applying for the MOSS &amp;quot;Foundational Technology&amp;quot; track - projects have to make an application using the process on the [[MOSS/Foundational Technology|Foundational Technology]] page.&lt;br /&gt;
&lt;br /&gt;
This is a work in progress - please contribute to this list.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Project !! Description !! Contact within Mozilla&lt;br /&gt;
|-&lt;br /&gt;
| [https://angularjs.org/ angular.js]           || Used by A-Team for web apps (eg Treeherder) || Member of Jonathan Griffin&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [https://httpd.apache.org Apache Server]      || Used by A-Team for web apps || Member of Jonathan Griffin&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/ansible/ansible Ansible]  || Used by IT (netops) and A-Team to manage deployments || jbarnell , Webops, GPS?&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/h4writer/arewefastyet AreWeFastYet]  || Compare JS performance across JS engines and platforms || Hannes Verschore&lt;br /&gt;
|-&lt;br /&gt;
| [https://atom.io/ Atom]                       || Used (either vanilla or e.g. as [https://github.com/Microsoft/vscode] ) by various developers ||&lt;br /&gt;
|-&lt;br /&gt;
| [https://babeljs.io/ BabelJS]                 || JavaScript compiler, Used by Gaia, TaskCluster team || Selena Deckelmann&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.isc.org/downloads/bind/ BIND] || DNS Server || Brian Hourigan&lt;br /&gt;
|-&lt;br /&gt;
| [https://pypi.python.org/pypi/bleach/ Bleach] || HTML sanitizing library that escapes or strips markup and attributes used by MDN and a bunch of Mozilla sites || Will Kahn-Greene&lt;br /&gt;
|-&lt;br /&gt;
| [https://pypi.python.org/pypi/blessings/ Blessings] || Terminal formatting lib used by mozilla-central build process || Erik Rose&lt;br /&gt;
|-&lt;br /&gt;
| [http://getbootstrap.com/ Bootstrap] || HTML/CSS/JS framework, used by many of Mozilla&#039;s sites. || Webdev&lt;br /&gt;
|-&lt;br /&gt;
| [http://brew.sh/ brew / Homebrew] || Mac OS X packaging system, used to install dev tools || Sam Penrose&lt;br /&gt;
|-&lt;br /&gt;
| [https://bro.org bro]                    || The Bro Network Security Monitor || Michal Purzynski&lt;br /&gt;
|-&lt;br /&gt;
| [http://browserify.org Browserify]                    || Build JS dependencies for the browser || mozilla-services (kinto.js)&lt;br /&gt;
|-&lt;br /&gt;
| [http://buildbot.net/ BuildBot]               || The base system currently in use for release || Dustin J. Mitchell&lt;br /&gt;
|-&lt;br /&gt;
| [http://bugzilla.org/ Bugzilla] (upstream)    || The base Bugzilla on that we customize for Mozilla&#039;s use || Mark Côté&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.celeryproject.org/ Celery] || Distributed task queue. Used by Treeherder and others. || Member of Jonathan Griffin&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [http://ckeditor.com/ CKEditor] || WYSIWYG editor on MDN || &lt;br /&gt;
|-&lt;br /&gt;
| [https://cmake.org/ CMake] || cross-platform family of tools designed to build, test and package software, lua_sandbox, lua_sandbox_extensions, hindsight, hindsight_admin || Mike Trinkala&lt;br /&gt;
|-&lt;br /&gt;
| [http://chaijs.com/ Chai] || JavaScript test and assertion library || Cloud Services, Tarek Ziade&#039;s team (kinto.js), Firefox Hello team&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.llvm.org Clang/LLVM]           || C/C++ compiler and infrastructure || Ehsan Akhgari &amp;amp; Sylvestre Ledru&lt;br /&gt;
|-&lt;br /&gt;
| [https://codemirror.net/ CodeMirror]           || Used in DevTools, [https://thimble.mozilla.org Thimble], and other online code tools || David Humphrey/Simon Wex&lt;br /&gt;
|-&lt;br /&gt;
| [https://pypi.python.org/pypi/cookiecutter/ Cookiecutter] || Templating system used to clone our [https://github.com/mozilla/sugardough Sugardough] Django template || Giorgos Logiotatidis&lt;br /&gt;
|-&lt;br /&gt;
| [https://conemu.github.io/ ConEmu] || Console emulator for Windows. Used by devs running Windows. || Ed Morley&lt;br /&gt;
|-&lt;br /&gt;
| [http://curl.haxx.se/ curl] || internet transfer tool and library, used by crashreporter and FirefoxOS || Daniel Stenberg&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.debian.org/ Debian] || Used on many developer boxes || Sylvestre Ledru or glandium&lt;br /&gt;
|-&lt;br /&gt;
| [http://deis.io Deis] || Open Source Heroku-like PaaS platform. Hosts www.mozilla.org, masterfirefoxos.mozilla.org, etc. || Member of Benjamin Sternthal&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [https://disconnect.me/trackerprotection Disconnect.me ] || Open, transparent, neutral Tracking Protection blocklist used in Firefox Private Browsing Windows || Marshall Erwin, Javaun Moradi, Francois Marier&lt;br /&gt;
|-&lt;br /&gt;
| [https://discourse.org Discourse] || [https://discourse.mozilla-community.org Community], [https://discourse.webmaker.org/ Webmaker], [https://discourse.mozilla-advocacy.org/ Advocacy], et al || [[IT/Community/WG/Discourse|Community Ops]] (Yousef Alam or Tanner Filip)&lt;br /&gt;
|-&lt;br /&gt;
| [https://djangoproject.com Django]     || Backend web framework used on many of our websites, including addons.mozilla.org, marketplace.mozilla.org, support.mozilla.org, Input, Snippets, MDN (Mozilla Developer Network), mozilla.org, Treeherder || Andy McKay and Jannis Leidel are (or have been) on the [https://www.djangoproject.com/foundation/ Django Software Foundation] board, Jannis is core team member&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.django-rest-framework.org Django REST framework]     || API framework. Used by various Mozilla sites including MDN, Firefox marketplace, mozilla.org, support.mozilla.com. || Andy McKay and Jannis Leidel&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/docker/docker Docker]     || Used by release engineering for Linux build and test containers and by ateam for managing test and production services. Used by many Mozilla websites as well such as addons.mozilla.org, marketplace.mozilla.org. (Plus docker-compose and docker machine) || Member of Selena Deckelmann&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.stack.nl/~dimitri/doxygen/ Doxygen] || tool for generating documentation from annotated sources, lua_sandbox || Mike Trinkala  &lt;br /&gt;
|-&lt;br /&gt;
| [https://eclipse.org/ Eclipse] || Integrated Development Environment used by many developers || —&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.elastic.co/products/elasticsearch elasticsearch] || Search engine for various web sites and analytics || Erik Rose (dxr), Kyle Lahnakoski (ActiveData) &lt;br /&gt;
|-&lt;br /&gt;
| [http://www.gnu.org/software/emacs/ emacs] || Programmable editor used by many developers || —&lt;br /&gt;
|-&lt;br /&gt;
| [http://eslint.org/ eslint] || Pluggable linting utiltity used by Firefox Hello, DevTools and Firefox Android || Mark Banner&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/ether/etherpad-lite Etherpad]     || Used for meeting notes, etc || JP Schneider&lt;br /&gt;
|-&lt;br /&gt;
| [https://ffmpeg.org/ ffmpeg] || Used for media decoding. || Jean-Yves Avenard&lt;br /&gt;
|-&lt;br /&gt;
| [https://flake8.readthedocs.org/ flake8] || Wrapper around Python linters. Used by Treeherder and others. || Member of Jonathan Griffin&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [http://flask.pocoo.org/ Flask]               || Python web framework || Erik Rose&lt;br /&gt;
|-&lt;br /&gt;
| [https://fortawesome.github.io/Font-Awesome/ Font Awesome] || Font and CSS toolkit, used by many of Mozilla&#039;s sites. || Webdev&lt;br /&gt;
|-&lt;br /&gt;
| [http://foundation.zurb.com/ Foundation Framework] || Responsive front-end framework, used by some Mozilla sites and add-ons || Luke Crouch&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org GCC]                      || C/C++ compiler and infrastructure || Nathan Froyd&lt;br /&gt;
|-&lt;br /&gt;
| [https://git-scm.com/ Git]                    || Version control system - https://git.mozilla.org || Unknown &lt;br /&gt;
|-&lt;br /&gt;
| [http://gunicorn.org/ gunicorn] || Python WSGI HTTP Server. Used by Treeherder, Socorro, Pontoon. || Webdev&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.freedesktop.org/wiki/Software/HarfBuzz/ HarfBuzz] || International text shaping engine used in Firefox/Servo || Platform team&lt;br /&gt;
|-&lt;br /&gt;
| [http://hunspell.sourceforge.net/ Hunspell]  || Spellchecking engine || Ehsan Akhgari&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/hunspell/hyphen/ Hyphen]  || Hyphenation library || Jonathan Kew&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/jkbrzt/httpie HTTPie]  || HTTP command-line client || Cloud Services (among many others), Tarek Ziade&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.inspircd.org/ inspircd]                 || Irc server used by mozilla || :ashish&lt;br /&gt;
|-&lt;br /&gt;
| [https://theintern.github.io/intern/ Intern]  || Intern is a complete test system for JavaScript designed to help you write and run consistent, high-quality test cases for your JavaScript libraries and applications.  || jrgm/vladikoff&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| [http://canonware.com/jemalloc/ jemalloc]     || Memory allocation library || We can ask glandium&lt;br /&gt;
|-&lt;br /&gt;
| [http://jenkins-ci.org/ Jenkins CI]                    || Continuous integration system used by WebQA and EE || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| [https://jquery.com/ jQuery] || JavaScript library, used by many of Mozilla&#039;s sites. || Webdev&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/tmpvar/jsdom jsdom] || DOM implementation in full JS || Test suites in Cloud Services, Tarek Ziade&#039;s team (kinto.js)&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/open-source-parsers/jsoncpp jsoncpp] || A C++ library for interacting with JSON, used by the crashreporter client and Socorro. || Gabriele Svelto&lt;br /&gt;
|-&lt;br /&gt;
| [https://kafka.apache.org/ Kafka] || Distributed transaction log, used for hg.mozilla.org replication. || gps&lt;br /&gt;
|-&lt;br /&gt;
| [http://kombu.readthedocs.org/ Kombu] || Messaging library for Python. Used by Treeherder and others. || Member of Jonathan Griffin&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| libbz2                                        || Compression library for .bz2 format || Julian Seward&lt;br /&gt;
|-&lt;br /&gt;
| libjpeg-turbo                                 || JPEG decoding library || Jeff Muizelaar &lt;br /&gt;
|-&lt;br /&gt;
| [http://www.libpng.org/pub/png/libpng.html libpng] || PNG decoding library || Jeff Muizelaar &lt;br /&gt;
|-&lt;br /&gt;
| libvpx (Google)                               || Library for support of Google’s VP* family of codecs || Tim Terriberry &lt;br /&gt;
|-&lt;br /&gt;
| Linux                                         || OS kernel used in Firefox OS || Unknown &lt;br /&gt;
|-&lt;br /&gt;
| LLVM || Compiler foundation for ASAN, static analysis tools, Rust || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| [https://lodash.com/ lodash] || JavaScript utility library, used by many of Mozilla&#039;s sites. || Webdev &amp;amp; Firefox Hello&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.lua.org/ Lua] ||  Lua is a powerful, efficient, lightweight, embeddable scripting language, lua_sandbox_extensions || Mike Trinkala&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/macvim-dev/macvim MacVim] || Mac wrapper around Vim || -&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.list.org/ Mailman]     || [https://mail.mozilla.org/listinfo Mailing lists] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.mediawiki.org/wiki/MediaWiki MediaWiki]     || You are reading this on a wiki || Sheeri Cabral&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.mercurial-scm.org/ Mercurial]    || Version control system and source code management || GPS &lt;br /&gt;
|-&lt;br /&gt;
| [https://www.meteor.com/ Meteor]    || Build Apps with Javascript - Used in MozDef&#039;s Web UI ||  MozDef Team in EIS&lt;br /&gt;
|-&lt;br /&gt;
| [http://mochajs.org/ Mocha] || JavaScript test runner || Cloud Services, Tarek Ziade&#039;s team (kinto.js); Firefox Hello team&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/kumar303/mohawk Mohawk] ||  Python library for Hawk HTTP authorization. Used by Treeherder and others. || Member of Jonathan Griffin&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [http://mozdef.com mozdef]                    || Security event monitoring and incident response || Jeff Bryner&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mingw.org/wiki/msys msys]         || Used to build Firefox on Windows. Note: It&#039;s likely best we support the newer MSYS2 project instead: https://github.com/msys2 || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.mysql.com/ MySQL]                || Open source relational DB used by many developers, including AMO, SUMO, Input, bugzilla, releng, adminstered by IT || Sheeri Cabral&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.nagios.org/ Nagios]              || IT management system. Used for notifications of system failures || Sheeri Cabral, Ashish V.&lt;br /&gt;
|-&lt;br /&gt;
| [http://netsniff-ng.org/ netsniff-ng]                    || Linux networking toolkit || Michal Purzynski&lt;br /&gt;
|-&lt;br /&gt;
| [https://neovim.io/ neovim] (nvim) || Next-generation vim code editor || Ralph Giles&lt;br /&gt;
|-&lt;br /&gt;
| nICEr                                         || Library for traversing firewalls || Unknown &lt;br /&gt;
|-&lt;br /&gt;
| [https://nixos.org NixOS]                     || Reproducible Linux distribution. Used by some developers || Nicolas B. Pierron&lt;br /&gt;
|-&lt;br /&gt;
| [https://nodejs.org Node.js]                  || JavaScript runtime for server side applications, command line utilities || Nick Desaulniers&lt;br /&gt;
|-&lt;br /&gt;
| nrappkit                                      || Toolkit for building standalone applications || Unknown &lt;br /&gt;
|-&lt;br /&gt;
| [http://nsis.sourceforge.net/Main_Page NSIS]  || Windows installer framework || Matt Howell&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/cisco/OpenH264 OpenH264] (Cisco)                              || H.264 video library || Unknown &lt;br /&gt;
|-&lt;br /&gt;
| [http://www.openLDAP.org/ OpenLDAP]                 || User management used by Infra || :jabba?&lt;br /&gt;
|-&lt;br /&gt;
| [http://openresty.org OpenResty]              || a fast web app server by extending nginx, used by cloudops || Benson Wong (mostlygeek)&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.openssh.com/ OpenSSH]                 || Remote server management, secure transport for Git and Mercurial || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| [http://openssl.org/ OpenSSL]                 || Cryptograpahy and TLS Toolkit || Nick Desaulniers&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.openstreetmap.org OpenStreetMap]     || Online/offline maps, used by the location service and on mozilla.org || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| [https://openvpn.net/ Openvpn]                 || VPN used by Infra || :jabba?&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/khaledhosny/ots OTS]      || OpenType sanitizer used by Firefox to protect against security bugs in underlying platforms related to malicious fonts || Jonathan Kew &lt;br /&gt;
|-&lt;br /&gt;
| [https://www.owasp.org/index.php/ZAP OWASP ZAP]                 || Web security testing tool used by security and QA teams || Simon Bennetts (psiinon)&lt;br /&gt;
|-&lt;br /&gt;
| [https://owncloud.org/ Owncloud]                 || Open platform to host your cloud under your control || Some communities have been using it to host files under their control (ask Nukeador)&lt;br /&gt;
|-&lt;br /&gt;
| [http://pandoc.org/ Pandoc] || universal document converter, lua_sandbox_extensions || Mike Trinkala  &lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/apache/parquet-cpp parquet-cpp] || C++ library to read and write the Apache Parquet columnar data format, lua_sandbox_extensions || Mike Trinkala&lt;br /&gt;
|-&lt;br /&gt;
| [https://pypi.python.org/pypi/parsimonious/ Parsimonious] || Parsing lib used by DXR and a few other sites (I think) || Erik Rose&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/mozilla/pdf.js PDF.js]                  || Used as the PDF Viewer in Firefox and Firefox OS || Brendan Dahl, Yury Delendik&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/PyCQA/pep8 pep8] || Python linter. Used by Treeherder and others. || Member of Jonathan Griffin&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.perl.org/ Perl]                  || Used by Bugzilla || Member of Jonathan Griffin&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [http://python-pillow.org/ pillow] || Python Imaging library || Member of Webcompat team&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/pypa/pip pip] || Python package tool. Used by all Python projects. || Erik Rose and Jannis Leidel, Jannis is core team member ([https://www.pypa.io/ PyPA])&lt;br /&gt;
|-&lt;br /&gt;
| [http://piwik.org/ Piwik] || Analytic software that gives you the control and respects privacy || Some communities have been using it to avoid GA analytics (Ask Nukeador)&lt;br /&gt;
|-&lt;br /&gt;
| [http://cmusphinx.sourceforge.net/ Pocketsphinx]       ||  Speech recognition toolkit embedded into Firefox OS|| André Natal&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.postgresql.org/ PostgreSQL]       || Open source relational DB used by many developers, adminstered by IT || Selena Deckelmann&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/PrismJS/prism Prism.js]       || Syntax highlighting on code samples on MDN || &lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/puppetlabs/puppet Puppet] || System administration tool || Member of Amy Rich&#039;s team, Corey Shield&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/pyflakes/pyflakes pyflakes] || Python linter. Used by Treeherder and others. || Member of Jonathan Griffin&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [http://pypy.org/ PyPy]                                        || Python language runtime. Used by Web Push service. || Cloud Services, esp. Ben Bangert&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/Pylons/pyramid/ Pyramid] || Python Web framework || Cloud Services team&lt;br /&gt;
|-&lt;br /&gt;
| [http://pytest.org/ pytest] || Python testing tool. Used by Treeherder and others. || Dave Hunt&lt;br /&gt;
|-&lt;br /&gt;
| Python                                        || Scripting language || [http://python.org/psf/ Python Software Foundation], Selena Deckelmann is a former board member&lt;br /&gt;
|-&lt;br /&gt;
| [https://pypi.python.org/pypi/pyelasticsearch/ pyelasticsearch] || Python client for elasticsearch || Erik Rose&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.rabbitmq.com/ RabbitMQ]          || Distributed Queue, used by Socorro, Pulse (all our publicly available build/test/commit information flows through this), Treeherder, addons.mozilla.org (with Celery), marketplace.mozilla.org (with Celery) || Selena Deckelmann&lt;br /&gt;
|-&lt;br /&gt;
| [http://http://rapidjson.org/ RapidJSON] ||  A fast JSON parser/generator for C++ with both SAX/DOM style API, lua_sandbox_extensions || Mike Trinkala&lt;br /&gt;
|-&lt;br /&gt;
| [http://facebook.github.io/react/index.html ReactJS] || Javascript library for building user interfaces. Used by Firefox Hello &amp;amp; DevTools || Mark Banner&lt;br /&gt;
|-&lt;br /&gt;
| [https://readthedocs.org/ Read the Docs]   || Hosted automatically-built documentation, used by Cloud Services and a wide variety of mozilla Github projects || Ben Bangert, Jannis Leidel, Gervase Markham&lt;br /&gt;
|-&lt;br /&gt;
| [http://redis.io/ Redis]         || Really fast data structure store, cache and message broker || Cloud Services Tarek Ziade&#039;s team, Loop Server (Hello) team&lt;br /&gt;
|-&lt;br /&gt;
| [http://python-requests.org/ Requests] || &amp;quot;Python HTTP Requests for Humans&amp;quot;. Used by many many Mozilla Python projects. || Member of Jonathan Griffin&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.reviewboard.org/ Review Board]   || The base of MozReview, the new review tool being developed to replace Splinter || Steven MacLeod, Mike Conley&lt;br /&gt;
|-&lt;br /&gt;
| [http://wordlist.aspell.net/ SCOWL]         || en-US word list used for spell checking. || ehsan&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.seleniumhq.org/ Selenium]         || Browser test driver || David Burns, Dave Hunt&lt;br /&gt;
|-&lt;br /&gt;
| [http://sinonjs.org/ Sinon] || JavaScript mock library || Cloud Services, Tarek Ziade&#039;s team (kinto.js); Firefox Hello team&lt;br /&gt;
|-&lt;br /&gt;
| [https://slimerjs.org/ SlimerJS]              || Scriptable browser, based on Gecko, used for functional tests in some few Mozilla projects  ( [[PluotSorbet]], some FxOS apps ? and others ?) || Myk Melez&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.sqlalchemy.org/ SQLAlchemy]] || Database Toolkit and ORM for Python || bhearsum&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.sqlite.org/ SQLite]              || File-based database || asuth&lt;br /&gt;
|-&lt;br /&gt;
| [http://learnboost.github.io/stylus/ Stylus]              || CSS Pre-processor on several sites || webdev&lt;br /&gt;
|-&lt;br /&gt;
| [https://subversion.apache.org/ Subversion]   || https://svn.mozilla.org &#039;&#039;(Planning to decommission in near future)&#039;&#039; || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| [https://suricata-ids.org/ suricata]                    || IDS / IPS / NSM engine || Michal Purzynski&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.squid-cache.org/ Squid]           || Caching proxy || Brian Hourigan&lt;br /&gt;
|-&lt;br /&gt;
| [https://tox.readthedocs.org/en/latest/ Tox]  || Test automation || Dave Hunt&lt;br /&gt;
|-&lt;br /&gt;
| [https://travis-ci.org/ Travis]               || Continuous integration system used by several teams (eg Treeherder) || Jonathan Griffin&#039;s team &lt;br /&gt;
|-&lt;br /&gt;
| [https://uwsgi-docs.readthedocs.io/en/latest/ UWSGI]               || Full hosting stack used in MozDef || MozDef Team in EIS &lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/mitchellh/vagrant Vagrant]|| Build and distribute dev envs, used by Treeherder and others || Member of Jonathan Griffin&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [http://valgrind.org/ Valgrind]               || Memory error detection and profiling of C and C++ code || jseward, njn&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/microsoft/vscode/ vscode] || Code editor || unknown&lt;br /&gt;
|-&lt;br /&gt;
| [http://vim.org/ vim] || editor used by many developers || —&lt;br /&gt;
|-&lt;br /&gt;
| [https://waffle.io/mozilla/ waffle.io] || github project management used by various teams || &lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/w3c/web-platform-tests web-platform-tests]  ||  Testcases and tooling for cross-browser testing of web-platform APIs                                             || jgraham&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.webrtc.org WebRTC.org]            || Components to support real-time communication in browsers and mobile applications || Randell Jesup &lt;br /&gt;
|-&lt;br /&gt;
| [http://www.wordpress.org WordPress]          || Powers our blogs, blog.mozilla.org || Craig Cook &lt;br /&gt;
|-&lt;br /&gt;
| [https://www.webtoolkit.eu/wt Wt] || C++ library for developing web applications, hindsight_admin || Mike Trinkala&lt;br /&gt;
|-&lt;br /&gt;
| [https://xiph.org Xiph.Org]                   || Media codecs ship in Firefox, encoding tools || Ralph Giles&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/Cyan4973/xxHash xxHash] ||  Extremely fast non-cryptographic hash algorithm, lua_sandbox_extensions || Mike Trinkala&lt;br /&gt;
|-&lt;br /&gt;
| [http://tukaani.org/xz/embedded.html XZ Embedded] || Decompressor for the XZ format ||&lt;br /&gt;
|-&lt;br /&gt;
| [http://yasm.tortall.net/ yasm] || Assembler used by the build system. || unknown&lt;br /&gt;
|-&lt;br /&gt;
| [https://valloric.github.io/YouCompleteMe/ YouCompleteMe] || Code completion engine for vim editors || Ehsan Akhgari&lt;br /&gt;
|-&lt;br /&gt;
| [http://zlib.net zlib]                   || Streaming compression and decompression for HTTP, PNG, etc. ||&lt;br /&gt;
|-&lt;br /&gt;
| [https://zookeeper.apache.org/ ZooKeeper] || Distributed synchronization, use by hg.mozilla.org replication || gps&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Rillian</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=MOSS/Foundational_Technology/Projects_We_Use&amp;diff=1162448</id>
		<title>MOSS/Foundational Technology/Projects We Use</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=MOSS/Foundational_Technology/Projects_We_Use&amp;diff=1162448"/>
		<updated>2017-02-09T17:22:40Z</updated>

		<summary type="html">&lt;p&gt;Rillian: Add Ycm&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is an incomplete list of the free software and open source projects Mozilla relies upon. As a starting point, it lists each project along with a short statement of how we depend on it. Where practical it would also be helpful to identify a Mozillian most closely associated with our use of each project.&lt;br /&gt;
&lt;br /&gt;
Note that presence on this list isn&#039;t the same as, nor is it a prerequisite for, applying for the MOSS &amp;quot;Foundational Technology&amp;quot; track - projects have to make an application using the process on the [[MOSS/Foundational Technology|Foundational Technology]] page.&lt;br /&gt;
&lt;br /&gt;
This is a work in progress - please contribute to this list.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Project !! Description !! Contact within Mozilla&lt;br /&gt;
|-&lt;br /&gt;
| [https://angularjs.org/ angular.js]           || Used by A-Team for web apps (eg Treeherder) || Member of Jonathan Griffin&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [https://httpd.apache.org Apache Server]      || Used by A-Team for web apps || Member of Jonathan Griffin&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/ansible/ansible Ansible]  || Used by IT (netops) and A-Team to manage deployments || jbarnell , Webops, GPS?&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/h4writer/arewefastyet AreWeFastYet]  || Compare JS performance across JS engines and platforms || Hannes Verschore&lt;br /&gt;
|-&lt;br /&gt;
| [https://atom.io/ Atom]                       || Used (either vanilla or e.g. as [https://github.com/Microsoft/vscode] ) by various developers ||&lt;br /&gt;
|-&lt;br /&gt;
| [https://babeljs.io/ BabelJS]                 || JavaScript compiler, Used by Gaia, TaskCluster team || Selena Deckelmann&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.isc.org/downloads/bind/ BIND] || DNS Server || Brian Hourigan&lt;br /&gt;
|-&lt;br /&gt;
| [https://pypi.python.org/pypi/bleach/ Bleach] || HTML sanitizing library that escapes or strips markup and attributes used by MDN and a bunch of Mozilla sites || Will Kahn-Greene&lt;br /&gt;
|-&lt;br /&gt;
| [https://pypi.python.org/pypi/blessings/ Blessings] || Terminal formatting lib used by mozilla-central build process || Erik Rose&lt;br /&gt;
|-&lt;br /&gt;
| [http://getbootstrap.com/ Bootstrap] || HTML/CSS/JS framework, used by many of Mozilla&#039;s sites. || Webdev&lt;br /&gt;
|-&lt;br /&gt;
| [http://brew.sh/ brew / Homebrew] || Mac OS X packaging system, used to install dev tools || Sam Penrose&lt;br /&gt;
|-&lt;br /&gt;
| [https://bro.org bro]                    || The Bro Network Security Monitor || Michal Purzynski&lt;br /&gt;
|-&lt;br /&gt;
| [http://browserify.org Browserify]                    || Build JS dependencies for the browser || mozilla-services (kinto.js)&lt;br /&gt;
|-&lt;br /&gt;
| [http://buildbot.net/ BuildBot]               || The base system currently in use for release || Dustin J. Mitchell&lt;br /&gt;
|-&lt;br /&gt;
| [http://bugzilla.org/ Bugzilla] (upstream)    || The base Bugzilla on that we customize for Mozilla&#039;s use || Mark Côté&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.celeryproject.org/ Celery] || Distributed task queue. Used by Treeherder and others. || Member of Jonathan Griffin&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [http://ckeditor.com/ CKEditor] || WYSIWYG editor on MDN || &lt;br /&gt;
|-&lt;br /&gt;
| [https://cmake.org/ CMake] || cross-platform family of tools designed to build, test and package software, lua_sandbox, lua_sandbox_extensions, hindsight, hindsight_admin || Mike Trinkala&lt;br /&gt;
|-&lt;br /&gt;
| [http://chaijs.com/ Chai] || JavaScript test and assertion library || Cloud Services, Tarek Ziade&#039;s team (kinto.js), Firefox Hello team&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.llvm.org Clang/LLVM]           || C/C++ compiler and infrastructure || Ehsan Akhgari &amp;amp; Sylvestre Ledru&lt;br /&gt;
|-&lt;br /&gt;
| [https://codemirror.net/ CodeMirror]           || Used in DevTools, [https://thimble.mozilla.org Thimble], and other online code tools || David Humphrey/Simon Wex&lt;br /&gt;
|-&lt;br /&gt;
| [https://pypi.python.org/pypi/cookiecutter/ Cookiecutter] || Templating system used to clone our [https://github.com/mozilla/sugardough Sugardough] Django template || Giorgos Logiotatidis&lt;br /&gt;
|-&lt;br /&gt;
| [https://conemu.github.io/ ConEmu] || Console emulator for Windows. Used by devs running Windows. || Ed Morley&lt;br /&gt;
|-&lt;br /&gt;
| [http://curl.haxx.se/ curl] || internet transfer tool and library, used by crashreporter and FirefoxOS || Daniel Stenberg&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.debian.org/ Debian] || Used on many developer boxes || Sylvestre Ledru or glandium&lt;br /&gt;
|-&lt;br /&gt;
| [http://deis.io Deis] || Open Source Heroku-like PaaS platform. Hosts www.mozilla.org, masterfirefoxos.mozilla.org, etc. || Member of Benjamin Sternthal&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [https://disconnect.me/trackerprotection Disconnect.me ] || Open, transparent, neutral Tracking Protection blocklist used in Firefox Private Browsing Windows || Marshall Erwin, Javaun Moradi, Francois Marier&lt;br /&gt;
|-&lt;br /&gt;
| [https://discourse.org Discourse] || [https://discourse.mozilla-community.org Community], [https://discourse.webmaker.org/ Webmaker], [https://discourse.mozilla-advocacy.org/ Advocacy], et al || [[IT/Community/WG/Discourse|Community Ops]] (Yousef Alam or Tanner Filip)&lt;br /&gt;
|-&lt;br /&gt;
| [https://djangoproject.com Django]     || Backend web framework used on many of our websites, including addons.mozilla.org, marketplace.mozilla.org, support.mozilla.org, Input, Snippets, MDN (Mozilla Developer Network), mozilla.org, Treeherder || Andy McKay and Jannis Leidel are (or have been) on the [https://www.djangoproject.com/foundation/ Django Software Foundation] board, Jannis is core team member&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.django-rest-framework.org Django REST framework]     || API framework. Used by various Mozilla sites including MDN, Firefox marketplace, mozilla.org, support.mozilla.com. || Andy McKay and Jannis Leidel&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/docker/docker Docker]     || Used by release engineering for Linux build and test containers and by ateam for managing test and production services. Used by many Mozilla websites as well such as addons.mozilla.org, marketplace.mozilla.org. (Plus docker-compose and docker machine) || Member of Selena Deckelmann&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.stack.nl/~dimitri/doxygen/ Doxygen] || tool for generating documentation from annotated sources, lua_sandbox || Mike Trinkala  &lt;br /&gt;
|-&lt;br /&gt;
| [https://eclipse.org/ Eclipse] || Integrated Development Environment used by many developers || —&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.elastic.co/products/elasticsearch elasticsearch] || Search engine for various web sites and analytics || Erik Rose (dxr), Kyle Lahnakoski (ActiveData) &lt;br /&gt;
|-&lt;br /&gt;
| [http://www.gnu.org/software/emacs/ emacs] || Programmable editor used by many developers || —&lt;br /&gt;
|-&lt;br /&gt;
| [http://eslint.org/ eslint] || Pluggable linting utiltity used by Firefox Hello, DevTools and Firefox Android || Mark Banner&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/ether/etherpad-lite Etherpad]     || Used for meeting notes, etc || JP Schneider&lt;br /&gt;
|-&lt;br /&gt;
| [https://ffmpeg.org/ ffmpeg] || Used for media decoding. || Jean-Yves Avenard&lt;br /&gt;
|-&lt;br /&gt;
| [https://flake8.readthedocs.org/ flake8] || Wrapper around Python linters. Used by Treeherder and others. || Member of Jonathan Griffin&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [http://flask.pocoo.org/ Flask]               || Python web framework || Erik Rose&lt;br /&gt;
|-&lt;br /&gt;
| [https://fortawesome.github.io/Font-Awesome/ Font Awesome] || Font and CSS toolkit, used by many of Mozilla&#039;s sites. || Webdev&lt;br /&gt;
|-&lt;br /&gt;
| [http://foundation.zurb.com/ Foundation Framework] || Responsive front-end framework, used by some Mozilla sites and add-ons || Luke Crouch&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org GCC]                      || C/C++ compiler and infrastructure || Nathan Froyd&lt;br /&gt;
|-&lt;br /&gt;
| [https://git-scm.com/ Git]                    || Version control system - https://git.mozilla.org || Unknown &lt;br /&gt;
|-&lt;br /&gt;
| [http://gunicorn.org/ gunicorn] || Python WSGI HTTP Server. Used by Treeherder, Socorro, Pontoon. || Webdev&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.freedesktop.org/wiki/Software/HarfBuzz/ HarfBuzz] || International text shaping engine used in Firefox/Servo || Platform team&lt;br /&gt;
|-&lt;br /&gt;
| [http://hunspell.sourceforge.net/ Hunspell]  || Spellchecking engine || Ehsan Akhgari&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/hunspell/hyphen/ Hyphen]  || Hyphenation library || Jonathan Kew&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/jkbrzt/httpie HTTPie]  || HTTP command-line client || Cloud Services (among many others), Tarek Ziade&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.inspircd.org/ inspircd]                 || Irc server used by mozilla || :ashish&lt;br /&gt;
|-&lt;br /&gt;
| [https://theintern.github.io/intern/ Intern]  || Intern is a complete test system for JavaScript designed to help you write and run consistent, high-quality test cases for your JavaScript libraries and applications.  || jrgm/vladikoff&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| [http://canonware.com/jemalloc/ jemalloc]     || Memory allocation library || We can ask glandium&lt;br /&gt;
|-&lt;br /&gt;
| [http://jenkins-ci.org/ Jenkins CI]                    || Continuous integration system used by WebQA and EE || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| [https://jquery.com/ jQuery] || JavaScript library, used by many of Mozilla&#039;s sites. || Webdev&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/tmpvar/jsdom jsdom] || DOM implementation in full JS || Test suites in Cloud Services, Tarek Ziade&#039;s team (kinto.js)&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/open-source-parsers/jsoncpp jsoncpp] || A C++ library for interacting with JSON, used by the crashreporter client and Socorro. || Gabriele Svelto&lt;br /&gt;
|-&lt;br /&gt;
| [https://kafka.apache.org/ Kafka] || Distributed transaction log, used for hg.mozilla.org replication. || gps&lt;br /&gt;
|-&lt;br /&gt;
| [http://kombu.readthedocs.org/ Kombu] || Messaging library for Python. Used by Treeherder and others. || Member of Jonathan Griffin&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| libbz2                                        || Compression library for .bz2 format || Julian Seward&lt;br /&gt;
|-&lt;br /&gt;
| libjpeg-turbo                                 || JPEG decoding library || Jeff Muizelaar &lt;br /&gt;
|-&lt;br /&gt;
| [http://www.libpng.org/pub/png/libpng.html libpng] || PNG decoding library || Jeff Muizelaar &lt;br /&gt;
|-&lt;br /&gt;
| libvpx (Google)                               || Library for support of Google’s VP* family of codecs || Tim Terriberry &lt;br /&gt;
|-&lt;br /&gt;
| Linux                                         || OS kernel used in Firefox OS || Unknown &lt;br /&gt;
|-&lt;br /&gt;
| LLVM || Compiler foundation for ASAN, static analysis tools, Rust || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| [https://lodash.com/ lodash] || JavaScript utility library, used by many of Mozilla&#039;s sites. || Webdev &amp;amp; Firefox Hello&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.lua.org/ Lua] ||  Lua is a powerful, efficient, lightweight, embeddable scripting language, lua_sandbox_extensions || Mike Trinkala&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/macvim-dev/macvim MacVim] || Mac wrapper around Vim || -&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.list.org/ Mailman]     || [https://mail.mozilla.org/listinfo Mailing lists] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.mediawiki.org/wiki/MediaWiki MediaWiki]     || You are reading this on a wiki || Sheeri Cabral&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.mercurial-scm.org/ Mercurial]    || Version control system and source code management || GPS &lt;br /&gt;
|-&lt;br /&gt;
| [https://www.meteor.com/ Meteor]    || Build Apps with Javascript - Used in MozDef&#039;s Web UI ||  MozDef Team in EIS&lt;br /&gt;
|-&lt;br /&gt;
| [http://mochajs.org/ Mocha] || JavaScript test runner || Cloud Services, Tarek Ziade&#039;s team (kinto.js); Firefox Hello team&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/kumar303/mohawk Mohawk] ||  Python library for Hawk HTTP authorization. Used by Treeherder and others. || Member of Jonathan Griffin&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [http://mozdef.com mozdef]                    || Security event monitoring and incident response || Jeff Bryner&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mingw.org/wiki/msys msys]         || Used to build Firefox on Windows. Note: It&#039;s likely best we support the newer MSYS2 project instead: https://github.com/msys2 || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.mysql.com/ MySQL]                || Open source relational DB used by many developers, including AMO, SUMO, Input, bugzilla, releng, adminstered by IT || Sheeri Cabral&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.nagios.org/ Nagios]              || IT management system. Used for notifications of system failures || Sheeri Cabral, Ashish V.&lt;br /&gt;
|-&lt;br /&gt;
| [http://netsniff-ng.org/ netsniff-ng]                    || Linux networking toolkit || Michal Purzynski&lt;br /&gt;
|-&lt;br /&gt;
| [https://neovim.io/ neovim] (nvim) || Next-generation vim code editor || Ralph Giles&lt;br /&gt;
|-&lt;br /&gt;
| nICEr                                         || Library for traversing firewalls || Unknown &lt;br /&gt;
|-&lt;br /&gt;
| [https://nixos.org NixOS]                     || Reproducible Linux distribution. Used by some developers || Nicolas B. Pierron&lt;br /&gt;
|-&lt;br /&gt;
| [https://nodejs.org Node.js]                  || JavaScript runtime for server side applications, command line utilities || Nick Desaulniers&lt;br /&gt;
|-&lt;br /&gt;
| nrappkit                                      || Toolkit for building standalone applications || Unknown &lt;br /&gt;
|-&lt;br /&gt;
| [http://nsis.sourceforge.net/Main_Page NSIS]  || Windows installer framework || Matt Howell&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/cisco/OpenH264 OpenH264] (Cisco)                              || H.264 video library || Unknown &lt;br /&gt;
|-&lt;br /&gt;
| [http://www.openLDAP.org/ OpenLDAP]                 || User management used by Infra || :jabba?&lt;br /&gt;
|-&lt;br /&gt;
| [http://openresty.org OpenResty]              || a fast web app server by extending nginx, used by cloudops || Benson Wong (mostlygeek)&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.openssh.com/ OpenSSH]                 || Remote server management, secure transport for Git and Mercurial || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| [http://openssl.org/ OpenSSL]                 || Cryptograpahy and TLS Toolkit || Nick Desaulniers&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.openstreetmap.org OpenStreetMap]     || Online/offline maps, used by the location service and on mozilla.org || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| [https://openvpn.net/ Openvpn]                 || VPN used by Infra || :jabba?&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/khaledhosny/ots OTS]      || OpenType sanitizer used by Firefox to protect against security bugs in underlying platforms related to malicious fonts || Jonathan Kew &lt;br /&gt;
|-&lt;br /&gt;
| [https://www.owasp.org/index.php/ZAP OWASP ZAP]                 || Web security testing tool used by security and QA teams || Simon Bennetts (psiinon)&lt;br /&gt;
|-&lt;br /&gt;
| [https://owncloud.org/ Owncloud]                 || Open platform to host your cloud under your control || Some communities have been using it to host files under their control (ask Nukeador)&lt;br /&gt;
|-&lt;br /&gt;
| [http://pandoc.org/ Pandoc] || universal document converter, lua_sandbox_extensions || Mike Trinkala  &lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/apache/parquet-cpp parquet-cpp] || C++ library to read and write the Apache Parquet columnar data format, lua_sandbox_extensions || Mike Trinkala&lt;br /&gt;
|-&lt;br /&gt;
| [https://pypi.python.org/pypi/parsimonious/ Parsimonious] || Parsing lib used by DXR and a few other sites (I think) || Erik Rose&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/mozilla/pdf.js PDF.js]                  || Used as the PDF Viewer in Firefox and Firefox OS || Brendan Dahl, Yury Delendik&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/PyCQA/pep8 pep8] || Python linter. Used by Treeherder and others. || Member of Jonathan Griffin&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.perl.org/ Perl]                  || Used by Bugzilla || Member of Jonathan Griffin&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [http://python-pillow.org/ pillow] || Python Imaging library || Member of Webcompat team&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/pypa/pip pip] || Python package tool. Used by all Python projects. || Erik Rose and Jannis Leidel, Jannis is core team member ([https://www.pypa.io/ PyPA])&lt;br /&gt;
|-&lt;br /&gt;
| [http://piwik.org/ Piwik] || Analytic software that gives you the control and respects privacy || Some communities have been using it to avoid GA analytics (Ask Nukeador)&lt;br /&gt;
|-&lt;br /&gt;
| [http://cmusphinx.sourceforge.net/ Pocketsphinx]       ||  Speech recognition toolkit embedded into Firefox OS|| André Natal&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.postgresql.org/ PostgreSQL]       || Open source relational DB used by many developers, adminstered by IT || Selena Deckelmann&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/PrismJS/prism Prism.js]       || Syntax highlighting on code samples on MDN || &lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/puppetlabs/puppet Puppet] || System administration tool || Member of Amy Rich&#039;s team, Corey Shield&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/pyflakes/pyflakes pyflakes] || Python linter. Used by Treeherder and others. || Member of Jonathan Griffin&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [http://pypy.org/ PyPy]                                        || Python language runtime. Used by Web Push service. || Cloud Services, esp. Ben Bangert&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/Pylons/pyramid/ Pyramid] || Python Web framework || Cloud Services team&lt;br /&gt;
|-&lt;br /&gt;
| [http://pytest.org/ pytest] || Python testing tool. Used by Treeherder and others. || Dave Hunt&lt;br /&gt;
|-&lt;br /&gt;
| Python                                        || Scripting language || [http://python.org/psf/ Python Software Foundation], Selena Deckelmann is a former board member&lt;br /&gt;
|-&lt;br /&gt;
| [https://pypi.python.org/pypi/pyelasticsearch/ pyelasticsearch] || Python client for elasticsearch || Erik Rose&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.rabbitmq.com/ RabbitMQ]          || Distributed Queue, used by Socorro, Pulse (all our publicly available build/test/commit information flows through this), Treeherder, addons.mozilla.org (with Celery), marketplace.mozilla.org (with Celery) || Selena Deckelmann&lt;br /&gt;
|-&lt;br /&gt;
| [http://http://rapidjson.org/ RapidJSON] ||  A fast JSON parser/generator for C++ with both SAX/DOM style API, lua_sandbox_extensions || Mike Trinkala&lt;br /&gt;
|-&lt;br /&gt;
| [http://facebook.github.io/react/index.html ReactJS] || Javascript library for building user interfaces. Used by Firefox Hello &amp;amp; DevTools || Mark Banner&lt;br /&gt;
|-&lt;br /&gt;
| [https://readthedocs.org/ Read the Docs]   || Hosted automatically-built documentation, used by Cloud Services and a wide variety of mozilla Github projects || Ben Bangert, Jannis Leidel, Gervase Markham&lt;br /&gt;
|-&lt;br /&gt;
| [http://redis.io/ Redis]         || Really fast data structure store, cache and message broker || Cloud Services Tarek Ziade&#039;s team, Loop Server (Hello) team&lt;br /&gt;
|-&lt;br /&gt;
| [http://python-requests.org/ Requests] || &amp;quot;Python HTTP Requests for Humans&amp;quot;. Used by many many Mozilla Python projects. || Member of Jonathan Griffin&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.reviewboard.org/ Review Board]   || The base of MozReview, the new review tool being developed to replace Splinter || Steven MacLeod, Mike Conley&lt;br /&gt;
|-&lt;br /&gt;
| [http://wordlist.aspell.net/ SCOWL]         || en-US word list used for spell checking. || ehsan&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.seleniumhq.org/ Selenium]         || Browser test driver || David Burns, Dave Hunt&lt;br /&gt;
|-&lt;br /&gt;
| [http://sinonjs.org/ Sinon] || JavaScript mock library || Cloud Services, Tarek Ziade&#039;s team (kinto.js); Firefox Hello team&lt;br /&gt;
|-&lt;br /&gt;
| [https://slimerjs.org/ SlimerJS]              || Scriptable browser, based on Gecko, used for functional tests in some few Mozilla projects  ( [[PluotSorbet]], some FxOS apps ? and others ?) || Myk Melez&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.sqlalchemy.org/ SQLAlchemy]] || Database Toolkit and ORM for Python || bhearsum&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.sqlite.org/ SQLite]              || File-based database || asuth&lt;br /&gt;
|-&lt;br /&gt;
| [http://learnboost.github.io/stylus/ Stylus]              || CSS Pre-processor on several sites || webdev&lt;br /&gt;
|-&lt;br /&gt;
| [https://subversion.apache.org/ Subversion]   || https://svn.mozilla.org &#039;&#039;(Planning to decommission in near future)&#039;&#039; || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| [https://suricata-ids.org/ suricata]                    || IDS / IPS / NSM engine || Michal Purzynski&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.squid-cache.org/ Squid]           || Caching proxy || Brian Hourigan&lt;br /&gt;
|-&lt;br /&gt;
| [https://tox.readthedocs.org/en/latest/ Tox]  || Test automation || Dave Hunt&lt;br /&gt;
|-&lt;br /&gt;
| [https://travis-ci.org/ Travis]               || Continuous integration system used by several teams (eg Treeherder) || Jonathan Griffin&#039;s team &lt;br /&gt;
|-&lt;br /&gt;
| [https://uwsgi-docs.readthedocs.io/en/latest/ UWSGI]               || Full hosting stack used in MozDef || MozDef Team in EIS &lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/mitchellh/vagrant Vagrant]|| Build and distribute dev envs, used by Treeherder and others || Member of Jonathan Griffin&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [http://valgrind.org/ Valgrind]               || Memory error detection and profiling of C and C++ code || jseward, njn&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/microsoft/vscode/ vscode] || Code editor || unknown&lt;br /&gt;
|-&lt;br /&gt;
| [http://vim.org/ vim] || editor used by many developers || —&lt;br /&gt;
|-&lt;br /&gt;
| [https://waffle.io/mozilla/ waffle.io] || github project management used by various teams || &lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/w3c/web-platform-tests web-platform-tests]  ||  Testcases and tooling for cross-browser testing of web-platform APIs                                             || jgraham&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.webrtc.org WebRTC.org]            || Components to support real-time communication in browsers and mobile applications || Randell Jesup &lt;br /&gt;
|-&lt;br /&gt;
| [http://www.wordpress.org WordPress]          || Powers our blogs, blog.mozilla.org || Craig Cook &lt;br /&gt;
|-&lt;br /&gt;
| [https://www.webtoolkit.eu/wt Wt] || C++ library for developing web applications, hindsight_admin || Mike Trinkala&lt;br /&gt;
|-&lt;br /&gt;
| [https://xiph.org Xiph.Org]                   || Media codecs ship in Firefox, encoding tools || Ralph Giles&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/Cyan4973/xxHash xxHash] ||  Extremely fast non-cryptographic hash algorithm, lua_sandbox_extensions || Mike Trinkala&lt;br /&gt;
|-&lt;br /&gt;
| [http://tukaani.org/xz/embedded.html XZ Embedded] || Decompressor for the XZ format ||&lt;br /&gt;
|-&lt;br /&gt;
| [http://yasm.tortall.net/ yasm] || Assembler used by the build system. || unknown&lt;br /&gt;
|-&lt;br /&gt;
| [https://valloric.github.io/YouCompleteMe/ YouCompleteMe || Code completion engine for vim editors | Ehsan Akhgari&lt;br /&gt;
|-&lt;br /&gt;
| [http://zlib.net zlib]                   || Streaming compression and decompression for HTTP, PNG, etc. ||&lt;br /&gt;
|-&lt;br /&gt;
| [https://zookeeper.apache.org/ ZooKeeper] || Distributed synchronization, use by hg.mozilla.org replication || gps&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Rillian</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=MOSS/Foundational_Technology/Projects_We_Use&amp;diff=1162447</id>
		<title>MOSS/Foundational Technology/Projects We Use</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=MOSS/Foundational_Technology/Projects_We_Use&amp;diff=1162447"/>
		<updated>2017-02-09T17:20:47Z</updated>

		<summary type="html">&lt;p&gt;Rillian: Add neovim&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is an incomplete list of the free software and open source projects Mozilla relies upon. As a starting point, it lists each project along with a short statement of how we depend on it. Where practical it would also be helpful to identify a Mozillian most closely associated with our use of each project.&lt;br /&gt;
&lt;br /&gt;
Note that presence on this list isn&#039;t the same as, nor is it a prerequisite for, applying for the MOSS &amp;quot;Foundational Technology&amp;quot; track - projects have to make an application using the process on the [[MOSS/Foundational Technology|Foundational Technology]] page.&lt;br /&gt;
&lt;br /&gt;
This is a work in progress - please contribute to this list.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Project !! Description !! Contact within Mozilla&lt;br /&gt;
|-&lt;br /&gt;
| [https://angularjs.org/ angular.js]           || Used by A-Team for web apps (eg Treeherder) || Member of Jonathan Griffin&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [https://httpd.apache.org Apache Server]      || Used by A-Team for web apps || Member of Jonathan Griffin&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/ansible/ansible Ansible]  || Used by IT (netops) and A-Team to manage deployments || jbarnell , Webops, GPS?&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/h4writer/arewefastyet AreWeFastYet]  || Compare JS performance across JS engines and platforms || Hannes Verschore&lt;br /&gt;
|-&lt;br /&gt;
| [https://atom.io/ Atom]                       || Used (either vanilla or e.g. as [https://github.com/Microsoft/vscode] ) by various developers ||&lt;br /&gt;
|-&lt;br /&gt;
| [https://babeljs.io/ BabelJS]                 || JavaScript compiler, Used by Gaia, TaskCluster team || Selena Deckelmann&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.isc.org/downloads/bind/ BIND] || DNS Server || Brian Hourigan&lt;br /&gt;
|-&lt;br /&gt;
| [https://pypi.python.org/pypi/bleach/ Bleach] || HTML sanitizing library that escapes or strips markup and attributes used by MDN and a bunch of Mozilla sites || Will Kahn-Greene&lt;br /&gt;
|-&lt;br /&gt;
| [https://pypi.python.org/pypi/blessings/ Blessings] || Terminal formatting lib used by mozilla-central build process || Erik Rose&lt;br /&gt;
|-&lt;br /&gt;
| [http://getbootstrap.com/ Bootstrap] || HTML/CSS/JS framework, used by many of Mozilla&#039;s sites. || Webdev&lt;br /&gt;
|-&lt;br /&gt;
| [http://brew.sh/ brew / Homebrew] || Mac OS X packaging system, used to install dev tools || Sam Penrose&lt;br /&gt;
|-&lt;br /&gt;
| [https://bro.org bro]                    || The Bro Network Security Monitor || Michal Purzynski&lt;br /&gt;
|-&lt;br /&gt;
| [http://browserify.org Browserify]                    || Build JS dependencies for the browser || mozilla-services (kinto.js)&lt;br /&gt;
|-&lt;br /&gt;
| [http://buildbot.net/ BuildBot]               || The base system currently in use for release || Dustin J. Mitchell&lt;br /&gt;
|-&lt;br /&gt;
| [http://bugzilla.org/ Bugzilla] (upstream)    || The base Bugzilla on that we customize for Mozilla&#039;s use || Mark Côté&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.celeryproject.org/ Celery] || Distributed task queue. Used by Treeherder and others. || Member of Jonathan Griffin&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [http://ckeditor.com/ CKEditor] || WYSIWYG editor on MDN || &lt;br /&gt;
|-&lt;br /&gt;
| [https://cmake.org/ CMake] || cross-platform family of tools designed to build, test and package software, lua_sandbox, lua_sandbox_extensions, hindsight, hindsight_admin || Mike Trinkala&lt;br /&gt;
|-&lt;br /&gt;
| [http://chaijs.com/ Chai] || JavaScript test and assertion library || Cloud Services, Tarek Ziade&#039;s team (kinto.js), Firefox Hello team&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.llvm.org Clang/LLVM]           || C/C++ compiler and infrastructure || Ehsan Akhgari &amp;amp; Sylvestre Ledru&lt;br /&gt;
|-&lt;br /&gt;
| [https://codemirror.net/ CodeMirror]           || Used in DevTools, [https://thimble.mozilla.org Thimble], and other online code tools || David Humphrey/Simon Wex&lt;br /&gt;
|-&lt;br /&gt;
| [https://pypi.python.org/pypi/cookiecutter/ Cookiecutter] || Templating system used to clone our [https://github.com/mozilla/sugardough Sugardough] Django template || Giorgos Logiotatidis&lt;br /&gt;
|-&lt;br /&gt;
| [https://conemu.github.io/ ConEmu] || Console emulator for Windows. Used by devs running Windows. || Ed Morley&lt;br /&gt;
|-&lt;br /&gt;
| [http://curl.haxx.se/ curl] || internet transfer tool and library, used by crashreporter and FirefoxOS || Daniel Stenberg&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.debian.org/ Debian] || Used on many developer boxes || Sylvestre Ledru or glandium&lt;br /&gt;
|-&lt;br /&gt;
| [http://deis.io Deis] || Open Source Heroku-like PaaS platform. Hosts www.mozilla.org, masterfirefoxos.mozilla.org, etc. || Member of Benjamin Sternthal&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [https://disconnect.me/trackerprotection Disconnect.me ] || Open, transparent, neutral Tracking Protection blocklist used in Firefox Private Browsing Windows || Marshall Erwin, Javaun Moradi, Francois Marier&lt;br /&gt;
|-&lt;br /&gt;
| [https://discourse.org Discourse] || [https://discourse.mozilla-community.org Community], [https://discourse.webmaker.org/ Webmaker], [https://discourse.mozilla-advocacy.org/ Advocacy], et al || [[IT/Community/WG/Discourse|Community Ops]] (Yousef Alam or Tanner Filip)&lt;br /&gt;
|-&lt;br /&gt;
| [https://djangoproject.com Django]     || Backend web framework used on many of our websites, including addons.mozilla.org, marketplace.mozilla.org, support.mozilla.org, Input, Snippets, MDN (Mozilla Developer Network), mozilla.org, Treeherder || Andy McKay and Jannis Leidel are (or have been) on the [https://www.djangoproject.com/foundation/ Django Software Foundation] board, Jannis is core team member&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.django-rest-framework.org Django REST framework]     || API framework. Used by various Mozilla sites including MDN, Firefox marketplace, mozilla.org, support.mozilla.com. || Andy McKay and Jannis Leidel&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/docker/docker Docker]     || Used by release engineering for Linux build and test containers and by ateam for managing test and production services. Used by many Mozilla websites as well such as addons.mozilla.org, marketplace.mozilla.org. (Plus docker-compose and docker machine) || Member of Selena Deckelmann&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.stack.nl/~dimitri/doxygen/ Doxygen] || tool for generating documentation from annotated sources, lua_sandbox || Mike Trinkala  &lt;br /&gt;
|-&lt;br /&gt;
| [https://eclipse.org/ Eclipse] || Integrated Development Environment used by many developers || —&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.elastic.co/products/elasticsearch elasticsearch] || Search engine for various web sites and analytics || Erik Rose (dxr), Kyle Lahnakoski (ActiveData) &lt;br /&gt;
|-&lt;br /&gt;
| [http://www.gnu.org/software/emacs/ emacs] || Programmable editor used by many developers || —&lt;br /&gt;
|-&lt;br /&gt;
| [http://eslint.org/ eslint] || Pluggable linting utiltity used by Firefox Hello, DevTools and Firefox Android || Mark Banner&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/ether/etherpad-lite Etherpad]     || Used for meeting notes, etc || JP Schneider&lt;br /&gt;
|-&lt;br /&gt;
| [https://ffmpeg.org/ ffmpeg] || Used for media decoding. || Jean-Yves Avenard&lt;br /&gt;
|-&lt;br /&gt;
| [https://flake8.readthedocs.org/ flake8] || Wrapper around Python linters. Used by Treeherder and others. || Member of Jonathan Griffin&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [http://flask.pocoo.org/ Flask]               || Python web framework || Erik Rose&lt;br /&gt;
|-&lt;br /&gt;
| [https://fortawesome.github.io/Font-Awesome/ Font Awesome] || Font and CSS toolkit, used by many of Mozilla&#039;s sites. || Webdev&lt;br /&gt;
|-&lt;br /&gt;
| [http://foundation.zurb.com/ Foundation Framework] || Responsive front-end framework, used by some Mozilla sites and add-ons || Luke Crouch&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org GCC]                      || C/C++ compiler and infrastructure || Nathan Froyd&lt;br /&gt;
|-&lt;br /&gt;
| [https://git-scm.com/ Git]                    || Version control system - https://git.mozilla.org || Unknown &lt;br /&gt;
|-&lt;br /&gt;
| [http://gunicorn.org/ gunicorn] || Python WSGI HTTP Server. Used by Treeherder, Socorro, Pontoon. || Webdev&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.freedesktop.org/wiki/Software/HarfBuzz/ HarfBuzz] || International text shaping engine used in Firefox/Servo || Platform team&lt;br /&gt;
|-&lt;br /&gt;
| [http://hunspell.sourceforge.net/ Hunspell]  || Spellchecking engine || Ehsan Akhgari&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/hunspell/hyphen/ Hyphen]  || Hyphenation library || Jonathan Kew&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/jkbrzt/httpie HTTPie]  || HTTP command-line client || Cloud Services (among many others), Tarek Ziade&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.inspircd.org/ inspircd]                 || Irc server used by mozilla || :ashish&lt;br /&gt;
|-&lt;br /&gt;
| [https://theintern.github.io/intern/ Intern]  || Intern is a complete test system for JavaScript designed to help you write and run consistent, high-quality test cases for your JavaScript libraries and applications.  || jrgm/vladikoff&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| [http://canonware.com/jemalloc/ jemalloc]     || Memory allocation library || We can ask glandium&lt;br /&gt;
|-&lt;br /&gt;
| [http://jenkins-ci.org/ Jenkins CI]                    || Continuous integration system used by WebQA and EE || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| [https://jquery.com/ jQuery] || JavaScript library, used by many of Mozilla&#039;s sites. || Webdev&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/tmpvar/jsdom jsdom] || DOM implementation in full JS || Test suites in Cloud Services, Tarek Ziade&#039;s team (kinto.js)&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/open-source-parsers/jsoncpp jsoncpp] || A C++ library for interacting with JSON, used by the crashreporter client and Socorro. || Gabriele Svelto&lt;br /&gt;
|-&lt;br /&gt;
| [https://kafka.apache.org/ Kafka] || Distributed transaction log, used for hg.mozilla.org replication. || gps&lt;br /&gt;
|-&lt;br /&gt;
| [http://kombu.readthedocs.org/ Kombu] || Messaging library for Python. Used by Treeherder and others. || Member of Jonathan Griffin&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| libbz2                                        || Compression library for .bz2 format || Julian Seward&lt;br /&gt;
|-&lt;br /&gt;
| libjpeg-turbo                                 || JPEG decoding library || Jeff Muizelaar &lt;br /&gt;
|-&lt;br /&gt;
| [http://www.libpng.org/pub/png/libpng.html libpng] || PNG decoding library || Jeff Muizelaar &lt;br /&gt;
|-&lt;br /&gt;
| libvpx (Google)                               || Library for support of Google’s VP* family of codecs || Tim Terriberry &lt;br /&gt;
|-&lt;br /&gt;
| Linux                                         || OS kernel used in Firefox OS || Unknown &lt;br /&gt;
|-&lt;br /&gt;
| LLVM || Compiler foundation for ASAN, static analysis tools, Rust || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| [https://lodash.com/ lodash] || JavaScript utility library, used by many of Mozilla&#039;s sites. || Webdev &amp;amp; Firefox Hello&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.lua.org/ Lua] ||  Lua is a powerful, efficient, lightweight, embeddable scripting language, lua_sandbox_extensions || Mike Trinkala&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/macvim-dev/macvim MacVim] || Mac wrapper around Vim || -&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.list.org/ Mailman]     || [https://mail.mozilla.org/listinfo Mailing lists] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.mediawiki.org/wiki/MediaWiki MediaWiki]     || You are reading this on a wiki || Sheeri Cabral&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.mercurial-scm.org/ Mercurial]    || Version control system and source code management || GPS &lt;br /&gt;
|-&lt;br /&gt;
| [https://www.meteor.com/ Meteor]    || Build Apps with Javascript - Used in MozDef&#039;s Web UI ||  MozDef Team in EIS&lt;br /&gt;
|-&lt;br /&gt;
| [http://mochajs.org/ Mocha] || JavaScript test runner || Cloud Services, Tarek Ziade&#039;s team (kinto.js); Firefox Hello team&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/kumar303/mohawk Mohawk] ||  Python library for Hawk HTTP authorization. Used by Treeherder and others. || Member of Jonathan Griffin&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [http://mozdef.com mozdef]                    || Security event monitoring and incident response || Jeff Bryner&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mingw.org/wiki/msys msys]         || Used to build Firefox on Windows. Note: It&#039;s likely best we support the newer MSYS2 project instead: https://github.com/msys2 || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.mysql.com/ MySQL]                || Open source relational DB used by many developers, including AMO, SUMO, Input, bugzilla, releng, adminstered by IT || Sheeri Cabral&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.nagios.org/ Nagios]              || IT management system. Used for notifications of system failures || Sheeri Cabral, Ashish V.&lt;br /&gt;
|-&lt;br /&gt;
| [http://netsniff-ng.org/ netsniff-ng]                    || Linux networking toolkit || Michal Purzynski&lt;br /&gt;
|-&lt;br /&gt;
| [https://neovim.io/ neovim] (nvim) || Next-generation vim code editor || Ralph Giles&lt;br /&gt;
|-&lt;br /&gt;
| nICEr                                         || Library for traversing firewalls || Unknown &lt;br /&gt;
|-&lt;br /&gt;
| [https://nixos.org NixOS]                     || Reproducible Linux distribution. Used by some developers || Nicolas B. Pierron&lt;br /&gt;
|-&lt;br /&gt;
| [https://nodejs.org Node.js]                  || JavaScript runtime for server side applications, command line utilities || Nick Desaulniers&lt;br /&gt;
|-&lt;br /&gt;
| nrappkit                                      || Toolkit for building standalone applications || Unknown &lt;br /&gt;
|-&lt;br /&gt;
| [http://nsis.sourceforge.net/Main_Page NSIS]  || Windows installer framework || Matt Howell&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/cisco/OpenH264 OpenH264] (Cisco)                              || H.264 video library || Unknown &lt;br /&gt;
|-&lt;br /&gt;
| [http://www.openLDAP.org/ OpenLDAP]                 || User management used by Infra || :jabba?&lt;br /&gt;
|-&lt;br /&gt;
| [http://openresty.org OpenResty]              || a fast web app server by extending nginx, used by cloudops || Benson Wong (mostlygeek)&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.openssh.com/ OpenSSH]                 || Remote server management, secure transport for Git and Mercurial || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| [http://openssl.org/ OpenSSL]                 || Cryptograpahy and TLS Toolkit || Nick Desaulniers&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.openstreetmap.org OpenStreetMap]     || Online/offline maps, used by the location service and on mozilla.org || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| [https://openvpn.net/ Openvpn]                 || VPN used by Infra || :jabba?&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/khaledhosny/ots OTS]      || OpenType sanitizer used by Firefox to protect against security bugs in underlying platforms related to malicious fonts || Jonathan Kew &lt;br /&gt;
|-&lt;br /&gt;
| [https://www.owasp.org/index.php/ZAP OWASP ZAP]                 || Web security testing tool used by security and QA teams || Simon Bennetts (psiinon)&lt;br /&gt;
|-&lt;br /&gt;
| [https://owncloud.org/ Owncloud]                 || Open platform to host your cloud under your control || Some communities have been using it to host files under their control (ask Nukeador)&lt;br /&gt;
|-&lt;br /&gt;
| [http://pandoc.org/ Pandoc] || universal document converter, lua_sandbox_extensions || Mike Trinkala  &lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/apache/parquet-cpp parquet-cpp] || C++ library to read and write the Apache Parquet columnar data format, lua_sandbox_extensions || Mike Trinkala&lt;br /&gt;
|-&lt;br /&gt;
| [https://pypi.python.org/pypi/parsimonious/ Parsimonious] || Parsing lib used by DXR and a few other sites (I think) || Erik Rose&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/mozilla/pdf.js PDF.js]                  || Used as the PDF Viewer in Firefox and Firefox OS || Brendan Dahl, Yury Delendik&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/PyCQA/pep8 pep8] || Python linter. Used by Treeherder and others. || Member of Jonathan Griffin&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.perl.org/ Perl]                  || Used by Bugzilla || Member of Jonathan Griffin&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [http://python-pillow.org/ pillow] || Python Imaging library || Member of Webcompat team&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/pypa/pip pip] || Python package tool. Used by all Python projects. || Erik Rose and Jannis Leidel, Jannis is core team member ([https://www.pypa.io/ PyPA])&lt;br /&gt;
|-&lt;br /&gt;
| [http://piwik.org/ Piwik] || Analytic software that gives you the control and respects privacy || Some communities have been using it to avoid GA analytics (Ask Nukeador)&lt;br /&gt;
|-&lt;br /&gt;
| [http://cmusphinx.sourceforge.net/ Pocketsphinx]       ||  Speech recognition toolkit embedded into Firefox OS|| André Natal&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.postgresql.org/ PostgreSQL]       || Open source relational DB used by many developers, adminstered by IT || Selena Deckelmann&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/PrismJS/prism Prism.js]       || Syntax highlighting on code samples on MDN || &lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/puppetlabs/puppet Puppet] || System administration tool || Member of Amy Rich&#039;s team, Corey Shield&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/pyflakes/pyflakes pyflakes] || Python linter. Used by Treeherder and others. || Member of Jonathan Griffin&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [http://pypy.org/ PyPy]                                        || Python language runtime. Used by Web Push service. || Cloud Services, esp. Ben Bangert&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/Pylons/pyramid/ Pyramid] || Python Web framework || Cloud Services team&lt;br /&gt;
|-&lt;br /&gt;
| [http://pytest.org/ pytest] || Python testing tool. Used by Treeherder and others. || Dave Hunt&lt;br /&gt;
|-&lt;br /&gt;
| Python                                        || Scripting language || [http://python.org/psf/ Python Software Foundation], Selena Deckelmann is a former board member&lt;br /&gt;
|-&lt;br /&gt;
| [https://pypi.python.org/pypi/pyelasticsearch/ pyelasticsearch] || Python client for elasticsearch || Erik Rose&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.rabbitmq.com/ RabbitMQ]          || Distributed Queue, used by Socorro, Pulse (all our publicly available build/test/commit information flows through this), Treeherder, addons.mozilla.org (with Celery), marketplace.mozilla.org (with Celery) || Selena Deckelmann&lt;br /&gt;
|-&lt;br /&gt;
| [http://http://rapidjson.org/ RapidJSON] ||  A fast JSON parser/generator for C++ with both SAX/DOM style API, lua_sandbox_extensions || Mike Trinkala&lt;br /&gt;
|-&lt;br /&gt;
| [http://facebook.github.io/react/index.html ReactJS] || Javascript library for building user interfaces. Used by Firefox Hello &amp;amp; DevTools || Mark Banner&lt;br /&gt;
|-&lt;br /&gt;
| [https://readthedocs.org/ Read the Docs]   || Hosted automatically-built documentation, used by Cloud Services and a wide variety of mozilla Github projects || Ben Bangert, Jannis Leidel, Gervase Markham&lt;br /&gt;
|-&lt;br /&gt;
| [http://redis.io/ Redis]         || Really fast data structure store, cache and message broker || Cloud Services Tarek Ziade&#039;s team, Loop Server (Hello) team&lt;br /&gt;
|-&lt;br /&gt;
| [http://python-requests.org/ Requests] || &amp;quot;Python HTTP Requests for Humans&amp;quot;. Used by many many Mozilla Python projects. || Member of Jonathan Griffin&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.reviewboard.org/ Review Board]   || The base of MozReview, the new review tool being developed to replace Splinter || Steven MacLeod, Mike Conley&lt;br /&gt;
|-&lt;br /&gt;
| [http://wordlist.aspell.net/ SCOWL]         || en-US word list used for spell checking. || ehsan&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.seleniumhq.org/ Selenium]         || Browser test driver || David Burns, Dave Hunt&lt;br /&gt;
|-&lt;br /&gt;
| [http://sinonjs.org/ Sinon] || JavaScript mock library || Cloud Services, Tarek Ziade&#039;s team (kinto.js); Firefox Hello team&lt;br /&gt;
|-&lt;br /&gt;
| [https://slimerjs.org/ SlimerJS]              || Scriptable browser, based on Gecko, used for functional tests in some few Mozilla projects  ( [[PluotSorbet]], some FxOS apps ? and others ?) || Myk Melez&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.sqlalchemy.org/ SQLAlchemy]] || Database Toolkit and ORM for Python || bhearsum&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.sqlite.org/ SQLite]              || File-based database || asuth&lt;br /&gt;
|-&lt;br /&gt;
| [http://learnboost.github.io/stylus/ Stylus]              || CSS Pre-processor on several sites || webdev&lt;br /&gt;
|-&lt;br /&gt;
| [https://subversion.apache.org/ Subversion]   || https://svn.mozilla.org &#039;&#039;(Planning to decommission in near future)&#039;&#039; || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| [https://suricata-ids.org/ suricata]                    || IDS / IPS / NSM engine || Michal Purzynski&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.squid-cache.org/ Squid]           || Caching proxy || Brian Hourigan&lt;br /&gt;
|-&lt;br /&gt;
| [https://tox.readthedocs.org/en/latest/ Tox]  || Test automation || Dave Hunt&lt;br /&gt;
|-&lt;br /&gt;
| [https://travis-ci.org/ Travis]               || Continuous integration system used by several teams (eg Treeherder) || Jonathan Griffin&#039;s team &lt;br /&gt;
|-&lt;br /&gt;
| [https://uwsgi-docs.readthedocs.io/en/latest/ UWSGI]               || Full hosting stack used in MozDef || MozDef Team in EIS &lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/mitchellh/vagrant Vagrant]|| Build and distribute dev envs, used by Treeherder and others || Member of Jonathan Griffin&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [http://valgrind.org/ Valgrind]               || Memory error detection and profiling of C and C++ code || jseward, njn&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/microsoft/vscode/ vscode] || Code editor || unknown&lt;br /&gt;
|-&lt;br /&gt;
| [http://vim.org/ vim] || editor used by many developers || —&lt;br /&gt;
|-&lt;br /&gt;
| [https://waffle.io/mozilla/ waffle.io] || github project management used by various teams || &lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/w3c/web-platform-tests web-platform-tests]  ||  Testcases and tooling for cross-browser testing of web-platform APIs                                             || jgraham&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.webrtc.org WebRTC.org]            || Components to support real-time communication in browsers and mobile applications || Randell Jesup &lt;br /&gt;
|-&lt;br /&gt;
| [http://www.wordpress.org WordPress]          || Powers our blogs, blog.mozilla.org || Craig Cook &lt;br /&gt;
|-&lt;br /&gt;
| [https://www.webtoolkit.eu/wt Wt] || C++ library for developing web applications, hindsight_admin || Mike Trinkala&lt;br /&gt;
|-&lt;br /&gt;
| [https://xiph.org Xiph.Org]                   || Media codecs ship in Firefox, encoding tools || Ralph Giles&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/Cyan4973/xxHash xxHash] ||  Extremely fast non-cryptographic hash algorithm, lua_sandbox_extensions || Mike Trinkala&lt;br /&gt;
|-&lt;br /&gt;
| [http://tukaani.org/xz/embedded.html XZ Embedded] || Decompressor for the XZ format ||&lt;br /&gt;
|-&lt;br /&gt;
| [http://yasm.tortall.net/ yasm] || Assembler used by the build system. || unknown&lt;br /&gt;
|-&lt;br /&gt;
| [http://zlib.net zlib]                   || Streaming compression and decompression for HTTP, PNG, etc. ||&lt;br /&gt;
|-&lt;br /&gt;
| [https://zookeeper.apache.org/ ZooKeeper] || Distributed synchronization, use by hg.mozilla.org replication || gps&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Rillian</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=MOSS/Foundational_Technology/Projects_We_Use&amp;diff=1162446</id>
		<title>MOSS/Foundational Technology/Projects We Use</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=MOSS/Foundational_Technology/Projects_We_Use&amp;diff=1162446"/>
		<updated>2017-02-09T17:19:12Z</updated>

		<summary type="html">&lt;p&gt;Rillian: Add Microsoft&amp;#039;s vscode editor&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is an incomplete list of the free software and open source projects Mozilla relies upon. As a starting point, it lists each project along with a short statement of how we depend on it. Where practical it would also be helpful to identify a Mozillian most closely associated with our use of each project.&lt;br /&gt;
&lt;br /&gt;
Note that presence on this list isn&#039;t the same as, nor is it a prerequisite for, applying for the MOSS &amp;quot;Foundational Technology&amp;quot; track - projects have to make an application using the process on the [[MOSS/Foundational Technology|Foundational Technology]] page.&lt;br /&gt;
&lt;br /&gt;
This is a work in progress - please contribute to this list.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Project !! Description !! Contact within Mozilla&lt;br /&gt;
|-&lt;br /&gt;
| [https://angularjs.org/ angular.js]           || Used by A-Team for web apps (eg Treeherder) || Member of Jonathan Griffin&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [https://httpd.apache.org Apache Server]      || Used by A-Team for web apps || Member of Jonathan Griffin&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/ansible/ansible Ansible]  || Used by IT (netops) and A-Team to manage deployments || jbarnell , Webops, GPS?&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/h4writer/arewefastyet AreWeFastYet]  || Compare JS performance across JS engines and platforms || Hannes Verschore&lt;br /&gt;
|-&lt;br /&gt;
| [https://atom.io/ Atom]                       || Used (either vanilla or e.g. as [https://github.com/Microsoft/vscode] ) by various developers ||&lt;br /&gt;
|-&lt;br /&gt;
| [https://babeljs.io/ BabelJS]                 || JavaScript compiler, Used by Gaia, TaskCluster team || Selena Deckelmann&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.isc.org/downloads/bind/ BIND] || DNS Server || Brian Hourigan&lt;br /&gt;
|-&lt;br /&gt;
| [https://pypi.python.org/pypi/bleach/ Bleach] || HTML sanitizing library that escapes or strips markup and attributes used by MDN and a bunch of Mozilla sites || Will Kahn-Greene&lt;br /&gt;
|-&lt;br /&gt;
| [https://pypi.python.org/pypi/blessings/ Blessings] || Terminal formatting lib used by mozilla-central build process || Erik Rose&lt;br /&gt;
|-&lt;br /&gt;
| [http://getbootstrap.com/ Bootstrap] || HTML/CSS/JS framework, used by many of Mozilla&#039;s sites. || Webdev&lt;br /&gt;
|-&lt;br /&gt;
| [http://brew.sh/ brew / Homebrew] || Mac OS X packaging system, used to install dev tools || Sam Penrose&lt;br /&gt;
|-&lt;br /&gt;
| [https://bro.org bro]                    || The Bro Network Security Monitor || Michal Purzynski&lt;br /&gt;
|-&lt;br /&gt;
| [http://browserify.org Browserify]                    || Build JS dependencies for the browser || mozilla-services (kinto.js)&lt;br /&gt;
|-&lt;br /&gt;
| [http://buildbot.net/ BuildBot]               || The base system currently in use for release || Dustin J. Mitchell&lt;br /&gt;
|-&lt;br /&gt;
| [http://bugzilla.org/ Bugzilla] (upstream)    || The base Bugzilla on that we customize for Mozilla&#039;s use || Mark Côté&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.celeryproject.org/ Celery] || Distributed task queue. Used by Treeherder and others. || Member of Jonathan Griffin&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [http://ckeditor.com/ CKEditor] || WYSIWYG editor on MDN || &lt;br /&gt;
|-&lt;br /&gt;
| [https://cmake.org/ CMake] || cross-platform family of tools designed to build, test and package software, lua_sandbox, lua_sandbox_extensions, hindsight, hindsight_admin || Mike Trinkala&lt;br /&gt;
|-&lt;br /&gt;
| [http://chaijs.com/ Chai] || JavaScript test and assertion library || Cloud Services, Tarek Ziade&#039;s team (kinto.js), Firefox Hello team&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.llvm.org Clang/LLVM]           || C/C++ compiler and infrastructure || Ehsan Akhgari &amp;amp; Sylvestre Ledru&lt;br /&gt;
|-&lt;br /&gt;
| [https://codemirror.net/ CodeMirror]           || Used in DevTools, [https://thimble.mozilla.org Thimble], and other online code tools || David Humphrey/Simon Wex&lt;br /&gt;
|-&lt;br /&gt;
| [https://pypi.python.org/pypi/cookiecutter/ Cookiecutter] || Templating system used to clone our [https://github.com/mozilla/sugardough Sugardough] Django template || Giorgos Logiotatidis&lt;br /&gt;
|-&lt;br /&gt;
| [https://conemu.github.io/ ConEmu] || Console emulator for Windows. Used by devs running Windows. || Ed Morley&lt;br /&gt;
|-&lt;br /&gt;
| [http://curl.haxx.se/ curl] || internet transfer tool and library, used by crashreporter and FirefoxOS || Daniel Stenberg&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.debian.org/ Debian] || Used on many developer boxes || Sylvestre Ledru or glandium&lt;br /&gt;
|-&lt;br /&gt;
| [http://deis.io Deis] || Open Source Heroku-like PaaS platform. Hosts www.mozilla.org, masterfirefoxos.mozilla.org, etc. || Member of Benjamin Sternthal&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [https://disconnect.me/trackerprotection Disconnect.me ] || Open, transparent, neutral Tracking Protection blocklist used in Firefox Private Browsing Windows || Marshall Erwin, Javaun Moradi, Francois Marier&lt;br /&gt;
|-&lt;br /&gt;
| [https://discourse.org Discourse] || [https://discourse.mozilla-community.org Community], [https://discourse.webmaker.org/ Webmaker], [https://discourse.mozilla-advocacy.org/ Advocacy], et al || [[IT/Community/WG/Discourse|Community Ops]] (Yousef Alam or Tanner Filip)&lt;br /&gt;
|-&lt;br /&gt;
| [https://djangoproject.com Django]     || Backend web framework used on many of our websites, including addons.mozilla.org, marketplace.mozilla.org, support.mozilla.org, Input, Snippets, MDN (Mozilla Developer Network), mozilla.org, Treeherder || Andy McKay and Jannis Leidel are (or have been) on the [https://www.djangoproject.com/foundation/ Django Software Foundation] board, Jannis is core team member&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.django-rest-framework.org Django REST framework]     || API framework. Used by various Mozilla sites including MDN, Firefox marketplace, mozilla.org, support.mozilla.com. || Andy McKay and Jannis Leidel&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/docker/docker Docker]     || Used by release engineering for Linux build and test containers and by ateam for managing test and production services. Used by many Mozilla websites as well such as addons.mozilla.org, marketplace.mozilla.org. (Plus docker-compose and docker machine) || Member of Selena Deckelmann&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.stack.nl/~dimitri/doxygen/ Doxygen] || tool for generating documentation from annotated sources, lua_sandbox || Mike Trinkala  &lt;br /&gt;
|-&lt;br /&gt;
| [https://eclipse.org/ Eclipse] || Integrated Development Environment used by many developers || —&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.elastic.co/products/elasticsearch elasticsearch] || Search engine for various web sites and analytics || Erik Rose (dxr), Kyle Lahnakoski (ActiveData) &lt;br /&gt;
|-&lt;br /&gt;
| [http://www.gnu.org/software/emacs/ emacs] || Programmable editor used by many developers || —&lt;br /&gt;
|-&lt;br /&gt;
| [http://eslint.org/ eslint] || Pluggable linting utiltity used by Firefox Hello, DevTools and Firefox Android || Mark Banner&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/ether/etherpad-lite Etherpad]     || Used for meeting notes, etc || JP Schneider&lt;br /&gt;
|-&lt;br /&gt;
| [https://ffmpeg.org/ ffmpeg] || Used for media decoding. || Jean-Yves Avenard&lt;br /&gt;
|-&lt;br /&gt;
| [https://flake8.readthedocs.org/ flake8] || Wrapper around Python linters. Used by Treeherder and others. || Member of Jonathan Griffin&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [http://flask.pocoo.org/ Flask]               || Python web framework || Erik Rose&lt;br /&gt;
|-&lt;br /&gt;
| [https://fortawesome.github.io/Font-Awesome/ Font Awesome] || Font and CSS toolkit, used by many of Mozilla&#039;s sites. || Webdev&lt;br /&gt;
|-&lt;br /&gt;
| [http://foundation.zurb.com/ Foundation Framework] || Responsive front-end framework, used by some Mozilla sites and add-ons || Luke Crouch&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org GCC]                      || C/C++ compiler and infrastructure || Nathan Froyd&lt;br /&gt;
|-&lt;br /&gt;
| [https://git-scm.com/ Git]                    || Version control system - https://git.mozilla.org || Unknown &lt;br /&gt;
|-&lt;br /&gt;
| [http://gunicorn.org/ gunicorn] || Python WSGI HTTP Server. Used by Treeherder, Socorro, Pontoon. || Webdev&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.freedesktop.org/wiki/Software/HarfBuzz/ HarfBuzz] || International text shaping engine used in Firefox/Servo || Platform team&lt;br /&gt;
|-&lt;br /&gt;
| [http://hunspell.sourceforge.net/ Hunspell]  || Spellchecking engine || Ehsan Akhgari&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/hunspell/hyphen/ Hyphen]  || Hyphenation library || Jonathan Kew&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/jkbrzt/httpie HTTPie]  || HTTP command-line client || Cloud Services (among many others), Tarek Ziade&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.inspircd.org/ inspircd]                 || Irc server used by mozilla || :ashish&lt;br /&gt;
|-&lt;br /&gt;
| [https://theintern.github.io/intern/ Intern]  || Intern is a complete test system for JavaScript designed to help you write and run consistent, high-quality test cases for your JavaScript libraries and applications.  || jrgm/vladikoff&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| [http://canonware.com/jemalloc/ jemalloc]     || Memory allocation library || We can ask glandium&lt;br /&gt;
|-&lt;br /&gt;
| [http://jenkins-ci.org/ Jenkins CI]                    || Continuous integration system used by WebQA and EE || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| [https://jquery.com/ jQuery] || JavaScript library, used by many of Mozilla&#039;s sites. || Webdev&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/tmpvar/jsdom jsdom] || DOM implementation in full JS || Test suites in Cloud Services, Tarek Ziade&#039;s team (kinto.js)&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/open-source-parsers/jsoncpp jsoncpp] || A C++ library for interacting with JSON, used by the crashreporter client and Socorro. || Gabriele Svelto&lt;br /&gt;
|-&lt;br /&gt;
| [https://kafka.apache.org/ Kafka] || Distributed transaction log, used for hg.mozilla.org replication. || gps&lt;br /&gt;
|-&lt;br /&gt;
| [http://kombu.readthedocs.org/ Kombu] || Messaging library for Python. Used by Treeherder and others. || Member of Jonathan Griffin&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| libbz2                                        || Compression library for .bz2 format || Julian Seward&lt;br /&gt;
|-&lt;br /&gt;
| libjpeg-turbo                                 || JPEG decoding library || Jeff Muizelaar &lt;br /&gt;
|-&lt;br /&gt;
| [http://www.libpng.org/pub/png/libpng.html libpng] || PNG decoding library || Jeff Muizelaar &lt;br /&gt;
|-&lt;br /&gt;
| libvpx (Google)                               || Library for support of Google’s VP* family of codecs || Tim Terriberry &lt;br /&gt;
|-&lt;br /&gt;
| Linux                                         || OS kernel used in Firefox OS || Unknown &lt;br /&gt;
|-&lt;br /&gt;
| LLVM || Compiler foundation for ASAN, static analysis tools, Rust || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| [https://lodash.com/ lodash] || JavaScript utility library, used by many of Mozilla&#039;s sites. || Webdev &amp;amp; Firefox Hello&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.lua.org/ Lua] ||  Lua is a powerful, efficient, lightweight, embeddable scripting language, lua_sandbox_extensions || Mike Trinkala&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/macvim-dev/macvim MacVim] || Mac wrapper around Vim || -&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.list.org/ Mailman]     || [https://mail.mozilla.org/listinfo Mailing lists] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.mediawiki.org/wiki/MediaWiki MediaWiki]     || You are reading this on a wiki || Sheeri Cabral&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.mercurial-scm.org/ Mercurial]    || Version control system and source code management || GPS &lt;br /&gt;
|-&lt;br /&gt;
| [https://www.meteor.com/ Meteor]    || Build Apps with Javascript - Used in MozDef&#039;s Web UI ||  MozDef Team in EIS&lt;br /&gt;
|-&lt;br /&gt;
| [http://mochajs.org/ Mocha] || JavaScript test runner || Cloud Services, Tarek Ziade&#039;s team (kinto.js); Firefox Hello team&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/kumar303/mohawk Mohawk] ||  Python library for Hawk HTTP authorization. Used by Treeherder and others. || Member of Jonathan Griffin&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [http://mozdef.com mozdef]                    || Security event monitoring and incident response || Jeff Bryner&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mingw.org/wiki/msys msys]         || Used to build Firefox on Windows. Note: It&#039;s likely best we support the newer MSYS2 project instead: https://github.com/msys2 || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.mysql.com/ MySQL]                || Open source relational DB used by many developers, including AMO, SUMO, Input, bugzilla, releng, adminstered by IT || Sheeri Cabral&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.nagios.org/ Nagios]              || IT management system. Used for notifications of system failures || Sheeri Cabral, Ashish V.&lt;br /&gt;
|-&lt;br /&gt;
| [http://netsniff-ng.org/ netsniff-ng]                    || Linux networking toolkit || Michal Purzynski&lt;br /&gt;
|-&lt;br /&gt;
| nICEr                                         || Library for traversing firewalls || Unknown &lt;br /&gt;
|-&lt;br /&gt;
| [https://nixos.org NixOS]                     || Reproducible Linux distribution. Used by some developers || Nicolas B. Pierron&lt;br /&gt;
|-&lt;br /&gt;
| [https://nodejs.org Node.js]                  || JavaScript runtime for server side applications, command line utilities || Nick Desaulniers&lt;br /&gt;
|-&lt;br /&gt;
| nrappkit                                      || Toolkit for building standalone applications || Unknown &lt;br /&gt;
|-&lt;br /&gt;
| [http://nsis.sourceforge.net/Main_Page NSIS]  || Windows installer framework || Matt Howell&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/cisco/OpenH264 OpenH264] (Cisco)                              || H.264 video library || Unknown &lt;br /&gt;
|-&lt;br /&gt;
| [http://www.openLDAP.org/ OpenLDAP]                 || User management used by Infra || :jabba?&lt;br /&gt;
|-&lt;br /&gt;
| [http://openresty.org OpenResty]              || a fast web app server by extending nginx, used by cloudops || Benson Wong (mostlygeek)&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.openssh.com/ OpenSSH]                 || Remote server management, secure transport for Git and Mercurial || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| [http://openssl.org/ OpenSSL]                 || Cryptograpahy and TLS Toolkit || Nick Desaulniers&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.openstreetmap.org OpenStreetMap]     || Online/offline maps, used by the location service and on mozilla.org || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| [https://openvpn.net/ Openvpn]                 || VPN used by Infra || :jabba?&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/khaledhosny/ots OTS]      || OpenType sanitizer used by Firefox to protect against security bugs in underlying platforms related to malicious fonts || Jonathan Kew &lt;br /&gt;
|-&lt;br /&gt;
| [https://www.owasp.org/index.php/ZAP OWASP ZAP]                 || Web security testing tool used by security and QA teams || Simon Bennetts (psiinon)&lt;br /&gt;
|-&lt;br /&gt;
| [https://owncloud.org/ Owncloud]                 || Open platform to host your cloud under your control || Some communities have been using it to host files under their control (ask Nukeador)&lt;br /&gt;
|-&lt;br /&gt;
| [http://pandoc.org/ Pandoc] || universal document converter, lua_sandbox_extensions || Mike Trinkala  &lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/apache/parquet-cpp parquet-cpp] || C++ library to read and write the Apache Parquet columnar data format, lua_sandbox_extensions || Mike Trinkala&lt;br /&gt;
|-&lt;br /&gt;
| [https://pypi.python.org/pypi/parsimonious/ Parsimonious] || Parsing lib used by DXR and a few other sites (I think) || Erik Rose&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/mozilla/pdf.js PDF.js]                  || Used as the PDF Viewer in Firefox and Firefox OS || Brendan Dahl, Yury Delendik&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/PyCQA/pep8 pep8] || Python linter. Used by Treeherder and others. || Member of Jonathan Griffin&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.perl.org/ Perl]                  || Used by Bugzilla || Member of Jonathan Griffin&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [http://python-pillow.org/ pillow] || Python Imaging library || Member of Webcompat team&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/pypa/pip pip] || Python package tool. Used by all Python projects. || Erik Rose and Jannis Leidel, Jannis is core team member ([https://www.pypa.io/ PyPA])&lt;br /&gt;
|-&lt;br /&gt;
| [http://piwik.org/ Piwik] || Analytic software that gives you the control and respects privacy || Some communities have been using it to avoid GA analytics (Ask Nukeador)&lt;br /&gt;
|-&lt;br /&gt;
| [http://cmusphinx.sourceforge.net/ Pocketsphinx]       ||  Speech recognition toolkit embedded into Firefox OS|| André Natal&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.postgresql.org/ PostgreSQL]       || Open source relational DB used by many developers, adminstered by IT || Selena Deckelmann&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/PrismJS/prism Prism.js]       || Syntax highlighting on code samples on MDN || &lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/puppetlabs/puppet Puppet] || System administration tool || Member of Amy Rich&#039;s team, Corey Shield&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/pyflakes/pyflakes pyflakes] || Python linter. Used by Treeherder and others. || Member of Jonathan Griffin&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [http://pypy.org/ PyPy]                                        || Python language runtime. Used by Web Push service. || Cloud Services, esp. Ben Bangert&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/Pylons/pyramid/ Pyramid] || Python Web framework || Cloud Services team&lt;br /&gt;
|-&lt;br /&gt;
| [http://pytest.org/ pytest] || Python testing tool. Used by Treeherder and others. || Dave Hunt&lt;br /&gt;
|-&lt;br /&gt;
| Python                                        || Scripting language || [http://python.org/psf/ Python Software Foundation], Selena Deckelmann is a former board member&lt;br /&gt;
|-&lt;br /&gt;
| [https://pypi.python.org/pypi/pyelasticsearch/ pyelasticsearch] || Python client for elasticsearch || Erik Rose&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.rabbitmq.com/ RabbitMQ]          || Distributed Queue, used by Socorro, Pulse (all our publicly available build/test/commit information flows through this), Treeherder, addons.mozilla.org (with Celery), marketplace.mozilla.org (with Celery) || Selena Deckelmann&lt;br /&gt;
|-&lt;br /&gt;
| [http://http://rapidjson.org/ RapidJSON] ||  A fast JSON parser/generator for C++ with both SAX/DOM style API, lua_sandbox_extensions || Mike Trinkala&lt;br /&gt;
|-&lt;br /&gt;
| [http://facebook.github.io/react/index.html ReactJS] || Javascript library for building user interfaces. Used by Firefox Hello &amp;amp; DevTools || Mark Banner&lt;br /&gt;
|-&lt;br /&gt;
| [https://readthedocs.org/ Read the Docs]   || Hosted automatically-built documentation, used by Cloud Services and a wide variety of mozilla Github projects || Ben Bangert, Jannis Leidel, Gervase Markham&lt;br /&gt;
|-&lt;br /&gt;
| [http://redis.io/ Redis]         || Really fast data structure store, cache and message broker || Cloud Services Tarek Ziade&#039;s team, Loop Server (Hello) team&lt;br /&gt;
|-&lt;br /&gt;
| [http://python-requests.org/ Requests] || &amp;quot;Python HTTP Requests for Humans&amp;quot;. Used by many many Mozilla Python projects. || Member of Jonathan Griffin&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.reviewboard.org/ Review Board]   || The base of MozReview, the new review tool being developed to replace Splinter || Steven MacLeod, Mike Conley&lt;br /&gt;
|-&lt;br /&gt;
| [http://wordlist.aspell.net/ SCOWL]         || en-US word list used for spell checking. || ehsan&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.seleniumhq.org/ Selenium]         || Browser test driver || David Burns, Dave Hunt&lt;br /&gt;
|-&lt;br /&gt;
| [http://sinonjs.org/ Sinon] || JavaScript mock library || Cloud Services, Tarek Ziade&#039;s team (kinto.js); Firefox Hello team&lt;br /&gt;
|-&lt;br /&gt;
| [https://slimerjs.org/ SlimerJS]              || Scriptable browser, based on Gecko, used for functional tests in some few Mozilla projects  ( [[PluotSorbet]], some FxOS apps ? and others ?) || Myk Melez&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.sqlalchemy.org/ SQLAlchemy]] || Database Toolkit and ORM for Python || bhearsum&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.sqlite.org/ SQLite]              || File-based database || asuth&lt;br /&gt;
|-&lt;br /&gt;
| [http://learnboost.github.io/stylus/ Stylus]              || CSS Pre-processor on several sites || webdev&lt;br /&gt;
|-&lt;br /&gt;
| [https://subversion.apache.org/ Subversion]   || https://svn.mozilla.org &#039;&#039;(Planning to decommission in near future)&#039;&#039; || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| [https://suricata-ids.org/ suricata]                    || IDS / IPS / NSM engine || Michal Purzynski&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.squid-cache.org/ Squid]           || Caching proxy || Brian Hourigan&lt;br /&gt;
|-&lt;br /&gt;
| [https://tox.readthedocs.org/en/latest/ Tox]  || Test automation || Dave Hunt&lt;br /&gt;
|-&lt;br /&gt;
| [https://travis-ci.org/ Travis]               || Continuous integration system used by several teams (eg Treeherder) || Jonathan Griffin&#039;s team &lt;br /&gt;
|-&lt;br /&gt;
| [https://uwsgi-docs.readthedocs.io/en/latest/ UWSGI]               || Full hosting stack used in MozDef || MozDef Team in EIS &lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/mitchellh/vagrant Vagrant]|| Build and distribute dev envs, used by Treeherder and others || Member of Jonathan Griffin&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [http://valgrind.org/ Valgrind]               || Memory error detection and profiling of C and C++ code || jseward, njn&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/microsoft/vscode/ vscode] || Code editor || unknown&lt;br /&gt;
|-&lt;br /&gt;
| [http://vim.org/ vim] || editor used by many developers || —&lt;br /&gt;
|-&lt;br /&gt;
| [https://waffle.io/mozilla/ waffle.io] || github project management used by various teams || &lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/w3c/web-platform-tests web-platform-tests]  ||  Testcases and tooling for cross-browser testing of web-platform APIs                                             || jgraham&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.webrtc.org WebRTC.org]            || Components to support real-time communication in browsers and mobile applications || Randell Jesup &lt;br /&gt;
|-&lt;br /&gt;
| [http://www.wordpress.org WordPress]          || Powers our blogs, blog.mozilla.org || Craig Cook &lt;br /&gt;
|-&lt;br /&gt;
| [https://www.webtoolkit.eu/wt Wt] || C++ library for developing web applications, hindsight_admin || Mike Trinkala&lt;br /&gt;
|-&lt;br /&gt;
| [https://xiph.org Xiph.Org]                   || Media codecs ship in Firefox, encoding tools || Ralph Giles&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/Cyan4973/xxHash xxHash] ||  Extremely fast non-cryptographic hash algorithm, lua_sandbox_extensions || Mike Trinkala&lt;br /&gt;
|-&lt;br /&gt;
| [http://tukaani.org/xz/embedded.html XZ Embedded] || Decompressor for the XZ format ||&lt;br /&gt;
|-&lt;br /&gt;
| [http://yasm.tortall.net/ yasm] || Assembler used by the build system. || unknown&lt;br /&gt;
|-&lt;br /&gt;
| [http://zlib.net zlib]                   || Streaming compression and decompression for HTTP, PNG, etc. ||&lt;br /&gt;
|-&lt;br /&gt;
| [https://zookeeper.apache.org/ ZooKeeper] || Distributed synchronization, use by hg.mozilla.org replication || gps&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Rillian</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=MOSS/Foundational_Technology/Projects_We_Use&amp;diff=1162444</id>
		<title>MOSS/Foundational Technology/Projects We Use</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=MOSS/Foundational_Technology/Projects_We_Use&amp;diff=1162444"/>
		<updated>2017-02-09T16:59:21Z</updated>

		<summary type="html">&lt;p&gt;Rillian: Add yasm&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is an incomplete list of the free software and open source projects Mozilla relies upon. As a starting point, it lists each project along with a short statement of how we depend on it. Where practical it would also be helpful to identify a Mozillian most closely associated with our use of each project.&lt;br /&gt;
&lt;br /&gt;
Note that presence on this list isn&#039;t the same as, nor is it a prerequisite for, applying for the MOSS &amp;quot;Foundational Technology&amp;quot; track - projects have to make an application using the process on the [[MOSS/Foundational Technology|Foundational Technology]] page.&lt;br /&gt;
&lt;br /&gt;
This is a work in progress - please contribute to this list.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Project !! Description !! Contact within Mozilla&lt;br /&gt;
|-&lt;br /&gt;
| [https://angularjs.org/ angular.js]           || Used by A-Team for web apps (eg Treeherder) || Member of Jonathan Griffin&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [https://httpd.apache.org Apache Server]      || Used by A-Team for web apps || Member of Jonathan Griffin&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/ansible/ansible Ansible]  || Used by IT (netops) and A-Team to manage deployments || jbarnell , Webops, GPS?&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/h4writer/arewefastyet AreWeFastYet]  || Compare JS performance across JS engines and platforms || Hannes Verschore&lt;br /&gt;
|-&lt;br /&gt;
| [https://atom.io/ Atom]                       || Used (either vanilla or e.g. as [https://github.com/Microsoft/vscode] ) by various developers ||&lt;br /&gt;
|-&lt;br /&gt;
| [https://babeljs.io/ BabelJS]                 || JavaScript compiler, Used by Gaia, TaskCluster team || Selena Deckelmann&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.isc.org/downloads/bind/ BIND] || DNS Server || Brian Hourigan&lt;br /&gt;
|-&lt;br /&gt;
| [https://pypi.python.org/pypi/bleach/ Bleach] || HTML sanitizing library that escapes or strips markup and attributes used by MDN and a bunch of Mozilla sites || Will Kahn-Greene&lt;br /&gt;
|-&lt;br /&gt;
| [https://pypi.python.org/pypi/blessings/ Blessings] || Terminal formatting lib used by mozilla-central build process || Erik Rose&lt;br /&gt;
|-&lt;br /&gt;
| [http://getbootstrap.com/ Bootstrap] || HTML/CSS/JS framework, used by many of Mozilla&#039;s sites. || Webdev&lt;br /&gt;
|-&lt;br /&gt;
| [http://brew.sh/ brew / Homebrew] || Mac OS X packaging system, used to install dev tools || Sam Penrose&lt;br /&gt;
|-&lt;br /&gt;
| [https://bro.org bro]                    || The Bro Network Security Monitor || Michal Purzynski&lt;br /&gt;
|-&lt;br /&gt;
| [http://browserify.org Browserify]                    || Build JS dependencies for the browser || mozilla-services (kinto.js)&lt;br /&gt;
|-&lt;br /&gt;
| [http://buildbot.net/ BuildBot]               || The base system currently in use for release || Dustin J. Mitchell&lt;br /&gt;
|-&lt;br /&gt;
| [http://bugzilla.org/ Bugzilla] (upstream)    || The base Bugzilla on that we customize for Mozilla&#039;s use || Mark Côté&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.celeryproject.org/ Celery] || Distributed task queue. Used by Treeherder and others. || Member of Jonathan Griffin&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [http://ckeditor.com/ CKEditor] || WYSIWYG editor on MDN || &lt;br /&gt;
|-&lt;br /&gt;
| [https://cmake.org/ CMake] || cross-platform family of tools designed to build, test and package software, lua_sandbox, lua_sandbox_extensions, hindsight, hindsight_admin || Mike Trinkala&lt;br /&gt;
|-&lt;br /&gt;
| [http://chaijs.com/ Chai] || JavaScript test and assertion library || Cloud Services, Tarek Ziade&#039;s team (kinto.js), Firefox Hello team&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.llvm.org Clang/LLVM]           || C/C++ compiler and infrastructure || Ehsan Akhgari &amp;amp; Sylvestre Ledru&lt;br /&gt;
|-&lt;br /&gt;
| [https://codemirror.net/ CodeMirror]           || Used in DevTools, [https://thimble.mozilla.org Thimble], and other online code tools || David Humphrey/Simon Wex&lt;br /&gt;
|-&lt;br /&gt;
| [https://pypi.python.org/pypi/cookiecutter/ Cookiecutter] || Templating system used to clone our [https://github.com/mozilla/sugardough Sugardough] Django template || Giorgos Logiotatidis&lt;br /&gt;
|-&lt;br /&gt;
| [https://conemu.github.io/ ConEmu] || Console emulator for Windows. Used by devs running Windows. || Ed Morley&lt;br /&gt;
|-&lt;br /&gt;
| [http://curl.haxx.se/ curl] || internet transfer tool and library, used by crashreporter and FirefoxOS || Daniel Stenberg&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.debian.org/ Debian] || Used on many developer boxes || Sylvestre Ledru or glandium&lt;br /&gt;
|-&lt;br /&gt;
| [http://deis.io Deis] || Open Source Heroku-like PaaS platform. Hosts www.mozilla.org, masterfirefoxos.mozilla.org, etc. || Member of Benjamin Sternthal&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [https://disconnect.me/trackerprotection Disconnect.me ] || Open, transparent, neutral Tracking Protection blocklist used in Firefox Private Browsing Windows || Marshall Erwin, Javaun Moradi, Francois Marier&lt;br /&gt;
|-&lt;br /&gt;
| [https://discourse.org Discourse] || [https://discourse.mozilla-community.org Community], [https://discourse.webmaker.org/ Webmaker], [https://discourse.mozilla-advocacy.org/ Advocacy], et al || [[IT/Community/WG/Discourse|Community Ops]] (Yousef Alam or Tanner Filip)&lt;br /&gt;
|-&lt;br /&gt;
| [https://djangoproject.com Django]     || Backend web framework used on many of our websites, including addons.mozilla.org, marketplace.mozilla.org, support.mozilla.org, Input, Snippets, MDN (Mozilla Developer Network), mozilla.org, Treeherder || Andy McKay and Jannis Leidel are (or have been) on the [https://www.djangoproject.com/foundation/ Django Software Foundation] board, Jannis is core team member&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.django-rest-framework.org Django REST framework]     || API framework. Used by various Mozilla sites including MDN, Firefox marketplace, mozilla.org, support.mozilla.com. || Andy McKay and Jannis Leidel&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/docker/docker Docker]     || Used by release engineering for Linux build and test containers and by ateam for managing test and production services. Used by many Mozilla websites as well such as addons.mozilla.org, marketplace.mozilla.org. (Plus docker-compose and docker machine) || Member of Selena Deckelmann&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.stack.nl/~dimitri/doxygen/ Doxygen] || tool for generating documentation from annotated sources, lua_sandbox || Mike Trinkala  &lt;br /&gt;
|-&lt;br /&gt;
| [https://eclipse.org/ Eclipse] || Integrated Development Environment used by many developers || —&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.elastic.co/products/elasticsearch elasticsearch] || Search engine for various web sites and analytics || Erik Rose (dxr), Kyle Lahnakoski (ActiveData) &lt;br /&gt;
|-&lt;br /&gt;
| [http://www.gnu.org/software/emacs/ emacs] || Programmable editor used by many developers || —&lt;br /&gt;
|-&lt;br /&gt;
| [http://eslint.org/ eslint] || Pluggable linting utiltity used by Firefox Hello, DevTools and Firefox Android || Mark Banner&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/ether/etherpad-lite Etherpad]     || Used for meeting notes, etc || JP Schneider&lt;br /&gt;
|-&lt;br /&gt;
| [https://ffmpeg.org/ ffmpeg] || Used for media decoding. || Jean-Yves Avenard&lt;br /&gt;
|-&lt;br /&gt;
| [https://flake8.readthedocs.org/ flake8] || Wrapper around Python linters. Used by Treeherder and others. || Member of Jonathan Griffin&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [http://flask.pocoo.org/ Flask]               || Python web framework || Erik Rose&lt;br /&gt;
|-&lt;br /&gt;
| [https://fortawesome.github.io/Font-Awesome/ Font Awesome] || Font and CSS toolkit, used by many of Mozilla&#039;s sites. || Webdev&lt;br /&gt;
|-&lt;br /&gt;
| [http://foundation.zurb.com/ Foundation Framework] || Responsive front-end framework, used by some Mozilla sites and add-ons || Luke Crouch&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org GCC]                      || C/C++ compiler and infrastructure || Nathan Froyd&lt;br /&gt;
|-&lt;br /&gt;
| [https://git-scm.com/ Git]                    || Version control system - https://git.mozilla.org || Unknown &lt;br /&gt;
|-&lt;br /&gt;
| [http://gunicorn.org/ gunicorn] || Python WSGI HTTP Server. Used by Treeherder, Socorro, Pontoon. || Webdev&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.freedesktop.org/wiki/Software/HarfBuzz/ HarfBuzz] || International text shaping engine used in Firefox/Servo || Platform team&lt;br /&gt;
|-&lt;br /&gt;
| [http://hunspell.sourceforge.net/ Hunspell]  || Spellchecking engine || Ehsan Akhgari&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/hunspell/hyphen/ Hyphen]  || Hyphenation library || Jonathan Kew&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/jkbrzt/httpie HTTPie]  || HTTP command-line client || Cloud Services (among many others), Tarek Ziade&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.inspircd.org/ inspircd]                 || Irc server used by mozilla || :ashish&lt;br /&gt;
|-&lt;br /&gt;
| [https://theintern.github.io/intern/ Intern]  || Intern is a complete test system for JavaScript designed to help you write and run consistent, high-quality test cases for your JavaScript libraries and applications.  || jrgm/vladikoff&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| [http://canonware.com/jemalloc/ jemalloc]     || Memory allocation library || We can ask glandium&lt;br /&gt;
|-&lt;br /&gt;
| [http://jenkins-ci.org/ Jenkins CI]                    || Continuous integration system used by WebQA and EE || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| [https://jquery.com/ jQuery] || JavaScript library, used by many of Mozilla&#039;s sites. || Webdev&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/tmpvar/jsdom jsdom] || DOM implementation in full JS || Test suites in Cloud Services, Tarek Ziade&#039;s team (kinto.js)&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/open-source-parsers/jsoncpp jsoncpp] || A C++ library for interacting with JSON, used by the crashreporter client and Socorro. || Gabriele Svelto&lt;br /&gt;
|-&lt;br /&gt;
| [https://kafka.apache.org/ Kafka] || Distributed transaction log, used for hg.mozilla.org replication. || gps&lt;br /&gt;
|-&lt;br /&gt;
| [http://kombu.readthedocs.org/ Kombu] || Messaging library for Python. Used by Treeherder and others. || Member of Jonathan Griffin&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| libbz2                                        || Compression library for .bz2 format || Julian Seward&lt;br /&gt;
|-&lt;br /&gt;
| libjpeg-turbo                                 || JPEG decoding library || Jeff Muizelaar &lt;br /&gt;
|-&lt;br /&gt;
| [http://www.libpng.org/pub/png/libpng.html libpng] || PNG decoding library || Jeff Muizelaar &lt;br /&gt;
|-&lt;br /&gt;
| libvpx (Google)                               || Library for support of Google’s VP* family of codecs || Tim Terriberry &lt;br /&gt;
|-&lt;br /&gt;
| Linux                                         || OS kernel used in Firefox OS || Unknown &lt;br /&gt;
|-&lt;br /&gt;
| LLVM || Compiler foundation for ASAN, static analysis tools, Rust || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| [https://lodash.com/ lodash] || JavaScript utility library, used by many of Mozilla&#039;s sites. || Webdev &amp;amp; Firefox Hello&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.lua.org/ Lua] ||  Lua is a powerful, efficient, lightweight, embeddable scripting language, lua_sandbox_extensions || Mike Trinkala&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/macvim-dev/macvim MacVim] || Mac wrapper around Vim || -&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.list.org/ Mailman]     || [https://mail.mozilla.org/listinfo Mailing lists] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.mediawiki.org/wiki/MediaWiki MediaWiki]     || You are reading this on a wiki || Sheeri Cabral&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.mercurial-scm.org/ Mercurial]    || Version control system and source code management || GPS &lt;br /&gt;
|-&lt;br /&gt;
| [https://www.meteor.com/ Meteor]    || Build Apps with Javascript - Used in MozDef&#039;s Web UI ||  MozDef Team in EIS&lt;br /&gt;
|-&lt;br /&gt;
| [http://mochajs.org/ Mocha] || JavaScript test runner || Cloud Services, Tarek Ziade&#039;s team (kinto.js); Firefox Hello team&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/kumar303/mohawk Mohawk] ||  Python library for Hawk HTTP authorization. Used by Treeherder and others. || Member of Jonathan Griffin&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [http://mozdef.com mozdef]                    || Security event monitoring and incident response || Jeff Bryner&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mingw.org/wiki/msys msys]         || Used to build Firefox on Windows. Note: It&#039;s likely best we support the newer MSYS2 project instead: https://github.com/msys2 || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.mysql.com/ MySQL]                || Open source relational DB used by many developers, including AMO, SUMO, Input, bugzilla, releng, adminstered by IT || Sheeri Cabral&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.nagios.org/ Nagios]              || IT management system. Used for notifications of system failures || Sheeri Cabral, Ashish V.&lt;br /&gt;
|-&lt;br /&gt;
| [http://netsniff-ng.org/ netsniff-ng]                    || Linux networking toolkit || Michal Purzynski&lt;br /&gt;
|-&lt;br /&gt;
| nICEr                                         || Library for traversing firewalls || Unknown &lt;br /&gt;
|-&lt;br /&gt;
| [https://nixos.org NixOS]                     || Reproducible Linux distribution. Used by some developers || Nicolas B. Pierron&lt;br /&gt;
|-&lt;br /&gt;
| [https://nodejs.org Node.js]                  || JavaScript runtime for server side applications, command line utilities || Nick Desaulniers&lt;br /&gt;
|-&lt;br /&gt;
| nrappkit                                      || Toolkit for building standalone applications || Unknown &lt;br /&gt;
|-&lt;br /&gt;
| [http://nsis.sourceforge.net/Main_Page NSIS]  || Windows installer framework || Matt Howell&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/cisco/OpenH264 OpenH264] (Cisco)                              || H.264 video library || Unknown &lt;br /&gt;
|-&lt;br /&gt;
| [http://www.openLDAP.org/ OpenLDAP]                 || User management used by Infra || :jabba?&lt;br /&gt;
|-&lt;br /&gt;
| [http://openresty.org OpenResty]              || a fast web app server by extending nginx, used by cloudops || Benson Wong (mostlygeek)&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.openssh.com/ OpenSSH]                 || Remote server management, secure transport for Git and Mercurial || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| [http://openssl.org/ OpenSSL]                 || Cryptograpahy and TLS Toolkit || Nick Desaulniers&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.openstreetmap.org OpenStreetMap]     || Online/offline maps, used by the location service and on mozilla.org || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| [https://openvpn.net/ Openvpn]                 || VPN used by Infra || :jabba?&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/khaledhosny/ots OTS]      || OpenType sanitizer used by Firefox to protect against security bugs in underlying platforms related to malicious fonts || Jonathan Kew &lt;br /&gt;
|-&lt;br /&gt;
| [https://www.owasp.org/index.php/ZAP OWASP ZAP]                 || Web security testing tool used by security and QA teams || Simon Bennetts (psiinon)&lt;br /&gt;
|-&lt;br /&gt;
| [https://owncloud.org/ Owncloud]                 || Open platform to host your cloud under your control || Some communities have been using it to host files under their control (ask Nukeador)&lt;br /&gt;
|-&lt;br /&gt;
| [http://pandoc.org/ Pandoc] || universal document converter, lua_sandbox_extensions || Mike Trinkala  &lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/apache/parquet-cpp parquet-cpp] || C++ library to read and write the Apache Parquet columnar data format, lua_sandbox_extensions || Mike Trinkala&lt;br /&gt;
|-&lt;br /&gt;
| [https://pypi.python.org/pypi/parsimonious/ Parsimonious] || Parsing lib used by DXR and a few other sites (I think) || Erik Rose&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/mozilla/pdf.js PDF.js]                  || Used as the PDF Viewer in Firefox and Firefox OS || Brendan Dahl, Yury Delendik&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/PyCQA/pep8 pep8] || Python linter. Used by Treeherder and others. || Member of Jonathan Griffin&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.perl.org/ Perl]                  || Used by Bugzilla || Member of Jonathan Griffin&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [http://python-pillow.org/ pillow] || Python Imaging library || Member of Webcompat team&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/pypa/pip pip] || Python package tool. Used by all Python projects. || Erik Rose and Jannis Leidel, Jannis is core team member ([https://www.pypa.io/ PyPA])&lt;br /&gt;
|-&lt;br /&gt;
| [http://piwik.org/ Piwik] || Analytic software that gives you the control and respects privacy || Some communities have been using it to avoid GA analytics (Ask Nukeador)&lt;br /&gt;
|-&lt;br /&gt;
| [http://cmusphinx.sourceforge.net/ Pocketsphinx]       ||  Speech recognition toolkit embedded into Firefox OS|| André Natal&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.postgresql.org/ PostgreSQL]       || Open source relational DB used by many developers, adminstered by IT || Selena Deckelmann&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/PrismJS/prism Prism.js]       || Syntax highlighting on code samples on MDN || &lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/puppetlabs/puppet Puppet] || System administration tool || Member of Amy Rich&#039;s team, Corey Shield&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/pyflakes/pyflakes pyflakes] || Python linter. Used by Treeherder and others. || Member of Jonathan Griffin&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [http://pypy.org/ PyPy]                                        || Python language runtime. Used by Web Push service. || Cloud Services, esp. Ben Bangert&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/Pylons/pyramid/ Pyramid] || Python Web framework || Cloud Services team&lt;br /&gt;
|-&lt;br /&gt;
| [http://pytest.org/ pytest] || Python testing tool. Used by Treeherder and others. || Dave Hunt&lt;br /&gt;
|-&lt;br /&gt;
| Python                                        || Scripting language || [http://python.org/psf/ Python Software Foundation], Selena Deckelmann is a former board member&lt;br /&gt;
|-&lt;br /&gt;
| [https://pypi.python.org/pypi/pyelasticsearch/ pyelasticsearch] || Python client for elasticsearch || Erik Rose&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.rabbitmq.com/ RabbitMQ]          || Distributed Queue, used by Socorro, Pulse (all our publicly available build/test/commit information flows through this), Treeherder, addons.mozilla.org (with Celery), marketplace.mozilla.org (with Celery) || Selena Deckelmann&lt;br /&gt;
|-&lt;br /&gt;
| [http://http://rapidjson.org/ RapidJSON] ||  A fast JSON parser/generator for C++ with both SAX/DOM style API, lua_sandbox_extensions || Mike Trinkala&lt;br /&gt;
|-&lt;br /&gt;
| [http://facebook.github.io/react/index.html ReactJS] || Javascript library for building user interfaces. Used by Firefox Hello &amp;amp; DevTools || Mark Banner&lt;br /&gt;
|-&lt;br /&gt;
| [https://readthedocs.org/ Read the Docs]   || Hosted automatically-built documentation, used by Cloud Services and a wide variety of mozilla Github projects || Ben Bangert, Jannis Leidel, Gervase Markham&lt;br /&gt;
|-&lt;br /&gt;
| [http://redis.io/ Redis]         || Really fast data structure store, cache and message broker || Cloud Services Tarek Ziade&#039;s team, Loop Server (Hello) team&lt;br /&gt;
|-&lt;br /&gt;
| [http://python-requests.org/ Requests] || &amp;quot;Python HTTP Requests for Humans&amp;quot;. Used by many many Mozilla Python projects. || Member of Jonathan Griffin&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.reviewboard.org/ Review Board]   || The base of MozReview, the new review tool being developed to replace Splinter || Steven MacLeod, Mike Conley&lt;br /&gt;
|-&lt;br /&gt;
| [http://wordlist.aspell.net/ SCOWL]         || en-US word list used for spell checking. || ehsan&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.seleniumhq.org/ Selenium]         || Browser test driver || David Burns, Dave Hunt&lt;br /&gt;
|-&lt;br /&gt;
| [http://sinonjs.org/ Sinon] || JavaScript mock library || Cloud Services, Tarek Ziade&#039;s team (kinto.js); Firefox Hello team&lt;br /&gt;
|-&lt;br /&gt;
| [https://slimerjs.org/ SlimerJS]              || Scriptable browser, based on Gecko, used for functional tests in some few Mozilla projects  ( [[PluotSorbet]], some FxOS apps ? and others ?) || Myk Melez&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.sqlalchemy.org/ SQLAlchemy]] || Database Toolkit and ORM for Python || bhearsum&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.sqlite.org/ SQLite]              || File-based database || asuth&lt;br /&gt;
|-&lt;br /&gt;
| [http://learnboost.github.io/stylus/ Stylus]              || CSS Pre-processor on several sites || webdev&lt;br /&gt;
|-&lt;br /&gt;
| [https://subversion.apache.org/ Subversion]   || https://svn.mozilla.org &#039;&#039;(Planning to decommission in near future)&#039;&#039; || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| [https://suricata-ids.org/ suricata]                    || IDS / IPS / NSM engine || Michal Purzynski&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.squid-cache.org/ Squid]           || Caching proxy || Brian Hourigan&lt;br /&gt;
|-&lt;br /&gt;
| [https://tox.readthedocs.org/en/latest/ Tox]  || Test automation || Dave Hunt&lt;br /&gt;
|-&lt;br /&gt;
| [https://travis-ci.org/ Travis]               || Continuous integration system used by several teams (eg Treeherder) || Jonathan Griffin&#039;s team &lt;br /&gt;
|-&lt;br /&gt;
| [https://uwsgi-docs.readthedocs.io/en/latest/ UWSGI]               || Full hosting stack used in MozDef || MozDef Team in EIS &lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/mitchellh/vagrant Vagrant]|| Build and distribute dev envs, used by Treeherder and others || Member of Jonathan Griffin&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [http://valgrind.org/ Valgrind]               || Memory error detection and profiling of C and C++ code || jseward, njn&lt;br /&gt;
|-&lt;br /&gt;
| [http://vim.org/ vim] || editor used by many developers || —&lt;br /&gt;
|-&lt;br /&gt;
| [https://waffle.io/mozilla/ waffle.io] || github project management used by various teams || &lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/w3c/web-platform-tests web-platform-tests]  ||  Testcases and tooling for cross-browser testing of web-platform APIs                                             || jgraham&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.webrtc.org WebRTC.org]            || Components to support real-time communication in browsers and mobile applications || Randell Jesup &lt;br /&gt;
|-&lt;br /&gt;
| [http://www.wordpress.org WordPress]          || Powers our blogs, blog.mozilla.org || Craig Cook &lt;br /&gt;
|-&lt;br /&gt;
| [https://www.webtoolkit.eu/wt Wt] || C++ library for developing web applications, hindsight_admin || Mike Trinkala&lt;br /&gt;
|-&lt;br /&gt;
| [https://xiph.org Xiph.Org]                   || Media codecs ship in Firefox, encoding tools || Ralph Giles&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/Cyan4973/xxHash xxHash] ||  Extremely fast non-cryptographic hash algorithm, lua_sandbox_extensions || Mike Trinkala&lt;br /&gt;
|-&lt;br /&gt;
| [http://tukaani.org/xz/embedded.html XZ Embedded] || Decompressor for the XZ format ||&lt;br /&gt;
|-&lt;br /&gt;
| [http://yasm.tortall.net/ yasm] || Assembler used by the build system. || unknown&lt;br /&gt;
|-&lt;br /&gt;
| [http://zlib.net zlib]                   || Streaming compression and decompression for HTTP, PNG, etc. ||&lt;br /&gt;
|-&lt;br /&gt;
| [https://zookeeper.apache.org/ ZooKeeper] || Distributed synchronization, use by hg.mozilla.org replication || gps&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Rillian</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=MOSS/Foundational_Technology/Projects_We_Use&amp;diff=1162443</id>
		<title>MOSS/Foundational Technology/Projects We Use</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=MOSS/Foundational_Technology/Projects_We_Use&amp;diff=1162443"/>
		<updated>2017-02-09T16:57:19Z</updated>

		<summary type="html">&lt;p&gt;Rillian: Add ffmpeg&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is an incomplete list of the free software and open source projects Mozilla relies upon. As a starting point, it lists each project along with a short statement of how we depend on it. Where practical it would also be helpful to identify a Mozillian most closely associated with our use of each project.&lt;br /&gt;
&lt;br /&gt;
Note that presence on this list isn&#039;t the same as, nor is it a prerequisite for, applying for the MOSS &amp;quot;Foundational Technology&amp;quot; track - projects have to make an application using the process on the [[MOSS/Foundational Technology|Foundational Technology]] page.&lt;br /&gt;
&lt;br /&gt;
This is a work in progress - please contribute to this list.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Project !! Description !! Contact within Mozilla&lt;br /&gt;
|-&lt;br /&gt;
| [https://angularjs.org/ angular.js]           || Used by A-Team for web apps (eg Treeherder) || Member of Jonathan Griffin&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [https://httpd.apache.org Apache Server]      || Used by A-Team for web apps || Member of Jonathan Griffin&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/ansible/ansible Ansible]  || Used by IT (netops) and A-Team to manage deployments || jbarnell , Webops, GPS?&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/h4writer/arewefastyet AreWeFastYet]  || Compare JS performance across JS engines and platforms || Hannes Verschore&lt;br /&gt;
|-&lt;br /&gt;
| [https://atom.io/ Atom]                       || Used (either vanilla or e.g. as [https://github.com/Microsoft/vscode] ) by various developers ||&lt;br /&gt;
|-&lt;br /&gt;
| [https://babeljs.io/ BabelJS]                 || JavaScript compiler, Used by Gaia, TaskCluster team || Selena Deckelmann&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.isc.org/downloads/bind/ BIND] || DNS Server || Brian Hourigan&lt;br /&gt;
|-&lt;br /&gt;
| [https://pypi.python.org/pypi/bleach/ Bleach] || HTML sanitizing library that escapes or strips markup and attributes used by MDN and a bunch of Mozilla sites || Will Kahn-Greene&lt;br /&gt;
|-&lt;br /&gt;
| [https://pypi.python.org/pypi/blessings/ Blessings] || Terminal formatting lib used by mozilla-central build process || Erik Rose&lt;br /&gt;
|-&lt;br /&gt;
| [http://getbootstrap.com/ Bootstrap] || HTML/CSS/JS framework, used by many of Mozilla&#039;s sites. || Webdev&lt;br /&gt;
|-&lt;br /&gt;
| [http://brew.sh/ brew / Homebrew] || Mac OS X packaging system, used to install dev tools || Sam Penrose&lt;br /&gt;
|-&lt;br /&gt;
| [https://bro.org bro]                    || The Bro Network Security Monitor || Michal Purzynski&lt;br /&gt;
|-&lt;br /&gt;
| [http://browserify.org Browserify]                    || Build JS dependencies for the browser || mozilla-services (kinto.js)&lt;br /&gt;
|-&lt;br /&gt;
| [http://buildbot.net/ BuildBot]               || The base system currently in use for release || Dustin J. Mitchell&lt;br /&gt;
|-&lt;br /&gt;
| [http://bugzilla.org/ Bugzilla] (upstream)    || The base Bugzilla on that we customize for Mozilla&#039;s use || Mark Côté&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.celeryproject.org/ Celery] || Distributed task queue. Used by Treeherder and others. || Member of Jonathan Griffin&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [http://ckeditor.com/ CKEditor] || WYSIWYG editor on MDN || &lt;br /&gt;
|-&lt;br /&gt;
| [https://cmake.org/ CMake] || cross-platform family of tools designed to build, test and package software, lua_sandbox, lua_sandbox_extensions, hindsight, hindsight_admin || Mike Trinkala&lt;br /&gt;
|-&lt;br /&gt;
| [http://chaijs.com/ Chai] || JavaScript test and assertion library || Cloud Services, Tarek Ziade&#039;s team (kinto.js), Firefox Hello team&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.llvm.org Clang/LLVM]           || C/C++ compiler and infrastructure || Ehsan Akhgari &amp;amp; Sylvestre Ledru&lt;br /&gt;
|-&lt;br /&gt;
| [https://codemirror.net/ CodeMirror]           || Used in DevTools, [https://thimble.mozilla.org Thimble], and other online code tools || David Humphrey/Simon Wex&lt;br /&gt;
|-&lt;br /&gt;
| [https://pypi.python.org/pypi/cookiecutter/ Cookiecutter] || Templating system used to clone our [https://github.com/mozilla/sugardough Sugardough] Django template || Giorgos Logiotatidis&lt;br /&gt;
|-&lt;br /&gt;
| [https://conemu.github.io/ ConEmu] || Console emulator for Windows. Used by devs running Windows. || Ed Morley&lt;br /&gt;
|-&lt;br /&gt;
| [http://curl.haxx.se/ curl] || internet transfer tool and library, used by crashreporter and FirefoxOS || Daniel Stenberg&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.debian.org/ Debian] || Used on many developer boxes || Sylvestre Ledru or glandium&lt;br /&gt;
|-&lt;br /&gt;
| [http://deis.io Deis] || Open Source Heroku-like PaaS platform. Hosts www.mozilla.org, masterfirefoxos.mozilla.org, etc. || Member of Benjamin Sternthal&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [https://disconnect.me/trackerprotection Disconnect.me ] || Open, transparent, neutral Tracking Protection blocklist used in Firefox Private Browsing Windows || Marshall Erwin, Javaun Moradi, Francois Marier&lt;br /&gt;
|-&lt;br /&gt;
| [https://discourse.org Discourse] || [https://discourse.mozilla-community.org Community], [https://discourse.webmaker.org/ Webmaker], [https://discourse.mozilla-advocacy.org/ Advocacy], et al || [[IT/Community/WG/Discourse|Community Ops]] (Yousef Alam or Tanner Filip)&lt;br /&gt;
|-&lt;br /&gt;
| [https://djangoproject.com Django]     || Backend web framework used on many of our websites, including addons.mozilla.org, marketplace.mozilla.org, support.mozilla.org, Input, Snippets, MDN (Mozilla Developer Network), mozilla.org, Treeherder || Andy McKay and Jannis Leidel are (or have been) on the [https://www.djangoproject.com/foundation/ Django Software Foundation] board, Jannis is core team member&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.django-rest-framework.org Django REST framework]     || API framework. Used by various Mozilla sites including MDN, Firefox marketplace, mozilla.org, support.mozilla.com. || Andy McKay and Jannis Leidel&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/docker/docker Docker]     || Used by release engineering for Linux build and test containers and by ateam for managing test and production services. Used by many Mozilla websites as well such as addons.mozilla.org, marketplace.mozilla.org. (Plus docker-compose and docker machine) || Member of Selena Deckelmann&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.stack.nl/~dimitri/doxygen/ Doxygen] || tool for generating documentation from annotated sources, lua_sandbox || Mike Trinkala  &lt;br /&gt;
|-&lt;br /&gt;
| [https://eclipse.org/ Eclipse] || Integrated Development Environment used by many developers || —&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.elastic.co/products/elasticsearch elasticsearch] || Search engine for various web sites and analytics || Erik Rose (dxr), Kyle Lahnakoski (ActiveData) &lt;br /&gt;
|-&lt;br /&gt;
| [http://www.gnu.org/software/emacs/ emacs] || Programmable editor used by many developers || —&lt;br /&gt;
|-&lt;br /&gt;
| [http://eslint.org/ eslint] || Pluggable linting utiltity used by Firefox Hello, DevTools and Firefox Android || Mark Banner&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/ether/etherpad-lite Etherpad]     || Used for meeting notes, etc || JP Schneider&lt;br /&gt;
|-&lt;br /&gt;
| [https://ffmpeg.org/ ffmpeg] || Used for media decoding. || Jean-Yves Avenard&lt;br /&gt;
|-&lt;br /&gt;
| [https://flake8.readthedocs.org/ flake8] || Wrapper around Python linters. Used by Treeherder and others. || Member of Jonathan Griffin&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [http://flask.pocoo.org/ Flask]               || Python web framework || Erik Rose&lt;br /&gt;
|-&lt;br /&gt;
| [https://fortawesome.github.io/Font-Awesome/ Font Awesome] || Font and CSS toolkit, used by many of Mozilla&#039;s sites. || Webdev&lt;br /&gt;
|-&lt;br /&gt;
| [http://foundation.zurb.com/ Foundation Framework] || Responsive front-end framework, used by some Mozilla sites and add-ons || Luke Crouch&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org GCC]                      || C/C++ compiler and infrastructure || Nathan Froyd&lt;br /&gt;
|-&lt;br /&gt;
| [https://git-scm.com/ Git]                    || Version control system - https://git.mozilla.org || Unknown &lt;br /&gt;
|-&lt;br /&gt;
| [http://gunicorn.org/ gunicorn] || Python WSGI HTTP Server. Used by Treeherder, Socorro, Pontoon. || Webdev&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.freedesktop.org/wiki/Software/HarfBuzz/ HarfBuzz] || International text shaping engine used in Firefox/Servo || Platform team&lt;br /&gt;
|-&lt;br /&gt;
| [http://hunspell.sourceforge.net/ Hunspell]  || Spellchecking engine || Ehsan Akhgari&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/hunspell/hyphen/ Hyphen]  || Hyphenation library || Jonathan Kew&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/jkbrzt/httpie HTTPie]  || HTTP command-line client || Cloud Services (among many others), Tarek Ziade&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.inspircd.org/ inspircd]                 || Irc server used by mozilla || :ashish&lt;br /&gt;
|-&lt;br /&gt;
| [https://theintern.github.io/intern/ Intern]  || Intern is a complete test system for JavaScript designed to help you write and run consistent, high-quality test cases for your JavaScript libraries and applications.  || jrgm/vladikoff&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| [http://canonware.com/jemalloc/ jemalloc]     || Memory allocation library || We can ask glandium&lt;br /&gt;
|-&lt;br /&gt;
| [http://jenkins-ci.org/ Jenkins CI]                    || Continuous integration system used by WebQA and EE || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| [https://jquery.com/ jQuery] || JavaScript library, used by many of Mozilla&#039;s sites. || Webdev&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/tmpvar/jsdom jsdom] || DOM implementation in full JS || Test suites in Cloud Services, Tarek Ziade&#039;s team (kinto.js)&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/open-source-parsers/jsoncpp jsoncpp] || A C++ library for interacting with JSON, used by the crashreporter client and Socorro. || Gabriele Svelto&lt;br /&gt;
|-&lt;br /&gt;
| [https://kafka.apache.org/ Kafka] || Distributed transaction log, used for hg.mozilla.org replication. || gps&lt;br /&gt;
|-&lt;br /&gt;
| [http://kombu.readthedocs.org/ Kombu] || Messaging library for Python. Used by Treeherder and others. || Member of Jonathan Griffin&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| libbz2                                        || Compression library for .bz2 format || Julian Seward&lt;br /&gt;
|-&lt;br /&gt;
| libjpeg-turbo                                 || JPEG decoding library || Jeff Muizelaar &lt;br /&gt;
|-&lt;br /&gt;
| [http://www.libpng.org/pub/png/libpng.html libpng] || PNG decoding library || Jeff Muizelaar &lt;br /&gt;
|-&lt;br /&gt;
| libvpx (Google)                               || Library for support of Google’s VP* family of codecs || Tim Terriberry &lt;br /&gt;
|-&lt;br /&gt;
| Linux                                         || OS kernel used in Firefox OS || Unknown &lt;br /&gt;
|-&lt;br /&gt;
| LLVM || Compiler foundation for ASAN, static analysis tools, Rust || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| [https://lodash.com/ lodash] || JavaScript utility library, used by many of Mozilla&#039;s sites. || Webdev &amp;amp; Firefox Hello&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.lua.org/ Lua] ||  Lua is a powerful, efficient, lightweight, embeddable scripting language, lua_sandbox_extensions || Mike Trinkala&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/macvim-dev/macvim MacVim] || Mac wrapper around Vim || -&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.list.org/ Mailman]     || [https://mail.mozilla.org/listinfo Mailing lists] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.mediawiki.org/wiki/MediaWiki MediaWiki]     || You are reading this on a wiki || Sheeri Cabral&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.mercurial-scm.org/ Mercurial]    || Version control system and source code management || GPS &lt;br /&gt;
|-&lt;br /&gt;
| [https://www.meteor.com/ Meteor]    || Build Apps with Javascript - Used in MozDef&#039;s Web UI ||  MozDef Team in EIS&lt;br /&gt;
|-&lt;br /&gt;
| [http://mochajs.org/ Mocha] || JavaScript test runner || Cloud Services, Tarek Ziade&#039;s team (kinto.js); Firefox Hello team&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/kumar303/mohawk Mohawk] ||  Python library for Hawk HTTP authorization. Used by Treeherder and others. || Member of Jonathan Griffin&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [http://mozdef.com mozdef]                    || Security event monitoring and incident response || Jeff Bryner&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mingw.org/wiki/msys msys]         || Used to build Firefox on Windows. Note: It&#039;s likely best we support the newer MSYS2 project instead: https://github.com/msys2 || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.mysql.com/ MySQL]                || Open source relational DB used by many developers, including AMO, SUMO, Input, bugzilla, releng, adminstered by IT || Sheeri Cabral&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.nagios.org/ Nagios]              || IT management system. Used for notifications of system failures || Sheeri Cabral, Ashish V.&lt;br /&gt;
|-&lt;br /&gt;
| [http://netsniff-ng.org/ netsniff-ng]                    || Linux networking toolkit || Michal Purzynski&lt;br /&gt;
|-&lt;br /&gt;
| nICEr                                         || Library for traversing firewalls || Unknown &lt;br /&gt;
|-&lt;br /&gt;
| [https://nixos.org NixOS]                     || Reproducible Linux distribution. Used by some developers || Nicolas B. Pierron&lt;br /&gt;
|-&lt;br /&gt;
| [https://nodejs.org Node.js]                  || JavaScript runtime for server side applications, command line utilities || Nick Desaulniers&lt;br /&gt;
|-&lt;br /&gt;
| nrappkit                                      || Toolkit for building standalone applications || Unknown &lt;br /&gt;
|-&lt;br /&gt;
| [http://nsis.sourceforge.net/Main_Page NSIS]  || Windows installer framework || Matt Howell&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/cisco/OpenH264 OpenH264] (Cisco)                              || H.264 video library || Unknown &lt;br /&gt;
|-&lt;br /&gt;
| [http://www.openLDAP.org/ OpenLDAP]                 || User management used by Infra || :jabba?&lt;br /&gt;
|-&lt;br /&gt;
| [http://openresty.org OpenResty]              || a fast web app server by extending nginx, used by cloudops || Benson Wong (mostlygeek)&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.openssh.com/ OpenSSH]                 || Remote server management, secure transport for Git and Mercurial || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| [http://openssl.org/ OpenSSL]                 || Cryptograpahy and TLS Toolkit || Nick Desaulniers&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.openstreetmap.org OpenStreetMap]     || Online/offline maps, used by the location service and on mozilla.org || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| [https://openvpn.net/ Openvpn]                 || VPN used by Infra || :jabba?&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/khaledhosny/ots OTS]      || OpenType sanitizer used by Firefox to protect against security bugs in underlying platforms related to malicious fonts || Jonathan Kew &lt;br /&gt;
|-&lt;br /&gt;
| [https://www.owasp.org/index.php/ZAP OWASP ZAP]                 || Web security testing tool used by security and QA teams || Simon Bennetts (psiinon)&lt;br /&gt;
|-&lt;br /&gt;
| [https://owncloud.org/ Owncloud]                 || Open platform to host your cloud under your control || Some communities have been using it to host files under their control (ask Nukeador)&lt;br /&gt;
|-&lt;br /&gt;
| [http://pandoc.org/ Pandoc] || universal document converter, lua_sandbox_extensions || Mike Trinkala  &lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/apache/parquet-cpp parquet-cpp] || C++ library to read and write the Apache Parquet columnar data format, lua_sandbox_extensions || Mike Trinkala&lt;br /&gt;
|-&lt;br /&gt;
| [https://pypi.python.org/pypi/parsimonious/ Parsimonious] || Parsing lib used by DXR and a few other sites (I think) || Erik Rose&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/mozilla/pdf.js PDF.js]                  || Used as the PDF Viewer in Firefox and Firefox OS || Brendan Dahl, Yury Delendik&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/PyCQA/pep8 pep8] || Python linter. Used by Treeherder and others. || Member of Jonathan Griffin&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.perl.org/ Perl]                  || Used by Bugzilla || Member of Jonathan Griffin&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [http://python-pillow.org/ pillow] || Python Imaging library || Member of Webcompat team&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/pypa/pip pip] || Python package tool. Used by all Python projects. || Erik Rose and Jannis Leidel, Jannis is core team member ([https://www.pypa.io/ PyPA])&lt;br /&gt;
|-&lt;br /&gt;
| [http://piwik.org/ Piwik] || Analytic software that gives you the control and respects privacy || Some communities have been using it to avoid GA analytics (Ask Nukeador)&lt;br /&gt;
|-&lt;br /&gt;
| [http://cmusphinx.sourceforge.net/ Pocketsphinx]       ||  Speech recognition toolkit embedded into Firefox OS|| André Natal&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.postgresql.org/ PostgreSQL]       || Open source relational DB used by many developers, adminstered by IT || Selena Deckelmann&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/PrismJS/prism Prism.js]       || Syntax highlighting on code samples on MDN || &lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/puppetlabs/puppet Puppet] || System administration tool || Member of Amy Rich&#039;s team, Corey Shield&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/pyflakes/pyflakes pyflakes] || Python linter. Used by Treeherder and others. || Member of Jonathan Griffin&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [http://pypy.org/ PyPy]                                        || Python language runtime. Used by Web Push service. || Cloud Services, esp. Ben Bangert&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/Pylons/pyramid/ Pyramid] || Python Web framework || Cloud Services team&lt;br /&gt;
|-&lt;br /&gt;
| [http://pytest.org/ pytest] || Python testing tool. Used by Treeherder and others. || Dave Hunt&lt;br /&gt;
|-&lt;br /&gt;
| Python                                        || Scripting language || [http://python.org/psf/ Python Software Foundation], Selena Deckelmann is a former board member&lt;br /&gt;
|-&lt;br /&gt;
| [https://pypi.python.org/pypi/pyelasticsearch/ pyelasticsearch] || Python client for elasticsearch || Erik Rose&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.rabbitmq.com/ RabbitMQ]          || Distributed Queue, used by Socorro, Pulse (all our publicly available build/test/commit information flows through this), Treeherder, addons.mozilla.org (with Celery), marketplace.mozilla.org (with Celery) || Selena Deckelmann&lt;br /&gt;
|-&lt;br /&gt;
| [http://http://rapidjson.org/ RapidJSON] ||  A fast JSON parser/generator for C++ with both SAX/DOM style API, lua_sandbox_extensions || Mike Trinkala&lt;br /&gt;
|-&lt;br /&gt;
| [http://facebook.github.io/react/index.html ReactJS] || Javascript library for building user interfaces. Used by Firefox Hello &amp;amp; DevTools || Mark Banner&lt;br /&gt;
|-&lt;br /&gt;
| [https://readthedocs.org/ Read the Docs]   || Hosted automatically-built documentation, used by Cloud Services and a wide variety of mozilla Github projects || Ben Bangert, Jannis Leidel, Gervase Markham&lt;br /&gt;
|-&lt;br /&gt;
| [http://redis.io/ Redis]         || Really fast data structure store, cache and message broker || Cloud Services Tarek Ziade&#039;s team, Loop Server (Hello) team&lt;br /&gt;
|-&lt;br /&gt;
| [http://python-requests.org/ Requests] || &amp;quot;Python HTTP Requests for Humans&amp;quot;. Used by many many Mozilla Python projects. || Member of Jonathan Griffin&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.reviewboard.org/ Review Board]   || The base of MozReview, the new review tool being developed to replace Splinter || Steven MacLeod, Mike Conley&lt;br /&gt;
|-&lt;br /&gt;
| [http://wordlist.aspell.net/ SCOWL]         || en-US word list used for spell checking. || ehsan&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.seleniumhq.org/ Selenium]         || Browser test driver || David Burns, Dave Hunt&lt;br /&gt;
|-&lt;br /&gt;
| [http://sinonjs.org/ Sinon] || JavaScript mock library || Cloud Services, Tarek Ziade&#039;s team (kinto.js); Firefox Hello team&lt;br /&gt;
|-&lt;br /&gt;
| [https://slimerjs.org/ SlimerJS]              || Scriptable browser, based on Gecko, used for functional tests in some few Mozilla projects  ( [[PluotSorbet]], some FxOS apps ? and others ?) || Myk Melez&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.sqlalchemy.org/ SQLAlchemy]] || Database Toolkit and ORM for Python || bhearsum&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.sqlite.org/ SQLite]              || File-based database || asuth&lt;br /&gt;
|-&lt;br /&gt;
| [http://learnboost.github.io/stylus/ Stylus]              || CSS Pre-processor on several sites || webdev&lt;br /&gt;
|-&lt;br /&gt;
| [https://subversion.apache.org/ Subversion]   || https://svn.mozilla.org &#039;&#039;(Planning to decommission in near future)&#039;&#039; || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| [https://suricata-ids.org/ suricata]                    || IDS / IPS / NSM engine || Michal Purzynski&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.squid-cache.org/ Squid]           || Caching proxy || Brian Hourigan&lt;br /&gt;
|-&lt;br /&gt;
| [https://tox.readthedocs.org/en/latest/ Tox]  || Test automation || Dave Hunt&lt;br /&gt;
|-&lt;br /&gt;
| [https://travis-ci.org/ Travis]               || Continuous integration system used by several teams (eg Treeherder) || Jonathan Griffin&#039;s team &lt;br /&gt;
|-&lt;br /&gt;
| [https://uwsgi-docs.readthedocs.io/en/latest/ UWSGI]               || Full hosting stack used in MozDef || MozDef Team in EIS &lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/mitchellh/vagrant Vagrant]|| Build and distribute dev envs, used by Treeherder and others || Member of Jonathan Griffin&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [http://valgrind.org/ Valgrind]               || Memory error detection and profiling of C and C++ code || jseward, njn&lt;br /&gt;
|-&lt;br /&gt;
| [http://vim.org/ vim] || editor used by many developers || —&lt;br /&gt;
|-&lt;br /&gt;
| [https://waffle.io/mozilla/ waffle.io] || github project management used by various teams || &lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/w3c/web-platform-tests web-platform-tests]  ||  Testcases and tooling for cross-browser testing of web-platform APIs                                             || jgraham&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.webrtc.org WebRTC.org]            || Components to support real-time communication in browsers and mobile applications || Randell Jesup &lt;br /&gt;
|-&lt;br /&gt;
| [http://www.wordpress.org WordPress]          || Powers our blogs, blog.mozilla.org || Craig Cook &lt;br /&gt;
|-&lt;br /&gt;
| [https://www.webtoolkit.eu/wt Wt] || C++ library for developing web applications, hindsight_admin || Mike Trinkala&lt;br /&gt;
|-&lt;br /&gt;
| [https://xiph.org Xiph.Org]                   || Media codecs ship in Firefox, encoding tools || Ralph Giles&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/Cyan4973/xxHash xxHash] ||  Extremely fast non-cryptographic hash algorithm, lua_sandbox_extensions || Mike Trinkala&lt;br /&gt;
|-&lt;br /&gt;
| [http://tukaani.org/xz/embedded.html XZ Embedded] || Decompressor for the XZ format ||&lt;br /&gt;
|-&lt;br /&gt;
| [http://zlib.net zlib]                   || Streaming compression and decompression for HTTP, PNG, etc. ||&lt;br /&gt;
|-&lt;br /&gt;
| [https://zookeeper.apache.org/ ZooKeeper] || Distributed synchronization, use by hg.mozilla.org replication || gps&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Rillian</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=MOSS/Foundational_Technology/Projects_We_Use&amp;diff=1162442</id>
		<title>MOSS/Foundational Technology/Projects We Use</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=MOSS/Foundational_Technology/Projects_We_Use&amp;diff=1162442"/>
		<updated>2017-02-09T16:54:23Z</updated>

		<summary type="html">&lt;p&gt;Rillian: Hyperlink OpenH264 project&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is an incomplete list of the free software and open source projects Mozilla relies upon. As a starting point, it lists each project along with a short statement of how we depend on it. Where practical it would also be helpful to identify a Mozillian most closely associated with our use of each project.&lt;br /&gt;
&lt;br /&gt;
Note that presence on this list isn&#039;t the same as, nor is it a prerequisite for, applying for the MOSS &amp;quot;Foundational Technology&amp;quot; track - projects have to make an application using the process on the [[MOSS/Foundational Technology|Foundational Technology]] page.&lt;br /&gt;
&lt;br /&gt;
This is a work in progress - please contribute to this list.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Project !! Description !! Contact within Mozilla&lt;br /&gt;
|-&lt;br /&gt;
| [https://angularjs.org/ angular.js]           || Used by A-Team for web apps (eg Treeherder) || Member of Jonathan Griffin&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [https://httpd.apache.org Apache Server]      || Used by A-Team for web apps || Member of Jonathan Griffin&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/ansible/ansible Ansible]  || Used by IT (netops) and A-Team to manage deployments || jbarnell , Webops, GPS?&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/h4writer/arewefastyet AreWeFastYet]  || Compare JS performance across JS engines and platforms || Hannes Verschore&lt;br /&gt;
|-&lt;br /&gt;
| [https://atom.io/ Atom]                       || Used (either vanilla or e.g. as [https://github.com/Microsoft/vscode] ) by various developers ||&lt;br /&gt;
|-&lt;br /&gt;
| [https://babeljs.io/ BabelJS]                 || JavaScript compiler, Used by Gaia, TaskCluster team || Selena Deckelmann&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.isc.org/downloads/bind/ BIND] || DNS Server || Brian Hourigan&lt;br /&gt;
|-&lt;br /&gt;
| [https://pypi.python.org/pypi/bleach/ Bleach] || HTML sanitizing library that escapes or strips markup and attributes used by MDN and a bunch of Mozilla sites || Will Kahn-Greene&lt;br /&gt;
|-&lt;br /&gt;
| [https://pypi.python.org/pypi/blessings/ Blessings] || Terminal formatting lib used by mozilla-central build process || Erik Rose&lt;br /&gt;
|-&lt;br /&gt;
| [http://getbootstrap.com/ Bootstrap] || HTML/CSS/JS framework, used by many of Mozilla&#039;s sites. || Webdev&lt;br /&gt;
|-&lt;br /&gt;
| [http://brew.sh/ brew / Homebrew] || Mac OS X packaging system, used to install dev tools || Sam Penrose&lt;br /&gt;
|-&lt;br /&gt;
| [https://bro.org bro]                    || The Bro Network Security Monitor || Michal Purzynski&lt;br /&gt;
|-&lt;br /&gt;
| [http://browserify.org Browserify]                    || Build JS dependencies for the browser || mozilla-services (kinto.js)&lt;br /&gt;
|-&lt;br /&gt;
| [http://buildbot.net/ BuildBot]               || The base system currently in use for release || Dustin J. Mitchell&lt;br /&gt;
|-&lt;br /&gt;
| [http://bugzilla.org/ Bugzilla] (upstream)    || The base Bugzilla on that we customize for Mozilla&#039;s use || Mark Côté&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.celeryproject.org/ Celery] || Distributed task queue. Used by Treeherder and others. || Member of Jonathan Griffin&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [http://ckeditor.com/ CKEditor] || WYSIWYG editor on MDN || &lt;br /&gt;
|-&lt;br /&gt;
| [https://cmake.org/ CMake] || cross-platform family of tools designed to build, test and package software, lua_sandbox, lua_sandbox_extensions, hindsight, hindsight_admin || Mike Trinkala&lt;br /&gt;
|-&lt;br /&gt;
| [http://chaijs.com/ Chai] || JavaScript test and assertion library || Cloud Services, Tarek Ziade&#039;s team (kinto.js), Firefox Hello team&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.llvm.org Clang/LLVM]           || C/C++ compiler and infrastructure || Ehsan Akhgari &amp;amp; Sylvestre Ledru&lt;br /&gt;
|-&lt;br /&gt;
| [https://codemirror.net/ CodeMirror]           || Used in DevTools, [https://thimble.mozilla.org Thimble], and other online code tools || David Humphrey/Simon Wex&lt;br /&gt;
|-&lt;br /&gt;
| [https://pypi.python.org/pypi/cookiecutter/ Cookiecutter] || Templating system used to clone our [https://github.com/mozilla/sugardough Sugardough] Django template || Giorgos Logiotatidis&lt;br /&gt;
|-&lt;br /&gt;
| [https://conemu.github.io/ ConEmu] || Console emulator for Windows. Used by devs running Windows. || Ed Morley&lt;br /&gt;
|-&lt;br /&gt;
| [http://curl.haxx.se/ curl] || internet transfer tool and library, used by crashreporter and FirefoxOS || Daniel Stenberg&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.debian.org/ Debian] || Used on many developer boxes || Sylvestre Ledru or glandium&lt;br /&gt;
|-&lt;br /&gt;
| [http://deis.io Deis] || Open Source Heroku-like PaaS platform. Hosts www.mozilla.org, masterfirefoxos.mozilla.org, etc. || Member of Benjamin Sternthal&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [https://disconnect.me/trackerprotection Disconnect.me ] || Open, transparent, neutral Tracking Protection blocklist used in Firefox Private Browsing Windows || Marshall Erwin, Javaun Moradi, Francois Marier&lt;br /&gt;
|-&lt;br /&gt;
| [https://discourse.org Discourse] || [https://discourse.mozilla-community.org Community], [https://discourse.webmaker.org/ Webmaker], [https://discourse.mozilla-advocacy.org/ Advocacy], et al || [[IT/Community/WG/Discourse|Community Ops]] (Yousef Alam or Tanner Filip)&lt;br /&gt;
|-&lt;br /&gt;
| [https://djangoproject.com Django]     || Backend web framework used on many of our websites, including addons.mozilla.org, marketplace.mozilla.org, support.mozilla.org, Input, Snippets, MDN (Mozilla Developer Network), mozilla.org, Treeherder || Andy McKay and Jannis Leidel are (or have been) on the [https://www.djangoproject.com/foundation/ Django Software Foundation] board, Jannis is core team member&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.django-rest-framework.org Django REST framework]     || API framework. Used by various Mozilla sites including MDN, Firefox marketplace, mozilla.org, support.mozilla.com. || Andy McKay and Jannis Leidel&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/docker/docker Docker]     || Used by release engineering for Linux build and test containers and by ateam for managing test and production services. Used by many Mozilla websites as well such as addons.mozilla.org, marketplace.mozilla.org. (Plus docker-compose and docker machine) || Member of Selena Deckelmann&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.stack.nl/~dimitri/doxygen/ Doxygen] || tool for generating documentation from annotated sources, lua_sandbox || Mike Trinkala  &lt;br /&gt;
|-&lt;br /&gt;
| [https://eclipse.org/ Eclipse] || Integrated Development Environment used by many developers || —&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.elastic.co/products/elasticsearch elasticsearch] || Search engine for various web sites and analytics || Erik Rose (dxr), Kyle Lahnakoski (ActiveData) &lt;br /&gt;
|-&lt;br /&gt;
| [http://www.gnu.org/software/emacs/ emacs] || Programmable editor used by many developers || —&lt;br /&gt;
|-&lt;br /&gt;
| [http://eslint.org/ eslint] || Pluggable linting utiltity used by Firefox Hello, DevTools and Firefox Android || Mark Banner&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/ether/etherpad-lite Etherpad]     || Used for meeting notes, etc || JP Schneider&lt;br /&gt;
|-&lt;br /&gt;
| [https://flake8.readthedocs.org/ flake8] || Wrapper around Python linters. Used by Treeherder and others. || Member of Jonathan Griffin&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [http://flask.pocoo.org/ Flask]               || Python web framework || Erik Rose&lt;br /&gt;
|-&lt;br /&gt;
| [https://fortawesome.github.io/Font-Awesome/ Font Awesome] || Font and CSS toolkit, used by many of Mozilla&#039;s sites. || Webdev&lt;br /&gt;
|-&lt;br /&gt;
| [http://foundation.zurb.com/ Foundation Framework] || Responsive front-end framework, used by some Mozilla sites and add-ons || Luke Crouch&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org GCC]                      || C/C++ compiler and infrastructure || Nathan Froyd&lt;br /&gt;
|-&lt;br /&gt;
| [https://git-scm.com/ Git]                    || Version control system - https://git.mozilla.org || Unknown &lt;br /&gt;
|-&lt;br /&gt;
| [http://gunicorn.org/ gunicorn] || Python WSGI HTTP Server. Used by Treeherder, Socorro, Pontoon. || Webdev&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.freedesktop.org/wiki/Software/HarfBuzz/ HarfBuzz] || International text shaping engine used in Firefox/Servo || Platform team&lt;br /&gt;
|-&lt;br /&gt;
| [http://hunspell.sourceforge.net/ Hunspell]  || Spellchecking engine || Ehsan Akhgari&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/hunspell/hyphen/ Hyphen]  || Hyphenation library || Jonathan Kew&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/jkbrzt/httpie HTTPie]  || HTTP command-line client || Cloud Services (among many others), Tarek Ziade&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.inspircd.org/ inspircd]                 || Irc server used by mozilla || :ashish&lt;br /&gt;
|-&lt;br /&gt;
| [https://theintern.github.io/intern/ Intern]  || Intern is a complete test system for JavaScript designed to help you write and run consistent, high-quality test cases for your JavaScript libraries and applications.  || jrgm/vladikoff&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| [http://canonware.com/jemalloc/ jemalloc]     || Memory allocation library || We can ask glandium&lt;br /&gt;
|-&lt;br /&gt;
| [http://jenkins-ci.org/ Jenkins CI]                    || Continuous integration system used by WebQA and EE || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| [https://jquery.com/ jQuery] || JavaScript library, used by many of Mozilla&#039;s sites. || Webdev&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/tmpvar/jsdom jsdom] || DOM implementation in full JS || Test suites in Cloud Services, Tarek Ziade&#039;s team (kinto.js)&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/open-source-parsers/jsoncpp jsoncpp] || A C++ library for interacting with JSON, used by the crashreporter client and Socorro. || Gabriele Svelto&lt;br /&gt;
|-&lt;br /&gt;
| [https://kafka.apache.org/ Kafka] || Distributed transaction log, used for hg.mozilla.org replication. || gps&lt;br /&gt;
|-&lt;br /&gt;
| [http://kombu.readthedocs.org/ Kombu] || Messaging library for Python. Used by Treeherder and others. || Member of Jonathan Griffin&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| libbz2                                        || Compression library for .bz2 format || Julian Seward&lt;br /&gt;
|-&lt;br /&gt;
| libjpeg-turbo                                 || JPEG decoding library || Jeff Muizelaar &lt;br /&gt;
|-&lt;br /&gt;
| [http://www.libpng.org/pub/png/libpng.html libpng] || PNG decoding library || Jeff Muizelaar &lt;br /&gt;
|-&lt;br /&gt;
| libvpx (Google)                               || Library for support of Google’s VP* family of codecs || Tim Terriberry &lt;br /&gt;
|-&lt;br /&gt;
| Linux                                         || OS kernel used in Firefox OS || Unknown &lt;br /&gt;
|-&lt;br /&gt;
| LLVM || Compiler foundation for ASAN, static analysis tools, Rust || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| [https://lodash.com/ lodash] || JavaScript utility library, used by many of Mozilla&#039;s sites. || Webdev &amp;amp; Firefox Hello&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.lua.org/ Lua] ||  Lua is a powerful, efficient, lightweight, embeddable scripting language, lua_sandbox_extensions || Mike Trinkala&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/macvim-dev/macvim MacVim] || Mac wrapper around Vim || -&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.list.org/ Mailman]     || [https://mail.mozilla.org/listinfo Mailing lists] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.mediawiki.org/wiki/MediaWiki MediaWiki]     || You are reading this on a wiki || Sheeri Cabral&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.mercurial-scm.org/ Mercurial]    || Version control system and source code management || GPS &lt;br /&gt;
|-&lt;br /&gt;
| [https://www.meteor.com/ Meteor]    || Build Apps with Javascript - Used in MozDef&#039;s Web UI ||  MozDef Team in EIS&lt;br /&gt;
|-&lt;br /&gt;
| [http://mochajs.org/ Mocha] || JavaScript test runner || Cloud Services, Tarek Ziade&#039;s team (kinto.js); Firefox Hello team&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/kumar303/mohawk Mohawk] ||  Python library for Hawk HTTP authorization. Used by Treeherder and others. || Member of Jonathan Griffin&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [http://mozdef.com mozdef]                    || Security event monitoring and incident response || Jeff Bryner&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mingw.org/wiki/msys msys]         || Used to build Firefox on Windows. Note: It&#039;s likely best we support the newer MSYS2 project instead: https://github.com/msys2 || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.mysql.com/ MySQL]                || Open source relational DB used by many developers, including AMO, SUMO, Input, bugzilla, releng, adminstered by IT || Sheeri Cabral&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.nagios.org/ Nagios]              || IT management system. Used for notifications of system failures || Sheeri Cabral, Ashish V.&lt;br /&gt;
|-&lt;br /&gt;
| [http://netsniff-ng.org/ netsniff-ng]                    || Linux networking toolkit || Michal Purzynski&lt;br /&gt;
|-&lt;br /&gt;
| nICEr                                         || Library for traversing firewalls || Unknown &lt;br /&gt;
|-&lt;br /&gt;
| [https://nixos.org NixOS]                     || Reproducible Linux distribution. Used by some developers || Nicolas B. Pierron&lt;br /&gt;
|-&lt;br /&gt;
| [https://nodejs.org Node.js]                  || JavaScript runtime for server side applications, command line utilities || Nick Desaulniers&lt;br /&gt;
|-&lt;br /&gt;
| nrappkit                                      || Toolkit for building standalone applications || Unknown &lt;br /&gt;
|-&lt;br /&gt;
| [http://nsis.sourceforge.net/Main_Page NSIS]  || Windows installer framework || Matt Howell&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/cisco/OpenH264 OpenH264] (Cisco)                              || H.264 video library || Unknown &lt;br /&gt;
|-&lt;br /&gt;
| [http://www.openLDAP.org/ OpenLDAP]                 || User management used by Infra || :jabba?&lt;br /&gt;
|-&lt;br /&gt;
| [http://openresty.org OpenResty]              || a fast web app server by extending nginx, used by cloudops || Benson Wong (mostlygeek)&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.openssh.com/ OpenSSH]                 || Remote server management, secure transport for Git and Mercurial || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| [http://openssl.org/ OpenSSL]                 || Cryptograpahy and TLS Toolkit || Nick Desaulniers&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.openstreetmap.org OpenStreetMap]     || Online/offline maps, used by the location service and on mozilla.org || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| [https://openvpn.net/ Openvpn]                 || VPN used by Infra || :jabba?&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/khaledhosny/ots OTS]      || OpenType sanitizer used by Firefox to protect against security bugs in underlying platforms related to malicious fonts || Jonathan Kew &lt;br /&gt;
|-&lt;br /&gt;
| [https://www.owasp.org/index.php/ZAP OWASP ZAP]                 || Web security testing tool used by security and QA teams || Simon Bennetts (psiinon)&lt;br /&gt;
|-&lt;br /&gt;
| [https://owncloud.org/ Owncloud]                 || Open platform to host your cloud under your control || Some communities have been using it to host files under their control (ask Nukeador)&lt;br /&gt;
|-&lt;br /&gt;
| [http://pandoc.org/ Pandoc] || universal document converter, lua_sandbox_extensions || Mike Trinkala  &lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/apache/parquet-cpp parquet-cpp] || C++ library to read and write the Apache Parquet columnar data format, lua_sandbox_extensions || Mike Trinkala&lt;br /&gt;
|-&lt;br /&gt;
| [https://pypi.python.org/pypi/parsimonious/ Parsimonious] || Parsing lib used by DXR and a few other sites (I think) || Erik Rose&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/mozilla/pdf.js PDF.js]                  || Used as the PDF Viewer in Firefox and Firefox OS || Brendan Dahl, Yury Delendik&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/PyCQA/pep8 pep8] || Python linter. Used by Treeherder and others. || Member of Jonathan Griffin&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.perl.org/ Perl]                  || Used by Bugzilla || Member of Jonathan Griffin&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [http://python-pillow.org/ pillow] || Python Imaging library || Member of Webcompat team&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/pypa/pip pip] || Python package tool. Used by all Python projects. || Erik Rose and Jannis Leidel, Jannis is core team member ([https://www.pypa.io/ PyPA])&lt;br /&gt;
|-&lt;br /&gt;
| [http://piwik.org/ Piwik] || Analytic software that gives you the control and respects privacy || Some communities have been using it to avoid GA analytics (Ask Nukeador)&lt;br /&gt;
|-&lt;br /&gt;
| [http://cmusphinx.sourceforge.net/ Pocketsphinx]       ||  Speech recognition toolkit embedded into Firefox OS|| André Natal&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.postgresql.org/ PostgreSQL]       || Open source relational DB used by many developers, adminstered by IT || Selena Deckelmann&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/PrismJS/prism Prism.js]       || Syntax highlighting on code samples on MDN || &lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/puppetlabs/puppet Puppet] || System administration tool || Member of Amy Rich&#039;s team, Corey Shield&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/pyflakes/pyflakes pyflakes] || Python linter. Used by Treeherder and others. || Member of Jonathan Griffin&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [http://pypy.org/ PyPy]                                        || Python language runtime. Used by Web Push service. || Cloud Services, esp. Ben Bangert&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/Pylons/pyramid/ Pyramid] || Python Web framework || Cloud Services team&lt;br /&gt;
|-&lt;br /&gt;
| [http://pytest.org/ pytest] || Python testing tool. Used by Treeherder and others. || Dave Hunt&lt;br /&gt;
|-&lt;br /&gt;
| Python                                        || Scripting language || [http://python.org/psf/ Python Software Foundation], Selena Deckelmann is a former board member&lt;br /&gt;
|-&lt;br /&gt;
| [https://pypi.python.org/pypi/pyelasticsearch/ pyelasticsearch] || Python client for elasticsearch || Erik Rose&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.rabbitmq.com/ RabbitMQ]          || Distributed Queue, used by Socorro, Pulse (all our publicly available build/test/commit information flows through this), Treeherder, addons.mozilla.org (with Celery), marketplace.mozilla.org (with Celery) || Selena Deckelmann&lt;br /&gt;
|-&lt;br /&gt;
| [http://http://rapidjson.org/ RapidJSON] ||  A fast JSON parser/generator for C++ with both SAX/DOM style API, lua_sandbox_extensions || Mike Trinkala&lt;br /&gt;
|-&lt;br /&gt;
| [http://facebook.github.io/react/index.html ReactJS] || Javascript library for building user interfaces. Used by Firefox Hello &amp;amp; DevTools || Mark Banner&lt;br /&gt;
|-&lt;br /&gt;
| [https://readthedocs.org/ Read the Docs]   || Hosted automatically-built documentation, used by Cloud Services and a wide variety of mozilla Github projects || Ben Bangert, Jannis Leidel, Gervase Markham&lt;br /&gt;
|-&lt;br /&gt;
| [http://redis.io/ Redis]         || Really fast data structure store, cache and message broker || Cloud Services Tarek Ziade&#039;s team, Loop Server (Hello) team&lt;br /&gt;
|-&lt;br /&gt;
| [http://python-requests.org/ Requests] || &amp;quot;Python HTTP Requests for Humans&amp;quot;. Used by many many Mozilla Python projects. || Member of Jonathan Griffin&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.reviewboard.org/ Review Board]   || The base of MozReview, the new review tool being developed to replace Splinter || Steven MacLeod, Mike Conley&lt;br /&gt;
|-&lt;br /&gt;
| [http://wordlist.aspell.net/ SCOWL]         || en-US word list used for spell checking. || ehsan&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.seleniumhq.org/ Selenium]         || Browser test driver || David Burns, Dave Hunt&lt;br /&gt;
|-&lt;br /&gt;
| [http://sinonjs.org/ Sinon] || JavaScript mock library || Cloud Services, Tarek Ziade&#039;s team (kinto.js); Firefox Hello team&lt;br /&gt;
|-&lt;br /&gt;
| [https://slimerjs.org/ SlimerJS]              || Scriptable browser, based on Gecko, used for functional tests in some few Mozilla projects  ( [[PluotSorbet]], some FxOS apps ? and others ?) || Myk Melez&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.sqlalchemy.org/ SQLAlchemy]] || Database Toolkit and ORM for Python || bhearsum&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.sqlite.org/ SQLite]              || File-based database || asuth&lt;br /&gt;
|-&lt;br /&gt;
| [http://learnboost.github.io/stylus/ Stylus]              || CSS Pre-processor on several sites || webdev&lt;br /&gt;
|-&lt;br /&gt;
| [https://subversion.apache.org/ Subversion]   || https://svn.mozilla.org &#039;&#039;(Planning to decommission in near future)&#039;&#039; || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| [https://suricata-ids.org/ suricata]                    || IDS / IPS / NSM engine || Michal Purzynski&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.squid-cache.org/ Squid]           || Caching proxy || Brian Hourigan&lt;br /&gt;
|-&lt;br /&gt;
| [https://tox.readthedocs.org/en/latest/ Tox]  || Test automation || Dave Hunt&lt;br /&gt;
|-&lt;br /&gt;
| [https://travis-ci.org/ Travis]               || Continuous integration system used by several teams (eg Treeherder) || Jonathan Griffin&#039;s team &lt;br /&gt;
|-&lt;br /&gt;
| [https://uwsgi-docs.readthedocs.io/en/latest/ UWSGI]               || Full hosting stack used in MozDef || MozDef Team in EIS &lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/mitchellh/vagrant Vagrant]|| Build and distribute dev envs, used by Treeherder and others || Member of Jonathan Griffin&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [http://valgrind.org/ Valgrind]               || Memory error detection and profiling of C and C++ code || jseward, njn&lt;br /&gt;
|-&lt;br /&gt;
| [http://vim.org/ vim] || editor used by many developers || —&lt;br /&gt;
|-&lt;br /&gt;
| [https://waffle.io/mozilla/ waffle.io] || github project management used by various teams || &lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/w3c/web-platform-tests web-platform-tests]  ||  Testcases and tooling for cross-browser testing of web-platform APIs                                             || jgraham&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.webrtc.org WebRTC.org]            || Components to support real-time communication in browsers and mobile applications || Randell Jesup &lt;br /&gt;
|-&lt;br /&gt;
| [http://www.wordpress.org WordPress]          || Powers our blogs, blog.mozilla.org || Craig Cook &lt;br /&gt;
|-&lt;br /&gt;
| [https://www.webtoolkit.eu/wt Wt] || C++ library for developing web applications, hindsight_admin || Mike Trinkala&lt;br /&gt;
|-&lt;br /&gt;
| [https://xiph.org Xiph.Org]                   || Media codecs ship in Firefox, encoding tools || Ralph Giles&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/Cyan4973/xxHash xxHash] ||  Extremely fast non-cryptographic hash algorithm, lua_sandbox_extensions || Mike Trinkala&lt;br /&gt;
|-&lt;br /&gt;
| [http://tukaani.org/xz/embedded.html XZ Embedded] || Decompressor for the XZ format ||&lt;br /&gt;
|-&lt;br /&gt;
| [http://zlib.net zlib]                   || Streaming compression and decompression for HTTP, PNG, etc. ||&lt;br /&gt;
|-&lt;br /&gt;
| [https://zookeeper.apache.org/ ZooKeeper] || Distributed synchronization, use by hg.mozilla.org replication || gps&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Rillian</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=MOSS/Foundational_Technology/Projects_We_Use&amp;diff=1162441</id>
		<title>MOSS/Foundational Technology/Projects We Use</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=MOSS/Foundational_Technology/Projects_We_Use&amp;diff=1162441"/>
		<updated>2017-02-09T16:50:43Z</updated>

		<summary type="html">&lt;p&gt;Rillian: Sort some out-of-order entries&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is an incomplete list of the free software and open source projects Mozilla relies upon. As a starting point, it lists each project along with a short statement of how we depend on it. Where practical it would also be helpful to identify a Mozillian most closely associated with our use of each project.&lt;br /&gt;
&lt;br /&gt;
Note that presence on this list isn&#039;t the same as, nor is it a prerequisite for, applying for the MOSS &amp;quot;Foundational Technology&amp;quot; track - projects have to make an application using the process on the [[MOSS/Foundational Technology|Foundational Technology]] page.&lt;br /&gt;
&lt;br /&gt;
This is a work in progress - please contribute to this list.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Project !! Description !! Contact within Mozilla&lt;br /&gt;
|-&lt;br /&gt;
| [https://angularjs.org/ angular.js]           || Used by A-Team for web apps (eg Treeherder) || Member of Jonathan Griffin&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [https://httpd.apache.org Apache Server]      || Used by A-Team for web apps || Member of Jonathan Griffin&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/ansible/ansible Ansible]  || Used by IT (netops) and A-Team to manage deployments || jbarnell , Webops, GPS?&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/h4writer/arewefastyet AreWeFastYet]  || Compare JS performance across JS engines and platforms || Hannes Verschore&lt;br /&gt;
|-&lt;br /&gt;
| [https://atom.io/ Atom]                       || Used (either vanilla or e.g. as [https://github.com/Microsoft/vscode] ) by various developers ||&lt;br /&gt;
|-&lt;br /&gt;
| [https://babeljs.io/ BabelJS]                 || JavaScript compiler, Used by Gaia, TaskCluster team || Selena Deckelmann&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.isc.org/downloads/bind/ BIND] || DNS Server || Brian Hourigan&lt;br /&gt;
|-&lt;br /&gt;
| [https://pypi.python.org/pypi/bleach/ Bleach] || HTML sanitizing library that escapes or strips markup and attributes used by MDN and a bunch of Mozilla sites || Will Kahn-Greene&lt;br /&gt;
|-&lt;br /&gt;
| [https://pypi.python.org/pypi/blessings/ Blessings] || Terminal formatting lib used by mozilla-central build process || Erik Rose&lt;br /&gt;
|-&lt;br /&gt;
| [http://getbootstrap.com/ Bootstrap] || HTML/CSS/JS framework, used by many of Mozilla&#039;s sites. || Webdev&lt;br /&gt;
|-&lt;br /&gt;
| [http://brew.sh/ brew / Homebrew] || Mac OS X packaging system, used to install dev tools || Sam Penrose&lt;br /&gt;
|-&lt;br /&gt;
| [https://bro.org bro]                    || The Bro Network Security Monitor || Michal Purzynski&lt;br /&gt;
|-&lt;br /&gt;
| [http://browserify.org Browserify]                    || Build JS dependencies for the browser || mozilla-services (kinto.js)&lt;br /&gt;
|-&lt;br /&gt;
| [http://buildbot.net/ BuildBot]               || The base system currently in use for release || Dustin J. Mitchell&lt;br /&gt;
|-&lt;br /&gt;
| [http://bugzilla.org/ Bugzilla] (upstream)    || The base Bugzilla on that we customize for Mozilla&#039;s use || Mark Côté&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.celeryproject.org/ Celery] || Distributed task queue. Used by Treeherder and others. || Member of Jonathan Griffin&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [http://ckeditor.com/ CKEditor] || WYSIWYG editor on MDN || &lt;br /&gt;
|-&lt;br /&gt;
| [https://cmake.org/ CMake] || cross-platform family of tools designed to build, test and package software, lua_sandbox, lua_sandbox_extensions, hindsight, hindsight_admin || Mike Trinkala&lt;br /&gt;
|-&lt;br /&gt;
| [http://chaijs.com/ Chai] || JavaScript test and assertion library || Cloud Services, Tarek Ziade&#039;s team (kinto.js), Firefox Hello team&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.llvm.org Clang/LLVM]           || C/C++ compiler and infrastructure || Ehsan Akhgari &amp;amp; Sylvestre Ledru&lt;br /&gt;
|-&lt;br /&gt;
| [https://codemirror.net/ CodeMirror]           || Used in DevTools, [https://thimble.mozilla.org Thimble], and other online code tools || David Humphrey/Simon Wex&lt;br /&gt;
|-&lt;br /&gt;
| [https://pypi.python.org/pypi/cookiecutter/ Cookiecutter] || Templating system used to clone our [https://github.com/mozilla/sugardough Sugardough] Django template || Giorgos Logiotatidis&lt;br /&gt;
|-&lt;br /&gt;
| [https://conemu.github.io/ ConEmu] || Console emulator for Windows. Used by devs running Windows. || Ed Morley&lt;br /&gt;
|-&lt;br /&gt;
| [http://curl.haxx.se/ curl] || internet transfer tool and library, used by crashreporter and FirefoxOS || Daniel Stenberg&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.debian.org/ Debian] || Used on many developer boxes || Sylvestre Ledru or glandium&lt;br /&gt;
|-&lt;br /&gt;
| [http://deis.io Deis] || Open Source Heroku-like PaaS platform. Hosts www.mozilla.org, masterfirefoxos.mozilla.org, etc. || Member of Benjamin Sternthal&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [https://disconnect.me/trackerprotection Disconnect.me ] || Open, transparent, neutral Tracking Protection blocklist used in Firefox Private Browsing Windows || Marshall Erwin, Javaun Moradi, Francois Marier&lt;br /&gt;
|-&lt;br /&gt;
| [https://discourse.org Discourse] || [https://discourse.mozilla-community.org Community], [https://discourse.webmaker.org/ Webmaker], [https://discourse.mozilla-advocacy.org/ Advocacy], et al || [[IT/Community/WG/Discourse|Community Ops]] (Yousef Alam or Tanner Filip)&lt;br /&gt;
|-&lt;br /&gt;
| [https://djangoproject.com Django]     || Backend web framework used on many of our websites, including addons.mozilla.org, marketplace.mozilla.org, support.mozilla.org, Input, Snippets, MDN (Mozilla Developer Network), mozilla.org, Treeherder || Andy McKay and Jannis Leidel are (or have been) on the [https://www.djangoproject.com/foundation/ Django Software Foundation] board, Jannis is core team member&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.django-rest-framework.org Django REST framework]     || API framework. Used by various Mozilla sites including MDN, Firefox marketplace, mozilla.org, support.mozilla.com. || Andy McKay and Jannis Leidel&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/docker/docker Docker]     || Used by release engineering for Linux build and test containers and by ateam for managing test and production services. Used by many Mozilla websites as well such as addons.mozilla.org, marketplace.mozilla.org. (Plus docker-compose and docker machine) || Member of Selena Deckelmann&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.stack.nl/~dimitri/doxygen/ Doxygen] || tool for generating documentation from annotated sources, lua_sandbox || Mike Trinkala  &lt;br /&gt;
|-&lt;br /&gt;
| [https://eclipse.org/ Eclipse] || Integrated Development Environment used by many developers || —&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.elastic.co/products/elasticsearch elasticsearch] || Search engine for various web sites and analytics || Erik Rose (dxr), Kyle Lahnakoski (ActiveData) &lt;br /&gt;
|-&lt;br /&gt;
| [http://www.gnu.org/software/emacs/ emacs] || Programmable editor used by many developers || —&lt;br /&gt;
|-&lt;br /&gt;
| [http://eslint.org/ eslint] || Pluggable linting utiltity used by Firefox Hello, DevTools and Firefox Android || Mark Banner&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/ether/etherpad-lite Etherpad]     || Used for meeting notes, etc || JP Schneider&lt;br /&gt;
|-&lt;br /&gt;
| [https://flake8.readthedocs.org/ flake8] || Wrapper around Python linters. Used by Treeherder and others. || Member of Jonathan Griffin&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [http://flask.pocoo.org/ Flask]               || Python web framework || Erik Rose&lt;br /&gt;
|-&lt;br /&gt;
| [https://fortawesome.github.io/Font-Awesome/ Font Awesome] || Font and CSS toolkit, used by many of Mozilla&#039;s sites. || Webdev&lt;br /&gt;
|-&lt;br /&gt;
| [http://foundation.zurb.com/ Foundation Framework] || Responsive front-end framework, used by some Mozilla sites and add-ons || Luke Crouch&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org GCC]                      || C/C++ compiler and infrastructure || Nathan Froyd&lt;br /&gt;
|-&lt;br /&gt;
| [https://git-scm.com/ Git]                    || Version control system - https://git.mozilla.org || Unknown &lt;br /&gt;
|-&lt;br /&gt;
| [http://gunicorn.org/ gunicorn] || Python WSGI HTTP Server. Used by Treeherder, Socorro, Pontoon. || Webdev&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.freedesktop.org/wiki/Software/HarfBuzz/ HarfBuzz] || International text shaping engine used in Firefox/Servo || Platform team&lt;br /&gt;
|-&lt;br /&gt;
| [http://hunspell.sourceforge.net/ Hunspell]  || Spellchecking engine || Ehsan Akhgari&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/hunspell/hyphen/ Hyphen]  || Hyphenation library || Jonathan Kew&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/jkbrzt/httpie HTTPie]  || HTTP command-line client || Cloud Services (among many others), Tarek Ziade&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.inspircd.org/ inspircd]                 || Irc server used by mozilla || :ashish&lt;br /&gt;
|-&lt;br /&gt;
| [https://theintern.github.io/intern/ Intern]  || Intern is a complete test system for JavaScript designed to help you write and run consistent, high-quality test cases for your JavaScript libraries and applications.  || jrgm/vladikoff&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| [http://canonware.com/jemalloc/ jemalloc]     || Memory allocation library || We can ask glandium&lt;br /&gt;
|-&lt;br /&gt;
| [http://jenkins-ci.org/ Jenkins CI]                    || Continuous integration system used by WebQA and EE || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| [https://jquery.com/ jQuery] || JavaScript library, used by many of Mozilla&#039;s sites. || Webdev&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/tmpvar/jsdom jsdom] || DOM implementation in full JS || Test suites in Cloud Services, Tarek Ziade&#039;s team (kinto.js)&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/open-source-parsers/jsoncpp jsoncpp] || A C++ library for interacting with JSON, used by the crashreporter client and Socorro. || Gabriele Svelto&lt;br /&gt;
|-&lt;br /&gt;
| [https://kafka.apache.org/ Kafka] || Distributed transaction log, used for hg.mozilla.org replication. || gps&lt;br /&gt;
|-&lt;br /&gt;
| [http://kombu.readthedocs.org/ Kombu] || Messaging library for Python. Used by Treeherder and others. || Member of Jonathan Griffin&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| libbz2                                        || Compression library for .bz2 format || Julian Seward&lt;br /&gt;
|-&lt;br /&gt;
| libjpeg-turbo                                 || JPEG decoding library || Jeff Muizelaar &lt;br /&gt;
|-&lt;br /&gt;
| [http://www.libpng.org/pub/png/libpng.html libpng] || PNG decoding library || Jeff Muizelaar &lt;br /&gt;
|-&lt;br /&gt;
| libvpx (Google)                               || Library for support of Google’s VP* family of codecs || Tim Terriberry &lt;br /&gt;
|-&lt;br /&gt;
| Linux                                         || OS kernel used in Firefox OS || Unknown &lt;br /&gt;
|-&lt;br /&gt;
| LLVM || Compiler foundation for ASAN, static analysis tools, Rust || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| [https://lodash.com/ lodash] || JavaScript utility library, used by many of Mozilla&#039;s sites. || Webdev &amp;amp; Firefox Hello&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.lua.org/ Lua] ||  Lua is a powerful, efficient, lightweight, embeddable scripting language, lua_sandbox_extensions || Mike Trinkala&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/macvim-dev/macvim MacVim] || Mac wrapper around Vim || -&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.list.org/ Mailman]     || [https://mail.mozilla.org/listinfo Mailing lists] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.mediawiki.org/wiki/MediaWiki MediaWiki]     || You are reading this on a wiki || Sheeri Cabral&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.mercurial-scm.org/ Mercurial]    || Version control system and source code management || GPS &lt;br /&gt;
|-&lt;br /&gt;
| [https://www.meteor.com/ Meteor]    || Build Apps with Javascript - Used in MozDef&#039;s Web UI ||  MozDef Team in EIS&lt;br /&gt;
|-&lt;br /&gt;
| [http://mochajs.org/ Mocha] || JavaScript test runner || Cloud Services, Tarek Ziade&#039;s team (kinto.js); Firefox Hello team&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/kumar303/mohawk Mohawk] ||  Python library for Hawk HTTP authorization. Used by Treeherder and others. || Member of Jonathan Griffin&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [http://mozdef.com mozdef]                    || Security event monitoring and incident response || Jeff Bryner&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mingw.org/wiki/msys msys]         || Used to build Firefox on Windows. Note: It&#039;s likely best we support the newer MSYS2 project instead: https://github.com/msys2 || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.mysql.com/ MySQL]                || Open source relational DB used by many developers, including AMO, SUMO, Input, bugzilla, releng, adminstered by IT || Sheeri Cabral&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.nagios.org/ Nagios]              || IT management system. Used for notifications of system failures || Sheeri Cabral, Ashish V.&lt;br /&gt;
|-&lt;br /&gt;
| [http://netsniff-ng.org/ netsniff-ng]                    || Linux networking toolkit || Michal Purzynski&lt;br /&gt;
|-&lt;br /&gt;
| nICEr                                         || Library for traversing firewalls || Unknown &lt;br /&gt;
|-&lt;br /&gt;
| [https://nixos.org NixOS]                     || Reproducible Linux distribution. Used by some developers || Nicolas B. Pierron&lt;br /&gt;
|-&lt;br /&gt;
| [https://nodejs.org Node.js]                  || JavaScript runtime for server side applications, command line utilities || Nick Desaulniers&lt;br /&gt;
|-&lt;br /&gt;
| nrappkit                                      || Toolkit for building standalone applications || Unknown &lt;br /&gt;
|-&lt;br /&gt;
| [http://nsis.sourceforge.net/Main_Page NSIS]  || Windows installer framework || Matt Howell&lt;br /&gt;
|-&lt;br /&gt;
| OpenH264 (Cisco)                              || H.264 video library || Unknown &lt;br /&gt;
|-&lt;br /&gt;
| [http://www.openLDAP.org/ OpenLDAP]                 || User management used by Infra || :jabba?&lt;br /&gt;
|-&lt;br /&gt;
| [http://openresty.org OpenResty]              || a fast web app server by extending nginx, used by cloudops || Benson Wong (mostlygeek)&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.openssh.com/ OpenSSH]                 || Remote server management, secure transport for Git and Mercurial || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| [http://openssl.org/ OpenSSL]                 || Cryptograpahy and TLS Toolkit || Nick Desaulniers&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.openstreetmap.org OpenStreetMap]     || Online/offline maps, used by the location service and on mozilla.org || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| [https://openvpn.net/ Openvpn]                 || VPN used by Infra || :jabba?&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/khaledhosny/ots OTS]      || OpenType sanitizer used by Firefox to protect against security bugs in underlying platforms related to malicious fonts || Jonathan Kew &lt;br /&gt;
|-&lt;br /&gt;
| [https://www.owasp.org/index.php/ZAP OWASP ZAP]                 || Web security testing tool used by security and QA teams || Simon Bennetts (psiinon)&lt;br /&gt;
|-&lt;br /&gt;
| [https://owncloud.org/ Owncloud]                 || Open platform to host your cloud under your control || Some communities have been using it to host files under their control (ask Nukeador)&lt;br /&gt;
|-&lt;br /&gt;
| [http://pandoc.org/ Pandoc] || universal document converter, lua_sandbox_extensions || Mike Trinkala  &lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/apache/parquet-cpp parquet-cpp] || C++ library to read and write the Apache Parquet columnar data format, lua_sandbox_extensions || Mike Trinkala&lt;br /&gt;
|-&lt;br /&gt;
| [https://pypi.python.org/pypi/parsimonious/ Parsimonious] || Parsing lib used by DXR and a few other sites (I think) || Erik Rose&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/mozilla/pdf.js PDF.js]                  || Used as the PDF Viewer in Firefox and Firefox OS || Brendan Dahl, Yury Delendik&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/PyCQA/pep8 pep8] || Python linter. Used by Treeherder and others. || Member of Jonathan Griffin&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.perl.org/ Perl]                  || Used by Bugzilla || Member of Jonathan Griffin&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [http://python-pillow.org/ pillow] || Python Imaging library || Member of Webcompat team&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/pypa/pip pip] || Python package tool. Used by all Python projects. || Erik Rose and Jannis Leidel, Jannis is core team member ([https://www.pypa.io/ PyPA])&lt;br /&gt;
|-&lt;br /&gt;
| [http://piwik.org/ Piwik] || Analytic software that gives you the control and respects privacy || Some communities have been using it to avoid GA analytics (Ask Nukeador)&lt;br /&gt;
|-&lt;br /&gt;
| [http://cmusphinx.sourceforge.net/ Pocketsphinx]       ||  Speech recognition toolkit embedded into Firefox OS|| André Natal&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.postgresql.org/ PostgreSQL]       || Open source relational DB used by many developers, adminstered by IT || Selena Deckelmann&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/PrismJS/prism Prism.js]       || Syntax highlighting on code samples on MDN || &lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/puppetlabs/puppet Puppet] || System administration tool || Member of Amy Rich&#039;s team, Corey Shield&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/pyflakes/pyflakes pyflakes] || Python linter. Used by Treeherder and others. || Member of Jonathan Griffin&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [http://pypy.org/ PyPy]                                        || Python language runtime. Used by Web Push service. || Cloud Services, esp. Ben Bangert&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/Pylons/pyramid/ Pyramid] || Python Web framework || Cloud Services team&lt;br /&gt;
|-&lt;br /&gt;
| [http://pytest.org/ pytest] || Python testing tool. Used by Treeherder and others. || Dave Hunt&lt;br /&gt;
|-&lt;br /&gt;
| Python                                        || Scripting language || [http://python.org/psf/ Python Software Foundation], Selena Deckelmann is a former board member&lt;br /&gt;
|-&lt;br /&gt;
| [https://pypi.python.org/pypi/pyelasticsearch/ pyelasticsearch] || Python client for elasticsearch || Erik Rose&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.rabbitmq.com/ RabbitMQ]          || Distributed Queue, used by Socorro, Pulse (all our publicly available build/test/commit information flows through this), Treeherder, addons.mozilla.org (with Celery), marketplace.mozilla.org (with Celery) || Selena Deckelmann&lt;br /&gt;
|-&lt;br /&gt;
| [http://http://rapidjson.org/ RapidJSON] ||  A fast JSON parser/generator for C++ with both SAX/DOM style API, lua_sandbox_extensions || Mike Trinkala&lt;br /&gt;
|-&lt;br /&gt;
| [http://facebook.github.io/react/index.html ReactJS] || Javascript library for building user interfaces. Used by Firefox Hello &amp;amp; DevTools || Mark Banner&lt;br /&gt;
|-&lt;br /&gt;
| [https://readthedocs.org/ Read the Docs]   || Hosted automatically-built documentation, used by Cloud Services and a wide variety of mozilla Github projects || Ben Bangert, Jannis Leidel, Gervase Markham&lt;br /&gt;
|-&lt;br /&gt;
| [http://redis.io/ Redis]         || Really fast data structure store, cache and message broker || Cloud Services Tarek Ziade&#039;s team, Loop Server (Hello) team&lt;br /&gt;
|-&lt;br /&gt;
| [http://python-requests.org/ Requests] || &amp;quot;Python HTTP Requests for Humans&amp;quot;. Used by many many Mozilla Python projects. || Member of Jonathan Griffin&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.reviewboard.org/ Review Board]   || The base of MozReview, the new review tool being developed to replace Splinter || Steven MacLeod, Mike Conley&lt;br /&gt;
|-&lt;br /&gt;
| [http://wordlist.aspell.net/ SCOWL]         || en-US word list used for spell checking. || ehsan&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.seleniumhq.org/ Selenium]         || Browser test driver || David Burns, Dave Hunt&lt;br /&gt;
|-&lt;br /&gt;
| [http://sinonjs.org/ Sinon] || JavaScript mock library || Cloud Services, Tarek Ziade&#039;s team (kinto.js); Firefox Hello team&lt;br /&gt;
|-&lt;br /&gt;
| [https://slimerjs.org/ SlimerJS]              || Scriptable browser, based on Gecko, used for functional tests in some few Mozilla projects  ( [[PluotSorbet]], some FxOS apps ? and others ?) || Myk Melez&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.sqlalchemy.org/ SQLAlchemy]] || Database Toolkit and ORM for Python || bhearsum&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.sqlite.org/ SQLite]              || File-based database || asuth&lt;br /&gt;
|-&lt;br /&gt;
| [http://learnboost.github.io/stylus/ Stylus]              || CSS Pre-processor on several sites || webdev&lt;br /&gt;
|-&lt;br /&gt;
| [https://subversion.apache.org/ Subversion]   || https://svn.mozilla.org &#039;&#039;(Planning to decommission in near future)&#039;&#039; || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| [https://suricata-ids.org/ suricata]                    || IDS / IPS / NSM engine || Michal Purzynski&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.squid-cache.org/ Squid]           || Caching proxy || Brian Hourigan&lt;br /&gt;
|-&lt;br /&gt;
| [https://tox.readthedocs.org/en/latest/ Tox]  || Test automation || Dave Hunt&lt;br /&gt;
|-&lt;br /&gt;
| [https://travis-ci.org/ Travis]               || Continuous integration system used by several teams (eg Treeherder) || Jonathan Griffin&#039;s team &lt;br /&gt;
|-&lt;br /&gt;
| [https://uwsgi-docs.readthedocs.io/en/latest/ UWSGI]               || Full hosting stack used in MozDef || MozDef Team in EIS &lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/mitchellh/vagrant Vagrant]|| Build and distribute dev envs, used by Treeherder and others || Member of Jonathan Griffin&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [http://valgrind.org/ Valgrind]               || Memory error detection and profiling of C and C++ code || jseward, njn&lt;br /&gt;
|-&lt;br /&gt;
| [http://vim.org/ vim] || editor used by many developers || —&lt;br /&gt;
|-&lt;br /&gt;
| [https://waffle.io/mozilla/ waffle.io] || github project management used by various teams || &lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/w3c/web-platform-tests web-platform-tests]  ||  Testcases and tooling for cross-browser testing of web-platform APIs                                             || jgraham&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.webrtc.org WebRTC.org]            || Components to support real-time communication in browsers and mobile applications || Randell Jesup &lt;br /&gt;
|-&lt;br /&gt;
| [http://www.wordpress.org WordPress]          || Powers our blogs, blog.mozilla.org || Craig Cook &lt;br /&gt;
|-&lt;br /&gt;
| [https://www.webtoolkit.eu/wt Wt] || C++ library for developing web applications, hindsight_admin || Mike Trinkala&lt;br /&gt;
|-&lt;br /&gt;
| [https://xiph.org Xiph.Org]                   || Media codecs ship in Firefox, encoding tools || Ralph Giles&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/Cyan4973/xxHash xxHash] ||  Extremely fast non-cryptographic hash algorithm, lua_sandbox_extensions || Mike Trinkala&lt;br /&gt;
|-&lt;br /&gt;
| [http://tukaani.org/xz/embedded.html XZ Embedded] || Decompressor for the XZ format ||&lt;br /&gt;
|-&lt;br /&gt;
| [http://zlib.net zlib]                   || Streaming compression and decompression for HTTP, PNG, etc. ||&lt;br /&gt;
|-&lt;br /&gt;
| [https://zookeeper.apache.org/ ZooKeeper] || Distributed synchronization, use by hg.mozilla.org replication || gps&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Rillian</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Mobile/Fennec/Android/GDB&amp;diff=1146173</id>
		<title>Mobile/Fennec/Android/GDB</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Mobile/Fennec/Android/GDB&amp;diff=1146173"/>
		<updated>2016-08-29T19:43:51Z</updated>

		<summary type="html">&lt;p&gt;Rillian: Document -fPIE for gdbserver&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;JimDB is a fork of GDB used for simplifying Fennec development. It consists of two parts:&lt;br /&gt;
&lt;br /&gt;
* Binaries - the GDB/GDBServer binaries that include Android-specific patches (https://github.com/darchons/android-gdb)&lt;br /&gt;
* Scripts - the Python scripts that run under GDB to simplify common tasks (https://github.com/darchons/android-gdbutils)&lt;br /&gt;
&lt;br /&gt;
Use #mobile on IRC for support.&lt;br /&gt;
&lt;br /&gt;
= Getting started =&lt;br /&gt;
&lt;br /&gt;
== Using mach ==&lt;br /&gt;
&lt;br /&gt;
You can use mach to fetch, install, configure, and run JimDB with one simple command. Note that if you are on OS X, mach may install JimDB correctly, but then try to debug using lldb. If that happens, you can still run JimDB manually from your ~/.mozbuild folder (you can find the full path in the output below).&lt;br /&gt;
&lt;br /&gt;
  $ ./mach run --debug&lt;br /&gt;
  JimDB (arm) not found: /home/gbrown/.mozbuild/android-device/jimdb-arm does not exist&lt;br /&gt;
  Download and setup JimDB (arm)? (Y/n) y&lt;br /&gt;
  Installing JimDB (linux64/arm). This may take a while...&lt;br /&gt;
  From https://github.com/darchons/android-gdbutils&lt;br /&gt;
   * [new branch]      master     -&amp;gt; origin/master&lt;br /&gt;
   * [new tag]         gdbutils-2 -&amp;gt; gdbutils-2&lt;br /&gt;
   * [new tag]         initial-release -&amp;gt; initial-release&lt;br /&gt;
   1:45.57 /home/gbrown/.mozbuild/android-device/jimdb-arm/bin/gdb -q --args &lt;br /&gt;
  Fennec GDB utilities&lt;br /&gt;
    (see utils/gdbinit and utils/gdbinit.local on how to configure settings)&lt;br /&gt;
  1. Debug Fennec (default)&lt;br /&gt;
  2. Debug Fennec with env vars and args&lt;br /&gt;
  3. Debug using jdb&lt;br /&gt;
  4. Debug content Mochitest&lt;br /&gt;
  5. Debug compiled-code unit test&lt;br /&gt;
  6. Debug Fennec with pid&lt;br /&gt;
  Enter option from above: 1&lt;br /&gt;
  New ADB device is &amp;quot;emulator-5554&amp;quot;&lt;br /&gt;
  Using device emulator-5554&lt;br /&gt;
  Using object directory: /home/gbrown/objdirs/droid&lt;br /&gt;
  Set sysroot to &amp;quot;/home/gbrown/.mozbuild/android-device/jimdb-arm/lib/emulator-5554&amp;quot;.&lt;br /&gt;
  Updated solib-search-path.&lt;br /&gt;
  Ignoring BHM signal.&lt;br /&gt;
  Using package org.mozilla.fennec_gbrown.&lt;br /&gt;
  Launching org.mozilla.fennec_gbrown... Done&lt;br /&gt;
  Attaching to pid 674... Done&lt;br /&gt;
  Setting up remote debugging... Done&lt;br /&gt;
  Ready. Use &amp;quot;continue&amp;quot; to resume execution.&lt;br /&gt;
  : No such file or directory.&lt;br /&gt;
  (gdb)&lt;br /&gt;
&lt;br /&gt;
== Using pre-built binaries ==&lt;br /&gt;
&lt;br /&gt;
=== Instructions ===&lt;br /&gt;
&lt;br /&gt;
# Download the latest pre-built jimdb binaries for your host and device platforms from [https://people.mozilla.org/~nchen/jimdb this directory] (use &#039;jimdb-arm&#039; for ARM devices and &#039;jimdb-x86&#039; for x86 devices)&lt;br /&gt;
# Download the latest pre-built gdbserver binary for your device platform from [https://people.mozilla.org/~nchen/jimdb the same directory]&lt;br /&gt;
# Extract to a user-writable directory&lt;br /&gt;
# Replace the gdbserver binary in the jimdb-*/bin/ directory with the one you downloaded separately (it&#039;s newer)&lt;br /&gt;
# Run &#039;git pull&#039; from inside the utils/ directory to get the latest scripts&lt;br /&gt;
# Launch bin/gdb to start using JimDB!&lt;br /&gt;
# OPTIONAL: For easier access, you can create a symlink to jimdb under, e.g., /usr/bin&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
&lt;br /&gt;
For ARM devices on Linux,&lt;br /&gt;
 cd $HOME&lt;br /&gt;
 wget https://people.mozilla.org/~nchen/jimdb/jimdb-arm-linux_x64.tar.bz2 # step 1&lt;br /&gt;
 tar -xf jimdb-arm-linux_x64.tar.bz2 # step 3&lt;br /&gt;
 cd jimdb-arm/utils &amp;amp;&amp;amp; git pull # step 5&lt;br /&gt;
 ../bin/gdb # step 6&lt;br /&gt;
 sudo ln -s $HOME/jimdb-arm/bin/gdb /usr/bin/jimdb # step 7&lt;br /&gt;
&lt;br /&gt;
If you download the wrong x86 or x64 build, you might get an error like:&lt;br /&gt;
 $ ./bin/gdb&lt;br /&gt;
 ./bin/gdb: error while loading shared libraries: libpython2.7.so.1.0: cannot open shared object file: No such file or directory&lt;br /&gt;
&lt;br /&gt;
== Custom-building ==&lt;br /&gt;
&lt;br /&gt;
=== Step 1. Compiling the binaries ===&lt;br /&gt;
&lt;br /&gt;
There are two things to build here: gdb and gdbserver&lt;br /&gt;
&lt;br /&gt;
==== Linux ====&lt;br /&gt;
&lt;br /&gt;
===== GDB =====&lt;br /&gt;
&lt;br /&gt;
# Clone [https://github.com/darchons/android-gdb the GitHub repo] (do not use the Zip archive, as the build system will try to obtain a git changeset id)&lt;br /&gt;
# You may need to install additional packages in order to build GDB. For example,&amp;lt;pre&amp;gt;sudo apt-get build-dep gdb&amp;lt;/pre&amp;gt;&lt;br /&gt;
# Run configure inside the source directory&amp;lt;pre&amp;gt;# ARM:&amp;amp;#10;./configure --target=arm-linux-android --with-python=yes --prefix=/nonexistent \&amp;amp;#10;  --with-gdb-datadir=/nonexistent/utils --with-system-gdbinit=/nonexistent/utils/gdbinit&amp;amp;#10;# x86:&amp;amp;#10;./configure --target=i686-pc-linux-android --with-python=yes --prefix=/nonexistent \&amp;amp;#10;  --with-gdb-datadir=/nonexistent/utils --with-system-gdbinit=/nonexistent/utils/gdbinit&amp;lt;/pre&amp;gt;&lt;br /&gt;
# Run make &amp;lt;pre&amp;gt;make -j8&amp;lt;/pre&amp;gt;&lt;br /&gt;
# The compiled binary will be at gdb/gdb&lt;br /&gt;
If you see an error like:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
../../../../bfd/doc/bfd.texinfo:325: unknown command `colophon&#039;&lt;br /&gt;
../../../../bfd/doc/bfd.texinfo:336: unknown command `cygnus&#039;&lt;br /&gt;
Makefile:421: recipe for target &#039;bfd.info&#039; failed&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
you can fix this by running:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sed -i -e &#039;s/@colophon/@@colophon/&#039; -e &#039;s/doc@cygnus.com/doc@@cygnus.com/&#039; bfd/doc/bfd.texinfo&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
or by checking out a more recent branch (this bug is in the 7_5 branch).&lt;br /&gt;
&lt;br /&gt;
===== GDBServer =====&lt;br /&gt;
&lt;br /&gt;
Consider using the pre-built gdbserver binary from the &amp;quot;Using pre-built binaries&amp;quot; section above; gdbserver is not specific to your platform. Otherwise,&lt;br /&gt;
# Use the source directory from above&lt;br /&gt;
# Make sure you have a copy of the Android NDK&lt;br /&gt;
# Run configure inside the &#039;&#039;gdb/gdbserver directory&#039;&#039; (following is for NDK r8d)&amp;lt;pre&amp;gt;export NDK=/PATH/TO/NDK&amp;amp;#10;# ARM:&amp;amp;#10;export PATH=$PATH:$NDK/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86/bin&amp;amp;#10;./configure --host=arm-linux-androideabi --with-sysroot=$NDK/platforms/android-9/arch-arm&amp;amp;#10;# x86:&amp;amp;#10;export PATH=$PATH:$NDK/toolchains/x86-4.6/prebuilt/linux-x86/bin&amp;amp;#10;./configure --host=i686-linux-android --with-sysroot=$NDK/platforms/android-9/arch-x86&amp;lt;/pre&amp;gt;&lt;br /&gt;
# Run make &amp;lt;pre&amp;gt;make -j8&amp;lt;/pre&amp;gt;&lt;br /&gt;
# The compiled binary will be at gdbserver&lt;br /&gt;
&lt;br /&gt;
==== Mac ====&lt;br /&gt;
&lt;br /&gt;
===== GDB =====&lt;br /&gt;
&lt;br /&gt;
# Get a zip of the source from [https://github.com/darchons/android-gdb the GitHub repo] (Get the zip because cloning takes a lot longer)&lt;br /&gt;
# Extract the zip&lt;br /&gt;
# You may need to install additional packages in order to build GDB. For example,&amp;lt;pre&amp;gt;port install bison flex ncurses texinfo python27&amp;lt;/pre&amp;gt;&lt;br /&gt;
# Run configure inside the source directory&amp;lt;pre&amp;gt;# ARM:&amp;amp;#10;./configure --target=arm-linux-android --with-python=yes --prefix=/nonexistent \&amp;amp;#10;  --with-gdb-datadir=/nonexistent/utils --with-system-gdbinit=/nonexistent/utils/gdbinit&amp;amp;#10;# x86:&amp;amp;#10;./configure --target=i686-pc-linux-android --with-python=yes --prefix=/nonexistent \&amp;amp;#10;  --with-gdb-datadir=/nonexistent/utils --with-system-gdbinit=/nonexistent/utils/gdbinit&amp;lt;/pre&amp;gt;&lt;br /&gt;
# Run make &amp;lt;pre&amp;gt;make -j8&amp;lt;/pre&amp;gt;&lt;br /&gt;
# The compiled binary will be at gdb/gdb&lt;br /&gt;
&lt;br /&gt;
===== GDBServer =====&lt;br /&gt;
&lt;br /&gt;
Consider using the pre-built gdbserver binary from the &amp;quot;Using pre-built binaries&amp;quot; section above; gdbserver is not specific to your platform. Otherwise,&lt;br /&gt;
# Use the source directory from above&lt;br /&gt;
# Make sure you have a copy of the Android NDK&lt;br /&gt;
# Run configure inside the &#039;&#039;gdb/gdbserver directory&#039;&#039; (following is for NDK r8d)&amp;lt;pre&amp;gt;export NDK=/PATH/TO/NDK&amp;amp;#10;# ARM:&amp;amp;#10;export PATH=$PATH:$NDK/toolchains/arm-linux-androideabi-4.6/prebuilt/darwin-x86/bin&amp;amp;#10;./configure --host=arm-linux-androideabi --with-sysroot=$NDK/platforms/android-9/arch-arm&amp;amp;#10;# x86:&amp;amp;#10;export PATH=$PATH:$NDK/toolchains/x86-4.6/prebuilt/darwin-x86/bin&amp;amp;#10;./configure --host=i686-linux-android --with-sysroot=$NDK/platforms/android-9/arch-x86&amp;lt;/pre&amp;gt;&lt;br /&gt;
# Run make &amp;lt;pre&amp;gt;make -j8&amp;lt;/pre&amp;gt;&lt;br /&gt;
# The compiled binary will be at gdb/gdbserver/gdbserver&lt;br /&gt;
&lt;br /&gt;
=== Step 2. Creating JimDB directory ===&lt;br /&gt;
&lt;br /&gt;
To get the most out of JimDB, in addition to the binaries, you need the Python scripts. But first, the scripts assume you have the following JimDB directory structure,&lt;br /&gt;
&lt;br /&gt;
 ./bin/&lt;br /&gt;
     gdb&lt;br /&gt;
     gdbserver&lt;br /&gt;
 ./utils/&lt;br /&gt;
     gdbinit&lt;br /&gt;
     python/&lt;br /&gt;
&lt;br /&gt;
Therefore, you&#039;d need to,&lt;br /&gt;
# Make a JimDB directory&lt;br /&gt;
# Copy gdb and gdbserver from steps above to bin/&lt;br /&gt;
# Clone the Python scripts to utils/&lt;br /&gt;
# Run bin/gdb&lt;br /&gt;
&lt;br /&gt;
For example,&lt;br /&gt;
 mkdir -p jimdb/bin # step 1&lt;br /&gt;
 cp /PATH/TO/SOURCE/gdb/gdb jimdb/bin # step 2&lt;br /&gt;
 cp /PATH/TO/SOURCE/gdb/gdbserver/gdbserver jimdb/bin&lt;br /&gt;
 git clone git://github.com/darchons/android-gdbutils.git jimdb/utils # step 3&lt;br /&gt;
 jimdb/bin/gdb # step 4&lt;br /&gt;
&lt;br /&gt;
= Using JimDB =&lt;br /&gt;
&lt;br /&gt;
== First run ==&lt;br /&gt;
&lt;br /&gt;
In order to debug Fennec, JimDB needs a copy of your system libraries. When you try to debug Fennec on a particular device for the first time, JimDB will download the libraries from your device. This may take some time but will only need to run once. You may need to restart JimDB in order for debug symbols to work.&lt;br /&gt;
&lt;br /&gt;
== Configuring JimDB ==&lt;br /&gt;
&lt;br /&gt;
utils/gdbinit is the GDB command file that JimDB runs at launch. Open it in your favorite text editor to see configurable settings for JimDB.&lt;br /&gt;
&lt;br /&gt;
utils/gdbinit also loads utils/gdbinit.local. Because utils/gdbinit can change frequently across updates, it&#039;s recommended to copy your custom settings to utils/gdbinit.local, so that updates do not override your settings.&lt;br /&gt;
&lt;br /&gt;
For example, to configure the feninit.default.objdir option, paste the following line anywhere inside utils/gdbinit.local,&lt;br /&gt;
 python feninit.default.objdir = &#039;/home/user/mozilla/central/objdir-android&#039;&lt;br /&gt;
&lt;br /&gt;
== FenInit ==&lt;br /&gt;
&lt;br /&gt;
FenInit is the Python script that simplifies launching Fennec on your device and setting up a debug environment. When JimDB starts, FenInit runs automatically and presents several options,&lt;br /&gt;
&lt;br /&gt;
# Debug Fennec (default)&lt;br /&gt;
# Debug Fennec with env vars and args&lt;br /&gt;
# Debug using jdb&lt;br /&gt;
# Debug content Mochitest&lt;br /&gt;
# Debug compiled-code unit test&lt;br /&gt;
&lt;br /&gt;
[[File:Jimdb-prompt.png]]&lt;br /&gt;
&lt;br /&gt;
=== Debug Fennec ===&lt;br /&gt;
&lt;br /&gt;
This is the default option. Once you choose an object directory to use, the script will automatically launch Fennec, and run GDBServer to attach to Fennec.&lt;br /&gt;
&lt;br /&gt;
The script tries to scan your user directory for object directories. For more control, see the [[#feninit.default.objdir|Configuration section]] on how to specify default object directories or where to scan for object directories.&lt;br /&gt;
&lt;br /&gt;
=== Debug Fennec with env vars and args ===&lt;br /&gt;
&lt;br /&gt;
This option gives you the additional ability to specify environment variables and arguments when launching Fennec. See the [[#feninit.default.env|Configuration section]] on how to specify additional default environment variables and arguments.&lt;br /&gt;
&lt;br /&gt;
=== Debug using jdb ===&lt;br /&gt;
&lt;br /&gt;
This option will let you use the Java debugger (jdb) to debug the native Java portion of Fennec. This is the default option if you already have a previous JimDB debugging session running.&lt;br /&gt;
&lt;br /&gt;
JDB support is experimental. It is able to at least set breakpoints, show source code, and examine objects.&lt;br /&gt;
&lt;br /&gt;
=== Debug content Mochitest ===&lt;br /&gt;
&lt;br /&gt;
This option will let you debug a regular Mochitest. Make sure Fennec is compiled with the &#039;--enable-tests&#039; option in the mozconfig file. Because running Mochitests require a copy of the XUL Runtime Environment (XRE), the script will offer to automatically download a copy of XRE for you, as well as launching the test harness. You can specify a file or a directory to test, or set TEST_PATH. Environment variables and arguments to the test harness are also supported.&lt;br /&gt;
&lt;br /&gt;
=== Debug compiled-code unit test ===&lt;br /&gt;
&lt;br /&gt;
This option will let you debug a C++ test. Environment variables and arguments are supported.&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
==== feninit.default.objdir ====&lt;br /&gt;
* Set feninit.default.objdir to the default object directory. Note that once it is set, the script will not prompt you to choose an object directory.&lt;br /&gt;
* Alternatively, if your object directories are called &#039;obj*&#039; under your source directory, you can set feninit.default.objdir to the source directory itself. The script will scan the source directory and list all the object directories that it found.&lt;br /&gt;
* Note that there have been problems in the past with using ~ and $HOME in the setting, so use absolute path for best results.&lt;br /&gt;
* PRO-TIP: Put the following code block inside gdbinit.local to always use the current directory as the object directory,&lt;br /&gt;
 python&lt;br /&gt;
 import os&lt;br /&gt;
 feninit.default.objdir = os.getcwd()&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
==== feninit.default.srcroot ====&lt;br /&gt;
* Unlike the previous setting, feninit.default.srcroot specifies the directory containing all the source directories. This is convenient if you have &#039;src/mozilla-central&#039;, &#039;src/mozilla-inbound&#039;, &#039;src/mozilla-aurora&#039;, etc. In that case, you can set feninit.default.srcroot to &#039;src&#039; and all the source directories will be scanned for object directories.&lt;br /&gt;
* Again, use absolute path for best results.&lt;br /&gt;
==== feninit.default.no_launch ====&lt;br /&gt;
* This settings is meant for B2G, and may not be useful for Fennec debugging.&lt;br /&gt;
==== feninit.default.gdbserver_port ====&lt;br /&gt;
* To debug Fennec on your device, GDB on your computer needs to talk to GDBServer on your device through a TCP port forwarded to your device through ADB.&lt;br /&gt;
* Normally, JimDB will use a random port. However, you can pick a specific port to use. This is useful in certain situations such as inside an SSH session. See [http://www.jnchen.com/blog/2012/11/tunnelling-adb this blog post].&lt;br /&gt;
==== feninit.default.jdwp_port ====&lt;br /&gt;
* Similar to feninit.default.gdbserver_port, except for using JDB for debugging.&lt;br /&gt;
==== feninit.default.env ====&lt;br /&gt;
* Specify the default environment variables to use when launching Fennec. Only used for the &amp;quot;Debug Fennec&amp;quot; options.&lt;br /&gt;
==== feninit.default.args ====&lt;br /&gt;
* Specify the default arguments to use when launching Fennec. Only used for the &amp;quot;Debug Fennec&amp;quot; options.&lt;br /&gt;
==== feninit.default.cpp_env ====&lt;br /&gt;
* Similar to [[#feninit.default.env|feninit.default.env]], except only used for the &amp;quot;Debug compiled-code unit test&amp;quot; option.&lt;br /&gt;
==== feninit.default.mochi_env ====&lt;br /&gt;
* Similar to [[#feninit.default.env|feninit.default.env]], except only used for the &amp;quot;Debug content Mochitest&amp;quot; option.&lt;br /&gt;
==== feninit.default.mochi_args ====&lt;br /&gt;
* Specify the default arguments to use when debugging Mochitest. Only used for the &amp;quot;Debug content Mochitest&amp;quot; option.&lt;br /&gt;
* Note that Mochitest arguments are arguments to the test harness (e.g. --remote-webserver), and not arguments to Fennec itself.&lt;br /&gt;
==== feninit.default.mochi_xre ====&lt;br /&gt;
* Specify the XRE directory to use, instead of letting the script download and manage an XRE copy.&lt;br /&gt;
==== feninit.default.mochi_harness ====&lt;br /&gt;
* Specify the directory containing the harness itself, i.e. &amp;quot;runtestsremote.py&amp;quot;. Not needed normally.&lt;br /&gt;
==== feninit.default.mochi_xre_url ====&lt;br /&gt;
* Specify the directory on [https://ftp.mozilla.org ftp.mozilla.org] to use for downloading XRE. Not used if feninit.default.mochi_xre is specified.&lt;br /&gt;
==== feninit.default.mochi_xre_update ====&lt;br /&gt;
* Specify the XRE check for updates interval. Only used if the script is managing the XRE copy, and not used if feninit.default.mochi_xre_update is specified.&lt;br /&gt;
&lt;br /&gt;
== GDB commands specific to JimDB ==&lt;br /&gt;
=== set delay-add-remote-solibs ===&lt;br /&gt;
 gdb&amp;gt; set delay-add-remote-solibs &amp;lt;0|1&amp;gt;&lt;br /&gt;
Default setting is 0. Set delay-add-remote-solibs to 1 to delay loading symbols when shared libraries are loaded. This may improve the set up time. However, you may need to use the &amp;quot;sharedlibrary&amp;quot; command to manually load symbols before using breakpoints.&lt;br /&gt;
=== monitor set ignore-ondemand ===&lt;br /&gt;
 gdb&amp;gt; monitor set ignore-ondemand &amp;lt;0|1&amp;gt;&lt;br /&gt;
Default setting is 1. Set ignore-ondemand to 0 to not ignore segmentation faults generated by on-demand decompression. This setting may be needed to debug specific segmentation faults that are inadvertently being ignored. This command can only be run after attaching to the target, so it cannot be specified in gdbinit.local.&lt;br /&gt;
&lt;br /&gt;
= FAQ =&lt;br /&gt;
&lt;br /&gt;
=== What is moz-gdb? ===&lt;br /&gt;
* moz-gdb was a synonym for JimDB, but it&#039;s no longer used, to avoid confusion&lt;br /&gt;
&lt;br /&gt;
=== &amp;quot;configure: error: failure running python-config&amp;quot; when compiling GDB ===&lt;br /&gt;
* python may point to python3 on your machine. You need to specify where python2 is by using, for example, --with-python=python2 in your configure line&lt;br /&gt;
&lt;br /&gt;
=== &amp;quot;error while loading shared libraries: libtinfo.so.5&amp;quot; on Linux ===&lt;br /&gt;
* You may need to create a libtinfo.so.5 symlink to libncurses.so.5. For example,&lt;br /&gt;
 sudo ln -s libncurses.so.5 /usr/lib/libtinfo.so.5&lt;br /&gt;
&lt;br /&gt;
=== &amp;quot;Segmentation fault: 11&amp;quot; or &amp;quot;Illegal instruction: 4&amp;quot; on Mac OS X ===&lt;br /&gt;
* This may be due to incompatible OS X SDK versions. You should build your own JimDB binary to avoid the issue.&lt;br /&gt;
&lt;br /&gt;
=== &amp;quot;cannot locate symbol &amp;quot;__exidx_end&amp;quot;&amp;quot; when starting to debug ===&lt;br /&gt;
* If you&#039;re using pre-built binaries, you need to update to a newer version of JimDB&lt;br /&gt;
* If you&#039;re using custom-built binaries, you need to recompile gdbserver using a newer version of the NDK&lt;br /&gt;
&lt;br /&gt;
=== &amp;quot;No module named printing&amp;quot; when debugging Fennec with JimDB ===&lt;br /&gt;
* The JimDB Python scripts lack several scripts included in regular GDB packages. To fix that, simply copy your local copy of these scripts to the JimDB utils/python directory. For example, on a typical Linux system, run&lt;br /&gt;
 cp -r /usr/share/gdb/python/gdb $jimdb/utils/python/&lt;br /&gt;
* If you don&#039;t have these files, they are available [https://people.mozilla.org/~nchen/jimdb/gdb-python-lib.tar.bz2 here]; just extract it under $jimdb/utils/python/&lt;br /&gt;
&lt;br /&gt;
=== Random segmentation faults when debugging Fennec ===&lt;br /&gt;
* GDB can catch segmentation faults generated by on-demand decompression; just use &amp;quot;continue&amp;quot; to continue execution.&lt;br /&gt;
* Alternatively, specify the &amp;quot;MOZ_LINKER_ONDEMAND=0&amp;quot; environment variable when launching Fennec using Option 2. You can also put the option inside jimdb/utils/gdbinit.local.&lt;br /&gt;
&lt;br /&gt;
=== GDB crashed and Fennec is stuck. Halp!! ===&lt;br /&gt;
* GDBServer may still be attached to Fennec but is unable to communicate with GDB; try killing GDBServer&lt;br /&gt;
 adb shell run-as org.mozilla.fennec_$USER kill `adb shell ps | grep gdb | awk &#039;{print $2}&#039;`&lt;br /&gt;
&lt;br /&gt;
=== &amp;quot;make: `[path]/mochitest-remote&#039; is up to date.&amp;quot; while trying to run Mochitests ===&lt;br /&gt;
* Delete the mochitest-remote file.&lt;br /&gt;
&lt;br /&gt;
=== &amp;quot;failed to run gdbserver&amp;quot; === &lt;br /&gt;
&lt;br /&gt;
    &amp;quot;gdbserver&amp;quot; output:&lt;br /&gt;
     /system/bin/sh: /data/local/tmp/gdbserver: not executable: magic 7F45&lt;br /&gt;
    &amp;quot;run-as&amp;quot; output:&lt;br /&gt;
     /data/local/tmp/gdbserver[1]: syntax error: &#039;(&#039; unexpected&lt;br /&gt;
    &amp;quot;su -c&amp;quot; output:&lt;br /&gt;
     /system/bin/sh: su: not found&lt;br /&gt;
    [path]/jimdb-x86/bin/../utils/gdbinit:136: Error in sourced command file:&lt;br /&gt;
    failed to run gdbserver&lt;br /&gt;
&lt;br /&gt;
You are probably trying to run the x86 version on an ARM device. Download the ARM version of JimDB instead.&lt;br /&gt;
&lt;br /&gt;
Alternatively, you may just have an out-of-date version of gdbserver. Check for an updated version in the link posted above.&lt;br /&gt;
&lt;br /&gt;
    &amp;quot;gdbserver&amp;quot; output:&lt;br /&gt;
    error: only position independent executables (PIE) are supported.&lt;br /&gt;
&lt;br /&gt;
This means your build of gdbserver is too old for the Android version you&#039;re debugging on. You may need a newer platform sysroot and/or to add flags to gdb/gdbserver/Makefile to build a position-independent executable.&lt;br /&gt;
&lt;br /&gt;
    CFLAGS += -fvisibility=default -fPIE&lt;br /&gt;
    LDFLAGS += -rdynamic -fPIE -pie&lt;br /&gt;
&lt;br /&gt;
=== JimDB sucks! Halp!! ===&lt;br /&gt;
* Come on #mobile on IRC&lt;br /&gt;
* Or file a bug under Firefox for Android, JimDB component&lt;br /&gt;
&lt;br /&gt;
=== JimDB is awesome now!! Can I buy you a $beverage? ===&lt;br /&gt;
Yes! See also {{bug|800000}}&lt;br /&gt;
&lt;br /&gt;
=== Using `next` to traverse a function sometimes gets stuck with an error like &amp;quot;Unable to find end of function&amp;quot; ===&lt;br /&gt;
Try using the env-var MOZ_LINKER_ONDEMAND=0.&lt;br /&gt;
&lt;br /&gt;
=== Execution pauses often for &amp;quot;Program received signal SIG33, Real-time event 33.&amp;quot; ===&lt;br /&gt;
This should be caught automatically, but try:&lt;br /&gt;
    handle SIG33 pass nostop noprint&lt;br /&gt;
&lt;br /&gt;
=== &amp;quot;Symbol not found: __PyErr_ReplaceException&amp;quot; ===&lt;br /&gt;
You should not use python 2.7.11.&lt;br /&gt;
&lt;br /&gt;
See : https://github.com/conda/conda/issues/1367&lt;/div&gt;</summary>
		<author><name>Rillian</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Mobile/Fennec/Android/AdvancedTopics&amp;diff=1145137</id>
		<title>Mobile/Fennec/Android/AdvancedTopics</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Mobile/Fennec/Android/AdvancedTopics&amp;diff=1145137"/>
		<updated>2016-08-24T00:40:35Z</updated>

		<summary type="html">&lt;p&gt;Rillian: Update PR logging for the change MOZ_LOG.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Advanced Topics ==&lt;br /&gt;
&lt;br /&gt;
=== Building ===&lt;br /&gt;
==== Changing build flags ====&lt;br /&gt;
If you need to change any build flags (such as MOZ_SWITCHBOARD), instead of adding changes to the mozconfig and clobbering, you can test by adding the flags to mobile/android/confvars.sh, run&lt;br /&gt;
 mach configure&lt;br /&gt;
then check that the changes are in $OJBDIR/config.status, and then build normally.&lt;br /&gt;
&lt;br /&gt;
==== ccache ====&lt;br /&gt;
&lt;br /&gt;
You can optionally install [https://developer.mozilla.org/en-US/docs/Ccache ccache], which can make rebuilding Firefox faster after you have built it once and don&#039;t change (much) of the C++ source code.  In general, ccache is not a performance improvement if you use only one object directory, or edit only Java and/or JavaScript source code.&lt;br /&gt;
&lt;br /&gt;
If you want to use ccache, add a line the following to your mozconfig:&lt;br /&gt;
&lt;br /&gt;
 ac_add_options --with-ccache[=/optional/path/to/ccache]&lt;br /&gt;
&lt;br /&gt;
The default cache size of 1GB is not large enough for a Fennec build. To fully utilize ccache (generally meaning you can expect full builds to complete in &amp;lt;5 minutes from a populated cache), you&#039;ll need to change the cache size to at least 4GB.  Do so by running:&lt;br /&gt;
&lt;br /&gt;
 ccache --max-size 4G&lt;br /&gt;
&lt;br /&gt;
On Mac OS X, install ccache like:&lt;br /&gt;
&lt;br /&gt;
 brew install ccache&lt;br /&gt;
&lt;br /&gt;
On Debian-like Linuxes, install ccache using:&lt;br /&gt;
&lt;br /&gt;
 sudo apt-get install mercurial ccache&lt;br /&gt;
&lt;br /&gt;
==== Building for the x86 architecture ====&lt;br /&gt;
&lt;br /&gt;
If you want to build for x86, substitute:&lt;br /&gt;
&lt;br /&gt;
 ac_add_options --target=i386-linux-android&lt;br /&gt;
&lt;br /&gt;
for the target specified above.  Note: you cannot use &amp;lt;tt&amp;gt;ac_add_options --disable-optimize&amp;lt;/tt&amp;gt; when building for x86.  See {{bug|965870}}.&lt;br /&gt;
&lt;br /&gt;
==== Building Gingerbread-only ====&lt;br /&gt;
For legacy Gingerbread devices, there is a Gingerbread-only build that is optimized for performance and apk size for older devices but does not include some of the newer features that are available.&lt;br /&gt;
&lt;br /&gt;
To make a Gingerbread-only build, you need to use a different [https://dxr.mozilla.org/mozilla-central/source/mobile/android/config/mozconfigs/android-api-9-10-constrained/nightly mozconfig].&lt;br /&gt;
&lt;br /&gt;
==== Building for the ARMv6 architecture ====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ARMv6 is no longer a supported target as of Firefox 33.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If you want to build for ARMv6 instead of ARMv7 (only required for very old, very low end phones), add:&lt;br /&gt;
&lt;br /&gt;
 ac_add_options --with-arch=armv6&lt;br /&gt;
&lt;br /&gt;
==== Unsupported build flags ====&lt;br /&gt;
&lt;br /&gt;
Do &#039;&#039;&#039;not&#039;&#039;&#039; specify these flags because the resulting build will cause out-of-memory crashes:&lt;br /&gt;
&lt;br /&gt;
 ac_add_options --disable-install-strip # Do not use!&lt;br /&gt;
&lt;br /&gt;
==== Updating the builders` SDK ====&lt;br /&gt;
i.e. Nightly builds &amp;amp; treeherder. See [[Mobile/Fennec/Android/Updating_SDK_on_builders]].&lt;br /&gt;
&lt;br /&gt;
=== Multilocale builds ===&lt;br /&gt;
Currently, multilocale only works with a full build. Due to some issues, multilocale artifact build is not supported and you will encounter make target build error when attempting to do so. &lt;br /&gt;
&lt;br /&gt;
Assumptions &lt;br /&gt;
* $AB_CD is the locale you want to repack with&lt;br /&gt;
* objdir-frontend is the directory you specified in your mozconfig, replace this with the object directory you are using &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Before starting, make sure you are in the parent directory of mozilla-central repo&lt;br /&gt;
 mkdir -p l10n  # this should be a sibling directory to mozilla-central&lt;br /&gt;
 cd l10n&lt;br /&gt;
 hg clone https://hg.mozilla.org/l10n-central/$AB_CD&lt;br /&gt;
 cd ../mozilla-central&lt;br /&gt;
&lt;br /&gt;
Edit your mozconfig to include the following options and input the values you want&lt;br /&gt;
 # Edit to include only locales you want to build. Exception is &#039;en-US&#039; must always be included!&lt;br /&gt;
 mk_add_options &#039;export MOZ_CHROME_MULTILOCALE=en-US fr&#039;&lt;br /&gt;
 &lt;br /&gt;
 # Use absolute paths to the directory that houses your locale repos&lt;br /&gt;
 mk_add_options &#039;export L10NBASEDIR=/absolute/path/to/l10n&#039;&lt;br /&gt;
 ac_add_options --with-l10n-base=/absolute/path/to/l10n&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Build, merge, chrome, package, install for each locale you want with the following steps:&lt;br /&gt;
 mach configure&lt;br /&gt;
 mach build&lt;br /&gt;
 make -C objdir-frontend/mobile/android/locales chrome-$AB_CD LOCALE_MERGEDIR=/absolute/path/to/repo/objdir-frontend/merge-$AB_CD&lt;br /&gt;
 mach package&lt;br /&gt;
 mach install &lt;br /&gt;
&lt;br /&gt;
Rebuild with another locale&lt;br /&gt;
&lt;br /&gt;
In mozconfig, edit MOZ_CHROME_MULTILOCALE option to the locale you want&lt;br /&gt;
&lt;br /&gt;
 mach configure&lt;br /&gt;
 mach build mobile/android&lt;br /&gt;
 make -C objdir-frontend/mobile/android/locales chrome-$AB_CD LOCALE_MERGEDIR=/absolute/path/to/repo/objdir-frontend/merge-$AB_CD&lt;br /&gt;
 mach package&lt;br /&gt;
 mach install&lt;br /&gt;
&lt;br /&gt;
=== Single-locale language repacks ===&lt;br /&gt;
&lt;br /&gt;
There is a script in mozharness for this (scripts/mobile_l10n.py) but it relies on buildbot information so it&#039;s not suitable for local repacks.&lt;br /&gt;
&lt;br /&gt;
This assumes that $(AB_CD) is the locale you want to repack with; I tested with &amp;quot;ar&amp;quot; and &amp;quot;en-GB&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* clone l10n-central/$(AB_CD) so that it is a sibling of your mozilla-central directory&lt;br /&gt;
* I assume your object directory is &amp;quot;objdir-droid&amp;quot; and that you have built and packaged already&lt;br /&gt;
 make -f client.mk &amp;amp;&amp;amp; make -C objdir-droid package&lt;br /&gt;
* copy your .mozconfig to .mozconfig.l10n and add the following lines&lt;br /&gt;
 # L10n&lt;br /&gt;
 ac_add_options --with-l10n-base=../../l10n-central&lt;br /&gt;
 &lt;br /&gt;
 # Global options&lt;br /&gt;
 ac_add_options --disable-tests&lt;br /&gt;
 &lt;br /&gt;
 mk_add_options MOZ_OBJDIR=./objdir-l10n&lt;br /&gt;
* cd to mozilla-central&lt;br /&gt;
* configure and prepare objdir-l10n&lt;br /&gt;
 MOZCONFIG=.mozconfig.l10n make -f client.mk configure&lt;br /&gt;
 make -C objdir-l10n/config&lt;br /&gt;
* copy your built package into objdir-l10n&lt;br /&gt;
 cp ./objdir-droid/dist/fennec-*en-US*.apk ./objdir-l10n/dist&lt;br /&gt;
* unpack.  This files objdir-l10n/dist with the bits of the APK, ready for re-assembling.&lt;br /&gt;
 make -C objdir-l10n/mobile/android/locales unpack&lt;br /&gt;
* compare locales (you may need to install the compare-locales tool first).  This writes locale differences into objdir-l10n/merged.&lt;br /&gt;
 compare-locales -m objdir-l10n/merged mobile/android/locales/l10n.ini ../l10n-central $(AB_CD)&lt;br /&gt;
* finally, re-assemble with the locale differences&lt;br /&gt;
 LOCALE_MERGEDIR=objdir-l10n/merged make -C objdir-l10n/mobile/android/locales installers-$(AB_CD)&lt;br /&gt;
&lt;br /&gt;
You should find an APK at &amp;quot;objdir-l10n/dist/fennec-*$(AB_CD)*.apk&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==== Enabling C++ debugging ====&lt;br /&gt;
&lt;br /&gt;
If you want to create a build suitable for debugging the C++ code, add:&lt;br /&gt;
 ac_add_options --enable-debug&lt;br /&gt;
 ac_add_options --enable-debug-symbols&lt;br /&gt;
&lt;br /&gt;
=== Troubleshooting ===&lt;br /&gt;
&lt;br /&gt;
===== Don&#039;t set CC / CXX environmental variables =====&lt;br /&gt;
&lt;br /&gt;
If you&#039;ve set the environmental variables CC and CXX (e.g. via .bash_aliases or via your mozconfig), then you probably need to unset them before building for Android, or else your build may fail with something like:&lt;br /&gt;
&lt;br /&gt;
 checking whether the C compiler (gcc -mandroid -fno-short-enums (etc etc)) works... no&lt;br /&gt;
&lt;br /&gt;
followed by errors about &amp;quot;C compiler cannot create executables&amp;quot;, &amp;quot;Relocations in generic ELF (EM: 40)&amp;quot;, and &amp;quot;crtbegin_dynamic.o: error adding symbols: File in wrong format&amp;quot;. This is a sign that you&#039;re compiling with your platform&#039;s native compiler (due to having CC / CXX set), instead of the android-specific GCC version that ships with the NDK.  See {{bug|977817}} for more details; as noted there, the build system may trust your custom CC &amp;amp; CXX variables, when you probably don&#039;t want it to.&lt;br /&gt;
&lt;br /&gt;
=== Coding Caveats ===&lt;br /&gt;
==== Closing resources ====&lt;br /&gt;
When handling resources (like Cursors), a try/finally block should be used to ensure these are closed properly. For example:&lt;br /&gt;
&lt;br /&gt;
 final Cursor c = getCursor();&lt;br /&gt;
 try {&lt;br /&gt;
     useCursorWhichMightThrowException(c);&lt;br /&gt;
 } catch (SomeSpecificException sse) {&lt;br /&gt;
     log(sse);&lt;br /&gt;
 } finally {&lt;br /&gt;
     c.close();&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Once the try block is entered, the finally block will *always* get executed upon exit of the try block. The one exception is if there is a System.exit call inside the try block, which immediately exits the program and makes everything moot anyway. The finally block will get executed on caught and uncaught exceptions, as well as normal returns.&lt;br /&gt;
&lt;br /&gt;
If you are casting the resource to something, make sure that you do the cast inside the try block, like so:&lt;br /&gt;
&lt;br /&gt;
 // GOOD!&lt;br /&gt;
 InputStream is = getInputStream();&lt;br /&gt;
 try {&lt;br /&gt;
     FileInputStream fis = (FileInputStream) is;&lt;br /&gt;
     ...&lt;br /&gt;
 } finally {&lt;br /&gt;
     ...&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
rather than doing this:&lt;br /&gt;
&lt;br /&gt;
 // BAD!&lt;br /&gt;
 FileInputStream fis = (FileInputStream) getInputStream();&lt;br /&gt;
 try {&lt;br /&gt;
     ...&lt;br /&gt;
 } finally {&lt;br /&gt;
     ...&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
This is so that in case of ClassCastExceptions you don&#039;t get a dangling open resource left behind.&lt;br /&gt;
&lt;br /&gt;
==== Timing ====&lt;br /&gt;
&lt;br /&gt;
TLDR: Google recommends using SystemClock.uptimeMillis() for general purpose interval timing of user interface events or performance measurements. If you&#039;re adding stuff for timing, use SystemClock.uptimeMillis(), rather than something like new Date().getTime().&lt;br /&gt;
&lt;br /&gt;
Normally in Java the default time-getter is System.currentTimeMillis() since it avoids the overhead of creating a new Date object. This is also what new Date() does under the hood. However, currentTimeMillis() and the Date object are both subject to change in unexpected ways if the user changes the time on their device, or if daylight savings comes into effect, or there&#039;s a network time update, or whatever. So Android has generously provided android.os.SystemClock which has various functions that you can use to get a better timestamp. Refer to the class javadoc and pick whichever function is most suitable for what you&#039;re trying to measure.&lt;br /&gt;
&lt;br /&gt;
http://developer.android.com/reference/android/os/SystemClock.html&lt;br /&gt;
&lt;br /&gt;
== Advanced Debugging ==&lt;br /&gt;
Beyond just using Android logcat, there are other options for debugging Firefox for Android, depending on your needs.&lt;br /&gt;
&lt;br /&gt;
=== Logcat apps ===&lt;br /&gt;
==== ICS (4.1) and below ====&lt;br /&gt;
* Install the [https://market.android.com/details?id=org.jtb.alogcat&amp;amp;hl=en aLogCat] app. Use it to capture logs and attach the logs to bugs.&lt;br /&gt;
&lt;br /&gt;
Once you have alogcat installed, just use Fennec as you would normally. Upon encountering a bug or issue, start the aLogcat app (as soon as possible after seeing the Fennec issue) and select &amp;quot;Share&amp;quot; or &amp;quot;Save&amp;quot; from the menu to send it via email or save it to the SD card. The log can then be attached to a bug or sent to a developer. As with adb logcat, it is better to have a log with timestamps than without timestamps. To enable timestamps in the log, select &amp;quot;Preferences&amp;quot; from the aLogcat menu, and change the &amp;quot;Format?&amp;quot; option to &amp;quot;Time&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
If you need to, you can search for some kinds of Fennec-related output by using the &amp;quot;Filter&amp;quot; menu item and entering &amp;quot;Gecko&amp;quot;. However, when submitting logs for bug reports, please make sure you clear the filter and include all of the available log data.&lt;br /&gt;
&lt;br /&gt;
==== Jelly Bean (4.2) and above ====&lt;br /&gt;
* Install the [https://addons.mozilla.org/en-US/android/addon/logview/ LogView add-on]&lt;br /&gt;
* Root the device and use the [https://market.android.com/details?id=org.jtb.alogcat&amp;amp;hl=en aLogCat] app as above.&lt;br /&gt;
&lt;br /&gt;
=== JavaScript dump() ===&lt;br /&gt;
&lt;br /&gt;
To use the dump() function in JavaScript to write to the log:&lt;br /&gt;
&lt;br /&gt;
# Go to about:config and set browser.dom.window.dump.enabled to &amp;quot;true&amp;quot;&lt;br /&gt;
# Run the following ADB commands:&lt;br /&gt;
&lt;br /&gt;
 adb shell stop&lt;br /&gt;
 adb shell setprop log.redirect-stdio true&lt;br /&gt;
 adb shell start&lt;br /&gt;
&lt;br /&gt;
=== Using JimDB ===&lt;br /&gt;
&lt;br /&gt;
See [[Mobile/Fennec/Android/GDB]]&lt;br /&gt;
&lt;br /&gt;
=== Using Debug Intent ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note: this is not useful with JimDB. If you want to use JimDB, just start it.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In order to attach before things get running, launch with: &lt;br /&gt;
&lt;br /&gt;
   adb shell am start -a org.mozilla.gecko.DEBUG -n org.mozilla.fennec_foobar/.App&lt;br /&gt;
&lt;br /&gt;
(Replace foobar by your username)&lt;br /&gt;
&lt;br /&gt;
and just click launch once gdb is attached. If you need to debug a crash that happens before XRE_Main is called, the patch on {{bug|572247}} may be useful. &lt;br /&gt;
&lt;br /&gt;
this script [http://dump.lassey.us/debug.sh] will attach gdbserver for you&lt;br /&gt;
&lt;br /&gt;
=== Getting dalvik java stack dumps using gdb ===&lt;br /&gt;
&lt;br /&gt;
(gdb) call dvmDumpAllThreads(true)&lt;br /&gt;
&lt;br /&gt;
this will dump a stack trace to logcat&lt;br /&gt;
&lt;br /&gt;
Note: this will only work if you have symbols for dalvik.&lt;br /&gt;
&lt;br /&gt;
=== Debugging with jdb ===&lt;br /&gt;
&lt;br /&gt;
JimDB can now launch JDB integration&lt;br /&gt;
&lt;br /&gt;
You can also use eclipse for debugging in a similar way by setting up for debugging &amp;quot;Remote Java application&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Debugging with eclipse ===&lt;br /&gt;
&lt;br /&gt;
You need to find the PID of your fennec process. Forward it to a local TCP socket as in &amp;quot;Debugging with jdb.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
In Eclipse switch to the debug perspective. Go to Run &amp;gt; Debug configurations... Remote Java Application. Change the port to the TCP port you specified in your adb command. Under Source, navigate to your checkout, then into mobile/android.&lt;br /&gt;
&lt;br /&gt;
Eclipse looks for source code in a specific location. You need to create the directory hierarchy:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 mobile&lt;br /&gt;
  /android&lt;br /&gt;
    /org&lt;br /&gt;
      mozilla/&lt;br /&gt;
        gecko -&amp;gt; ../../base&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That is, in mozilla-central/mobile/android, create org/mozilla, and put the symlink gecko pointing to mozilla-central/mobile/android/base.&lt;br /&gt;
&lt;br /&gt;
You may also want to add more debugging information and can do that like this:&lt;br /&gt;
 diff --git a/config/android-common.mk b/config/android-common.mk&lt;br /&gt;
 index 4591239..a47726a 100644&lt;br /&gt;
 --- a/config/android-common.mk&lt;br /&gt;
 +++ b/config/android-common.mk&lt;br /&gt;
 @@ -70,6 +70,6 @@ JAVAC_FLAGS = \&lt;br /&gt;
    -classpath $(JAVA_CLASSPATH) \&lt;br /&gt;
    -bootclasspath $(JAVA_BOOTCLASSPATH) \&lt;br /&gt;
    -encoding UTF8 \&lt;br /&gt;
 -  -g:source,lines \&lt;br /&gt;
 +  -g:source,lines,vars \&lt;br /&gt;
    -Werror \&lt;br /&gt;
    $(NULL)&lt;br /&gt;
&lt;br /&gt;
=== Arguments and Environment Variables ===&lt;br /&gt;
&lt;br /&gt;
If you need to set an environment variable at run time, append &#039;&#039;&#039;--es env# VAR=VAL&#039;&#039;&#039; to your activity manager command where # is the ordered number of variables for example: &lt;br /&gt;
&lt;br /&gt;
  adb shell am start -a android.activity.MAIN -n org.mozilla.fennec_$USER/.App --es env0 VAR=val --es env1 FOO=bar&lt;br /&gt;
&lt;br /&gt;
If you need to pass arguments at run time, append &#039;&#039;&#039;--es args &amp;quot;&amp;lt;your-args&amp;gt;&amp;quot;&#039;&#039;&#039; to your activity manager command. For example, to launch with a specific profile: &lt;br /&gt;
&lt;br /&gt;
  adb shell am start -a android.activity.MAIN -n org.mozilla.fennec_$USER/.App --es args &amp;quot;--profile /mnt/sdcard/myprofile&amp;quot;&lt;br /&gt;
&lt;br /&gt;
To launch with a specific URL, use the am -d option to set the intent&#039;s data URI:&lt;br /&gt;
&lt;br /&gt;
  adb shell am start -a android.activity.MAIN -n org.mozilla.fennec_$USER/.App -d &#039;http://www.mozilla.org&#039;&lt;br /&gt;
&lt;br /&gt;
=== C++ Logging ===&lt;br /&gt;
&lt;br /&gt;
You can use the env vars as described above to enable MOZ_LOG logging from C++ code:&lt;br /&gt;
&lt;br /&gt;
  adb shell am start -a android.activity.MAIN -n org.mozilla.fennec_$USER/.App --es env0 MOZ_LOG=all:5 --es env1 MOZ_LOG_FILE=/mnt/sdcard/log.txt&lt;br /&gt;
&lt;br /&gt;
If no file is specified, logging is directed to the android logs: &lt;br /&gt;
&lt;br /&gt;
  adb shell am start -a android.activity.MAIN -n org.mozilla.fennec_$USER/.App --es env0 MOZ_LOG=all:5&lt;br /&gt;
&lt;br /&gt;
Look for lines marked &amp;quot;Gecko&amp;quot; with one of the requested log keys in the adb logcat output.&lt;br /&gt;
&lt;br /&gt;
=== Using legacy GDB (non-JimDB)  ===&lt;br /&gt;
&lt;br /&gt;
See [[Mobile/Fennec/Android/GDBNoRoot|Fennec/Android/GDBNoRoot]]&lt;br /&gt;
&lt;br /&gt;
=== Reading back the framebuffer ===&lt;br /&gt;
If you need to verify what is in the back buffer at a particular time, you can cleverly call functions from gdb to allocate memory, read back, and write that to disk.&lt;br /&gt;
&lt;br /&gt;
You need to know the size of your framebuffer a priori; in this case, it&#039;s 480x699.&lt;br /&gt;
&lt;br /&gt;
You also need to know what the GL enum values are, because unless you compile with -ggdb, you don&#039;t have #defines available to you in the debugger. Very helpful information: GL_RGBA = 0x1908, GL_UNSIGNED_BYTE = 0x1401. The rest you can find in gfx/gl/GLDefs.h.&lt;br /&gt;
&lt;br /&gt;
You &#039;&#039;&#039;should&#039;&#039;&#039; be able to call glReadPixels directly, but in my experience that causes Fennec to crash. However, if you have a GLContext* lying around, as you often do, you can work around that problem.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;(gdb) set $m = (int*)malloc(480*699*4)&lt;br /&gt;
(gdb) call aManager-&amp;gt;mGLContext.mRawPtr-&amp;gt;fReadPixels(0, 0, 480, 699, 0x1908, 0x1401, (void*)$m)&lt;br /&gt;
(gdb) set $f = fopen(&amp;quot;/sdcard/outputfile&amp;quot;, &amp;quot;wb+&amp;quot;)&lt;br /&gt;
(gdb) call fwrite($m, 1, 480*699*4, $f)&lt;br /&gt;
$7 = 1342080&lt;br /&gt;
(gdb) call fclose($f)&lt;br /&gt;
$8 = 0&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now there is a file called /sdcard/outputfile that you can adb pull. But since it&#039;s just raw RGBA values, you need to be able to wrap that in PNG headers to display it. [https://github.com/jrmuizel/minpng/blob/master/minpng.h Jeff Muizelaar wrote a header called minpng.h that you can use to do so.]&lt;br /&gt;
&lt;br /&gt;
Get Jeff&#039;s minpng.h, and put it in a directory along with a driver c program:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;#include &amp;quot;minpng.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
int main(int argc, char* argv[])&lt;br /&gt;
{&lt;br /&gt;
	FILE* f = fopen(argv[1], &amp;quot;rb&amp;quot;);&lt;br /&gt;
	int w = atoi(argv[2]);&lt;br /&gt;
	int h = atoi(argv[3]);&lt;br /&gt;
	char* d = (char*) malloc(w * h * 4);&lt;br /&gt;
	fread(d, w * h * 4, 1, f);&lt;br /&gt;
	fclose(f);&lt;br /&gt;
	write_png(argv[4], d, w, h);&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Compile and run:&lt;br /&gt;
&amp;lt;pre&amp;gt;$ gcc -o minpng minpng.c&lt;br /&gt;
$ ./minpng outputfile 480 699 output.png&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== Using Rendertrace (Maple) ===&lt;br /&gt;
&lt;br /&gt;
Rendertrace is a utility that will dump layer position and timing information (such as drawing, upload) to the console. This information can pasted into the rendertrace web front end to visualize the layer position and event timeline. This will let you understand where you&#039;re gecko is spending its time and why were checkerboarding.&lt;br /&gt;
&lt;br /&gt;
To enable go in &#039;gfx/layers/RenderTrace.h&#039; and uncomment &#039;#define MOZ_RENDERTRACE&#039;. Rebuild and run &#039;adb logcat | grep RENDERTRACE&#039;, paste the result in http://people.mozilla.org/~bgirard/rendertrace.html and hit &#039;reload&#039;. For details talk to BenWa.&lt;br /&gt;
&lt;br /&gt;
=== Using apitrace ===&lt;br /&gt;
&lt;br /&gt;
Apitrace is a tool for tracing GL/EGL calls for debugging purposes. It basically uses an interim shared library called libapitrace that contains shadow gl* and egl* functions, which then get logged and then passed through to the real driver.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Use apitrace from https://github.com/apitrace/apitrace to build for desktop and android.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get install libegl1-mesa-dev libgles1-mesa-dev libgles2-mesa-dev libqt4-dev cmake&lt;br /&gt;
git clone https://github.com/gw280/apitrace.git&lt;br /&gt;
cd apitrace&lt;br /&gt;
&lt;br /&gt;
# Build for Android&lt;br /&gt;
cmake -DANDROID_NDK=/path/to/your/ndk -DCMAKE_TOOLCHAIN_FILE=android/android.toolchain.cmake -DANDROID_API_LEVEL=9 -Bbuild-android -H.&lt;br /&gt;
make -C build-android -j8&lt;br /&gt;
&lt;br /&gt;
# Build for desktop&lt;br /&gt;
cmake -H. -Bbuild&lt;br /&gt;
make -C build -j8&lt;br /&gt;
&lt;br /&gt;
export EGL_SOFTWARE=true&lt;br /&gt;
./build/eglretrace -v /path/to/your/apitrace_log.trace&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Android build will create egltrace.so in build-android/wrappers, which you can then push to your device to /data/local:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
adb push build-android/wrappers/egltrace.so /data/local/tmp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Restarting Fennec will cause it to load the apitrace library and the apitrace log will be saved to /data/data/org.mozilla.fennec_username/firefox.trace&lt;br /&gt;
&lt;br /&gt;
You can then adb pull /data/data/org.mozilla.fennec_username/firefox.trace and analyse it on your desktop.&lt;br /&gt;
&lt;br /&gt;
You can also use qapitrace as a GUI to inspect your trace files. (be sure to switch qapitrace to the EGL api using the options dialog)&lt;br /&gt;
&lt;br /&gt;
These instructions provide a trace that does not include the Java GL code. To get traces including java code is more complicated. You need to use&lt;br /&gt;
the patch from this bug https://bugzilla.mozilla.org/show_bug.cgi?id=749859 and this version of https://github.com/ideak/apitrace/tree/dev. Further, you&#039;ll need to build your own image/modify the current one to replace /init.rc. You also need to disable hardware acceleration of the UI (https://bug746703.bugzilla.mozilla.org/attachment.cgi?id=619009) Ask jrmuizel for more information if you want to do this.&lt;br /&gt;
&lt;br /&gt;
=== about:memory ===&lt;br /&gt;
about:memory provides heaps (ha!) of useful memory information. &lt;br /&gt;
&lt;br /&gt;
You can obtain a snapshot of memory info from a running Fennec instance using:&lt;br /&gt;
&lt;br /&gt;
  adb shell am broadcast -a org.mozilla.gecko.MEMORY_DUMP&lt;br /&gt;
&lt;br /&gt;
This dumps a json file to the SD card and prints out the exact filename to logcat. You can pull the json file to desktop using&lt;br /&gt;
&lt;br /&gt;
  adb pull &amp;lt;absolute-path-to-file&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and view it in firefox&#039;s about:memory: use the &amp;quot;Read reports from a file&amp;quot; option at the bottom of the about:memory page.&lt;br /&gt;
&lt;br /&gt;
=== Profiling ===&lt;br /&gt;
&lt;br /&gt;
See https://wiki.mozilla.org/Mobile/Fennec/Android/Profiling.&lt;br /&gt;
&lt;br /&gt;
=== Tweaking UI prefs ===&lt;br /&gt;
By default, all of these prefs are set to &amp;quot;-1&amp;quot; in Fennec, meaning they take the values listed below, which are maintained in Axis.java.&lt;br /&gt;
&lt;br /&gt;
Fractional values are specified in 1/1000th of a value; to specify a value of 0.3, write 300.&lt;br /&gt;
&lt;br /&gt;
Note: You need to restart Fennec after changing these values.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
! Pref !! Default value !! Description !!&lt;br /&gt;
|-&lt;br /&gt;
| ui.scrolling.friction_slow || 850 || This fraction in 1000ths of velocity remains after every animation frame when the velocity is low.||&lt;br /&gt;
|-&lt;br /&gt;
| ui.scrolling.friction_fast || 970 || This fraction in 1000ths of velocity remains after every animation frame when the velocity is high.||&lt;br /&gt;
|-&lt;br /&gt;
| ui.scrolling.velocity_threshold || 10 || Below this velocity (in pixels per frame), the friction changes from friction_fast to friction_slow.||&lt;br /&gt;
|-&lt;br /&gt;
| ui.scrolling.max_event_acceleration || 12 || The maximum velocity change factor between events, per ms, in 1000ths. ||&lt;br /&gt;
|-&lt;br /&gt;
| ui.scrolling.overscroll_decel_rate || 40 || The rate of deceleration when the surface has overscrolled, in 1000ths. ||&lt;br /&gt;
|-&lt;br /&gt;
| ui.scrolling.overscroll_snap_limit || 300 || The fraction of the surface which can be overscrolled before it must snap back, in 1000ths. ||&lt;br /&gt;
|-&lt;br /&gt;
| ui.scrolling.min_scrollable_distance || 500 || The minimum amount of space that must be present for an axis to be considered scrollable, in 1/1000ths of pixels. ||&lt;br /&gt;
|-&lt;br /&gt;
| gfx.displayport.strategy || 1 || The strategy we use to determine how display ports are calculated. 0 = fixed margin, 1 = velocity bias, 2 = dynamic resolution, 3 = no margins ||&lt;br /&gt;
|-&lt;br /&gt;
| gfx.displayport.strategy_fm.multiplier || 1500 || When gfx.displayport.strategy = 0 (fixed margin), the 1000th of each dimension of the viewport the displayport is sized to. ||&lt;br /&gt;
|-&lt;br /&gt;
| gfx.displayport.strategy_fm.danger_x || 100 || When gfx.displayport.strategy = 0 (fixed margin), the 1000th of the width of the viewport the horizontal danger zone is set to.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Danger zone is defined as the space at the edge of the viewport at which the viewport (and hence displayport) starts being changed.&lt;br /&gt;
|-&lt;br /&gt;
| gfx.displayport.strategy_fm.danger_y || 200 || When gfx.displayport.strategy = 0 (fixed margin), the 1000th of the height of the viewport the vertical danger zone is set to. ||&lt;br /&gt;
|-&lt;br /&gt;
| gfx.displayport.strategy_vb.multiplier || 1500 || When gfx.displayport.strategy = 1 (velocity bias), the 1000th of each dimension of the viewport the displayport is sized to. ||&lt;br /&gt;
|-&lt;br /&gt;
| gfx.displayport.strategy_vb.threshold || 32 || When gfx.displayport.strategy = 1 (velocity bias), the threshold for velocity, in pixels/frame, when multiplied by the screen DPI. ||&lt;br /&gt;
|-&lt;br /&gt;
| gfx.displayport.strategy_vb.reverse_buffer || 200 || When gfx.displayport.strategy = 1 (velocity bias), the fraction of the buffer (in 1000ths) to be kept in the direction opposite the direction of the scroll. ||&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Invalidate the JavaScript startup cache ===&lt;br /&gt;
&lt;br /&gt;
To make life easier for developers, &#039;&#039;&#039;in local development builds only&#039;&#039;&#039;, {{bug|976216}} invalidates the JavaScript startup cache every time Firefox for Android starts.  On non-local development builds (including TBPL builds and try builds), the JavaScript startup cache is not invalidated at startup.&lt;br /&gt;
&lt;br /&gt;
Background: JavaScript files and modules (like &amp;lt;code&amp;gt;browser.js&amp;lt;/code&amp;gt;) are cached for fast startup.  The cache is invalidated only when an internal build ID is updated, which only happens when certain C++ code is rebuilt.  That doesn&#039;t happen for most patches that only touch Java and JavaScript within &amp;lt;code&amp;gt;mobile/android&amp;lt;/code&amp;gt;.  See {{bug|695145}} for the details of this build ID handling.  If you happen to be building a non-local development build in some way, you might need to invalidate the JavaScript startup cache by touching &amp;lt;code&amp;gt;toolkit/xre/nsAndroidStartup.cpp&amp;lt;/code&amp;gt; and rebuilding libxul.&lt;br /&gt;
&lt;br /&gt;
=== killer script ===&lt;br /&gt;
&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 if [ $# -ne 1 ]&lt;br /&gt;
 then&lt;br /&gt;
     echo &amp;quot;usage: $0  packagename.of.your.activity&amp;quot;&lt;br /&gt;
     echo &amp;quot;for example:&amp;quot;&lt;br /&gt;
     echo &amp;quot;  $0 org.mozilla.fennec&amp;quot;&lt;br /&gt;
     exit&lt;br /&gt;
 fi&lt;br /&gt;
 &lt;br /&gt;
 p=`adb shell ps | grep $1 | awk &#039;{print $2}&#039;`&lt;br /&gt;
 if [ &amp;quot;$p&amp;quot; = &amp;quot;&amp;quot; ];&lt;br /&gt;
 then&lt;br /&gt;
     echo &amp;quot;ERROR: That doesn&#039;t seem to be a running process. Please make sure your&amp;quot;&lt;br /&gt;
     echo &amp;quot;application has been started and that you are using the correct&amp;quot;&lt;br /&gt;
     echo &amp;quot;namespace argument.&amp;quot;&lt;br /&gt;
     exit&lt;br /&gt;
 fi&lt;br /&gt;
 &lt;br /&gt;
 adb shell run-as $1 kill $p&lt;br /&gt;
&lt;br /&gt;
=== .gdbinit ===&lt;br /&gt;
&lt;br /&gt;
This is an example .gdbinit that uses the symbols from a locally built rom and automatically attaches to gdbserver. Note that putting a &#039;&#039;.gdbinit&#039;&#039; file inside a directory will make gdb load it thus you will not pollute your regular gdb init with those configurations. &lt;br /&gt;
&lt;br /&gt;
 set solib-search-path /home/blassey/android/system/out/target/product/passion/symbols/system/bin:/home/blassey/android/system/out/target/product/passion/symbols/system/lib/:/home/blassey/src/ndk5-m-c/objdir-droid-dbg/dist/bin&lt;br /&gt;
 set solib-absolute-prefix /home/blassey/android/system/out/target/product/passion/symbols/system/lib/&lt;br /&gt;
 target remote localhost:12345&lt;br /&gt;
&lt;br /&gt;
=== Rooting Android devices ===&lt;br /&gt;
&lt;br /&gt;
See [[Mobile/Fennec/Android/Rooting|Rooting Android Devices]].&lt;br /&gt;
&lt;br /&gt;
=== Sign a Fennec build ===&lt;br /&gt;
Nightly builds are available unsigned, so that you can sign them with your local debug key and install them on top of your own debug builds (without uninstalling and losing your profile). To sign and install the unsigned nightly build:&lt;br /&gt;
     &lt;br /&gt;
  wget http://ftp.mozilla.org/pub/mozilla.org/mobile/nightly/latest-mozilla-central-android-r7/gecko-unsigned-unaligned.apk&lt;br /&gt;
  jarsigner -sigalg SHA1withRSA -digestalg SHA1 -keystore ~/.android/debug.keystore -storepass android -keypass android gecko-unsigned-unaligned.apk androiddebugkey&lt;br /&gt;
  zipalign -f -v 4 gecko-unsigned-unaligned.apk gecko-signed-aligned.apk&lt;br /&gt;
  adb install -r gecko-signed-aligned.apk&lt;br /&gt;
&lt;br /&gt;
Or you can also re-sign a signed build. If &amp;quot;fennec.apk&amp;quot; is signed already, this will remove the signature and replace it with your own. The result will be saved as &amp;quot;fennec-resigned.apk&amp;quot;:&lt;br /&gt;
     &lt;br /&gt;
  zip fennec.apk -d META-INF/*&lt;br /&gt;
  jarsigner -sigalg SHA1withRSA -digestalg SHA1 -keystore ~/.android/debug.keystore -storepass android -keypass android fennec.apk androiddebugkey&lt;br /&gt;
  zipalign -f -v 4 fennec.apk fennec-resigned.apk&lt;br /&gt;
&lt;br /&gt;
If you get this error when you try to sign a package:&lt;br /&gt;
     &lt;br /&gt;
  jarsigner: unable to sign jar: java.util.zip.ZipException: invalid entry compressed size (expected 16716 but got 16964 bytes)&lt;br /&gt;
     &lt;br /&gt;
You should to follow some steps to complete your task:&lt;br /&gt;
     &lt;br /&gt;
 * rename the .apk to .zip&lt;br /&gt;
 * unzip the file in some folder&lt;br /&gt;
 * remove the METAINF folder&lt;br /&gt;
 * zip the remaining files&lt;br /&gt;
 * change the name .zip to .apk&lt;br /&gt;
 * sign again&lt;br /&gt;
&lt;br /&gt;
To verify if everything is alright use the command&lt;br /&gt;
     &lt;br /&gt;
  jarsigner -verbose -verify&lt;br /&gt;
&lt;br /&gt;
=== Useful Addons ===&lt;br /&gt;
There are some addons which may be useful for development purposes. See [[Mobile/Fennec/Android/Development/Addons]].&lt;br /&gt;
&lt;br /&gt;
== Other Resources ==&lt;br /&gt;
&lt;br /&gt;
* [https://wiki.mozilla.org/Mobile/Fennec/Android/Switchboard Switchboard]&lt;/div&gt;</summary>
		<author><name>Rillian</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=GitHub&amp;diff=1133871</id>
		<title>GitHub</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=GitHub&amp;diff=1133871"/>
		<updated>2016-05-23T16:42:48Z</updated>

		<summary type="html">&lt;p&gt;Rillian: Add contacts for MozillaYVR&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is specifically about [https://github.com/mozilla the &amp;quot;mozilla&amp;quot; organization on github]. There are several other github organizations you may be interested in, cf. the incomplete list [[#other_github|below]].&lt;br /&gt;
&amp;lt;div id=&amp;quot;contact&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! [[File:Red_question_mark.png|144px|Send us an email!|link=]] Got a question?&lt;br /&gt;
|-&lt;br /&gt;
| Email {{emailentry|github-owners|mozilla.org|at=is}} &amp;lt;br /&amp;gt;&lt;br /&gt;
Bugzilla [https://bugzilla.mozilla.org/enter_bug.cgi?comment=I%27ve%20read%20https%3A%2F%2Fwiki.mozilla.org%2FGithub%2C%20and%20need%20help%20with%20the%20following.%0D%0A%0D%0A&amp;amp;component=Github%3A%20Administration&amp;amp;form_name=enter_bug&amp;amp;product=mozilla.org&amp;amp; mozilla.org :: Github: Administration] &amp;lt;br /&amp;gt;&lt;br /&gt;
irc #github on [[IRC|moznet]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Recommendations and FAQ ==&lt;br /&gt;
&lt;br /&gt;
=== Where should I ask additional questions? ===&lt;br /&gt;
* Send an email to &#039;&#039;&#039;{{emailentry|github-owners|mozilla.org|at=is}}&#039;&#039;&#039; and we&#039;ll respond right away! We&#039;re also available on #github on irc.&lt;br /&gt;
&lt;br /&gt;
=== How do I hook up a new 3rd party application to a repository in the mozilla org? ===&lt;br /&gt;
3rd party applications can easily impact many other repositories than the initial one. For that reason, the following steps are strongly encouraged:&lt;br /&gt;
# Create yourself a new github user for this repository.&lt;br /&gt;
# Make them an admin of the repository(s) temporarily.&lt;br /&gt;
# Sign in as the new github user and setup the 3rd party application.&lt;br /&gt;
# Log back into your normal account.&lt;br /&gt;
# Try to reduce access of that user from an admin of the repository(s) to read only access.&lt;br /&gt;
# If (5) doesn&#039;t work, at least the 3rd party application will not have access to all of your normal github account&#039;s (including private repositories).&lt;br /&gt;
&lt;br /&gt;
* Authorizing an application to work with GitHub utilizes the permissions your account has -- so, any repositories you have access to the application will have access to as well (including private ones).  If you want to grant access to an application that no one else has used with the Mozilla organization yet you&#039;ll see a &amp;quot;Request access&amp;quot; button during the set up flow.  You&#039;ll need to click that button to request approval.  See below for an example:&lt;br /&gt;
&lt;br /&gt;
[[File:github_approval.png]]&lt;br /&gt;
&lt;br /&gt;
* In some cases, the application does not need to be &amp;quot;approved&amp;quot; to function correctly, as it has read only access to any public repository. (Some applications only want write access to help you configure the application first time.)&lt;br /&gt;
&lt;br /&gt;
* In other cases, the application does need write permission, and/or permission to read a private repository. In these cases, it is helpful to send the details to the owner&#039;s team, either by [https://bugzilla.mozilla.org/enter_bug.cgi?comment=I%27ve%20read%20https%3A%2F%2Fwiki.mozilla.org%2FGithub%2C%20and%20need%20help%20with%20the%20following.%0D%0A%0D%0A&amp;amp;component=Github%3A%20Administration&amp;amp;form_name=enter_bug&amp;amp;product=mozilla.org&amp;amp; opening a bug] or [[#contact|email]].&lt;br /&gt;
&lt;br /&gt;
=== Reviewing owners and permissions ===&lt;br /&gt;
As an owner or repository admin you&#039;re responsible for maintaining the list of people with access to your projects.  Please be active and prudent about maintaining this list.&lt;br /&gt;
&lt;br /&gt;
=== Can I be an Owner of the Mozilla Organization? ===&lt;br /&gt;
The Owners group on github has complete administrative power and will be limited to a minimal number of people and reviewed regularly.  If a person is an owner they are expected to actively participate in the group and assist others as requested.  Owners will be added as a need arises (for example, support in another timezone) as determined by the current owners.&lt;br /&gt;
&lt;br /&gt;
All owners &#039;&#039;&#039;must&#039;&#039;&#039; have 2FA enabled for their GitHub login. (Everyone else &#039;&#039;should&#039;&#039;.)&lt;br /&gt;
&lt;br /&gt;
=== Can I be a Member of the Mozilla Organization? ===&lt;br /&gt;
With recent github enhancements (2015), we encourage the following (rough) guidelines, which strongly prefers using github teams. As a reminder, all members of the [https://github.com/mozilla/ Mozilla organization on github] agree to be bound by [https://www.mozilla.org/en-US/about/governance/policies/commit/requirements/ Mozilla&#039;s Commit Access Requirements], and should follow the intent of the [https://www.mozilla.org/en-US/about/governance/policies/commit/access-policy/ Mozilla&#039;s Commit Access Policy] as much as practical.&lt;br /&gt;
* &amp;quot;Outside Collaborator&amp;quot;: repository admins can grant outside collaborator to any github account. &amp;quot;Outside Collaborator&amp;quot; is roughly analogous to &amp;quot;Level 1a&amp;quot; access to Mozilla hosted repositories.&lt;br /&gt;
* &amp;quot;Team Member&amp;quot;: team maintainers can add github users to a team, if they are already a member of the organization. If you are not yet a member of the organization, the team maintainer should [[#contact|request your addition]] to their team, as a form of vouching. &amp;quot;Team Member&amp;quot; is roughly analogous to &amp;quot;Level 2&amp;quot; or &amp;quot;Level 3&amp;quot;, with the distinction being the content of the repositories managed by the team.&lt;br /&gt;
&lt;br /&gt;
Some people are interested in being members of the Mozilla organization on github as a way to highlight their contributions to the Mozilla Project. Thanks for your help! And there is a [https://www.mozilla.org/credits/ better place] to highlight your work. Please refer to the [https://www.mozilla.org/credits/FAQ FAQ] for that process.&lt;br /&gt;
&lt;br /&gt;
=== Should I make a separate github organization or just create a repository in an existing one? ===&lt;br /&gt;
This is a personal preference.  If you have a large enough project or organization feel free.  We suggest you use the strategies and recommendations here as a model to manage the details.&lt;br /&gt;
&lt;br /&gt;
=== Forking vs Transferring ===&lt;br /&gt;
&#039;&#039;&#039;Do not &amp;quot;fork&amp;quot; a repository into a Mozilla organization.&#039;&#039;&#039; Doing so gives &#039;&#039;every team in the org&#039;&#039; rights to it.&lt;br /&gt;
&lt;br /&gt;
If you have created a repo on your own account (for example, myuser/myrepo) and it should live under the Mozilla organization, here are the steps:&lt;br /&gt;
&lt;br /&gt;
# If you&#039;re not a member of any team, talk to an [[#contact|org admin]].&lt;br /&gt;
# Under the repo admin, transfer ownership to the Mozilla organization. If you don&#039;t see this option, return to step 1.&lt;br /&gt;
# Choose which teams should be given access. All chosen teams will have only &#039;read&#039; access at this point.&lt;br /&gt;
# Ask an [[#contact|org admin]] to grant team permissions higher than read (&#039;write&#039; and &#039;admin&#039; are the other choices). (Team maintainers do not have the ability to change a repositories status.)&lt;br /&gt;
# Fork the repo from Mozilla (mozilla/myrepo) back to your account (recreating myuser/myrepo). While the transferred repo becomes the root of the network on Github (e.g. all forks are now forks of mozilla/myrepo) other users may be pointing to your repo by URL. (Optional, github will redirect old URLs for transfers, but you probably want a local repo if you use the PR workflow.)&lt;br /&gt;
&lt;br /&gt;
=== Do I need to be an owner to create repositories? ===&lt;br /&gt;
No.  If a person has read/write access to another repository in that organization they can make more repositories in that organization. However, it&#039;s preferred that you create repositories in the context of a team.&lt;br /&gt;
&lt;br /&gt;
=== Are there requirements for when or how I should create a new team? ===&lt;br /&gt;
No.  When requirements were proposed they all seemed too rigid and time consuming.  Instead we recommend staying flexible and using good naming and documentation for projects (similar to naming CSS classes or variables).&lt;br /&gt;
&lt;br /&gt;
On large teams we recommend you separate teams for read/write and repository administration.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;other_github&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
=== Is &amp;quot;mozilla&amp;quot; the only github &amp;quot;organization&amp;quot; related to Mozilla? ===&lt;br /&gt;
No, there are plenty of Mozilla-related &amp;quot;organizations&amp;quot; on github. As a rule of thumb, initiatives that create a large number of sub-repositories will create their own &amp;quot;organization&amp;quot;. Here is a (probably incomplete) list of them:&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Organization !! Description !! Contact Owner&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/mozilla-it mozilla-it] || Mozilla IT&#039;s repositories || ?&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/bugzilla bugzilla] || Bugzilla (the product) - read-only mirror || ?&lt;br /&gt;
|- &lt;br /&gt;
| [https://github.com/drumbeat-badge-sprint drumbeat-badge-sprint] || Drumbeat Badge Lab || ?&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/hackasaurus hackasaurus] || Hackasaurus || ?&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/jetpack-labs jetpack-labs] || Jetpack Labs || ?&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/mdn mdn] || Mozilla Developer Network || {{Mozillian|groovecoder|Luke Crouch}}&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/mozbrick mozbrick] || Mozilla Brick (web components library) || ?&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/mozilla-appmaker mozilla-appmaker] || Mozilla Appmaker || ?&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/mozilla-b2g mozilla-b2g] || Mozilla Boot2Gecko / Firefox OS || ?&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/mozilla-cit mozilla-cit] || Mozilla Community Ops || {{Mozillians|tanner|Tanner Filip}} or {{Mozillians|yalam96|Yousef Alam}}&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/mozilla-comm mozilla-comm] || Calendaring and Messaging related projects || ?&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/mozilla-cordova mozilla-cordova] || Firefox OS Support for Apache Cordova || ?&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/mozilla-metrics mozilla-metrics] || Mozilla Metrics || ?&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/mozilla-raptor mozilla-raptor] || Mozilla Raptor / Firefox OS Performance || {{Mozillian|eliperelman|Eli Perelman}}, {{Mozillian|rwood|Rob Wood}}&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/mozilla-services mozilla-services] || Mozilla Services || [https://github.com/orgs/mozilla-services/people?utf8=%E2%9C%93&amp;amp;query=role%3Aowner mozilla-services owners]&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/mozilla-svcops mozilla-svcops] || Mozilla Cloud Services Ops || {{Mozillian|relud|Daniel Thornton}}&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/MozillaTW MozillaTW] || Mozilla Taiwan || ?&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/Mozilla-TWQA Mozilla-TWQA] || Mozilla Taiwan QA || ?&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/mozillahispano mozillahispano] || Mozilla Hispano || ?&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/MozillaSecurity MozillaSecurity] || Mozilla Platform Fuzzing Team master repo with many fuzzing tools under it. || ?&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/MozillaWiki MozillaWiki] || MozillaWiki (wiki.mozilla.org) || {{Mozillian|ckoehler|Christie Koehler}}, {{Mozillian|gphemsley|Gordon P. Hemsley}}&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/mozillayvr mozillayvr] || Mozilla Vancouver @MozillaYVR || {{Mozillian|bclark|Brian Clark}}, {{Mozillian|shobson|Stephanie Hobson}}&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/mozfr mozfr] || Mozilla Francophone || Pascal Chevrel https://mozillians.org/fr/u/pascalc/&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/opennews opennews] || Knight-Mozilla OpenNews || ?&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/rust-lang rust-lang] || The Rust Programming Language || {{Mozillian|aturon|Aaron Turon}}&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/servo servo] || Servo (browser engine written in Rust) || {{Mozillian|larsberg|Lars Bergstrom}}, Jack Moffitt&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/tabulapdf tabulapdf] || Tabula project (extract data from PDF files) || ?&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/webcompat webcompat] || Web Compatibility Team || {{Mozillian|miketaylr|Mike Taylor}}&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/mozilla-l10n mozilla-l10n] || Mozilla l10n-drivers team || Pascal Chevrel https://mozillians.org/fr/u/pascalc/&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/taskcluster taskcluster] || [[TaskCluster]] Team || {{Mozillian|sdeckelmann|Selena Deckelmann}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Are there other unofficial or Mozilla-related repositories hosted on Github? ===&lt;br /&gt;
Why, yes! In no particular order:&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/kinetiknz/nestegg/ https://github.com/kinetiknz/nestegg/] :  WebM demuxer&lt;br /&gt;
* [https://github.com/xiph/opus/ https://github.com/xiph/opus/] :  Modern audio compression for the internet.&lt;br /&gt;
* [https://github.com/webmproject/libvpx https://github.com/webmproject/libvpx] :  Mirror only. Please do not send pull requests.&lt;br /&gt;
* [https://github.com/campd/fxdt-adapters https://github.com/campd/fxdt-adapters] :  Firefox Developer Tools protocol adapters&lt;br /&gt;
* [https://github.com/kripken/emscripten https://github.com/kripken/emscripten] :  Emscripten: An LLVM-to-JavaScript Compiler&lt;br /&gt;
* [https://github.com/bbondy/codefirefox https://github.com/bbondy/codefirefox] :  Video and exercise based tutorial site for coding Firefox and other Mozilla related technology&lt;br /&gt;
* [https://github.com/nickdesaulniers/where-is-firefox-os https://github.com/nickdesaulniers/where-is-firefox-os] :  A map showing where in the world Firefox OS phones are being sold.&lt;br /&gt;
* [https://github.com/jdm/bugsahoy https://github.com/jdm/bugsahoy] :  A landing page to make finding relevant bugs easier for new Mozilla contributors.&lt;br /&gt;
* [https://github.com/w3c/web-platform-tests https://github.com/w3c/web-platform-tests] :  Test Suites for Web Platform specifications&lt;br /&gt;
* [https://github.com/w3c/wptserve https://github.com/w3c/wptserve] :  Web server designed for use with web-platform-tests&lt;br /&gt;
* [https://github.com/w3c/wptrunner https://github.com/w3c/wptrunner] : Cross-browser and multi-platform test runner for web-platform-tests.  Used in mozilla-central and servo.&lt;br /&gt;
* [https://github.com/w3c/testharness.js https://github.com/w3c/testharness.js] : (no description)&lt;br /&gt;
* [https://github.com/jdm/asknot https://github.com/jdm/asknot] :  Ask not what Mozilla can do for you but what you can do for Mozilla.&lt;br /&gt;
* [https://github.com/jeffbryner/MozDef MozDef]: Mozilla Defense Platform.&lt;/div&gt;</summary>
		<author><name>Rillian</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Bugmasters/Projects/Folk_Knowledge/Priority_Field&amp;diff=1125692</id>
		<title>Bugmasters/Projects/Folk Knowledge/Priority Field</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Bugmasters/Projects/Folk_Knowledge/Priority_Field&amp;diff=1125692"/>
		<updated>2016-04-01T20:50:08Z</updated>

		<summary type="html">&lt;p&gt;Rillian: /* Priority-based triage */ Media team tries to close bugs which aren&amp;#039;t actionable&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Mobile team (Fennec, iOS) essentially don&#039;t use Bugzilla&#039;s priority field.  Mobile team uses &amp;lt;tt&amp;gt;tracking-fennec&amp;lt;/tt&amp;gt; flags to track releases; we assign individuals to track tickets; and we switch the status to ASSIGNED to mean &amp;quot;work is happening&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Priority-based triage ==&lt;br /&gt;
&lt;br /&gt;
Some teams us the priority field to sort bugs.&lt;br /&gt;
&lt;br /&gt;
* P1 - Fix immediately&lt;br /&gt;
* P2 - Needs to be fixed, but not urgent&lt;br /&gt;
* P3 - Would like to fix, but waiting for resources (optional)&lt;br /&gt;
* P4 - Not used or the same as P5.&lt;br /&gt;
* P5 - A real issue, but no intent to fix. (patches usually welcome)&lt;br /&gt;
&lt;br /&gt;
Bugs without the priority field set are untriaged. Bugs that are not real issues or which go several weeks without progress toward determining an actionable cause are generally closed.&lt;br /&gt;
&lt;br /&gt;
The following teams use this workflow:&lt;br /&gt;
&lt;br /&gt;
* Media Playback&lt;br /&gt;
* Awesome Search Team&lt;/div&gt;</summary>
		<author><name>Rillian</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Bugmasters/Projects/Folk_Knowledge/Priority_Field&amp;diff=1125690</id>
		<title>Bugmasters/Projects/Folk Knowledge/Priority Field</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Bugmasters/Projects/Folk_Knowledge/Priority_Field&amp;diff=1125690"/>
		<updated>2016-04-01T20:48:14Z</updated>

		<summary type="html">&lt;p&gt;Rillian: Document priority-based triage used by Media and Search teams&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Mobile team (Fennec, iOS) essentially don&#039;t use Bugzilla&#039;s priority field.  Mobile team uses &amp;lt;tt&amp;gt;tracking-fennec&amp;lt;/tt&amp;gt; flags to track releases; we assign individuals to track tickets; and we switch the status to ASSIGNED to mean &amp;quot;work is happening&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Priority-based triage ==&lt;br /&gt;
&lt;br /&gt;
Some teams us the priority field to sort bugs.&lt;br /&gt;
&lt;br /&gt;
* P1 - Fix immediately&lt;br /&gt;
* P2 - Needs to be fixed, but not urgent&lt;br /&gt;
* P3 - Would like to fix, but waiting for resources (optional)&lt;br /&gt;
* P4 - Not used or the same as P5.&lt;br /&gt;
* P5 - A real issue, but no intent to fix. (patches usually welcome)&lt;br /&gt;
&lt;br /&gt;
Bugs without the priority field set are untriaged.&lt;br /&gt;
&lt;br /&gt;
The following teams use this workflow:&lt;br /&gt;
&lt;br /&gt;
* Media Playback&lt;br /&gt;
* Awesome Search Team&lt;/div&gt;</summary>
		<author><name>Rillian</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=MOSS/Foundational_Technology/Projects_We_Use&amp;diff=1102604</id>
		<title>MOSS/Foundational Technology/Projects We Use</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=MOSS/Foundational_Technology/Projects_We_Use&amp;diff=1102604"/>
		<updated>2015-10-26T19:09:01Z</updated>

		<summary type="html">&lt;p&gt;Rillian: Add Xiph.Org&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is an incomplete list of the free software and open source projects Mozilla relies upon. As a starting point, it lists each project along with a short statement of how we depend on it. Where practical it would also be helpful to identify a Mozillian most closely associated with our use of each project, as next steps will involve contacting each one to find out more about how we can best provide support.&lt;br /&gt;
&lt;br /&gt;
This is a work in progress - please contribute to this list.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Project !! Description !! Contact within Mozilla&lt;br /&gt;
|-&lt;br /&gt;
| [https://angularjs.org/ angular.js]           || Used by A-Team for web apps (eg Treeherder) || Member of Jonathan Griffin&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [https://httpd.apache.org Apache Server]      || Used by A-Team for web apps || Member of Jonathan Griffin&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/ansible/ansible Ansible]  || Used by IT (netops) and A-Team to manage deployments || jbarnell , GPS?&lt;br /&gt;
|-&lt;br /&gt;
| [https://babeljs.io/ BabelJS]                 || JavaScript compiler, Used by Gaia, TaskCluster team || Selena Deckelmann&lt;br /&gt;
|-&lt;br /&gt;
| [https://pypi.python.org/pypi/blessings/ Blessings] || Terminal formatting lib used by mozilla-central build process || Erik Rose&lt;br /&gt;
|-&lt;br /&gt;
| [http://getbootstrap.com/ Bootstrap] || HTML/CSS/JS framework, used by many of Mozilla&#039;s sites. || Webdev&lt;br /&gt;
|-&lt;br /&gt;
| [https://bro.org bro]                    || The Bro Network Security Monitor || Michal Purzynski&lt;br /&gt;
|-&lt;br /&gt;
| [http://buildbot.net/ BuildBot]               || The base system currently in use for release automation &#039;&#039;(due to be replaced by Task Cluster)&#039;&#039; || Chris AtLee&lt;br /&gt;
|-&lt;br /&gt;
| [http://bugzilla.org/ Bugzilla] (upstream)    || The base Bugzilla on that we customize for Mozilla&#039;s use || Glob&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.celeryproject.org/ Celery] || Distributed task queue. Used by Treeherder and others. || Member of Jonathan Griffin&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.llvm.org Clang/LLVM]           || C/C++ compiler and infrastructure || Ehsan Akhgari &lt;br /&gt;
|-&lt;br /&gt;
| [https://codemirror.net/ CodeMirror]           || Used in DevTools, [https://thimble.mozilla.org Thimble], and other online code tools || David Humphrey/Simon Wex&lt;br /&gt;
|-&lt;br /&gt;
| [https://conemu.github.io/ ConEmu] || Console emulator for Windows. Used by devs running Windows. || Ed Morley&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.debian.org/ Debian] || Used on many developer boxes || Unknown (maybe Sylvestre Ledru) or glandium&lt;br /&gt;
|-&lt;br /&gt;
| [https://discourse.org Discourse] || [https://discourse.mozilla-community.org Community], [https://discourse.webmaker.org/ Webmaker], [https://discourse.mozilla-advocacy.org/ Advocacy], et al || [[IT/Community/WG/Discourse|Community Ops]] (Yousef Alam or Tanner Filip)&lt;br /&gt;
|-&lt;br /&gt;
| [https://djangoproject.com Django]     || Backend web framework used on many of our websites, including AMO/MKT, SUMO, Input, Snippets, MDN, mozilla.org, Treeherder || Andy McKay and Jannis Leidel are (or have been) on the [https://www.djangoproject.com/foundation/ Django Software Foundation] board, Jannis is core team member&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.django-rest-framework.org Django REST framework]     || API framework. Used by various Mozilla sites including MDN, Firefox marketplace, mozilla.org, support.mozilla.com. || Andy McKay and Jannis Leidel&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/docker/docker Docker]     || Used by release engineering for Linux build and test containers and by ateam for managing test and production services. Used by many Mozilla websites as well. (Plus docker-compose and docker machine) || Member of Selena Deckelmann&#039;s team  &lt;br /&gt;
|-&lt;br /&gt;
| [https://www.elastic.co/products/elasticsearch elasticsearch] || Search engine for various web sites and analytics || Erik Rose&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/ether/etherpad-lite Etherpad]     || Used for meeting notes, etc || JP Schneider&lt;br /&gt;
|-&lt;br /&gt;
| [https://flake8.readthedocs.org/ flake8] || Wrapper around Python linters. Used by Treeherder and others. || Member of Jonathan Griffin&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [http://flask.pocoo.org/ Flask]               || Python web framework || Erik Rose&lt;br /&gt;
|-&lt;br /&gt;
| [https://fortawesome.github.io/Font-Awesome/ Font Awesome] || Font and CSS toolkit, used by many of Mozilla&#039;s sites. || Webdev&lt;br /&gt;
|-&lt;br /&gt;
| [http://gcc.gnu.org GCC]                      || C/C++ compiler and infrastructure || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| [https://git-scm.com/ Git]                    || Version control system - https://git.mozilla.org || Unknown &lt;br /&gt;
|-&lt;br /&gt;
| [http://gunicorn.org/ gunicorn] || Python WSGI HTTP Server. Used by Treeherder, Socorro, Pontoon. || Webdev&lt;br /&gt;
|-&lt;br /&gt;
| [https://theintern.github.io/intern/ Intern]  || Intern is a complete test system for JavaScript designed to help you write and run consistent, high-quality test cases for your JavaScript libraries and applications.  || jrgm/vladikoff&lt;br /&gt;
|-&lt;br /&gt;
| [http://canonware.com/jemalloc/ jemalloc]     || Memory allocation library || We can ask glandium&lt;br /&gt;
|-&lt;br /&gt;
| [http://jenkins-ci.org/ Jenkins CI]                    || Continuous integration system used by WebQA and EE || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| [https://jquery.com/ jQuery] || JavaScript library, used by many of Mozilla&#039;s sites. || Webdev&lt;br /&gt;
|-&lt;br /&gt;
| [http://kombu.readthedocs.org/ Kombu] || Messaging library for Python. Used by Treeherder and others. || Member of Jonathan Griffin&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| libjpeg-turbo                                 || JPEG decoding library || Jeff Muizelaar &lt;br /&gt;
|-&lt;br /&gt;
| [http://www.libpng.org/pub/png/libpng.html libpng] || PNG decoding library || Jeff Muizelaar &lt;br /&gt;
|-&lt;br /&gt;
| libvpx (Google)                               || Library for support of Google’s VP* family of codecs || Tim Terriberry &lt;br /&gt;
|-&lt;br /&gt;
| Linux                                         || OS kernel used in Firefox OS || Unknown &lt;br /&gt;
|-&lt;br /&gt;
| [https://lodash.com/ lodash] || JavaScript utility library, used by many of Mozilla&#039;s sites. || Webdev&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.list.org/ Mailman]     || [https://mail.mozilla.org/listinfo Mailing lists] || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.mediawiki.org/wiki/MediaWiki MediaWiki]     || You are reading this on a wiki || Sheeri Cabral&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.mercurial-scm.org/ Mercurial]    || Version control system and source code management || GPS &lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/kumar303/mohawk Mohawk] ||  Python library for Hawk HTTP authorization. Used by Treeherder and others. || Member of Jonathan Griffin&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [http://mozdef.com mozdef]                    || Security event monitoring and incident response || Jeff Bryner&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.mingw.org/wiki/msys msys]         || Used to build Firefox on Windows. Note: It&#039;s likely best we support the newer MSYS2 project instead: https://github.com/msys2 || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.mysql.com/ MySQL]                || Open source relational DB used by many developers, including AMO, SUMO, Input, bugzilla, releng, adminstered by IT || Sheeri Cabral&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.nagios.org/ Nagios]              || IT management system. Used for notifications of system failures || Sheeri Cabral, Ashish V.&lt;br /&gt;
|-&lt;br /&gt;
| [http://netsniff-ng.org/ netsniff-ng]                    || Linux networking toolkit || Michal Purzynski&lt;br /&gt;
|-&lt;br /&gt;
| nICEr                                         || Library for traversing firewalls || Unknown &lt;br /&gt;
|-&lt;br /&gt;
| [https://nixos.org NixOS]                     || Reproducible Linux distribution. Used by some developers and for running benchmarks on Firefox OS for AreWeFastYet || Nicolas B. Pierron&lt;br /&gt;
|-&lt;br /&gt;
| [https://nodejs.org Node.js]                  || JavaScript runtime for server side applications, command line utilities || Nick Desaulniers&lt;br /&gt;
|-&lt;br /&gt;
| nrappkit                                      || Toolkit for building standalone applications || Unknown &lt;br /&gt;
|-&lt;br /&gt;
| OpenH264 (Cisco)                              || H.264 video library || Unknown &lt;br /&gt;
|-&lt;br /&gt;
| [http://openresty.org OpenResty]              || a fast web app server by extending nginx, used by cloudops || Benson Wong (mostlygeek)&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.openssh.com/ OpenSSH]                 || Remote server management, secure transport for Git and Mercurial || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| [http://openssl.org/ OpenSSL]                 || Cryptograpahy and TLS Toolkit || Nick Desaulniers&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.owasp.org/index.php/ZAP OWASP ZAP]                 || Web security testing tool used by security and QA teams || Simon Bennetts (psiinon)&lt;br /&gt;
|-&lt;br /&gt;
| [https://pypi.python.org/pypi/parsimonious/ Parsimonious] || Parsing lib used by DXR and a few other sites (I think) || Erik Rose&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/mozilla/pdf.js PDF.js]                  || Used as the PDF Viewer in Firefox and Firefox OS || Brendan Dahl, Yury Delendik&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/PyCQA/pep8 pep8] || Python linter. Used by Treeherder and others. || Member of Jonathan Griffin&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.perl.org/ Perl]                  || Used by Bugzilla || Member of Jonathan Griffin&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [https://phalconphp.com/ Phalcon PHP Framework]                  || Phalcon is an open source web framework delivered as a C extension for the PHP language providing high performance and lower resource consumption. || Andres Gutierrez is one of the [https://phalconphp.com/en/team core developers] of Phalcon and its inspiration.&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/pypa/pip pip] || Python package tool. Used by all Python projects. || Erik Rose and Jannis Leidel, Jannis is core team member ([https://www.pypa.io/ PyPA])&lt;br /&gt;
|-&lt;br /&gt;
| [http://cmusphinx.sourceforge.net/ Pocketsphinx]       ||  Speech recognition toolkit embedded into Firefox OS|| André Natal&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.postgresql.org/ PostgreSQL]       || Open source relational DB used by many developers, adminstered by IT || Selena Deckelmann&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/puppetlabs/puppet Puppet] || System administration tool || Member of Amy Rich&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/pyflakes/pyflakes pyflakes] || Python linter. Used by Treeherder and others. || Member of Jonathan Griffin&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [http://pytest.org/ pytest] || Python testing tool. Used by Treeherder and others. || Member of Jonathan Griffin&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| Python                                        || Scripting language || [http://python.org/psf/ Python Software Foundation], Selena Deckelmann is a former board member&lt;br /&gt;
|-&lt;br /&gt;
| [https://pypi.python.org/pypi/pyelasticsearch/ pyelasticsearch] || Python client for elasticsearch || Erik Rose&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.rabbitmq.com/ RabbitMQ]          || Distributed Queue, used by Socorro, Pulse (all our publicly available build/test/commit information flows through this), Treeherder || Selena Deckelmann&lt;br /&gt;
|-&lt;br /&gt;
| [https://readthedocs.org/ Read the Docs]   || Hosted automatically-built documentation, used by Cloud Services and a wide variety of mozilla Github projects || Ben Bangert, Jannis Leidel, Gervase Markham&lt;br /&gt;
|-&lt;br /&gt;
| [http://python-requests.org/ Requests] || &amp;quot;Python HTTP Requests for Humans&amp;quot;. Used by many many Mozilla Python projects. || Member of Jonathan Griffin&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.reviewboard.org/ Review Board]   || The base of MozReview, the new review tool being developed to replace Splinter || Steven MacLeod, Mike Conley&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.seleniumhq.org/ Selenium]         || Browser test driver || stephend/AutomatedTester or jrgm/vladikoff&lt;br /&gt;
|-&lt;br /&gt;
| [https://slimerjs.org/ SlimerJS]              || Scriptable browser, based on Gecko, used for functional tests in some few Mozilla projects  ( [[PluotSorbet]], some FxOS apps ? and others ?) || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.sqlite.org/ SQLite]              || File-based database || khuey&lt;br /&gt;
|-&lt;br /&gt;
| [https://subversion.apache.org/ Subversion]   || https://svn.mozilla.org &#039;&#039;(Planning to decommission in near future)&#039;&#039; || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| [http://http://suricata-ids.org/ suricata]                    || IDS / IPS / NSM engine || Michal Purzynski&lt;br /&gt;
|-&lt;br /&gt;
| [https://travis-ci.org/ Travis]               || Continuous integration system used by several teams (eg Treeherder) || Jonathan Griffin&#039;s team &lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/mitchellh/vagrant Vagrant]|| Build and distribute dev envs, used by Treeherder and others || Member of Jonathan Griffin&#039;s team&lt;br /&gt;
|-&lt;br /&gt;
| [http://valgrind.org/ Valgrind]               || Memory error detection and profiling of C and C++ code || jseward, njn&lt;br /&gt;
|-&lt;br /&gt;
| [http://www.webrtc.org WebRTC.org]            || Components to support real-time communication in browsers and mobile applications || Randell Jesup &lt;br /&gt;
|-&lt;br /&gt;
| [http://www.wordpress.org WordPress]          || Powers our blogs, blog.mozilla.org || Craig Cook &lt;br /&gt;
|-&lt;br /&gt;
| [https://xiph.org Xiph.Org]                   || Media codecs ship in Firefox, encoding tools || Ralph Giles&lt;br /&gt;
&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Rillian</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Mobile/Fennec/Android/GDB&amp;diff=1031622</id>
		<title>Mobile/Fennec/Android/GDB</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Mobile/Fennec/Android/GDB&amp;diff=1031622"/>
		<updated>2014-11-07T23:47:12Z</updated>

		<summary type="html">&lt;p&gt;Rillian: Switch a few more links to https&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;JimDB is a fork of GDB used for simplifying Fennec development. It consists of two parts:&lt;br /&gt;
&lt;br /&gt;
* Binaries - the GDB/GDBServer binaries that include Android-specific patches (https://github.com/darchons/android-gdb)&lt;br /&gt;
* Scripts - the Python scripts that run under GDB to simplify common tasks (https://github.com/darchons/android-gdbutils)&lt;br /&gt;
&lt;br /&gt;
Use #mobile on IRC for support.&lt;br /&gt;
&lt;br /&gt;
= Getting started =&lt;br /&gt;
&lt;br /&gt;
== Using pre-built binaries ==&lt;br /&gt;
&lt;br /&gt;
=== Instructions ===&lt;br /&gt;
&lt;br /&gt;
# Download the latest pre-built binaries for your platform from [https://people.mozilla.org/~nchen/jimdb this directory] (use &#039;jimdb-arm&#039; for ARM devices and &#039;jimdb-x86&#039; for x86 devices)&lt;br /&gt;
# Extract to a user-writable directory&lt;br /&gt;
# Run &#039;git pull&#039; from inside the utils/ directory to get the latest scripts&lt;br /&gt;
# Launch bin/gdb to start using JimDB!&lt;br /&gt;
# OPTIONAL: For easier access, you can create a symlink to jimdb under, e.g., /usr/bin&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
&lt;br /&gt;
For ARM devices on Linux,&lt;br /&gt;
 cd $HOME&lt;br /&gt;
 wget https://people.mozilla.org/~nchen/jimdb/jimdb-arm-linux_x64.tar.bz2 # step 1&lt;br /&gt;
 tar -xf jimdb-arm-linux_x64.tar.bz2 # step 2&lt;br /&gt;
 cd jimdb/utils # step 3&lt;br /&gt;
 git pull&lt;br /&gt;
 ../bin/gdb # step 4&lt;br /&gt;
 sudo ln -s $HOME/jimdb/bin/gdb /usr/bin/jimdb # step 5&lt;br /&gt;
&lt;br /&gt;
== Custom-building ==&lt;br /&gt;
&lt;br /&gt;
=== Step 1. Compiling the binaries ===&lt;br /&gt;
&lt;br /&gt;
There are two things to build here: gdb and gdbserver&lt;br /&gt;
&lt;br /&gt;
==== Linux ====&lt;br /&gt;
&lt;br /&gt;
===== GDB =====&lt;br /&gt;
&lt;br /&gt;
# Clone [https://github.com/darchons/android-gdb the GitHub repo] (do not use the Zip archive, as the build system will try to obtain a git changeset id)&lt;br /&gt;
# You may need to install additional packages in order to build GDB. For example,&amp;lt;pre&amp;gt;sudo apt-get build-dep gdb&amp;lt;/pre&amp;gt;&lt;br /&gt;
# Run configure inside the source directory&amp;lt;pre&amp;gt;# ARM:&amp;amp;#10;./configure --target=arm-linux-android --with-python=yes --prefix=/nonexistent \&amp;amp;#10;  --with-gdb-datadir=/nonexistent/utils --with-system-gdbinit=/nonexistent/utils/gdbinit&amp;amp;#10;# x86:&amp;amp;#10;./configure --target=i686-pc-linux-android --with-python=yes --prefix=/nonexistent \&amp;amp;#10;  --with-gdb-datadir=/nonexistent/utils --with-system-gdbinit=/nonexistent/utils/gdbinit&amp;lt;/pre&amp;gt;&lt;br /&gt;
# Run make &amp;lt;pre&amp;gt;make -j8&amp;lt;/pre&amp;gt;&lt;br /&gt;
# The compiled binary will be at gdb/gdb&lt;br /&gt;
If you see an error like:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
../../../../bfd/doc/bfd.texinfo:325: unknown command `colophon&#039;&lt;br /&gt;
../../../../bfd/doc/bfd.texinfo:336: unknown command `cygnus&#039;&lt;br /&gt;
Makefile:421: recipe for target &#039;bfd.info&#039; failed&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
you can fix this by running:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sed -i -e &#039;s/@colophon/@@colophon/&#039; -e &#039;s/doc@cygnus.com/doc@@cygnus.com/&#039; bfd/doc/bfd.texinfo&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
or by checking out a more recent branch (this bug is in the 7_5 branch).&lt;br /&gt;
&lt;br /&gt;
===== GDBServer =====&lt;br /&gt;
&lt;br /&gt;
Consider using the pre-built gdbserver binary from the &amp;quot;Using pre-built binaries&amp;quot; section above; gdbserver is not specific to your platform. Otherwise,&lt;br /&gt;
# Use the source directory from above&lt;br /&gt;
# Make sure you have a copy of the Android NDK&lt;br /&gt;
# Run configure inside the &#039;&#039;gdb/gdbserver directory&#039;&#039; (following is for NDK r8d)&amp;lt;pre&amp;gt;export NDK=/PATH/TO/NDK&amp;amp;#10;# ARM:&amp;amp;#10;export PATH=$PATH:$NDK/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86/bin&amp;amp;#10;./configure --host=arm-linux-androideabi --with-sysroot=$NDK/platforms/android-9/arch-arm&amp;amp;#10;# x86:&amp;amp;#10;export PATH=$PATH:$NDK/toolchains/x86-4.6/prebuilt/linux-x86/bin&amp;amp;#10;./configure --host=i686-linux-android --with-sysroot=$NDK/platforms/android-9/arch-x86&amp;lt;/pre&amp;gt;&lt;br /&gt;
# Run make &amp;lt;pre&amp;gt;make -j8&amp;lt;/pre&amp;gt;&lt;br /&gt;
# The compiled binary will be at gdbserver&lt;br /&gt;
&lt;br /&gt;
==== Mac ====&lt;br /&gt;
&lt;br /&gt;
===== GDB =====&lt;br /&gt;
&lt;br /&gt;
# Get a zip of the source from [https://github.com/darchons/android-gdb the GitHub repo] (Get the zip because cloning takes a lot longer)&lt;br /&gt;
# Extract the zip&lt;br /&gt;
# You may need to install additional packages in order to build GDB. For example,&amp;lt;pre&amp;gt;port install bison flex ncurses texinfo python27&amp;lt;/pre&amp;gt;&lt;br /&gt;
# Run configure inside the source directory&amp;lt;pre&amp;gt;# ARM:&amp;amp;#10;./configure --target=arm-linux-android --with-python=yes --prefix=/nonexistent \&amp;amp;#10;  --with-gdb-datadir=/nonexistent/utils --with-system-gdbinit=/nonexistent/utils/gdbinit&amp;amp;#10;# x86:&amp;amp;#10;./configure --target=i686-pc-linux-android --with-python=yes --prefix=/nonexistent \&amp;amp;#10;  --with-gdb-datadir=/nonexistent/utils --with-system-gdbinit=/nonexistent/utils/gdbinit&amp;lt;/pre&amp;gt;&lt;br /&gt;
# Run make &amp;lt;pre&amp;gt;make -j8&amp;lt;/pre&amp;gt;&lt;br /&gt;
# The compiled binary will be at gdb/gdb&lt;br /&gt;
&lt;br /&gt;
===== GDBServer =====&lt;br /&gt;
&lt;br /&gt;
Consider using the pre-built gdbserver binary from the &amp;quot;Using pre-built binaries&amp;quot; section above; gdbserver is not specific to your platform. Otherwise,&lt;br /&gt;
# Use the source directory from above&lt;br /&gt;
# Make sure you have a copy of the Android NDK&lt;br /&gt;
# Run configure inside the &#039;&#039;gdb/gdbserver directory&#039;&#039; (following is for NDK r8d)&amp;lt;pre&amp;gt;export NDK=/PATH/TO/NDK&amp;amp;#10;# ARM:&amp;amp;#10;export PATH=$PATH:$NDK/toolchains/arm-linux-androideabi-4.6/prebuilt/darwin-x86/bin&amp;amp;#10;./configure --host=arm-linux-androideabi --with-sysroot=$NDK/platforms/android-9/arch-arm&amp;amp;#10;# x86:&amp;amp;#10;export PATH=$PATH:$NDK/toolchains/x86-4.6/prebuilt/darwin-x86/bin&amp;amp;#10;./configure --host=i686-linux-android --with-sysroot=$NDK/platforms/android-9/arch-x86&amp;lt;/pre&amp;gt;&lt;br /&gt;
# Run make &amp;lt;pre&amp;gt;make -j8&amp;lt;/pre&amp;gt;&lt;br /&gt;
# The compiled binary will be at gdb/gdbserver/gdbserver&lt;br /&gt;
&lt;br /&gt;
=== Step 2. Creating JimDB directory ===&lt;br /&gt;
&lt;br /&gt;
To get the most out of JimDB, in addition to the binaries, you need the Python scripts. But first, the scripts assume you have the following JimDB directory structure,&lt;br /&gt;
&lt;br /&gt;
 ./bin/&lt;br /&gt;
     gdb&lt;br /&gt;
     gdbserver&lt;br /&gt;
 ./utils/&lt;br /&gt;
     gdbinit&lt;br /&gt;
     python/&lt;br /&gt;
&lt;br /&gt;
Therefore, you&#039;d need to,&lt;br /&gt;
# Make a JimDB directory&lt;br /&gt;
# Copy gdb and gdbserver from steps above to bin/&lt;br /&gt;
# Clone the Python scripts to utils/&lt;br /&gt;
# Run bin/gdb&lt;br /&gt;
&lt;br /&gt;
For example,&lt;br /&gt;
 mkdir -p jimdb/bin # step 1&lt;br /&gt;
 cp /PATH/TO/SOURCE/gdb/gdb jimdb/bin # step 2&lt;br /&gt;
 cp /PATH/TO/SOURCE/gdb/gdbserver/gdbserver jimdb/bin&lt;br /&gt;
 git clone git://github.com/darchons/android-gdbutils.git jimdb/utils # step 3&lt;br /&gt;
 jimdb/bin/gdb # step 4&lt;br /&gt;
&lt;br /&gt;
= Using JimDB =&lt;br /&gt;
&lt;br /&gt;
== First run ==&lt;br /&gt;
&lt;br /&gt;
In order to debug Fennec, JimDB needs a copy of your system libraries. When you try to debug Fennec on a particular device for the first time, JimDB will download the libraries from your device. This may take some time but will only need to run once. You may need to restart JimDB in order for debug symbols to work.&lt;br /&gt;
&lt;br /&gt;
== Configuring JimDB ==&lt;br /&gt;
&lt;br /&gt;
utils/gdbinit is the GDB command file that JimDB runs at launch. Open it in your favorite text editor to see configurable settings for JimDB.&lt;br /&gt;
&lt;br /&gt;
utils/gdbinit also loads utils/gdbinit.local. Because utils/gdbinit can change frequently across updates, it&#039;s recommended to copy your custom settings to utils/gdbinit.local, so that updates do not override your settings.&lt;br /&gt;
&lt;br /&gt;
For example, to configure the feninit.default.objdir option, paste the following line anywhere inside utils/gdbinit.local,&lt;br /&gt;
 python feninit.default.objdir = &#039;/home/user/mozilla/central/objdir-android&#039;&lt;br /&gt;
&lt;br /&gt;
== FenInit ==&lt;br /&gt;
&lt;br /&gt;
FenInit is the Python script that simplifies launching Fennec on your device and setting up a debug environment. When JimDB starts, FenInit runs automatically and presents several options,&lt;br /&gt;
&lt;br /&gt;
# Debug Fennec (default)&lt;br /&gt;
# Debug Fennec with env vars and args&lt;br /&gt;
# Debug using jdb&lt;br /&gt;
# Debug content Mochitest&lt;br /&gt;
# Debug compiled-code unit test&lt;br /&gt;
&lt;br /&gt;
[[File:Jimdb-prompt.png]]&lt;br /&gt;
&lt;br /&gt;
=== Debug Fennec ===&lt;br /&gt;
&lt;br /&gt;
This is the default option. Once you choose an object directory to use, the script will automatically launch Fennec, and run GDBServer to attach to Fennec.&lt;br /&gt;
&lt;br /&gt;
The script tries to scan your user directory for object directories. For more control, see the [[#feninit.default.objdir|Configuration section]] on how to specify default object directories or where to scan for object directories.&lt;br /&gt;
&lt;br /&gt;
=== Debug Fennec with env vars and args ===&lt;br /&gt;
&lt;br /&gt;
This option gives you the additional ability to specify environment variables and arguments when launching Fennec. See the [[#feninit.default.env|Configuration section]] on how to specify additional default environment variables and arguments.&lt;br /&gt;
&lt;br /&gt;
=== Debug using jdb ===&lt;br /&gt;
&lt;br /&gt;
This option will let you use the Java debugger (jdb) to debug the native Java portion of Fennec. This is the default option if you already have a previous JimDB debugging session running.&lt;br /&gt;
&lt;br /&gt;
JDB support is experimental. It is able to at least set breakpoints, show source code, and examine objects.&lt;br /&gt;
&lt;br /&gt;
=== Debug content Mochitest ===&lt;br /&gt;
&lt;br /&gt;
This option will let you debug a regular Mochitest. Make sure Fennec is compiled with the &#039;--enable-tests&#039; option in the mozconfig file. Because running Mochitests require a copy of the XUL Runtime Environment (XRE), the script will offer to automatically download a copy of XRE for you, as well as launching the test harness. You can specify a file or a directory to test, or set TEST_PATH. Environment variables and arguments to the test harness are also supported.&lt;br /&gt;
&lt;br /&gt;
=== Debug compiled-code unit test ===&lt;br /&gt;
&lt;br /&gt;
This option will let you debug a C++ test. Environment variables and arguments are supported.&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
==== feninit.default.objdir ====&lt;br /&gt;
* Set feninit.default.objdir to the default object directory. Note that once it is set, the script will not prompt you to choose an object directory.&lt;br /&gt;
* Alternatively, if your object directories are called &#039;obj*&#039; under your source directory, you can set feninit.default.objdir to the source directory itself. The script will scan the source directory and list all the object directories that it found.&lt;br /&gt;
* Note that there have been problems in the past with using ~ and $HOME in the setting, so use absolute path for best results.&lt;br /&gt;
* PRO-TIP: Put the following code block inside gdbinit.local to always use the current directory as the object directory,&lt;br /&gt;
 python&lt;br /&gt;
 import os&lt;br /&gt;
 feninit.default.objdir = os.getcwd()&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
==== feninit.default.srcroot ====&lt;br /&gt;
* Unlike the previous setting, feninit.default.srcroot specifies the directory containing all the source directories. This is convenient if you have &#039;src/mozilla-central&#039;, &#039;src/mozilla-inbound&#039;, &#039;src/mozilla-aurora&#039;, etc. In that case, you can set feninit.default.srcroot to &#039;src&#039; and all the source directories will be scanned for object directories.&lt;br /&gt;
* Again, use absolute path for best results.&lt;br /&gt;
==== feninit.default.no_launch ====&lt;br /&gt;
* This settings is meant for B2G, and may not be useful for Fennec debugging.&lt;br /&gt;
==== feninit.default.gdbserver_port ====&lt;br /&gt;
* To debug Fennec on your device, GDB on your computer needs to talk to GDBServer on your device through a TCP port forwarded to your device through ADB.&lt;br /&gt;
* Normally, JimDB will use a random port. However, you can pick a specific port to use. This is useful in certain situations such as inside an SSH session. See [http://www.jnchen.com/blog/2012/11/tunnelling-adb this blog post].&lt;br /&gt;
==== feninit.default.jdwp_port ====&lt;br /&gt;
* Similar to feninit.default.gdbserver_port, except for using JDB for debugging.&lt;br /&gt;
==== feninit.default.env ====&lt;br /&gt;
* Specify the default environment variables to use when launching Fennec. Only used for the &amp;quot;Debug Fennec&amp;quot; options.&lt;br /&gt;
==== feninit.default.args ====&lt;br /&gt;
* Specify the default arguments to use when launching Fennec. Only used for the &amp;quot;Debug Fennec&amp;quot; options.&lt;br /&gt;
==== feninit.default.cpp_env ====&lt;br /&gt;
* Similar to [[#feninit.default.env|feninit.default.env]], except only used for the &amp;quot;Debug compiled-code unit test&amp;quot; option.&lt;br /&gt;
==== feninit.default.mochi_env ====&lt;br /&gt;
* Similar to [[#feninit.default.env|feninit.default.env]], except only used for the &amp;quot;Debug content Mochitest&amp;quot; option.&lt;br /&gt;
==== feninit.default.mochi_args ====&lt;br /&gt;
* Specify the default arguments to use when debugging Mochitest. Only used for the &amp;quot;Debug content Mochitest&amp;quot; option.&lt;br /&gt;
* Note that Mochitest arguments are arguments to the test harness (e.g. --remote-webserver), and not arguments to Fennec itself.&lt;br /&gt;
==== feninit.default.mochi_xre ====&lt;br /&gt;
* Specify the XRE directory to use, instead of letting the script download and manage an XRE copy.&lt;br /&gt;
==== feninit.default.mochi_harness ====&lt;br /&gt;
* Specify the directory containing the harness itself, i.e. &amp;quot;runtestsremote.py&amp;quot;. Not needed normally.&lt;br /&gt;
==== feninit.default.mochi_xre_url ====&lt;br /&gt;
* Specify the directory on [https://ftp.mozilla.org ftp.mozilla.org] to use for downloading XRE. Not used if feninit.default.mochi_xre is specified.&lt;br /&gt;
==== feninit.default.mochi_xre_update ====&lt;br /&gt;
* Specify the XRE check for updates interval. Only used if the script is managing the XRE copy, and not used if feninit.default.mochi_xre_update is specified.&lt;br /&gt;
&lt;br /&gt;
== GDB commands specific to JimDB ==&lt;br /&gt;
=== set delay-add-remote-solibs ===&lt;br /&gt;
 gdb&amp;gt; set delay-add-remote-solibs &amp;lt;0|1&amp;gt;&lt;br /&gt;
Default setting is 0. Set delay-add-remote-solibs to 1 to delay loading symbols when shared libraries are loaded. This may improve the set up time. However, you may need to use the &amp;quot;sharedlibrary&amp;quot; command to manually load symbols before using breakpoints.&lt;br /&gt;
=== monitor set ignore-ondemand ===&lt;br /&gt;
 gdb&amp;gt; monitor set ignore-ondemand &amp;lt;0|1&amp;gt;&lt;br /&gt;
Default setting is 1. Set ignore-ondemand to 0 to not ignore segmentation faults generated by on-demand decompression. This setting may be needed to debug specific segmentation faults that are inadvertently being ignored. This command can only be run after attaching to the target, so it cannot be specified in gdbinit.local.&lt;br /&gt;
&lt;br /&gt;
= FAQ =&lt;br /&gt;
&lt;br /&gt;
=== What is moz-gdb? ===&lt;br /&gt;
* moz-gdb was a synonym for JimDB, but it&#039;s no longer used, to avoid confusion&lt;br /&gt;
&lt;br /&gt;
=== &amp;quot;configure: error: failure running python-config&amp;quot; when compiling GDB ===&lt;br /&gt;
* python may point to python3 on your machine. You need to specify where python2 is by using, for example, --with-python=python2 in your configure line&lt;br /&gt;
&lt;br /&gt;
=== &amp;quot;error while loading shared libraries: libtinfo.so.5&amp;quot; on Linux ===&lt;br /&gt;
* You may need to create a libtinfo.so.5 symlink to libncurses.so.5. For example,&lt;br /&gt;
 sudo ln -s libncurses.so.5 /usr/lib/libtinfo.so.5&lt;br /&gt;
&lt;br /&gt;
=== &amp;quot;Segmentation fault: 11&amp;quot; or &amp;quot;Illegal instruction: 4&amp;quot; on Mac OS X ===&lt;br /&gt;
* This may be due to incompatible OS X SDK versions. You should build your own JimDB binary to avoid the issue.&lt;br /&gt;
&lt;br /&gt;
=== &amp;quot;cannot locate symbol &amp;quot;__exidx_end&amp;quot;&amp;quot; when starting to debug ===&lt;br /&gt;
* If you&#039;re using pre-built binaries, you need to update to a newer version of JimDB&lt;br /&gt;
* If you&#039;re using custom-built binaries, you need to recompile gdbserver using a newer version of the NDK&lt;br /&gt;
&lt;br /&gt;
=== &amp;quot;No module named printing&amp;quot; when debugging Fennec with JimDB ===&lt;br /&gt;
* The JimDB Python scripts lack several scripts included in regular GDB packages. To fix that, simply copy your local copy of these scripts to the JimDB utils/python directory. For example, on a typical Linux system, run&lt;br /&gt;
 cp -r /usr/share/gdb/python/gdb $jimdb/utils/python/&lt;br /&gt;
* If you don&#039;t have these files, they are available [https://people.mozilla.org/~nchen/jimdb/gdb-python-lib.tar.bz2 here]; just extract it under $jimdb/utils/python/&lt;br /&gt;
&lt;br /&gt;
=== Random segmentation faults when debugging Fennec ===&lt;br /&gt;
* GDB can catch segmentation faults generated by on-demand decompression; just use &amp;quot;continue&amp;quot; to continue execution.&lt;br /&gt;
* Alternatively, specify the &amp;quot;MOZ_LINKER_ONDEMAND=0&amp;quot; environment variable when launching Fennec using Option 2. You can also put the option inside jimdb/utils/gdbinit.local.&lt;br /&gt;
&lt;br /&gt;
=== GDB crashed and Fennec is stuck. Halp!! ===&lt;br /&gt;
* GDBServer may still be attached to Fennec but is unable to communicate with GDB; try killing GDBServer&lt;br /&gt;
 adb shell run-as org.mozilla.fennec_$USER kill `adb shell ps | grep gdb | awk &#039;{print $2}&#039;`&lt;br /&gt;
&lt;br /&gt;
=== &amp;quot;make: `[path]/mochitest-remote&#039; is up to date.&amp;quot; while trying to run Mochitests ===&lt;br /&gt;
* Delete the mochitest-remote file.&lt;br /&gt;
&lt;br /&gt;
=== &amp;quot;failed to run gdbserver&amp;quot; === &lt;br /&gt;
&lt;br /&gt;
    &amp;quot;gdbserver&amp;quot; output:&lt;br /&gt;
     /system/bin/sh: /data/local/tmp/gdbserver: not executable: magic 7F45&lt;br /&gt;
    &amp;quot;run-as&amp;quot; output:&lt;br /&gt;
     /data/local/tmp/gdbserver[1]: syntax error: &#039;(&#039; unexpected&lt;br /&gt;
    &amp;quot;su -c&amp;quot; output:&lt;br /&gt;
     /system/bin/sh: su: not found&lt;br /&gt;
    [path]/jimdb-x86/bin/../utils/gdbinit:136: Error in sourced command file:&lt;br /&gt;
    failed to run gdbserver&lt;br /&gt;
&lt;br /&gt;
You are probably trying to run the x86 version on an ARM device. Download the ARM version of JimDB instead.&lt;br /&gt;
&lt;br /&gt;
=== JimDB sucks! Halp!! ===&lt;br /&gt;
* Come on #mobile on IRC&lt;br /&gt;
* Or file a bug under Firefox for Android, JimDB component&lt;br /&gt;
&lt;br /&gt;
=== JimDB is awesome now!! Can I buy you a $beverage? ===&lt;br /&gt;
Yes! See also {{bug|800000}}&lt;/div&gt;</summary>
		<author><name>Rillian</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Mobile/Fennec/Android/GDB&amp;diff=1031619</id>
		<title>Mobile/Fennec/Android/GDB</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Mobile/Fennec/Android/GDB&amp;diff=1031619"/>
		<updated>2014-11-07T23:45:50Z</updated>

		<summary type="html">&lt;p&gt;Rillian: /* Instructions */ https another people link&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;JimDB is a fork of GDB used for simplifying Fennec development. It consists of two parts:&lt;br /&gt;
&lt;br /&gt;
* Binaries - the GDB/GDBServer binaries that include Android-specific patches (https://github.com/darchons/android-gdb)&lt;br /&gt;
* Scripts - the Python scripts that run under GDB to simplify common tasks (https://github.com/darchons/android-gdbutils)&lt;br /&gt;
&lt;br /&gt;
Use #mobile on IRC for support.&lt;br /&gt;
&lt;br /&gt;
= Getting started =&lt;br /&gt;
&lt;br /&gt;
== Using pre-built binaries ==&lt;br /&gt;
&lt;br /&gt;
=== Instructions ===&lt;br /&gt;
&lt;br /&gt;
# Download the latest pre-built binaries for your platform from [https://people.mozilla.org/~nchen/jimdb this directory] (use &#039;jimdb-arm&#039; for ARM devices and &#039;jimdb-x86&#039; for x86 devices)&lt;br /&gt;
# Extract to a user-writable directory&lt;br /&gt;
# Run &#039;git pull&#039; from inside the utils/ directory to get the latest scripts&lt;br /&gt;
# Launch bin/gdb to start using JimDB!&lt;br /&gt;
# OPTIONAL: For easier access, you can create a symlink to jimdb under, e.g., /usr/bin&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
&lt;br /&gt;
For ARM devices on Linux,&lt;br /&gt;
 cd $HOME&lt;br /&gt;
 wget https://people.mozilla.org/~nchen/jimdb/jimdb-arm-linux_x64.tar.bz2 # step 1&lt;br /&gt;
 tar -xf jimdb-arm-linux_x64.tar.bz2 # step 2&lt;br /&gt;
 cd jimdb/utils # step 3&lt;br /&gt;
 git pull&lt;br /&gt;
 ../bin/gdb # step 4&lt;br /&gt;
 sudo ln -s $HOME/jimdb/bin/gdb /usr/bin/jimdb # step 5&lt;br /&gt;
&lt;br /&gt;
== Custom-building ==&lt;br /&gt;
&lt;br /&gt;
=== Step 1. Compiling the binaries ===&lt;br /&gt;
&lt;br /&gt;
There are two things to build here: gdb and gdbserver&lt;br /&gt;
&lt;br /&gt;
==== Linux ====&lt;br /&gt;
&lt;br /&gt;
===== GDB =====&lt;br /&gt;
&lt;br /&gt;
# Clone [https://github.com/darchons/android-gdb the GitHub repo] (do not use the Zip archive, as the build system will try to obtain a git changeset id)&lt;br /&gt;
# You may need to install additional packages in order to build GDB. For example,&amp;lt;pre&amp;gt;sudo apt-get build-dep gdb&amp;lt;/pre&amp;gt;&lt;br /&gt;
# Run configure inside the source directory&amp;lt;pre&amp;gt;# ARM:&amp;amp;#10;./configure --target=arm-linux-android --with-python=yes --prefix=/nonexistent \&amp;amp;#10;  --with-gdb-datadir=/nonexistent/utils --with-system-gdbinit=/nonexistent/utils/gdbinit&amp;amp;#10;# x86:&amp;amp;#10;./configure --target=i686-pc-linux-android --with-python=yes --prefix=/nonexistent \&amp;amp;#10;  --with-gdb-datadir=/nonexistent/utils --with-system-gdbinit=/nonexistent/utils/gdbinit&amp;lt;/pre&amp;gt;&lt;br /&gt;
# Run make &amp;lt;pre&amp;gt;make -j8&amp;lt;/pre&amp;gt;&lt;br /&gt;
# The compiled binary will be at gdb/gdb&lt;br /&gt;
If you see an error like:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
../../../../bfd/doc/bfd.texinfo:325: unknown command `colophon&#039;&lt;br /&gt;
../../../../bfd/doc/bfd.texinfo:336: unknown command `cygnus&#039;&lt;br /&gt;
Makefile:421: recipe for target &#039;bfd.info&#039; failed&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
you can fix this by running:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sed -i -e &#039;s/@colophon/@@colophon/&#039; -e &#039;s/doc@cygnus.com/doc@@cygnus.com/&#039; bfd/doc/bfd.texinfo&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
or by checking out a more recent branch (this bug is in the 7_5 branch).&lt;br /&gt;
&lt;br /&gt;
===== GDBServer =====&lt;br /&gt;
&lt;br /&gt;
Consider using the pre-built gdbserver binary from the &amp;quot;Using pre-built binaries&amp;quot; section above; gdbserver is not specific to your platform. Otherwise,&lt;br /&gt;
# Use the source directory from above&lt;br /&gt;
# Make sure you have a copy of the Android NDK&lt;br /&gt;
# Run configure inside the &#039;&#039;gdb/gdbserver directory&#039;&#039; (following is for NDK r8d)&amp;lt;pre&amp;gt;export NDK=/PATH/TO/NDK&amp;amp;#10;# ARM:&amp;amp;#10;export PATH=$PATH:$NDK/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86/bin&amp;amp;#10;./configure --host=arm-linux-androideabi --with-sysroot=$NDK/platforms/android-9/arch-arm&amp;amp;#10;# x86:&amp;amp;#10;export PATH=$PATH:$NDK/toolchains/x86-4.6/prebuilt/linux-x86/bin&amp;amp;#10;./configure --host=i686-linux-android --with-sysroot=$NDK/platforms/android-9/arch-x86&amp;lt;/pre&amp;gt;&lt;br /&gt;
# Run make &amp;lt;pre&amp;gt;make -j8&amp;lt;/pre&amp;gt;&lt;br /&gt;
# The compiled binary will be at gdbserver&lt;br /&gt;
&lt;br /&gt;
==== Mac ====&lt;br /&gt;
&lt;br /&gt;
===== GDB =====&lt;br /&gt;
&lt;br /&gt;
# Get a zip of the source from [https://github.com/darchons/android-gdb the GitHub repo] (Get the zip because cloning takes a lot longer)&lt;br /&gt;
# Extract the zip&lt;br /&gt;
# You may need to install additional packages in order to build GDB. For example,&amp;lt;pre&amp;gt;port install bison flex ncurses texinfo python27&amp;lt;/pre&amp;gt;&lt;br /&gt;
# Run configure inside the source directory&amp;lt;pre&amp;gt;# ARM:&amp;amp;#10;./configure --target=arm-linux-android --with-python=yes --prefix=/nonexistent \&amp;amp;#10;  --with-gdb-datadir=/nonexistent/utils --with-system-gdbinit=/nonexistent/utils/gdbinit&amp;amp;#10;# x86:&amp;amp;#10;./configure --target=i686-pc-linux-android --with-python=yes --prefix=/nonexistent \&amp;amp;#10;  --with-gdb-datadir=/nonexistent/utils --with-system-gdbinit=/nonexistent/utils/gdbinit&amp;lt;/pre&amp;gt;&lt;br /&gt;
# Run make &amp;lt;pre&amp;gt;make -j8&amp;lt;/pre&amp;gt;&lt;br /&gt;
# The compiled binary will be at gdb/gdb&lt;br /&gt;
&lt;br /&gt;
===== GDBServer =====&lt;br /&gt;
&lt;br /&gt;
Consider using the pre-built gdbserver binary from the &amp;quot;Using pre-built binaries&amp;quot; section above; gdbserver is not specific to your platform. Otherwise,&lt;br /&gt;
# Use the source directory from above&lt;br /&gt;
# Make sure you have a copy of the Android NDK&lt;br /&gt;
# Run configure inside the &#039;&#039;gdb/gdbserver directory&#039;&#039; (following is for NDK r8d)&amp;lt;pre&amp;gt;export NDK=/PATH/TO/NDK&amp;amp;#10;# ARM:&amp;amp;#10;export PATH=$PATH:$NDK/toolchains/arm-linux-androideabi-4.6/prebuilt/darwin-x86/bin&amp;amp;#10;./configure --host=arm-linux-androideabi --with-sysroot=$NDK/platforms/android-9/arch-arm&amp;amp;#10;# x86:&amp;amp;#10;export PATH=$PATH:$NDK/toolchains/x86-4.6/prebuilt/darwin-x86/bin&amp;amp;#10;./configure --host=i686-linux-android --with-sysroot=$NDK/platforms/android-9/arch-x86&amp;lt;/pre&amp;gt;&lt;br /&gt;
# Run make &amp;lt;pre&amp;gt;make -j8&amp;lt;/pre&amp;gt;&lt;br /&gt;
# The compiled binary will be at gdb/gdbserver/gdbserver&lt;br /&gt;
&lt;br /&gt;
=== Step 2. Creating JimDB directory ===&lt;br /&gt;
&lt;br /&gt;
To get the most out of JimDB, in addition to the binaries, you need the Python scripts. But first, the scripts assume you have the following JimDB directory structure,&lt;br /&gt;
&lt;br /&gt;
 ./bin/&lt;br /&gt;
     gdb&lt;br /&gt;
     gdbserver&lt;br /&gt;
 ./utils/&lt;br /&gt;
     gdbinit&lt;br /&gt;
     python/&lt;br /&gt;
&lt;br /&gt;
Therefore, you&#039;d need to,&lt;br /&gt;
# Make a JimDB directory&lt;br /&gt;
# Copy gdb and gdbserver from steps above to bin/&lt;br /&gt;
# Clone the Python scripts to utils/&lt;br /&gt;
# Run bin/gdb&lt;br /&gt;
&lt;br /&gt;
For example,&lt;br /&gt;
 mkdir -p jimdb/bin # step 1&lt;br /&gt;
 cp /PATH/TO/SOURCE/gdb/gdb jimdb/bin # step 2&lt;br /&gt;
 cp /PATH/TO/SOURCE/gdb/gdbserver/gdbserver jimdb/bin&lt;br /&gt;
 git clone git://github.com/darchons/android-gdbutils.git jimdb/utils # step 3&lt;br /&gt;
 jimdb/bin/gdb # step 4&lt;br /&gt;
&lt;br /&gt;
= Using JimDB =&lt;br /&gt;
&lt;br /&gt;
== First run ==&lt;br /&gt;
&lt;br /&gt;
In order to debug Fennec, JimDB needs a copy of your system libraries. When you try to debug Fennec on a particular device for the first time, JimDB will download the libraries from your device. This may take some time but will only need to run once. You may need to restart JimDB in order for debug symbols to work.&lt;br /&gt;
&lt;br /&gt;
== Configuring JimDB ==&lt;br /&gt;
&lt;br /&gt;
utils/gdbinit is the GDB command file that JimDB runs at launch. Open it in your favorite text editor to see configurable settings for JimDB.&lt;br /&gt;
&lt;br /&gt;
utils/gdbinit also loads utils/gdbinit.local. Because utils/gdbinit can change frequently across updates, it&#039;s recommended to copy your custom settings to utils/gdbinit.local, so that updates do not override your settings.&lt;br /&gt;
&lt;br /&gt;
For example, to configure the feninit.default.objdir option, paste the following line anywhere inside utils/gdbinit.local,&lt;br /&gt;
 python feninit.default.objdir = &#039;/home/user/mozilla/central/objdir-android&#039;&lt;br /&gt;
&lt;br /&gt;
== FenInit ==&lt;br /&gt;
&lt;br /&gt;
FenInit is the Python script that simplifies launching Fennec on your device and setting up a debug environment. When JimDB starts, FenInit runs automatically and presents several options,&lt;br /&gt;
&lt;br /&gt;
# Debug Fennec (default)&lt;br /&gt;
# Debug Fennec with env vars and args&lt;br /&gt;
# Debug using jdb&lt;br /&gt;
# Debug content Mochitest&lt;br /&gt;
# Debug compiled-code unit test&lt;br /&gt;
&lt;br /&gt;
[[File:Jimdb-prompt.png]]&lt;br /&gt;
&lt;br /&gt;
=== Debug Fennec ===&lt;br /&gt;
&lt;br /&gt;
This is the default option. Once you choose an object directory to use, the script will automatically launch Fennec, and run GDBServer to attach to Fennec.&lt;br /&gt;
&lt;br /&gt;
The script tries to scan your user directory for object directories. For more control, see the [[#feninit.default.objdir|Configuration section]] on how to specify default object directories or where to scan for object directories.&lt;br /&gt;
&lt;br /&gt;
=== Debug Fennec with env vars and args ===&lt;br /&gt;
&lt;br /&gt;
This option gives you the additional ability to specify environment variables and arguments when launching Fennec. See the [[#feninit.default.env|Configuration section]] on how to specify additional default environment variables and arguments.&lt;br /&gt;
&lt;br /&gt;
=== Debug using jdb ===&lt;br /&gt;
&lt;br /&gt;
This option will let you use the Java debugger (jdb) to debug the native Java portion of Fennec. This is the default option if you already have a previous JimDB debugging session running.&lt;br /&gt;
&lt;br /&gt;
JDB support is experimental. It is able to at least set breakpoints, show source code, and examine objects.&lt;br /&gt;
&lt;br /&gt;
=== Debug content Mochitest ===&lt;br /&gt;
&lt;br /&gt;
This option will let you debug a regular Mochitest. Make sure Fennec is compiled with the &#039;--enable-tests&#039; option in the mozconfig file. Because running Mochitests require a copy of the XUL Runtime Environment (XRE), the script will offer to automatically download a copy of XRE for you, as well as launching the test harness. You can specify a file or a directory to test, or set TEST_PATH. Environment variables and arguments to the test harness are also supported.&lt;br /&gt;
&lt;br /&gt;
=== Debug compiled-code unit test ===&lt;br /&gt;
&lt;br /&gt;
This option will let you debug a C++ test. Environment variables and arguments are supported.&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
==== feninit.default.objdir ====&lt;br /&gt;
* Set feninit.default.objdir to the default object directory. Note that once it is set, the script will not prompt you to choose an object directory.&lt;br /&gt;
* Alternatively, if your object directories are called &#039;obj*&#039; under your source directory, you can set feninit.default.objdir to the source directory itself. The script will scan the source directory and list all the object directories that it found.&lt;br /&gt;
* Note that there have been problems in the past with using ~ and $HOME in the setting, so use absolute path for best results.&lt;br /&gt;
* PRO-TIP: Put the following code block inside gdbinit.local to always use the current directory as the object directory,&lt;br /&gt;
 python&lt;br /&gt;
 import os&lt;br /&gt;
 feninit.default.objdir = os.getcwd()&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
==== feninit.default.srcroot ====&lt;br /&gt;
* Unlike the previous setting, feninit.default.srcroot specifies the directory containing all the source directories. This is convenient if you have &#039;src/mozilla-central&#039;, &#039;src/mozilla-inbound&#039;, &#039;src/mozilla-aurora&#039;, etc. In that case, you can set feninit.default.srcroot to &#039;src&#039; and all the source directories will be scanned for object directories.&lt;br /&gt;
* Again, use absolute path for best results.&lt;br /&gt;
==== feninit.default.no_launch ====&lt;br /&gt;
* This settings is meant for B2G, and may not be useful for Fennec debugging.&lt;br /&gt;
==== feninit.default.gdbserver_port ====&lt;br /&gt;
* To debug Fennec on your device, GDB on your computer needs to talk to GDBServer on your device through a TCP port forwarded to your device through ADB.&lt;br /&gt;
* Normally, JimDB will use a random port. However, you can pick a specific port to use. This is useful in certain situations such as inside an SSH session. See [http://www.jnchen.com/blog/2012/11/tunnelling-adb this blog post].&lt;br /&gt;
==== feninit.default.jdwp_port ====&lt;br /&gt;
* Similar to feninit.default.gdbserver_port, except for using JDB for debugging.&lt;br /&gt;
==== feninit.default.env ====&lt;br /&gt;
* Specify the default environment variables to use when launching Fennec. Only used for the &amp;quot;Debug Fennec&amp;quot; options.&lt;br /&gt;
==== feninit.default.args ====&lt;br /&gt;
* Specify the default arguments to use when launching Fennec. Only used for the &amp;quot;Debug Fennec&amp;quot; options.&lt;br /&gt;
==== feninit.default.cpp_env ====&lt;br /&gt;
* Similar to [[#feninit.default.env|feninit.default.env]], except only used for the &amp;quot;Debug compiled-code unit test&amp;quot; option.&lt;br /&gt;
==== feninit.default.mochi_env ====&lt;br /&gt;
* Similar to [[#feninit.default.env|feninit.default.env]], except only used for the &amp;quot;Debug content Mochitest&amp;quot; option.&lt;br /&gt;
==== feninit.default.mochi_args ====&lt;br /&gt;
* Specify the default arguments to use when debugging Mochitest. Only used for the &amp;quot;Debug content Mochitest&amp;quot; option.&lt;br /&gt;
* Note that Mochitest arguments are arguments to the test harness (e.g. --remote-webserver), and not arguments to Fennec itself.&lt;br /&gt;
==== feninit.default.mochi_xre ====&lt;br /&gt;
* Specify the XRE directory to use, instead of letting the script download and manage an XRE copy.&lt;br /&gt;
==== feninit.default.mochi_harness ====&lt;br /&gt;
* Specify the directory containing the harness itself, i.e. &amp;quot;runtestsremote.py&amp;quot;. Not needed normally.&lt;br /&gt;
==== feninit.default.mochi_xre_url ====&lt;br /&gt;
* Specify the directory on [http://ftp.mozilla.org ftp.mozilla.org] to use for downloading XRE. Not used if feninit.default.mochi_xre is specified.&lt;br /&gt;
==== feninit.default.mochi_xre_update ====&lt;br /&gt;
* Specify the XRE check for updates interval. Only used if the script is managing the XRE copy, and not used if feninit.default.mochi_xre_update is specified.&lt;br /&gt;
&lt;br /&gt;
== GDB commands specific to JimDB ==&lt;br /&gt;
=== set delay-add-remote-solibs ===&lt;br /&gt;
 gdb&amp;gt; set delay-add-remote-solibs &amp;lt;0|1&amp;gt;&lt;br /&gt;
Default setting is 0. Set delay-add-remote-solibs to 1 to delay loading symbols when shared libraries are loaded. This may improve the set up time. However, you may need to use the &amp;quot;sharedlibrary&amp;quot; command to manually load symbols before using breakpoints.&lt;br /&gt;
=== monitor set ignore-ondemand ===&lt;br /&gt;
 gdb&amp;gt; monitor set ignore-ondemand &amp;lt;0|1&amp;gt;&lt;br /&gt;
Default setting is 1. Set ignore-ondemand to 0 to not ignore segmentation faults generated by on-demand decompression. This setting may be needed to debug specific segmentation faults that are inadvertently being ignored. This command can only be run after attaching to the target, so it cannot be specified in gdbinit.local.&lt;br /&gt;
&lt;br /&gt;
= FAQ =&lt;br /&gt;
&lt;br /&gt;
=== What is moz-gdb? ===&lt;br /&gt;
* moz-gdb was a synonym for JimDB, but it&#039;s no longer used, to avoid confusion&lt;br /&gt;
&lt;br /&gt;
=== &amp;quot;configure: error: failure running python-config&amp;quot; when compiling GDB ===&lt;br /&gt;
* python may point to python3 on your machine. You need to specify where python2 is by using, for example, --with-python=python2 in your configure line&lt;br /&gt;
&lt;br /&gt;
=== &amp;quot;error while loading shared libraries: libtinfo.so.5&amp;quot; on Linux ===&lt;br /&gt;
* You may need to create a libtinfo.so.5 symlink to libncurses.so.5. For example,&lt;br /&gt;
 sudo ln -s libncurses.so.5 /usr/lib/libtinfo.so.5&lt;br /&gt;
&lt;br /&gt;
=== &amp;quot;Segmentation fault: 11&amp;quot; or &amp;quot;Illegal instruction: 4&amp;quot; on Mac OS X ===&lt;br /&gt;
* This may be due to incompatible OS X SDK versions. You should build your own JimDB binary to avoid the issue.&lt;br /&gt;
&lt;br /&gt;
=== &amp;quot;cannot locate symbol &amp;quot;__exidx_end&amp;quot;&amp;quot; when starting to debug ===&lt;br /&gt;
* If you&#039;re using pre-built binaries, you need to update to a newer version of JimDB&lt;br /&gt;
* If you&#039;re using custom-built binaries, you need to recompile gdbserver using a newer version of the NDK&lt;br /&gt;
&lt;br /&gt;
=== &amp;quot;No module named printing&amp;quot; when debugging Fennec with JimDB ===&lt;br /&gt;
* The JimDB Python scripts lack several scripts included in regular GDB packages. To fix that, simply copy your local copy of these scripts to the JimDB utils/python directory. For example, on a typical Linux system, run&lt;br /&gt;
 cp -r /usr/share/gdb/python/gdb $jimdb/utils/python/&lt;br /&gt;
* If you don&#039;t have these files, they are available [http://people.mozilla.org/~nchen/jimdb/gdb-python-lib.tar.bz2 here]; just extract it under $jimdb/utils/python/&lt;br /&gt;
&lt;br /&gt;
=== Random segmentation faults when debugging Fennec ===&lt;br /&gt;
* GDB can catch segmentation faults generated by on-demand decompression; just use &amp;quot;continue&amp;quot; to continue execution.&lt;br /&gt;
* Alternatively, specify the &amp;quot;MOZ_LINKER_ONDEMAND=0&amp;quot; environment variable when launching Fennec using Option 2. You can also put the option inside jimdb/utils/gdbinit.local.&lt;br /&gt;
&lt;br /&gt;
=== GDB crashed and Fennec is stuck. Halp!! ===&lt;br /&gt;
* GDBServer may still be attached to Fennec but is unable to communicate with GDB; try killing GDBServer&lt;br /&gt;
 adb shell run-as org.mozilla.fennec_$USER kill `adb shell ps | grep gdb | awk &#039;{print $2}&#039;`&lt;br /&gt;
&lt;br /&gt;
=== &amp;quot;make: `[path]/mochitest-remote&#039; is up to date.&amp;quot; while trying to run Mochitests ===&lt;br /&gt;
* Delete the mochitest-remote file.&lt;br /&gt;
&lt;br /&gt;
=== &amp;quot;failed to run gdbserver&amp;quot; === &lt;br /&gt;
&lt;br /&gt;
    &amp;quot;gdbserver&amp;quot; output:&lt;br /&gt;
     /system/bin/sh: /data/local/tmp/gdbserver: not executable: magic 7F45&lt;br /&gt;
    &amp;quot;run-as&amp;quot; output:&lt;br /&gt;
     /data/local/tmp/gdbserver[1]: syntax error: &#039;(&#039; unexpected&lt;br /&gt;
    &amp;quot;su -c&amp;quot; output:&lt;br /&gt;
     /system/bin/sh: su: not found&lt;br /&gt;
    [path]/jimdb-x86/bin/../utils/gdbinit:136: Error in sourced command file:&lt;br /&gt;
    failed to run gdbserver&lt;br /&gt;
&lt;br /&gt;
You are probably trying to run the x86 version on an ARM device. Download the ARM version of JimDB instead.&lt;br /&gt;
&lt;br /&gt;
=== JimDB sucks! Halp!! ===&lt;br /&gt;
* Come on #mobile on IRC&lt;br /&gt;
* Or file a bug under Firefox for Android, JimDB component&lt;br /&gt;
&lt;br /&gt;
=== JimDB is awesome now!! Can I buy you a $beverage? ===&lt;br /&gt;
Yes! See also {{bug|800000}}&lt;/div&gt;</summary>
		<author><name>Rillian</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Mobile/Fennec/Android/GDB&amp;diff=1031617</id>
		<title>Mobile/Fennec/Android/GDB</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Mobile/Fennec/Android/GDB&amp;diff=1031617"/>
		<updated>2014-11-07T23:45:11Z</updated>

		<summary type="html">&lt;p&gt;Rillian: /* Example */ https link to people.mozilla.org&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;JimDB is a fork of GDB used for simplifying Fennec development. It consists of two parts:&lt;br /&gt;
&lt;br /&gt;
* Binaries - the GDB/GDBServer binaries that include Android-specific patches (https://github.com/darchons/android-gdb)&lt;br /&gt;
* Scripts - the Python scripts that run under GDB to simplify common tasks (https://github.com/darchons/android-gdbutils)&lt;br /&gt;
&lt;br /&gt;
Use #mobile on IRC for support.&lt;br /&gt;
&lt;br /&gt;
= Getting started =&lt;br /&gt;
&lt;br /&gt;
== Using pre-built binaries ==&lt;br /&gt;
&lt;br /&gt;
=== Instructions ===&lt;br /&gt;
&lt;br /&gt;
# Download the latest pre-built binaries for your platform from [http://people.mozilla.org/~nchen/jimdb this directory] (use &#039;jimdb-arm&#039; for ARM devices and &#039;jimdb-x86&#039; for x86 devices)&lt;br /&gt;
# Extract to a user-writable directory&lt;br /&gt;
# Run &#039;git pull&#039; from inside the utils/ directory to get the latest scripts&lt;br /&gt;
# Launch bin/gdb to start using JimDB!&lt;br /&gt;
# OPTIONAL: For easier access, you can create a symlink to jimdb under, e.g., /usr/bin&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
&lt;br /&gt;
For ARM devices on Linux,&lt;br /&gt;
 cd $HOME&lt;br /&gt;
 wget https://people.mozilla.org/~nchen/jimdb/jimdb-arm-linux_x64.tar.bz2 # step 1&lt;br /&gt;
 tar -xf jimdb-arm-linux_x64.tar.bz2 # step 2&lt;br /&gt;
 cd jimdb/utils # step 3&lt;br /&gt;
 git pull&lt;br /&gt;
 ../bin/gdb # step 4&lt;br /&gt;
 sudo ln -s $HOME/jimdb/bin/gdb /usr/bin/jimdb # step 5&lt;br /&gt;
&lt;br /&gt;
== Custom-building ==&lt;br /&gt;
&lt;br /&gt;
=== Step 1. Compiling the binaries ===&lt;br /&gt;
&lt;br /&gt;
There are two things to build here: gdb and gdbserver&lt;br /&gt;
&lt;br /&gt;
==== Linux ====&lt;br /&gt;
&lt;br /&gt;
===== GDB =====&lt;br /&gt;
&lt;br /&gt;
# Clone [https://github.com/darchons/android-gdb the GitHub repo] (do not use the Zip archive, as the build system will try to obtain a git changeset id)&lt;br /&gt;
# You may need to install additional packages in order to build GDB. For example,&amp;lt;pre&amp;gt;sudo apt-get build-dep gdb&amp;lt;/pre&amp;gt;&lt;br /&gt;
# Run configure inside the source directory&amp;lt;pre&amp;gt;# ARM:&amp;amp;#10;./configure --target=arm-linux-android --with-python=yes --prefix=/nonexistent \&amp;amp;#10;  --with-gdb-datadir=/nonexistent/utils --with-system-gdbinit=/nonexistent/utils/gdbinit&amp;amp;#10;# x86:&amp;amp;#10;./configure --target=i686-pc-linux-android --with-python=yes --prefix=/nonexistent \&amp;amp;#10;  --with-gdb-datadir=/nonexistent/utils --with-system-gdbinit=/nonexistent/utils/gdbinit&amp;lt;/pre&amp;gt;&lt;br /&gt;
# Run make &amp;lt;pre&amp;gt;make -j8&amp;lt;/pre&amp;gt;&lt;br /&gt;
# The compiled binary will be at gdb/gdb&lt;br /&gt;
If you see an error like:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
../../../../bfd/doc/bfd.texinfo:325: unknown command `colophon&#039;&lt;br /&gt;
../../../../bfd/doc/bfd.texinfo:336: unknown command `cygnus&#039;&lt;br /&gt;
Makefile:421: recipe for target &#039;bfd.info&#039; failed&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
you can fix this by running:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sed -i -e &#039;s/@colophon/@@colophon/&#039; -e &#039;s/doc@cygnus.com/doc@@cygnus.com/&#039; bfd/doc/bfd.texinfo&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
or by checking out a more recent branch (this bug is in the 7_5 branch).&lt;br /&gt;
&lt;br /&gt;
===== GDBServer =====&lt;br /&gt;
&lt;br /&gt;
Consider using the pre-built gdbserver binary from the &amp;quot;Using pre-built binaries&amp;quot; section above; gdbserver is not specific to your platform. Otherwise,&lt;br /&gt;
# Use the source directory from above&lt;br /&gt;
# Make sure you have a copy of the Android NDK&lt;br /&gt;
# Run configure inside the &#039;&#039;gdb/gdbserver directory&#039;&#039; (following is for NDK r8d)&amp;lt;pre&amp;gt;export NDK=/PATH/TO/NDK&amp;amp;#10;# ARM:&amp;amp;#10;export PATH=$PATH:$NDK/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86/bin&amp;amp;#10;./configure --host=arm-linux-androideabi --with-sysroot=$NDK/platforms/android-9/arch-arm&amp;amp;#10;# x86:&amp;amp;#10;export PATH=$PATH:$NDK/toolchains/x86-4.6/prebuilt/linux-x86/bin&amp;amp;#10;./configure --host=i686-linux-android --with-sysroot=$NDK/platforms/android-9/arch-x86&amp;lt;/pre&amp;gt;&lt;br /&gt;
# Run make &amp;lt;pre&amp;gt;make -j8&amp;lt;/pre&amp;gt;&lt;br /&gt;
# The compiled binary will be at gdbserver&lt;br /&gt;
&lt;br /&gt;
==== Mac ====&lt;br /&gt;
&lt;br /&gt;
===== GDB =====&lt;br /&gt;
&lt;br /&gt;
# Get a zip of the source from [https://github.com/darchons/android-gdb the GitHub repo] (Get the zip because cloning takes a lot longer)&lt;br /&gt;
# Extract the zip&lt;br /&gt;
# You may need to install additional packages in order to build GDB. For example,&amp;lt;pre&amp;gt;port install bison flex ncurses texinfo python27&amp;lt;/pre&amp;gt;&lt;br /&gt;
# Run configure inside the source directory&amp;lt;pre&amp;gt;# ARM:&amp;amp;#10;./configure --target=arm-linux-android --with-python=yes --prefix=/nonexistent \&amp;amp;#10;  --with-gdb-datadir=/nonexistent/utils --with-system-gdbinit=/nonexistent/utils/gdbinit&amp;amp;#10;# x86:&amp;amp;#10;./configure --target=i686-pc-linux-android --with-python=yes --prefix=/nonexistent \&amp;amp;#10;  --with-gdb-datadir=/nonexistent/utils --with-system-gdbinit=/nonexistent/utils/gdbinit&amp;lt;/pre&amp;gt;&lt;br /&gt;
# Run make &amp;lt;pre&amp;gt;make -j8&amp;lt;/pre&amp;gt;&lt;br /&gt;
# The compiled binary will be at gdb/gdb&lt;br /&gt;
&lt;br /&gt;
===== GDBServer =====&lt;br /&gt;
&lt;br /&gt;
Consider using the pre-built gdbserver binary from the &amp;quot;Using pre-built binaries&amp;quot; section above; gdbserver is not specific to your platform. Otherwise,&lt;br /&gt;
# Use the source directory from above&lt;br /&gt;
# Make sure you have a copy of the Android NDK&lt;br /&gt;
# Run configure inside the &#039;&#039;gdb/gdbserver directory&#039;&#039; (following is for NDK r8d)&amp;lt;pre&amp;gt;export NDK=/PATH/TO/NDK&amp;amp;#10;# ARM:&amp;amp;#10;export PATH=$PATH:$NDK/toolchains/arm-linux-androideabi-4.6/prebuilt/darwin-x86/bin&amp;amp;#10;./configure --host=arm-linux-androideabi --with-sysroot=$NDK/platforms/android-9/arch-arm&amp;amp;#10;# x86:&amp;amp;#10;export PATH=$PATH:$NDK/toolchains/x86-4.6/prebuilt/darwin-x86/bin&amp;amp;#10;./configure --host=i686-linux-android --with-sysroot=$NDK/platforms/android-9/arch-x86&amp;lt;/pre&amp;gt;&lt;br /&gt;
# Run make &amp;lt;pre&amp;gt;make -j8&amp;lt;/pre&amp;gt;&lt;br /&gt;
# The compiled binary will be at gdb/gdbserver/gdbserver&lt;br /&gt;
&lt;br /&gt;
=== Step 2. Creating JimDB directory ===&lt;br /&gt;
&lt;br /&gt;
To get the most out of JimDB, in addition to the binaries, you need the Python scripts. But first, the scripts assume you have the following JimDB directory structure,&lt;br /&gt;
&lt;br /&gt;
 ./bin/&lt;br /&gt;
     gdb&lt;br /&gt;
     gdbserver&lt;br /&gt;
 ./utils/&lt;br /&gt;
     gdbinit&lt;br /&gt;
     python/&lt;br /&gt;
&lt;br /&gt;
Therefore, you&#039;d need to,&lt;br /&gt;
# Make a JimDB directory&lt;br /&gt;
# Copy gdb and gdbserver from steps above to bin/&lt;br /&gt;
# Clone the Python scripts to utils/&lt;br /&gt;
# Run bin/gdb&lt;br /&gt;
&lt;br /&gt;
For example,&lt;br /&gt;
 mkdir -p jimdb/bin # step 1&lt;br /&gt;
 cp /PATH/TO/SOURCE/gdb/gdb jimdb/bin # step 2&lt;br /&gt;
 cp /PATH/TO/SOURCE/gdb/gdbserver/gdbserver jimdb/bin&lt;br /&gt;
 git clone git://github.com/darchons/android-gdbutils.git jimdb/utils # step 3&lt;br /&gt;
 jimdb/bin/gdb # step 4&lt;br /&gt;
&lt;br /&gt;
= Using JimDB =&lt;br /&gt;
&lt;br /&gt;
== First run ==&lt;br /&gt;
&lt;br /&gt;
In order to debug Fennec, JimDB needs a copy of your system libraries. When you try to debug Fennec on a particular device for the first time, JimDB will download the libraries from your device. This may take some time but will only need to run once. You may need to restart JimDB in order for debug symbols to work.&lt;br /&gt;
&lt;br /&gt;
== Configuring JimDB ==&lt;br /&gt;
&lt;br /&gt;
utils/gdbinit is the GDB command file that JimDB runs at launch. Open it in your favorite text editor to see configurable settings for JimDB.&lt;br /&gt;
&lt;br /&gt;
utils/gdbinit also loads utils/gdbinit.local. Because utils/gdbinit can change frequently across updates, it&#039;s recommended to copy your custom settings to utils/gdbinit.local, so that updates do not override your settings.&lt;br /&gt;
&lt;br /&gt;
For example, to configure the feninit.default.objdir option, paste the following line anywhere inside utils/gdbinit.local,&lt;br /&gt;
 python feninit.default.objdir = &#039;/home/user/mozilla/central/objdir-android&#039;&lt;br /&gt;
&lt;br /&gt;
== FenInit ==&lt;br /&gt;
&lt;br /&gt;
FenInit is the Python script that simplifies launching Fennec on your device and setting up a debug environment. When JimDB starts, FenInit runs automatically and presents several options,&lt;br /&gt;
&lt;br /&gt;
# Debug Fennec (default)&lt;br /&gt;
# Debug Fennec with env vars and args&lt;br /&gt;
# Debug using jdb&lt;br /&gt;
# Debug content Mochitest&lt;br /&gt;
# Debug compiled-code unit test&lt;br /&gt;
&lt;br /&gt;
[[File:Jimdb-prompt.png]]&lt;br /&gt;
&lt;br /&gt;
=== Debug Fennec ===&lt;br /&gt;
&lt;br /&gt;
This is the default option. Once you choose an object directory to use, the script will automatically launch Fennec, and run GDBServer to attach to Fennec.&lt;br /&gt;
&lt;br /&gt;
The script tries to scan your user directory for object directories. For more control, see the [[#feninit.default.objdir|Configuration section]] on how to specify default object directories or where to scan for object directories.&lt;br /&gt;
&lt;br /&gt;
=== Debug Fennec with env vars and args ===&lt;br /&gt;
&lt;br /&gt;
This option gives you the additional ability to specify environment variables and arguments when launching Fennec. See the [[#feninit.default.env|Configuration section]] on how to specify additional default environment variables and arguments.&lt;br /&gt;
&lt;br /&gt;
=== Debug using jdb ===&lt;br /&gt;
&lt;br /&gt;
This option will let you use the Java debugger (jdb) to debug the native Java portion of Fennec. This is the default option if you already have a previous JimDB debugging session running.&lt;br /&gt;
&lt;br /&gt;
JDB support is experimental. It is able to at least set breakpoints, show source code, and examine objects.&lt;br /&gt;
&lt;br /&gt;
=== Debug content Mochitest ===&lt;br /&gt;
&lt;br /&gt;
This option will let you debug a regular Mochitest. Make sure Fennec is compiled with the &#039;--enable-tests&#039; option in the mozconfig file. Because running Mochitests require a copy of the XUL Runtime Environment (XRE), the script will offer to automatically download a copy of XRE for you, as well as launching the test harness. You can specify a file or a directory to test, or set TEST_PATH. Environment variables and arguments to the test harness are also supported.&lt;br /&gt;
&lt;br /&gt;
=== Debug compiled-code unit test ===&lt;br /&gt;
&lt;br /&gt;
This option will let you debug a C++ test. Environment variables and arguments are supported.&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
==== feninit.default.objdir ====&lt;br /&gt;
* Set feninit.default.objdir to the default object directory. Note that once it is set, the script will not prompt you to choose an object directory.&lt;br /&gt;
* Alternatively, if your object directories are called &#039;obj*&#039; under your source directory, you can set feninit.default.objdir to the source directory itself. The script will scan the source directory and list all the object directories that it found.&lt;br /&gt;
* Note that there have been problems in the past with using ~ and $HOME in the setting, so use absolute path for best results.&lt;br /&gt;
* PRO-TIP: Put the following code block inside gdbinit.local to always use the current directory as the object directory,&lt;br /&gt;
 python&lt;br /&gt;
 import os&lt;br /&gt;
 feninit.default.objdir = os.getcwd()&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
==== feninit.default.srcroot ====&lt;br /&gt;
* Unlike the previous setting, feninit.default.srcroot specifies the directory containing all the source directories. This is convenient if you have &#039;src/mozilla-central&#039;, &#039;src/mozilla-inbound&#039;, &#039;src/mozilla-aurora&#039;, etc. In that case, you can set feninit.default.srcroot to &#039;src&#039; and all the source directories will be scanned for object directories.&lt;br /&gt;
* Again, use absolute path for best results.&lt;br /&gt;
==== feninit.default.no_launch ====&lt;br /&gt;
* This settings is meant for B2G, and may not be useful for Fennec debugging.&lt;br /&gt;
==== feninit.default.gdbserver_port ====&lt;br /&gt;
* To debug Fennec on your device, GDB on your computer needs to talk to GDBServer on your device through a TCP port forwarded to your device through ADB.&lt;br /&gt;
* Normally, JimDB will use a random port. However, you can pick a specific port to use. This is useful in certain situations such as inside an SSH session. See [http://www.jnchen.com/blog/2012/11/tunnelling-adb this blog post].&lt;br /&gt;
==== feninit.default.jdwp_port ====&lt;br /&gt;
* Similar to feninit.default.gdbserver_port, except for using JDB for debugging.&lt;br /&gt;
==== feninit.default.env ====&lt;br /&gt;
* Specify the default environment variables to use when launching Fennec. Only used for the &amp;quot;Debug Fennec&amp;quot; options.&lt;br /&gt;
==== feninit.default.args ====&lt;br /&gt;
* Specify the default arguments to use when launching Fennec. Only used for the &amp;quot;Debug Fennec&amp;quot; options.&lt;br /&gt;
==== feninit.default.cpp_env ====&lt;br /&gt;
* Similar to [[#feninit.default.env|feninit.default.env]], except only used for the &amp;quot;Debug compiled-code unit test&amp;quot; option.&lt;br /&gt;
==== feninit.default.mochi_env ====&lt;br /&gt;
* Similar to [[#feninit.default.env|feninit.default.env]], except only used for the &amp;quot;Debug content Mochitest&amp;quot; option.&lt;br /&gt;
==== feninit.default.mochi_args ====&lt;br /&gt;
* Specify the default arguments to use when debugging Mochitest. Only used for the &amp;quot;Debug content Mochitest&amp;quot; option.&lt;br /&gt;
* Note that Mochitest arguments are arguments to the test harness (e.g. --remote-webserver), and not arguments to Fennec itself.&lt;br /&gt;
==== feninit.default.mochi_xre ====&lt;br /&gt;
* Specify the XRE directory to use, instead of letting the script download and manage an XRE copy.&lt;br /&gt;
==== feninit.default.mochi_harness ====&lt;br /&gt;
* Specify the directory containing the harness itself, i.e. &amp;quot;runtestsremote.py&amp;quot;. Not needed normally.&lt;br /&gt;
==== feninit.default.mochi_xre_url ====&lt;br /&gt;
* Specify the directory on [http://ftp.mozilla.org ftp.mozilla.org] to use for downloading XRE. Not used if feninit.default.mochi_xre is specified.&lt;br /&gt;
==== feninit.default.mochi_xre_update ====&lt;br /&gt;
* Specify the XRE check for updates interval. Only used if the script is managing the XRE copy, and not used if feninit.default.mochi_xre_update is specified.&lt;br /&gt;
&lt;br /&gt;
== GDB commands specific to JimDB ==&lt;br /&gt;
=== set delay-add-remote-solibs ===&lt;br /&gt;
 gdb&amp;gt; set delay-add-remote-solibs &amp;lt;0|1&amp;gt;&lt;br /&gt;
Default setting is 0. Set delay-add-remote-solibs to 1 to delay loading symbols when shared libraries are loaded. This may improve the set up time. However, you may need to use the &amp;quot;sharedlibrary&amp;quot; command to manually load symbols before using breakpoints.&lt;br /&gt;
=== monitor set ignore-ondemand ===&lt;br /&gt;
 gdb&amp;gt; monitor set ignore-ondemand &amp;lt;0|1&amp;gt;&lt;br /&gt;
Default setting is 1. Set ignore-ondemand to 0 to not ignore segmentation faults generated by on-demand decompression. This setting may be needed to debug specific segmentation faults that are inadvertently being ignored. This command can only be run after attaching to the target, so it cannot be specified in gdbinit.local.&lt;br /&gt;
&lt;br /&gt;
= FAQ =&lt;br /&gt;
&lt;br /&gt;
=== What is moz-gdb? ===&lt;br /&gt;
* moz-gdb was a synonym for JimDB, but it&#039;s no longer used, to avoid confusion&lt;br /&gt;
&lt;br /&gt;
=== &amp;quot;configure: error: failure running python-config&amp;quot; when compiling GDB ===&lt;br /&gt;
* python may point to python3 on your machine. You need to specify where python2 is by using, for example, --with-python=python2 in your configure line&lt;br /&gt;
&lt;br /&gt;
=== &amp;quot;error while loading shared libraries: libtinfo.so.5&amp;quot; on Linux ===&lt;br /&gt;
* You may need to create a libtinfo.so.5 symlink to libncurses.so.5. For example,&lt;br /&gt;
 sudo ln -s libncurses.so.5 /usr/lib/libtinfo.so.5&lt;br /&gt;
&lt;br /&gt;
=== &amp;quot;Segmentation fault: 11&amp;quot; or &amp;quot;Illegal instruction: 4&amp;quot; on Mac OS X ===&lt;br /&gt;
* This may be due to incompatible OS X SDK versions. You should build your own JimDB binary to avoid the issue.&lt;br /&gt;
&lt;br /&gt;
=== &amp;quot;cannot locate symbol &amp;quot;__exidx_end&amp;quot;&amp;quot; when starting to debug ===&lt;br /&gt;
* If you&#039;re using pre-built binaries, you need to update to a newer version of JimDB&lt;br /&gt;
* If you&#039;re using custom-built binaries, you need to recompile gdbserver using a newer version of the NDK&lt;br /&gt;
&lt;br /&gt;
=== &amp;quot;No module named printing&amp;quot; when debugging Fennec with JimDB ===&lt;br /&gt;
* The JimDB Python scripts lack several scripts included in regular GDB packages. To fix that, simply copy your local copy of these scripts to the JimDB utils/python directory. For example, on a typical Linux system, run&lt;br /&gt;
 cp -r /usr/share/gdb/python/gdb $jimdb/utils/python/&lt;br /&gt;
* If you don&#039;t have these files, they are available [http://people.mozilla.org/~nchen/jimdb/gdb-python-lib.tar.bz2 here]; just extract it under $jimdb/utils/python/&lt;br /&gt;
&lt;br /&gt;
=== Random segmentation faults when debugging Fennec ===&lt;br /&gt;
* GDB can catch segmentation faults generated by on-demand decompression; just use &amp;quot;continue&amp;quot; to continue execution.&lt;br /&gt;
* Alternatively, specify the &amp;quot;MOZ_LINKER_ONDEMAND=0&amp;quot; environment variable when launching Fennec using Option 2. You can also put the option inside jimdb/utils/gdbinit.local.&lt;br /&gt;
&lt;br /&gt;
=== GDB crashed and Fennec is stuck. Halp!! ===&lt;br /&gt;
* GDBServer may still be attached to Fennec but is unable to communicate with GDB; try killing GDBServer&lt;br /&gt;
 adb shell run-as org.mozilla.fennec_$USER kill `adb shell ps | grep gdb | awk &#039;{print $2}&#039;`&lt;br /&gt;
&lt;br /&gt;
=== &amp;quot;make: `[path]/mochitest-remote&#039; is up to date.&amp;quot; while trying to run Mochitests ===&lt;br /&gt;
* Delete the mochitest-remote file.&lt;br /&gt;
&lt;br /&gt;
=== &amp;quot;failed to run gdbserver&amp;quot; === &lt;br /&gt;
&lt;br /&gt;
    &amp;quot;gdbserver&amp;quot; output:&lt;br /&gt;
     /system/bin/sh: /data/local/tmp/gdbserver: not executable: magic 7F45&lt;br /&gt;
    &amp;quot;run-as&amp;quot; output:&lt;br /&gt;
     /data/local/tmp/gdbserver[1]: syntax error: &#039;(&#039; unexpected&lt;br /&gt;
    &amp;quot;su -c&amp;quot; output:&lt;br /&gt;
     /system/bin/sh: su: not found&lt;br /&gt;
    [path]/jimdb-x86/bin/../utils/gdbinit:136: Error in sourced command file:&lt;br /&gt;
    failed to run gdbserver&lt;br /&gt;
&lt;br /&gt;
You are probably trying to run the x86 version on an ARM device. Download the ARM version of JimDB instead.&lt;br /&gt;
&lt;br /&gt;
=== JimDB sucks! Halp!! ===&lt;br /&gt;
* Come on #mobile on IRC&lt;br /&gt;
* Or file a bug under Firefox for Android, JimDB component&lt;br /&gt;
&lt;br /&gt;
=== JimDB is awesome now!! Can I buy you a $beverage? ===&lt;br /&gt;
Yes! See also {{bug|800000}}&lt;/div&gt;</summary>
		<author><name>Rillian</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=WeeklyUpdates&amp;diff=1004615</id>
		<title>WeeklyUpdates</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=WeeklyUpdates&amp;diff=1004615"/>
		<updated>2014-08-11T18:03:11Z</updated>

		<summary type="html">&lt;p&gt;Rillian: /* Meeting Notes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;:&#039;&#039;These updates concern Mozilla as a whole. For the weekly Firefox meetings, see [[Firefox/DeliveryMeetings]], for Gecko progress, see [[Platform#Meeting_Notes]].&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Meeting Details==&lt;br /&gt;
*Every Monday @ 11:00am Pacific Time (19:00 UTC)&lt;br /&gt;
*Mozilla HQ, Ten Forward commons area &lt;br /&gt;
{{conf|8600}}&lt;br /&gt;
*http://air.mozilla.org/ to watch and listen &lt;br /&gt;
*join irc.mozilla.org #airmozilla for backchannel discussion&lt;br /&gt;
*&#039;&#039;&#039;Presenters only&#039;&#039;&#039;: Vidyo room &amp;quot;Brownbags&amp;quot;.  Do &#039;&#039;not&#039;&#039; use this room if you&#039;re not planning to speak.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Agenda:&#039;&#039;&#039; [[WeeklyUpdates/{{#time: Y-m-d | monday}}|Next Week&#039;s Agenda]]&lt;br /&gt;
&lt;br /&gt;
When you call in, you&#039;ll be muted by default, to keep phone noise down. Use &amp;quot;*1&amp;quot; (including the star) to unmute yourself if you want to say something. &lt;br /&gt;
&lt;br /&gt;
Full notes below. &amp;lt;!-- See https://wiki.mozilla.org/WeeklyUpdates/Template for create new page --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Meeting Notes==&lt;br /&gt;
[[Template:WeeklyUpdates]] - &amp;lt;nowiki&amp;gt;{{subst:WeeklyUpdates}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;!--*[[WeeklyUpdates/Template]]--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Create a new weekly agenda from the [[Template:WeeklyUpdates|template]]:&lt;br /&gt;
&amp;lt;createbox&amp;gt;&lt;br /&gt;
align=left&lt;br /&gt;
type=create&lt;br /&gt;
preload=Template:WeeklyUpdates&lt;br /&gt;
default={{#time: Y-m-d | monday}}&lt;br /&gt;
prefix=WeeklyUpdates/&lt;br /&gt;
&amp;lt;/createbox&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable collapsible&amp;quot; style=&amp;quot;width: 100%&amp;quot;&lt;br /&gt;
! 2014   &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
*[[WeeklyUpdates/2014-08-11|August 11, 2014]]&lt;br /&gt;
*[[WeeklyUpdates/2014-08-04|August 4, 2014]]&lt;br /&gt;
*[[WeeklyUpdates/2014-07-28|July 28, 2014]]&lt;br /&gt;
*[[WeeklyUpdates/2014-07-21|July 21, 2014]]&lt;br /&gt;
*[[WeeklyUpdates/2014-07-14|July 14, 2014]]&lt;br /&gt;
*[[WeeklyUpdates/2014-07-07|July 7, 2014]]&lt;br /&gt;
*[[WeeklyUpdates/2014-06-30|June 30, 2014]]&lt;br /&gt;
*[[WeeklyUpdates/2014-06-23|June 23, 2014]]&lt;br /&gt;
*[[WeeklyUpdates/2014-06-16|June 16, 2014]]&lt;br /&gt;
*[[WeeklyUpdates/2014-06-09|June 09, 2014]]&lt;br /&gt;
*[[WeeklyUpdates/2014-06-02|June 02, 2014]]&lt;br /&gt;
*[[WeeklyUpdates/2014-05-26|May 26, 2014]]&lt;br /&gt;
*[[WeeklyUpdates/2014-05-19|May 19, 2014]]&lt;br /&gt;
*[[WeeklyUpdates/2014-05-12|May 12, 2014]]&lt;br /&gt;
*[[WeeklyUpdates/2014-05-05|May 05, 2014]]&lt;br /&gt;
*[[WeeklyUpdates/2014-04-28|April 28, 2014]]&lt;br /&gt;
*[[WeeklyUpdates/2014-04-21|April 21, 2014]]&lt;br /&gt;
*[[WeeklyUpdates/2014-04-14|April 14, 2014]]&lt;br /&gt;
*[[WeeklyUpdates/2014-04-07|April 7, 2014]]&lt;br /&gt;
*[[WeeklyUpdates/2014-03-31|March 31, 2014]]&lt;br /&gt;
*[[WeeklyUpdates/2014-03-24|March 24, 2014]]&lt;br /&gt;
*[[WeeklyUpdates/2014-03-17|March 17, 2014]]&lt;br /&gt;
*[[WeeklyUpdates/2014-03-10|March 10, 2014]]&lt;br /&gt;
*[[WeeklyUpdates/2014-03-03|March 3, 2014]]&lt;br /&gt;
*[[WeeklyUpdates/2014-02-24|February 24, 2014]]&lt;br /&gt;
*[[WeeklyUpdates/2014-02-10|February 10, 2014]]&lt;br /&gt;
*[[WeeklyUpdates/2014-02-03|February 3, 2014]]&lt;br /&gt;
*[[WeeklyUpdates/2014-01-27|January 27, 2014]]&lt;br /&gt;
*[[WeeklyUpdates/2014-01-20|January 20, 2014]]&lt;br /&gt;
*[[WeeklyUpdates/2014-01-13|January 13, 2014]]&lt;br /&gt;
*[[WeeklyUpdates/2014-01-06|January 6, 2014]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable collapsible collapsed&amp;quot; style=&amp;quot;width: 100%&amp;quot;&lt;br /&gt;
! 2013   &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
*[[WeeklyUpdates/2013-12-16|December 16, 2013]]&lt;br /&gt;
*[[WeeklyUpdates/2013-12-09|December 9, 2013]]&lt;br /&gt;
*[[WeeklyUpdates/2013-12-02|December 2, 2013]]&lt;br /&gt;
*[[WeeklyUpdates/2013-11-25|November 25, 2013]]&lt;br /&gt;
*[[WeeklyUpdates/2013-11-18|November 18, 2013]]&lt;br /&gt;
*[[WeeklyUpdates/2013-11-11|November 11, 2013]]&lt;br /&gt;
*[[WeeklyUpdates/2013-11-04|November 4, 2013]]&lt;br /&gt;
*[[WeeklyUpdates/2013-10-28|October 28, 2013]]&lt;br /&gt;
*[[WeeklyUpdates/2013-10-21|October 21, 2013]]&lt;br /&gt;
*[[WeeklyUpdates/2013-10-14|October 14, 2013]]&lt;br /&gt;
*[[WeeklyUpdates/2013-10-07|October 7, 2013]]&lt;br /&gt;
*[[WeeklyUpdates/2013-09-30|September 30, 2013]]&lt;br /&gt;
*[[WeeklyUpdates/2013-09-23|September 23, 2013]]&lt;br /&gt;
*[[WeeklyUpdates/2013-09-16|September 16, 2013]]&lt;br /&gt;
*[[WeeklyUpdates/2013-09-09|September 9, 2013]]&lt;br /&gt;
*[[WeeklyUpdates/2013-09-02|September 2, 2013]]&lt;br /&gt;
*[[WeeklyUpdates/2013-08-26|August 26, 2013]]&lt;br /&gt;
*[[WeeklyUpdates/2013-08-19|August 19, 2013]]&lt;br /&gt;
*[[WeeklyUpdates/2013-08-12|August 12, 2013]]&lt;br /&gt;
*[[WeeklyUpdates/2013-08-05|August 5, 2013]]&lt;br /&gt;
*[[WeeklyUpdates/2013-07-29|July 29, 2013]]&lt;br /&gt;
*[[WeeklyUpdates/2013-07-22|July 22, 2013]]&lt;br /&gt;
*[[WeeklyUpdates/2013-07-15|July 15, 2013]]&lt;br /&gt;
*[[WeeklyUpdates/2013-07-08|July 8, 2013]]&lt;br /&gt;
*[[WeeklyUpdates/2013-07-01|July 1, 2013]]&lt;br /&gt;
*[[WeeklyUpdates/2013-06-24|June 24, 2013]]&lt;br /&gt;
*[[WeeklyUpdates/2013-06-17|June 17, 2013]]&lt;br /&gt;
*[[WeeklyUpdates/2013-06-10|June 10, 2013]]&lt;br /&gt;
*[[WeeklyUpdates/2013-06-03|June 3, 2013]]&lt;br /&gt;
*[[WeeklyUpdates/2013-05-20|May 20, 2013]]&lt;br /&gt;
*[[WeeklyUpdates/2013-05-13|May 13, 2013]]&lt;br /&gt;
*[[WeeklyUpdates/2013-05-06|May 6, 2013]]&lt;br /&gt;
*[[WeeklyUpdates/2013-04-29|April 29, 2013]]&lt;br /&gt;
*[[WeeklyUpdates/2013-04-22|April 22, 2013]]&lt;br /&gt;
*[[WeeklyUpdates/2013-04-15|April 15, 2013]]&lt;br /&gt;
*[[WeeklyUpdates/2013-04-08|April 8, 2013]]&lt;br /&gt;
*[[WeeklyUpdates/2013-04-01|April 1, 2013]]&lt;br /&gt;
*[[WeeklyUpdates/2013-03-25|March 25, 2013]]&lt;br /&gt;
*[[WeeklyUpdates/2013-03-18|March 18, 2013]]&lt;br /&gt;
*[[WeeklyUpdates/2013-03-11|March 11, 2013]]&lt;br /&gt;
*[[WeeklyUpdates/2013-03-04|March 4, 2013]]&lt;br /&gt;
*[[WeeklyUpdates/2013-02-25|February 25, 2013]]&lt;br /&gt;
*February 18, 2013 - &#039;&#039;No meeting.&#039;&#039; &lt;br /&gt;
*[[WeeklyUpdates/2013-02-11|February 11, 2013]]&lt;br /&gt;
*[[WeeklyUpdates/2013-02-04|February 04, 2013]]&lt;br /&gt;
*[[WeeklyUpdates/2013-01-28|January 28, 2013]]&lt;br /&gt;
*[[WeeklyUpdates/2013-01-21|January 21, 2013]]&lt;br /&gt;
*[[WeeklyUpdates/2013-01-14|January 14, 2013]]&lt;br /&gt;
*[[WeeklyUpdates/2013-01-07|January 7, 2013]]&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable collapsible collapsed&amp;quot; style=&amp;quot;width: 100%&amp;quot;&lt;br /&gt;
! 2012   &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
*December 31, 2012 - &#039;&#039;No meeting.&#039;&#039;&lt;br /&gt;
*December 24, 2012 - &#039;&#039;No meeting.&#039;&#039;&lt;br /&gt;
*[[WeeklyUpdates/2012-12-17|December 17, 2012]]&lt;br /&gt;
*[[WeeklyUpdates/2012-12-10|December 10, 2012]]&lt;br /&gt;
*[[WeeklyUpdates/2012-12-03|December 03, 2012]]&lt;br /&gt;
*[[WeeklyUpdates/2012-11-26|November 26, 2012]]&lt;br /&gt;
*[[WeeklyUpdates/2012-11-19|November 19, 2012]]&lt;br /&gt;
*[[WeeklyUpdates/2012-11-12|November 12, 2012]]&lt;br /&gt;
*[[WeeklyUpdates/2012-11-05|November 5, 2012]]&lt;br /&gt;
*[[WeeklyUpdates/2012-10-29|October 29, 2012]]&lt;br /&gt;
*[[WeeklyUpdates/2012-10-22|October 22, 2012]]&lt;br /&gt;
*[[WeeklyUpdates/2012-10-15|October 15, 2012]]&lt;br /&gt;
*[[WeeklyUpdates/2012-10-08|October 8, 2012]]&lt;br /&gt;
*[[WeeklyUpdates/2012-10-01|October 1, 2012]]&lt;br /&gt;
*[[WeeklyUpdates/2012-09-24|September 24, 2012]]&lt;br /&gt;
*[[WeeklyUpdates/2012-09-17|September 17, 2012]]&lt;br /&gt;
*[[WeeklyUpdates/2012-09-10|September 10, 2012]]&lt;br /&gt;
*[[WeeklyUpdates/2012-08-27|August 27, 2012]]&lt;br /&gt;
*[[WeeklyUpdates/2012-08-20|August 20, 2012]]&lt;br /&gt;
*[[WeeklyUpdates/2012-08-13|August 13, 2012]]&lt;br /&gt;
*[[WeeklyUpdates/2012-08-06|August 06, 2012]]&lt;br /&gt;
*[[WeeklyUpdates/2012-07-30|July 30, 2012]]&lt;br /&gt;
*[[WeeklyUpdates/2012-07-23|July 23, 2012]]&lt;br /&gt;
*[[WeeklyUpdates/2012-07-16|July 16, 2012]]&lt;br /&gt;
*[[WeeklyUpdates/2012-07-09|July 9, 2012]]&lt;br /&gt;
*[[WeeklyUpdates/2012-07-02|July 2, 2012]]&lt;br /&gt;
*[[WeeklyUpdates/2012-06-25|June 25, 2012]]&lt;br /&gt;
*[[WeeklyUpdates/2012-06-18|June 18, 2012]]&lt;br /&gt;
*[[WeeklyUpdates/2012-06-11|June 11, 2012]]&lt;br /&gt;
*[[WeeklyUpdates/2012-06-04|June 4, 2012]]&lt;br /&gt;
*[[WeeklyUpdates/2012-05-28|May 28, 2012]]&lt;br /&gt;
*[[WeeklyUpdates/2012-05-21|May 21, 2012]]&lt;br /&gt;
*[[WeeklyUpdates/2012-05-14|May 14, 2012]]&lt;br /&gt;
*[[WeeklyUpdates/2012-05-07|May 7, 2012]]&lt;br /&gt;
*[[WeeklyUpdates/2012-04-30|April 30, 2012]]&lt;br /&gt;
*[[WeeklyUpdates/2012-04-23|April 23, 2012]]&lt;br /&gt;
*[[WeeklyUpdates/2012-04-16|April 16, 2012]]&lt;br /&gt;
*[[WeeklyUpdates/2012-04-09|April 9, 2012]]&lt;br /&gt;
*[[WeeklyUpdates/2012-04-02|April 2, 2012]]&lt;br /&gt;
*[[WeeklyUpdates/2012-03-26|March 26, 2012]]&lt;br /&gt;
*[[WeeklyUpdates/2012-03-19|March 19, 2012]]&lt;br /&gt;
*[[WeeklyUpdates/2012-03-12|March 12, 2012]]&lt;br /&gt;
*[[WeeklyUpdates/2012-03-05|March 5, 2012]]&lt;br /&gt;
*[[WeeklyUpdates/2012-02-27|February 27, 2012]]&lt;br /&gt;
*February 20, 2012 - &#039;&#039;No meeting.&#039;&#039;&lt;br /&gt;
*[[WeeklyUpdates/2012-02-13|February 13, 2012]]&lt;br /&gt;
*[[WeeklyUpdates/2012-02-06|February 6, 2012]]&lt;br /&gt;
*[[WeeklyUpdates/2012-01-30|January 30, 2012]]&lt;br /&gt;
*[[WeeklyUpdates/2012-01-23|January 23, 2012]]&lt;br /&gt;
*January 16, 2012 - &#039;&#039;No meeting.&#039;&#039;&lt;br /&gt;
*[[WeeklyUpdates/2012-01-09|January 9, 2012]]&lt;br /&gt;
*January 2, 2012 - &#039;&#039;No meeting.&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable collapsible collapsed&amp;quot; style=&amp;quot;width: 100%&amp;quot;&lt;br /&gt;
! 2011   &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
*December 26, 2011 - &#039;&#039;No meeting.&#039;&#039;&lt;br /&gt;
*[[WeeklyUpdates/2011-12-19|December 19, 2011]]&lt;br /&gt;
*[[WeeklyUpdates/2011-12-12|December 12, 2011]]&lt;br /&gt;
*[[WeeklyUpdates/2011-12-05|December 5, 2011]]&lt;br /&gt;
*[[WeeklyUpdates/2011-11-28|November 28, 2011]]&lt;br /&gt;
*[[WeeklyUpdates/2011-11-21|November 21, 2011]]&lt;br /&gt;
*[[WeeklyUpdates/2011-11-14|November 14, 2011]]&lt;br /&gt;
*[[WeeklyUpdates/2011-11-07|November 7, 2011]]&lt;br /&gt;
*[[WeeklyUpdates/2011-10-31|October 31, 2011]]&lt;br /&gt;
*[[WeeklyUpdates/2011-10-24|October 24, 2011]]&lt;br /&gt;
*[[WeeklyUpdates/2011-10-17|October 17, 2011]]&lt;br /&gt;
*[[WeeklyUpdates/2011-10-10|October 10, 2011]]&lt;br /&gt;
*[[WeeklyUpdates/2011-10-03|October 3, 2011]]&lt;br /&gt;
*[[WeeklyUpdates/2011-09-27|September 26, 2011]]&lt;br /&gt;
*[[WeeklyUpdates/2011-09-19|September 19, 2011]]&lt;br /&gt;
*September 12, 2011 - &#039;&#039;No meeting due to All-Hands week.&#039;&#039;&lt;br /&gt;
*September 5, 2011 - &#039;&#039;No meeting due to US holiday.&#039;&#039;&lt;br /&gt;
*[[WeeklyUpdates/2011-08-29|August 29, 2011]]&lt;br /&gt;
*[[WeeklyUpdates/2011-08-22|August 22, 2011]]&lt;br /&gt;
*[[WeeklyUpdates/2011-08-15|August 15, 2011]]&lt;br /&gt;
*[[WeeklyUpdates/2011-08-08|August 8, 2011]]&lt;br /&gt;
*[[WeeklyUpdates/2011-08-01|August 1, 2011]]&lt;br /&gt;
*[[WeeklyUpdates/2011-07-25|July 25, 2011]]&lt;br /&gt;
*[[WeeklyUpdates/2011-07-18|July 18, 2011]]&lt;br /&gt;
*[[WeeklyUpdates/2011-07-11|July 11, 2011]]&lt;br /&gt;
*July 4, 2011 - &#039;&#039;No meeting due to US holiday.&#039;&#039;&lt;br /&gt;
*[[WeeklyUpdates/2011-06-27|June 27, 2011]]&lt;br /&gt;
*[[WeeklyUpdates/2011-06-20|June 20, 2011]]&lt;br /&gt;
*[[WeeklyUpdates/2011-06-13|June 13, 2011]]&lt;br /&gt;
*[[WeeklyUpdates/2011-06-06|June 6, 2011]]&lt;br /&gt;
*May 30, 2011 - &#039;&#039;No meeting due to US holiday.&#039;&#039;&lt;br /&gt;
*[[WeeklyUpdates/2011-05-23|May 23, 2011]]&lt;br /&gt;
*[[WeeklyUpdates/2011-05-16|May 16, 2011]]&lt;br /&gt;
*[[WeeklyUpdates/2011-05-09|May 9, 2011]]&lt;br /&gt;
*[[WeeklyUpdates/2011-05-02|May 2, 2011]]&lt;br /&gt;
*[[WeeklyUpdates/2011-04-25|April 25, 2011]]&lt;br /&gt;
*[[WeeklyUpdates/2011-04-18|April 18, 2011]]&lt;br /&gt;
*[[WeeklyUpdates/2011-04-11|April 11, 2011]]&lt;br /&gt;
*April 4, 2011 - &#039;&#039;No meeting due to All-Hands week.&#039;&#039;&lt;br /&gt;
*[[WeeklyUpdates/2011-03-28|March 28, 2011]]&lt;br /&gt;
*[[WeeklyUpdates/2011-03-21|March 21, 2011]]&lt;br /&gt;
*[[WeeklyUpdates/2011-03-14|March 14, 2011]]&lt;br /&gt;
*[[WeeklyUpdates/2011-03-07|March 7, 2011]]&lt;br /&gt;
*[[WeeklyUpdates/2011-02-28|February 28, 2011]]&lt;br /&gt;
*February 21, 2011 - &#039;&#039;No meeting due to US holiday.&#039;&#039;&lt;br /&gt;
*[[WeeklyUpdates/2011-02-14|February 14, 2011]]&lt;br /&gt;
*[[WeeklyUpdates/2011-02-07|February 07, 2011]]&lt;br /&gt;
*[[WeeklyUpdates/2011-01-31|January 31, 2011]]&lt;br /&gt;
*[[WeeklyUpdates/2011-01-24|January 24, 2011]]&lt;br /&gt;
*January 17, 2011 - &#039;&#039;No meeting due to US holiday.&#039;&#039;&lt;br /&gt;
*[[WeeklyUpdates/2011-01-10|January 10, 2011]]&lt;br /&gt;
*[[WeeklyUpdates/2011-01-03|January 3, 2011]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable collapsible collapsed&amp;quot; style=&amp;quot;width: 100%&amp;quot;&lt;br /&gt;
! 2010   &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
*December 27, 2010 - &#039;&#039;No meeting due to holiday season.&#039;&#039;&lt;br /&gt;
*[[WeeklyUpdates/2010-12-20|December 20, 2010]]&lt;br /&gt;
*December 13, 2010 - &#039;&#039;No meeting due to Work Week&#039;&#039;&lt;br /&gt;
*[[WeeklyUpdates/2010-12-06|December 6, 2010]]&lt;br /&gt;
*[[WeeklyUpdates/2010-11-29|November 29, 2010]]&lt;br /&gt;
*[[WeeklyUpdates/2010-11-22|November 22, 2010]]&lt;br /&gt;
*[[WeeklyUpdates/2010-11-15|November 15, 2010]]&lt;br /&gt;
*[[WeeklyUpdates/2010-11-08|November 08, 2010]]&lt;br /&gt;
*[[WeeklyUpdates/2010-11-01|November 01, 2010]]&lt;br /&gt;
*[[WeeklyUpdates/2010-10-25|October 25, 2010]]&lt;br /&gt;
*[[WeeklyUpdates/2010-10-18|October 18, 2010]]&lt;br /&gt;
*[[WeeklyUpdates/2010-10-11|October 11, 2010]]&lt;br /&gt;
*[[WeeklyUpdates/2010-10-04|October 4, 2010]]&lt;br /&gt;
*[[WeeklyUpdates/2010-09-27|September 27, 2010]]&lt;br /&gt;
*[[WeeklyUpdates/2010-09-20|September 20, 2010]]&lt;br /&gt;
*[[WeeklyUpdates/2010-09-13|September 13, 2010]]&lt;br /&gt;
*September 6, 2010 - &#039;&#039;No meeting due to US holiday&#039;&#039;&lt;br /&gt;
*[[WeeklyUpdates/2010-08-30|August 30, 2010]]&lt;br /&gt;
*[[WeeklyUpdates/2010-08-23|August 23, 2010]]&lt;br /&gt;
*[[WeeklyUpdates/2010-08-16|August 16, 2010]]&lt;br /&gt;
*[[WeeklyUpdates/2010-08-09|August 9, 2010]]&lt;br /&gt;
*[[WeeklyUpdates/2010-08-02|August 2, 2010]]&lt;br /&gt;
*[[WeeklyUpdates/2010-07-26|July 26, 2010]]&lt;br /&gt;
*[[WeeklyUpdates/2010-07-19|July 19, 2010]]&lt;br /&gt;
*[[WeeklyUpdates/2010-07-12|July 12, 2010]]&lt;br /&gt;
*July 5, 2010 - &#039;&#039;No meeting due to summit&#039;&#039;&lt;br /&gt;
*[[WeeklyUpdates/2010-06-28|June 28, 2010]]&lt;br /&gt;
*[[WeeklyUpdates/2010-06-21|June 21, 2010]]&lt;br /&gt;
*[[WeeklyUpdates/2010-06-14|June 14, 2010]]&lt;br /&gt;
*[[WeeklyUpdates/2010-06-07|June 7, 2010]]&lt;br /&gt;
*May 31, 2010 - &#039;&#039;No meeting due to US holiday&#039;&#039;&lt;br /&gt;
*[[WeeklyUpdates/2010-05-24|May 24, 2010]]&lt;br /&gt;
*[[WeeklyUpdates/2010-05-17|May 17, 2010]]&lt;br /&gt;
*[[WeeklyUpdates/2010-05-10|May 10, 2010]]&lt;br /&gt;
*[[WeeklyUpdates/2010-05-03|May 03, 2010]]&lt;br /&gt;
*[[WeeklyUpdates/2010-04-26|April 26, 2010]]&lt;br /&gt;
*[[WeeklyUpdates/2010-04-19|April 19, 2010]]&lt;br /&gt;
*[[WeeklyUpdates/2010-04-12|April 12, 2010]]&lt;br /&gt;
*[[WeeklyUpdates/2010-04-05|April 5, 2010]]&lt;br /&gt;
*[[WeeklyUpdates/2010-03-29|March 29, 2010]]&lt;br /&gt;
*[[WeeklyUpdates/2010-03-22|March 22, 2010]]&lt;br /&gt;
*[[WeeklyUpdates/2010-03-15|March 15, 2010]]&lt;br /&gt;
*[[WeeklyUpdates/2010-03-08|March 8, 2010]]&lt;br /&gt;
*[[WeeklyUpdates/2010-03-01|March 1, 2010]]&lt;br /&gt;
*[[WeeklyUpdates/2010-02-22|February 22, 2010]] &lt;br /&gt;
*[[WeeklyUpdates/2010-02-15|February 15, 2010]]- No meeting due to holiday, please leave updates in the wiki.&lt;br /&gt;
*[[WeeklyUpdates/2010-02-08|February 8, 2010]] &lt;br /&gt;
*[[WeeklyUpdates/2010-02-01|February 1, 2010]]&lt;br /&gt;
*[[WeeklyUpdates/2010-01-25|January 25, 2010]]&lt;br /&gt;
*[[WeeklyUpdates/2010-01-18|January 18, 2010]]- No meeting due to US holiday, please leaves updates in the wiki.&lt;br /&gt;
*[[WeeklyUpdates/2010-01-11|January 11, 2010]]- First meeting using [[WeeklyUpdates/Guidance|new procedures]].&lt;br /&gt;
*[[WeeklyUpdates/2010-01-04|January 04, 2010]] &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable collapsible collapsed&amp;quot; style=&amp;quot;width: 100%&amp;quot;&lt;br /&gt;
! 2009   &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
*[[WeeklyUpdates/2009-12-28|December 28, 2009]]- No meeting due to holiday. Feel free to leave updates in the Wiki. &lt;br /&gt;
*[[WeeklyUpdates/2009-12-21|December 21, 2009]] &lt;br /&gt;
*[[WeeklyUpdates/2009-12-14|December 14, 2009]] &lt;br /&gt;
*[[WeeklyUpdates/2009-12-07|December 07, 2009]]- No meeting due to all day Mozilla Corp meetings. Feel free to leave updates in the Wiki. &lt;br /&gt;
*[[WeeklyUpdates/2009-11-30|November 30, 2009]] &lt;br /&gt;
*[[WeeklyUpdates/2009-11-23|November 23, 2009]] &lt;br /&gt;
*[[WeeklyUpdates/2009-11-16|November 16, 2009]] &lt;br /&gt;
*[[WeeklyUpdates/2009-11-09|November 09, 2009]] &lt;br /&gt;
*[[WeeklyUpdates/2009-11-02|November 02, 2009]] - Time Change! 19:00 UTC (11am PST) &lt;br /&gt;
*[[WeeklyUpdates/2009-10-26|October 26, 2009]] &lt;br /&gt;
*[[WeeklyUpdates/2009-10-19|October 19, 2009]] &lt;br /&gt;
*[[WeeklyUpdates/2009-10-12|October 12, 2009]] &lt;br /&gt;
*[[WeeklyUpdates/2009-10-05|October 05, 2009]] &lt;br /&gt;
*[[WeeklyUpdates/2009-09-28|September 28, 2009]] &lt;br /&gt;
*[[WeeklyUpdates/2009-09-21|September 21, 2009]] &lt;br /&gt;
*[[WeeklyUpdates/2009-09-14|September 14, 2009]] &lt;br /&gt;
*[[WeeklyUpdates/2009-09-07|September 07, 2009]] - No Meeting due to [http://en.wikipedia.org/wiki/Labor_Day Labor Day] Holiday &lt;br /&gt;
*[[WeeklyUpdates/2009-08-31|August 31, 2009]] &lt;br /&gt;
*[[WeeklyUpdates/2009-08-24|August 24, 2009]] &lt;br /&gt;
*[[WeeklyUpdates/2009-08-17|August 17, 2009]] &lt;br /&gt;
*[[WeeklyUpdates/2009-08-10|August 10, 2009]] &lt;br /&gt;
*[[WeeklyUpdates/2009-08-03|August 03, 2009]] &lt;br /&gt;
*[[WeeklyUpdates/2009-07-27|July 27, 2009]] &lt;br /&gt;
*[[WeeklyUpdates/2009-07-20|July 20, 2009]] &lt;br /&gt;
*[[WeeklyUpdates/2009-07-13|July 13, 2009]] &lt;br /&gt;
*[[WeeklyUpdates/2009-07-06|July 06, 2009]] &lt;br /&gt;
*[[WeeklyUpdates/2009-06-29|June 29, 2009]] &lt;br /&gt;
*[[WeeklyUpdates/2009-06-22|June 22, 2009]] &lt;br /&gt;
*[[WeeklyUpdates/2009-06-15|June 15, 2009]] &lt;br /&gt;
*[[WeeklyUpdates/2009-06-08|June 08, 2009]] &lt;br /&gt;
*[[WeeklyUpdates/2009-06-01|June 01, 2009]] &lt;br /&gt;
*[[WeeklyUpdates/2009-05-25|May 25, 2009]] - No meeting due to US Holiday: [http://en.wikipedia.org/wiki/Memorial_day Memorial Day]. Feel free to leave status! &lt;br /&gt;
*[[WeeklyUpdates/2009-05-18|May 18, 2009]] &lt;br /&gt;
*[[WeeklyUpdates/2009-05-11|May 11, 2009]] &lt;br /&gt;
*[[WeeklyUpdates/2009-05-04|May 04, 2009]] &lt;br /&gt;
*April 27, 2009 - no update meeting this week due to on-site event &lt;br /&gt;
*[[WeeklyUpdates/2009-04-20|April 20, 2009]] &lt;br /&gt;
*[[WeeklyUpdates/2009-04-13|April 13, 2009]] &lt;br /&gt;
*[[WeeklyUpdates/2009-04-06|April 06, 2009]] &lt;br /&gt;
*[[WeeklyUpdates/2009-03-30|March 30, 2009]] &lt;br /&gt;
*[[WeeklyUpdates/2009-03-23|March 23, 2009]] &lt;br /&gt;
*[[WeeklyUpdates/2009-03-16|March 16, 2009]] &lt;br /&gt;
*[[WeeklyUpdates/2009-03-09|March 09, 2009]] &lt;br /&gt;
*[[WeeklyUpdates/2009-03-02|March 02, 2009]] &lt;br /&gt;
*[[WeeklyUpdates/2009-02-23|February 23, 2009]] &lt;br /&gt;
*February 16, 2009 - No Meeting due to US Holiday &lt;br /&gt;
*[[WeeklyUpdates/2009-02-09|February 09, 2009]] &lt;br /&gt;
*[[WeeklyUpdates/2009-02-02|February 02, 2009]] &lt;br /&gt;
*[[WeeklyUpdates/2009-01-26|January 26, 2009]] &lt;br /&gt;
*January 19, 2009 - No Meeting due to US Holiday &lt;br /&gt;
*[[WeeklyUpdates/2009-01-12|January 12, 2009]] &lt;br /&gt;
*[[WeeklyUpdates/2009-01-05|January 05, 2009]] &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable collapsible collapsed&amp;quot; style=&amp;quot;width: 100%&amp;quot;&lt;br /&gt;
! 2008   &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
*[[WeeklyUpdates/2008-12-29|December 29, 2008]] &lt;br /&gt;
*[[WeeklyUpdates/2008-12-22|December 22, 2008]] &lt;br /&gt;
*[[WeeklyUpdates/2008-12-15|December 15, 2008]] &lt;br /&gt;
*[[WeeklyUpdates/2008-12-08|December 08, 2008]] &lt;br /&gt;
*[[WeeklyUpdates/2008-12-01|December 01, 2008]] &lt;br /&gt;
*[[WeeklyUpdates/2008-11-24|November 24, 2008]] &lt;br /&gt;
*[[WeeklyUpdates/2008-11-17|November 17, 2008]] &lt;br /&gt;
*[[WeeklyUpdates/2008-11-10|November 10, 2008]] &lt;br /&gt;
*[[WeeklyUpdates/2008-11-03|November 03, 2008]] &lt;br /&gt;
*[[WeeklyUpdates/2008-10-27|October 27, 2008]] &lt;br /&gt;
*[[WeeklyUpdates/2008-10-20|October 20, 2008]] &lt;br /&gt;
*[[WeeklyUpdates/2008-10-13|October 13, 2008]] &lt;br /&gt;
*[[WeeklyUpdates/2008-10-06|October 06, 2008]] &lt;br /&gt;
*[[WeeklyUpdates/2008-09-29|September 29, 2008]] &lt;br /&gt;
*[[WeeklyUpdates/2008-09-22|September 22, 2008]] &lt;br /&gt;
*[[WeeklyUpdates/2008-09-15|September 15, 2008]] &lt;br /&gt;
*[[WeeklyUpdates/2008-09-08|September 08, 2008]] &lt;br /&gt;
*September 01, 2008 - No Meeting due to US Holiday &lt;br /&gt;
*[[WeeklyUpdates/2008-08-25|August 25, 2008]] &lt;br /&gt;
*[[WeeklyUpdates/2008-08-18|August 18, 2008]] &lt;br /&gt;
*[[WeeklyUpdates/2008-08-11|August 11, 2008]] &lt;br /&gt;
*[[WeeklyUpdates/2008-08-04|August 04, 2008]] &lt;br /&gt;
*July 28, 2008 - No Meeting due to Summit &lt;br /&gt;
*[[WeeklyUpdates/2008-07-21|July 21, 2008]] &lt;br /&gt;
*[[WeeklyUpdates/2008-07-14|July 14, 2008]] &lt;br /&gt;
*[[WeeklyUpdates/2008-07-07|July 07, 2008]] &lt;br /&gt;
*[[WeeklyUpdates/2008-06-30|June 30, 2008]] &lt;br /&gt;
*[[WeeklyUpdates/2008-06-23|June 23, 2008]] &lt;br /&gt;
*[[WeeklyUpdates/2008-06-16|June 16, 2008]] &lt;br /&gt;
*[[WeeklyUpdates/2008-06-09|June 09, 2008]] &lt;br /&gt;
*[[WeeklyUpdates/2008-06-02|June 02, 2008]] &lt;br /&gt;
*May 26, 2008 - No Meeting due to US Holiday &lt;br /&gt;
*[[WeeklyUpdates/2008-05-19|May 19, 2008]] &lt;br /&gt;
*[[WeeklyUpdates/2008-05-12|May 12, 2008]] &lt;br /&gt;
*[[WeeklyUpdates/2008-05-05|May 05, 2008]] &lt;br /&gt;
*[[WeeklyUpdates/2008-04-28|April 28, 2008]] &lt;br /&gt;
*[[WeeklyUpdates/2008-04-21|April 21, 2008]] &lt;br /&gt;
*[[WeeklyUpdates/2008-04-14|April 14, 2008]] &lt;br /&gt;
*[[WeeklyUpdates/2008-04-07|April 07, 2008]] &lt;br /&gt;
*[[WeeklyUpdates/2008-03-31|March 31, 2008]] &lt;br /&gt;
*[[WeeklyUpdates/2008-03-24|March 24, 2008]] &lt;br /&gt;
*[[WeeklyUpdates/2008-03-17|March 17, 2008]] &lt;br /&gt;
*[[WeeklyUpdates/2008-03-10|March 10, 2008]] &lt;br /&gt;
*[[WeeklyUpdates/2008-03-03|March 03, 2008]] &lt;br /&gt;
*[[WeeklyUpdates/2008-02-25|February 25, 2008]] &lt;br /&gt;
*February 18, 2008 - No Meeting due to US Holiday &lt;br /&gt;
*[[WeeklyUpdates/2008-02-11|February 11, 2008]] &lt;br /&gt;
*[[WeeklyUpdates/2008-02-04|February 04, 2008]] &lt;br /&gt;
*[[WeeklyUpdates/2008-01-28|January 28, 2008]] &lt;br /&gt;
*January 21, 2008 - No Meeting due to US Holiday &lt;br /&gt;
*[[WeeklyUpdates/2008-01-14|January 14, 2008]] &lt;br /&gt;
*[[WeeklyUpdates/2008-01-07|January 07, 2008]] &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable collapsible collapsed&amp;quot; style=&amp;quot;width: 100%&amp;quot;&lt;br /&gt;
! 2007   &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
*December 31, 2007 - No Meeting due to US holiday season &lt;br /&gt;
*December 24, 2007 - No Meeting due to US holiday season &lt;br /&gt;
*[[WeeklyUpdates/2007-12-17|December 17, 2007]] &lt;br /&gt;
*[[WeeklyUpdates/2007-12-10|December 10, 2007]] &lt;br /&gt;
*[[WeeklyUpdates/2007-12-03|December 03, 2007]] &lt;br /&gt;
*[[WeeklyUpdates/2007-11-26|November 26, 2007]] &lt;br /&gt;
*[[WeeklyUpdates/2007-11-19|November 19, 2007]] &lt;br /&gt;
*November 12, 2007 - No Meeting due to US Holiday &lt;br /&gt;
*[[WeeklyUpdates/2007-11-05|November 05, 2007]] &lt;br /&gt;
*[[WeeklyUpdates/2007-10-29|October 29, 2007]] &lt;br /&gt;
*[[WeeklyUpdates/2007-10-22|October 22, 2007]] &lt;br /&gt;
*[[WeeklyUpdates/2007-10-15|October 15, 2007]] &lt;br /&gt;
*[[WeeklyUpdates/2007-10-08|October 08, 2007]] &lt;br /&gt;
*[[WeeklyUpdates/2007-10-01|October 01, 2007]] &lt;br /&gt;
*[[WeeklyUpdates/2007-09-24|September 24, 2007]] &lt;br /&gt;
*[[WeeklyUpdates/2007-09-17|September 17, 2007]] &lt;br /&gt;
*[[WeeklyUpdates/2007-09-10|September 10, 2007]] &lt;br /&gt;
*[[WeeklyUpdates/2007-08-27|August 27, 2007]] &lt;br /&gt;
*[[WeeklyUpdates/2007-08-20|August 20, 2007]] &lt;br /&gt;
*[[WeeklyUpdates/2007-08-13|August 13, 2007]] &lt;br /&gt;
*[[WeeklyUpdates/2007-08-06|August 6, 2007]] &lt;br /&gt;
*[[WeeklyUpdates/2007-07-30|July 30, 2007]] &lt;br /&gt;
*[[WeeklyUpdates/2007-07-23|July 23, 2007]] &lt;br /&gt;
*[[WeeklyUpdates/2007-07-16|July 16, 2007]] &lt;br /&gt;
*[[WeeklyUpdates/2007-07-09|July 9, 2007]] &lt;br /&gt;
*[[WeeklyUpdates/2007-07-02|July 2, 2007]] &lt;br /&gt;
*[[WeeklyUpdates/2007-06-25|June 25, 2007]] &lt;br /&gt;
*[[WeeklyUpdates/2007-06-18|June 18, 2007]] &lt;br /&gt;
*[[WeeklyUpdates/2007-06-11|June 11, 2007]] &lt;br /&gt;
*[[WeeklyUpdates/2007-06-04|June 4, 2007]] &lt;br /&gt;
*[[WeeklyUpdates/2007-05-21|May 21, 2007]] &lt;br /&gt;
*[[WeeklyUpdates/2007-05-14|May 14, 2007]] &lt;br /&gt;
*[[WeeklyUpdates/2007-05-07|May 7, 2007]] &lt;br /&gt;
*[[WeeklyUpdates/2007-04-30|April 30, 2007]] &lt;br /&gt;
*[[WeeklyUpdates/2007-04-23|April 23, 2007]] &lt;br /&gt;
*[[WeeklyUpdates/2007-04-16|April 16, 2007]] &lt;br /&gt;
*[[WeeklyUpdates/2007-04-09|April 9, 2007]] &lt;br /&gt;
*[[WeeklyUpdates/2007-04-02|April 2, 2007]] &lt;br /&gt;
*[[WeeklyUpdates/2007-03-26|March 26, 2007]] &lt;br /&gt;
*[[WeeklyUpdates/2007-03-19|March 19, 2007]] &lt;br /&gt;
*[[WeeklyUpdates/2007-03-12|March 12, 2007]] &lt;br /&gt;
*[[WeeklyUpdates/2007-03-05|March 5, 2007]] &lt;br /&gt;
*[[WeeklyUpdates/2007-02-26|February 26, 2007]] &lt;br /&gt;
*[[WeeklyUpdates/2007-02-12|February 12, 2007]] &lt;br /&gt;
*[[WeeklyUpdates/2007-02-05|February 5, 2007]] &lt;br /&gt;
*[[WeeklyUpdates/2007-01-29|January 29, 2007]] &lt;br /&gt;
*[[WeeklyUpdates/2007-01-22|January 22, 2007]] &lt;br /&gt;
*[[WeeklyUpdates/2007-01-08|January 08, 2007]] &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable collapsible collapsed&amp;quot; style=&amp;quot;width: 100%&amp;quot;&lt;br /&gt;
! 2006   &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
*[[WeeklyUpdates/2006-12-18|December 18, 2006]] &lt;br /&gt;
*[[WeeklyUpdates/2006-12-11|December 11, 2006]] &lt;br /&gt;
*[[WeeklyUpdates/2006-12-04|December 4, 2006]] &lt;br /&gt;
*[[WeeklyUpdates/2006-11-27|November 27, 2006]] &lt;br /&gt;
*[[WeeklyUpdates/2006-11-13|November 13, 2006]] &lt;br /&gt;
*[[WeeklyUpdates/2006-11-06|November 6, 2006]] &lt;br /&gt;
*[[WeeklyUpdates/2006-10-30|October 30, 2006]] &lt;br /&gt;
*[[WeeklyUpdates/2006-10-23|October 23, 2006]] &lt;br /&gt;
*[[WeeklyUpdates/2006-10-16|October 16, 2006]] &lt;br /&gt;
*[[WeeklyUpdates/2006-10-09|October 9, 2006]] &lt;br /&gt;
*[[WeeklyUpdates/2006-10-02|October 2, 2006]] &lt;br /&gt;
*[[WeeklyUpdates/2006-09-25|September 25, 2006]] &lt;br /&gt;
*[[WeeklyUpdates/2006-09-18|September 18, 2006]] &lt;br /&gt;
*[[WeeklyUpdates/2006-09-11|September 11, 2006]] &lt;br /&gt;
*September 4, 2006 - No Meeting due to US and Canadian Holiday &lt;br /&gt;
*[[WeeklyUpdates/2006-08-28|August 28, 2006]] &lt;br /&gt;
*[[WeeklyUpdates/2006-08-21|August 21, 2006]] &lt;br /&gt;
*[[WeeklyUpdates/2006-08-14|August 14, 2006]] &lt;br /&gt;
*[[WeeklyUpdates/2006-08-07|August 07, 2006]] &lt;br /&gt;
*[[WeeklyUpdates/2006-07-31|July 31, 2006]] &lt;br /&gt;
*[[WeeklyUpdates/2006-07-24|July 24, 2006]] &lt;br /&gt;
*[[WeeklyUpdates/2006-07-17|July 17, 2006]] &lt;br /&gt;
*[[WeeklyUpdates/2006-07-10|July 10, 2006]] &lt;br /&gt;
*July 3, 2006 - No Meeting due to US Holiday &lt;br /&gt;
*June 26, 2006 - No Meeting &lt;br /&gt;
*[[WeeklyUpdates/2006-06-19|June 19, 2006]] &lt;br /&gt;
*[[WeeklyUpdates/2006-06-12|June 12, 2006]] &lt;br /&gt;
*[[WeeklyUpdates/2006-06-05|June 05, 2006]] &lt;br /&gt;
*May 29, 2006 -- No Meeting due to US Holiday &lt;br /&gt;
*[[WeeklyUpdates/2006-05-22|May 22, 2006]] &lt;br /&gt;
*May 15, 2006 -- No Meeting due to XTech 2006 Conference &lt;br /&gt;
*[[WeeklyUpdates/2006-05-08|May 08, 2006]] &lt;br /&gt;
*[[WeeklyUpdates/2006-05-01|May 01, 2006]] &lt;br /&gt;
*[[WeeklyUpdates/2006-04-24|April 24, 2006]] &lt;br /&gt;
*[[WeeklyUpdates/2006-04-17|April 17, 2006]] &lt;br /&gt;
*[[WeeklyUpdates/2006-04-10|April 10, 2006]] &lt;br /&gt;
*[[WeeklyUpdates/2006-04-03|April 03, 2006]] &lt;br /&gt;
*[[WeeklyUpdates/2006-03-27|March 27, 2006]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Note: Older [http://www-archive.mozilla.org/status/minutes.html meeting minutes] and [http://www-archive.mozilla.org/status/ status updates] are available on the www.mozilla.org archive site.&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Rillian</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Firefox_OS/TCP/Flashing_your_device/&amp;diff=1003315</id>
		<title>Firefox OS/TCP/Flashing your device/</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Firefox_OS/TCP/Flashing_your_device/&amp;diff=1003315"/>
		<updated>2014-08-06T16:32:39Z</updated>

		<summary type="html">&lt;p&gt;Rillian: /* Flashing Your Device */ Clarify udev vendor id meanings.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;note error&amp;quot;&amp;gt;These instructions are being tested. Please report successes or issues with them in the #TCP IRC channel.&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Notes About Terminology====&lt;br /&gt;
* Firefox OS is frequently referred to by its code name (and original name) &#039;&#039;B2G&#039;&#039;.  &lt;br /&gt;
* The files we use to flash the device are referred to as images, [http://en.wikipedia.org/wiki/Read-only_memory ROMs] or builds.&lt;br /&gt;
* The proper abbreviation for Firefox OS is &#039;&#039;FxOS&#039;&#039;.&lt;br /&gt;
* The process of [http://en.wikipedia.org/wiki/Flashing_%28technology%29 &#039;&#039;flashing&#039;&#039;] refers to writing the ROMs to the device to update the operating system to a different version.&lt;br /&gt;
* &#039;&#039;Flatfish&#039;&#039; is the code name we use to refer to the 10&amp;quot; tablets being tested.&lt;br /&gt;
==Flashing Your Device==&lt;br /&gt;
&amp;lt;div class=&amp;quot;note error&amp;quot;&amp;gt;If you have not flashed the [https://wiki.mozilla.org/FirefoxOS/TCP/Flashing_the_Flatfish_bootloader updated bootloader], please do so before flashing a new build.&amp;lt;/div&amp;gt;&lt;br /&gt;
Before beginning, it is best if your device is not almost dead (if the battery&#039;s red, it&#039;s almost dead).&lt;br /&gt;
* Download the build you would like to flash.&lt;br /&gt;
** Check the [https://etherpad.mozilla.org/CmJbD8V0QX build status page] to see if there are notes about major issues with the listed builds.&lt;br /&gt;
** If none of the listed builds are viable (&amp;quot;good&amp;quot;), choose the build in the &#039;&#039;stable&#039;&#039; folder.&lt;br /&gt;
** Download the build files [https://www.dropbox.com/sh/b2py1btcwstqldl/AABblbq_csa1IHQwdvLdfptTa from dropbox]. Only builds from the last seven days (and the stable build) are available.&lt;br /&gt;
** Using the &#039;&#039;Download&#039;&#039; (as zip) option will save time and make for a much smaller download. [[File:dropbox_download_button.png]]&lt;br /&gt;
* Extract [http://test1.manichord.com/moz-tcp/ADB-Fastboot-and-Scripts.zip this file] into the &#039;&#039;&#039;same&#039;&#039;&#039; folder as your build files.&lt;br /&gt;
* &#039;&#039;Windows users&#039;&#039;: If you have not installed Android USB drivers previously, you likely need to follow [https://wiki.mozilla.org/FirefoxOS/TCP/Installing_USB_Drivers_on_Windows these directions] to do so.  If you do not and receive the error &amp;lt;code&amp;gt;device not found&amp;lt;/code&amp;gt; you&#039;ll need to install them.&lt;br /&gt;
* &#039;&#039;Linux users&#039;&#039;: If you have not, you need to [https://developer.mozilla.org/en-US/Firefox_OS/Firefox_OS_build_prerequisites#For_Linux.3A_configure_the_udev_rule_for_your_phone add udev rules] for the device. Use idVendor &#039;&#039;&#039;18d1&#039;&#039;&#039; (the tablet) and &#039;&#039;&#039;0bb4&#039;&#039;&#039; (for fastboot) That&#039;s &#039;&#039;two&#039;&#039; separate rules. You may also want to add a rule for 1f3a:efe8 which is the FEL mode for bootloader reflashing, but currently there&#039;s no linux solution for that.&lt;br /&gt;
* Turn on your device and plug it in to your computer via the USB cord.&lt;br /&gt;
* Run the &#039;&#039;flash&#039;&#039; file.&lt;br /&gt;
** On Windows the file will be called &#039;&#039;&#039;flash&#039;&#039;&#039; or &#039;&#039;&#039;flash.bat&#039;&#039;&#039; (if you have file extensions unhidden). The icon may have gears in it.&lt;br /&gt;
** On Linux the file will be called &#039;&#039;&#039;flash-flatfish.sh&#039;&#039;&#039;&lt;br /&gt;
*** Ensure you have proper permissions to run it&lt;br /&gt;
*** On Linux you must pass the location (path) of the image files as an argument (&#039;&#039;&amp;lt;div style=&amp;quot;display:inline; color:blue&amp;quot;&amp;gt;./flash-flatfish.sh .&amp;lt;/div&amp;gt;&#039;&#039; should work if the files are in the same directory)&lt;br /&gt;
* You should then be asked if you want to flash user data.  Saying yes will clear any user data such as apps you have installed and emails.  Data stored on an SD Card will survive. &amp;lt;br&amp;gt;If you are moving between a major version of FxOS (e.g. 1.4 -&amp;gt; 2.0 or 2.0 -&amp;gt; 1.4) we recommend that you choose to flash the user data (thereby deleting it).&lt;br /&gt;
* After making your userdata selection the tablet will reboot into &amp;quot;fastboot&amp;quot; mode and display the Firefox OS logo.  In the command window, if you see &amp;lt;code&amp;gt;&amp;lt; waiting for device &amp;gt;&amp;lt;/code&amp;gt; for longer than 30 seconds, try unplugging the USB cord from your computer and plugging it back in.&lt;br /&gt;
* The flash will take a few minutes and the screen may display random colors. Do not unplug, disturb or mock the device during this time.&lt;br /&gt;
* Once finished, press any key to reboot the tablet.&lt;/div&gt;</summary>
		<author><name>Rillian</name></author>
	</entry>
	<entry>
		<id>https://wiki.mozilla.org/index.php?title=Firefox_OS/TCP/Patching&amp;diff=995025</id>
		<title>Firefox OS/TCP/Patching</title>
		<link rel="alternate" type="text/html" href="https://wiki.mozilla.org/index.php?title=Firefox_OS/TCP/Patching&amp;diff=995025"/>
		<updated>2014-07-07T16:26:20Z</updated>

		<summary type="html">&lt;p&gt;Rillian: /* Start to build flatfish */ Update text to match new build env&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Developing for the Tablet =&lt;br /&gt;
&amp;lt;p&amp;gt;The primary Firefox OS build documentation, including pre-requisites, set-up, building, flashing, and FAQs are all available at https://developer.mozilla.org/en-US/Firefox_OS/Building_and_installing_Firefox_OS&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;This is meant to be a quick reference guide specific to the Tablet Contribution Program and the first tablet device which is named in the project as &amp;quot;flatfish&amp;quot;.&amp;lt;/p&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Here&#039;s a great [https://speakerdeck.com/eragonj/introduction-to-firefox-osintroductory slide deck on hacking Firefox OS].&lt;br /&gt;
&lt;br /&gt;
== Preparation ==&lt;br /&gt;
&amp;lt;p&amp;gt;The following instructions of this document are all verified on Ubuntu 12.04 &amp;amp; 12.10 and also Mac OS.&amp;lt;/p&amp;gt;&lt;br /&gt;
# &amp;lt;p&amp;gt;Firefox OS (B2G) environment, including Android ADB and fastboot&amp;lt;/p&amp;gt; &amp;lt;p&amp;gt;https://developer.mozilla.org/en-US/docs/Mozilla/Firefox_OS/Firefox_OS_build_prerequisites&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;&amp;lt;code&amp;gt;&amp;lt;span style=&amp;quot;color:#006400; background:#D3D3D3&amp;quot;&amp;gt;sudo apt-get install libxml2-utils&amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
# &amp;lt;p&amp;gt;Create an account in github&amp;lt;/p&amp;gt; &amp;lt;p&amp;gt;https://github.com/&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Gotcha: udev rules for Linux ===&lt;br /&gt;
&lt;br /&gt;
When building on Linux, you may need to manually set up udev rules as noted in the above directions. Beware that the Flatfish appears to report different USB vendor IDs depending on whether it&#039;s already booted up or in the fastboot mode! You may need to add both of these udev rules in order to do a full system flash:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SUBSYSTEM==&amp;quot;usb&amp;quot;, ATTR{idVendor}==&amp;quot;18d1&amp;quot;, MODE=&amp;quot;0666&amp;quot;, GROUP=&amp;quot;plugdev&amp;quot;&lt;br /&gt;
SUBSYSTEM==&amp;quot;usb&amp;quot;, ATTR{idVendor}==&amp;quot;0bb4&amp;quot;, MODE=&amp;quot;0666&amp;quot;, GROUP=&amp;quot;plugdev&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Download B2G and AOSP source codes of flatfish ==&lt;br /&gt;
# &amp;lt;p&amp;gt;git clone b2g scripts and config files&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;&amp;lt;code&amp;gt;&amp;lt;span style=&amp;quot;color:#006400; background:#D3D3D3&amp;quot;&amp;gt;git clone git://github.com/mozilla-b2g/B2G.git -b master b2g_flatfish&amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
# &amp;lt;p&amp;gt;configure flatfish and repo sync aosp and b2g source codes&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;&amp;lt;code&amp;gt;&amp;lt;span style=&amp;quot;color:#006400; background:#D3D3D3&amp;quot;&amp;gt;cd b2g_flatfish&amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;&amp;lt;code&amp;gt;&amp;lt;span style=&amp;quot;color:#006400; background:#D3D3D3&amp;quot;&amp;gt;./config.sh flatfish&amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;You have to wait for a long while to download the source codes depending on the network bandwidth. The files will need approx. 11gb disc space.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Start to build flatfish ==&lt;br /&gt;
# &amp;lt;p&amp;gt;Connect flatfish device for extract necessary files at first build&amp;lt;/p&amp;gt; &amp;lt;p&amp;gt;The first build will pull necessary files into backup-flatfish which is automatic created by extract-files.sh. You DO NOT need to connect flatfish device if backup-flatfish is created.&amp;lt;/p&amp;gt;&lt;br /&gt;
# &amp;lt;p&amp;gt;How to build all of B2G&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;For flatfish, we need some prefix to support tablet distribution and enable some functions. GAIA_DEVICE_TYPE=tablet is used for supporting tablet distribution of gaia (older versions used GAIA_DISTRIBUTION_DIR=distribution_tablet instead). B2G_SYSTEM_APPS=1 is for moving webapp from /data to /system, and B2G_UPDATER=1 is enable OTA.&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;&amp;lt;code&amp;gt;&amp;lt;span style=&amp;quot;color:#006400; background:#D3D3D3&amp;quot;&amp;gt;GAIA_DEVICE_TYPE=tablet B2G_SYSTEM_APPS=1 B2G_UPDATER=1 ./build.sh&amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;Building whole system might take a long time, you can take a rest or try to build gecko/gaia if you just modify gecko/gaia.&amp;lt;/p&amp;gt;&lt;br /&gt;
# &amp;lt;p&amp;gt;How to build Gecko or Gaia only&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;Gecko only&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;&amp;lt;code&amp;gt;&amp;lt;span style=&amp;quot;color:#006400; background:#D3D3D3&amp;quot;&amp;gt;B2G_UPDATER=1 ./build.sh gecko&amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;Gaia only&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;&amp;lt;code&amp;gt;&amp;lt;span style=&amp;quot;color:#006400; background:#D3D3D3&amp;quot;&amp;gt;GAIA_DEVICE_TYPE=tablet B2G_SYSTEM_APPS=1 ./build.sh gaia&amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Flash the images you build ==&lt;br /&gt;
&amp;lt;p&amp;gt;Please make sure adb can connect to your device successfully before flash images. You can do simple test to check adb connection, you will see something like “FLATFISH_123456 device” after typo “adb devices” if adb connection successfully.&amp;lt;/p&amp;gt;&lt;br /&gt;
# &amp;lt;p&amp;gt;Flash whole images&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;&amp;lt;code&amp;gt;&amp;lt;span style=&amp;quot;color:#006400; background:#D3D3D3&amp;quot;&amp;gt;./flash.sh&amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
# &amp;lt;p&amp;gt;Flash gecko only&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;&amp;lt;code&amp;gt;&amp;lt;span style=&amp;quot;color:#006400; background:#D3D3D3&amp;quot;&amp;gt;./flash.sh gecko&amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
# &amp;lt;p&amp;gt;Flash gaia only&amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;&amp;lt;code&amp;gt;&amp;lt;span style=&amp;quot;color:#006400; background:#D3D3D3&amp;quot;&amp;gt;./flash.sh gaia&amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Flashing problems ===&lt;br /&gt;
&lt;br /&gt;
If you have problems with the flashing process failing with timeout errors try disabling any USB 3.0 controllers in the BIOS&lt;br /&gt;
&lt;br /&gt;
If your tablet becomes bricked, please follow the steps in [[User:Caspy7/Recovering a disabled Flatfish Tablet]] to reflash your device.&lt;br /&gt;
&lt;br /&gt;
If you need the driver for your Windows computer, see this [http://megaswf.com/file/2672515 Jing] for instructions. &lt;br /&gt;
&lt;br /&gt;
== Subsequent code pulls ==&lt;br /&gt;
&amp;lt;p&amp;gt;To update all the code:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;code&amp;gt;&amp;lt;span style=&amp;quot;color:#006400; background:#D3D3D3&amp;quot;&amp;gt;&lt;br /&gt;
git pull&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;code&amp;gt;&amp;lt;span style=&amp;quot;color:#006400; background:#D3D3D3&amp;quot;&amp;gt;&lt;br /&gt;
./repo sync -d&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Or to sync only a single make target:&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;code&amp;gt;&amp;lt;span style=&amp;quot;color:#006400; background:#D3D3D3&amp;quot;&amp;gt;&lt;br /&gt;
./repo sync gaia&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Contributing your code ==&lt;br /&gt;
&lt;br /&gt;
You can either submit a GitHub pull request or file a bug in Bugzilla with a patch. However, you should almost certainly first discuss it with the B2G or Gaia teams. See the [https://developer.mozilla.org/en-US/Firefox_OS/Developing_Firefox_OS/Quickstart_guide_to_Gaia_development#Contributing_code_back_to_the_project MDN documentation on contributing to Gaia].&lt;br /&gt;
&lt;br /&gt;
== WIP bug list ==&lt;br /&gt;
&amp;lt;p&amp;gt;Bug 965145 - [Camera] refactor .sensorAngle patch in bug 947956 for new camera app&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== FAQ ==&lt;br /&gt;
&amp;lt;p&amp;gt;To be continued&amp;lt;/p&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rillian</name></author>
	</entry>
</feed>