What the Browser is Missing
Unix-like operating systems are great. *nix features wonderfully thought out file-systems complete with grand methods for traversing (navigating) file/folder hierarchies. This is great, but it isn't what makes *nix "great". *nix have standards, transparency, and passionate active communities which results in fairly fast release schedules and general high quality maintenance standards. They can manifest as specialty distributions, attacking individual core concerns such as security, minimalism, scalability, and entertainment. This is great, but it isn't what makes *nix great. When people think of *nix, they may think Unix, or Linux. Or BSD or FreeBSD, or Solaris, or Darwin. They may even think of the kernel, insmod, block devices, of schedulers, of inittab, of systemv or systemd, or containers. These are all great things. They are great things specifically because their purpose is to enable great things. When I think *nix, I think of man, curses, bash/zsh, irssi, mutt/pine, emacs/vim, tmux, diff, gcc, python, and GNU coreutils. I think of forks, PIPES. Good old fashioned anonymous pipes! The magical ability to employ those (analogical) futuristic US Post Vacuum tubes and beam parcels of data from one program to another, with nothing in your way to stop you. That is, I think of *nix, the philosophy. The philosophy which combines *nix and GNU. Which views every program as an interface which can be programmed, extended, modified, and in such spirit, combined with other programs for great glory! That *nixes are extensible, flexible, customizable, and treat programmers as 1st-class citizens, awarding freedom and access to underlying systems and architecture. This is what makes *nix great. And it't not just that each program should be free (as in freedom) or open source, but that it's running instance offers an API or configuration layer (rc's, etc) affording arbitrary extensibility or accessibility to the "average programming/tinkering user" and not only core developers whose changes emerge in a build. I'm talking about bash.rc, about .emacs. This is what makes *nixes so great. But web browsers, even the open source ones, are almost entirely lacking in this key philosophy. In a web browser, we are constrained to a rudimentary "navigation" system (forward, back, history, cancel, url bar / "go" -- fortunately there are web services like google for actually finding content). We're limited to a minimal file system (tabs, bookmarks/favorites). Forget archiving resources in case they are taken offline. Forget marking a resource as "read later". Forget creating a directed graph of the resources you're visiting. Forget making collections of tabs (unless you're firefox and produce the worst, most unusable implementation of this feature I can possible conceive -- but hey, at least it's there). Browsers tend to focus on their core competencies: security and providing a fast and performant rasterization/rendering system for (html, jss, etc) web standards. And don't get me wrong, this is important, just like *nix is important. But what browsers need is GNU coreutils. It needs emacs/vim love. It needs pipes. And I'm not talking about "chrome extensions" (though there are some great extensions, e.g. vimium which may even be the exception which proves the following rule). The biggest joke on us is, we have one of the most powerful languages for manipulating everything in the browser (ecmascript/javascript) at our disposal, except for manipulating the browser itself! Some browsers are trying to address this (e.g. http://conkeror.org/ -- emacs styled tiled windows in feature branch!) and I will be supporting them in whatever ways I can. What we need is the bash/emacs/vim of browsers -- e.g. coding changes to your browser (emacs style) without requiring recompiling and building. Intercommunication between these native extensions. And a package manager. The GNU of browsers. But first, the *nix of browsing must exist. --- Drew, Josh Juran, and I (XXX tags needed) were discussing this and other related concepts, like how it would be nice if every HTTP resource had a "git"-like history preserved for it and a special/reserved GET param could be used in order to specifying the version hash of the specific instance of the resource you want (like wikipedia does with permalinks). e.g. cnn.com/stories/boy-wins-money?rcv=1AC89F71.