{"id":1,"date":"2011-08-25T01:03:02","date_gmt":"2011-08-25T01:03:02","guid":{"rendered":"http:\/\/blog.mozilla.org\/warner\/?p=1"},"modified":"2011-08-26T10:59:57","modified_gmt":"2011-08-26T18:59:57","slug":"hello-world","status":"publish","type":"post","link":"https:\/\/blog.mozilla.org\/warner\/2011\/08\/25\/hello-world\/","title":{"rendered":"Introductions"},"content":{"rendered":"<p>Hi! My name is Brian Warner. Welcome to my blog!<\/p>\n<p>I&#8217;ve been working at Mozilla for about a year and a half. Before Mozilla I was at a startup (now gone) named AllMyData.com, which ran an online backup service aimed at home users and small businesses. For the backend, we developed an open-source encrypted distributed filesystem named <a href=\"http:\/\/tahoe-lafs.org\/\">Tahoe-LAFS<\/a> (still thriving), with the relatively-unique feature of &#8220;provider-independent security&#8221;: the servers hold ciphertext, and only your client (and anyone you choose to share them with) holds the decryption key. By relying upon the servers for availability but <strong>not<\/strong> security, you can use servers that you wouldn&#8217;t trust otherwise. The system is designed with &#8220;POLA&#8221; in mind, the Principle Of Least Authority, which improves safety by giving each component as little power as possible; just enough to do its one job.<\/p>\n<p>Mozilla&#8217;s <a href=\"http:\/\/www.mozilla.org\/en-US\/mobile\/sync\/\">Sync<\/a> system, which helps keep your bookmarks and other browser data synchronized between multiple browsers, uses the same principle. The data is encrypted before it leaves your computer, and our servers don&#8217;t get to see the key. The similarity in philosophy between Sync and Tahoe was a big part of the reason I joined Mozilla: I had found a bunch of like-minded people with whom I could promote these ideas, with a wider audience (400 million users and counting!) than anything our tiny startup could reach. Shortly after joining, I helped build the credential-exchange protocol that Sync uses to add a new computer to your account (the &#8220;copy this code&#8221; J-PAKE-based dialog panel).<\/p>\n<p>But most of what I&#8217;ve been doing for the last 18 months is <a href=\"https:\/\/wiki.mozilla.org\/Jetpack\">Jetpack<\/a>, now better known as the <strong>Add-On SDK<\/strong>. It&#8217;s a new way to tackle the admittedly painful process of writing add-ons for Firefox (and eventually other XUL-based programs, like Thunderbird).<\/p>\n<p>Add-ons in Firefox have always been a bit.. organic. There&#8217;s an awful lot of internal interfaces, and add-ons authors have had to dig through a lot of that to find a useful point to attach or override some code. It&#8217;s messy, and fragile: it&#8217;s difficult for the Firefox developers to keep those internals stable while making large-scale improvements to the browser, so add-on authors are fighting an uphill battle to maintain compatibility with newer releases. With our new faster release cadence (every couple months!), the problem becomes even more challenging.<\/p>\n<p>Jetpack was intended to make the simple things simple. It has a library of interface modules for doing common add-on tasks, like creating a UI, and modifying web pages. We, the SDK authors, will keep updating these modules to match the Firefox internals, so add-on authors won&#8217;t have to. One of the promises of Jetpack is that the high-level add-on code doesn&#8217;t need to change much at all to keep up with newer browsers.<\/p>\n<p>The SDK has two parts: this library of modules, and a program that assembles your code with the right set of modules and produces the XPI file, ready for installation or upload to <a href=\"https:\/\/addons.mozilla.org\/en-US\/firefox\/\">AMO<\/a>. If you think about it in terms of gcc and other compilers, this program is a linker: it figures out which modules are required and combines them into an executable bundle.<\/p>\n<p>The linker is written in Python, and since that&#8217;s been my dominant language for the last ten years, most of my Jetpack work has been on the linker side. I&#8217;ve also been heavily involved in developing the security model, to make Jetpack-based addons safer in the face of bugs and compromises. I&#8217;ll be explaining a lot more about the security model in this blog over the coming months.<\/p>\n<p>And no description of Jetpack is complete without also mentioning Flightdeck, better known as the <a href=\"https:\/\/builder.addons.mozilla.org\/\">Add-On Builder<\/a>. This is an online IDE for writing add-ons. On the backend, it runs a copy of the SDK to generate the XPIs. It allows folks to get into the add-on writing business without downloading or installing an SDK: just start writing the code! A big goal of Jetpack is to make add-on writing accessible to a wider developer community, leveraging Javascript skills that web-devs already have, and an online tool like Builder removes a lot of the unnecessary hurdles for that audience.<\/p>\n<p>Welcome!<br \/>\n-Brian<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Hi! My name is Brian Warner. Welcome to my blog! I&#8217;ve been working at Mozilla for about a year and a half. Before Mozilla I was at a startup (now gone) named AllMyData.com, which ran an online backup service aimed at home users and small businesses. For the backend, we developed an open-source encrypted distributed [&hellip;]<\/p>\n","protected":false},"author":328,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[588,10477],"tags":[],"_links":{"self":[{"href":"https:\/\/blog.mozilla.org\/warner\/wp-json\/wp\/v2\/posts\/1"}],"collection":[{"href":"https:\/\/blog.mozilla.org\/warner\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.mozilla.org\/warner\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.mozilla.org\/warner\/wp-json\/wp\/v2\/users\/328"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.mozilla.org\/warner\/wp-json\/wp\/v2\/comments?post=1"}],"version-history":[{"count":0,"href":"https:\/\/blog.mozilla.org\/warner\/wp-json\/wp\/v2\/posts\/1\/revisions"}],"wp:attachment":[{"href":"https:\/\/blog.mozilla.org\/warner\/wp-json\/wp\/v2\/media?parent=1"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.mozilla.org\/warner\/wp-json\/wp\/v2\/categories?post=1"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.mozilla.org\/warner\/wp-json\/wp\/v2\/tags?post=1"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}