Real Men do Build Engineering (A Real Threat to Thunderbird)

When I was first getting involved in Thunderbird, I recall reading a post from early leader Scott MacGregor that puzzled me. When the project was essentially a two-person project, he said that the next person they needed was a build engineer. I had always thought of that as a backwater for people who couldn’t do real coding.

How my thinking has changed! As we look to the future of the Thunderbird project, it is clear that the main threat at the moment is losing control of the build process. These days, it takes a PhD candidate in computer science (Joshua Cranmer) to understand building Thunderbird, and keep it building. I’m not sure we are winning the battle, though  Joshua assures me that he and Standard8 have a Grand Plan to make it all better.

As for me, I’ve committed myself to improving my record in doing code reviews, which so far has been dismal. I’d like to give 20% of my time back to the core project, and a significant fraction of that should be doing code reviews. But I can’t keep comm-central compiling in 8 hours per week, which makes it very hard to do reviews.

<rant>It seems there is some project over on mozilla-central to replace the build process with some python-based thingy. “Just do mach (insert short command)” is the answer to everything in mozilla-central world. If it works, great. If it does not work (and it never works on comm-central), then you have to call your PhD-candidate build expert to make any sense of the problem. In the old days, where standard unix tools were used, you at least had a hope of googling your problem, and getting some hint of the issue. Now you have to pour over multiple files of python with multiple levels of abstracted variables, none of which I understand.</rant>

Here is today’s typical error:

Reticulating splines...
Traceback (most recent call last):
  File "./config.status", line 881, in <module>
  File "c:\tb\1-central\src\mozilla\build\", line 126, in config_status
    summary = backend.consume(definitions)
  File "c:\tb\1-central\src\mozilla\python\mozbuild\mozbuild\backend\", line 194, in consume
  File "c:\tb\1-central\src\mozilla\python\mozbuild\mozbuild\backend\", line 333, in consume_object
    CommonBackend.consume_object(self, obj)
  File "c:\tb\1-central\src\mozilla\python\mozbuild\mozbuild\backend\", line 87, in consume_object
    self._test_manager.add(test, flavor=obj.flavor)
  File "c:\tb\1-central\src\mozilla\python\mozbuild\mozbuild\backend\", line 68, in add
    assert path.startswith(self.topsrcdir)
configure: error: c:/tb/1-central/src/mozilla/configure failed for mozilla
*** Fix above errors and then restart with               "c:/mozilla-build/python/python.exe c:/tb/1-central/src/mozilla
/build/pymake/pymake/../ -f build"

So, are there any Real Men out there (or even Real Women) that want to be a hero, and save our project? Or am I going to have to become a Python build expert to do anything at all in Thunderbird?


The proxy debate over paid addons

I recently received a review of my ExQuilla addon for Thunderbird with the glowing report “It works well, I’ll give you that. No more, no less”. Should be 5 stars, right? No, the addon got 2.

This is the proxy battle over whether there should be paid addons in the Mozilla ecosystem, fought by trashing the ratings of paid addons. The reviewer gave me 2 stars because he believes “Please find purchasers from paid email software, not in an open source software.” He also complained about my response to an earlier reviewer who gave ExQuilla one star because, even though [...]

Mesquilla is releasing a Calendar EWS Provider addon compatible with ExQuilla

Recently we learned that the “Exchange 2007/2010/2013 Provider” addon is no longer being developed, and the final version did not fully support Thunderbird 24 and Exchange Server 2013 & Office365. While eventually we intend to fully integrate Calendar and Task support into ExQuilla, at the moment that support is incomplete and experimental, so many of our customers had relied on the now-abandoned addon. So as a convenience to our customers, we have forked and updated that addon to provide a version that works with current Thunderbird and Microsoft Exchange, as well as includes better compatibility with ExQuilla. We call this [...]

ExQuilla as a Model for “Thunderbird Professional” aka SwanFox

About a year ago, when we on the Thunderbird team were having very active discussions about the future of Thunderbird after Mozilla’s drastic cutback in funding, Axel Grude and myself were minority voices promoting the importance of developing funding sources for Thunderbird if it were to prosper in the future. In contrast, the majority viewpoint, as I understand it, was some combination of 1) We don’t need funding, Thunderbird is fine the way it is, and eager volunteers will move things forward, and 2) Mozilla Messaging tried for years to develop funding and failed, so it is probably impossible to [...]

Comparing Javascript components and modules

The code that I develop for my ExQuilla addon uses a combination of C++ and javascript-based code, so I am constantly having to deal with interactions between those languages in a Mozilla Thunderbird binary extension. So I thought it would be a good idea to test the relative speed of two ways of writing javascript code that can also be accessed from C++:

Using a javascript-based XPCOM component for both, or Using a javascript module for javascript callers, and a javascript component calling into a module for C++ users.

The second option is somewhat unusual, and represents an attempt to [...]

EarlyLight (unofficial multiversion Lightning addon) for Thunderbird 14 -16

My EarlyLight addon, which is an unofficial build of the Lightning calendar extension, supporting multiple Thunderbird versions, is now available for Thunderbird 14 – 16. This is based on the current Lightning 1.8a2 source (which is now in the aurora directories). Download here:




I’ll probably stop supporting this once Thunderbird switches to its slower release cycle.

EarlyLight, an unofficial Lightning (aurora) build supporting multiple Thunderbird versions

I got tired of waiting for Lightning to fix their aurora build problems so I decided to practice my newly-acquired Mozilla build foo to build my own. In the process, I extended the usual Lightning build so that I have Lightning that can work with current TB release, beta, and aurora versions, that is Thunderbird 13, 14, and 15.

The “source” for this is just a makefile which you can see here. (I added my fix in Mozilla bug 766685 so that I could build this with my VS 2008 on Windows). This will only work in my local build [...]

ExQuilla (Microsoft Exchange Server for Thunderbird) beta version released

I am pleased to announce that ExQuilla, a Thunderbird addon that provides access to messages and contacts in Microsoft Exchange Server, is now available. This is a beta-quality release. ExQuilla is currently only available for Windows, in English, and supports Thunderbird version 9, 10, and 11. Linux and Mac versions are planned for the future.

The most current version of ExQuilla is available from the MesQuilla site here. A slightly older version (due to review delays) is available from Mozilla’s addon site here.

This version supports access to messages and personal contacts from a Microsoft Exchange Server 2007 or 2010 [...]

Avoiding namespace leaks in event handlers

A common pattern that we see in review of Mozilla addons is code that looks like the following:

var myExtension = { saveMe: null, onLoad: function () { this.saveMe = “I am saved”; } } window.addEventListener(“load”, myExtension.onLoad);

Unfortunately the value of “this.saveMe” that is used in onLoad is the value from the global window, not the value from the myExtension object. Really the event listener is looking for an object of type nsIDOMEventListener, with a method handleEvent. When it does not find that, it applies some magic and just uses the entered function. Unfortunately, in the process the “this” does [...]

Address Book accounts

New account types in Javascript for Thunderbird (Part 4)

Now that I am essentially feature complete in adding Address Book features to my Exchange Web Services implementation ExQuilla, I’d like to discuss how SkinkGlue was used to allow this to mostly be done in JavaScript.

As review, SkinkGlue is my attempt to add an interface layer to Thunderbird to allow new account types to be added using javascript. SkinkGlue provides the necessary C++ interfaces to allow standard Thunderbird objects to be created without writing C++ code. SkinkGlue is licensed inder the standard Mozilla licenses, so it could be used by [...]