How Maintainable Is the Firefox Codebase? 127
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.
Does this guy know what Firefox is? (Score:5, 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?
Re: (Score:2)
Re: (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! [jslinux.org]
Re: (Score:1)
Too bad that doesn't work
Re: (Score:3)
What is a Firefox? A miserable little pile of sources.
But enough code... Have at you!
Re: (Score:3)
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.
Re: (Score:2)
I got the joke. I was joking back, but apparently that wasn't caught by your detector.
I was contemplating whether I should have added that second line or not. Do, and people will think I'm serious and not realize I'm just joking as well; Don't, and people will get offensive thinking I'm trolling and just slamming Firefox for the hell of it. But for stability these days, I figured credit is due, because I've slammed Mozilla/Firefox enough in the past.
So? (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?
Re:So? (Score:5, 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.
Re:So? (Score:4, 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.
Re: (Score:1)
In mathematics, a directed graph or digraph is a graph...
http://en.wikipedia.org/wiki/Directed_graph [wikipedia.org]
Re: (Score:3)
It finds that 11% of files in Firefox are highly interconnected
It means 89% aren't...which sounds much nicer.
Re: (Score:3)
So, Nearly 90% of the Firefox code is of high quality and very maintainable.
Re: (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 prog
Largely Irrelevant (Score:2)
More to the point, that's what code tests are for: to make sure changing one thing doesn't break another. Talking about the "health" of the code base without knowing about test coverage or effectiveness is pretty damned meaningless, regardless of "interconnectedness". My view is that Ali Almossawi's paper is therefore a waste of dead trees.
Re: (Score:2)
Good, obviously. It goes to 11!
Re: (Score:1)
Re:Fork (Score:5, 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?
Re: (Score:2)
Except that Flash is easily avoided ... if you don't want Flash, don't install it, and don't use sites which require it.
You might decide that there's stuff you can't live without, and I definitely agree that in company environments it can be damned near impossible as it seems there's usually one or two things you need which requires it.
But if you decide you don't want it and won't use i
Re: (Score:2)
Re: (Score:1)
Who cares about random cat videos? I watch maybe 5 YouTube videos a year.
Re: (Score:2)
Who cares about random cat videos? I watch maybe 5 YouTube videos a year.
There is really good stuff in YouTube these days. Not just cat videos or dogs on skateboards.
How about bigthink [youtube.com] or EEVblog [youtube.com], for example?
Re: (Score:1)
Not sure why the default response to "I don't give a shit about YouTube" is always to give me links to YouTube.
It's like saying I don't eat meat and you suggesting chicken.
You think I'm going to install Flash so I can find out the wonder of the two links you provided? Thanks, but no -- I genuinely don't care about internet videos, and I genuinely despise Flash.
Re: (Score:2)
No Script sucks because the net sucks (Score:1, Insightful)
OK let's start with:
noscript anybody?
I loaded it. And every single website I use - like my library, credit union, broker, SLASHDOT, Amazon, etc ... will not work correctly without their scripts running. I can't even login without having to "Allow all scripts''
Why "Allow all..." because, every goddamn website calls a myriad of different other websites for god knows what the fuck they're doing.
I TRIED to selectively whitelist websites and all I got was half functional shit- and not being able to access my account many times.
Re: (Score:3)
Don't blame us, blame the marketers and SEO people.
Re: (Score:1)
Re: (Score:2)
You could just install ghostery, which generally JustWorks (TM).
Re: (Score:1)
Got a trojan warning (Score:5, Informative)
counting files today (Score:3)
and tomorrow we'll count the lines of code and spew more meh
"Went up significantly following version 3.0" (Score:1, Redundant)
is it a coincidence that 3.0 is when they started versioning up like crazy every two weeks? I think not!
Um, you forgot to go AC when you trolled. (Score:4, 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.
Re:Um, you forgot to go AC when you trolled. (Score:4, Insightful)
Hasn't that been played out yet?
Nope. Trolls echo forever.
Re: (Score:1)
Version 3, version 4 - what's the difference? So he was off by 20 minutes. Big deal.
Re: (Score:2)
"Crazy" seems to be working just fine.
I'm interested in seeing analysis of WebKit/Blink (Score:5, 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?
Re: (Score:2)
Webkit may be better documented. I tried to find documentation on Gecko and it was very limited, I gave up on it.
LibXUL on Win32 approaching 4GB memory limit (Score:5, Informative)
According to recent comments [mozillazine.org] (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 [mozilla.org]
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.
Re: (Score:1)
Re: (Score:3)
Re: (Score:3)
Re: (Score:1)
to be linked not compiled... if you use link time optimization, the memory usage grows fast
Re: (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?
Re: (Score:3)
It has to do with the compiler optimizations that profile code more than it has to do with code bloat.
Re: (Score:2)
Re:LibXUL on Win32 approaching 4GB memory limit (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.)
Re: (Score:2)
Why not switch to compiling it with something that can cross compile, running the compiler on 64 bits. Perhaps GCC or Clang could do the job?
Re: (Score:2)
"(FWIW, Chrome has *always* been too big to use PGO.)"
Chrome is also more performant too though, so what do they do instead? Is it simply better architected from the outset?
Re: (Score:2)
Actually, the problem on Linux is also PGO.
Re: (Score:2)
Its the optimization phase that takes up a lot of RAM. Id rather they skip the optimization phase rather than damage features and functionality. If firefox wont render pages well, i would give up on it.
Lots of pretty numbers... (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.
Re: (Score:3)
Re:Lots of pretty numbers... (Score:4, 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.
Who cares? (Score:1)
Firefox is forthing me to update the flash player, even if *I know* that I only visit one web site with flash on it with it. ... don't know which version? You can not disable autoupdate anymore. Unfortunately the developers believe they may change look and feel arbitrarily.
In other words: it refuses to work. (That means I have to shut down all other browsers with roughly 100 tabs/windows, unacceptable!)
Since
I for my part use an very old firefox for one specific web site. Otherwise I use Chrome and Safari an
Re: (Score:2)
Re: (Score:2)
Interesting link, thanks!
Re: (Score:2)
I ended up switching to Opera after retrying it a few months ago-- it has a whole slew of formerly Firefox-only extensions now (like AdBlock Plus, Stylish, Greasemonkey, LastPass, etc.), I haven't run across any site incompatibilities yet, and it's a hell of a lot faster than Firefox was running for me.
Is anyone still using it? (Score:1)
Re: (Score:2)
Oh please, even on a super computer the Firefox UI is as slow as Molasses. I can say that since I use Firefox everyday as my main browser. Why should I stick up for something that I know has issues. He wasn't even talking about RAM, he was speaking of lightness, like Midori for instance; Firefox use to be lean and mean like Midori.
I haven't personally looked into it, but I'd be highly interested in a Fork that brings it back to what it use to be. I can't find any information, but for Linux, as of last year
Re: (Score:2)
The main complaint about Firefox, right from the start, has been memory leaks. You are rewriting history, Firefox was never lean and mean.
If anything Firefox is like Emacs in that the median power of computers is increasing faster than the resource consumption.
Re: (Score:1)
Bullshit. If it were irrelevant you wouldn't have clicked on every last FF article to profess its irrelevance. The truth is that it's so relevant that you feel threatened enough by it to leave your mark everywhere.
P.S. You forgot to tick "Anonymous Coward"
Re: Is anyone still using it? (Score:1)
GG Firefox! http://caniuse.com/mathml
Re: (Score:2)
Firefox isnt meant to be a super lightweight browser but one that can render anything. A lightweight browser would be an unuseable browser for normal people. If you want a lightweight browser try Dillo. The UI code and the rendering code probably consumes very little at runtime compared to all of the image data that is being stored in memory, anyway.
The code base was not designed for concurrency (Score:5, 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, [internetnews.com] 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.
Re: (Score:3)
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 tha
Re: (Score:1)
FYI, Electrolysis is back on.
https://wiki.mozilla.org/Electrolysis#Yes_these_dates_are_real_and_from_2013.21
Re: (Score:1)
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
I thought the conventional wisdom was that the Mozilla team made a mistake, unnecessarily losing time, by starting over from scratch. In other words there is not enough Netscape code in Firefox!
Those who ignore History... (Score:1)
Re: (Score:2)
I've no idea how bad the old code base was but I'd imagine based on past experience they would have done a cleaner job this time around.
Re: (Score:2)
Well, things would be cleaner to re-implement this time around if they had to do another rewrite, because cross-platform development is now a basically solved problem.
In 1998, getting one codebase that would work on things like various ancient Unices, "DOS-based" Windows (95/98/Me), and Mac OS 8/9 was a very difficult task. Beyond the lower-level concerns, few good libraries would work across all targets. C++ itself was a mess when trying to work across different systems and compilers- many things could not
Re: (Score:2)
Was that really why a new browser architecture was created. It may have been simply due to the fact the old rendering engine did not structurally support document reflow well, without creating a huge second systems effect anyway, which would lead to obfuscation problems. The old rendering engine may have been fine for what it was designed to do.
RTFA (Score:1)
The conclusions of the research are very positive and shed a very good light on the health of the code. Why is everyone commenting like the conclusions are the opposite?
How maintainable? (Score:2)
Well if the fate of Camino with Gecko is anything to go by: not very.
Re: (Score:2)
Considering that MSE takes even longer than Clam to identify new ANYTHINGS, I'm not sure how much stock I put in that report.