<?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/"
	>

<channel>
	<title>Indistinguishable from Jesse</title>
	<atom:link href="http://www.squarefree.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.squarefree.com</link>
	<description>Jesse Ruderman on Firefox, security, and more</description>
	<lastBuildDate>Tue, 03 Jan 2012 20:55:32 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>Lessons from JS engine bugs</title>
		<link>http://www.squarefree.com/2011/09/01/lessons-from-js-engine-bugs/</link>
		<comments>http://www.squarefree.com/2011/09/01/lessons-from-js-engine-bugs/#comments</comments>
		<pubDate>Fri, 02 Sep 2011 00:10:22 +0000</pubDate>
		<dc:creator>Jesse Ruderman</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Mozilla]]></category>
		<category><![CDATA[Security]]></category>

		<guid isPermaLink="false">http://www.squarefree.com/?p=791</guid>
		<description><![CDATA[Last week, I asked Luke Wagner to explain some security bugs that he fixed in the past. I hoped to learn from each bug at multiple levels, in ways that could help prevent future security bugs from arising and persisting. Luke is one of the developers working on Firefox's JavaScript engine, which is currently our [...]]]></description>
			<content:encoded><![CDATA[<p>Last week, I asked <a href="http://blog.mozilla.com/luke/">Luke Wagner</a> to explain some security bugs that he fixed in the past. I hoped to <a href="http://en.wikipedia.org/wiki/Root_cause_analysis">learn from each bug at multiple levels</a>, in ways that could help prevent future security bugs from arising and persisting.</p>

<p>Luke is one of the developers working on <a href="https://developer.mozilla.org/en/SpiderMonkey">Firefox's JavaScript engine</a>, which is currently our largest source of <a href="https://wiki.mozilla.org/Security_Severity_Ratings">critical</a> security bugs.</p>

<h4>Method</h4>

<p>I imagined we would recurse in <a href="http://en.wikipedia.org/wiki/Why-Because_analysis">exhaustive breadth</a> and <a href="http://en.wikipedia.org/wiki/5_Whys">exhausting depth</a>. Instead, we recursed only on the most interesting items, and refined a checklist of starting points:</p>

<ul>
<li>What was the bug?</li>
<li>What went wrong in the developer's thinking that caused the bug to be introduced?</li>
<li>What made the bug exploitable?</li>
<li>What caused us to use especially dangerous features of C++?</li>
<li>Could a new abstraction make it possible to do this both fast and safe?</li>
<li>What caused the bug to persist? Could we have caught this earlier with improved regression tests, fuzz testing, dynamic analysis, or static analysis?</li>
</ul>

<p>Luke and I made <strong><a href="http://www.squarefree.com/lessons-from-js-bugs.html">trees for all ten bugs</a></strong>, at first on paper and later using EtherPad. Then I extracted and categorized what I thought were the most useful lessons and recommendations.</p>

<h4>Recommendations for introducing fewer bugs</h4>

<p>Casts</p>

<ul>
<li>Create centralized, type-restricted cast functions. This protects you when you change the representation of one of the types. It also protects against mistakes that cause the input type to be incorrect.</li>
</ul>

<p>Sentinel values</p>

<ul>
<li>Use tagged unions instead.</li>
<li>Use a typed wrapper (a struct containing a single value). When assigning from the underlying numeric type, convert using one of two functions: one that checks for special values, and one that explicitly does not.</li>
<li>Audit existing code paths to ensure they cannot generate the special value.</li>
</ul>

<p>Clarity of invariants</p>

<ul>
<li>Increase use of <a href="http://mxr.mozilla.org/mozilla-central/search?string=AssertInvariants">methods named AssertInvariants</a></li>
<li>Create an alias for JS_ASSERTION called JS_INVARIANT.</li>
</ul>

<p>Interacting with other developers</p>

<ul>
<li>If you're about to do something gross because someone else doesn't expose the right API/helper, maybe you should get it exposed.</li>
</ul>

<p>JS Engine specific</p>

<ul>
<li>Any patch that touches rooting should be reviewed by Igor.</li>
<li>Interpreter could have better abstraction and encapsulation for its stack.</li>
</ul>

<h4>Recommendations for catching bugs earlier</h4>

<p>Static analysis</p>

<ul>
<li>Find all casts (C-style casts, the reinterpret_cast keyword, and casts through unions) for a given type. Could be used to enforce centralization or to find things that should be centralized.</li>
<li>Be suspicious of a function with multiple return statements, all of which return the same primitive value.</li>
<li>Be suspicious of a function returning true/success in an OOM path.</li>
</ul>

<p>Dynamic analysis</p>

<ul>
<li>Ask Valgrind developers what they think of providing (in valgrind.h) a way to tie the addressability of "stacklike memory" to a variable that represents the end of the stack.</li>
</ul>

<p>Fuzzing</p>

<ul>
<li>We should fuzz <a href="https://developer.mozilla.org/En/DOM/Worker">worker threads</a> somehow.
  <ul>
  <li>In browser (slow and messy, but it's what users are running).
  <li>In thread-safe shell (--enable-threadsafe?), which has "toy workers".</li>
  </ul>
</li>
<li>We should fuzz compartments better.
  <ul>
  <li>I should ask Blake and Andreas for help with testing compartments and wrappers.</li>
  <li>I should ask Gary to run jsfunfuzz in xpcshell, where I can test both same-origin and different-origin compartments, and thus get more interesting wrappers.</li>
  </ul>
</li>
<li>We should give JS OOM fuzzing another shot.</li>
</ul>

<h4>Next steps</h4>

<p>I'm curious if others have additional ideas for what could have prevented the ten bugs we looked at. For example, someone like <a href="http://whereswalden.com/">Jeff Walden</a>, who loves to write exhaustive regression tests, might have ideas that Luke and I did not consider.</p>

<p>I'd also like to do this kind of analysis with a other developers on bugs they have fixed.</p>]]></content:encoded>
			<wfw:commentRss>http://www.squarefree.com/2011/09/01/lessons-from-js-engine-bugs/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>On the Isle of Rapidity</title>
		<link>http://www.squarefree.com/2011/08/27/on-the-isle-of-rapidity/</link>
		<comments>http://www.squarefree.com/2011/08/27/on-the-isle-of-rapidity/#comments</comments>
		<pubDate>Sat, 27 Aug 2011 23:15:09 +0000</pubDate>
		<dc:creator>Jesse Ruderman</dc:creator>
				<category><![CDATA[Mozilla]]></category>
		<category><![CDATA[Rapid release]]></category>

		<guid isPermaLink="false">http://www.squarefree.com/?p=788</guid>
		<description><![CDATA[Not all of our neighbors followed us. Some asked — demanded? — that we send back supplies. We acknowledged their request, but our immediate task was to explore this Isle of Rapidity. What surprises would we discover? What surprises would discover us? To survive in this strange land, we would have to befriend new neighbors. [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://kazhack.org/?post/2011/08/17/A-Bad-Surprise">Not all</a> of our neighbors followed us. Some <a href="http://mike.kaply.com/2011/06/24/why-do-companies-need-time-to-deploy-browsers/">asked</a> — <a href="http://www.squarefree.com/2011/08/27/venturing-from-mount-annum/#comment-11919">demanded?</a> — that we send back supplies.</p>

<p><a href="https://blog.mozilla.com/blog/2011/07/19/announing-mozilla-enterprise-user-working-group/">We</a> <a href="http://mozakai.blogspot.com/2011/06/long-term-support-for-firefox.html">acknowledged</a> <a href="http://blog.mozilla.com/sfink/2011/06/26/firefox-at-work/">their</a> <a href="http://jonoscript.wordpress.com/2011/07/18/its-not-about-the-version-numbers-its-about-extension-compatibility-and-long-term-support/">request</a>, but our immediate task was to explore this Isle of Rapidity. What surprises would we discover? What surprises would discover us?</p>

<p>To survive in this strange land, we would have to befriend new neighbors. Living for so long atop <a href="http://www.squarefree.com/2011/08/27/venturing-from-mount-annum/">Mount Annum</a>, we had <a href="http://aakash.doesthings.com/2011/07/19/a-platform-for-contributor-engagement-at-mozilla-2/">almost forgotten</a> how to <a href="http://www.mozilla.org/contribute/">introduce ourselves</a>.</p>

<p>But we had <a href="http://en.wikipedia.org/wiki/Monkey_patch">brought</a> <a href="https://developer.mozilla.org/en/XPCOM_Interface_Reference/nsIDOMGlobalPropertyInitializer">much</a> <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=633653" title="Bug 633653 - revamp about:memory">to</a> <a href="https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/WeakMap">share</a>. We had barely opened our packs when the wind seemed to whisper:</p>

    <blockquote><p>Here, <a href="https://bugzilla.mozilla.org/buglist.cgi?quicksearch=563262,461634,310165,179006">gifts</a> arrive <a href="http://weblogs.mozillazine.org/asa/archives/2011/08/every_six_weeks.html">almost</a> <a href="http://www.mozilla.org/en-US/firefox/channel/">before</a> you send them.</p></blockquote>

<p>Maybe it wouldn’t be so hard to make friends here.</p>

<p>And there was something inexplicably <a href="http://en.wikipedia.org/wiki/History_of_Mozilla_Application_Suite#Release_history">familiar</a> about this island. Was it the scent of the flowers? The rhythmic waves in the distance? The chattering of wildlife, almost a chorus?</p>

    <blockquote><p>Here, a <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=564667" title="Bug 564667 - Allow bootstrapped add-ons to have chrome">gift</a> to your neighbor is equally a <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=467520" title="Bug 467520 - Adblock Plus tracking bug">gift</a> to yourself.</p></blockquote>

<p>We felt a sudden shift in perception: the Isle of Rapidity was <em>home</em>.</p>]]></content:encoded>
			<wfw:commentRss>http://www.squarefree.com/2011/08/27/on-the-isle-of-rapidity/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Venturing from Mount Annum</title>
		<link>http://www.squarefree.com/2011/08/27/venturing-from-mount-annum/</link>
		<comments>http://www.squarefree.com/2011/08/27/venturing-from-mount-annum/#comments</comments>
		<pubDate>Sat, 27 Aug 2011 08:58:54 +0000</pubDate>
		<dc:creator>Jesse Ruderman</dc:creator>
				<category><![CDATA[Mozilla]]></category>
		<category><![CDATA[Rapid release]]></category>

		<guid isPermaLink="false">http://www.squarefree.com/?p=774</guid>
		<description><![CDATA[Our friends thought us mad. We had thrived atop Mount Annum. It was the highest peak as far as the eye could see. Once, we had sprained an ankle on the Foothills of Many Betas in the west. We remembered miserable visits to the Bog of Eternal Driver Approval in the east. Every time, we [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.glazman.org/weblog/dotclear/index.php?post/2011/06/21/The-faster-release-process-of-Firefox">Our</a> <a href="http://mike.kaply.com/2011/06/21/firefox-rapid-release-process/">friends</a> <a href="http://mike.kaply.com/2011/06/23/understanding-the-corporate-impact/">thought</a> <a href="http://www.glazman.org/weblog/dotclear/index.php?post/2011/06/29/E-pluribus-unum">us</a> <a href="http://www.glazman.org/weblog/dotclear/index.php?post/2011/07/12/I-still-don-t-understand">mad</a>.</p>

<p>We had thrived atop Mount Annum. It was the highest <a href="http://en.wikipedia.org/wiki/Hill_climbing#Local_maxima">peak</a> as far as the eye could see.</p>

<p>Once, we had sprained an ankle on the Foothills of Many Betas in the west. We remembered miserable visits to the Bog of Eternal Driver Approval in the east. Every time, we had quickly returned home.</p>

<p>But there we were, on the summit of Mount Annum, climbing into a cannon aimed at <a href="http://static.mozilla.com/moco/en-US/images/rapidreleasecycle_A_web_EN.png">4°N</a>, <a href="http://blog.mozilla.com/futurereleases/2011/07/19/every-six-weeks/">6°W</a>.</p>

<p>So far away, and yet oddly specific. We lit the fuse and plugged our ears.</p>

<p>We flew over the stifling Bog of Eternal Driver Approval. We flew over the perilous Sea of Recklessness.</p>

<p>We landed, as we hoped, on the uncharted <a href="http://blog.lizardwrangler.com/2011/08/25/rapid-release-process/">Isle</a> of <a href="http://blog.johnath.com/2011/08/26/rapidity/">Rapidity</a>. The landing was unexpectedly <a href="http://www.squarefree.com/2011/08/27/rapid-releases-and-crashes/">soft</a>.</p>

<p>We’ve shaken off the dust and gunpowder. We’ve begun to tend <a href="http://www.squarefree.com/2011/08/25/secure-and-compatible/">our</a> <a href="http://www.squarefree.com/2011/08/25/improving-intranet-compatibility/">wounds</a>. We’re excited about the upcoming <a href="http://en.wikipedia.org/wiki/Hill_climbing">climb</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://www.squarefree.com/2011/08/27/venturing-from-mount-annum/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Rapid releases and crashes</title>
		<link>http://www.squarefree.com/2011/08/27/rapid-releases-and-crashes/</link>
		<comments>http://www.squarefree.com/2011/08/27/rapid-releases-and-crashes/#comments</comments>
		<pubDate>Sat, 27 Aug 2011 08:45:44 +0000</pubDate>
		<dc:creator>Jesse Ruderman</dc:creator>
				<category><![CDATA[Mozilla]]></category>
		<category><![CDATA[Rapid release]]></category>

		<guid isPermaLink="false">http://www.squarefree.com/?p=762</guid>
		<description><![CDATA[In the months before Firefox's first rapid release, one concern echoed throughout engineering: crashes. We had always relied on long stabilization periods to get crash rates down. Firefox 4 would be our last high-stability release. We hoped improvements on other aspects of quality would outweigh the decreased stability. But then something surprising happened. We released [...]]]></description>
			<content:encoded><![CDATA[<p>In the months before Firefox's first rapid release, one concern echoed throughout engineering: crashes.</p>

<p>We had always relied on long stabilization periods to get crash rates down. Firefox 4 would be our last high-stability release. We hoped improvements on other aspects of quality would outweigh the decreased stability.</p>

<p>But then something surprising happened. We released Firefox 5, and <em>Firefox didn’t get crashier</em>.</p>

<table border="1" style="margin: 0 auto">
<thead><tr><th>Version</th><th>Crashes per 100 active daily users</th></tr></thead>
<tr><td>3.6.20</td><td><a href="https://crash-stats.mozilla.com/products/Firefox/versions/3.6.20">1.8</a></td></tr>
<tr><td>4.0.1</td><td><a href="https://crash-stats.mozilla.com/products/Firefox/versions/4.0.1">1.6</a></td></tr>
<tr><td>5.0.1</td><td><a href="https://crash-stats.mozilla.com/products/Firefox/versions/5.0.1">1.4</a></td></tr>
<tr><td>6.0</td><td><a href="https://crash-stats.mozilla.com/products/Firefox/versions/6.0">1.6</a></td></tr>
</table>

<p><a href="http://home.kairo.at/blog/2011-08/why_rapid_releases_can_improve_stability">KaiRo’s explanation</a> parallels what I’ve seen helping with <a href="https://wiki.mozilla.org/Performance/MemShrink">MemShrink</a>:</p>

<ul>
<li>The <em>channel cascade</em> gives each release 12 weeks of pure stabilization.</li>
<li>The <em>channel audiences</em> help by comparing alphas to alphas.</li>
<li>The <em>short cycles</em> enable backouts and reduce the desire to land half-baked features.</li>
</ul>

<p>“Rapid release” doesn't mean building Firefox the way we always have, <em>x</em> times faster. It’s a new process that fits together in beautiful yet fragile ways.</p>]]></content:encoded>
			<wfw:commentRss>http://www.squarefree.com/2011/08/27/rapid-releases-and-crashes/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Improving intranet compatibility</title>
		<link>http://www.squarefree.com/2011/08/25/improving-intranet-compatibility/</link>
		<comments>http://www.squarefree.com/2011/08/25/improving-intranet-compatibility/#comments</comments>
		<pubDate>Thu, 25 Aug 2011 23:45:32 +0000</pubDate>
		<dc:creator>Jesse Ruderman</dc:creator>
				<category><![CDATA[Mozilla]]></category>
		<category><![CDATA[Rapid release]]></category>
		<category><![CDATA[Security]]></category>

		<guid isPermaLink="false">http://www.squarefree.com/?p=755</guid>
		<description><![CDATA[Some organizations are reluctant to keep their browsers up-to-date because they worry that internal websites might not be compatible. Organization-internal sites can have unusual compatibility constraints. Many have small numbers of users, yet are highly sensitive to downtime. Some were developed with the assumption that the web would always be as static as it was [...]]]></description>
			<content:encoded><![CDATA[<p>Some organizations are reluctant to keep their browsers up-to-date because they worry that internal websites might not be compatible.</p>

<p>Organization-internal sites can have unusual compatibility constraints. Many have small numbers of users, yet are highly sensitive to downtime. Some were developed with the assumption that the web would always be as static as it was in 2003.</p>

<p>Rapid releases help in some ways: fewer things change at a time; we can deprecate APIs before removing them; and the permanent Aurora and Beta audiences help test each new release consistently.</p>

<p>But frequent releases make manual testing impractical. (Let's <a href="http://blog.mozilla.com/security/2010/02/10/fixing-security-holes-without-introducing-new-bugs/">pretend for now</a> that the roughly-monthly security "dot releases" never broke anything.)</p>

<p>As with the problem of <a href="http://etherpad.mozilla.com:9000/KeepingUsersUpdated">extension compatibility</a>, overlapping releases could be part of a solution.  But we should start by thinking about ways to attack compatibility problems directly.</p>


<h4>Automated testing</h4>

<p>A tool could scan for the use of deprecated web features, such as the “-moz-” prefixed version of <a href="https://developer.mozilla.org/en/CSS/border-radius">border-radius</a>.  This tool, similar in spirit to the AMO validator, could be run on the website's source code or on the streams received by Firefox.</p>

<p>There is already a <a href="https://addons.mozilla.org/en-US/firefox/addon/compatibility-detector/">compatibility detector for HTML issues</a>, but my intuition is that CSS and DOM compatibility problems are more common.</p>


<h4>User testing</h4>

<p>Not all visitors have the technical skills and motivation to report issues they encounter. In some organizations, bureaucracy can stifle communication between visitors and developers. Automating error reports could help.</p>

<p>It would be cool if a Firefox extension could report warnings and errors from internal sites to a central server.</p>

<p>Depending on the privacy findings from this extension, it could become an <a href="https://developer.mozilla.org/en/DOM/window.onerror">onerror</a>++ API available to all web sites, similar to the <a href="http://www.w3.org/2010/webperf/">Web Performance APIs</a>. This seems more sensible than <a href="https://wiki.mozilla.org/Security/CSP/Specification#Violation_Report_Syntax">adding API-specific error reporting</a>.</p>


<h4>Sample contracts</h4>

<p>We could suggest things to put in contracts for outsourced intranet development.</p>

<p>Often, the best solution is to align incentives. That could take the form of specifying that the developers are responsible for maintenance costs for a specified length of time.</p>

<p>When that isn't practical, I'd suggest specifying requirements such as:</p>

<ul>
<li>Follow <a href="http://groups.google.com/group/mozilla.dev.platform/browse_thread/thread/476d118886ad86d7/85a0a34b74af1e1e">forward-compatible</a> practices: avoid browser-specific or prefixed features; sniff features rather than browsers; validate markup and CSS.</li>

<li>Include automated, browser-based tests for key workflows. (Perhaps using <a href="http://seleniumhq.org/">Selenium</a>, a tool <a href="http://seleniumhq.org/about/contributors.html">developed in part by Mozilla employees</a>.)</li>

<li>Include non-obfuscated source code.</li>
</ul>


<h4>Channel management</h4>

<p>There is a roughly exponential distribution of home users between the <a href="http://static.mozilla.com/moco/en-US/images/rapidreleasecycle_A_web_EN.png">Nightly, Aurora, Beta, and Release channels</a>. This helps Mozilla and <em>public</em> web sites fix incompatibilities before they affect large numbers of users.</p>

<p>Large organizations should strive for a similar channel distribution so that <em>internal</em> websites benefit in the same way. It might make sense for Mozilla to provide tools to help, perhaps based on <a href="https://wiki.mozilla.org/AUS">our own update service</a> or <a href="https://github.com/lmorchard/byob">Build Your Own Browser</a>.</p>

<p>Counterintuitively, the best strategy for security-conscious organizations may be to standardize on the Beta channel, with the option to <em>downgrade to Release</em> in an emergency. This isn't as crazy as it sounds. Today's betas are as stable as yesteryear's release candidates, thanks to the Aurora audience and the discipline made possible by the 6-week cadence. And since Beta gets security fixes sooner, they are safer in some ways.</p>

<p>The loss of release overlap takes away some options from IT admins and intranet developers, but rapid releases also make possible new strategies that could be better in the long term.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.squarefree.com/2011/08/25/improving-intranet-compatibility/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Secure and compatible</title>
		<link>http://www.squarefree.com/2011/08/25/secure-and-compatible/</link>
		<comments>http://www.squarefree.com/2011/08/25/secure-and-compatible/#comments</comments>
		<pubDate>Thu, 25 Aug 2011 19:58:48 +0000</pubDate>
		<dc:creator>Jesse Ruderman</dc:creator>
				<category><![CDATA[Mozilla]]></category>
		<category><![CDATA[Rapid release]]></category>
		<category><![CDATA[Security]]></category>

		<guid isPermaLink="false">http://www.squarefree.com/?p=752</guid>
		<description><![CDATA[Previously, I discussed some of the ways Firefox's new rapid release process improves its security. But improving Firefox's security only helps users who actually update, and some people have expressed concern that rapid releases could make it more difficult for users to keep up. There is some consensus on how to make the update process [...]]]></description>
			<content:encoded><![CDATA[<p>Previously, I discussed some of the ways Firefox's new <a href="http://www.squarefree.com/2011/08/25/rapid-releases-and-security/">rapid release process improves its security</a>. But improving Firefox's security only helps users who actually update, and some people have expressed concern that rapid releases could make it more difficult for users to keep up.</p>

<p>There is some consensus on how to <a href="https://wiki.mozilla.org/Silent_Update">make the update process smoother</a> and how to reduce the number of regressions that reach users. But incompatibilities pose a tougher problem.</p>

<p><em>We don't want users to have to choose between insecure and incompatible.</em></p>

<p>There are three ways to avoid facing Firefox users with this dilemma: </p>

<ul>
<li>Prevent incompatibilities from arising in the first place.</li>
<li>Hasten the discovery of incompatibilities, and fix them quickly.</li>
<li>Overlap releases by delaying the end-of-life for the old version.</li>
</ul>

<h4>Overlapping releases</h4>

<p>For many years, Mozilla tried to prevent this dilemma by providing overlap between releases. For example, Firefox 2 was supported for six months after Firefox 3.</p>

<p>We observed two security-related patterns that made us reluctant to continue providing overlapping releases:</p>

<p>First, some fixes were never backported, so users on the "old but supported" version were not as safe as they believed. Sometimes backports didn't happen because security patches required additional backports of architectural changes. Sometimes we were scared to backport large patches because we did not have large testing audiences for old branches. Some backports didn't happen because they affected web or add-on compatibility. And sometimes backports didn't happen simply because developers aren't focused on 2-year-old code. <em>Providing old versions gave users a false sense of security.</em></p>

<p>Second, a feedback cycle developed between users lagging behind and add-ons lagging behind.  Many stayed on the old version until the end-of-life date, and then encountered surprises when they were finally forced to update.  <em>Providing old versions did not actually shield users from urgent update dilemmas.</em></p>

<p>I feel we can only seriously consider returning to overlapping releases if we can first overcome these two problems.</p>


<h4>Improving add-on compatibility</h4>

<p>Everything we do to improve add-on compatibility helps to break the lag cycle.</p>

<p>The most ambitious compatibility project is <a href="https://wiki.mozilla.org/Jetpack">Jetpack</a>, which aims to create a more stable API for simple add-ons. Jetpack also has a permission model that promises to reduce the load on add-on reviewers, especially around release time.</p>

<p>Add-ons hosted on AMO now have their <a href="http://blog.mozilla.com/addons/2011/04/19/add-on-compatibility-rapid-releases/"> maxVersion bumped automatically</a> based on source code scans. Authors of non-AMO-hosted add-ons can <a href="https://addons.mozilla.org/en-US/developers/addon/validate">use the validator by itself</a> or <a href="https://github.com/mattbasta/amo-validator/">run the validator locally</a>.</p>

<p>This month, Fligtar <a href="http://groups.google.com/group/mozilla.dev.extensions/browse_thread/thread/f68e4b67c18f037d">announced</a> a plan of <a href="https://wiki.mozilla.org/Features/Add-ons/Add-ons_Default_to_Compatible">assuming compatibility</a>. Under this proposal, only add-ons with obvious, fatal incompatibilities (such as binary XPCOM components compiled against the wrong version) will be required to bump maxVersion.</p>

<p>With assumed compatibility, we will be able to make more interesting use of <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=670622">crowdsourced compatibility data</a> from <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=527141">early adopters</a>. Meanwhile, the successful <a href="http://input.mozilla.com/">Firefox Feedback</a> program may <a href="http://aakash.doesthings.com/2011/08/01/alert-the-developer-extends-feedback-support-to-your-favorite-add-ons/">expand to cover add-ons</a>.</p>


<h4>Breaking the add-on lag cycle</h4>

<p>Even with improvements to add-on compatibility, some add-ons will be updated late or abandoned. In these cases, we should seek to minimize the impact on users.</p>

<p>In Aurora 8, <a href="http://blog.mozilla.com/addons/2011/08/11/strengthening-user-control-of-add-ons/">opt-in for third-party add-ons</a> allows users to shed unwanted add-ons that had been holding them back.</p>

<p>When users have known-incompatible add-ons, Firefox should <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=663506">probabilistically delay updates for a few days</a>. Many add-ons that are incompatible on the day of the release quickly become compatible. Users of those add-ons don't need to suffer through confusing UI.</p>

<p>But after a week, when it is likely that the add-on has been abandoned, Firefox should disable the add-on in order to update itself. It would be dishonest to <a href="http://www.schneier.com/blog/archives/2009/03/it_security_bla.html">ask users to choose between security and functionality</a> once we know the latter is temporary.</p>

<p>Once we've solved the largest compatibility problems, we can have a more reasonable discussion about the benefits and opportunity costs of maintaining overlapping releases.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.squarefree.com/2011/08/25/secure-and-compatible/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
	</channel>
</rss>

