Want to help us develop Camino? Come right in! Whether you're a student or a guru, we want your assistance. You can get in touch with the Camino developer community to get started or read below for a quick overview.
(Don't know how to code at all? There are still <a href="/development/">other ways you can contribute</a>!)
- 1 Goals
- 2 Camino Development Cycle and Conventions
- 3 Conventions
- 4 Tools We Use: Bugzilla
- 5 CVS
- 6 CVS Access — Check-out and Check-in
- 7 CVS Client
- 8 Tinderbox
- 9 Gecko
- 10 Cocoa, Objective-C, and Xcode
- 11 Developer Community and Support
- 12 Licenses and Legal Mumbo-Jumbo
Camino is meant to be a simple browser, developed within the following parameters:
- Mac OS X Native UI;
- Gecko HTML rendering engine (the engine used by Mozilla and Firefox);
- "Well-behaved" Mac OS X application, taking advantage of the capabilities and features of the operating system and available frameworks, and making an effort to comply with <a href="http://developer.apple.com/documentation/UserExperience/Conceptual/OSXHIGuidelines/index.html">Apple's Human Interface Guidelines</a>;
To keep Camino easy to develop, as useful a browser, and as "well-behaved" a Mac OS X application as possible, we:
- Use the Cocoa frameworks and Apple's InterfaceBuilder to develop the user interface;
- Leverage the embeddable Gecko Cocoa view provided by CHBrowserView, for the rendering engine;
- Keep the project buildable and debuggable from <a href="#cocoa">Xcode</a>.
Camino Development Cycle and Conventions
The Camino development cycle describes in what order development stages have to be completed. The development cycle is designed to facilitate communication within the developer community and, through code review, help ensure that code is not changed carelessly.
- Choose a bug or feature to work on. (If you're not sure what bugs to work on, try searching Bugzilla for unassigned bugs.)
- Make sure a bug has been filed in <a href="#bugzilla">Bugzilla</a> for the bug you've chosen.
- Let the community know you're working on the bug by assigning the bug to yourself in Bugzilla and contacting the IRC channel or the mailing list.
- Develop your patch. When you think your patch is complete, attach it to the corresponding bug report.
- Request two (2) reviews by setting the review flag and entering the reviewers' email addresses. You can request a review when first uploading the patch, or later by going back and clicking the "Edit" link corresponding to your patch in the "Actions" column of the "Attachments" table of the bug. Please note that it is considered polite to ask first on the #camino IRC channel at irc.mozilla.org whether the people from whom you intend to request reviews have time for the review.
- When your patch has been reviewed, make sure you incorporate any comments made by the reviewers.
- When both reviewers are positive about the patch (the review flag will be set to "+") you will have to ask for a super review (the same way you ask for a basic review, but fewer people are authorized for super review).
- When the super review passes, the patch will get checked-in to the source code tree in <a href="#cvs">CVS</a> as soon as possible.
Please Note: You will have a much easier time getting your code past review if you are familiar with the <a href="http://www.mozilla.org/hacking/#coding-practices">Mozilla coding practices</a>.
Whenever you begin work on something that’s more than a day’s work, we strongly recommend that you let people know about it. Post your plans to the Camino mailing list or let people on the #camino IRC channel (on irc.mozilla.org) know what you are going to do.
If you’re working on fixing a bug, make a note of it in the bug report in Bugzilla to track your progress and to catch the attention of other developers. If no bug exists already, then file a new bug and assign it to yourself. When adding features, consider adding an enhancement request for the feature in Bugzilla and talking to others about it before implementing it.
Publicizing your efforts lets others know what you’re working on so they can coordinate their work with yours, offer help, and avoid duplicating your work. It opens your work up for peer review and provides an archive so the same issues don’t need to be rehashed the next time the question comes up. Also, if someone else is working on the same thing, they can let you know and save you a lot of work.
- <a href="http://www.mozilla.org/hacking/#project-organization">The Mozilla Project's Organizational Structure</a>
- <a href="http://www.mozilla.org/hacking/#coding-practices">Mozilla coding practices</a>
Tools We Use: Bugzilla
<a href="http://www.mozilla.org/bugs/">Bugzilla</a> is a database for bugs (and feature requests). It lets people report bugs and assigns these bugs to the appropriate developers. Developers can use Bugzilla to keep a to-do list as well as to prioritize, schedule and track dependencies.
Note: not all "bugs" are bugs! Feature requests (also called Requests For Enhancement — RFE for short) are tracked as Bugzilla entries with the "severity" field set to "enhancement." People often say "bug" when they mean "item in Bugzilla," so RFEs often wind up being called bugs.
Enter the tasks you plan to work on as bugs or enhancement requests: Bugzilla will help you track them and allow others to see what you plan to work on. If people can see your flight plan, they can avoid duplicating your work and can possibly help out or offer feedback.
- <a href="http://www.mozilla.org/quality/bug-writing-guidelines.html">How to file a bug in Bugzilla</a>
- <a href="/support/bugzilla/">Camino Bugzilla FAQ</a>
- <a href="http://www.mozilla.org/bugs/">What is Bugzilla?</a>
<a href="http://www.mozilla.org/cvs.html">CVS</a> maintains a history of changes made to files in a source tree by tracking the differences between the state of each file before and after each update. It stamps each change with the time it was made and the username of the person who made it. Usually, the person also provides a brief comment describing why they made the change.
Given that information, CVS can answer questions like:
- Who made a given change?
- When did they make it?
- Why did they make it?
- What other changes did they make?
If you're very unfamiliar with CVS, you may find an <a href="http://cvsbook.red-bean.com/cvsbook.html">introduction to CVS</a> useful.
CVS Access — Check-out and Check-in
Anybody can download a copy of the Camino source from the Mozilla Project's central CVS repository to look at or build on their own computer. You can also browse the code without downloading it, using <a href="http://bonsai.mozilla.org/rview.cgi?dir=mozilla/camino&cvsroot=/cvsroot&module=default">Bonsai CVS</a>. However, only those developers that are familiar enough with the Mozilla and Camino code can get an account to submit changes to the repository themselves. This helps ensure that check-ins do not introduce new bugs. If you do not have an account, someone else will check your code in after it has been approved. The approval process is explained in our <a href="#DevelopmentCycle">development cycle</a>.
To get your copy of the Camino source code from the repository, you will need a CVS client. While a number of <a href="http://www.mozilla.org/catalog/development/tools/cvs-macosx.html">graphical CVS clients</a> are available for Mac OS X, the command-line client (automatically included when you install Xcode) is recommended for pulling Camino source from the repository.
Each Mozilla project (including Camino) is constantly being rebuilt from the latest source to ensure that there is always a working version to test, and to catch any problems that would block the build before they get too far out of hand.
<a href="http://www.mozilla.org/tinderbox.html">Tinderbox</a> is a detective tool that allows you to keep track of the latest changes to the source code and how they affect the status of the various builds (for each project and each platform). Builds in progress are shown yellow; successful builds are green; unsuccessful ("broken") builds are red.
Camino builds are currently run on a G3 Mac ("pawn") and a G4 Mac ("boxset"). Before doing a CVS checkout, you'll want to visit<a href="http://tinderbox.mozilla.org/Camino/"> Camino's Tinderbox</a> to make sure the code you check out will build successfully on your platform. If the most recent build is green, you're set to go; if it's yellow, you may wish to wait until that build completes — until then, you won't know whether or not it will build properly; if it's red, you'll want to wait until the most recent build is green.
Tinderbox also shows you who checked in which patches; what platforms have built successfully; what platforms are broken and exactly how they are broken (the build logs); and the state of the files that made up the build ("cvsblame"). You can use this information to figure out whose check-ins broke the build — so you can make sure they fix it.
The page layout and rendering engine that Camino shares with Mozilla and Firefox is commonly known as "Gecko." Gecko is already (arguably) the most complete and standards-compliant rendering engine available — and it is constantly undergoing further improvement. Gecko is embedded into Camino using an element called CHBrowserView that permits it to be used within fully native Mac OS X applications. If you want to work on the way webpages appear within Camino, the following resources will help you familiarize yourself with Gecko:
- <a href="http://www.mozilla.org/newlayout/">Mozilla Layout Engine</a>
- <a href="http://www.mozilla.org/newlayout/doc/">Technical Documentation</a>
Cocoa, Objective-C, and Xcode
Camino embeds the cross-platform "Gecko" rendering engine into a native Mac OS X application. The Mac OS X part of Camino is developed using the "Cocoa" application environment, a rich set of object-oriented frameworks for developing native Mac applications.
While Cocoa can also be accessed using Java, we use the Objective-C language (an extension of C), which allows better integration with both the Cocoa frameworks and the Gecko engine. Please see below for websites and books that provide an introduction to the Cocoa frameworks and the Objective-C language.
CHBrowserView, the class that incorporates the Gecko engine (developed in C++) and enables it to be smoothly embedded within an Objective-C Cocoa application like Camino, is developed using Objective-C++ (a variant of Objective-C that is compatible with C++). If you have used both C++ and Objective-C, Objective-C++ should look familiar.
All Camino development is done within Apple's Xcode development environment, which is provided free with recent versions of Mac OS X and is also available as a <a href="http://developer.apple.com/tools/download/">free download from Apple</a>. (Xcode requires Mac OS X v10.3.x or above).
Keep in mind that Mozilla code style conventions dictate no real tabs, but two spaces per virtual tab.
Sites with more information:
- <a href="http://www.cocoadev.com/">Cocodev</a>
- <a href="http://cocoadevcentral.com/">Cocoadevcentral</a>
- <a href="http://www.macdevcenter.com/">MacDevCenter</a>
- <a href="http://www.apple.com/developer/"> Apple Developer</a>
Books you might want to read:
- <a href="http://www.amazon.com/exec/obidos/ASIN/0596004702/softkidshomep-20">Learn Unix for Mac OS X</a>
- <a href="http://www.amazon.com/exec/obidos/ASIN/0201726831/qid=1030560928/sr=2-1/ref=sr_2_1/102-1609129-8096169">Cocoa Programming for OS X </a>
Developer Community and Support
If you have questions about developing Camino, if you're interested in contributing but don't know where to start, or if you're stuck on a knotty development problem with Camino, we recommend contacting the community by stopping by the #camino IRC channel or getting in touch with the <a href="http://mozdev.org/mailman/listinfo/camino">mailing list</a>.
Licenses and Legal Mumbo-Jumbo
At the moment, parts of the Mozilla and Camino source are available under either the <a href="http://www.mozilla.org/MPL/NPL-1.1.html">Netscape Public License</a> (NPL) or the <a href="http://www.mozilla.org/MPL/MPL-1.1.html">Mozilla Public License</a> (MPL), often in combination with the <a href="http://www.gnu.org/licenses/licenses.html#GPL">GNU General Public License</a> (GPL) and/or the <a href="http://www.gnu.org/licenses/licenses.html#LGPL">GNU Lesser General Public License</a> (LGPL), or both.
Essentially, if you wish to download the source and build a modified or unmodified version for your personal use, you are free to do so. If you wish to contribute code to the project, you are encouraged to do so, but you must agree to license the code you contribute in compliance with Mozilla's <a href="http://www.mozilla.org/MPL/license-policy.html">licensing policy</a>.
Licensing for redistribution or for using parts of the code in other projects is a bit more complex because the code is not all available under a single license. If you intend to redistribute Camino source, distribute Camino binaries other than those created by the Mozilla Foundation, or incorporate the source into another application that you plan to distribute, the <a href="http://www.mozilla.org/MPL/license-policy.html">licensing policy</a> is a good place to start, and you will need to familiarize yourself with the text of the licenses. The Camino community may be able to help with some licensing questions.
Mozilla.org is working towards having all the code in the tree licensed under a MPL/LGPL/GPL tri-license; for more information, see the <a href="http://www.mozilla.org/MPL/relicensing-faq.html">Relicensing FAQ</a>.
Latest Nightly Build</a>
- <a href="/development/" accesskey="I">Contributor Introduction</a>
- <a href="/development/programming/" id="current" accesskey="P">Programming</a>
- <a href="http://wiki.caminobrowser.org/Development:Building" accesskey="B">Build Instructions</a>
- <a href="/development/roadmap/" accesskey="R">Roadmap</a>
- <a href="/development/structure/" accesskey="T">Team Structure</a>
- <a href="https://bugzilla.mozilla.org/createaccount.cgi">Register at Bugzilla</a>
- <a href="https://bugzilla.mozilla.org/enter_bug.cgi?format=guided&product=Camino">Report a Camino bug</a>
- <a href="https://bugzilla.mozilla.org/enter_bug.cgi?format=guided&product=Core">Report a Mozilla bug</a>
- <a href="http://www.mozilla.org/quality/bug-writing-guidelines.html">Bug writing guidelines</a>
- <a href="https://bugzilla.mozilla.org/query.cgi">Search for bugs</a>
- <a href="https://bugzilla.mozilla.org/buglist.cgi?product=Camino&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&changedin=14&chfieldto=Now">Recent active bugs</a>
- <a href="https://bugzilla.mozilla.org/buglist.cgi?product=Camino&bug_status=UNCONFIRMED">Unconfirmed bugs</a>
- <a href="http://www.mozilla.org/hacking/">Mozilla hacking documents</a>
- <a href="http://bonsai.mozilla.org/cvsquery.cgi?treeid=default&module=Camino&branch=&branchtype=match&dir=%2Fmozilla%2Fcamino&file=&filetype=match&who=&whotype=match&hours=2&date=week&mindate=&maxdate=&cvsroot=%2Fcvsroot">Last week's Camino check-ins</a>
- <a href="http://bonsaibugs.org/pyblosxom.cgi/camino">Latest Mozilla tree checkins</a>
- <a href="http://fink.sourceforge.net/index.php">Fink Project</a>
- <a href="http://developer.apple.com/cocoa/">Apple Cocoa</a>
- <a href="http://www.amazon.com/exec/obidos/ASIN/0596004702/">Learn Unix for Mac OS X</a>
- <a href="http://www.amazon.com/exec/obidos/tg/detail/-/0321213149/qid=1111520306/sr=1-2/ref=sr_1_2/104-8082258-4999151?v=glance&s=books">Cocoa Programming for Mac OS X</a>