Fizzilla (or, for the boring, "Mozilla for Mac OS X")
Top News Items
- 9/23/02
- CHBrowserView is now back in business. It builds, runs, and loads webpages
Quick Links:
- FizzillaCFM -- fully Carbon, mac back-end, CFM based
- FizzillaMach -- mac Carbon front-end, unix back-end, Mach-o based
- Camino -- Cocoa-native web browser that embeds Gecko through CHBrowserView
- CHBrowserView -- embeddable Cocoa view that wraps Gecko
- Debugging FizzillaMach -- using ProjectBuilder to debug
Misc hints:
- Help getting sendmail working on OS X (for tinderbox)
Latest Builds:
- Mozilla
trunk daily builds (OS X bits will be of the form
mozilla-macosX-trunk.smi.bin
)
What is it?
Apple shipped Mac OS X, a replacement to Mac OS based on top of Mach3 and BSD but with the traditional Macintosh look and feel. In order to allow developers to quickly port their existing Mac OS-based applications to Mac OS X, Apple has created a portability layer named Carbon. Carbon takes the nearly 9000 Mac OS APIs, trims the dead weight, adds some new stuff, and offers the remaining 6000 APIs for use on top of Mac OS X. All developers need to do is tweak their existing Mac OS code to fit the new Carbon API and their apps will run in a separate process, taking full advantage of Mac OS X's memory protection and pre-emptiveness.
History
Around May, 1999 (Mozilla milestone 5, or M5) we made those modifcations to Mozilla and created a single binary that ran on both Mac OS 8.5 and Mac OS X. The resulting app, code named Fizzilla, made its public debut onstage at the Mac OS X Session at Apple's WWDC '99. People liked it.
In the time between May and December, 1999, Apple did a significant amount of profiling work on Mac OS X using Fizzilla as a test application. Their findings set us in a new direction which we believe will yield the best possible solution for many of the problems which have traditonally plagued our Mac OS products.
Instead of relying fully on Carbon for the entire app, Apple suggested a hybrid approach. For the front-end and drawing code, we would use the same Mac OS code on top of Carbon that the Mac OS 8/9 product uses. However, on the backend, we could leverage the fact that Mac OS X is BSD Unix under the hood and use our Unix codebase for threading and networking. While this means that we'd no longer have a single, "SuperFat" binary that runs on all Mac OS platforms, it would be much faster than its Mac OS counterpart. Finally, because the resulting app would be mach-o (not CFM), it would allow us to take advantage of the threading libraries present in BSD as well as Quartz, neither of which are available through the Carbon APIs.
Since we're building the Unix code in addition to Carbon code, we would also have to modify our build system. On Mac OS X, this would require using gmake, just like our linux client. While it pains us to give up the IDE, sharing as much as we can with the unix build system will reduce the likelihood that Fizzilla will bitrot and not be able to build anymore.
Around April, 2000 (M12), Pavlov landed most of the work required to get this new approach up and running and laying out HTML. The problem was that the process was just too different, and due to the state of gcc on OS X at the time, very difficult to build. The code bitrotted, and the project stagnated.
A few months later, Patrick Beard picked the project up off the floor and got a build off M17 that many people have used. This build was a CFM, fully Carbon build as per the original idea. In August 2001, Netscape took a branch of mozilla0.9.2 and shipped Netscape 6.1 Preview for Mac OS X based off the CFM build. It became a real shipping product with Netscape 6.2 (mozilla 0.9.4 branch).
Where Are We Now?
We now have many paths:
- FizzillaCFM -- fully Carbon, mac back-end, CFM based
- FizzillaMach -- mac Carbon front-end, unix back-end, Mach-o based
- Cocoazilla -- use Gecko from within the Cocoa framework
- ChimChim (now Camino) -- a Cocoa native UI that embeds Gecko through Cocoazilla
Each path has its own build instructions and its own set of flaws and foibles and hence deserves its own page. The wonderful thing about open source is that both can get the attention they deserve.
The big question, however, is "what is Netscape going to do post Netscape6.2?" Even though we like the idea of FizzillaMach for the future, the tools just aren't there yet. The benefits of being able to leverage the existing OS 9 build system and tools for development are too great given the small amount of time we have to work on this on the side. Remember, Netscape's primary mission right now is to ship Netscape6 for OS 9 and we cannot do anything to jeopardize that plan. So where you will probably see the majority of the work is with FizzillaCFM.
We are not abandoning FizzillaMach by any stretch of the imagination. Now is just not the time for it to shine. We have done some preliminary tests and the Mach-o build is about 10-15% faster than the corresponding CFM build. That's promising news!
I've also got an update on our Cocoa story. Mac OS X 10.1 gave us an objective-c++ compiler to supplement the existing mach-o build. I still assert that nobody in their right mind would write in objective-c, but writing in obj-C++ isn't quite so bad. As a result, I've recently begun an effort to rewrite our Widget implementation with Cocoa instead of Carbon using obj-c++. Currently, it limps enough to surf webpages. I have yet to touch GFX.
The main goal of the Cocoa effort is to provide something that can be embedded using ProjectBuilder and InterfaceBuilder. By providing a NSBrowserView, application developers can embed mozilla directly into their applications or, if they choose, write a native UI wrapper around it and make their own web browser. We are doing this very thing with the Chim Chim project.
Special Thanks
Many thanks to the following people at Apple for helping out: Eoin Norris, Dave Evans, Curt Rothert, John Signa, Christine O'Sullivan, John Chang, Skip Levins, and Gramps. Of course, many thanks to the Mac Mozilla community.
Written by Mike Pinkerton (pinkerton@netscape.com)