Movin’ On

October 5th, 2007 by bienvenu

Just wanted to let everyone know that my last day at The Mozilla Corporation will be Oct. 12. I intend to stay involved with Thunderbird and to continue on as a module owner. I’ve enjoyed working at Mozilla a lot, and I wish Mozilla Co and the new Mail Co all the best.

- David

Recent Thunderbird Discussions

July 30th, 2007 by bienvenu

There has been a lot of discussion about the future of Thunderbird as a result of Mitchell’s blog post and Scott’s subsequent post. I hope that presenting some additional information might help focus the discussion.

Scott and I started work on Thunderbird in the spring of 2003. With the subsequent formation of the Mozilla Foundation that summer, Thunderbird become a more focused part of the project along with Firefox. Scott was one of the first three or four Mozilla Foundation employees; I was hired as a contractor for a couple months and came on full-time in January of 2004. We have been Team Thunderbird at the Mozilla Foundation and then Corporation, ever since.

Given this small team size, we would not have been able to ship Thunderbird without a tremendous amount of work by volunteers. For example, our themes and localizations are all done by volunteers. Here are some stats about our community:

Developer Community

  • 2 Full Time Mail developers (David and Scott)
  • ~ 12 active mail developer volunteers (including Seamonkey Mail contributors)
  • 4 Thunderbird front end peers & module owners
  • over 35 localizations done entirely by volunteers
  • 8 back end peers & module owners.
  • Over the last six months, 56% of the mail patches originated from community members
  • 93 different developers contributed at least one patch over that period.
  • Very active QA and Support Communities (bugzilla, MozillaZine, etc).

  • ~ 5 active QA volunteers who actively help triage and manage Thunderbird specific bugs in bugzilla
  • 2,500 Nightly Thunderbird Build QA Volunteers (very active posting feedback in the forums)
  • 40,000 daily Beta testers
  • Over 400 extensions hosted on add-ons
  • Some of the discussion comments have been along the lines of “Why doesn’t Thunderbird do X, Y, and Z?” so I thought it might be helpful to talk a little about how my time was spent during the 2.0 release cycle:

  • non-coding activities - 50%
  • bug fixing - 40%
  • new features - 10%
  • Non-coding activities include things like project planning, project management, code reviews, helping contributors, helping extension writers, and supporting users. Scott’s breakdown would probably look similar, except that he spends a lot more time on project & release management fun than I do, the lucky fellow!

    Given Thunderbird’s staffing level, I feel that it’s critical I allocate my time in such a way as to get the highest leverage for the project. My hope is that there’s a lot of leverage in helping contributors and extension writers, so I try to spend as much time as possible doing that. We work together with our QA volunteers and users to figure out which bugs to fix. For new features, we have to concentrate on things that have a relatively big bang for the buck, that we can do relatively quickly, and that leverage our existing infrastructure.

    Opinions always vary on how time should be allocated, but I have to balance a lot of competing needs. I’m interested to hear what other folks think.

    - David

    Patches for 2.0.0.5 landing

    June 27th, 2007 by bienvenu

    We’ve started landing patches for the next 2.0.0.x release of Thunderbird, as we get the patches approved by the 2.0.0.x driver team. This means that having people running the latest 1.8 nightly builds is very helpful for us, to make sure the fixes work, and there aren’t any regressions. You can find the latest 1.8/2.0.0.x builds here:

    ftp://ftp.mozilla.org/pub/mozilla.org/thunderbird/nightly/latest-mozilla1.8

    The Rumbling Edge should start tracking the bugs that are fixed in the 2.0.0.5 pre builds soon.

    Initial support for tabbed e-mail in today’s trunkbuild

    June 27th, 2007 by bienvenu

    I landed my patch for tabbed e-mail last night, so it’s in today’s nightly trunk build. There are lots of issues with it, but we decided to land it so that other people can improve it. (If you don’t use tabs, you won’t encounter the issues.) Shortly after I landed it, Scott figured out how to make the tabs look like they do in Firefox, which is a big improvement.

    A few known issues - the close button doesn’t work (though context click | close tab does work), strange things happen with messages open in a tab if you switch the 3-pane layout, and the context menu on tabs gets confused if the tab is not selected. But we should be able to fix the issues pretty quickly and add new capabilities. In particular, I’d like to add some prefs to make double click open messages&folders in a new tab instead of a new window.

    Tabbed 3-pane UI in TB

    May 26th, 2007 by bienvenu

    I’ve been spending some time prototyping what tabbed e-mail browsing might look like in Thunderbird. The work is going on in bug 218999 - I’ve attached a couple screen shots as well - one of a folder open in a tab, and one of a message .

    Currently a tab can be either an open folder, or a stand-alone message. When you switch between folder tabs, we restore the selected folder and message. If you select a message tab, we turn the 3-pane UI into a stand-alone message window, but just by hiding the folder and thread panes :-) Each tab has its own view and history context (i.e., back and forward are per-tab, as in the browser).

    As capabilities are added to the 3-pane UI, they should be able to be opened in tabs. For example, you should be able to open Lightning in a tab.

    Right now, I’m just using a generic tab widget. So there’s no close button on the tab (you have to use the tab context menu to close the tab), and tabs can’t be scrolled. It would be great if some xul wizard could adapt the tabbrowser.xml widget for use in TB. I tried early on, but ended up with centered tabs with no close button.

    People have asked for the ability to put any mail window in a tab in the 3-pane UI - e.g., a compose window, or an address book. I think that’s a fine ultimate goal, but beyond the scope of what I’m doing now.

    I’m quickly becoming addicted to these tabs - I open my “new messages” virtual folder in one tab, open an other tab for reading rss feeds, one for my bugs folder, and perhaps one for a particular message I want to go back to later. I find myself wishing the “has new” indicator would be shown on the tab if the tab is open on a folder with new messages. One nice thing about keeping the new messages virtual folder in a tab is that I can go read other folders without losing the read messages in my new messages folder, which I would if I switched away and back.

    If anyone is interested in helping out, please let me know!

    - David

    Milimail project

    May 14th, 2007 by bienvenu

    There’s an interesting Thunderbird project going on to add some enterprise features to Thunderbird. It’s called Milimail, and it’s backed by the French Ministry of Defence and British Telecom. See www.milimail.org for more info.

    Where appropriate, we hope to roll some of this work into the core Thunderbird.

    For example, they’ve just implemented triple wrapping. A triple wrapped message is one that has been signed, then encrypted, then signed again. While not quite as exciting as this Tripel, it’s still exciting. See bug 380624 for more info.

    fun with nsILocalFile

    May 4th, 2007 by bienvenu

    Heh, well my first post went out with the date my blog was set up, and not the date I submitted the post, because I edited the dummy post that was initially set up. So this is just a quick post to describe some of the fun we had replacing nsIFileSpec with nsIFile/nsILocalFile

    The single biggest gotcha with nsIFile is that if you open an output stream on a file, write to it, and close the stream, the file still thinks its file size is 0, on Windows, because nsLocalFileWin.cpp caches the file size and has no api for invalidating the cache. The workaround is to Clone the nsIFile, or create instance a new nsILocalFile, and InitWithFile(theOldFile), and use the cloned/new object. You can also call Exists(), which invalidates the cache, at least on Windows (not sure about Linux).

    There’s no way to create an input+output stream on a file, using the gecko classes. Surprisingly, there’s apparently no code in Firefox that needs to both read and write to the same file, except for the fastload cache, which has its own way of doing that. So I created an nsMsgFileStream class that implements nsIOutputStream, nsIInputStream, and nsISeekableStream. There are two methods in nsMsgUtils.h for this class:

    NS_MSG_BASE nsresult MsgGetFileStream(nsILocalFile *file, nsIOutputStream **fileStream);

    NS_MSG_BASE nsresult MsgReopenFileStream(nsILocalFile *file, nsIInputStream *fileStream);

    Once you have a stream like this, you can QI it to any particular interface. It’s just a wrapper around a PRFileDesc *, with no buffering or anything fancy. We mostly use this object to deal with local mail folders, e.g., reading and writing the x-mozilla-status lines, or updating the x-mozilla-keywords header.

    It doesn’t implement nsILineInputStream, because it’s almost as easy to use NS_ReadLine. The one drawback of NS_ReadLine is that it throws off the position of the stream, because it reads ahead. You can use the line buffer to calculate the real offset into the stream, e.g, http://lxr.mozilla.org/mozilla/source/mailnews/local/src/nsLocalMailFolder.cpp#3998

    If I made nsMsgFileStream implement nsILineInputStream, then it could fix Tell and Seek to adjust for the NS_ReadLine buffering, if needed.

    - David

    My first blog post

    October 9th, 2006 by bienvenu

    Welcome to my first post. I intend this blog to mostly about what’s going in Thunderbird, with occasional other stuff thrown in. Thanks to the folks who’ve been pestering me to blog for a year or so.

    Now that 2.0 is released, we’re working on cleaning up a lot of things on the trunk that we couldn’t change in 2.0, because of our semi-frozen interfaces. This wiki page describes the work we’re doing: http://wiki.mozilla.org/Thunderbird:Architecture_Cleanup

    I’ve spent the past few weeks getting rid of the remaining instances of nsFileSpec on the trunk. That’s finally done, except for fixing whatever regressed. Thx to the brave trunk users who filed bugs, and special thx to Mark Banner for his helping debugging the linux-specific ones.

    I’m also working on getting Spotlight integration and OSX Addressbook integration working on the trunk.

    An other area of focus is fixing regressions in 2.0 that we want to fix before we offer 2.0 as a major upgrade from 1.5.0.x. The tracking bug is here: https://bugzilla.mozilla.org/show_bug.cgi?id=378635 - if you know of any regressions in 2.0 that you think we should fix before offering 2.0.0.x as a major upgrade, please let me or mscott know.

    That’s enough for now. I’ll try to do this once a week or so.

    http://www.mozilla.com/en-US/thunderbird/

    - David