It’s been about a month since my last update? Maybe I should post something.
Fiber has been a bit slow moving, partly because I’ve just been slow and hitting other projects, but mostly from toying around with CEF. One prominent issue is the fact that the current crop of CEF examples and samples are using a mix of GTK and X. Many outdated questions and forums on the web bring up Qt and CEF, but with the relatively limited time I have to work on the project it has made things feel slightly more arduous than it needs to be when there’s no answer to the problem. Part of this is the fact that Qt has WebEngine/WebView, so CEF integration is a niche topic. It’s nothing insurmountable, but I might need to accept a temporary dependency on X. This annoys me, but the project needs to move forward and I can’t be stuck spinning my wheels. At the lowest level of the application I will need platform-specific code anyway, I simply wanted to see how long I could avoid it.
Even without the renderer in place, work has started on the basic extension framework which is aiming at getting a “hello world” message from a dummy extension to a simple debugger extension, in both threaded and out-of-process modes toggled on each. The core of this work is the message passing pipeline; since extensions may be threaded or broken out-of-process they need a reliable way of communicating. The diagram below shows the current rollout I’m aiming for;
Every node in the pipeline is based off a generic class abstraction which can daisy-chain together. It is through these paths that the vast majority of Fiber will operate through, and even core services will build off the same message system.
The most interesting aspect of this structure is the “Queues”. Queues keep track of the endpoint status and may “hold” incoming signals for a variety of reasons. This should let us do things like modify extensions on the fly even while other extensions actively use them, letting us potentially update or outright replace them without interrupting service depending on the type of extension. For example, you may replace your entire history system without restarting the browser.
If it looks like the router is going to be a bottleneck, you can fault my diagram; even though my current iteration of the message system involves direct connections to the router, the router will eventually serve as a connection manager broadcasting the various changes only when queues have out-of-date connections. This will let extensions talk semi-directly to each-other without involving the router.
Finally, the pipeline is a “daisy chain” style of operation; nodes can be added anywhere along the line. This is how I plan to add development faculties, where an extension developer can hook into pipelines and convert them to live debugging toolchains, able to do things such as simulate extension crashes, toggle services, flood messages, monitor performance, etc. All of these tools will also work for native components of the browser, as they too will use the message system.
Over the past weeks I’ve read about Epiphany and its recent decision to enable ad blocking by default. For those not in-the-know on Gnome stuff, Epiphany is the Gnome-based browser (equivalent to Rekonq and Konqueror), and for a while now the application has featured an integrated ad blocker. Ad blocking was disabled by default, but the setting has been enabled by default for their 3.8 version. This decision was made because the developers of the application feel the experience is “not as good” when websites can display ads, and they did not see users activating the ad-blocker “enough”.
Since I’m doing the browser thing I’ve been asked by a couple people what my thoughts are, and what I intend to do with Fiber as it eventually matures.
Ultimately I’m fine with ads, they’re a well-known method for site operators earning the sweat of their brow. Many websites don’t have the staff, time, or prominence to use alternative means of income such as sponsored articles or direct user funding.
My opinion on advertising sours greatly when it comes to the topic of tracking and targeting, which I believe is overstepping the line from advertising to stalking. I don’t like going onto Amazon and finding whatever I looked at spilled over to other sites I visit. I’m disturbed when I use a Google service to realise later I’ll be inundated and pressured into purchasing something until my next pushable product becomes apparent. It’s like browsing physical store to find several random people have followed you back out, taking notes on everything you do and observing where else you’ll go – in the real world those people would be arrested for stalking, how is it acceptable online?
It’s a tough situation because I think it’s the right of a website to display the content they want, but it’s the right of the user to decide who they give their information to. This is compounded by the fact that it’s near impossible to keep track of what ad providers you are dealing with, as some sites can use several advertisers in tandem. On a very personal level this has affected what extensions I use day-to-day, and I personally use NoScript now.
So, where does this leave Fiber?
I want Fiber to one day become a ‘legitimate’ browser, the kind which respects the general spirit of the web as a content medium. Part of this is making Fiber a good citizen, and for that reason I have no intention of bundling an ad-blocker, as advertising is part of the web and essential for many sites to function. This does not mean there will not be an ad-blocking solution, but it does mean users will need to consciously install one and there will not be an ‘official’ Fiber ad-blocker.
But tracking users is not legitimate, and its technical possibility along with the transparency of doing it does not make it acceptable. I do intend to eventually ship Fiber with a simplified NoScript or uMatrix-like extension which can be used to block “trackerware”. In my humble opinion the “Do Not Track” header is a bit of a joke as a method of protecting privacy, and it does nothing to stop bad actors from slurping up your data parfait. Some trackers will respect the DNT header, but in all irony those people are also the most likely to respect your data.
I doubt whatever tool I eventually come up with will be as powerful as contemporary solutions as I’ll be aiming to make it approachable for casual users to handle. It would also be initially tuned to its most conservative settings so the web does not appear ‘broken’ to Fiber users, which would give Fiber a bad reputation for unfamiliar users. Ultimately power-users would want a more robust solution, but I think every browser needs at least simple ways of putting users in real control of their data.
Long story short I will not seek to have Fiber specifically block advertisers on a vanilla installation, and I think bundling those tools with a browser is offensive to legitimate advertisers and online businesses. If those advertisers choose to stalk and track users then I will work to ensure privacy is maintained, and at that point it’s the choice of websites to decide who they work with and whether they respect user privacy.
On a final teeny but fun note, the Fiber logo has also been updated a bit.
For those who are wondering “what is it supposed to be?”, the icon is the cross-section of a Fiber-optic cable. You can find several varieties of them, and things like undersea cables can be made of several bundles in bundles which can make a jaw-droppingly pretty motif for such functional designs, and I think really lines up nicely with the mindset of Fiber.