Thunderbird:Backend Hacking Guide For Newbies
Back to ...
- 1 Back-end Programming for Thunderbird (draft)
- 1.1 Tool Arsenal for Mozilla Development
- 1.2 Development Process
- 1.3 Getting the Source
- 1.4 Setting up the Development Environment
- 1.5 Building the Code
- 1.6 Mozilla Framework Libraries used by Thunderbird
- 1.7 Best Practices
- 1.8 Sample Projects
- 1.9 Major Thunderbird Entities
Back-end Programming for Thunderbird (draft)
So, you love C/C++ and want to contribute to Thunderbird, but you are new to Mozilla development in general, and don't know what frameworks, technologies, tools involved in it. You are at the right place, this page is prepared for you.
First, a little bit background. Thunderbird is a cross-platform mail application developed on top of Mozilla framework. It's an open-source application used by millions, and evolving around its contributors. Mozilla framework is the central toolkit, and C/C++ is the core language for back-end programming. Tier 1 platforms for Thunderbird are Windows, Linux and Mac OS X (both PPC and Intel). So, when you develop code for Thunderbird, you have the obligation to make sure that your code works on all of these platforms, unless it's a platform specific patch.
Mozilla development process is large scale and highly distributed. Tools play an essential role to coordinate this collective effort. Every hacker MUST get familiar with these tools to involve.
Tool Arsenal for Mozilla Development
- Compiler editor settings
If you wish to build the palm sync extension, you will need to install the Palm CDK (requires free registration). And BUILD_PALMSYNC=1 and PALM_CDK_DIR=c:/PALMCDK403 env vars. (do not use PALM CDK v6) Building Palm OS Conduits with CDK 4.0.3 and VS 2005 may also have useful info.
- MSVC (Windows)
- gdb (Linux, Mac OS X)
Note: Bugzilla is where people who don't even build / debug can contribute, so this should be at the top of the list. nth10sd 11:13, 17 April 2008 (PDT)
In Mozilla development process 'bug' is a broader term than its conventional meaning which is software defect. A bug means anything related to the product and the development process including feature requests, performance improvements and even process improvements. You can file a bug about almost anything that you think that would contribute to the success of the project.
A good way to start understanding the Mozilla development process is to join others during a bugday and get familiar with bug triaging. You can find more on bugdays and bug triaging at the following links:
Note to author: Add a starting to bug fixing section. Mention best practices, keywords, how to search etc.. Look IRC transcripts dated Apr 30th. Things to talk about; what are keywords how to use them, what are products and components, etc...
Source Control Management
- CVS <link>
- Bonsai <link>
- Thunderbird Tinderbox
- Tinderstatus for watching Tinderbox status from SeaMonkey or Firefox.
- How to set up a tinderbox (e.g. for standalone/test use)
Review, Super review <link>
Getting the Source
Setting up the Development Environment
Note for Windows programmers: If you develop code mostly on Windows and looking for the same Visual Studio comfort ....
Building the Code
Folder hierarchy and meaning (public, src, main folders -- mailnews, mail, xpcom, etc..)
Mozilla Framework Libraries used by Thunderbird
What is PL? How it is different than platform's C runtime, Secure C functions, etc...
NSPR is a cross-platform library to provide Mozilla application with OS-agnostic facilities such as threading, I/O operations, networking, logging and more. It is crucial for a Mozilla C/C++ hacker to be familiar with this library in order to work with Thunderbird backend.
Although NSPR documentation is not up-to-date, still it is a very good starting point before you go and check the source code. You can find NSPR documentation at the following links.
PSM / NSS
Personal Security Manager (PSM) consists of a set of libraries that perform cryptographic operations on behalf of a client application. These operations include setting up an SSL connection, object signing and signature verification, certificate management (including issuance and revocation), and other common PKI functions.
NSS provides a complete open-source implementation of the crypto libraries used by AOL, Red Hat, Sun, and other companies in a variety of products.
XPCOM is Mozilla's simplified cross-platform component object model. IDL firebot: uuid, <link>
- Using nsCOMPtr
- Reference Management
- Creating XPCOM Components
- XPCOM string guide
- XPCOM Reference
The mozilla networking library, Necko, is an extensible, scriptable API for client-side networking tasks built on XPCOM and NSPR. It provides:
- generic and extensible framework for fetching URLs
- async framework for pumping data to consumers (i.e., non-blocking i/o)
- generic cache service (LRU data store for mozilla)
- async DNS resolution
- implementations of common protocols (http, ftp, file, imap, etc.)
More info at:
- Necko Home Page
- Source Code
- Necko Interfaces
- Embedding Network Library
- Creating a New Protocol Handler
- Newsgroup - news://news.mozilla.org/netscape.public.mozilla.netlib
- IRC - irc://irc.mozilla.org/#mozilla
What is Gecko
What is XUL
Understanding threading, Proxy etc.. !!!
... + <link>
Unit Testing (TUnit, cppUnit etc..)
o Locklint o Firebug o
Common Idioms, and Patterns
.... Event sinks, bounded buffers, monitors etc.. .... PR_SUCESS, PR_FAIL ....
... Instrumentation, optimization, performance etc...
- Sample project to learn how to patch and how to submit a patch
- Using NSPR in your applications
MSVC project XCODE project SlickeEdit project?? Eclipse??
- XPCOM: Developing an XP component and running it in a standalone application
MSVC project XCODE project SlickeEdit project?? Eclipse??