
My Quest for a New Browser - spolu
http://spolu.github.io/exo_browser/2013/09/11/my-quest-for-a-new-browser.html
======
negativity

      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.

~~~
__david__
> This is a bad thing, not a good thing.

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.

~~~
negativity
Yeah, a lot of this is about personal preferences, and preserving them across
time and space. It's not always a bad thing. There's always a trade-off
between convenience, automation, predictability and security.

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.

~~~
bithive123
It's more than just the ability to audit, it's the ability to fix specific
problems so you can focus on your business requirements. This happened to me
recently -- I was using Apache in a rather unusual reverse proxy configuration
and was unable to suppress (using the usual directives) certain headers which
were causing problems upstream. I could have spent a long time researching
other solutions or coming up with clean workarounds but at the end of the day
it was quick and effective to simply edit mod_proxy_http.c and fix the problem
directly. Now that the service is up again, I have time to come up with better
solutions if I desire.

When our closed systems misbehave, my only option is to shrug and ask if we
have a support contract.

------
Ellipsis753
Hello. I've customized my browser (Firefox) quite a lot. Just interested to
hear other people's options on it. It's based around the idea of maximizing
vertical screen space while keeping everything I use handy. (I have a
widescreen monitor) most websites don't even use all the horizontal space
where vertical space is really important. Only tangentially relevant to the
post but I'm interested to hear what other "techie" people think and how
others customize there browser. Also the screenshots of the ExoBrowser is kind
of interesting as it mirrors this fairly unusual horizontal oriented layout
that I've seen many programmers using. Screenshot:
[https://imageshack.us/a/img855/7486/u9j0.png](https://imageshack.us/a/img855/7486/u9j0.png)
My addons list:
[https://imageshack.us/a/img819/2726/7gdd.png](https://imageshack.us/a/img819/2726/7gdd.png)
The browser holds up pretty well even with the 258 tabs I currently have open.
(Although it does use 4GB of ram.) It'd be really nice if someone could code
an addon to unload tabs from memory if they're not used for a while. Anyhow,
what are people's thoughts on this?

~~~
Wingman4l7
> It'd be really nice if someone could code an addon to unload tabs from
> memory if they're not used for a while.

There's an add-on for that =P

[https://addons.mozilla.org/en-
us/firefox/addon/unloadtab/](https://addons.mozilla.org/en-
us/firefox/addon/unloadtab/)

[https://addons.mozilla.org/en-us/firefox/addon/suspend-
tab/](https://addons.mozilla.org/en-us/firefox/addon/suspend-tab/)

~~~
Ellipsis753
Thank you for this. The memory is down to 1GB now. I think I checked a while
ago but none supported newer Firefox versions but now it works just great. :)

------
ianb
Same idea from a different direction: Firefox OS currently includes a browser
built in HTML:
[https://wiki.mozilla.org/Gaia/Browser](https://wiki.mozilla.org/Gaia/Browser)
with an API:
[https://wiki.mozilla.org/WebAPI/BrowserAPI](https://wiki.mozilla.org/WebAPI/BrowserAPI)

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](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.)

~~~
spolu
I'm glad things are moving in the right direction. Yet there are a few things
missing in the current BrowserApi to really enable new browsing experiences
IMO, such as network delegates, acces to cookies and local storage.

Still really awesome. Thanks for sharing that. Are you involved with this?

~~~
ianb
I work at Mozilla, but not with Firefox OS.

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](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.

~~~
spolu
Awesome info again! Thanks so much I'll look into it closely!

------
__david__
I think this is very cool. A thin browser with all the chrome parts done in
javascript could be good for a number of things. The author touches on browser
UI prototyping, but I also see how this could be a lightweight XULRunner
competitor.

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.

~~~
r4vik
check out node-webkit, this is what lighttable is built on.
[https://github.com/rogerwang/node-webkit](https://github.com/rogerwang/node-
webkit)

~~~
spolu
Indeed node-webkit is focused on exactly that while the ExoBrowser focuses on
providing a scriptable platform to build and hack your own browser.

------
lucian1900
This isn't too far from Firefox's use of XUL.

~~~
spolu
Indeed. Main difference is the API we expose to JS. XUL use is really UI
oriented. Here we want to control the entire browser through JS.

~~~
nephyrin
Gecko exposes a large number of its interfaces to JS, and the entire Firefox
frontend is written as such: [http://dxr.mozilla.org/mozilla-
central/source/browser/base/c...](http://dxr.mozilla.org/mozilla-
central/source/browser/base/content/browser.js)

~~~
spolu
Do you have access to cookies, localStorage from JS?

~~~
lucian1900
Yes. Any XPCOM object is usable from JS that runs inside Firefox chrome and
most things are XPCOM objects.

------
angersock
I'd kill for a simple, embeddable open-source browser with C bindings and
proper JS/HTML5/CSS3 support (something like Awesomium, but free and with less
jank).

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.

~~~
spolu
You should check node-webkit, similar but slightly different and definitely
more specific to what you'd like to do I think!

~~~
angersock
I apologize for not RTFMing the thing, but does it allow me to:

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.

------
spyder
Why there isn't one word about Firefox in the post? You can completely change
it's UI with javascript and you can use HTML if you don't like XUL.

~~~
spolu
spyder, I digged it quite a lot and felt like the API you get access to using
JS are quite high level and does not give you that much leeway to build
fundamentally new experiences...

------
numeromancer
Maybe this?

[http://uzbl.org/](http://uzbl.org/)

It's a good project that could use a few hands.

~~~
bct
(despite appearances uzbl is not dead, I've just been a rather bad maintainer)

~~~
voltagex_
If you have a little spare time, the following things might help it seem not-
dead:

* 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](http://www.uzbl.org/contribute.php) page - I see "how do I get involved in XYZ" questions here and on Reddit all the time.

~~~
contingencies
And screenshots. Definitely screenshots.

------
talles
I don't want to be a let downer but it seems like a tremendous effort for not
so much. How REALLY different this will be than the current add-
ons/extensions?

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.

~~~
spolu
Hi talles,

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.

~~~
spolu
@hesselink still not built, but what I'd love to do is to be able to log
through my phone into computers running the browser in my vicinity.

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.

------
oscargrouch
I think this is a very cool idea.. it means people can hack and do experiments
with the browser platform.. something the big guys (the one that owns the
browsers and the commites) dont like much we do

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

------
Aqueous
I really like this concept, very much. It seems like a "Dock" for web pages. I
find myself opening up the same page twice in a tab all the time throughout
the day, since my default move once I can't easily find a tab is to open up a
new one. After a few hours I have about 40 tabs open, only a few of which I
have clicked away from and then re-used, and I find myself tempted to close
all of them rather than curate them.

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.

~~~
coopdot
Along with other suggestions, Firefox gives you a suggestion to go to your
previously open tab when you start entering the URL. I use this a lot when
trying to find tabs.

------
Tloewald
The exobrowser might be awesome for experimenting with browser ideas, but if
it takes off it's a gaping security nightmare since now javascript lives
outside the sandbox.

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.)

------
b1daly
I'm amazed so many people can leave their computers on for days. I do audio
production and also run a lot of utilities on Mac OS 10.6 and 10.8. Both of my
computers regularly enter states of non functioning that require reboots
(sometimes more than one) to fix. At least once a day.

------
farmdawgnation
What do you think will be the performance implications of this? My gut feeling
is that straight up C is going to be more performant than JavaScript of any
variety, when both are done correctly.

Also, do you have any ideas yet about how plugins (e.g. flash, webex, etc)
would be handled?

~~~
spolu
\- I still have many issues with the state of the first experiment, UI
responsiveness is not one of them. The rest of the performance are native...
so it seems it's just fine. HTML/JS served and communicating through web-
sockets locally is pretty fast!

\- 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.

------
planckscnst
Many ways that people use browser tabs are a coping mechanism for an
inadequate window manager. My window manager is extremely fast, and provides
tags, which are at a minimum like workspaces or virtual desktops, but are
really much more than that.

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.

~~~
dredmorbius
It's far more than inadequate WMs. I've got a WM that works very well for my
other tasks. For _managing my Web content_ it simply doesn't play.

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.

------
louischatriot
That's a great idea, I'll definitely try!

------
tgandrews
Isn't this just Chrome OS?

~~~
bachback
no

------
CoryG89
Atwood's Law hard at work.

------
dredmorbius
I've also been finding myself increasingly dissatisfied with mainstream
browser offerings. The basic problem: the browser is increasingly becoming a
generalized applications platform (Chrome especially). The main benefit of
this is in providing rapid application deployments and cloud hosting. The
disadvantages are that the browser itself is heavier than lead. Why do I need
1-3 GB of browser to do what 100MB or so worth of mutt can accomplish?

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...](https://plus.google.com/104092656004159577193/posts/7DoF6HTG3dd)

Mozilla readies the browser I wasn't looking for
[https://plus.google.com/104092656004159577193/posts/LR7jubsX...](https://plus.google.com/104092656004159577193/posts/LR7jubsXBgu)

The content problem in brief
[https://plus.google.com/104092656004159577193/posts/ff9HFxzC...](https://plus.google.com/104092656004159577193/posts/ff9HFxzCKzg)

Just installed Readability on my phone Must can haz for laptop.
[https://plus.google.com/104092656004159577193/posts/fVK7aJuB...](https://plus.google.com/104092656004159577193/posts/fVK7aJuBT5Q)

Vaguely related: Video-in-browser very nearly exactly sucks
[https://plus.google.com/104092656004159577193/posts/jBfVhsdD...](https://plus.google.com/104092656004159577193/posts/jBfVhsdDxBB)

------
msoad
New browser for desktop is not a good idea in my opinion. You have to make it
for mobile to make sense. Oh wait, there are many projects that are already
doing that

