My Quest for a New Browser
spolu.github.io
spolu.github.io
Today, our computers are always on, never restarted,
always connected.
This is a bad thing, not a good thing.My personal machines and devices are not high-availability servers, and don't need to be powered on all the time. I close my browser windows, and power off my machines frequently, and deliberately. I generally don't gain very much from the practice of leaving the room for an hour, with my machine powered on.
I'd like to dissent from this echo chamber of constantly advocating promiscuous systems, that tend to do things for us without asking us first, and promote biased decisions in favor of permissiveness. I pretty much hate that you can't remove the battery from an iPhone.
That said, there was an time when client/server computing delivered a lot of the kind of functionality, via a fragmented industry of proprietary "enterprise" applications, that has, lately, been re-cast as the broad ecosystem of "mobile apps" (which are essentially the same thing, only smaller and portable). Also, since HTTP is a stateless protocol, "rich web applications" (aka: HTML5+ & JS), have been able to fill in a lot of gaps in web browser behavior with asynchronous requests. I tend to think that JavaScript will become the open version of the once proprietary non-interoperable model of native binaries and client/server computing.
And, that rotten "Reopen windows when logging back in" checkbox on Macs really grinds my gears. (...maybe I'm just a control freak)
Linux has a pretty low entry point nowadays. Plenty of people I know surf the web, use Skype and check their email like any other user but do it on Ubuntu.
Have I done something weird to my Mac? 10.7.5 Lion here, when I press the power button it comes up unchecked by default.
"Edit: since 10.7.4, the "Reopen windows when logging back in" checkbox has stayed unchecked if you uncheck it once, so the hacks below are not needed anymore."
Update your Mac.
For you, perhaps. I use my open browser tabs as a current "state" of my mind. My todo list, if you will. You might use a different method for keeping track of what you have to do. Maybe you have a good memory.
At least the browser tabs come back after the browser quits. My main reason I never reboot is my terminal tabs. Each one is cd-ed to a project directory and each has command line history and scrollback history that are potentially important reminders of where I am on that particular project. I go for weeks without rebooting (even in the face of OS updates) because I don't want to lose my terminal tabs.
Powering off machines is a detail. They should go into low power mode and switch themselves off when they are not being used. Why should I have to remember to do it? They are machines, they're built to remember things like that. As long as they save their state, it doesn't matter.
State is good. I like state.
Another good point spolu brings up:
The chrome/ subdirectory of the chromium project (all
that makes up the Google Chrome experience: tabs, settings,
sync, omnibox) is made up of 5,343 C++ implementation files,
adding up to 1,449,451 lines of C++ code (as of 2013/09/11).
It's hardly tractable by one person, and hints to the fact
that it's probably impossible for a one guy to modify it
alone to come up with a profoundly different experience.
This detail doesn't get a lot of discussion, but I think it's sometimes an essential fallacy of the very premise of the open source concept, that having the ability to audit source code, doesn't necessarily make it a realistic option.Lots of modern contraptions are simply too complex for any individual to ever claim a hope of gaining an honest understanding of their inner workings, nevermind an unskilled layman. At least, not without living like a cleric, cloistered away in the library of some convent or monastery for most of one's life. Sometimes I feel that the real hazard is that we gloss over the idea that we're trying to exert control over a massive arrangement of billions of transistors, however small they may be. If we were confronted with an elaborate array of ordinary light switches, and told to conquer the same tasks, I think it'd be easier to realize the true scale of some of the things we fiddle with on an everyday basis.
It's more just that you have lots of groups exercising the code and looking into various portions of the code - if every group decides "Yep, the portion we use/looked at is solid", then you gain some confidence that the code does what it's supposed to. The more groups using/perusing the code, the more confidence you gain.
ie, Given enough code, all reviews are shallow?
When our closed systems misbehave, my only option is to shrug and ask if we have a support contract.
there's nothing magic about switching your machine off to increase security. It's just as vulnerable when you're using it, more so in fact. I'm not sure how shutting your machine off adds any predictability either. If you want to achieve the same thing just turn off wifi.
For mac laptop users we get the best of both worlds, always state preserving, but essentially "off" when not in use. Sadly neither windows nor linux have ever got "sleep" right.
Kind of like a tabbed browser that remembers history and open pages, but for terminals.
(1) screen will do a lot of that. But if the system has been restarted, live processes in the terminals will no longer exist.
(2) You have the option of a suspend-to-disk, which can 'wake' you back to the right place.
(3) You could use an OS running in a VM, and suspend that. This is arguably the cleanest solution right now.
(4) You could get really in to process checkpoint/restore stuff in the kernel which seems to be constantly under development to facilitate live process migrations across machines in data centers.
Actually though, in all cases you will lose your network connections, which might be critical to the processes as well. Perhaps re-evaluate your workflow.
I do reboot occasionally to let it do startup/shutdown cleanup, but it's mostly sleep.
I guess I'm stuck in the past, never put it on sleep or hibernate. Should I?
screen, certainly (I rarely ssh to a host without starting screen), though tmux is what the cool kids are using these days.
I regularly suspend my laptop. Almost as good as leaving it powered. The main hassle is if you've got multiple SSH sessions to the same host, and you need to sort out which is what.
This is a decent argument (partially) in favor of the ideas discussed in the OP. I'd love to see a world where browsers are akin to libraries, and hackers roll their own.
> I pretty much hate that you can't remove the battery from an iPhone.
This is why I don't own one. I encourage you to vote with your wallet.
You explain why it's not necessary for you, but you don't explain why you think it's a bad thing. Why is it bad that our computers are always on, never restarted, always connected?
For comparison, as much as your washing machine, dishwasher and all your 10 (cfl) ceiling lights together (from http://www.carbonfootprint.com/energyconsumption.html). Or as much as a low efficiency fridge-freezer.
Multiply by 2 if you run air conditioning. Multiply by number of employees for an office. Etc.
I'm also not sure about your office, but in my office the lights are on for much more than the four hours per day in your other link.
And similarly, we're talking about when I'm not using my computer for work, so it's not 440 kWh/year (24x50x365). Given I work about 9 hours a day, the portion of a year that I'm not at my workstation (including weekends) is about 250 full days - so the number is actually more like 240 kWh/year (24x40x250) for leaving it on overnight.
Eventually though, I had enough of Firefox's shenanigans and now I just suffer through horizontal tabs. Now my usage pattern has changed and I'm constantly having to weed out tabs so I can figure out where I am.
I still long for vertical tabs in Chrome.
There's an add-on for that =P
Of course it's embedded in Firefox OS, but Firefox OS is really just Firefox built with special options, so in theory with some work you could expose that BrowserAPI to desktop. And there's actually a viable path whereby you could create a new browser as an open web app (https://developer.mozilla.org/en-US/docs/Web/Apps) with the permissions to use the BrowserAPI and it could be installed as a normal application, including on desktop. Of course that's a bunch of steps and unimplemented bits, but you'll be following a path that "upstream" is actually committed to. So committed they actually made just what you describe ;) (Even though the design of the browser is pretty conventional – but it's the concept of a browser-built-on-html that you are exploring at this point.)
Still really awesome. Thanks for sharing that. Are you involved with this?
The BrowserAPI is certainly not complete, but it's something. Some stuff might be harder than others. Intercepting networking is not very easy in Firefox – you can spy on networking, but the code isn't setup with hooks to change it up. And I don't know if something like localStorage would be exposed via the BrowserAPI – it's more low-level than that sort of thing. But if you are thinking about moving that kind of state around there's another Mozilla project called PiCL: https://wiki.mozilla.org/Identity/PiCL – it's working more in the guts of Firefox, but like much of Firefox it's in Javascript (compared to Chrome which is more biased towards C++). But it's not nearly as friendly an environment as content Javascript :( Anyway, that's more where localStorage manipulation and transportation is going to be happening in Firefox.
Packaging up "native" apps with node on the backend and html on the frontend could be a very nice thing for cross-platform app writers.
Berkelium came close, but seems to have been abandoned.
Such a project would be of immeasurable use to all the folks who have cool native code that needs a nice-looking GUI.
a. ...render the contents of a window to a RGB bitmap in memory, so I can draw it on a texture with OpenGL or D3D?
b. ...directly inject input events from the mouse and keyboard?
c. ...easily bind Javascript objects to native ones and vice versa?
Without those three things, it's not super helpful.
It's a good project that could use a few hands.
* Add a tiny blog post so the date on the main page isn't May 2012.
* Add a "low-hanging fruit/wishlist/todo" to the http://www.uzbl.org/contribute.php page - I see "how do I get involved in XYZ" questions here and on Reddit all the time.
Maybe I didn't get the concept of 'Stacked Navigation' but looks like a mix of current pages and history displayed vertical instead of horizontal.
And synchronized sessions I am pretty sure that if you search for it on chrome store you find more than one plugin for it.
Agreed with your points, you can find extensions that serve 90% of what could be stacked navigation in Chrome + you have extensions which lets you synchronize your sessions in chrome.
The main thing that motivates me, is the ability to log into an unknown computer an retrieve my session from the network. I've put a lot of thoughts into building an extension that would let me do that, and figured out that it was not possible for now. That where the motivation comes from, build a scriptable platform that would let you alter the behaviour of your browser much more freely than with extensions.
Once logged in, you retrieve your session(s) which encapsulte the open tabs (chrome/firefox/safari) but also your cookie store (they'll probably do it soon enough)
The major difference I see, is the ability to easily and transparently log into any machine running the browser.
On the other side i think it will find a ferocious competition from the chrome apps.. since there are a web_contents or webview one could embed via extensions..
so the big question is, how this idea could distinguish itself enough so it can be competitive with chrome extensions? (since chrome dominate all over?)
anyway we need badly that some people stand against some standards and try to do some things better.. it must come from people outside the players.. cause its there innovation really lies..
the corporate world took control of all the standards, and freeze it out.. so they can come up with dubious platforms on the other side, or influence standards to comply with a strategy that is good for them..
so this open world we all like, are pretty much in danger because "they" are controlling it
i think also there is a catch with javascript.. and by allow it to do more, there are a bad effect on the first good thing on html.. that is HTML markup!
i mean.. less html and more js code means we are endind with a common language and grammar of communication between computers and people .. with js taking more and more part of it.. we wont be able to understand whats suppose to print in the screen anymore.. it gets more and more obscure, and less standard.. and this in the end will just help the bad guys with their closed platforms..
anyway.. this is all things we should think.. theres a lot in stake here.. we need to protect and save what is good.. and we need to be able to distinguish what it is, so we dont end aiding the things we are against to in the first place
We should never open two tab for the same web page, and your solution here seems to prevent that. Nice job - I hope to see it gain some steam.
As I understand it, the exobrowser allows you to load a local html/js layout that can embed webcontent objects that behave like top-level frames and the javascript outside the box can presumably see (at minimum) window and url change events inside the webcontents. (Hence, security nightmare.)
Also, do you have any ideas yet about how plugins (e.g. flash, webex, etc) would be handled?
- For the plugins, luckily, the Content API includes the Pepper Plugin API... so you can have flash (and the rest of the native plugins that work on chrome) out of the box for almost free.
With a fresh session, tag 1 is selected. This is the default configuration; the tags can really be named anything and can even be dynamic. Any window that is created is then labeled with the tag that is selected. I can deselect tag tag 1 and select tag 2. All the windows that are tagged with 1 are removed from the viewport and any windows with tag 2 appear. Any new windows are then created with tag 2. I can switch back and forth between tag 1 and tag 2 very rapidly. This is the traditional workspace mode of working
I can select multiple tags, doing so will show all the windows that have any of the tags I've selected. Furthermore, if I create a new window, it will be labeled with both tags, and switching (which is really just selecting one tag to the exclusion of others) to either tag 1 or tag 2 will show that window. In addition to labeling new windows with whatever tags are currently selected, I can modify an existing window's tags very easily. This system lets me group my windows in a very flexible and easy-to-understand way. All of the shortcuts for interacting with my window manager begin with the "windows" key. That is beautiful, because windows<=>window-manager makes sense, and because applications almost never have their own shortcuts that involve that key, so there are no collisions.
On top of the tagging feature, it has some excelent layout modes that automatically place windows how I want them, and those layouts are attached to tags - when I select a tag, it changes the layout to the last layout I applied on that tag. For news browsing and general reading, the layout is always that each window uses the full viewport. When it's like this, my window manager looks exactly like a fullscreen browser with tabs. On the tag that I typically do coding activities with, I use a layout that splits the screen vertically into two sections: a primary and supplimentary section. Depending on what I'm doing, the primary window will either have the code I'm working on, a view of the output from the code I'm working on; the supplimentary will have a repl, a shell in the directory where my project is, and a documentation browser. Switching between all these windows is also completely keyboard driven, so I can code away, move to the reference to look something up, then get back to my editor very rapidly.
Anyway, that's just some of what I have available in my window manager. I almost never use tabs in my terminal, browser, or anything else because the window manager is much more powerful.
I've found two tools that help me to degrees: Calibre (an eBook reader / content manager), and Readability.
What they offer that a browser doesn't is both content management (bookmarks are a very weak pass at this) and queue management (the ability to organize a list of articles I'm reading). Tags are another solid plus.
The footprint of both is also vastly smaller than my browser.
Much (most) of my browser usage, though, is based on _content_. And browser tools for surfacing, curating, cataloging, managing, and tracking content are simply awful. In the past year I've discovered both Readability and Calibre. Both are vastly better oriented at the task of actually reading and managing content, though they've got their warts. Readability lacks a desktop app (it runs as a webpage), though the Android client is nice. Calibre lacks Web integration, but has much better content management features than even Readability.
Both are oriented more around reading-optimized formats (ePub and PDF for Calibre) than Web browsers are. And their footprints are vastly lower.
The first link below details more gripes and suggestions, briefly:
Readability features (applies also to ePubs):
It renders web pages viewable.
It manages my reading list.
The reading list is available across different browsers and devices
You do not need to have every tab loaded, rendered, in active memory and sucking CPU at the same time.
Give priority to the foreground tab.
Completely redesign bookmarks with thought given to workflow.
Improve responsiveness.
The existing Firefox "add page" modal dialog is fucking annoying as hell
Provide a duplicate entry search and reconcilliation.
Emphasize tags. They're present but poorly presented.
Emphasize bookmarks for navigation.
Improve annotation capabilities, including cross-referencing.
Provide a decentralized sharing mechanism.
Include a few lines of context from the page.
DESIGN THE BOOKMARKS LIST TO WORK AS WORKFLOWS.
Provide the ability to download the bookmarks source in offline-readable format. Provide search / navigation / management of active tabs.
Provide search of content across all open tabs.
The essays:
Browsers: some modest proposals & feature requests https://plus.google.com/104092656004159577193/posts/7DoF6HTG...
Mozilla readies the browser I wasn't looking for https://plus.google.com/104092656004159577193/posts/LR7jubsX...
The content problem in brief https://plus.google.com/104092656004159577193/posts/ff9HFxzC...
Just installed Readability on my phone Must can haz for laptop. https://plus.google.com/104092656004159577193/posts/fVK7aJuB...
Vaguely related: Video-in-browser very nearly exactly sucks https://plus.google.com/104092656004159577193/posts/jBfVhsdD...