08 Oct 2009 - Douglas Thain
Exhibit 2
: You cannot run the latest version of Netscape (a.k.a Mozilla, Firefox, SeaMonkey, IceWeasel, good grief...)
if your home directory is on a distributed file system
. Never mind that putting your home directory on a shared filesystem is
the normal practice in 90% of the industrialized worl
d
, where the user of the machine works for an organization that keeps important documents on a central server.
Exhibit 3: Google Chrome is supposed to be the re-invention of the web browser, except simpler and more robust. Instead of threads, it uses this new-fangled technology called "processes" instead of those old gnarly threads. So far, so good. Then Firefox decides to get on this bandwagon.
Unfortunately, Firefox is missing the point entirely . The plan is to break the UI that controls all the windows into one process, and the plugins, parsers, renderers, etc into separate processes. It should come as no surprise that this makes things even more complicated , because the various pieces have to communicate with each other. More subtly, it makes the failure semantics really strange: if a helper process dies, one window will fail, but if the UI process dies, a whole bunch of windows will fail. If you look at the set of running processes, you are going to see an unpredictable number of processes with names that have no relation to what you are actually doing.
Everyone seems to have missed a ridiculously simple solution to all of these problems: Run each browser window in a separate process . You don't have to separate out all of the complex plugins, renderers, and so forth, because if one crashes, it will only take down that window. Furthermore, to open a new browser page in any context, all you have to do is fork() and exec("browser http://") and the operating system takes care of the rest.
See also: On Parallel Programming with Processes