Slashdot Mirror


How Maintainable Is the Firefox Codebase?

An anonymous reader writes "A report released this morning looks at the maintainability level of the Firefox codebase through five measures of architectural complexity. It finds that 11% of files in Firefox are highly interconnected, a value that went up significantly following version 3.0 and that making a change to a randomly selected file can, on average, directly impact eight files and indirectly impact over 1,400 files. All the data is made available and the report comes with an interactive Web-based exploratory tool." The complexity exploration tool is pretty neat.

29 of 127 comments (clear)

  1. Does this guy know what Firefox is? by xxxJonBoyxxx · · Score: 4, Funny

    >> A number of modules, namely, accessible, browser and security, frequently appear among the most complex modules. Further investigation may be helpful in identifying why that is the case.

    Does this guy know what Firefox is?

    1. Re:Does this guy know what Firefox is? by CrimsonKnight13 · · Score: 2

      Maybe he's referring to the Mozilla codebase as a whole rather than just Firefox in itself?

      --
      Libera te ex Inferis!
    2. Re:Does this guy know what Firefox is? by Anonymous Coward · · Score: 2, Funny

      A virtual machine running an operating system that by accident happens to have a (rather mediocre) browser? Just like Chrome?

      All that was missing was the relabeling. I guess that's done with "FirefoxOS" and "ChromeOS". ;)

      Now all we need, is to port Linux to it. ... Oh wait!

    3. Re:Does this guy know what Firefox is? by game+kid · · Score: 2

      What is a Firefox? A miserable little pile of sources.

      But enough code... Have at you!

      --
      You can hold down the "B" button for continuous firing.
    4. Re:Does this guy know what Firefox is? by UltraZelda64 · · Score: 2

      What is a Firefox? A miserable little pile of sources.

      Really? I was under the impression that, traditionally, a Firefox was a miserable little pile of memory leaks. Although these days, that doesn't quite seem to be the case as much as it used to be.

  2. So? by ShanghaiBill · · Score: 5, Insightful

    It finds that 11% of files in Firefox are highly interconnected

    Figures like this would be more useful if they were put in context. What is a "normal" level for connectedness? What is the level for the Linux kernel, or for GCC? Compared to other similar sized projects, is 11% good or bad?

    1. Re:So? by hedwards · · Score: 4, Insightful

      Normal probably isn't so useful here, but it would give some context. 11% of files being highly interconnected could be a sign of incompetence on the part of the developers, or it could be a sign that they're engaged in sound design by splitting off commonly used methods into their own files and treating them as libraries.

      I'd suspect that the latter is the case here.

    2. Re:So? by Joce640k · · Score: 2

      It finds that 11% of files in Firefox are highly interconnected

      It means 89% aren't...which sounds much nicer.

      --
      No sig today...
    3. Re:So? by steelfood · · Score: 3, Informative

      It's crucial to know the distribution of that 11%. If they were all located in one area, it might be as you say, But if the 11% was comprised of a few files in each major module, then that'd be bad.

      You want the bulk of your program doing the actual work to look like a tree. You don't want the bulk of your program to look like a mesh (graph). This is especially true of your core components.

      --
      "If a nation expects to be ignorant and free in a state of civilization, it expects what never was and never will be."
    4. Re:So? by Anonymous Coward · · Score: 3, Insightful

      Not only that. The number is entirely meaningless, if we don't know *how* they are interconnected.

      If they are interconnected through a well-defined and stable interface, they can be connected as much as they want... it doesn't matter!

      What counts is the *modularity*! How much can you treat everything as independent modules? How much can you change the *implementation* without causing trouble.

      Because if they are cleanly separated that way, they are no different from being completely separate projects or programs.

      It's when things become "frameworks" that all the alarm bells go off.

    5. Re:So? by ArsonSmith · · Score: 2

      So, Nearly 90% of the Firefox code is of high quality and very maintainable.

      --
      Paying taxes to buy civilization is like paying a hooker to buy love.
  3. Got a trojan warning by dasapfe · · Score: 5, Informative
  4. Re:Fork by hedwards · · Score: 4, Insightful

    You know that you don't have to load things in tabs if you don't want to, right? And I highly doubt that you're going to have any meaningful performance improvements by loading up different windows. Plugins are there for every browser and the worst offenders tend to be things like Flash which aren't always easily avoided. Extentions themselves aren't usually a problem if you don't install badly behaving ones. And many of them do actually help out with performance, noscript anybody?

  5. counting files today by Aighearach · · Score: 2

    and tomorrow we'll count the lines of code and spew more meh

  6. I'm interested in seeing analysis of WebKit/Blink by 0x000000 · · Score: 4, Interesting

    I am wondering how this stacks up to a project like WebKit/Blink, as well as seeing that project against the original KHTML. Sure it is a renderer/HTML layout/JavaScript engine only, and won't contain the browser chrome like Firefox, but I think it would be interesting to look at.

    Many people have also suggested that WebKit is easier to embed into various different environments (more so than Gecko) and that it has been able to evolve faster mainly due to the code base being cleaner, and I wonder if this holds true when looking at it from a complexity standpoint, or is it more complex but simply laid out better and in a way that is easier to understand?

    --
    cat /dev/null > .signature
  7. LibXUL on Win32 approaching 4GB memory limit by revealingheart · · Score: 5, Informative

    According to recent comments (continued on the next day's thread), the win32 compiler that Mozilla use is approaching the 4GB limit, after which LibXUL (which Firefox depends upon) will no longer compile.

    It's currently at 3.5GB, and at the current rate, will reach the limit in approximately 6 months: Chart of memory usage of LibXUL during last 90 days

    While I think that Servo will produce a more decentralised design than Gecko and XUL, the memory limit will be reached well before that. With Windows XP support ending next year, Mozilla should consider migrating to x64 as soon as reasonably possible, keeping x32, but focusing on stripping large and extraneous code above new features.

    1. Re:LibXUL on Win32 approaching 4GB memory limit by InvisiBill · · Score: 2

      Reminds me of http://developers.slashdot.org/story/11/12/14/1725205/firefox-too-big-to-link-on-32-bit-windows... As one commenter in that thread asked, haven't they switched to x64 compilers yet? (Apparently there are issues getting the x86 version to compile properly on x64.)

    2. Re:LibXUL on Win32 approaching 4GB memory limit by BitZtream · · Score: 2

      Switching a few command line options to the compiler would completely resolve the issue. The downside is that it'll take longer to compile.

      Realistically though, if your hitting those limits, the compiler isn't the problem, the code is.

      Bloat much?

      --
      Persistent Volume manager for Kubernetes - https://github.com/dwimsey/openshift-pvmanager
    3. Re:LibXUL on Win32 approaching 4GB memory limit by TheDarkMaster · · Score: 2

      I think something is seriously wrong when a program becomes too large to be compiled.

      --
      Religion: The greatest weapon of mass destruction of all time
    4. Re:LibXUL on Win32 approaching 4GB memory limit by HoserHead · · Score: 5, Informative

      I'm a Firefox developer.

      This is slightly inaccurate. We aren't running out of memory to link Firefox, we're running out of memory to run Profile-Guided Optimization (PGO) on Firefox.

      PGO looks at what is actually executed during a given workload and optimizes based on that. It can be a pretty big win — 30% in some workloads —so we work pretty hard to keep it going.

      Unfortunately, PGO needs to have not only all the code, but all the intermediate representations and other metadata about the code in memory at one time. (That's why we're running out of memory.)

      Unfortunately, MSVC doesn't support producing a 32-bit binary using their 64-bit compiler.

      (FWIW, Chrome has *always* been too big to use PGO.)

    5. Re:LibXUL on Win32 approaching 4GB memory limit by coolsnowmen · · Score: 2

      It has to do with the compiler optimizations that profile code more than it has to do with code bloat.

  8. Um, you forgot to go AC when you trolled. by Gordo_1 · · Score: 3, Informative

    Really? The version number thing again? Hasn't that been played out yet? Incidentally, 3.0 is not even close to when they moved to a rapid release cycle.

    1. Re:Um, you forgot to go AC when you trolled. by NotBorg · · Score: 3, Insightful

      Hasn't that been played out yet?

      Nope. Trolls echo forever.

      --
      I want this account deleted.
  9. Lots of pretty numbers... by DrStrangluv · · Score: 3, Insightful

    ... that have no meaning at all.

    Impacting 8 files on average would be horrible... for a project with 8 files. But how many is that relative to the size of Firefox?

    11% of files in Firefox are highly interconnected... but how does that compare to other projects of similar scope?

    The one value in that summary that had any meaning at all was the comment that the percentage of interconnected files "went up significantly following version 3.0". That at least has some relative measure we can use as a base.

    1. Re:Lots of pretty numbers... by wonkey_monkey · · Score: 2

      I'm also wondering what "impact" means here. "Indirectly impact" doubly so.

      --
      systemd is Roko's Basilisk.
    2. Re:Lots of pretty numbers... by ArsonSmith · · Score: 3, Funny

      I'm not an expert and of course wouldn't read the TFA but from reading the headline and a good part of the summary, I've deduced that "impact"="bad" and "Indirectly impact"="scary bad".

      Hope that helps.

      --
      Paying taxes to buy civilization is like paying a hooker to buy love.
  10. Re:No Script sucks because the net sucks by liamevo · · Score: 2

    Don't blame us, blame the marketers and SEO people.

  11. The code base was not designed for concurrency by Animats · · Score: 4, Informative

    It's a real problem. The Firefox dev team gave up on running add-ons in a separate process (the "electrolysis" project) because the code base was too single-thread oriented. Remember, some of the code dates back to Netscape. There's talk of reviving that project now, but it's mostly talk and meetings.)

    Refitting concurrency tends to be very hard and the result tends to be ugly. You get something like Windows 3.x or MacOS 6/7, where easy things are complicated for the wrong reasons.

    1. Re:The code base was not designed for concurrency by bill_mcgonigle · · Score: 2

      There are clearly people working on Mozilla who 'get it', but the project management seems adverse to tackling anything long-term or difficult. They also like to officially deny that real problems exist. Just as a random sample of tech geeks, how long were people here bitching about Firefox memory usage while we were fed a line of excuses. I recall reading the blog of the lone dev who started what came to be known as the Memshrink project, which, when it was done, management loved to tout, but before that "didn't matter".

      The bz on multithreading the browser has been open for, what, 12 years? As of 2011, it wasn't a problem anymore. "ooh, mobile, new shiny!"

      This is one area where Chrome runs circles around Firefox. Their tech people get to work on things they think are valuable and management supports them. They take on hard projects (i.e. forking WebKit). If anything, it should be the private non-profit that can take these risks!

      So, guess which browser is an irrelevant pig dog on my 2-year-old smartphone...

      --
      My God, it's Full of Source!
      OUTSIDE_IP=$(dig +short my.ip @outsideip.net)