<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Il y a du thé renversé au bord de la table</title>
	<atom:link href="http://dutherenverseauborddelatable.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://dutherenverseauborddelatable.wordpress.com</link>
	<description>Adventure! Excitement! Wonders! Random thoughts by David Rajchenbach-Teller!</description>
	<lastBuildDate>Fri, 24 May 2013 03:52:13 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='dutherenverseauborddelatable.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Il y a du thé renversé au bord de la table</title>
		<link>http://dutherenverseauborddelatable.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://dutherenverseauborddelatable.wordpress.com/osd.xml" title="Il y a du thé renversé au bord de la table" />
	<atom:link rel='hub' href='http://dutherenverseauborddelatable.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Add-on breakage, continued: List of add-ons that will probably be affected</title>
		<link>http://dutherenverseauborddelatable.wordpress.com/2013/05/23/add-on-breakage-continued-list-of-add-ons-that-will-probably-be-affected/</link>
		<comments>http://dutherenverseauborddelatable.wordpress.com/2013/05/23/add-on-breakage-continued-list-of-add-ons-that-will-probably-be-affected/#comments</comments>
		<pubDate>Thu, 23 May 2013 13:42:51 +0000</pubDate>
		<dc:creator>yoric</dc:creator>
				<category><![CDATA[Firefox]]></category>
		<category><![CDATA[In English / En anglais]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Performance]]></category>

		<guid isPermaLink="false">http://dutherenverseauborddelatable.wordpress.com/?p=1262</guid>
		<description><![CDATA[Ongoing chances to Session Restore will probably break the following add-ons: MSN For Firefox Bing For Firefox Twitter Tab Mix Plus IE Tab Undo Closed Tabs Button SessionPage Tab Scope Taboo Tree Style Tab New Tab JumpStart TabGroups Manager Browse Periodically Tab Utilities Tile Tabs IE Tab 2 Vertical Tabs Master Password+ Home Dash Extension [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dutherenverseauborddelatable.wordpress.com&#038;blog=1202429&#038;post=1262&#038;subd=dutherenverseauborddelatable&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>Ongoing chances to Session Restore will probably break the following add-ons:</p>
<ul>
<li>MSN For Firefox</li>
<li>Bing For Firefox</li>
<li>Twitter</li>
<li>Tab Mix Plus</li>
<li>IE Tab</li>
<li>Undo Closed Tabs Button</li>
<li>SessionPage</li>
<li>Tab Scope</li>
<li>Taboo</li>
<li>Tree Style Tab</li>
<li>New Tab JumpStart</li>
<li>TabGroups Manager</li>
<li>Browse Periodically</li>
<li>Tab Utilities</li>
<li>Tile Tabs</li>
<li>IE Tab 2</li>
<li>Vertical Tabs</li>
<li>Master Password+</li>
<li>Home Dash</li>
<li>Extension Test</li>
<li>Progress Bar on Tab</li>
<li>Fox Splitter</li>
<li>Dormancy</li>
<li>Tabkit 2nd Edition</li>
<li>UnloadTab</li>
<li>Tabby2</li>
<li>Tab Restore</li>
<li>Side Tabs</li>
<li>Home Dash Lite-Dial</li>
<li>Fire IE</li>
<li>Tab Utilities Lite CustomEdition</li>
<li>Tabulous</li>
<li>Bar Tab Lite X</li>
<li>PageExpand</li>
<li>IE Tab 2 (SeaMonkey)</li>
<li>All Tabs Helper</li>
<li>multiplaceHolder</li>
</ul>
<p>All of these add-ons tap directly into undocumented, internal data structures that will disappear in the near future (expected: Firefox 25). If you are the author or maintainer of one of these add-ons, you should monitor carefully <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=874381">bug 874381</a> and its blockers for all technical details.</p>
<p>If you need technical help or if you need us to provide alternative public APIs, please get in touch as soon as possible.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dutherenverseauborddelatable.wordpress.com/1262/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dutherenverseauborddelatable.wordpress.com/1262/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dutherenverseauborddelatable.wordpress.com&#038;blog=1202429&#038;post=1262&#038;subd=dutherenverseauborddelatable&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://dutherenverseauborddelatable.wordpress.com/2013/05/23/add-on-breakage-continued-list-of-add-ons-that-will-probably-be-affected/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://2.gravatar.com/avatar/26385ab59b5a13c50262c302a3bcd17c?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">yoric</media:title>
		</media:content>
	</item>
		<item>
		<title>Add-on breakage warning: Session Restore is changing</title>
		<link>http://dutherenverseauborddelatable.wordpress.com/2013/05/21/add-on-breakage-warning-session-restore-is-changing/</link>
		<comments>http://dutherenverseauborddelatable.wordpress.com/2013/05/21/add-on-breakage-warning-session-restore-is-changing/#comments</comments>
		<pubDate>Tue, 21 May 2013 12:54:43 +0000</pubDate>
		<dc:creator>yoric</dc:creator>
				<category><![CDATA[Firefox]]></category>
		<category><![CDATA[In English / En anglais]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Performance]]></category>

		<guid isPermaLink="false">http://dutherenverseauborddelatable.wordpress.com/?p=1259</guid>
		<description><![CDATA[As part of project Async, we have been working on refactoring Firefox’ Session Restore to ensure that it does not block the main thread. Part of the work has been cleaning up the code and the data structures involved in Session Restore both to give us some maneuverability and to improve the chances of catching [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dutherenverseauborddelatable.wordpress.com&#038;blog=1202429&#038;post=1259&#038;subd=dutherenverseauborddelatable&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p style="text-align:justify;">As part of project <a href="http://dutherenverseauborddelatable.wordpress.com/category/informatique-computer-science/performance-informatique-computer-science/">Async</a>, we have been working on refactoring Firefox’ Session Restore to ensure that it does not block the main thread. Part of the work has been cleaning up the code and the data structures involved in Session Restore both to give us some maneuverability and to improve the chances of catching refactoring errors.</p>
<p style="text-align:justify;">Unfortunately, a large number of add-ons seem to rely upon these undocumented data structures. Some of their features might therefore stop working. If you are the author of one such add-on, you should monitor carefully <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=874381">bug 874381</a> and its blockers. If you realize that we are about to break your add-on, please inform us asap, so that we can work out a solution.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dutherenverseauborddelatable.wordpress.com/1259/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dutherenverseauborddelatable.wordpress.com/1259/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dutherenverseauborddelatable.wordpress.com&#038;blog=1202429&#038;post=1259&#038;subd=dutherenverseauborddelatable&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://dutherenverseauborddelatable.wordpress.com/2013/05/21/add-on-breakage-warning-session-restore-is-changing/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:content url="http://2.gravatar.com/avatar/26385ab59b5a13c50262c302a3bcd17c?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">yoric</media:title>
		</media:content>
	</item>
		<item>
		<title>Project Async &amp; Responsive, issue 1</title>
		<link>http://dutherenverseauborddelatable.wordpress.com/2013/04/26/project-async-responsive-issue-1/</link>
		<comments>http://dutherenverseauborddelatable.wordpress.com/2013/04/26/project-async-responsive-issue-1/#comments</comments>
		<pubDate>Fri, 26 Apr 2013 13:38:54 +0000</pubDate>
		<dc:creator>yoric</dc:creator>
				<category><![CDATA[Firefox]]></category>
		<category><![CDATA[In English / En anglais]]></category>
		<category><![CDATA[Informatique / Computer science]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[async]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[mozilla]]></category>
		<category><![CDATA[performance]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[snappy]]></category>

		<guid isPermaLink="false">http://dutherenverseauborddelatable.wordpress.com/?p=1253</guid>
		<description><![CDATA[In the previous episodes Our intrepid heroes, a splinter cell from Snappy, have set out on a quest to offer alternatives to all JavaScript-accessible APIs that blocks the main thread of Firefox &#38; Mozilla Apps. Recently completed Various cleanups on Session Restore (Bug 863227, 862442, 861409) Summary Currently, we regularly (~every 15 seconds) save the state [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dutherenverseauborddelatable.wordpress.com&#038;blog=1202429&#038;post=1253&#038;subd=dutherenverseauborddelatable&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<h2 style="text-align:justify;">In the previous episodes</h2>
<p style="text-align:justify;"><em>Our intrepid heroes, a splinter cell from Snappy, have set out on a quest to offer alternatives to all JavaScript-accessible APIs that blocks the main thread of Firefox &amp; Mozilla Apps.</em></p>
<h2 style="text-align:justify;">Recently completed</h2>
<h3 style="text-align:justify;">Various cleanups on Session Restore (Bug 863227, 862442, 861409)</h3>
<p style="text-align:justify;"><strong>Summary</strong> Currently, we regularly (~every 15 seconds) save the state of every single window, tab, iframe, form being displayed, so as to be able to restore the session quickly in case of crash, power failure, etc. As this can be done only on the main thread, just the jank of data collection is often noticeable (i.e. &gt; 50 ms). We are in the process of refactoring Session Restore to make it both faster and more responsive. These bugs are steps towards optimizations.</p>
<p style="text-align:justify;"><strong>Status</strong> Landed. More cleanups in progress.</p>
<h3 style="text-align:justify;">Telemetry for Number of Threads (Bug 724368)</h3>
<p style="text-align:justify;"><strong>Summary</strong> As we make Gecko and add-ons more and more concurrent, we need to measure whether this concurrency can cause accidental internal Denial of Service. The objective of this bug is to measure.</p>
<p style="text-align:justify;"><strong>Status</strong> Landed. You can follow progression in histograms BACKGROUNDFILESAVER_THREAD_COUNT and SIMPLEMEASURES_MAXIMALNUMBEROFCONCURRENTTHREADS.</p>
<h3 style="text-align:justify;">Reduce number of fsync() in Firefox Health Report (Bug 830492)</h3>
<p><strong>Summary</strong> Firefox Health Report stores its data using mozStorage. The objective of this bug is to reduce the number of expensive disk synchronizations performed by FHR.</p>
<p><strong>Status</strong> Landed.</p>
<h2 style="text-align:justify;">Ongoing bugs</h2>
<h3 style="text-align:justify;">Out Of Process Thumbnailing (Bug 841495)</h3>
<p style="text-align:justify;"><strong>Summary</strong> Currently, we capture thumbnails of all pages, e.g. for display in about:newtab, in Panorama or in add-ons. This blocks the main thread temporarily. This bug is about using another process to capture thumbnails of pages currently being visited. This can be useful for both security/privacy reasons (i.e. to ensure that bank account numbers do not show up in thumbnails) and responsiveness (i.e. to ensure that we never block browsing).</p>
<p style="text-align:justify;"><strong>Status</strong> In progress.</p>
<h3 style="text-align:justify;">Cutting Session Restore data collection into chunks (Bug 838577)</h3>
<p style="text-align:justify;"><strong>Summary</strong> Currently, we regularly (~every 15 seconds) save the state of every single window, tab, iframe, form being displayed, so as to be able to restore the session quickly in case of crash, power failure, etc. As this can be done only on the main thread, just the jank of data collection is often noticeable (i.e. &gt; 50 ms). This bug is about cutting data collection in smaller chunks, to remove that jank.</p>
<p style="text-align:justify;"><strong>Status</strong> Working prototype.</p>
<h3 style="text-align:justify;">Off Main Thread database storage (Bug 702559)</h3>
<p style="text-align:justify;"><strong>Summary</strong> We are in the process of moving as many uses of mozStorage out of the main thread. While mozStorage already supports doing much I/O off the main thread, there is no clear way for developers to enforce this. This bug is about providing a subset of mozStorage that performs all I/O off the main thread and that will serve as target for both ongoing refactorings and future uses of mozStorage, in particular by add-ons.</p>
<p style="text-align:justify;"><strong>Status</strong> Working prototype.</p>
<h3 style="text-align:justify;">Improvements transaction management by JavaScript API for Off Main Thread database storage (Bug 856925)</h3>
<p style="text-align:justify;"><strong>Summary</strong> Sqlite.jsm is our JavaScript library for convenient Off Main Thread database storage. This bug is about improving how implicit transactions are handled by the library, hence improving performance.</p>
<p style="text-align:justify;"><strong>Status</strong> In progress.</p>
<h3 style="text-align:justify;">Refactor how Places data is backed up (Bugs 852040, 852041, 852034, 852032, 855638, 865643, 846636, 846635, 860625, 854927, 855190)</h3>
<p style="text-align:justify;"><strong>Summary</strong> Places is the database containing bookmarks, history, etc. Historically, Places was implemented purely on the main thread, which is something we very much want to remove, as any main thread I/O can block the user interface for arbitrarily lengthy durations. This set of bugs is part of the larger effort to get rid of Places main thread I/O. The objective here is to isolate and cleanup Places backup, to later allow removing it entirely from the main thread.</p>
<p style="text-align:justify;"><strong>Status</strong> Working prototype.</p>
<h3 style="text-align:justify;">APIs for updating/reading Places Off Main Thread (Bugs 834539, 834545)</h3>
<p style="text-align:justify;"><strong>Summary</strong> These bugs are part of the effort to provide a clean API, usable by platform and add-ons, to access/modify Places information off the main thread.</p>
<p style="text-align:justify;"><strong>Status</strong> In progress.</p>
<h3 style="text-align:justify;">Move Form History to use Off Main Thread storage (Bug 566746)</h3>
<p style="text-align:justify;"><strong>Summary</strong> This bug is part of the larger effort to get rid of Places main thread I/O. The objective here is to move Form History I/O off the main thread.</p>
<p style="text-align:justify;"><strong>Status</strong> In progress.</p>
<h3 style="text-align:justify;">Make about:home use IndexedDB instead of LocalStorage (Bug 789348)</h3>
<p style="text-align:justify;"><strong>Summary</strong> Currently, page about:home uses localStorage to store some data. This is not good, as localStorage does blocking main thread I/O. This bug is about porting about:home to use indexedDB instead.</p>
<p style="text-align:justify;"><strong>Status</strong> In progress.</p>
<h3 style="text-align:justify;">Download Architecture Improvements (Bug 825588 and sub-bugs)</h3>
<p style="text-align:justify;"><strong>Summar</strong>y Our Architecture for Downloads has grown organically for about 15 years. Part of it is executed on the main thread and synchronously. The objective of this meta-bug is to re-implement Downloads with a modern architecture, asynchronous, off the main thread, and accessible from JavaScript.</p>
<p style="text-align:justify;"><strong>Status</strong> In progress.</p>
<h3 style="text-align:justify;">Constant stack space Promise (Bug 810490)</h3>
<p style="text-align:justify;"><strong>Summary</strong> Much of our main thread asynchronous work uses Promises. The current implementation of Promise is very recursive and eats considerable amounts of stack. The objective here is to replace it with a new implementation of Promise that works in (almost) constant stack space.</p>
<p style="text-align:justify;"><strong>Status</strong> Working partial prototype.</p>
<h3 style="text-align:justify;">Reduce amount of I/O in session restore (Bug 833286)</h3>
<p style="text-align:justify;"><strong>Summary</strong> The algorithm used by Session Restore to back up its state is needlessly expensive. The objective of this bug is to replace it by an alternative implementation that requires much less I/O.</p>
<p style="text-align:justify;"><strong>Status</strong> Working prototype.</p>
<h2>Planning stage</h2>
<h3 style="text-align:justify;">Move session recording and activity monitoring to Gecko (Bug 841561)</h3>
<p style="text-align:justify;"><strong>Summary</strong> Firefox Health Report implements a sophisticated mechanism for determining whether a user is actively using the browser. This mechanism could be reimplemented in a more efficient and straightforward manner by moving it to Gecko itself. This is the objective of this bug.</p>
<p style="text-align:justify;"><strong>Status</strong> Looking for developer.</p>
<h3 style="text-align:justify;">Non-blocking Thumbnailing (Bug 744100)</h3>
<p><strong>Summary</strong> Currently, we capture thumbnails of all pages, e.g. for display in about:newtab, in Panorama or in add-ons. This blocks the main thread temporarily, as capturing a page requires repainting it into memory from the main thread. This bug is about removing completely the &#8220;repaint into memory&#8221; step and rather collaborate with the renderer to obtain a copy of the latest image rendered.</p>
<p><strong>Status</strong> Design in progress.</p>
<h3>Evaluate dropping &#8220;www.&#8221; from rev_host column (Bug 843357)</h3>
<p style="text-align:justify;"><strong>Summary</strong> The objective of this bug is to simplify parts of the Places database and its users by removing some data that appears unnecessary.</p>
<p style="text-align:justify;"><strong>Status</strong> Evaluation in progress.</p>
<h3 style="text-align:justify;">Optimize worker communication for large messages (Bug 852187)</h3>
<p style="text-align:justify;"><strong>Summary</strong> We sometimes need to communicate very large messages between the main thread and workers. For large enough messages, the communication itself ends up being very expensive for the main thread. This bug is about optimizing such communications.</p>
<p style="text-align:justify;"><strong>Status</strong> Design in progress.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dutherenverseauborddelatable.wordpress.com/1253/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dutherenverseauborddelatable.wordpress.com/1253/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dutherenverseauborddelatable.wordpress.com&#038;blog=1202429&#038;post=1253&#038;subd=dutherenverseauborddelatable&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://dutherenverseauborddelatable.wordpress.com/2013/04/26/project-async-responsive-issue-1/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://2.gravatar.com/avatar/26385ab59b5a13c50262c302a3bcd17c?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">yoric</media:title>
		</media:content>
	</item>
		<item>
		<title>Announcing Project Async &amp; Responsive</title>
		<link>http://dutherenverseauborddelatable.wordpress.com/2013/04/10/announcing-project-async-responsive/</link>
		<comments>http://dutherenverseauborddelatable.wordpress.com/2013/04/10/announcing-project-async-responsive/#comments</comments>
		<pubDate>Wed, 10 Apr 2013 12:15:39 +0000</pubDate>
		<dc:creator>yoric</dc:creator>
				<category><![CDATA[Firefox]]></category>
		<category><![CDATA[In English / En anglais]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[asynchronous]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[mozilla]]></category>
		<category><![CDATA[native]]></category>
		<category><![CDATA[performance]]></category>
		<category><![CDATA[promise]]></category>
		<category><![CDATA[threads]]></category>
		<category><![CDATA[workers]]></category>

		<guid isPermaLink="false">http://dutherenverseauborddelatable.wordpress.com/?p=1248</guid>
		<description><![CDATA[tl;dr Project Snappy has been retired and replaced by several smaller projects, including Async &#38; Responsive. The objective of this project is to improve the responsiveness of Firefox and the Mozilla Platform by converting key components to make them asynchronous and, wherever possible, to move them off the main thread. The setting Firefox and other [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dutherenverseauborddelatable.wordpress.com&#038;blog=1202429&#038;post=1248&#038;subd=dutherenverseauborddelatable&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p style="text-align:justify;">tl;dr</p>
<p style="text-align:justify;"><em>Project Snappy has been retired and replaced by several smaller projects, including Async &amp; Responsive. The objective of this project is to improve the responsiveness of Firefox and the Mozilla Platform by converting key components to make them asynchronous and, wherever possible, to move them off the main thread.</em></p>
<h2 style="text-align:justify;">The setting<em><br />
</em></h2>
<p style="text-align:justify;">Firefox and other Mozilla applications are great products, in particular in terms of performance. They are based on an extremely fast rendering engine, Gecko, and its companion JavaScript engine, which in addition to being the richest JS engine around, is also, these days, quite possibly the fastest. What is not so great, unfortunately, is that despite these great core performances, Mozilla applications have often been perceived as slow and sluggish.</p>
<p style="text-align:justify;">Project Snappy was formed about 18 months ago to focus the effort by Mozilla developers to fight this perceived sluggishness. During this period, we have made tremendous progress, thanks to the commitment of everyone involved. Indeed, most of the long-term objectives of Snappy have been reached already. We have therefore decided to retire project Snappy, in favor of both a larger project Performance, and several sub-projects focusing on distinct aspects of Performance.</p>
<p style="text-align:justify;">Let me introduce Asynchronous &amp; Responsive [<a href="#note_1">1</a>], one of the sub-projects of Performance.</p>
<h3 style="text-align:justify;">Project outline</h3>
<p style="text-align:justify;">Despite considerable progress, much of Firefox still behaves as a single-threaded application. Most services and components are initialized sequentially in the main thread, run in the main thread, are shutdown sequentially in the main thread. Also, most add-ons execute essentially in the main thread. As a consequence, any long-lived task can disrupt the user experience.</p>
<p style="text-align:justify;">There are historical reasons for this, but in most cases, there is not deep blocker that would prevent us from rewriting services. Project Asynchronous &amp; Responsive is now starting to support and focus the ongoing effort to get rid of main thread services and components, both in platform code and in add-on code, for the betterment of all Mozillakind.</p>
<p style="text-align:justify;">This entails:</p>
<ul>
<li>identifying blockers that prevent platform and add-on developers from deploying their code on non-main threads (generally, worker threads);</li>
<li>helping platform and add-on developers transition their code off-main thread;</li>
<li>actually transitioning some of our services and components off the main thread.</li>
</ul>
<p style="text-align:justify;">Please note that we have no intention of working on the JavaScript VM, on DOM or Graphics. These teams already have dedicated developers working on moving things off the main thread.</p>
<h3 style="text-align:justify;">Following our progress</h3>
<p style="text-align:justify;">As I am the tech lead of this project, you will find more information on this blog, <a href="http://dutherenverseauborddelatable.wordpress.com/category/informatique-computer-science/performance-informatique-computer-science/">under category Performance</a>.</p>
<p style="text-align:justify;">I will try and post updates every second week.</p>
<p style="text-align:justify;">[<a name="note_1"></a>1] If you have an idea of a nicer name that does not sound too much like “Snappy”, we are interested <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Marxist jokes about Workers might or might not be accepted.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dutherenverseauborddelatable.wordpress.com/1248/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dutherenverseauborddelatable.wordpress.com/1248/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dutherenverseauborddelatable.wordpress.com&#038;blog=1202429&#038;post=1248&#038;subd=dutherenverseauborddelatable&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://dutherenverseauborddelatable.wordpress.com/2013/04/10/announcing-project-async-responsive/feed/</wfw:commentRss>
		<slash:comments>19</slash:comments>
	
		<media:content url="http://2.gravatar.com/avatar/26385ab59b5a13c50262c302a3bcd17c?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">yoric</media:title>
		</media:content>
	</item>
		<item>
		<title>Why Firefox OS matters to me</title>
		<link>http://dutherenverseauborddelatable.wordpress.com/2013/03/16/why-firefox-os-matters-to-me/</link>
		<comments>http://dutherenverseauborddelatable.wordpress.com/2013/03/16/why-firefox-os-matters-to-me/#comments</comments>
		<pubDate>Sat, 16 Mar 2013 16:41:50 +0000</pubDate>
		<dc:creator>yoric</dc:creator>
				<category><![CDATA[Firefox]]></category>
		<category><![CDATA[In English / En anglais]]></category>
		<category><![CDATA[Informatique / Computer science]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[app]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[firefox os]]></category>
		<category><![CDATA[game]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[ios]]></category>
		<category><![CDATA[marketplace]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://dutherenverseauborddelatable.wordpress.com/?p=1246</guid>
		<description><![CDATA[These days, everybody seems to be talking about Firefox OS. About how removing the barrier of the marketplace will make the world a better place, or about how HTML5 is so darn great, or about the fact that a gazillion constructors and operators are supporting Firefox OS. And that’s great, because Firefox OS is an [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dutherenverseauborddelatable.wordpress.com&#038;blog=1202429&#038;post=1246&#038;subd=dutherenverseauborddelatable&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p style="text-align:justify;">These days, everybody seems to be talking about <a href="https://www.mozilla.org/en-US/firefox/partners/#os">Firefox OS</a>. About how removing the barrier of the marketplace will make the world a better place, or about how HTML5 is so darn great, or about the fact that a gazillion constructors and operators are supporting Firefox OS. And that’s great, because Firefox OS is an impressively good product and deserves this attention.</p>
<p style="text-align:justify;">However, all this craze is missing one feature that makes Firefox OS my choice of mobile operating system: I can write a playable prototype for a simple game, from scratch, in <em>two hours</em>.</p>
<p style="text-align:justify;">Of course, this was a prototype, and completing the game took me a few more days of adding 8 bit graphics, optimizing, toying with the rules, adding difficulty levels, high scores, etc. But after just two hours, I could play the game on computer, tablet and cellphone, and decide where to proceed from here. This was both my first HTML5 game and my first mobile game, by the way. It is by no means an AAA game, but it is fun enough that I sometimes play it in the subway. By the way, did I mention that, once I was satisfied with this game, I could publish it in just a few seconds, simply by hosting it anywhere on the web?</p>
<p style="text-align:justify;">Oh, and another feature: I wrote a quite usable comic book reader <em>in the subway</em>, while commuting from/to work. It took me a few days of commuting (three days, I seem to remember) to obtain a tool that works quite nicely. Due to screen size, I prefer using it on my Android tablet than on a cellphone, but that’s the wonders of HTML5 and Open Web Applications: I developed for one, and it worked for both. Did I mention that this was my first attempt at writing a web application that does file I/O or that uses the touch screen intelligently? I will try and finalize and release this application one of these days.</p>
<p style="text-align:justify;">Now, other developers or users might not share this feeling, but this simplicity to start coding and publish and evolve a game or application is of tremendous importance to me. Because one day, I will have a child in age of playing video games. And for his birthday, I will have a chance to download a 5€ game from the Firefox Marketplace (or anywhere else), but more importantly, I will be able to build a game with his favorite characters as support cast and him as a hero. I hope he will love it. And I will not need to ask for permission.</p>
<p style="text-align:justify;">If there is some application you want to develop, neither will you.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dutherenverseauborddelatable.wordpress.com/1246/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dutherenverseauborddelatable.wordpress.com/1246/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dutherenverseauborddelatable.wordpress.com&#038;blog=1202429&#038;post=1246&#038;subd=dutherenverseauborddelatable&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://dutherenverseauborddelatable.wordpress.com/2013/03/16/why-firefox-os-matters-to-me/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
	
		<media:content url="http://2.gravatar.com/avatar/26385ab59b5a13c50262c302a3bcd17c?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">yoric</media:title>
		</media:content>
	</item>
		<item>
		<title>Mozilla Student Projects update</title>
		<link>http://dutherenverseauborddelatable.wordpress.com/2013/02/27/mozilla-student-projects-update/</link>
		<comments>http://dutherenverseauborddelatable.wordpress.com/2013/02/27/mozilla-student-projects-update/#comments</comments>
		<pubDate>Wed, 27 Feb 2013 13:04:21 +0000</pubDate>
		<dc:creator>yoric</dc:creator>
				<category><![CDATA[Enseignement]]></category>
		<category><![CDATA[Firefox]]></category>
		<category><![CDATA[In English / En anglais]]></category>
		<category><![CDATA[Informatique / Computer science]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[comete]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[open-source]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://dutherenverseauborddelatable.wordpress.com/?p=1241</guid>
		<description><![CDATA[It has been quite some time since the last update. Since then, many things have happened, both with the Student Projects and with the world of Mozilla. We have had the exciting FirefoxOS AppDays, many alpha, beta and near-final versions of FirefoxOS, and the MWC launch of FirefoxOS. Well, without further ado, let us see [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dutherenverseauborddelatable.wordpress.com&#038;blog=1202429&#038;post=1241&#038;subd=dutherenverseauborddelatable&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p style="text-align:justify;">It has been quite some time since the last update. Since then, many things have happened, both with the Student Projects and with the world of Mozilla. We have had the exciting FirefoxOS AppDays, many alpha, beta and near-final versions of FirefoxOS, and the MWC launch of FirefoxOS.</p>
<p style="text-align:justify;">Well, without further ado, let us see how the student projects have progressed.</p>
<p style="text-align:justify;"><span id="more-1241"></span></p>
<h3 style="text-align:justify;"><a href="https://github.com/Yoric/Mozilla-Student-Projects/issues/1">MSP #1: An Open Web App for editing rich text documents</a> (<a href="http://abhishekp91.github.com/richtextdoc_edit_OWA/">see the application!</a>)</h3>
<p style="text-align:justify;"><strong>Start date:</strong> October 6th, 2012.<br />
<strong>Team:</strong> Abhishek Potnis, Amod Narvekar, Pratik Patil (Vidyavardhini’s College Of Engineering and Technology, Mumbai University, India).<br />
<strong>Objective:</strong> Build an Open Web Application that can be used to edit simple web pages, using HTML contentEditable. This application must work offline and must be friendly to touch screen devices.<br />
<strong>What works:</strong></p>
<ul style="text-align:justify;">
<li>Editing rich text documents.</li>
<li>Saving documents to IndexedDB.</li>
<li>Loading documents from IndexedDB.</li>
<li>Removing documents from IndexedDB.</li>
<li>Several drafts of the User Interface.</li>
<li>The application can be installed as an Open Web Application.</li>
</ul>
<p style="text-align:justify;"><strong>What doesn&#8217;t work yet:</strong></p>
<ul style="text-align:justify;">
<li>The user interface is very much unfinished.</li>
<li>Exporting to other applications using Web Activitities.</li>
<li>Making it usable on a small screen.</li>
</ul>
<p style="text-align:justify;"><strong>Message to the team:</strong> Good work so far. I am looking forward to seeing the application once it is completed.</p>
<h3 style="text-align:justify;"><a href="https://github.com/Yoric/Mozilla-Student-Projects/issues/2">MSP #2: An Open Web Application e-Book reader</a> (<a href="http://jbarbin.github.com/EPub-Reader/">see the application!</a>)</h3>
<p style="text-align:justify;"><strong>Start date:</strong> January 2013.<br />
<strong>Team:</strong> Jonathan Barbin, Anthony Rata-Global (Université d&#8217;Évry, France).<br />
<strong>Objective:</strong> Read e-Books in standard format epub from any Open Web Application-compliant device and browser.<br />
<strong>What works:</strong></p>
<ul style="text-align:justify;">
<li>Opening a book.</li>
<li>Displaying the table of contents.</li>
<li>Displaying the contents of the book.</li>
</ul>
<p style="text-align:justify;"><strong>What doesn&#8217;t work yet:</strong></p>
<ul style="text-align:justify;">
<li>Decompressing the book should take place as a background task.</li>
<li>User Interface needs to be finalized.</li>
<li>Bookmarks.</li>
<li>Opening a file on FirefoxOS.</li>
</ul>
<p style="text-align:justify;"><strong>Message to the team:</strong></p>
<ul style="text-align:justify;">
<li>Impressive work! I want to use it on my tablet.</li>
<li>This project is very promising. You should communicate and attract contributors.</li>
</ul>
<h3 style="text-align:justify;"><a href="https://github.com/Yoric/Mozilla-Student-Projects/issues/8">MSP #8: An Open Web App for reading RSS streams</a> (<a href="http://thunderfox.github.com/ThunderFox-Reader/">see the application!</a>)</h3>
<p style="text-align:justify;"><strong>Start date:</strong> October 30th, 2012<br />
<strong>Team:</strong> [Guys, I’d like to have your names!] (Université d’Évry)<br />
<strong>Objective:</strong> Read RSS streams on any open web app-enabled device.<br />
<strong>Message to the team:</strong> I have no clue about the status of the project. It looks like stuff works, but developing in silence is not a good idea.</p>
<h3 style="text-align:justify;"><a href="https://github.com/Yoric/Mozilla-Student-Projects/issues/9">MSP #9: Run-run-run</a> (<a href="https://github.com/AAymeric/Run-Run-Run/tree/Simon">see the code</a>)</h3>
<p style="text-align:justify;"><strong>Start date:</strong> October 30th, 2012<br />
<strong>Team:</strong> Simon Blum (Université d’Évry)<br />
<strong>Objective:</strong> An open web application that can be used to record times and positions while running, biking, hiking, etc.<br />
<strong>What works:</strong> No idea. I see code but I have received no word from the developers.<br />
<strong>What doesn&#8217;t work:</strong> No idea.<br />
<strong>Message to the team:</strong> Are you alive?</p>
<h3 style="text-align:justify;"><a href="https://github.com/Yoric/Mozilla-Student-Projects/issues/10">MSP #10: Map Your Friends</a> (<a href="http://myf.webuda.com/">see the application!</a>)</h3>
<p style="text-align:justify;"><strong>Start date:</strong> October 30th, 2012<br />
<strong>Team:</strong> Bharath Thiruveedula, Yeshwanth Jagini, Abhiram ? (Gokaraju RangaRaju Engineering and Technology?)<br />
<strong>Objective:</strong> A group of people wants to be able to track each other on a map in real-time. Useful for sport, games, but also rescue teams.<br />
<strong>What works:</strong></p>
<ul style="text-align:justify;">
<li>Creating maps.</li>
<li>Joining maps.</li>
<li>Tracking the rest of the group on the map.</li>
</ul>
<p style="text-align:justify;"><strong>What doesn&#8217;t work:</strong></p>
<ul style="text-align:justify;">
<li>Not suited for small screens yet.</li>
<li>Not installable as an Open Web Application yet.</li>
<li>User interface needs some polish.</li>
<li>Needs a security review.</li>
</ul>
<p style="text-align:justify;"><strong>Message to the team:</strong> Keep up the good work. As soon as the application is a little more polished, you should be able to submit it for a broader audience.</p>
<h3 style="text-align:justify;"><a href="https://github.com/Yoric/Mozilla-Student-Projects/issues/42">MSP #42: Bombermaaaan</a> (<a href="http://geminicode.github.com/Bombermaaan-for-Firefox-OS/">see the code</a>)</h3>
<p style="text-align:justify;"><strong>Start date:</strong> October 30th, 2012<br />
<strong>Team:</strong> Angélo Lima, Vincent Texier, Robin Vasseur (Université d’Évry)<br />
<strong>Objective:</strong> A great game, for the touchscreen web.<br />
<strong>What works:</strong></p>
<ul style="text-align:justify;">
<li>The engine is quite playable.</li>
<li>Simple AI for single-player game.</li>
<li>Multi-player game using a server (I haven&#8217;t tested it yet).</li>
<li>Works nicely on a cellphone.</li>
</ul>
<p style="text-align:justify;"><strong>What doesn&#8217;t work yet:</strong></p>
<ul style="text-align:justify;">
<li>Still some problems of performance.</li>
<li>You can&#8217;t play the game from the webpage (trivial to fix).</li>
<li>Not installable yet.</li>
</ul>
<p style="text-align:justify;"><strong>Messages to the team:</strong></p>
<ul style="text-align:justify;">
<li>That looks good. I want to see the final version!</li>
<li>This project is very promising. You should communicate and attract contributors.</li>
</ul>
<h3 style="text-align:justify;"><a href="https://github.com/Yoric/Mozilla-Student-Projects/issues/45">MSP #45: Tux of Math Command </a>(<a href="http://vtriquet.github.com/TuxOfMathCommandFFOS/">see the application</a>)</h3>
<p style="text-align:justify;"><strong>Start date:</strong> October 30th, 2012<br />
<strong>Team:</strong> Yassir Barchi, Lucas Pinto, Sylvain Ribous, Virgil Triquet (Université d’Évry)<br />
<strong>Objective:</strong> Port game Tux of Math Command to all web app-enabled devices, in particular touch screen devices.<br />
<strong>What works:</strong></p>
<ul style="text-align:justify;">
<li>The game was quite playable last time I checked (not today, though, there seems to be a regression).</li>
</ul>
<p style="text-align:justify;"><strong>What doesn&#8217;t work yet:</strong></p>
<ul style="text-align:justify;">
<li>Levels.</li>
<li>Performance issues.</li>
<li>Lacks some polish.</li>
</ul>
<p style="text-align:justify;"><strong>Message to the team:</strong> Good work. You should soon be able to submit the game to the marketplace. Looking forward to the completed project!</p>
<h3 style="text-align:justify;"><a href="https://github.com/Yoric/Mozilla-Student-Projects/issues/48">MSP #48 A plotting calculator for FirefoxOS / the web</a> (<a href="https://github.com/Subasy/FirefoxOS-plotting-calculator">see the code</a>)</h3>
<p style="text-align:justify;"><strong>Start date:</strong> January 2013<br />
<strong>Team:</strong> Sylvie Ranga (Université d&#8217;Évry)<br />
<strong>Objective: </strong>Using any FirefoxOS / Open Web Application-enabled cellphone as a plotting calculator.<br />
<strong>Message to the team:</strong> I see some code. I have left issues on your tracker. I haven&#8217;t seen any reply. Not a good sign.</p>
<h3 style="text-align:justify;"><a href="https://github.com/Yoric/Mozilla-Student-Projects/issues/51">MSP #51: Reimplement Qix as a FirefoxOS-friendly Open Web Application</a> (<a href="http://kbrivois.github.com/spacelash/">see the application!</a>)</h3>
<p style="text-align:justify;"><strong>Start date:</strong> October 30th, 2012<br />
<strong>Team:</strong> [Guys, I’d like to have your names!] (Université d’Évry)<br />
<strong>Objective:</strong> A great game, for the touchscreen web.<br />
<strong>What works:</strong></p>
<ul style="text-align:justify;">
<li>On the desktop, the game seems to work nicely.</li>
<li>Installable.</li>
</ul>
<p style="text-align:justify;"><strong>What doesn&#8217;t work:</strong></p>
<ul style="text-align:justify;">
<li>Doesn&#8217;t seem to work with a touchscreen yet.</li>
<li>Some performance issues.</li>
<li>Doesn&#8217;t work without a connection.</li>
</ul>
<p style="text-align:justify;"><strong>Message to the team: </strong>The project looks good. However, your complete silence hurts you a lot. You haven&#8217;t been in touch, so you have received no code or feature review. Also, developing in silence hurts your chances of having a successful project, both in terms of code and in terms of users. So, please don&#8217;t be silent.</p>
<h3>Mystery project: Where to sleep tonight? (<a href="https://github.com/falila/fly/">see the code</a>)</h3>
<p style="text-align:justify;"><strong>Start date:</strong> January 2013, I believe.<br />
<strong>Team:</strong> Omar BAKRIM, Jean-Marc NZENZA, Souleymane KEITA (Université d&#8217;Évry)<br />
<strong>Objective:</strong> I have no idea.<br />
<strong>Message to the team: </strong>I hear that I am expected to mentor your project. I don&#8217;t remember ever having heard from this project before. If you want me as a mentor, you should at least come and discuss the project with me.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dutherenverseauborddelatable.wordpress.com/1241/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dutherenverseauborddelatable.wordpress.com/1241/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dutherenverseauborddelatable.wordpress.com&#038;blog=1202429&#038;post=1241&#038;subd=dutherenverseauborddelatable&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://dutherenverseauborddelatable.wordpress.com/2013/02/27/mozilla-student-projects-update/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://2.gravatar.com/avatar/26385ab59b5a13c50262c302a3bcd17c?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">yoric</media:title>
		</media:content>
	</item>
		<item>
		<title>Qui a parlé de Webkit ? Nous avons parlé d’évolution.</title>
		<link>http://dutherenverseauborddelatable.wordpress.com/2013/02/23/qui-a-parle-de-webkit-nous-avons-parle-devolution/</link>
		<comments>http://dutherenverseauborddelatable.wordpress.com/2013/02/23/qui-a-parle-de-webkit-nous-avons-parle-devolution/#comments</comments>
		<pubDate>Sat, 23 Feb 2013 10:33:33 +0000</pubDate>
		<dc:creator>yoric</dc:creator>
				<category><![CDATA[En français / In French]]></category>
		<category><![CDATA[Firefox]]></category>
		<category><![CDATA[Informatique / Computer science]]></category>

		<guid isPermaLink="false">http://dutherenverseauborddelatable.wordpress.com/?p=1233</guid>
		<description><![CDATA[« Webkit est un boulet. Nous ne pouvons pas nous en écarter, parce que nos utilisateurs dépendent de ses bugs autant que de ses fonctionnalités, mais Webkit est construit à partir de technologies obsolètes, de concepts qui ne passent plus à l’échelle depuis longtemps, et tout cela ne rime plus à rien face aux besoins [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dutherenverseauborddelatable.wordpress.com&#038;blog=1202429&#038;post=1233&#038;subd=dutherenverseauborddelatable&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p style="text-align:justify;">« <em>Webkit est un boulet. Nous ne pouvons pas nous en écarter, parce que nos utilisateurs dépendent de ses bugs autant que de ses</em><br />
<em> fonctionnalités, mais Webkit est construit à partir de technologies obsolètes, de concepts qui ne passent plus à l’échelle depuis</em><br />
<em> longtemps, et tout cela ne rime plus à rien face aux besoins ou aux matériels d’ajourd’hui. Si nous avions le moindre choix, nous</em><br />
<em> abandonnerions tout cela pour recommencer à partir de zéro.</em> »</p>
<p style="text-align:justify;"><span id="more-1233"></span></p>
<p style="text-align:justify;">Qui a dit cela ? Personne, à ma connaissance. Webkit est une très bonne famille de moteurs de rendu. Suffisamment bonne pour qu’Apple et Google aient tous deux décidé de construire leurs navigateurs autour de Webkit. Mieux que cela : il y a quelques jours, Opera Software a annoncé l’abandon de Presto, le moteur de rendu qui faisait tourner Opera, et le passage à Webkit. L’un dans l’autre, les références en faveur de Webkit sont impressionnantes.</p>
<p style="text-align:justify;">Mais il y a une chose à ne pas oublier : Webkit est une technologie âgée. La première version de Webkit a été publiée en 1998, sous le nom KTHML, soit à peu près en même temps que Gecko, le moteur de Mozilla, ou Trident, celui de Microsoft, et quatre ans avant Presto, celui d’Opera. À l’époque, les threads étaient trop lents pour être utilisés, les systèmes multi-cœurs relevaient presque de la science fiction, les cartes graphiques ne servaient qu’à jouer et les micro-processeurs n’arrêtaient pas de doubler de vitesse. En plus de cela, personne hors du monde académique ne prenait au sérieux la compilation JIT, les systèmes de types ou les langages dynamiques. Oh, et il fallait être idiot pour s’imaginer travailler sur des documents dans un navigateur, ou encore jouer à des jeux un peu complexes. Sans compter que la vie privée et le web ouvert étaient deux concepts auxquels seul Opera s’intéressait.</p>
<p style="text-align:justify;">Nous voici quinze ans plus tard. Les utilisateurs attendent autre chose de leurs navigateurs. Sur un navigateur, on peut maintenant jouer à des jeux en 3d et utiliser des suites bureautiques. Les navigateurs doivent fonctionner sur des micro-processeurs à basse consommation. Les architectures multi-cœurs sont devenues bien moins onéreuses que les processeurs rapides et la puissance des cartes graphiques a augmenté de manière démesurée. De nos jours, la plupart des applications visent des plateformes compilées en JIT. Les langages C et C++ ont des concurrents sérieux. N’oublions pas non plus que votre navigateur est devenu la cible favorite de tous les espions du monde, de tous les mafieux et de leurs petits cousins, ou encore que Google, Facebook et les autres gagnent des milliards de dollars en déterminant exactement ce que vous êtes en train de faire devant votre navigateur. En quinze ans, Webkit, Gecko, Trident et Presto ont été améliorés, optimisés, patchés, verrouillés et réglés des milliers de fois, pour obtenir les plate-formes impressionnantes que nous utilisons maintenant tous les jours.</p>
<p style="text-align:justify;">Il y a quelques jours, Opera a jeté l&#8217;éponge sur Presto et rejoint le mouvement Webkit. J&#8217;avoue avoir quelques doutes sur les conséquences stratégiques de ce mouvement pour Opera, mais ce n&#8217;est pas de cela que traite mon billet. Cette volte-face est bien entendu décevante. Décevante pour la communauté Mozilla car il semble bien que nous venons de perdre notre plus solide allié dans le combat pour la vie privée et le web ouvert. Décevante aussi car la raison avancée par Opera pour cet abandon est qu&#8217;il avait trop de développeurs qui développaient non pas des <em>applications web</em> mais des <em>applications webkit</em>.</p>
<p style="text-align:justify;">C&#8217;est bien ce point qui m&#8217;inquiète, car il s&#8217;agit d&#8217;un réel danger pour l&#8217;avenir du web entier. À chaque fois qu&#8217;une application est développée à partir de standards ouverts, elle peut fonctionner sur tous les navigateurs standards – pas uniquement les navigateurs principaux, mais aussi des navigateurs moins connus ou des navigateurs qui n&#8217;existent pas encore. À l&#8217;inverse, par définition, une application webkit ne fonctionnera que sur les navigateurs webkit. Si vous êtes un développeur web, souvenez-vous de ces chiffres : <strong>cela signifie que votre application va rejeter environ 60% de ses utilisateurs potentiels</strong>. Et encore, ce chiffre suppose que 1/ tous les utilisateurs actuels d&#8217;Opera vont passer à webkit ; 2/ tous les navigateurs webkit sont compatibles bug-pour-bug et bizarrerie-pour-bizarrerie, ce qui est loin d&#8217;être le cas.</p>
<p style="text-align:justify;">De fait, c&#8217;est même un peu pire. Si votre application webkit dépend des bugs ou bizarreries webkit, il y a de fortes chances que ces bugs et bizarreries finissent par être corrigées. Le cas échéant, <strong>d&#8217;ici un ou deux ans, votre base d&#8217;utilisateurs potentiels aura fondu, et ne resteront que les utilisateurs qui ne mettent jamais à jour leur navigateur</strong>. Soudainement, dépendre des fonctionnalités avancées et non-standard de Webkit est devenu un handicap.</p>
<p style="text-align:justify;">Oh, et vous vous souvenez de cette non-citation à propos du boulet Webkit ? Un de ces jours, vous l&#8217;entendrez. Il n&#8217;est un secret pour personne que Mozilla travaille sur Servo, son moteur de rendu de la prochaine génération, et je serais fort surpris que Google et Microsoft ne soient pas en train de faire la même chose quelque part dans leurs laboratoires R&amp;D. Servo est réécrit à partir de zéro. Pas avec l&#8217;objectif d&#8217;être compatible bug-pour-bug ou bizarrerie-pour-bizarrerie avec Gecko ou Webkit, mais purement à partir des spécifications du web ouvert. Sans aucun doute, les homologues de Google et de Microsoft suivent ou suivront la même stratégie, tout simplement parce que développer un moteur de rendu est une tâche d&#8217;une complexité impressionnante, et essayer d&#8217;émuler des bugs ne fait qu&#8217;ajouter un ordre de complexité.</p>
<p style="text-align:justify;">Alors, si vous souhaitez maximiser votre base d&#8217;utilisateurs et vous assurer que votre application va continuer à utiliser dans quelques années, vous connaissez la technique :</p>
<div id="attachment_1230" class="wp-caption aligncenter" style="width: 490px"><a href="http://dutherenverseauborddelatable.files.wordpress.com/2013/02/marketplace.jpg"><img class="size-full wp-image-1230" alt="Please don't hurt the web, use open standards" src="http://dutherenverseauborddelatable.files.wordpress.com/2013/02/marketplace.jpg?w=480&#038;h=384" width="480" height="384" /></a><p class="wp-caption-text">Sauvez le web. Utilisez des standards ouverts.</p></div>
<p style="text-align:justify;">
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dutherenverseauborddelatable.wordpress.com/1233/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dutherenverseauborddelatable.wordpress.com/1233/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dutherenverseauborddelatable.wordpress.com&#038;blog=1202429&#038;post=1233&#038;subd=dutherenverseauborddelatable&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://dutherenverseauborddelatable.wordpress.com/2013/02/23/qui-a-parle-de-webkit-nous-avons-parle-devolution/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://2.gravatar.com/avatar/26385ab59b5a13c50262c302a3bcd17c?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">yoric</media:title>
		</media:content>

		<media:content url="http://dutherenverseauborddelatable.files.wordpress.com/2013/02/marketplace.jpg" medium="image">
			<media:title type="html">Please don&#039;t hurt the web, use open standards</media:title>
		</media:content>
	</item>
		<item>
		<title>It’s not about Webkit, silly. It’s about evolution.</title>
		<link>http://dutherenverseauborddelatable.wordpress.com/2013/02/20/its-not-about-webkit-silly-its-about-evolution/</link>
		<comments>http://dutherenverseauborddelatable.wordpress.com/2013/02/20/its-not-about-webkit-silly-its-about-evolution/#comments</comments>
		<pubDate>Wed, 20 Feb 2013 15:58:33 +0000</pubDate>
		<dc:creator>yoric</dc:creator>
				<category><![CDATA[Firefox]]></category>
		<category><![CDATA[In English / En anglais]]></category>
		<category><![CDATA[Informatique / Computer science]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Sûreté / Security]]></category>
		<category><![CDATA[browser]]></category>
		<category><![CDATA[chrome]]></category>
		<category><![CDATA[explorer]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[internet explorer]]></category>
		<category><![CDATA[khtml]]></category>
		<category><![CDATA[microsoft]]></category>
		<category><![CDATA[mozilla]]></category>
		<category><![CDATA[opera]]></category>
		<category><![CDATA[presto]]></category>
		<category><![CDATA[safari]]></category>
		<category><![CDATA[servo]]></category>
		<category><![CDATA[trident]]></category>
		<category><![CDATA[webkit]]></category>

		<guid isPermaLink="false">http://dutherenverseauborddelatable.wordpress.com/?p=1229</guid>
		<description><![CDATA[« Webkit is a rust bucket. We can’t move away from it, because our users rely on its bugs as much as on its features, but it’s based on deprecated technologies, concepts that don’t scale anymore, and it just won’t match today’s needs or hardware. If we had any choice, we would dump the whole [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dutherenverseauborddelatable.wordpress.com&#038;blog=1202429&#038;post=1229&#038;subd=dutherenverseauborddelatable&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>« <em>Webkit is a rust bucket. We can’t move away from it, because our users rely on its bugs as much as on its features, but it’s based on deprecated technologies, concepts that don’t scale anymore, and it just won’t match today’s needs or hardware. If we had any choice, we would dump the whole thing and restart from scratch.</em> »</p>
<p><span id="more-1229"></span></p>
<p style="text-align:justify;">Who said that? Nobody, I guess. Webkit is a very nice family of engines. Nice enough that Apple and Google have been using it in major browsers. A few days ago, Opera has announced that they will be abandoning Presto, their own engine, and switch to Webkit. This is certainly an impressive portofolio.</p>
<p style="text-align:justify;">But let’s face it: Webkit is ancient technology. Née KHTML, Webkit was first released in 1998, roughly the same date as Mozilla’s Gecko or Microsoft’s Trident, and four years before Opera’s own Presto. At the time, multi-threading was expensive, multi-core systems were a thing of the future, GPUs could only be used by games, tomorrow’s CPU was twice faster than yesterday’s, compiling C++ on various platforms involved plenty of guesswork and nobody outside of academic circles took JITs, type-safe programming or dynamic programming seriously. Oh, and nobody in their right state of mind could imagine using a browser for working on documents or for playing non-trivial games. Also, privacy and open web were two things that only Opera was even considering.</p>
<p style="text-align:justify;">Fast-forward 15 years. Expectations about browsers have changed. Browsers now support first-person shooters and office suites. Browsers need to work on low-powered CPUs. Multi-core has become cheaper than faster CPUs, and GPUs are now insanely powerful. Most applications written nowadays target JIT-ed platforms. C and C++ have very serious competitors. And let’s not forget that every spy, every mobster and their nephew is attempting to steal control of your browser, and that Google, Facebook and others have made billions of dollars finding out exactly what you are doing online. During these 15 years, Webkit, Gecko, Trident and Presto have been upgraded, optimized, hacked, hardened and tweaked countless times into the powerhouses we use every day.</p>
<p style="text-align:justify;">A few days ago, Opera threw the towel on Presto and joined the Webkit movement. While I have my doubts about the business consequences of this move, I am no business strategist, so I will not comment upon something that is doubtless beyond my ken. This change is, of course, disappointing. Disappointing for the Mozilla community because it seems that we have lost our strongest ally in the war for privacy and the open web. Disappointing also because the very reason given by Opera for this choice is that there were too many developers writing not <em>Web Applications</em> but <em>Webkit Applications</em>.</p>
<p style="text-align:justify;">And see, that’s a major problem for the future of the whole web. Whenever a <em>Web application</em> is developed that targets open standards, it can work with any standards-compliant browser, not just one of the major browsers, but in fact any browser that has yet to be developed. On the other hand, by definition, developing a Webkit application means effectively that your application will work only on Webkit browsers. If you are a web developer, remember this statistics: this means that <strong>writing webkit applications ensures that you reject ~60% of your potential user base</strong> – and that’s assuming that all Opera users will migrate to Webkit. And that’s also assuming that all Webkit browsers are all bug-for-bug and quirk-for-quirk compatible, which is actually far from true.</p>
<p style="text-align:justify;">Actually, it is a little worse than that. Because if your Webkit application depends upon Webkit quirks, bugs that end up fixed or non-standard features that end up abandoned, this means that, <strong>within one or two years, your potential user base will have evaporated to only the users who never upgrade their browser</strong>. All of a sudden, relying upon cutting-edge Webkit features has turned into a handicap.</p>
<p style="text-align:justify;">Oh, and remember that non-quote about Webkit being a rust bucket? One day soon, you will hear it. It is no secret that Mozilla is working in Servo, its next-generation rendering engine, and I would be surprised if Google and Microsoft were not doing the same thing behind closed doors. Servo is written mostly from scratch. Not with the objective of being bug-to-bug and quirk-to-quirk compatible with Gecko or with Webkit, but purely from the specifications of the open web. Doubtless, Google’s and Microsoft’s hypothetical replacements for Webkit and Trident follow or will follow the same strategy, simply because writing a rendering engine is a task of considerable complexity, and attempting to reverse-engineer behavior from bugs increases complexity and likelihood of unexpectedbugs by an other of magnitude.</p>
<p style="text-align:justify;">So, do you want to maximize your user base and ensure that your application will continue working a few years from now?</p>
<div id="attachment_1230" class="wp-caption aligncenter" style="width: 490px"><a href="http://dutherenverseauborddelatable.files.wordpress.com/2013/02/marketplace.jpg"><img class="size-full wp-image-1230" alt="Please don't hurt the web, use open standards" src="http://dutherenverseauborddelatable.files.wordpress.com/2013/02/marketplace.jpg?w=480&#038;h=384" width="480" height="384" /></a><p class="wp-caption-text">Please don&#8217;t hurt the web, use open standards</p></div>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dutherenverseauborddelatable.wordpress.com/1229/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dutherenverseauborddelatable.wordpress.com/1229/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dutherenverseauborddelatable.wordpress.com&#038;blog=1202429&#038;post=1229&#038;subd=dutherenverseauborddelatable&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://dutherenverseauborddelatable.wordpress.com/2013/02/20/its-not-about-webkit-silly-its-about-evolution/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://2.gravatar.com/avatar/26385ab59b5a13c50262c302a3bcd17c?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">yoric</media:title>
		</media:content>

		<media:content url="http://dutherenverseauborddelatable.files.wordpress.com/2013/02/marketplace.jpg" medium="image">
			<media:title type="html">Please don&#039;t hurt the web, use open standards</media:title>
		</media:content>
	</item>
		<item>
		<title>Ongoing Mozilla Student Projects</title>
		<link>http://dutherenverseauborddelatable.wordpress.com/2012/11/20/ongoing-mozilla-student-projects/</link>
		<comments>http://dutherenverseauborddelatable.wordpress.com/2012/11/20/ongoing-mozilla-student-projects/#comments</comments>
		<pubDate>Tue, 20 Nov 2012 19:56:09 +0000</pubDate>
		<dc:creator>yoric</dc:creator>
				<category><![CDATA[Firefox]]></category>
		<category><![CDATA[In English / En anglais]]></category>
		<category><![CDATA[Informatique / Computer science]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://dutherenverseauborddelatable.wordpress.com/?p=1225</guid>
		<description><![CDATA[It is that time of the year already. No, I do not mean Diwali or Christmas Shopping Frenzy, but Mozilla Student Projects. A number of students have started projects, and I will try and post updates regularly. As you will see, for the moment, students seem to have a few difficulties with communication. So, here [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dutherenverseauborddelatable.wordpress.com&#038;blog=1202429&#038;post=1225&#038;subd=dutherenverseauborddelatable&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>It is that time of the year already. No, I do not mean Diwali or Christmas Shopping Frenzy, but <a href="https://github.com/Yoric/Mozilla-Student-Projects/issues">Mozilla Student Projects</a>. A number of students have started projects, and I will try and post updates regularly.</p>
<p><span id="more-1225"></span></p>
<p>As you will see, for the moment, students seem to have a few difficulties with communication. So, here is a general message to all students working on these projects: please work in the open! Use your issue tracker, your git, communicate on IRC, blog about your work, etc. Working in silence is a good way to ensure that your project will also die in silence.</p>
<h2>Running on time</h2>
<h3><a href="https://github.com/Yoric/Mozilla-Student-Projects/issues/10">MSP #10: Map Your Friends</a></h3>
<p><strong>Start date:</strong> October 30th, 2012<br />
<strong>Team:</strong> [Guys, I’d like to have your names!]<br />
<strong>Objective:</strong> A group of people wants to be able to track each other on a map in real-time. Useful for sport, games, but also rescue teams.<br />
<strong>Message to the team:</strong> Currently on hold due to exams, but early results look quite encouraging. Sorry it took me so long to review your code. Keep up the good work, but please, please, separate cleanly your JavaScript from your PHP code.</p>
<h2>Too early to tell</h2>
<h3><a href="https://github.com/Yoric/Mozilla-Student-Projects/issues/42">MSP #42: Bombermaaaan</a></h3>
<p><strong>Start date:</strong> October 30th, 2012<br />
<strong>Team:</strong> [Guys, I’d like to have your names!] (Université d’Évry)<br />
<strong>Objective:</strong> A great game, for the touchscreen web.<br />
<strong>Message to the team:</strong> No current activity that I know of, but I see some issues on the tracker, so I will not classify this as “Worrying silence” just yet. Hey, team, what’s your status?</p>
<h3><a href="https://github.com/Yoric/Mozilla-Student-Projects/issues/51">MSP #51: Reimplement Qix as a FirefoxOS-friendly Open Web Application</a></h3>
<p><strong>Start date:</strong> October 30th, 2012<br />
<strong>Team:</strong> [Guys, I’d like to have your names!] (Université d’Évry)<br />
<strong>Objective:</strong> A great game, for the touchscreen web.<br />
<strong>Message to the team: </strong>No activity that I know of, the team recently asked questions regarding testing with FFOS, so I will not classify this as “Worrying silence” just yet. Hey, team, what’s your status?</p>
<h2>Worrying silence</h2>
<h3><a href="https://github.com/Yoric/Mozilla-Student-Projects/issues/1">MSP #1: An Open Web App for editing rich text file</a></h3>
<p><strong>Start date:</strong> October 6th, 2012.<br />
<strong>Team:</strong> Abhishek Potnis, Amod Narvekar, Pratik Patil (Vidyavardhini&#8217;s College Of Engineering and Technology, Mumbai University, India).<br />
<strong>Objective:</strong> Build an Open Web Application that can be used to edit simple web pages, using HTML contentEditable. This application must work offline and must be friendly to touch screen devices.<br />
<strong>Message to the team:</strong> For the moment, I have received a number of questions but I have not seen anything that suggests progress. Team, I am counting on you all to get back on tracks.</p>
<p>&nbsp;</p>
<h3><a href="https://github.com/Yoric/Mozilla-Student-Projects/issues/8">MSP #8: An Open Web App for reading RSS streams</a></h3>
<p><strong>Start date:</strong> October 30th, 2012<br />
<strong>Team:</strong> [Guys, I’d like to have your names!] (Université d’Évry)<br />
<strong>Objective:</strong> Read RSS streams on any open web app-enabled device.<br />
<strong>Message to the team:</strong> Are you alive?</p>
<h3></h3>
<h3><a href="https://github.com/Yoric/Mozilla-Student-Projects/issues/9">MSP #9: Run-run-run</a></h3>
<p><strong>Start date:</strong> October 30th, 2012<br />
<strong>Team:</strong> [Guys, I’d like to have your names!] (Université d’Évry)<br />
<strong>Objective:</strong> An open web application that can be used to record times and positions while running, biking, hiking, etc.<br />
<strong>Message to the team:</strong> Are you alive?</p>
<p>&nbsp;</p>
<h3><a href="https://github.com/Yoric/Mozilla-Student-Projects/issues/45">MSP #45: Tux of Math Command</a></h3>
<p><strong>Start date:</strong> October 30th, 2012<br />
<strong>Team:</strong> [Guys, I’d like to have your names!] (Université d’Évry)<br />
<strong>Objective:</strong> Port game Tux of Math Command to all web app-enabled devices, in particular touch screen devices.<br />
<strong>Message to the team:</strong> Are you alive?</p>
<p>&nbsp;</p>
<h3><a href="https://github.com/Yoric/Mozilla-Student-Projects/issues/50">MSP #50: A 3d demo in Rust</a></h3>
<p><strong>Start date:</strong> October 30th, 2012<br />
<strong>Team:</strong> [Guys, I’d like to have your names!] (Université d’Évry)<br />
<strong>Objective:</strong> Demonstrate how to unleash the power of Rust, in 3D.<br />
<strong>Message to the team:</strong> Are you alive?</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dutherenverseauborddelatable.wordpress.com/1225/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dutherenverseauborddelatable.wordpress.com/1225/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dutherenverseauborddelatable.wordpress.com&#038;blog=1202429&#038;post=1225&#038;subd=dutherenverseauborddelatable&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://dutherenverseauborddelatable.wordpress.com/2012/11/20/ongoing-mozilla-student-projects/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://2.gravatar.com/avatar/26385ab59b5a13c50262c302a3bcd17c?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">yoric</media:title>
		</media:content>
	</item>
		<item>
		<title>Tales of Science-Fiction Bugs: The Thing That Killed Talos</title>
		<link>http://dutherenverseauborddelatable.wordpress.com/2012/11/12/tales-of-science-fiction-bugs-the-thing-that-killed-talos/</link>
		<comments>http://dutherenverseauborddelatable.wordpress.com/2012/11/12/tales-of-science-fiction-bugs-the-thing-that-killed-talos/#comments</comments>
		<pubDate>Mon, 12 Nov 2012 11:47:08 +0000</pubDate>
		<dc:creator>yoric</dc:creator>
				<category><![CDATA[Firefox]]></category>
		<category><![CDATA[In English / En anglais]]></category>
		<category><![CDATA[Informatique / Computer science]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Science-Fiction Bug]]></category>
		<category><![CDATA[bug]]></category>
		<category><![CDATA[c++]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[dom]]></category>
		<category><![CDATA[horror story]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[mozilla]]></category>
		<category><![CDATA[scifi]]></category>
		<category><![CDATA[workers]]></category>

		<guid isPermaLink="false">http://dutherenverseauborddelatable.wordpress.com/?p=1223</guid>
		<description><![CDATA[Have you ever encountered one of these bugs? One in which every single line of your code is correct, in which every type-check passes, every single unit test succeeds, the specifications are fulfilled but somehow, for no reason that can be explained rationally, it just does not work? I call them Science-Fiction Bugs. I am [&#8230;]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dutherenverseauborddelatable.wordpress.com&#038;blog=1202429&#038;post=1223&#038;subd=dutherenverseauborddelatable&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p style="text-align:justify;">Have you ever encountered one of these bugs? One in which every single line of your code is correct, in which every type-check passes, every single unit test succeeds, the specifications are fulfilled but somehow, for no reason that can be explained rationally, it just does not work? I call them Science-Fiction Bugs. I am sure that you have met some of them. For some reason, the Mozilla Performance Team seems to stumble upon such bugs rather often, perhaps because we spend so much time refactoring other team’s code long after the original authors have moved on to other features, and combining their code with undertested libraries and technologies. Truly, this is life on the Frontier.</p>
<p style="text-align:justify;">Today, I would like to tell you the tale of one of these Science-Fiction Bugs: <em>The Thing That Killed Talos</em>.</p>
<p style="text-align:justify;"><span id="more-1223"></span></p>
<p style="text-align:justify;">As they often do, this tale started innocuously, with a minor refactoring to our Session Store mechanism. Ten lines were changed in the code, to move an already asynchronous operation off the main thread. As this simple change did not alter any API and simplified the code a little, it quickly passed review. Also, as it passed all our unit tests, it was promptly landed.</p>
<p style="text-align:justify;">And immediately reverted.</p>
<p style="text-align:justify;">As it turns out, the patch killed Talos, our performance-testing system.</p>
<h2 style="text-align:justify;">Step 1 Is that really a failure?</h2>
<p style="text-align:justify;">No amount of double-checking or updating to the latest version of our source code changed anything. This almost trivial patch, that passed all unit tests, that worked nicely when tested manually, that did not touch anything remotely related to Talos, killed Talos. Reproducibly. On all platforms.</p>
<p style="text-align:justify;">In other words, there really was a bug, hidden somewhere in the code. The hunt for the Thing That Killed Talos was on.</p>
<p style="text-align:justify;">At this stage, I had the following information:</p>
<ul>
<li>there was a bug, somewhere in the code;</li>
<li>this bug was causing timeouts on all platforms, but not on the exact same tests for all platforms;</li>
<li>this bug was somehow related to replacing one use of NetUtils.jsm by one essentially equivalent use of OS.File;</li>
<li>the problem took place at some point during Talos shutdown [<a title="Mettez du Mozilla dans vos études !" href="#note_1">1</a>].</li>
</ul>
<h2 style="text-align:justify;"></h2>
<h2 style="text-align:justify;">Step 2 Killing me softly</h2>
<p style="text-align:justify;">To fix a bug, one needs to reproduce it. Reproducing it on our test servers was a sure thing, so I set out to reproduce it locally, figuring that it would only be a matter of a little setup and configuration effort. So, I installed Talos locally, I rebuilt Firefox with the exact same configuration, I configured Talos exactly as it is configured on the server, and I expected to end up with a sample that could be used for experimenting and debugging purposes.</p>
<p style="text-align:justify;">Unfortunately, this is not what happened. Locally, all Talos tests passed. Again, no amount of double-checking build options or Talos options, no amount of moving backwards in the source code of Talos or Firefox, or of using the binaries produced by the test server, could change the fact that the tests succeeded. Reproducibly. On both MacOS X and Linux – I had not tested Windows.</p>
<p style="text-align:justify;">Oh, great. This trivial issue was turning into a Science-Fiction Bug.</p>
<p style="text-align:justify;">Additional information gathered:</p>
<ul>
<li>the bug was somehow related to the server on which Talos tests were executed or its configuration;</li>
<li>that was going to be a long ride.</li>
</ul>
<h2 style="text-align:justify;">Step 3 Psychic</h2>
<p style="text-align:justify;">Since reproducing the bug locally proved impossible, the next step was to attempt and corner it remotely, by carefully experimenting with our code, and combining this with a healthy dose of psychic debugging. Unfortunately, this also meant waiting a few hours between the start of an experiment and its result. Luckily for me, I don’t sleep a lot these days, so I could keep up with a near-permanent stream of experiments.</p>
<p style="text-align:justify;">During the course of the following week, I tinkered with the following parts of the code:</p>
<ul>
<li>introducing logging at every step of OS.File [result: everything was in order, all calls completed successfully];</li>
<li>introducing logging in the use of OS.File by SessionStore [result: everything was in order];</li>
<li>monitoring the shutdown of OS.File [result: everything was in order];</li>
<li>monitoring the shutdown of threads [result: locally, everything was in order – remotely, it never finished];</li>
<li>programmatically turning logging to its maximal level [result: locally, nothing interesting – remotely, some cycle collection shortly before the failure];</li>
<li>determining whether the issue disappeared if we used the same temporary file that NetUtils used [result: it did not];</li>
<li>determining whether the issue disappeared if all uses of OS.File were removed [result: it did];</li>
<li>determining whether the issue disappeared if the number of calls to OS.File was artificially limited [result: it did not];</li>
<li>determining whether the issue disappeared if OS.File stopped being used long before shutdown [result: it did not];</li>
<li>determining whether the issue disappeared if OS.File cleaned up after itself manually, instead of counting on the runtime [result: it changed nothing];</li>
<li>determining whether the issue disappeared if we replaced the call to OS.File with another call to OS.File that did nothing [result: it changed nothing];</li>
<li>adding time information to all logs [result: remotely, the DOM worker subsystem shutdown was caught in an apparently endless loop repeated exactly every 5 seconds].</li>
</ul>
<p style="text-align:justify;">Additional information gathered:</p>
<ul>
<li>the DOM worker subsystem failed to shutdown;</li>
<li>the issue involved a 5 second timeout in the shutdown of DOM workers;</li>
<li>the offending operation in DOM workers was <code>NS_ProcessNextEvent()</code>, which could in turn cause a call to just about anything;</li>
<li>the issue was not due to anything high-technology in OS.File, but most likely only to the fact that OS.File was spawning a thread;</li>
<li>the issue might be related to cycle collection.</li>
</ul>
<p style="text-align:justify;">All the signs pointed to something preventing DOM workers from closing, but not from the code of OS.File. The hunt was still on.</p>
<h2 style="text-align:justify;">Interlude – Fixing a DOM Worker shutdown bug</h2>
<p style="text-align:justify;">At some point during the hunt, I was informed of another OS.File-related bug that was also related to DOM workers shutting down improperly. By opposition to my Science-Fiction bug, however, this new bug was simple to reproduce and to fix [<a href="#note_2">2</a>].</p>
<p style="text-align:justify;">Unfortunately, the fix did not help resolve my Science-Fiction bug. Drats.</p>
<h2 style="text-align:justify;">Step 4 Working the slaves</h2>
<p style="text-align:justify;">At this stage, there did not seem to be anything more that could be learnt remotely. The only way forward was to request access to one of the machines used to run the Talos tests (the so-called “slaves”) and get Firefox through a debugger [<a href="#note_3">3</a>]. This involved a few technical stumbles along the way (in particular, Apple does seem to put a lot of efforts in not letting me install gdb on that Mac slave), but nothing that could not be fixed [<a href="#note_4">4</a>].</p>
<p style="text-align:justify;">A quick test confirmed that the whole world had not gone crazy and that the Talos tests did fail on the slave, even when launched by me.</p>
<p style="text-align:justify;">So, once armed with a Talos slave, a ssh connection, my trusty gdb, and a version of Talos slightly hacked into some compatibility with said gdb, I had the ability to obtain stack information:</p>
<ul>
<li>as expected, the immediate cause of the freeze was the DOM worker subsystem looping forever in its shutdown loop, waiting for all DOM workers to have terminated;</li>
<li>the call to <code>NS_ProcessNextEvent()</code> did not seem to do anything interesting, just timing out;</li>
<li>one of the DOM Workers (presumably the one spawned by OS.File) was effectively still active, despite the fact that had several minutes ago stopped executing any code.</li>
</ul>
<p style="text-align:justify;">Now, that is interesting. Upon further examination:</p>
<ul>
<li>this DOM Worker was also calling <code>NS_ProcessNextEvent()</code>, presumably waiting for instructions;</li>
<li>the C stack of this DOM Worker is somewhat surprising, insofar as it involves no less than 5 depths of <code>importScripts()</code> [5].</li>
</ul>
<h2 style="text-align:justify;">Step 5 Shooting in the dark</h2>
<p style="text-align:justify;">What is that? Calling <code>importScripts()</code> is an operation that leaves a trace on the stack long after the end of the execution of said importation? This deserves at least a wild attempt at fixing the issue.</p>
<p style="text-align:justify;">The implementation of OS.File was designed for modularity. Each file defines a small module (scoped within a function) which imports its dependencies through importScripts. Changing this to ensure that the main file imports all dependencies breaks this modularity and is not very satisfying but this is the matter of less than 20 lines of code.</p>
<p style="text-align:justify;">And Talos confirms that it works.</p>
<p style="text-align:justify;">Victory, I guess.</p>
<h2 style="text-align:justify;">Step 6 Pitch Black</h2>
<p style="text-align:justify;">The bug is fixed, all rejoice, updated SessionStore can land.</p>
<p style="text-align:justify;">But let’s push the matter a little further and try and determine what can have caused the issue in the first place. Unfortunately, I cannot draw decisive conclusions, but I can build a few educated guesses.</p>
<p style="text-align:justify;">Firstly, now that we know that <code>importScripts()</code> is related to the issue, we can deduce a few things. Function <code>importScripts()</code> can be used with any URL, and can be called from any point in the source code, so it must be able to deal with slow sources. This function, which is synchronous in JavaScript is therefore implemented asynchronously in C++, as its source code confirms. This reminds me very much of synchronous XMLHttpRequest or of alert(), two features (some would say “misfeatures”) with a long history of bugs. A typical implementation of such features requires nested event loops to block the execution of JavaScript code without actually blocking the underlying thread [<a href="#note_6">6</a>]. I have not checked the corresponding parts of the implementation, but it would make sense to have the underlying thread continue to receive and enqueue messages from other threads while <code>importScripts()</code> is executed. This would explain nicely why the C++ stack shows 5 depths of <code>importScripts()</code> while the JavaScript stack is empty.</p>
<p style="text-align:justify;">Also, since these nested event loops are introduced to deal with a slow sources, their presence suggests one factor that was missing to explain the difference between running on a Talos slave and running on a development machine: speed. A very slow input device might cause the nested event loop to run, while a fast one might avoid this. As the Talos slaves are used for benchmarking, one can theorize that the hardware is seldom or never upgraded, to keep results consistent, by opposition to unit testing slaves or developer machines.</p>
<p style="text-align:justify;">If so, I might have accidentally hit a sophisticated race condition that might show up again one of these days on devices with slow file access, such as cellphones. If so, the issue might show up again with Firefox for Android or with Firefox OS and should be monitored.</p>
<p style="text-align:justify;">Is this scenario credible? Ben Turner or Kyle Huey, if one of you reads these lines, you might be able to tell me whether I am wrong.</p>
<p style="text-align:justify;">In the meantime, I will return to my code. Something new has come up. Somehow, by changing a few lines of JavaScript in our code, I have managed to trigger an Access Violation in Visual C++ 64 bits. Truly, this is life on the Frontier.</p>
<hr />
<p style="text-align:justify;">[<a name="note_1"></a>1] My thanks to jmaher for decoding this information.</p>
<p style="text-align:justify;">[<a name="note_2"></a>2] My thanks to khuey for pinpointing the issue immediately and suggesting a fix.</p>
<p style="text-align:justify;">[<a name="note_3"></a>3] My thanks to espindola for suggesting this avenue.</p>
<p style="text-align:justify;">[<a name="note_4"></a>4] My thanks to the RelEng team for helping me out treading this unfamiliar ground.</p>
<p style="text-align:justify;">[<a name="note_5"></a>5] My thanks to bent for going “hey, that’s funny” when looking at these importScripts.</p>
<p style="text-align:justify;">[<a name="note_6"></a>6] Implementing the same feature in Rust or in a language with call/cc would, of course, have been different, but C++ is what we have.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dutherenverseauborddelatable.wordpress.com/1223/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dutherenverseauborddelatable.wordpress.com/1223/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dutherenverseauborddelatable.wordpress.com&#038;blog=1202429&#038;post=1223&#038;subd=dutherenverseauborddelatable&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://dutherenverseauborddelatable.wordpress.com/2012/11/12/tales-of-science-fiction-bugs-the-thing-that-killed-talos/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:content url="http://2.gravatar.com/avatar/26385ab59b5a13c50262c302a3bcd17c?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">yoric</media:title>
		</media:content>
	</item>
	</channel>
</rss>
