The Web Browser as a Milli-Application
I have considered several times designing applications in a similar manner to a microkernel: portions of an application would run in separate processes, communicating over IPC, such that if one process dies it doesn’t affect the others directly. Graceful fault handling becomes much simpler, and buggy chunks of the browser don’t become universal security hazards if segmented privilege-wise.
I found that the Epiphany browser uses much less memory than Firefox 3, which helps when you get stuck with a laptop with only 512M of RAM and today’s programs think they have a right to more than the 32MB Windows 98 ran on fine. I really, really miss the Awesome Bar though, and figured someone should add it to Epiphany. And why not as an extension even?
Zing! Why not make everything an extension?! History, an extension. Bookmarks, an extension. Tab browsing, an extension. Tab browsing integration with History and Bookmarks, an extension depending on the previous three such that it won’t install if you don’t have them. Password manager, an extension. Encrypted password, an extension depending on the password manager. Smaller/Larger buttons, an extension that later could get replaced with full page zoom.
In theory, each extension could use an individual process, communicating over IPC, functioning effectively as a micro-application. Really, this helps immensely when we get into Flash and Java (a plug-in extension to run plug-ins?); but when we just want to add tabs and a history feature, we can load all that stuff as normal. Rather than a micro-application, this would be a milli-application— or more basically, a modular application with a lot of modules.
Modular applications tend to encompass all desired functionality in the main application, and only give extensions or plug-ins for not typically anticipated enhancements, or for anticipated enhancements that follow a diverse and unpredictable level of extension (for example, sound codecs). Most applications don’t separate out core functionality into smaller, independent code bodies that extend a simple core. I believe this design, however, would clearly separate out important subsystems and allow for easy replacement with no surprises. Or maybe I just like small bits.
Anyway, back to my original point: someone needs to port the Awesome Bar to the Epiphany browser.