So this is something I’ve been fiddling with, off and on, for the past few months. I’ve been talking about it for far longer.
It’s a very minimal Linux install with a copy of the latest Firefox. And by ‘latest’ I mean ‘3.0’, by the time 3.01 came out, I was too far along and too impatient to try and recompile. The idea is you can burn this to a CD and chuck it into any PC you’ve got laying around and it should, for the most part, work. Put the CD in and make your computer boot from CD, and it should come up with a Firefox window. Download link is at the end of this post, feel free to skip ahead if you don’t need the blow-by-blow.
It was an interesting exercise. Basically EVERY single thing I thought was going to be easy, was hard. Everything I thought was going to be hard, was easy. And in the end, I moved away from compiling my own stuff and towards just repackaging other stuff, when I could. I stole pretty mercilessly from CentOS, though when I realized that just simply booting from a CD was going to be so difficult, I poked around at Knoppix to see how they do it.
This is really a proof of concept, something to convince myself that I could actually do what I set out to do. There are lots of improvements to make, most of which I probably won’t, until I feel like it or become inspired –
- Faster
- Smaller
- More Features
- Installable?
One thing that came up that was really disappointing was that I ended up having to use XWindows (X11). I hate XWindows. It’s a bad software design. But Firefox for Linux relies on it for the little widgets (the controls that you use to interact with the software), and the event management. That would be a moderate to heavy software-engineering project – porting it to talk straight to the GDK equivalents instead, and then compiling GDK to talk directly to the Unix framebuffer. Getting a copy of GDK compiled for the framebuffer was actually easy.
I had also set a ‘requirement’ that I fit it in under 100 MB, so I could upload it to this very nifty website, Mediafire. I bet I could’ve made that goal, if I had tried harder. But I had missed deadline 1 I had set for myself, and 2, and even 3…so I started to get impatient. Heck, just stripping debugging symbols would probably had been enough to make it through, but I didn’t want to bother when the result compressed to under 100MB.
The real lesson for me in this is in the merit of good scaffolding. Use other stuff that’s already there as scaffolding for whatever you’re building, and swap it out for your own custom stuff when you need to. You’ll make more ‘agile’ change and progress that way. And VMWare for the Mac, while absolutely critical, is not a pleasant environment to work in. Had I to do it over again, I would’ve bought a $500 laptop from Dell and used that. I ended up doing my GDK and Mozilla compiles on ‘compy’, a 256MB P2 or P3 with very feeble abilities, but some disk space and the ability to run 24 hours if necessary. Cross-Compiling and building and installing are also very weird and unpleasant tasks; the standard ./configure && make works sooooo much better when you’re going to run the thing from where you build it. That’s part of the reason for Compy, I could say “./configure –prefix=/usr && make install” and get stuff to work. Then I’d copy it onto my VM’s and work from there.
If I could ever actually dedicate any time to work on this project, I would love to make it install onto a hard drive and use nearly the whole damn thing for a really sophisticated web cache – that could detect when the user was disconnected and serve back stale content it might otherwise disregard in that case. Then you could throw this thing on a laptop and go on a plane, and (for well-designed applications, in limited cases) you could use them ‘offline’. Hence my comments a few posts ago about how little I like Google’s “Gears” project. I’d also like to take on the prospect of making it work directly with the framebuffer instead of going through the abomination that is XWindows. Furthermore, there’s some to be gained from doing non-library builds of the GDK libraries to make them ‘link in’ to Firefox, instead of being loaded at runtime. There will also have to be some kind of window management, of some sort, because all the little Firefox windows have no borders right now. Whether that’s done in X (bleah! Ptui!) or in the framebuffer, I do not know. Or maybe directly in Firefox? Anyways, for the most part, those are pipe dreams, because it’s doubtful I’ll be able to scare up any additional time to poke around.
So what are you waiting for?! DOWNLOAD HERE!