Conceptual Architecture of Mozilla Firefox 6
Total Page:16
File Type:pdf, Size:1020Kb
Conceptual Architecture of Mozilla Firefox 6 Presented by Fully Optimized eXperience Group Members: James Brereton – 06069736, [email protected] Gordon Krull – 06003108, [email protected] Rob Staalduinen – 06009513, [email protected] Katie Tanner – 06060472, [email protected] Prepared for CISC 322, Queen’s University at Kingston, Ontario, Canada October 24th, 2011 Table of Contents ABstract .........................................................................................................................…... 3 Introduction ........................................................................................................................3 Research Overview and Derivation Process .........................................................4 Conceptual Architecture of Firefox ...........................................................................4 XUL and XULRunner ...........................................................................................6 GecKo .........................................................................................................................7 Data Persistence ................................................................................................11 XPCOM ...................................................................................................................12 Display BacKend (GTK+ Adapter and LiBraries) .................................13 Sequence Diagrams ......................................................................................................13 Lessons Learned .............................................................................................................15 Conclusion .........................................................................................................................15 References ........................................................................................................................16 2 Abstract This report intends to demonstrate our findings for the Conceptual Architecture of Mozilla Firefox 6.0. This tasK was completed with the intentions of Being improved upon and adapted upon successfully determining the concrete architecture for this system. Throughout our research, we have discovered that Firefox taKes on a layered architecture with semi‐strict layering, as well as oBject oriented functionality. However, we have also discovered that specific suB‐ components, such as NecKo, taKe on unique architectures of their own, such as a pipe‐and–filter. Throughout this report, we will examine the architecture of Firefox 6.0 as a whole, as well as provide an individual analysis of each of the major suB‐systems, their specific architectures, and how these systems interact. We will also detail our derivation process, provide some examples of how this architecture would function, and explain the lessons we gathered from this process. Introduction Purpose of Report In this report we discuss our findings on the conceptual architecture of Firefox 6.0. This includes our research process and our methods for deriving our final conceptual architecture and the dependencies between suBsystems and components, as well as some examples data flow during common operations. What is Firefox? Firefox is a free, open source weB browser developed and managed by the Mozilla Corporation. It currently accounts for approximately 25% of worldwide usage share of weB Browsers as of SeptemBer 2011. It includes many advanced weB Browsing features such as taBBed browsing, spell checking, incremental find, live BooKmarKing, a download manager, private browsing, and support for adding extensions created by third party developers. It runs on various operating systems, including the big three (Windows, Mac OS X, and Linux), and is capaBle of running on multiple hardware platforms. A Brief History of Firefox Mozilla Firefox was created by Dave Hyatt and BlaKe Ross as an experimental Branch of the Mozilla project. Firefox 1.0 was released on NovemBer 9, 2004 with further versions being released suBsequently, generally on a 1‐year release cycle. Version 6.0 was released on August 16th, 2011. Most of the major architecture components have remained the same throughout the development since Firefox 2.0, 3 with changes and upgrades being implemented to suBsystems and components as development moves forward. ResearcH Overview/Derivation Process We began our research on the conceptual architecture of Firefox by studying the reference architecture for weB browsers provided in the paper “A Case Study in Architectural Analysis: The Evolution of the Modern WeB Browser” by Alan GrossKurth and Michael W. Godfrey. In addition to the reference architecture for weB browsers, we studied the conceptual architecture of Firefox that the authors provided. Although this depicted a much earlier version of Firefox it was still instrumental in forming a basis for our understanding of the suBsystems of Firefox and how they interact with one another. Using the information that we were aBle to extract from the paper as well as the architecture diagrams provided, we had a good starting point for our research into Firefox 6.0. From this point, we set out to do general research on Firefox itself. This gave us a lot of valuaBle information on Firefox’s development and functionality, the most interesting of which being that Firefox has recently transitioned to a rapid‐release schedule. Once we had a general idea of what suBsystems and dependencies to expect in the conceptual architecture, we then begun a more in‐depth analysis of the different components of the Firefox architecture using the information we were aBle to gather from both the paper and our general research as a Baseline. It was at this stage, upon close analysis and research of the different components, that we were aBle to begin mapping out the architecture. Our main sources of documentation and descriptions of the various suBsystems of Firefox were the Mozilla Developers NetworK (MDN) as well as the Mozilla WiKi. With this newfound knowledge, it began to become much clearer what dependencies existed within Firefox, and thus we were aBle to complete our conceptual architecture of Firefox. Conceptual ArcHitecture of Firefox As we Began the process of forming our conceptual architecture, we referred to the reference architecture for weB Browsers as presented in the research paper “A Case Study in Architectural Analysis: The Evolution of the Modern WeB Browser” By Alan GrossKurth and Michael W. Godfrey. We Began to conceptualize our idea for the architecture of Firefox 6 through the reading of all availaBle documentation on the different components and suBsystems, provided By Mozilla as well as other developers. Our findings on the architecture of Firefox consisted of a Virtual Machine Style Layered Architecture, with XPCOM serving as the crucial component 4 that allows the system to function as a whole. Our conceptual architecture for Firefox 6 is depicted on the following page. Figure 1: Conceptual ArcHitecture of Mozilla Firefox 6.0 While reading the documentation, we discovered that although in previous versions of Firefox Key suBsystems such as NecKo and SpiderMonKey were considered separate from Gecko, they are now considered components of the Gecko SuBsystem. While Gecko’s primary purpose remains to render and display WeBPages to the user through the User Interface, it now is considered to contain these suBsystems and therefore By using the reference architecture we define Gecko as not only the Browser Engine and Rendering engine, But the NetworKing, JavaScript Interpreter, and the XML Parser components as well. 5 The Layered Architecture of Firefox clearly indicates the dependencies and how FireFox functions. The topmost layer consists of the user interface, which depends upon the rest of the system to render the Browser. This layer serves as the main venue through which the user interacts with the Firefox system. The UI calls upon the second layer, which service the UI layer with rendering and data access. This layer contains Both the Gecko and Necko suBsystems, which are also implemented as a Virtual Machine layered architectural style with pipe and filter elements. Finally, the lowest layer is the Display Backend. The Display Backend provides proper GUI formatting information to Gecko so that pages can Be properly rendered on any platform according to that platform’s specifications. The nature of a layered architecture Benefits the system By allowing it great portaBility since the lowest layer provides platform‐specific rendering for the system. The system is also highly modifiaBle since there are many different components and each performs a specific tasK. Having presented our derived conceptual architecture for Firefox, we will now descriBe each component of the Firefox system as well as how the various components interact. XUL and XULRunner As previously mentioned, the topmost layer of Firefox is its user interface, which corresponds to the top layer of the reference architecture. XUL, XML UI Language, provides the basis for Firefox’s user interface. Rather than being hardwired into the application itself, the UI is loaded from a separate UI description written in XUL. XUL is essentially XML (extensiBle marKup language), but allows for HTML elements, including JavaScript, to be incorporated and has a specific definition for a few element types. Mozilla uses this to build cross‐platform applications such as weB browsers and mail clients. Proper UI descriptions must taKe into account various