<?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>felipe's Blog &#187; Mozilla</title>
	<atom:link href="http://felipe.wordpress.com/category/mozilla/feed/" rel="self" type="application/rss+xml" />
	<link>http://felipe.wordpress.com</link>
	<description>felipc traveling through the blogosphere</description>
	<lastBuildDate>Wed, 09 May 2012 13:04:48 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='felipe.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>felipe's Blog &#187; Mozilla</title>
		<link>http://felipe.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://felipe.wordpress.com/osd.xml" title="felipe&#039;s Blog" />
	<atom:link rel='hub' href='http://felipe.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Using about:cc to fix leaks</title>
		<link>http://felipe.wordpress.com/2012/04/30/using-aboutcc/</link>
		<comments>http://felipe.wordpress.com/2012/04/30/using-aboutcc/#comments</comments>
		<pubDate>Mon, 30 Apr 2012 09:38:26 +0000</pubDate>
		<dc:creator>felipe</dc:creator>
				<category><![CDATA[Firefox]]></category>
		<category><![CDATA[Mozilla]]></category>

		<guid isPermaLink="false">http://felipe.wordpress.com/?p=314</guid>
		<description><![CDATA[Last week in Toronto, the Firefox team had a work week. One of the activities was a session with lightning talks about various aspects of Firefox development. I gave a lightning talk on how to use Olli&#8217;s about:cc add-on to find a leak in the front-end code, understand it and fix it. I tried to [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=felipe.wordpress.com&#038;blog=703&#038;post=314&#038;subd=felipe&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Last week in Toronto, the Firefox team had a work week. One of the activities was a session with lightning talks about various aspects of Firefox development. I gave a lightning talk on how to use Olli&#8217;s <a title="about:cc" href="https://developer.mozilla.org/en/Debugging/Existing_Tools#about:cc">about:cc</a> add-on to find a leak in the front-end code, understand it and fix it. I tried to emphasize the importance of not creating leaks not only for memory use but also for the browser&#8217;s responsiveness, and preparing for it was a good exercise as it helped me learn more how to use it myself.</p>
<p>Here is <a href="http://videos.mozilla.org/serv/air_mozilla/workweek/fx201204/13_Felipe_Leaks.webm">the video</a> for it, and the awesomely-formatted slides and links <a title="Slides" href="http://htmlpad.org/fixtheleak">are here</a>.</p>
<p>As an alternative, Honza created a similar add-on that uses the same underlying API and has a more user-friendly UI. It&#8217;s called about:ccdump and you can find how to use it in <a title="about:ccdump" href="http://www.softwareishard.com/blog/planet-mozilla/hunting-zombie-memory-leaks-in-firefox">his blog post</a>.</p>
<p>Shameless plug:<br />
if you liked the subject and are interested in helping: both about:cc and about:ccdemo uses the cycle collection API to get the cycles data and analyze it. It would be great if this API was also used as part of our testing framework to analyze the data after a test run and help prevent new bugs being introduced. If you would like to work on it, this is filed as <a title="Analyze CC logs after tests" href="https://bugzilla.mozilla.org/show_bug.cgi?id=728294">bug 728294</a>.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/felipe.wordpress.com/314/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/felipe.wordpress.com/314/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/felipe.wordpress.com/314/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/felipe.wordpress.com/314/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/felipe.wordpress.com/314/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/felipe.wordpress.com/314/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/felipe.wordpress.com/314/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/felipe.wordpress.com/314/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/felipe.wordpress.com/314/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/felipe.wordpress.com/314/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/felipe.wordpress.com/314/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/felipe.wordpress.com/314/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/felipe.wordpress.com/314/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/felipe.wordpress.com/314/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=felipe.wordpress.com&#038;blog=703&#038;post=314&#038;subd=felipe&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://felipe.wordpress.com/2012/04/30/using-aboutcc/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
<enclosure url="http://videos.mozilla.org/serv/air_mozilla/workweek/fx201204/13_Felipe_Leaks.webm" length="51171807" type="application/wordperfect" />
<enclosure url="http://videos.mozilla.org/serv/air_mozilla/workweek/fx201204/13_Felipe_Leaks.webm" length="51171807" type="application/wordperfect" />
<enclosure url="http://videos.mozilla.org/serv/air_mozilla/workweek/fx201204/13_Felipe_Leaks.webm" length="51171807" type="application/wordperfect" />
<enclosure url="http://videos.mozilla.org/serv/air_mozilla/workweek/fx201204/13_Felipe_Leaks.webm" length="51171807" type="application/wordperfect" />
<enclosure url="http://videos.mozilla.org/serv/air_mozilla/workweek/fx201204/13_Felipe_Leaks.webm" length="51171807" type="application/wordperfect" />
<enclosure url="http://videos.mozilla.org/serv/air_mozilla/workweek/fx201204/13_Felipe_Leaks.webm" length="51171807" type="application/wordperfect" />
<enclosure url="http://videos.mozilla.org/serv/air_mozilla/workweek/fx201204/13_Felipe_Leaks.webm" length="51171807" type="application/wordperfect" />
<enclosure url="http://videos.mozilla.org/serv/air_mozilla/workweek/fx201204/13_Felipe_Leaks.webm" length="51171807" type="application/wordperfect" />
<enclosure url="http://videos.mozilla.org/serv/air_mozilla/workweek/fx201204/13_Felipe_Leaks.webm" length="51171807" type="application/wordperfect" />
<enclosure url="http://videos.mozilla.org/serv/air_mozilla/workweek/fx201204/13_Felipe_Leaks.webm" length="51171807" type="application/wordperfect" />
<enclosure url="http://videos.mozilla.org/serv/air_mozilla/workweek/fx201204/13_Felipe_Leaks.webm" length="51171807" type="application/wordperfect" />
<enclosure url="http://videos.mozilla.org/serv/air_mozilla/workweek/fx201204/13_Felipe_Leaks.webm" length="51171807" type="application/wordperfect" />
<enclosure url="http://videos.mozilla.org/serv/air_mozilla/workweek/fx201204/13_Felipe_Leaks.webm" length="51171807" type="application/wordperfect" />
<enclosure url="http://videos.mozilla.org/serv/air_mozilla/workweek/fx201204/13_Felipe_Leaks.webm" length="51171807" type="application/wordperfect" />
<enclosure url="http://videos.mozilla.org/serv/air_mozilla/workweek/fx201204/13_Felipe_Leaks.webm" length="51171807" type="application/wordperfect" />
	
		<media:content url="http://0.gravatar.com/avatar/631699655df41814862fd2ab5cfba1a1?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">felipc</media:title>
		</media:content>
	</item>
		<item>
		<title>List of existing memory/performance debugging tools</title>
		<link>http://felipe.wordpress.com/2012/02/28/current-debugging-tools/</link>
		<comments>http://felipe.wordpress.com/2012/02/28/current-debugging-tools/#comments</comments>
		<pubDate>Tue, 28 Feb 2012 04:44:23 +0000</pubDate>
		<dc:creator>felipe</dc:creator>
				<category><![CDATA[Mozilla]]></category>

		<guid isPermaLink="false">http://felipe.wordpress.com/?p=306</guid>
		<description><![CDATA[About:jank, about:ccdump, MemChaser, the profiler&#8230; I like to follow the development of all these new tools that we are creating help debug and understand our code behavior better, but it&#8217;s getting harder to keep track of all of them, and to remember what is the purpose and location of each. What&#8217;s the URL for that [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=felipe.wordpress.com&#038;blog=703&#038;post=306&#038;subd=felipe&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>About:jank, about:ccdump, MemChaser, the profiler&#8230; I like to follow the development of all these new tools that we are creating help debug and understand our code behavior better, but it&#8217;s getting harder to keep track of all of them, and to remember what is the purpose and location of each. <em>What&#8217;s the URL for that tool again?</em>, <em>Is about:jank hosted on AMO?</em>&#8230;</p>
<p>To make this easier I&#8217;ve <a href="https://developer.mozilla.org/En/Debugging/Existing_Tools" title="Existing Debugging tools">created a list</a> on MDN with all these add-ons (well, all the ones that I could remember). The purpose of this list is to have a short summary of each tool, a description of what it&#8217;s useful for, and a simple explanation on how to use it; plus a link to install and to get more information. There were some other similar lists spread accross MDN and the Wiki, but they were mostly outdated, so the reason I started a new page from stratch is to only have tools that are <em>known to be supported</em> and <em>currently working</em>.</p>
<p>Please add anything that I missed and feel free to improve the description or summaries for anything!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/felipe.wordpress.com/306/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/felipe.wordpress.com/306/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/felipe.wordpress.com/306/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/felipe.wordpress.com/306/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/felipe.wordpress.com/306/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/felipe.wordpress.com/306/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/felipe.wordpress.com/306/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/felipe.wordpress.com/306/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/felipe.wordpress.com/306/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/felipe.wordpress.com/306/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/felipe.wordpress.com/306/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/felipe.wordpress.com/306/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/felipe.wordpress.com/306/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/felipe.wordpress.com/306/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=felipe.wordpress.com&#038;blog=703&#038;post=306&#038;subd=felipe&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://felipe.wordpress.com/2012/02/28/current-debugging-tools/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/631699655df41814862fd2ab5cfba1a1?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">felipc</media:title>
		</media:content>
	</item>
		<item>
		<title>Telemetry Stopwatch</title>
		<link>http://felipe.wordpress.com/2012/02/13/telemetry-stopwatch/</link>
		<comments>http://felipe.wordpress.com/2012/02/13/telemetry-stopwatch/#comments</comments>
		<pubDate>Mon, 13 Feb 2012 21:28:30 +0000</pubDate>
		<dc:creator>felipe</dc:creator>
				<category><![CDATA[Firefox]]></category>
		<category><![CDATA[Mozilla]]></category>

		<guid isPermaLink="false">http://felipe.wordpress.com/?p=296</guid>
		<description><![CDATA[Last week, I added a small module to make it easier to track time deltas measurements that are meant for telemetry. The module is called TelemetryStopwatch and it has two functions, start and finish, which do what their name imply. When you call start it takes a timestamp, and when you call finish it calculates [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=felipe.wordpress.com&#038;blog=703&#038;post=296&#038;subd=felipe&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Last week, I <a href="https://hg.mozilla.org/mozilla-central/rev/2ca8d6ac63bc" title="TelemetryStopwatch cset">added a small module</a> to make it easier to track time deltas measurements that are meant for telemetry. The module is called <a href="http://mxr.mozilla.org/mozilla-central/source/toolkit/components/telemetry/TelemetryStopwatch.jsm" title="TelemetryStopwatch.jsm">TelemetryStopwatch</a> and it has two functions, start and finish, which do what their name imply. When you call start it takes a timestamp, and when you call finish it calculates the delta and adds the data to the chosen histogram. It&#8217;s useful to avoid sticking start timestamps as enclosed variables or private members in objects, and in cases where the start and stop measurements are disjoint and there&#8217;s not a good place to store the stamp or add code to calculate the diff.</p>
<p><pre class="brush: jscript;">Cu.import(&quot;resource:///modules/TelemetryStopwatch.jsm&quot;);
TelemetryStopwatch.start(&quot;MY_TELEMETRY_HISTOGRAM&quot;);
// and later
TelemetryStopwatch.finish(&quot;MY_TELEMETRY_HISTOGRAM&quot;);

// or, with the optional object parameter:
TelemetryStopwatch.start(&quot;MY_TELEMETRY_HISTOGRAM&quot;, refObj);
TelemetryStopwatch.finish(&quot;MY_TELEMETRY_HISTOGRAM&quot;, refObj);
</pre></p>
<p>You can have multiple counters at the same time. Each counter is associated with a telemetry histogram, or with a histogram + a reference object, for cases where you might need more than 1 timer running at the same time for the same histogram (e.g. some measurements related to a specific tab, where more than 1 tab might have it running at the same time). The objects are tracked on a WeakMap so you don&#8217;t have to worry about leaks. The module is in toolkit to make it widely available.<br />
Happy metering!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/felipe.wordpress.com/296/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/felipe.wordpress.com/296/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/felipe.wordpress.com/296/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/felipe.wordpress.com/296/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/felipe.wordpress.com/296/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/felipe.wordpress.com/296/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/felipe.wordpress.com/296/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/felipe.wordpress.com/296/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/felipe.wordpress.com/296/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/felipe.wordpress.com/296/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/felipe.wordpress.com/296/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/felipe.wordpress.com/296/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/felipe.wordpress.com/296/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/felipe.wordpress.com/296/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=felipe.wordpress.com&#038;blog=703&#038;post=296&#038;subd=felipe&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://felipe.wordpress.com/2012/02/13/telemetry-stopwatch/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/631699655df41814862fd2ab5cfba1a1?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">felipc</media:title>
		</media:content>
	</item>
		<item>
		<title>A proposal to drop browser vendor prefixes</title>
		<link>http://felipe.wordpress.com/2012/02/02/a-proposal-to-drop-browser-vendor-prefixes/</link>
		<comments>http://felipe.wordpress.com/2012/02/02/a-proposal-to-drop-browser-vendor-prefixes/#comments</comments>
		<pubDate>Thu, 02 Feb 2012 09:53:20 +0000</pubDate>
		<dc:creator>felipe</dc:creator>
				<category><![CDATA[Firefox]]></category>
		<category><![CDATA[Mozilla]]></category>

		<guid isPermaLink="false">http://felipe.wordpress.com/?p=278</guid>
		<description><![CDATA[Which reaction do you get by looking at the following code? Whenever you see some extremely verbose CSS like the above, written with all vendor prefixes (plus the unprefixed version), all of which look exactly the same, it really brings some rage mixed feelings. On one hand, you feel glad to have found a web [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=felipe.wordpress.com&#038;blog=703&#038;post=278&#038;subd=felipe&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Which reaction do you get by looking at the following code?<br />
<pre class="brush: css;">#elem {
  -moz-box-shadow: 0 0 10px gray;
  -webkit-box-shadow: 0 0 10px gray;
  -o-box-shadow: 0 0 10px gray;
  -ms-box-shadow: 0 0 10px gray;
  box-shadow: 0 0 10px gray;
}</pre><br />
Whenever you see some extremely verbose CSS like the above, written with all vendor prefixes (plus the unprefixed version), all of which look exactly the same, it really brings some <del>rage</del> mixed feelings. On one hand, you feel glad to have found a web developer who went out of their way to use experimental CSS features in the &#8220;right&#8221; way. On the other hand, you feel sad that we are asking them to do this.</p>
<p>Much <a title="Henri's post about vendor prefixes" href="http://hsivonen.iki.fi/vendor-prefixes/">has been said</a>  about how CSS prefixes do <a title="PPK's post about vendor prefixes" href="http://www.quirksmode.org/blog/archives/2010/03/css_vendor_pref.html">more harm than good</a>, and a lot of people have wanted to get rid of them, but there hasn&#8217;t been any proposal that didn&#8217;t cause (worse) shortcomings, allowed vendor experimentation to continue without disrupting the web, or offered an easy transition path. I&#8217;ll present here a proposal that I believe fixes all the existing problems with prefixes, makes it really easy to transition from experimental to recommended, and actually improves various aspects of web development and browser support for features that are on an standardization path.</p>
<p>The feature is simple, and there&#8217;s a TL;DR at the end, but let&#8217;s design it step by step to make sure we&#8217;ve covered everything.</p>
<p style="font-size:x-small;">(Let me here preemptively say, in true <a href="http://blog.mozilla.com/graydon/">Graydon</a> style: disregard the syntax of the proposal, focus only on the idea. The ideal syntax can be discussed later)</p>
<h4>Feature unlocking</h4>
<p>The basic idea is that, in order to use non-standard CSS features, instead of using prefixes on every declaration of that property, you only use it once at the top of the file to indicate that you&#8217;re willing to unlock that feature as implemented by that engine. For instance, the example at the top would become:<br />
<pre class="brush: css;">@-vendor-unlock {
  box-shadow: gecko, webkit, trident, opera;
}
...
#elem {
  box-shadow: 0 0 10px gray;
}</pre><br />
That means that the actual property declarations do not need to use the prefix, but the browser engine will still <strong>only accept the declaration if it has been explicitly unlocked</strong>. With that, when the feature reaches the status in which a vendor would like to drop the prefix (that is, by convention, candidate recommendation), all it needs is to start accepting the declaration unconditionally (that is, independent of being unlocked), <strong>without breaking every website that was using it before</strong> (unless the syntax changes, but more on that later).</p>
<p>Here&#8217;s a list of the properties that this approach bring:</p>
<ul>
<li>Feature experimentation is still not unintentionally exposed to the web</li>
<li>It&#8217;s easier for web developers to use, which should encourage usage and testing for more than one engine</li>
<li>It makes it explicit for web developers that they are dealing with an experimental feature (instead of the &#8220;engine-only&#8221; feeling of prefixes)</li>
<li>When it&#8217;s time to make the feature a standard, websites don&#8217;t have to break and the engines don&#8217;t have to support the legacy syntax for a painfully long period of time</li>
<li>It allows the creation of developer tools for web developers (and browser developers) to force support a feature and thus test their website with a different engine</li>
<li>Browser vendors can start shipping new features with this approach without breaking existing support, and it doesn&#8217;t require a multi-year transition</li>
<li>Users will benefit from quicker multi-browser support by websites</li>
<li>It makes it easier for new engines to enter the market</li>
</ul>
<h4>Versioning</h4>
<p>One problem that <em>already exists</em> with vendor prefixes, but that is not solved with the above suggestion, is syntax or feature changes. The whole purpose of the prefixes is so that vendors can experiment with feature support without making the promise that it won&#8217;t ever change. In practice, though, once a feature has been widespread enough, most vendors are tied to that and the decision to change the syntax or not is heavily influenced by that. While we are designing the new approach, we can also fix that! With feature versioning, web developers can explicitly target a version of the implementation, like so:<br />
<pre class="brush: css;">@-vendor-unlock {
  box-shadow: gecko/v1, webkit/v2, trident/v2, opera/v1;
}</pre><br />
This gives us:</p>
<ul>
<li>Different implementations of a feature can exist at the same time</li>
<li>When the engines are tending towards an unified version (say 1st version of a feature in gecko was different than 1st in webkit, but they match at version 2), it&#8217;s easier for developers to use it</li>
<li>When there&#8217;s a change in the syntax or behavior of a feature, the browser engine can choose to <strong>either gracefully support the previous version or not</strong>, on a case by case decision whenever it makes sense to do so. This is currently not possible since there&#8217;s no way to tell which version the webpage is expecting to use.</li>
</ul>
<h4>Syntax mismatches</h4>
<p>The last problem is when two matching versions does not exist between browsers. That is, it&#8217;s not possible to write a single declaration that will work on different engines. In that case, there&#8217;s no way around having multiple property declarations, and an override must be provided. To do that, the vendor prefix <strong>plus the version</strong> is used, and the feature still has to be unlocked, which guarantees that there&#8217;s no reason to just use the &#8220;good old prefix&#8221; except for mismatching reasons. Also, the prefix should be used to the engine that is probably leaning in the wrong direction than what will be made the standard.</p>
<p>As an example, let&#8217;s imagine a property called <em>foobar</em> that webkit and gecko implements, with two size arguments (&lt;left&gt; and &lt;right&gt;), but each takes on a different order.<br />
<pre class="brush: css;">@-vendor-unlock {
  foobar: gecko/v1, webkit/v1;
}
#elem {
  foobar: 10px 5px;
  -webkit-foobar-v1: 5px 10px;
}</pre><br />
Now, let&#8217;s say that webkit decided to change the order to match gecko&#8217;s, and the other engines followed. Then the only change required is to add the other engines and another entry for the second version of webkit:<br />
<pre class="brush: css;">@-vendor-unlock {
  foobar: gecko/v1, webkit/v1, webkit/v2, opera/v1, trident/v1;
}
#elem {
  foobar: 10px 5px;
  -webkit-foobar-v1: 5px 10px;
}</pre><br />
With this change, the webpage supports the experimental versions of <em>foobar</em>, plus the standardized (unprefixed) version whenever it reaches candidate recommendation, plus the differing version 1 in webkit if it wants to.</p>
<h3>TL;DR</h3>
<p>Browser vendor prefixes are polluting the web so much while making web development harder, which is the exact opposite of the two main reasons it exists. The main idea to fix that is that the property declarations should be written unprefixed, while an explicit unlock and versioning is instead used to activate these features on browser engines. An example would be:<br />
<pre class="brush: css;">@-vendor-unlock {
  border-radius: gecko/v2, webkit/v1, opera/v1, trident/v1;
}
...
#elem {
  border-top-left-radius: 5px;
  border-top-right-radius: 10px;
}</pre><br />
Note that with this example I also implied that the unlocking mechanism can be used for whole features, not only direct property names, such that you could use &#8220;css-animations&#8221; to unlock all the animation-delay, animation-timing-function, @keyframes, etc.</p>
<p>P.S.: I&#8217;ll be at FOSDEM this weekend if anyone is interested in discussing this idea during the conference.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/felipe.wordpress.com/278/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/felipe.wordpress.com/278/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/felipe.wordpress.com/278/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/felipe.wordpress.com/278/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/felipe.wordpress.com/278/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/felipe.wordpress.com/278/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/felipe.wordpress.com/278/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/felipe.wordpress.com/278/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/felipe.wordpress.com/278/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/felipe.wordpress.com/278/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/felipe.wordpress.com/278/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/felipe.wordpress.com/278/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/felipe.wordpress.com/278/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/felipe.wordpress.com/278/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=felipe.wordpress.com&#038;blog=703&#038;post=278&#038;subd=felipe&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://felipe.wordpress.com/2012/02/02/a-proposal-to-drop-browser-vendor-prefixes/feed/</wfw:commentRss>
		<slash:comments>44</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/631699655df41814862fd2ab5cfba1a1?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">felipc</media:title>
		</media:content>
	</item>
	</channel>
</rss>
