I just realised it’s been almost 2 months since my last blogpost. There has been a lot of exciting stuff going on, and I apologize for not writing to share it all.
I will do better.
I just realised it’s been almost 2 months since my last blogpost. There has been a lot of exciting stuff going on, and I apologize for not writing to share it all.
I will do better.
Few weeks ago I wrote a report about Hegyalja Fest 2011. Now, you can watch a short video from the Free Software Tent:
Last week I spoke at Emerce’s eDay conference in Rotterdam (Netherlands). Emerce reached out to me with the question: “How did Mozilla win?”. In the follow-up calls with the Emerce team we discussed the “David vs Goliath” situation in which Mozilla found itself, competing against Microsoft when we launched Firefox only six years ago, and how we managed to grow its userbase to a staggering roughly 500 million people using Firefox worldwide.
The presentation below is my humble attempt to explain this phenomenon. Granted you need the voice track to make complete sense of the presentation - but probably interesting nonetheless. Feel free to contact me if you have questions or comments.
Failure to respond to a prompt does not indicate accession to perform the actions that would otherwise occur. Especially if those actions have a high risk of losing my data. So I would like to thank you (whichever product is responsible for my most recent undesired restart) for completely obliterating my class notes. At the very least, you did not destroy all of my research too, just a day's worth.
Hey Firefox testers!
The final beta (Firefox Beta) for Firefox 7 is now available on the Android Market for you to download. We would love to solicit your support in testing and helping us make the mobile Firefox experience better by downloading Firefox Beta off the Android Market and testing out some of the new features in Firefox 7. Some new features from the release notes include:
If you have a supported Android device (http://www.mozilla.org/en-US/mobile/platforms/), please take a moment to download the final beta and give it a try.
How You Can Help
- Mobile Firefox QA Team
This is my first post about Harmony modules. I hate to start right out of the gate with a long boring post about timing details, but it seems the few people who might eventually be interested in it are actually interested right now! So let’s dive in.
Once we have modules, running a script will sometimes hit the network.
<script>
module blottr from "blottr.js";
</script>
(By the way: you will have to opt in to Harmony syntax somehow—yet to be determined. This post will ignore that consideration.)
When the HTML parser reaches this script, parsing will pause until “blottr.js” is loaded. This matters if “blottr.js” touches the DOM during its initialization, for example. In terms of timing, it behaves just like a <script src=> element.
(As a performance optimization, we plan to change the HTML5 parser to skim ahead, find probable module statements, and pre-fetch the scripts. Again, just like <script src=>.)
But what about this?
function silly() {
eval('module blottr from "blottr.js";');
}
What should happen if silly() is called from an event handler? Should it block until “blottr.js” comes in from the network? That would be a synchronous, blocking call, like synchronous XHR.
That would be gross. So in Harmony, eval will reject such code with a SyntaxError. In short, if a JavaScript caller is waiting, the module X from "url" syntax is banned. If your code needs a module off the network, you’ll just have to run it asynchronously somehow. Two new APIs, SystemLoader.load(urlcallback, errorCallback) and SystemLoader.asyncEval(code, callback, errorCallback), are proposed for that.
Now. Suppose we take the first example above and put it in a document.write call.
<script>
document.write(
'<script>' +
' module blottr from "blottr.js";' +
'</scr' + 'ipt>');
</script>
Now what happens? (Benjamin Smedberg brought this case to my attention about 12 seconds after I described modules to him. It might have been less.)
To me, this particular flavor of document.write() weirdness was something new. I’m still not totally sure how we will handle it. Boris Zbarsky suggested again treating it the same as a <script src=> element: silently make that script load asynchronously, just because document.write() created it. That sounds plausible enough.
There are still a few more special cases to sort through. What happens if you try to load a module by assigning a string to an event handler attribute of a DOM element? I’m not sure yet. Perhaps we will throw a SyntaxError.
Bored to tears? Sorry! I’ll write again in a few days, explaining what Harmony modules are, who’s working on them, and why.
Last week Mozilla held an All-Hands, and it was exciting to see so many people learning, teaching, and discussing all things Mozilla. The Identity team gave a short demonstration of the latest version of BrowserID during the opening keynote, and we have a recording we can share with you:
In the demo you’ll see an overview of BrowserID, but also some new features we’re prototyping. One feature that highlights how BrowserID can significantly improve the user experience of web login is something we call “primary authority” support. The idea is simple: your email provider or corporate intranet is a primary authority for your email account with them. BrowserID provides a simple way for that email address to be automatically added to your list of verified emails, so that it can be used on other sites on the Web. We’re working on deploying this feature within Mozilla, so that we can enable easy single sign-on across our websites, and potentially even with our partners.
You’ll note that we used a site called OpenPhoto during our demo. OpenPhoto is one of the first groups to join WebFWD, a Mozilla Labs project about creating open solutions that push the Web forward. OpenPhoto chose to implement BrowserID support because it was particularly easy and fit their distributed model.
As always, we encourage you to try out BrowserID yourself, implement it on your site, and give us feedback on our mailing list or via twitter.
As many people already know, at Mozilla we do our work in the open. Many people may also be aware of our Release, Beta, Aurora, and Nightly channels. One lesser known fact is that we have a special Nightly build that showcases some ideas that we have for improving the Firefox user experience.
Started in mid-May of this year, a special Nightly-UX branch was created as a place for the community to test out ideas and see how well they work over time. Over the weekend I was very happy to find that there are now about 2,000 active daily users on the Nightly-UX branch.
The biggest single proponent of this large user base is most likely the mockups from the UX Presentation on the Future of Firefox. Feel free to download the Nightly-UX today
High context cultures value personal relationships over process. You have to know someone before you can trust them and work with them. They also tend to be less explicit and rely more on tone of voice, gestures and even status to communicate. Typically Asian countries are more high context than Western countries. Think Korea and Japan.
Low context cultures are process driven. They rely on facts and processes. Their communication style is much more direct and action-orientated. They are orientated towards the individual rather than the group. Western cultures like the US and Germany are considered low context.
So if you start a project and send email to a bunch of folks and ask them to just jump in and contribute, which group do you think will get going more quickly? The low context culture folks. As long as you define the process and procedures, they are willing to work alone and with people they don’t know very well. That’s how open source works. So our projects are optimized for low context cultures.
What happens to the high context folks when invited to participate on a mailing list? They have a hard time sending emails and contributions to people they’ve never met and have no relationship with. (Imagine walking up to a random person on the street and critiquing their dress style. It’s that kind of awkward.) Would they make good contributors? Absolutely! Do we need to find other ways other than “join the mailing list” to get them involved? Absolutely! For an example of what’s worked well, see the great work that Emily Chen, Pockey Lam and Fred Muller and others have done with GNOME Asia.
As I think about developer engagement at Mozilla, I realize we need to have different plans for different cultures. It’s even more important to be present in person for low context cultures. To establish a personal relationship before you invite them to join your project. (Or ask them to use open technologies or spread the word.) We should be following up in different ways, setting up different programs for different countries. Luckily the Mozilla Reps program will help provide the infrastructure for this.
How do you think we should encourage high context cultures to get involved with open source? If you are from a high context culture, how did you get started?
Related posts:
In the spirit of this most special of occasions, I assembled a crew of jolly tars and we’ve made some fancy riggin’ for you to add to yer ships!
If ye be captaining a Firefox vessel with 6 guns, and Windows or Mac at your sails, add this riggin’ to make your voyage on the virtual sees a mite more jaunty.
Step the first: install this fine langpack compiled by Captain Longbeard (aka Unfocused/Blair McBride)
Step the second: change general.useragent.locale to en-AR
Relaunch yer ship, and she’s good to go!
Fer more explanations of our efforts, and fer learnin how to join our crew see this here scrawl or find us on the irc.mozilla.org ocean in port #yarr
Update: Courtesy o’ Capt Nigel, here be an image of the beauty!

Mozilla will be sending several security folks to this year’s OWASP AppSecUSA conference held in Minneapolis, MN on Thursday and Friday (Sept 22, 23). Stop by and find one of us to get one of our “Securing Mozilla” stickers.
We’ll be hosting the following events:
- Michael
People that I’ve told about the work with syzygy that I’ve been doing have, almost universally, two reactions:
Assuming that a 40% reduction in page faults leads to a 40% reduction in startup time is not reasonable, but surely there should be some reduction in startup time, right? I finally benchmarked this today using the about:startup extension; these numbers are from cold start, freshly rebooted both times:
| Version | main | sessionRestored | firstPaint |
|---|---|---|---|
| Trunk build | 125 | 1733 | 1671 |
| Optimized build | 125 | 1639 | 1577 |
So a 40% reduction in page faults translates into ~6% reduction in startup time; not stellar, but not too bad either.
The next step is making sure this all works with PGO builds on Windows. Then we get to have a discussion about whether to incorporate this into the regular builds and getting all the infrastructure on build machines.
Attention conservation notice: 900 words of inside baseball about Mozilla. No security content whatsoever.
The Mozilla Project has been taking a whole lot of flak recently over its new “rapid release cycle”, in which there is a new major version of Firefox (and Thunderbird) every six weeks, and it potentially breaks all your extensions. Especially the big complicated extensions like Firebug that people cannot live without. One might reasonably ask, what the hell? Why would any software development team in their right mind—especially a team developing a critical piece of system infrastructure, which is what Web browsers are these days, like it or not—inflict unpredictable breakage on all their users at six-week intervals?
The first thing to know is that Firefox’s core developers are really focused on making the Web better. If we weren’t, we would be hacking on something other than a Web browser. The old release cycle was way too slow for us to do that effectively; as Jono Xia describes in his blog post “It’s Not About the Version Numbers,” anything we did might not get out to end users for over a year. When David Baron fixed visited-link history sniffing, he patched Firefox first—but Chrome and Safari shipped the change before we did.
You should read Jono’s post now. I’ll be here when you get back.
Shipping new versions of the browser every six weeks is clearly a better way to improve the Web rapidly, than shipping a new version only once a year or so. But what’s stopping the Mozilla team from shipping a new batch of under-the-hood improvements to the Web every six weeks without breaking anything? Why do we need to break things?
Well, we tried not breaking things for ten years, give or take, and it didn’t work. The second thing to know is that the core browser (“Gecko”) suffers from enormous technical debt. Like any large, 15-year-old piece of software, we have code in abundance that was written under too much time pressure to get it right, was written so long ago that nobody remembers how it works, isn’t comprehensively tested, or any combination of the above. We also have major components that reasonably seemed like good ideas at the time, but have since proven to be a hindrance (XUL, XBL, XPConnect, etc). We have other major components that should have been recognized as bad ideas at the time, but weren’t (XPCOM, NSPR, etc). And we have code for which there is no excuse at all (Firefox still had code using the infamous “Mork” file format until just this summer, and I understand it’s still live in Thunderbird).
It gets worse: many of the bugs can’t be fixed without breaking stuff. For example, take bug 234856. That’s a seven-year-old display glitch. What could possibly be an excuse for not fixing a simple display glitch for seven years? Well, the root cause of that bug (described more clearly in bug 643041, where the actual fix is posted) is an error in an XPCOM interface that, until we decided we weren’t going to do this anymore (post-FF4), was “frozen”—it could not be changed even though it was wrong, precisely so that extensions could depend on it not changing. There are thousands of XPCOM interfaces, and extensions can use all of them. That’s a great strength: it lets Firefox extensions do far more than, say, Chrome extensions can. That’s also a huge problem for people trying to make the core better. (Only about 200 of these interfaces were permanently frozen, but pre-FF4 we tried to avoid changing even the un-frozen ones as much as possible.) You’ll notice that the change in bug 643041 makes it easier to write extensions that manipulate SSL certificates, because now there’s just one nsIX509Cert interface, not three. But taking away nsIX509Cert2 and nsIX509Cert3 breaks code that was using them.
Some bugs can’t even be fixed without breaking Web sites. Any time Gecko doesn’t do the same thing Webkit and/or IE do, we (and the Webkit and IE people) want to make that difference go away—but to do that, at least one of the three has to change, and there may be sites out there relying on the behavior that just got taken away. In some cases, adding features breaks the web. For instance, if you write ‘<element onevent="do_something()">’ directly in your HTML, when the event fires, the JavaScript interpreter will try to call a method of element’s DOM API named do_something before it tries to call a global function with that name. Which means that adding DOM methods to any HTML element potentially breaks websites. (This is not a problem if you assign to element.onevent from a <script>.)
This is why Mozilla core developers can seem so callous to the needs of extension and website developers built on Gecko. We know that we depend on both groups for our continued relevance—a browser is no use at all with no websites to browse, and without extensions there is not much reason to pick one browser over another. But we feel that right now it is more important to fix the problems with our existing platform than to provide stability. In the long run, we will have a better platform for both groups to work with. And in the long run, stability will come back. There are many bugs to fix first, but there are not infinitely many bugs, even if it seems like it sometimes. Having said that, there are some things we could be doing right now to make extension and website developers’ lives better … but I’m going to save them for the next post. 900 words is enough.
Note to commenters: I know lots of people are unhappy with the UX changes post-FF3.6, but let’s keep this to discussion of API breakage, please.
When we launched Firefox for mobile on Android we were facing new challenges with regards to device compatibility. This was new for Mozilla, because on the desktop you do not need to test the whole range of hardware which ships with the platform you run on. Also our previous mobile efforts, for Maemo, included only 2 device models. But on Android, we had dozens of different phones. And testing all of them would not be an easy task.
So I wanted to see exactly what would be a decent amount of phones that we need to test in order to make sure that we cover a good amount of all Androids that are in people's hands.
I looked at data of Android devices in market for the US, Western Europe (UK, France, Germany, Spain, Italy) and Japan and come to the conclusions that:
there is an average of 57 Android models per country
17 (35%) of them cover 75% of all of the phones in the market
It turns out that at one given time there are a few top devices which everybody has and then a long tail of others. The other are made up of not so successful models that will never rise to be popular ones and some which were recenly launched and haven't had time to get owners. You can usually identify the ones in the long tail which are likely to become top devices by looking at how widely they are marketed, or success in other markets.
We took the latest code in the releases/mozilla-beta repository and created refreshed updates for our Beta audience to test. Both mobile and desktop versions were refreshed and offered to existing Firefox Beta users as automatic updates.
For new users the channel download page has been updated with the newer versions.
For the past year, I’ve been working to build a supporters program — Join Mozilla — as a way to engage hundreds of thousands of people in our mission, and to raise support (both volunteer and financial) for our work. And we’ve been successful. We’ve increased our donations year-over-year, and massively increased the number of individuals who have engaged with Mozilla as supporters. More details on that will apear in a future post.
In the coming months, we’re planning to significantly expand the Join Mozilla program.
In order for the Foundation to continue to support the great projects we currently work on — and, hopefully, to continue supporting more — we need to increase the number of individuals who are supporting our work financially. It’s not something we’ve done as well as we’d like in the past, and it’s not something Mozilla has always done as a community.
In the coming weeks, you’ll see more communication from Mozilla in this area, and we really welcome your ideas and comments. The main principle is to try everything, evaluate, and keep doing what works. We know that we need to be good at it, and we’re committed to learning how.
You can follow the details of our planning by checking out Ben Simon’s blog, where he’ll talk about campaigns we’re working on, and evaluating results. We’re going to do our best to keep you up to date — and get ideas — as we go. As we begin, please chime in with any thoughts you have — campaigns you’d like to see, thoughts on how best to engage new folks, or even concerns as we get going.
Intel Labs has a new project out Parallel Extensions for JavaScript, code named River Trail. River Trail brings the processing power of Intel’s multi-core CPUs and their vector extensions to web applications. With River Trail it will finally be possible to stay in the browser even for more compute intensive applications like photo editing.
Read more here
because I am always, always trying to figure out when a particular release of Firefox is coming out.
big-assed disclaimer: this assumes unwavering adherence to releasing every six weeks. I will update this page if something happens.
also, New Year’s Day in 2013 is gonna hurt.
| Release Date |
Firefox | Beta | Aurora |
| 27-Sep-11 | 7 | 8 | 9 |
| 8-Nov-11 | 8 | 9 | 10 |
| 20-Dec-11 | 9 | 10 | 11 |
| 31-Jan-12 | 10 | 11 | 12 |
| 13-Mar-12 | 11 | 12 | 13 |
| 24-Apr-12 | 12 | 13 | 14 |
| 5-Jun-12 | 13 | 14 | 15 |
| 17-Jul-12 | 14 | 15 | 16 |
| 28-Aug-12 | 15 | 16 | 17 |
| 9-Oct-12 | 16 | 17 | 18 |
| 20-Nov-12 | 17 | 18 | 19 |
| 1-Jan-13 | 18 | 19 | 20 |
| 12-Feb-13 | 19 | 20 | 21 |
| 26-Mar-13 | 20 | 21 | 22 |
| 7-May-13 | 21 | 22 | 23 |
| 18-Jun-13 | 22 | 23 | 24 |
| 30-Jul-13 | 23 | 24 | 25 |
| 10-Sep-13 | 24 | 25 | 26 |
| 22-Oct-13 | 25 | 26 | 27 |
We’re very excited to announce that Mozilla is sponsoring the Hacker Lounge at JSConf.eu and we will be holding a doc sprint at and during the conference. The focus of this doc sprint will naturally be docs for JavaScript and DOM. We hope to encourage attendees at the conference to contribute at least a little to improving the JS and DOM docs on MDN. I and a handful of MDN community members will be there to show them how.
To that end, we want to tag as many JS and DOM articles as possible, with tags indicating what work needs to be done on those articles. That way, anybody dropping in during the sprint (or anytime later) can look for tagged articles and find something to work on.
Here are some of the tags we use to indicate that an article needs help:
Please help by tagging articles in MDN that need work with the appropriate tag. You can use the Talk page for each article to elaborate on what needs to be done, if the tag is not descriptive enough. To modify tags on an article, login to MDN and click Edit Tags at the bottom of the page.
The wiki page for the doc sprint has links to queries for some of these tags.
If you will be at JSConf.eu, I look forward to seeing you there! If you will be participating remotely, I’ll see you online!
Greetings Community!
We recently rolled out a new survey to help us learn how you are discovering testdays and what you get out of them. If you have participated in a testday recently, please take a few moments to share your thoughts. We will be running this survey for the next couple of months by asking for feedback each testday. Feel free to fill this survey out for each and every testday you participate in as it gives us event-specific feedback.
You can find the survey here.
The results of this survey will be used to make testdays more discoverable, more interesting, and more valuable.
Thank you in advance.
This week, at our Mozilla All Hands, I shared some slides about Shipyard, a JavaScript MVC framework that is making it’s way into Add-on Builder. It’s not finished, but since I shared it there, it felt appropriate to share what there currently is here.
An application framework that covers all the common things any JavaScript application would need to deal with: interacting with a server, storing data, rendering said data in the browser, and responding to user actions. An application built on Shipyard should only have to write the parts to pull all those things together.
If you’re application is going to have 1000 lines of JavaScript, would you rather write all those yourself, or have 900 of them be in a framework that is tested and used by others?
When starting a web application, you would reach for Django, or CakePHP, or Rails; never would you decide to use just the language itself. Why shouldn’t you do the same when the target language is JavaScript?
It’s heavily influenced by MooTools, since they have an excellent modular design, but turned into modules while Moo 2.0 figures itself out. There’s slides, and the repository, again.
I’ve written many extensions in these years and not all are present on AMO, many extensions are hosted on customers servers and are updated using signed update.rdf files.
Production environments require automated tasks to create and maintain update and I’ve always used command line tools to pack XPI files and generate corresponding update.rdf files.
I’ve always used McCoy + Spock on from linux boxes to achieve these results.
A customer asked me to migrate the env from Ubuntu 64bit to OSX Lion so I’ve decided to drop Spock in favor of Uhura that uses only Perl scripts to sign extensions and doesn’t need a McCoy profile.
The problem was to migrate private keys generated with McCoy and use them with Uhura, the binary version (v0.5) available from McCoy web page doesn’t allow to export private keys but the code present on mercurial has this feature
hg clone http://hg.mozilla.org/projects/mccoy
so I’ve compiled it and exported all my private keys in a couple of minutes.
Ok a couple of minutes plus 6/7 hours to compile McCoy, the Mozilla build process is documented very very well but I’m lazy and stupid so compiling McCoy and Mozilla necessary files required me a bit of time.
If you need to export private keys from McCoy you can download my compiled version for Linux i686 from here, if you need a version for Windows or OSX I’m sorry but you must compile yourself.
I had the opportunity to attend some really exciting professional development sessions at the All Hands. Personally I found these very interesting, but I heard a lot of grumbling about how these are not adding a lot of value or of interest.
One reason I found these interesting is that in a previous life I had attended a few years of Improv acting classes and did a short stint of real onstage Improv acting. In looping back to these professional development sessions, they reminded me of the core concepts we learned in Improv 101. So if you felt that you missed out, sign up for an Improv class. Maybe if there are professional development sessions at a future event they could just have an Improv acting class.
Related to the professional development courses, I found that most of these were sparsely attended. Of those that did attend the courses received great reviews/ratings. To be fair, the technical tracks that I attended had about the same attendance records of the professional development tracks. Maybe we are not creating sessions that are of interest to our audience? I know for the technical tracks we just propose something and it magically becomes a session. I don’t recall getting any input in what sessions would be available to me. Maybe in the future we can do a better job of getting input from the community (a.k.a audience)!
My team at Mozilla (Services) is looking for talented people to work on Python-based server apps, such as Firefox Sync.
Currently, we’re mainly writing web services. Firefox Sync and most projects we have, uses a micro-framework and stack I’ve initiated last year, based on WebOb and Routes, GUnicorn and NGinx.
For Sync, the code is a thin layer on the top of a big MySQL cluster (more than 100 servers) and some LDAP Servers for the user authentication.
We’re responsible for writing the code & tests, and releasing it so the Service Operations team can deploy it.
That includes some packaging work, having a TDD approach, and caring about the beauty of the code.
I like my work for many reasons, here are a few:
And check out the big project we’re starting in Services:
The only caveat of my job is that I am currently the only member in my timezone, so I feel disconnected sometimes. But this is changing: the major part of the server team is in PDT (California), but we now have someone in Australia (yay!) and it is planned to have some other folks in my timezone (or at least, close) soon.
I’d love to see more Europeans join the team. Click here to apply or contact me.
You can check my previous blog entries in the Mozilla category to see what I have been up to in this area.
Mozilla is the only project where I use hg, and because I'm more comfortable with git, I decided to follow Chris Double's instructions and create a git mirror of comm-central. It now lives at https://github.com/protz/comm-central. It will be updated regularly.
I had an interesting online chat with a friend in the US this morning (well, this night for him...). The topic was HTML and the recent Microsoft announcements. While we see HTML reach a next level with desktop apps, the lingua franca of the web is still far, really far away from having all what's needed for desktop apps or even web-based desktop-alike apps. If form controls improved a lot between html4 and html5, a wide range of UI elements are still out of reach. Well. Let me explain before shouting : they are codable but each and every site has to reinvent the wheel with lots of UI theming and JavaScript-based controls. That's bad because that's incoherent and expensive. HTML+CSS still lacks major, really major stuff like:
While we're (the Standards Community) now focusing on super-mega-hyper-useful stuff like an API to get the battery status (sic...), we're still unable to include in a web- or desktop app such widgets with a native look&feel. There are zillions of frameworks to ease the pain, but none of them is ready for desktop apps, and HTML+CSS+JS desktop apps need them to become mainstream AND cross-platform.
I think then a new standardization effort between HTML and CSS is needed to make HTML UI appear. Let's look back at XUL and XAML a bit... Thoughts?Une fois de plus Bonjour Mozilla a dû faire face à 2 anniversaires le même jour, car GeekShadow est né le 18 septembre, tout comme Cédric... Mais qu'il se rassure : nous ne l'avions pas oublié ! Nous lui souhaitons tout plein de bonnes choses, et notamment de garder son éternelle bonne humeur qui nous plait tant ! Et on en profite pour nous souhaiter, à nous, que plus de membres de la nouvelle génération suivent son exemple et aient le même désir de s'impliquer dans les divers projets numériques !
Bon anniversaire Antoine !
----------------------------------------------
Taking a queue from Nick Thomas (Post), and as he so deftly notes. This breakage is also for SeaMonkey. To quote him (while replacing with the SeaMonkey Info [in bold])
There was some accidental breakage in the Mac builds of Nightly last Friday (Sept 16th), which results in a crash when you try to update your build. The revision & buildID for the broken build is
- ad202468df63, 20110916003001
You can check what you have by loading about:buildconfig, or evaluating navigator.buildID in the Error Console.
The solution is to download the latest Nightly build from http://ftp.mozilla.org/pub/mozilla.org/seamonkey/latest-comm-central-trunk.
Thank you Nick for calling out this issue!
There was some accidental breakage in the Mac builds of Nightly last Friday (Sept 16th), which results in a crash when you try to update your build. The revisions & buildIDs for the broken builds are
You can check what you have by loading about:buildconfig, or evaluating navigator.buildID in the Web Console.
The solution is to download the latest Nightly build from http://nightly.mozilla.org.
Applications like Thunderbird and SeaMonkey are probably also affected.
When I moved into San Francisco, I asked some folks about books I should read to get a sense of the history of the city. Here’s a sampling of the books that I’ve read since then, gathered in one place for the next time someone asks me the question. I’m still open to more suggestions, and suggestions need not be about the city as a whole- for example, my favorite book about New York was in large part about traffic and my favorite book about Boston was about the river.
Actually publishing this post, moons after writing it, is mostly in honor of today’s spectacular weather and my first ever bike ride across the Golden Gate. (And yes, the photo is cliched and I don’t care ;)
Imperial San Francisco: Urban Power, Earthly Ruin: Gray Brechin: This book opens with a slightly bizarre conspiracy theory about the role of mining in history, and keeps going with a lot of implied “the rich are trying to keep us down” without much evidence. Not that the folks he’s chronicling are particularly nice folks, but that’s easy enough to prove without going off the deep end about it. Despite this unfortunate tendency, this book has lots of great stories and background about how the San Francisco power brokers of the late 19th century interrelated with the city, the state, and the rest of the country, including some great background on the history of water and mining in the region. Recommended reading for someone trying to get a grasp on the early history of SF, albeit to be taken with a side order of salt.
Infinite City, A San Francisco Atlas, Rebeca Solnit: This is an atlas in the same way One Hundred Years of Solitude is a story about a village. Which is to say it covers so much history, in so many crazy ways, and is so unlike any other story or map you’ve ever seen, that it becomes very hard to summarize. Maybe not for everyone, either, but something I love and think is worth flipping through for anyone trying to find the stories that can bring a city to life.
Golden Gate: The Life and Times of America’s Greatest Bridge, Kevin Starr: Starr is a great historian (his more serious California history books are terrific), and this book has a lot of great stories. Unfortunately, it also has a lot of filler to make it “book length.” (In the future, books like this will be about 1/2 the length and sold purely as ebooks.) I recommend it, if you’re interested in the bridge and have time to wade through some fairly purple and extraneous prose. If you’re just looking for any one particular book about the city, this one isn’t it.
Making San Francisco American: Cultural Frontiers in the Urban West, 1846-1906, Barbara Berglund: This started as a PhD thesis, and reads like one. But if you’re the kind of person who can plunge through that (and I am), it’s a brilliant book, explaining how the racially mixed and roughly egalitarian culture of mining-era SF was gradually molded into something acceptable to “cultured” Americans – both to the nouveau riche of the West who wanted to build a city acceptable to the East, and to those from the East who were flooding into SF. Really fascinating read, and I think has some lessons applicable to the “uncultured” programmers who have to constantly resist cultural change imposed by more “refined” outsiders- still an ongoing theme in SF.
The Barbary Plague: The Black Death in Victorian San Francisco by Marilyn Chase: This book explores the history of the entry of the bubonic plague into the Americas via San Francisco. It’s a lighter and more thematically consistent book than Making San Francisco American, but covers overlapping time periods and explores some similar themes, like early anti-Chinese racism, and the relationship of early San Francisco with the Eastern US. If you’re looking for something less serious, and not at all about software, this is definitely the one book in this list to read.
Vanished Waters: A History of San Francisco’s Mission Bay, Nancy Olmsted: I live on land reclaimed from Mission Bay, so this has resonance for me that it probably won’t for others. But I think it’s a brilliant, brief book that anyone who lives near modern Caltrain should benefit from reading, since it will help you understand the geography and history of your own neighborhood.
What the Dormouse Said: How the Sixties Counterculture Shaped the Personal Computer, by John Markoff; and Regional Advantage: Culture and Competition in Silicon Valley and Route 128, AnnaLee Saxenian: I think of these as a pair, because while very different books they are also both about the culture of computing innovation and networking in the Valley. Dormouse is really very anecdotal (a little birdie once told me that even the author admits it was basically an excuse to string together a bunch of great stories he’d heard over the years), but they are great anecdotes and give a lot to chew over, especially in light of the success of the iPhone and iPad after the writing of the book, and the continued tension between personalized and centralized computing. Regional Advantage is an even older book, but critical to understanding the larger, structural causes of Silicon Valley’s success, showing that it was increased interpersonal and intercorporate sharing that made Silicon Valley continue to succeed after the shocks of the ’80s hammered both Silicon Valley and Boston’s Route 128.
Reclaiming San Francisco: Brook, Carlsson, and Peters: Not actually read yet, but am excited to find time for it. It’s a series of essays.
Mozilla en version française (feed) – Blog of the localization team in French.
The quote "The definition of insanity is doing the same thing over and over again and expecting different results" is popular, being widely attributed to Einstein (probably incorrectly). Unfortunately it's often used to support a common and dangerous fallacy: that if you're trying something and it's not working, you must not be using the best strategy and you must try something else.
It's easy to see the fallacy using a thought experiment. Imagine you must regularly play a lottery which offers red tickets and black tickets, and red tickets have twice the probability of winning compared to black tickets. So you choose red tickets, but you don't win. Would Einstein tell you to start choosing black tickets instead? Hopefully not!
When the best available strategy has a low probability of success, sticking to that strategy requires discipline, wisdom and courage. This is one of the themes of The Lord Of The Rings :-). You see people fail by panicking and flailing, abandoning their best hope to try something, anything, and essentially self-destructing.
Of course, one must also avoid stubbornly sticking to a strategy which is not the best available.
Overall it's probably best not to use aphorisms in serious discussions :-).
In my last post I mentioned how super satisfying it is to be part of a community working together to make Firefox better.
This morning someone new dropped into #fx-team on IRC, asking about a reproducible problem and how to submit a patch. Normally #fx-team is a fairly busy channel, but since we were all at the Mozilla All-Hands last week, people were traveling and recovering… So it was 12 hours of dead silence before anyone replied. Not great, but also pretty rare. :-(
Anyway, the awesome part was that in that time this person managed to grab the source code, diagnose the problem with gdb, fix the problem, and then blog about it — check it out. That’s pretty awesome! (Oops, I already said awesome once. Still deserving of a 2nd ‘awesome’. :-)
The timing couldn’t have been better. At the All Hands, I went to one of the talks by Ubuntu’s Jono Bacon on Growing and Maintaining Community. It was pretty awesome (3rd time, yes I know). Obviously Ubuntu has a large community, but I was hadn’t realized just how much thoughtful effort has gone into improving it… TONS of fantastic ideas and practices that I hope Mozilla can also make use of. The one downside, though, was that I came away feeling a little bummed at how much work need to do to reach the high level of wide-ranging, effective engagement Bacon et al have developed. So it was really splendid timing to have a new community member pop out and have a good experience.
Today was a good day.
(Photo : Julia Buchner)
Son t-shirt explique en partie pourquoi Cédric est affectueusement surnommé "Papy" par la communauté française : s'il a un t-shirt de la version 2 de Firefox, c'est que Cédric est un contributeur de longue date. Localiseur acharné, et passionné, il est aussi un ami précieux... Alors c'est vrai qu'il vient de décider de se mettre un peu en retrait... Ce n'est pas toujours facile d'être bénévole, et lorsque l'on s'implique autant que lui, on peut en avoir un peu assez du manque de reconnaissance de certains, et de la charge de travail qui s'accumule... On profite donc de son anniversaire pour lui dire à quel point on l'adore, et pour lui hurler : "Reviens Léon !".
Bon anniversaire Cédric !
-------------------------------------------
His t-shirt partly explains why Cedric is dearly nicknamed "Granddad" by the French community: Cedric is a looooOOng-time contributor. A passionate and devoted localizer, and moreover a precious friend of ours. Well yes, it is true he recently decided to take some distance… It's not always easy to be a volunteer contributor, and when you are involved as he is, you can get a bit tired of the lack of gratitude of some people, while the load of work is accumulating... So we are glad to take the occasion of his birthday to tell how much we love him et to shout to him: "Come back soon, Leon!"
Happy birthday, Cédric!
Three years ago we were a team of 7 if I remember right.
Today it’s a team of 38 spanning 6 different groups & 6 different time zones. They are doing things I wasn’t even imagining we’d be doing three years ago. They are, in many respects, the smartest group of people I have ever worked with.
This is Mozilla’s Infrastructure & Operations team, an extremely talented group of sysadmins, network engineers & desktop support folk –
Author of the SyncEvolution commented on mine and Adam Williamson´s blogpost about problems with synchronization. Patrick asks in his post: “I’m not sure what kind of problem Matěj had with SyncEvolution. He doesn’t say in his blog post, only that it does not allow him to reliably sync with his server running Zarafa.” I am sorry for mixing two stories up.
Of course, I know that syncevolution uses SyncML and Zarafa ActiveSync (or CalDAV/CardDAV). My problems with syncevolution were much earlier when I was trying to sync my phone (then Nokia 3110 Classic, later Nokia N900) with Evolution, which given the name of the application should be doable. Maybe it was the horrible configuration, or some kind of PEBKAC, but I was never able to make it working correctly.
After talking to a couple people at all-hands, it became clear that writing your own profiler was a popular activity. (Jeff Muizelaar informed me that last year, the pet project was heap analyzers. What’s next for 2012?) A short, non-exhaustive list:
…and so forth. So it seemed like getting interested parties together to talk about One Profiler to Rule Them All would be good. And it worked; we had probably 20 people come to the BoF. Below is my summary/recollection of what we discussed.. All the omissions and/or misrepresentation in the notes are my own; please leave a comment if you felt I left something out or need to describe something better.
What does the ideal profiler look like?
Bas Schouten also pointed out that it might be much more efficient to just buy suitable profiling technology from a vendor; there was some skepticism that a profiler fulfilling the desiderata existed, though.
Since Benoit gave a demo of his profiler and his profiler seems likely to get into the tree, most of the discussion centered around that or variantions thereof. Benoit’s profiler works in the usual way via periodic signaling; however, instead of unwinding the call stack, Benoit chose to require annotations (via RAII objects) placed in various parts of the code to indicate what your “callstack” was when a sample was taken. I believe Steve said his profiler does something similar for JavaScript. I put “callstack” in quotes because you only get to know whether functions were on the call stack if annotations had been placed in them.
Sprinkling annotations all over the tree sounded like a tedious process. Somebody pointed out that Chrome does this, though they only place annotations at “entry points” for modules, so you might have one entry point for layout, one for graphics, etc. etc. That way, given a profile on some random performance bug, you can at least tell who should be exploring the bug further with minimal overhead, since you’re not unwinding and a handful of RAII objects isn’t going to cost much. Granted, this doesn’t do much for the folks who need to dig deeper, but perhaps we can have other tools for that.
There was some discussion of unwinding instead of annotations. Unwinding is reasonably cheap when using libunwind and caching decoding of the unwind information; it’s even cheaper when you can just walk frame pointers. The only wrinkle is you aren’t guaranteed to have frame pointers or unwind information on x86/Linux, so unwinding is not generally doable there. Sometimes assembly coders also forget they need to insert unwind annotations, though most if not all of the problematic code in glibc, at least, has been so annotated. Taras Glek suggested that we could insert RAII objects before calling out to code that we don’t control and to make those objects record something about frame/stack pointers so that we could unwind around third-party code if necessary. I don’t believe we came to a consensus on using unwinding instead of or in addition to annotations.
I can’t recall if we talked extensively about unwinding through JavaScript code.
We didn’t talk about displaying the collected data. Drawing pretty, understandable pictures is hard.
Benoit and Steve agreed to talk further offline about modifying Benoit’s profiler to understand JavaScript; if you’d like to help with profilers, talk to either of them. It’d be great to have something in the tree that we can all work with and improve.
I’m all jazz hands about Boot To Gecko (B2G). I think B2G is really important to the Mozilla mission. Perhaps stemming from the early-and-open nature of B2G, there are some misconceptions about B2G that I’ve seen in articles and forums. I am not closely involved in the project, but I do know enough to identify and correct a few of these misconceptions with the following three B2G facts:
If you are excited, feel free to contribute to the project; it’s just starting and there are many important problems to be solved.
Next week I’ll be in Mountain View for DocEng2011 — a symposium on Document Engineering, which is hosted by Google this year.
I’ll present my work on timesheets.js (= JavaScript implementation of SMIL Timing and SMIL Timesheets), which has been nominated for the best paper award. Wish me luck!
I post these updates every 3 weeks to inform add-on developers about the status of the review queues, add-on compatibility, and other happenings in the add-ons world.
These stats are taken from the last queue report:
If you still haven’t updated your add-on, here’s an overview of the breaking changes in Firefox 5 and 6. If you’re a theme developer, also check out this post.
The breaking changes in Firefox 7 have been detailed in this post. The compatibility bump for Firefox 7 was run already, so if your add-on is not compatible yet, we recommend you test and see if any changes are required.
The Firefox 8 compatibility post is here. We strongly recommend that you aim to make your add-on compatible with the Firefox version in the Aurora channel, Firefox 8 at this moment. Making your add-on compatible with Aurora qualifies it for our automatic compatibility upgrades, saving you lots of time. Firefox 9 is coming to Aurora in a couple of weeks, so you should look into this soon.
If you need information on how to test how your add-on affects Firefox startup performance, please read this document: Measuring Add-on Startup Performance.
getfirebug.com has Firebug 1.8.3. This release has been also uploaded on AMO (it can take some time to pass the review process).
Firebug 1.8.3 fixes 7 issues since (1.8.2) and is compatible with Firefox 5, 6, 7, 8
Beta channel on AMO is also updated (1.8.3b1 is the same as 1.8.3).
Please post feedback in the newsgroup, thanks!
Jan Honza Odvarko
Version 1.2 of BlueGriffon is in
sight but a few locales still miss some light updates. If you think
you can help, please take a look at the table below. You can submit
your translation of the missing strings by email to info AT
disruptive DASH innovations DOT com or attach patches to the
bugzilla bugs (click on the locale name in the table). Reminder:
please use UTF-8 !!!
Thanks !
(Photo : Julia Buchner)
Demain c'est la journée internationale des pandas roux ! Pour l'occasion Julia et Clarista, deux membres de la communauté française, organisent ce samedi à Paris un "free hugs" (souvenez-vous !). Pour tous ceux qui voudraient venir les aider à parler au grand public de ce qu'est Mozilla, rendez-vous à 12h devant les locaux parisiens de Mozilla (28 Boulevard Poissonnière, dans le 9e). Mais attention : une seule réflexion sur le fait que les femmes aussi ont leur journée, et le malotru sera châtié (un coup de marteau WoMoz !).
Bonjour le panda roux !
-------------------------------------------
Tomorrow is the International Red Panda Day! That's why Julia and Clarista, two members of the French community, are going to give “free hugs” in Paris (do you remember?). For those who want to participate and help them talk to people about Mozilla, you can meet them tomorrow in front of the Mozilla Paris office at 12.00 PM.
Bonjour Red Panda!
Happy 10th birthday Mozilla bug #98160, I hope you won’t make it to your 11th, but who knows…I hope the same for your “younger” brothers bug #166240 which is only 9 years old. Many thanks for all the people who tried to help RTL users switch their textarea directionality and alignment easier.
Another bug in the “it sometime sucks to be an RTL user” department is bug #119857, soon to be age 10. I’m lucky to have BiDi Mail UI as a good workaround, otherwise I couldn’t read emails in Hebrew with the proper alignment/directionality.
In another department, I must say I love daylight saving time, as I have more hours of sun, but this comes on the expense of my schedule as due to bug #504299 all my events aren’t on the right local time, but an hour earlier.
Although the post is written cynically, I would like to call the Mozilla community to help with fixing these issues. I also want to thank the people who are already helping with these issues or helped in the past.
From the Mozilla Developer Engagement team, here is our recommend reading list for the latest week.
If there is anything you think we should read or know about, don’t hesitate to post a comment, contact us on Twitter or through any other mean.
And here are the links:
To help the team around the Memshrink project Mozilla QA Automation Services has released Mozmill Crowd 0.1.4. In this version the only changes which affect the extension itself are additions for the Endurance test-run, which allow users to specify the number of entities and if Firefox has to be restarted in-between each test.
We also have moved our Mozmill environments for all platforms from my own Mozilla people account to a new secure location on mozqa.com. In the future please always use this new location to grab the latest version of the environment.
For more information please see the tracking bug for Mozmill Crowd 0.1.4.
A lot has been going on lately in IT, and we haven’t had a chance to make a post about it. I thought it was about time to get out an update about the team and what we’ve been working on.
Personnel changes:
For starters, the IT team has grown quite a bit since I started, and that was only back in March. There’s plenty of new folks I haven’t met in person yet, and also some departures. There’s some training time of course, but our new hires are all smart folks, and are picking up the ropes very well. Some are digging in to old projects that have been back-burnered for a while, and others are diving in to current issues.
At the same time, it’s baby fever in IT! Just a month ago my wife and I had our first, our daughter Zoey. Jeremy is out on leave right now, with his new daughter Mira. He’s also a new parent. Rob will be taking leave any day now for *his* new daughter… just as soon as she’s born. He’s not a new parent, but I don’t expect the first couple weeks will be much easier on him than Jeremy or myself. Finally, Justin (jabba) is on track to have their first baby in late February.
Major Projects:
Something I’ve worked on myself- the www.mozilla.org and www.mozilla.com site merge! This is now largely completed, and we’re just in cleanup mode. There’s quite a major follow-up project to redesign this site into a nice Django / Playdoh Python app, instead of the old-and-crufty PHP that it is right now. I was the main IT lead on this, but it wouldn’t have been possible without a lot of work from webdev… especially James Long, Anthony Ricaud, and Fred Wenzel. All I did was deploy their code a few times and tweak some Apache configs… they had to make the 2 code bases actually play nicely together.
AMO has been moved to Phoenix! Huge project, and the IT credit goes to Jeremy Orem. On a related note, thanks to his efforts the AMO webdev team is now actually able to do their own code pushes, generally without any significant involvement from IT.
There’s been a lot of work on other new clusters in Phoenix… off the top of my head, there is a new Engagement cluster designed to host short-run sites (glow and twitterparty would have been here, webifyme is here, etc). There is also a new Generic cluster, designed to replace the existing one in SJC. It’s got a good bit more horsepower, as well as being based on RHEL6 instead of 5. Props to Corey Shields for leading both of those 2 cluster rollouts.
We have started a pattern of rolling out “admin” nodes with each cluster. The admin nodes are responsible for pushing new content, running cronjobs, and generally managing the cluster as a whole. In the past we’ve centralized these things onto just a couple admin nodes, doing things for all of our clusters. This works, but gets convoluted fast and doesn’t scale as well as we’d like. So far the new Generic, Engagement, and Addons clusters in Phoenix are set up this way, with more to come. A lot of people have been involved with this, from the puppet modules to the servers themselves.
The puppet training from a couple months ago has come in very handy, and a good number of our classes and modules have been reworked. I’m already noticing it “feels” easier to find things now… not sure if it’s just me getting a handle on our puppet deployment or if it’s actually better, but either way the change is very good. I want to say Justin Dow is largely responsible for this, but honestly so many people have been committing to our puppet repo that it’s hard to keep up with.
Lots of work has gone into our internal inventory system. It is now actually possible to control DHCP allocations from within the inventory system, as well as to define your own key/value pairs for systems in it. This is pretty huge, and there are plans to expand this further, so that inventory becomes more and more of a single source of truth for our infrastructure. This is almost entirely due to the efforts of Rob Tucker.
The Mozilla Developer Network has finally been upgraded to a much newer version of MindTouch. This has been on the plate since at least April, when I took it over, and I believe quite a while before that. Some of the MDN guys are referring to as the most stable and fastest MDN they’ve had in a long, long time… thanks in large part to some good detective work by one of our technical contacts at MindTouch, Brian.
Upcoming projects that I can think of off the top of my head:
We are working towards merging our multiple Zeus LB clusters together, to form one super mega-cluster. This will let us improve our global load balancing capabilities, and potentially bring better global caching to a wider number of websites. No official timeline on this, but it’s on the plate… has been for a few months. In a way this is kinda like hosting our own mini-CDN.
We’re planning to move into a new datacenter very soon. Not sure how much info on this can be public, but as anyone could guess this will mean downtime for some systems, replacement for others, and generally things getting swapped around to make the migration as painless as possible. There’s an insanely complicated Gantt chart for this. Datacenter migrations are serious business, and we’ll do our best to minimize any disruptions.
I’m sure there’s many other IT projects I’ve forgotten… both recently completed and upcoming. Feel free to drop me a line if you know of any, and I’ll update this post.
- Jake
Project Sagrada is a Services project to build a solid and stable platform to develop new and highly scalable services and applications to support Mozilla’s mission. The initial goal is to make it easy for internal developers to build reliable and high performance backend services, easily deploy them to test or production, and have their deployed services be robust and easy to manage. Based on the current product direction for the known services, this set of capabilities are both the hardest to get right at scale and the most important shared aspects between all of the services.
The first phase of the project will focus on adding capabilities (abuse detection, metrics, crypto, and more) and tooling (testing support, build automation, and packaging/dependency tracking) to the current python services-core framework. Later phases will provide better support for building and deploying web-based applications, increasing amounts of “self-serve” capabilities around deployment and provisioning, and options for isolating experimental/external apps.
Creating a core set of stable and reusable code libraries and, where appropriate, web APIs alongside the programmatic ones, technology choices (i.e. which key-value store, which auth technology, which abuse detection system, etc) are abstracted away and allow the user to focus on the core of code that is unique to their app. We believe this is the best and fastest path to a solid, scalable and highly capable base platform that can be used as a framework and as individual components.
Our efforts to date have focused on building out and refining capabilities as they arisen on a project by project basis. While still maintaining a focus on products we support and products we are working towards launching, our priorities in Q4 and beyond will shift towards building generic support for applications that teams across Mozilla will develop.
We recognize that this is a highly ambitious project, and can be effectively described as completely open-ended. While true, there is much to be said for where we can get in finite time along that path.
The structure of a service generally follows the same pattern: a set of API entrypoints, some authentication, controller logic, storage, and a response. Then there’s the additional questions of deployment, monitoring and maintenance. All of these things combine to make writing an app from scratch a challenge, especially if you want to build it to scale out of the box.
What if we could make that 20% easier? That would seem to be a big win, both internally and externally. We probably have that today – use our base application and generating your entrypoints is pretty simple. Sure, you still have to write all your controller logic, and figure out your storage story, etc, but hey, 20% is a pretty good start.
What if we could make it 40% easier? Simple key-value storage APIs and a strong metrics component might do that. And so on and so on.
Why not use one of the many available frameworks out there? We could probably pick up a quick win building on one of them, and we haven’t ruled out the possibility. However, most frameworks are built to support HTML generation, and while they’re capable of creating the appropriate responses, they pull in a lot of additional functionality that we do not need or use, and if it gets in the way of our ability to scale, it’s a nonstarter. Making it easy for us to get to 30% is a great idea, as long as it doesn’t make it much harder to get to 50%.
The ultimate goal is 100%. This goal is impossible, as any computer programmer can tell you, and trying to achieve that produces the infinite horizon that makes this work seem so vast. But setting that as the goal misses the point – getting a user 75% of the way to having a stable, scalable backend application that does what they need would be an enormous game-changer in the application creation space.
We’re still in the bootstrapping phase of the project, so we’re building some of the obvious pieces, and gathering feedback on the rest. Please see the wiki for the current set of features we’re looking to add to the platform.
– mconnor & telliott, on behalf of the Services team
Mike Shaver has done as much as anyone on the planet over the last ten years to make and keep the Web open, free, and awesome. That’s no joke, not a typo, not an exaggeration. The guy has done a lot, and I’m incredibly thankful for his contributions — they’ve just been astonishingly broad, durable & meaningful.
He announced today that he’s leaving Mozilla after working there the past 6 years in a variety of roles (and he’s been involved even longer, since before Mozilla.org even existed). His absence will be felt acutely by everyone, I think, but his fingerprints are all over the place, and all over the project, and they will be forever – the way Mike thinks is pretty well part of the DNA of the company and project.
On a personal level, I really liked working with Mike – he’s smart and humble (sometimes!) and thoughtful – he routinely challenged (and continues to challenge) the way that I thought about problems both on a micro level and more importantly at web scale. He’s been involved in too many technology strategy decisions to count, always working for the betterment of the open web, even when it was inconvenient for him and Mozilla. (or maybe especially then!)
And he affected my framing of the problem deeply – I remember one day a couple of years back when we were talking about some market share point, thinking about how incredibly, insanely competitive the browser technology landscape was – and he said to me: “Look, this is the world we wanted. And this is the world we made.” Wow. Exactly right. He taught me so much about how enormous an impact a group of dedicated people can make.
I quote him a lot when I talk with entrepreneurs of all stripes. I say this: “Figure out the world you want, and go make it that way.” That’s the essence of entrepreneurship, and I think it’s the essence of Mike.
For my money, that’s the best advice anyone can give anyone else, and the best lesson I really, deeply learned from Mike.
Mozilla has been incredibly lucky to have amazing engineering management leadership over the past few years, from Schrep to Shaver and now Damon – just incredible leaders, and the loss of Mike will be obvious, although he’ll undoubtedly stay involved in the larger project.
But for myself, I just wanted to give Mike a very public thank you, and to say that I can’t wait to see what you do next.
It’s starting to get around, because my co-workers are bad at secrets, so I’ll summarize for “the record”.
I’ve decided that it’s time for me to move on from the Mozilla Corporation, where I have enjoyed 6 years surrounded by incredible people doing incredible things on (and to) the web. I haven’t yet decided what’s next, though I have some exciting opportunities to explore. I am still truly, madly, deeply in love with Mozilla and the web it is building, and grateful for the opportunities that it’s created for me.
I have lots, lots, lots to say about my history with Mozilla and what I think the future holds, but that’s for later. This week is about enjoying the company of my Mozilla family, and celebrating the incredible honour it’s been to work here for the last 6 years. And maybe some sniffling.
Those are the questions Mozilla’s Mark Surman took up in Washington, D.C. today, as part of a launch announcement that showcased Mozilla alongside NASA, the U.S. Department of Education, the Corporation for Public Broadcasting, and many others. Mark presented Mozilla’s Open Badges infrastructure and showed how it can help reinvent the way we recognize and reward 21st century skills and achievements on the web and beyond.
Here are the Open Badges presentation slides:
Today we announced Mozilla’s Open Badge Infrastructure project, an effort to make it easy to issue and share digital learning badges across the web.
More and more people are looking at badges to show skills and achievements online. Mozilla is currently developing its own badges for things like Javascript courses at the School of Webcraft. We’ve also talked to groups as diverse as 4H, NASA, PBS, P2PU, Intel and the US Department of Education, all of whom plan to develop digital badges.
Open Badges is a response to this trend: an open specification and APIs that provide any organization the basic building blocks they need to offer badges in a standard, interoperable manner.
If we’re successful, the benefits to learners will be tremendous. Open Badges will let you gather badges from any site on the internet, combining them into a story about what you know and what you’ve achieved. There is a real chance to create learning that works more like the web.
Also, this sort of badge collection may eventually become a central part of online reputation, helping you get a job, find collaborators and build prestige. This is another reason Mozilla wants to build an open badge format: it can show the real potential of open identity tools on the web.
Released today, the first Open Badges beta was developed by Brian Brennan and Erin Knight, with support from Dan Mills and Ben Adida in Mozilla Labs. It includes a badge format spec, APIs and reference implementation for ‘badge backpack’ software. It also builds on other Mozilla open identity technology like Browser ID. Our first implementation will be as part of School of Webcraft, an initiative Mozilla runs jointly with P2PU.
Today’s announcement coincides with the launch of a $2 million badges for learning competition funded by MacArthur Foundation and run by HASTAC. Earlier this week, MacArthur approved a $1 million grant to Mozilla to work on the Open Badges Infrastructure, a platform that will be used by all winners of the competition.
US Secretary of Education Arne Duncan, MacArthur Foundation VP Programs Julia Stasch and Mozilla Executive Director Mark Surman spoke at the competition launch in Washington DC earlier today. Here is the MacArthur Foundation press release.
Today we announced Mozilla’s Open Badge Infrastructure project, an effort to make it easy to issue and share digital learning badges across the web.
More and more people are looking at badges to show skills and achievements online. Mozilla is currently developing its own badges for things like Javascript courses at the School of Webcraft. We’ve also talked to groups as diverse as 4H, NASA, PBS, Intel and the US Department of Education, all of whom plan to develop digital badges.
Open Badges is a response to this trend: an open specification and APIs that provide any organization the basic building blocks they need to offer badges in a standard, interoperable manner.
If we’re successful, the benefits to learners will be tremendous. Open Badges will let you gather badges from any site on the internet, combining them into a story about what you know and what you’ve achieved. There is a real chance to create learning that works more like the web.
Also, this sort of badge collection may eventually become a central part of online reputation, helping you get a job, find collaborators and build prestige. This is another reason Mozilla wants to build an open badge format: it can show the real potential of open identity tools on the web.
Released today, the first Open Badges beta was developed by Brian Brennan and Erin Knight, with support from Dan Mills and Ben Adida in Mozilla Labs. It includes a badge format spec, APIs and reference implementation for ‘badge backpack’ software. It also builds on other Mozilla open identity technology like Browser ID. Our first implementation will be as part of School of Webcraft, an initiative Mozilla runs jointly with P2PU.
Today’s announcement coincides with the launch of a $2 million badges for learning competition funded by MacArthur Foundation and run by HASTAC. Earlier this week, MacArthur approved a $1 million grant to Mozilla to work on the Open Badges Infrastructure, a platform that will be used by all winners of the competition.
US Secretary of Education Arne Duncan, MacArthur Foundation VP Programs Julia Stasch and Mozilla Executive Director Mark Surman spoke at the competition launch in Washington DC earlier today. Here is the MacArthur Foundation press release.
Cross-posted from Mozilla blog.
I did an experiment today, I took my new shiny Samsung Galaxy tablet (which I received late yesterday) and tried to run mochitests on it with a stop watch running. To preamble this, I had an existing objdir. Here are a few of the things I had to do:
/etc/udev/rules.d/51-android.rulesThe challenge is out, can you beat my 5 minutes?
Hey all,
I want to remind you all that tomorrow we will be testing the top issues reported in SUMO: Add-on Compatibility, Session Restore after Update and Profile Retention after Update.
We are expecting you all to come and make Firefox and the Web a better place!
For more information, please see the event page.
[This post is part of a response to Mark Surman's "Mozilla as Teacher". In the first part I suggest that "Mozilla as educator" may be a better framing, in this I discuss just what Mozilla can help people learn.]
Often when Mozilla discusses teaching and education the emphasis is on helping people learn how to code. Restricting the goal to code and helping people make the leap from “user” to “maker” is perhaps a little too wide, there are other aspects of teaching people about the web that Mozilla should explore.
In response to Mark’s post, both David and Laura pointed out the very important role that Mozilla can and should play in educating people about how the internet and the web work. By doing this Mozilla would help people become better “participants” on the web, through which they “take control of their online lives“.
During my time working on School of Webcraft I sometimes wished that the charter we’d written had included “using the web” more, rather than restricting the scope to web development only. Laura and I have discussed how a Web Citizenry project could sit alongside the goals of Webcraft and I think it could have a significant impact. Not everyone wants to be a developer, but whether it’s for work, leisure, study or changing the world, most people want to make better use of the web.
The initial challenge as I see it is not in teaching people how to code, but helping them know enough about the web itself. In doing so we (Mozilla) can help people make critical decisions about how they interact and participate with the services and sites they use all the time.
People who learn how to make things on the web already know that the web is not magic. Just as a kid knows they can learn to pull a rabbit out of a hat, engaged participants of the web have an inkling of what happens behind the browser. By knowing the web is not magic but made up of coded instructions, they understand their potential as makers. They want the power to make magic on the web too.
By adding a focus in which Mozilla helps people move away from being passive users of the web and towards more engaged participation, we’re one step closer to helping people change from “user” to “maker”.
There’s ongoing discussion about Mozilla’s role as a ‘teacher’ and how it fits alongside that of “inventor”. In a recent blog post, Mark Surman wanted to find out whether “Mozilla as teacher“ resonates and what other terms might be appropriate.
Having spent the past year with Mozilla helping people learn, I wanted to respond, both with how Mozilla could position themselves and, in a secondary post, on what Mozilla should teach.
“What’s a less top-down word than ‘teacher?’”
@openmatt
When identifying Mozilla’s teacherly role it’s useful to look for a friendly term that implies trust and doesn’t intimidate potential participants. It should encourage collaborative participation and new ways of learning together and on the web. Mozilla should, with this word, be represented as teacher, mentor, innovator, expert, facilitator, guide, communicator and technician.
So, they’re not just a teacher then…
It’s a tough ask and it struck a nerve. Over the last years of fine-tuning Twitter profiles, blog “About” pages and public speaking bios I looked for a similarly encompassing term to convey my old role within School of Webcraft and beyond.
I wanted to be a “learning [r]evolutionary”. It implies change whether it happens slowly or fast. But it takes some explaining, a commitment to questionable square brackets and is problematic when used on passports and visas.
For a long time I primarily identified myself as “learning activist“, but I was stuck with a term that intimidated some people and confused everyone else. When an activist isn’t agitating for change, what do they actually do? Well, sometimes I teach, I facilitate, I develop educational tools, I research and learn, and most importantly I believe that we can continually identify better ways for people to learn. How to convey that complexity?
In the end I’ve reclaimed “educator” as the umbrella term with which I can start [and end] discussions about what it is I actually do. It’s understandable, can be taken seriously, but most importantly it communicates that my primary goal is to help people learn. Sure, “educator” is a little unsexy and at times can be formal, but in the end, it unpacks to include roles such as teacher, mentor, edupunk and activist.
Education involves consciously setting out to learn. It also involves certain values and commitments.
infed.org: “Being an Informal Educator”
There definitely is some reclaiming that needs to happen for “educator”: to extricate the identity from degrading formal educational systems, to divorce the term from its relationship to “instruction” and “knowledge transfer” and to site it as a role which covers the many ways in which people consciously help others learn.
By reclaiming “educator” can we also make it useful for Mozilla?
I have a feeling that Mozilla as “Educator” has resonance and a better scope to describe the range of projects that support people learning to use and make on the web:
In just the same way that “Mozilla as inventor” can unpack to allow discussions of Mozilla as hacker, innovator and creator I think it’s important to easily convey that Mozilla can be teacher, mentor and facilitator, and generally an educator.

Difficile de vous présenter Jessica Klein en quelques mots, tant elle a de cordes à son arc. D'abord, c'est une illustratrice de talent (on peut en avoir un aperçu sur son compte Flickr). C'est aussi quelqu'un qui s'intéresse à l'éducation et aux moyens de connecter les gens grâce aux nouvelles technologies : elle est est la Design and Learning Lead de l'un des plus fameux projets Drumbeat: le Hackasaurus. Le but du projet est d'apprendre aux enfant à bidouiller le Web, en créant des outils pour les aider à l'explorer et à le remixer (Vous avez ici une vidéo tournée lors d'une session à Bruxelles, qui montre bien l'énergie que met Jessica pour donner envie d'apprendre à bidouiller le Web !). Bonjour Mozilla vous conseille d'aller sur son blog où elle détaille les nombreux projets qu'elle a pour Hackasaurus. Par exemple, créer une BD bidouillable, exploiter toutes les possibilités de HTML5 pour explorer de nouveaux moyens d’interagir avec une histoire dessinée. Et devinez quoi ? Jessica cherche actuellement des éducateurs : à vos candidatures !
Bonjour Jessica, et merci à Clochix de nous avoir signalé cette femme épatante !
Si vous êtes intéressés par le Hackasaurus, rendez-vous à Londres du 4 au 6 Novembre, pour le Festival Mozilla. L'équipe y sera pour discuter de comment enseigner des choses sérieuses aux enfants à travers le jeu.
-------------------------------------------------
We are pleased to welcome Jessica Klein on Bonjour Mozilla. It's
hard to introduce her with few words, because she wear many hats. She's a
talented illustrator (for example, take a look at her Flickr account).
She's interrested in education and ways to connect people with new
technologies. She is the Design and Learning Lead of Hackasaurus. Hackasaurus is a Dumbeat project whose goal is to learn to kids how
to hack the Web, by giving them tools to explore and remix. You can see
on this video from a Brussel hack jam her energy to make the kids want
to learn how to hack the Web. On her blog, she describes her ideas for Hackasaurus. For example,
create hackable comics, explore how HTML5 allow to interact with
illustrated stories, and hack them. And guess what ? Jessica is looking for educators !
Bonjour Jessica, and a great thanks to Clochix for this post !
PS : If you're interested in Hackasaurus, you should join us in London for the Mozilla Festival in November. The hackasaurus team will be there to tackle how games can deliver serious content to kids.
Web developers like ColorZilla. ColorZilla is great, really great. But it has one issue: it's able to pick a color only inside the browser window, not anywhere on the screen or even the multiple screens you have. Since designers work with multiple types of sources, it is often necessary to get a color from outside the browser window and in that case ColorZilla can't help...
I was not really fond of writing a ColorZilla-like add-on for BlueGriffon myself since Mac OS X has /Applications/Utilities/DigitalColor\ Meter.app and my primary platform is OS X... But then I got an interesting message from a BlueGriffon user containing good, even very good I must say, arguments in favor of such an add-on. So I spent a few hours (roughly three) on it and here is the result. Honestly I already like it. It's not ironed yet and works only on OS X for the time being but the screenshot below will show you the best part of it : it works anywhere on all screens attached to your computer (see the crosshair cursor in the BlueGriffonEpubEdition icon on OS X desktop) ...

I think I can also make it work on Windows and Linux. And of course, it will be well integrated with the colorpicker in BlueGriffon. Stay tuned 
Update: the add-on now adds a new EyeDropper button to the color picker and is fully functional on OS X, Linux and Windows. Yay ! Will be released with forthcoming BlueGriffon 1.2.
At the Mozilla webdev meetup we discussed recruiting. I specifically brought up the point that I think user groups or meetups (or whatever you'd like to call them) are great for recruiting. If you are a Mozillian and especially a remote one, I really hope you get the chance to go to a meetup or user group in your area. Here's why:
Once you've been to a couple of user groups, the next thing you might want to see is if the user group needs help. Normally a user group needs: somewhere to meet, a projector or something people can see, maybe liquid and food refreshments and someone to organise it. Mozilla can help out on some of these points.
I'm lucky because I live in Vancouver so have facilities of the Vancouver office at my disposal. For many years the Python user group used to be at ActiveState and then had several years of wandering around different offices and buildings throughout Vancouver, but it survived. Now we are using the Mozilla Vancouver office. But finding that space was always the biggest challenge. If you've got a space where you can have people come, that's a great help.
Mozilla will also help support limited things like beer and pizza for the meetup, but you should check with your manager before you start expensing that.
Next post, I'll discuss tips for organisers because the Vancouver Python meetup is about to start.
Why, it’s just fine, thank you! Since our trial fix for the crashing and memory abuse problems was implemented last week (on the 9th), we haven’t had any restarts or crashes. This is insanely good news! Work is now underway on preparing to deploy the longer-term solution for the problem. I don’t have a timeframe for when that will be done, but it’s coming.
I’m extremely excited that, for the first time in ages, the devmo wiki is behaving stably and reliably. It’s been a long time coming!
“An apple for the teacher” is an old tradition in America that has fallen by the wayside. But doing a little something to show your children’s teachers that you appreciate their effort and understand the challenges they face is still worth the effort.
Rather than sending an apple for the teacher, I’d like to suggest you “Ink the Teacher”. No, I’m not suggesting a gift certificate to the local tattoo parlor. I’m talking about ink for the classroom printer. Teachers in the US typically spend hundreds of dollars each year out of their own pockets to get supplies that dysfunctional school systems don’t provide. We could all help just a little.
When you head to your child’s classroom for back-to-school night this year, do a little sleuthing and find the model number of the classroom printer. Contributing an inkjet cartridge and perhaps even a ream of printer paper will give you superhero status and help ensure your child has a productive school year less constrained by tight school budgets.
…and if you tweet the idea, maybe you’ll help more than just your child’s class.
Here are today’s Wiki Wednesday articles! If you know about these topics, please try to find a few minutes to look over these articles that are marked as needing technical intervention and see if you can fix them up. You can do so either by logging into the wiki and editing the articles directly, or by emailing your notes, sample code, or feedback to mdnwiki@mozilla.org.
Contributors to Wiki Wednesday will get recognition in next week’s Wiki Wednesday announcement. Thanks in advance for your help!
JavaScript
SpiderMonkey
Developing Mozilla
Extensions
XUL
XPCOM
Interfaces
Plugins
CSS
Thanks to McGurk for contributing last week.
SVG
HTML
DOM
Here are today’s Wiki Wednesday articles! If you know about these topics, please try to find a few minutes to look over these articles that are marked as needing technical intervention and see if you can fix them up. You can do so either by logging into the wiki and editing the articles directly, or by emailing your notes, sample code, or feedback to mdnwiki@mozilla.org.
Contributors to Wiki Wednesday will get recognition in next week’s Wiki Wednesday announcement. Thanks in advance for your help!
JavaScript
SpiderMonkey
Developing Mozilla
Extensions
XUL
XPCOM
Interfaces
Plugins
CSS
Thanks to McGurk for contributing last week.
SVG
HTML
DOM
At Blackhat & Defcon recently I was once again surprised by the number of security professionals who refused to touch a networked device for the duration of the conference. Yes, the risk is elevated and people might have zero days. But the risk is also high in airports, coffee shops, and hotels in far-away places. People in some parts of the world live at a constantly high risk of zero-days in their own homes.
How can we be expected to help defend our users (who at most have a small fraction of the security knowledge that we do) in hostile environments if we can’t defend ourselves? Some have called this attitude cavalier or attributed it to hubris, but that’s missing the point.
The point is that either we are overestimating the risk at Blackhat, or underestimating the risk the rest of the time. If a security pro can’t defend themselves in a highly hostile environment, then I claim they can’t defend their users in a moderately hostile one.
We’ve just released Camino 2.0.9, a maintenance release which contains various security and stability updates to Camino 2.0.x. All users are urged to update.
In addition, Camino 2.0.9 is available in the following languages:
As always, you can download Camino 2.0.9 in English (or the multilingual version) from our website, and existing Camino users will receive this release via software update.
When you first launch a new version of Camino, the welcome page now checks for an outdated Flash Player plug-in to help keep you up to date. If you see an update message, please follow the link to install the latest Flash Player plug-in to get the most stable and secure browsing experience.
The best part about Mozilla All Hands meetings is that it is quite easy to find people who have similar interests and passions. What’s harder is to take those passions home and keep some momentum going on ideas that spring up during these weeks. Nonetheless, one group that has been slowly forming over a few months is a group that wants to start engaging developers, users, and all people in Africa.
There are a lot of ideas for what this means as there are so many issues in Africa that could use some participation by an organization such as Mozilla. Still, the group is growing and we are going to meet sometime today or tomorrow to try to figure out some first steps for making this happen.
If you are at the Mozilla All Hands and want to join in, just find me (dcm@), dietrich, or dees and tell us you want to join. If you aren’t a Mozillian, or aren’t at the All Hands – jump in an tell us how you think Mozilla should engage with Africans.
Update: I have set up a new Google Group to provide a forum for more conversation on this – please join in!
I can’t believe it’s been almost a year since I blogged last time. The thing is that the longer you wait, the harder it gets to start writing again because you have a growing pile of things you should have blogged about in the past that makes you raise the bar on the significance threshold. Essentially, picking up a blog after almost a year of silence requires that the update has to be spectacular.
Well, that’s one way of looking at it. Another way could be to just say: Hey, I’m back! I’ll try to be a little more frequent in the future, but for now let’s summarize the most important bits that have happened up until now:
Its about time to give you an update on what is planned for the next release. As you may have noticed, we have had a lot of trouble calling our releases "beta". For one thing, some users and especially corporate users are cautious when they read beta and don't see that it has the same quality as all our other releases. Aside from that we also had trouble with uploading releases to addons.mozilla.org (they are automatically marked beta and require admin intervention to make them public for everyone) and we are constantly in need of new sub-version numbers. For example, if we want to release a matching build for Thunderbird 7.0b2, what do we call it? Lightning 1.0 beta 7 beta 1? Thats too much, do you agree?
To relieve that issue we're going to bite the bullet and call either our next release or the one after 1.0. Afterwards we can newly decide on version numbers and I'll tell you one thing: I'm not going to go into the version number trap again. If at some point the next available version number is 2.0, then that's the way it is.
We have taken great care to avoid patches with string changes for the next release. Therefore as it is right now, if you have all strings translated for Lightning 1.0b5, then you are good to go for the next release.
According to the l10n dashboard, there are 13 locales with missing strings. This information is quite old so a lot may have changed in between, but it would be splendid if all of the remaining locales could have their strings translated. I will be contacting the localizers personally to make sure things progress
Update: Likely the l10n builds are not working yet. I'll also post here and in mozilla.dev.l10n when that is fixed!
For you? Yes, for you! We need help testing Lightning to make sure there are no unpleasant surprises in the next two weeks. Now you'll surely want to know where to get a build compatible with Thunderbird 7.0 Betas. Unfortunately I must admit, this is not quite ready yet. Our goal is to automate the release process a bit more, otherwise at least a day of my time is taken just for producing a full set of release (candidate) builds. It may easily happen that a detail is forgotten, which will only make the process more painful.
So what to do in the meantime? Well you have two options. First of all you could test Thunderbird 8 Prerelease with Lightning 1.0b8pre. This may be a different Thunderbird version, but the Lightning code is the same between those versions.
Then we have the first set of test builds for Thunderbird 7 beta and Lightning 1.0b7. These builds might have their quirks since not all parts of release automation went well. Please stay tuned, I'll be posting an update when its advisable to move from testing with Thunderbird 8 to Thunderbird 7.
We need you now more than ever to make sure Lightning 1.0 is a success. This version will likely get more PR than the previous versions so it would be a pity if it weren't in good shape or needs to be skipped for an urgent fix. I'm counting on you!

(Photo : ebarrun)
Eh non ! William, l'un des community managers de Mozilla, n'est pas Français (malgré son accent parisien), il n'est pas Américain (bien qu'il parle anglais parfaitement...) : il est Philippin ! Le voici donc, de retour dans son pays natal, un énorme sourire aux lèvres ! Il faut dire que l'accueil était chaleureux, et la communauté Mozilla Philippines talentueuse !
Bonjour à tous !
-----------------------------------------------
You know what? William, one of the Mozilla community managers, isn't French (despite his Parisian accent) nor American (even though he speaks English perfectly…): he is Philippine! And here he is, back to his native land, with a big, big smile! Well, we have to say that he got the warmest welcome, and that the Mozilla Philippines community is very talented!
Bonjour everyone!
There are several reasons why someone would want to build a custom kernel for their Android phone. In my case, this is because I wanted performance counters (those used by the perf tool that comes with the kernel source). In Julian Seward‘s case, he wanted swap support to overcome the limited memory amount on these devices in order to run valgrind. In both cases, the usual suspects (AOSP, CyanogenMod) don’t provide the wanted features in prebuilt ROMs.
There are also several reasons why someone would NOT want to build a complete ROM for their Android phone. In my case, the Nexus S is what I use to work on Firefox Mobile, but it is also my actual mobile phone. It’s a quite painful and long process to create a custom ROM, and another long (but arguably less painful thanks to ROM manager) process to backup the phone data, install the ROM, restore the phone data. And if you happen to like or use the proprietary Google Apps that don’t come with the AOSP sources, you need to add more steps.
There are however tricks that allow to build a custom kernel for the Nexus S and use it with the system already on the phone. Please note that the following procedure has only been tested on two Nexus S with a 2.6.35.7-something kernel (one with a stock ROM, but unlocked, and another one with an AOSP build). Also please note that there are various ways to achieve many of the steps in this procedure, but I’ll only mention one (or two in a few cases). Finally, please note some steps rely on your device being rooted. There may be ways to do without, but I’m pretty sure it requires an unlocked device at the very least. This post doesn’t cover neither rooting nor unlocking.
To build an Android kernel, you need a cross-compiling toolchain. Theoretically, any will do, provided it targets ARM. I just used the one coming in the Android NDK:
$ wget http://dl.google.com/android/ndk/android-ndk-r6b-linux-x86.tar.bz2
$ tar -jxf android-ndk-r6b-linux-x86.tar.bz2
$ export ARCH=arm
$ export CROSS_COMPILE=$(pwd)/android-ndk-r6b/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/arm-linux-androideabi-
For the latter, you need to use a directory path containing prefixed versions (such as arm-eabi-gcc or arm-linux-androideabi-gcc), and include the prefix, but not “gcc”.
You will also need the adb tool coming from the Android SDK. You can install it this way:
$ wget http://dl.google.com/android/android-sdk_r12-linux_x86.tgz
$ tar -zxf android-sdk_r12-linux_x86.tgz
$ android-sdk-linux_x86/tools/android update sdk -u -t platform-tool
$ export PATH=$PATH:$(pwd)/android-sdk-linux_x86/platform-tools
For the Nexus S, one needs to use the Samsung Android kernel tree, which happens to be unavailable at the moment of writing due to the kernel.org outage. Fortunately, there is a clone used for the B2G project, which also happens to contain the necessary cherry-picked patch to add support for the PMU registers on the Nexus S CPU that are needed for the performance counters.
$ git clone -b devrom-2.6.35 https://github.com/cgjones/samsung-android-kernel
$ cd samsung-android-kernel
You can then either start from the default kernel configuration:
$ make herring_defconfig
or use the one from the B2G project, which enables interesting features such as oprofile:
$ wget -O .config https://raw.github.com/cgjones/B2G/master/config/kernel-nexuss4g
From then, you can use the make menuconfig or similar commands to further configure your kernel.
One of the problems you’d first encounter when booting such a custom kernel image is that the bcm4329 driver module that is shipped in the system partition (and not in the boot image) won’t match the kernel, and won’t be loaded. The unfortunate consequence is the lack of WiFi support.
One way to overcome this problem is to overwrite the kernel module in the system partition, but I didn’t want to have to deal with switching modules when switching kernels.
There is however a trick allowing the existing module to be loaded by the kernel: compile a kernel with the same version string as the one already on the phone. Please note this only really works if the kernel is really about the same. If there are differences in the binary interface between the kernel and the modules, it will fail in possibly dangerous ways.
To use that trick, you first need to know what kernel version is running on your device. Settings > About phone > Kernel version will give you that information on the device itself. You can also retrieve that information with the following command:
$ adb shell cat /proc/version
With my stock ROM, this looks like the following:
Linux version 2.6.35.7-ge382d80 (android-build@apa28.mtv.corp.google.com) (gcc version 4.4.3 (GCC) ) #1 PREEMPT Thu Mar 31 21:11:55 PDT 2011
In the About phone information, it looks like:
2.6.35.7-ge382d80
android-build@apa28
The important part above is -ge382d80, and that is what we will be using in our kernel build. Make sure the part preceding -ge382d80 does match the output of the following command:
$ make kernelversion
The trick is to write that -ge382d80 in a .scmversion file in the kernel source tree (obviously, you need to replace -ge382d80 with whatever your device has):
$ echo -ge382d80 > .scmversion
The kernel can now be built:
$ make -j$(($(grep -c processor /proc/cpuinfo) * 3 / 2))
The -j… part is the general rule I use when choosing the number of parallel processes make can use at the same time. You can pick whatever suits you better.
Before going further, we need to get back to the main directory:
$ cd ..
The Android boot image living in the device doesn’t contain only a kernel. It also contains a ramdisk containing a few scripts and binaries, that starts the system initialization. As we will be using the ramdisk coming with the existing kernel, we need to get that ramdisk from the device flash memory:
$ adb shell cat /proc/mtd | awk -F'[:"]' '$3 == "boot" {print $1}'
The above command will print the mtd device name corresponding to the “boot” partition. On the Nexus S, this should be mtd2.
$ adb shell
$ su
# dd if=/dev/mtd/mtd2 of=/sdcard/boot.img bs=4096
2048+0 records in
2048+0 records out
8388608 bytes transferred in x.xxx secs (xxxxxxxx bytes/sec)
# exit
$ exit
In the above command sequence, replace mtd2 with whatever the previous command did output for you. Now, you can retrieve the boot image:
$ adb pull /sdcard/boot.img
We first want to extract the ramdisk from that boot image. There are various tools to do so, but for convenience, I took unbootimg, on github, and modified it slightly to seemlessly support the page size on the Nexus S. For convenience as well, we’ll use mkbootimg even if fastboot is able to create boot images.
Building unbootimg, as well as the other tools rely on the Android build system, but since I didn’t want to go through setting it up, I figured a minimalistic way to build the tools:
$ git clone https://github.com/glandium/unbootimg.git
$ git clone git://git.linaro.org/android/platform/system/core.git
The latter is a clone of git://android.git.kernel.org/platform/system/core.git, which is down at the moment.
$ gcc -o unbootimg/unbootimg unbootimg/unbootimg.c core/libmincrypt/sha.c -Icore/include -Icore/mkbootimg
$ gcc -o mkbootimg core/mkbootimg/mkbootimg.c core/libmincrypt/sha.c -Icore/include
$ gcc -o fastboot core/fastboot/{protocol,engine,bootimg,fastboot,usb_linux,util_linux}.c core/libzipfile/{centraldir,zipfile}.c -Icore/mkbootimg -Icore/include -lz
Once the tools are built, we can extract the various data from the boot image:
$ unbootimg/unbootimg boot.img
section sizes incorrect
kernel 1000 2b1b84
ramdisk 2b3000 22d55
second 2d6000 0
total 2d6000 800000
...but we can still continue
Don’t worry about the error messages about incorrect section sizes if it tells you “we can still continue”. The unbootimg program creates three files:
boot.img-mk, containing the mkbootimg options required to produce a working boot image,boot.img-kernel, containing the kernel image,boot.img-ramdisk.cpio.gz, containing the gzipped ramdisk, which we will reuse as-is.All that is left to do is to generate the new boot image:
$ eval ./mkbootimg $(sed s,boot.img-kernel,samsung-android-kernel/arch/arm/boot/zImage, boot.img-mk)
There are two ways you can use the resulting boot image: one-time boot or flash. If you want to go for the latter, it is best to actually do both, starting with the one-time boot, to be sure you won’t be leaving your phone useless (though recovery is there to the rescue, but is not covered here).
First, you need to get your device in the “fastboot” mode, a.k.a. boot-loader:
$ adb reboot bootloader
Alternatively, you can power it off, and power it back on while pressing the volume up button.
Once you see the boot-loader screen, you can test the boot image with a one-time boot:
$ ./fastboot boot boot.img
downloading 'boot.img'...
OKAY [ 0.xxxs]
booting...
OKAY [ 0.xxxs]
finished. total time: 0.xxxs
As a side note, if fastboot sits “waiting for device”, it either means your device is not in fastboot mode (or is not connected), or that you have permissions issues on the corresponding USB device in /dev.
Your device should now be starting up, and eventually be usable under your brand new kernel (and WiFi should be working, too). Congratulations.
If you want to use that kernel permanently, you can now flash it after going back in the bootloader:
$ adb reboot bootloader
$ ./fastboot flash boot boot.img
sending 'boot' (2904 KB)...
OKAY [ 0.xxxs]
writing 'boot'...
OKAY [ 0.xxxs]
finished. total time: 0.xxxs
$ ./fastboot reboot
Voilà.
The Jetpack team is pleased to announce the release of Add-on SDK 1.1. This version is the first update since the 1.0 release of Mozilla’s downloadable software development kit for easily building Firefox add-ons. This release mostly contains stability work and bug fixes. Beyond the stability work the 1.1 release also contains:
For more information on these and other new features, please see the Release Notes.
This is the first release that puts the Add-on SDK on a train model release schedule that mirrors Firefox’s. We will be releasing a new version of the Add-on SDK about two weeks before each new release of Firefox.
To get started building add-ons with the SDK, download it and then check out the documentation!
As always, we’d love to hear from you about your experiences with the release! You can contact us in a variety of ways:
post to our discussion group
chat with us on irc.mozilla.org #jetpack
report a bug
check out the source and contribute bug fixes, enhancements, or documentation
For more information on the Jetpack Project check out our wiki