Many of you have read a certain announcement about the future of Firefox's add-ons and are worried about some extensions, including NoScript, being deeply rooted into those Mozilla's core technologies, such as XPCOM and XUL, which are going to be deprecated.
Developers and users are also concerned about add-ons being prevented from exploring radically new concepts which would require those "super powers" apparently taken away by the WebExtensions API.
I'd like to reassure them: Mozilla is investing a lot of resources to ensure that complex and innovative extensions can prosper also in the new Web-centric ecosystem. In fact, as mentioned by Bill McCloskey, at this moment I'm working within Mozilla's Electrolysis team and with other add-on authors, involved in the design of mechanisms and processes helping developers experiment in directions not supported yet by the "official" the WebExtensions API, which is going to be augmented and shaped around their needs and with their contributions.
I've just published a proposal, tentatively called native.js, to "embrace & extend" the WebExtensions API: all the interested parties are invited to discuss it on discourse.mozilla-community.org.
(tl;dr: There’s a lot going on, and I have some sage, if painful, advice for those who think Mozilla is just ruining your ability to do what you do. But this advice is worth exactly what you pay to read it. If you don’t care about a deeper discussion, just move to the next article.)
The last few weeks on Planet Mozilla have had some interesting moments: great, good, bad, and ugly. Honestly, all the recent traffic has impacts on me professionally, both present and future, so I’m going to respond very cautiously here. Please forgive the piling on – and understand that I’m not entirely opposed to the most controversial piece.
- ECMAScript 6th Edition versus the current Web: I’m looking forward to Christian Heilmann’s revised thoughts on the subject. On my pet projects, I find the new features of ECMAScript 6 gloriously fun to use, and I hate working with JS that doesn’t fully support it. (CoffeeScript, are you listening?)
- WebDriver: Professionally I have a very high interest in this. I think three of the companies I’ve worked for, including FileThis (my current employer), could benefit from participating in the development of the WebDriver spec. I need to get involved in this.
- Electrolysis: I think in general it’s a good thing. Right now when one webpage misbehaves, it can affect the whole Firefox instance that’s running.
- Scripts as modules: I love .jsm’s, and I see in relevant bugs that some consensus on ECMAScript 6-based modules is starting to really come together. Long overdue, but there’s definitely traction, and it’s worth watching.
- Pocket in Firefox: I haven’t used it, and I’m not interested. As for it being a “surprise”: I’ll come back to that in a moment.
- Rust and Servo: Congratulations on Rust reaching 1.0 – that’s a pretty big milestone. I haven’t had enough time to take a deep look at it. Ditto Servo. It must be nice having a team dedicated to researching and developing new ideas like this, without a specific business goal. I’m envious.
- Developer Tools: My apologies for nagging too much about one particular bug that really hurts us at FileThis, but I do understand there’s a lot of other important work to be done. If I understood how the devtools protocols worked, I could try to fix the bug myself. I wish I could have a live video chat with the right people there, or some reference OGG videos, to help out… but videos would quickly become obsolete documentation.
- WebExtensions, XPCOM and XUL: Uh oh.
First of all, I’m more focused on running custom XUL apps via firefox -app than I am on extensions to base-line Firefox. I read the announcement about this very, very carefully. I note that there was no mention of XUL applications being affected, only XUL-based add-ons. The headline said “Deprecration of XUL, XPCOM…” but the text makes it clear that this applies mostly to add-ons. So for the moment, I can live with it.
Mozilla’s staff has been sending mixed messages, though. On the one hand, we’re finally getting a Firefox-based SDK into regular production. (Sorry, guys, I really wish I could have driven that to completion.) On the other, XUL development itself is considered dead – no new features will be added to the language, as I found to my dismay when a XUL tree bug I’d been interested in was WONTFIX’ed. Ditto XBL, and possibly XPCOM itself. In other words, what I’ve specialized in for the last dozen years is becoming obsolete knowledge.
I mean, I get it: the Web has to evolve, and so do the user-agents (note I didn’t say “browsers”, deliberately) that deliver it to human beings have to evolve too. It’s a brutal Darwinian process of not just technologies, but ideas: what works, spreads – and what’s hard for average people (or developers) to work with, dies off.
But here’s the thing: Mozilla, Google, Microsoft, and Opera all have huge customer bases to serve with their browser products, and their customer bases aren’t necessarily the same as yours or mine (other developers, other businesses). In one sense we should be grateful that all these ideas are being tried out. In another, it’s really hard for third-parties like FileThis or TenFourFox or NoScript or Disruptive Innovations, who have much less resources and different business goals, to keep up with that brutally fast Darwinian pace these major companies have set for themselves. (They say it’s for their customers, and they’re probably right, but we’re coughing on the dust trails they kick up.) Switching to an “extended support release” branch only gives you a longer stability cycle… for a while, anyway, and then you’re back in catch-up mode.
A browser for the World Wide Web is a complex beast to build and maintain, and growing more so every year. That’s because in the mad scramble to provide better services for Web end-users, they add new technologies and new ideas rapidly, but they also retire “undesirable” technologies. Maybe not so rapidly – I do feel sympathy for those who complain about CSS prefixes being abused in the wild, for example – but the core products of these browser providers do eventually move on from what, in their collective opinions, just isn’t worth supporting anymore.
So what do you do if you’re building a third-party product that relies on Mozilla Firefox supporting something that’s fallen out of favor?
Well, obviously, the first thing you do is complain on your weblog that gets syndicated to Planet Mozilla. That’s what I’m doing, isn’t it?
Ultimately, though, you have to own the code. I’m going to speak very carefully here.
In economic terms, we web developers deal with an oligopoly of web browser vendors: a very small but dominant set of players in the web browsing “market”. They spend vast resources building, maintaining and supporting their products and largely give them away for free. In theory the barriers to entry are small, especially for Webkit-based browsers and Gecko: download the source, customize it, build and deploy.
In practice… maintenance of these products is extremely difficult. If there’s a bug in NSS or the browser devtools, I’m not the best person to fix it. But I’m the Mozilla expert where I work, and usually have been.
My point in all this is as I said above: we third party developers have to own the code, even code bases far too large for us to properly own anymore. What do I mean by ownership? Some would say, “deal with it as best you can”. Some would say, “Oh yeah? Fork you!” Someone truly crazy (me) would say, “consider what it would take to build your own.”
I mean that. Really. I don’t mean “build your own.” I mean, “consider what you would require to do this independently of the big browser vendors.”
If that thought – building something that fits your needs and is complex enough to satisfy your audience of web end-users, who are accustomed to what Mozilla Firefox or Google Chrome or Microsoft Edge, etc., provide them already, complete with back-end support infrastructure to make it seamlessly work 99.999% of the time – scares you, then congratulations: you’re aware of your limited lifespan and time available to spend on such a project.
For what it’s worth, I am considering such an idea. For the future, when it comes time to build my own company around my own ideas. That idea scares the heck out of me. But I’m still thinking about it.
Just like reading this article, when it comes to building your products, you get what you pay for. Or more accurately, you only own what you’re paying for. The rest of it… that’s a side effect of the business or industry you’re working in, and you’re not in control of these external factors you subconsciously rely on.
Bottom line: browser vendors are out to serve their customer bases, which are tens of millions, if not hundreds of millions of people in size. How much of the code, of the product, that you are complaining about do you truly own? How much of it do you understand and can support on your own? The chances are, you’re relying on benevolent dictators in this oligopoly of web browsers.
It’s not a bad thing, except when their interests don’t align with yours as a developer. Then it’s merely an inconvenience… for you. How much of an inconvenience? Only you can determine that.
Then you can write a long diatribe for Planet Mozilla about how much this hurts you.
Cameron Kaiser: Mozilla's future footgun add-on policy (or, how MoFo leadership is getting it totally wrong)
First, Electrolysis. As mentioned, we won't support it in TenFourFox; we would need to implement a userland spawn implementation for 10.4 from scratch for starters, and I suspect that the overhead required will end up performing substantially worse on old Macs plus the inevitable OS bugs it will undoubtedly uncover. Currently Mozilla is predicting Electrolysis will reach the release channel by Fx43, which I find incredibly optimistic given predictions for Australis which slipped deadline after deadline, but it's clear Electrolysis' public unveiling in the relative near future is inevitable. Once it becomes no longer possible to launch the browser in single-process mode, likely one or two versions after, that's the end of source parity. My suspicion is that it will actually reach release by Fx45, which is the next ESR anyway, and there should be an emergency fallback to single-process that we can exploit to keep us running at ESR parity for the last time.
To facilitate addons in the new e10s world, Mozilla is effectively announcing that XPCOM/XUL-based addons are now deprecated because of their highly synchronous nature. (Technically, they'll be deprecated six months after Electrolysis goes golden master, and completely unsupported and/or incompatible within six months after that, but as far as I'm concerned announcing a future deprecation is the same as deprecating it now.) This sucks because the use of XPCOM and XUL in the Mozilla Suite and later Firefox and SeaMonkey meant easy cross-platform add-ons that could do powerful things like implementing a completely new protocol within the browser. Although jetpack addons will still work, sort of, any jetpack addon that requires chrome features is subject to this policy also. Mozilla will be enforcing this brave new XUL-free world by refusing to sign addons that rely on XPCOM or XUL in this later timeframe, which dovetails nicely with not allowing unsigned addons starting with Firefox 42. (Parenthetically I don't agree with the mandatory signing policy, and if there is a TenFourFox 45 it will disable this feature. I don't port Gecko code for the walled garden, guys, thanks.)
Calling this a footgun and the future death of Firefox is not merely hyperbole. I suspect, and I suspect Mozilla is ignoring the fact, that many Firefox users use it because of the presence of such powerful addons that just can't be replicated in other browsers. Chrome, for example, doesn't have near the functionality because it doesn't expose it, and its addons are much less useful in general. But Mozilla is not content to merely shoot themselves in the foot here; they've emptied the whole magazine into their leg by making the new add-on world based on the almost completely different WebExtensions API. WebExtensions is Blink-compatible, the engine powering Chrome. That means an author can easily create a much less functional addon that runs not only on Firefox but also on Chrome. Yup, you read that right: soon the only functional difference between Firefox and Chrome at this rate will be the name and the source tree. More to the point, many great classic addons won't work in the new API, and some addons will probably never be made to work with WebExtensions.
Riddle me this, Batman Mozilla leadership: if the addons are the same, the features are the same, the supported standards are the same, the interface is converging and Mozilla's marketshare is shrinking ... why bother using Firefox? I mean, I guess I could start porting SeaMonkey, although this announcement probably kicks the last leg out from under that too, but does Firefox itself, MoCo/MoFo's premier browser brand, serve any useful purpose now? Don't say "because it makes the web free" -- people can just go download and compile WebKit, which is open source, well understood and widely available, and they can even usefully embed it, another opportunity Mozilla leadership shortsightedly threw away. They can fork it like Google did. They can throw a shell around it. Where's the Gecko value now?
Maybe this is a sign that the great Mozilla experiment has finally outlived its usefulness. And frankly there won't be much value in a Gecko-based browser or even a Servo-based one that works exactly the same way as everything else; notice the absolute lack of impact Firefox OS is having on mobile, although I use and prefer Firefox Android personally just because I don't trust Chrome. Maybe that trust will be the only reason to keep using Firefox on any platform, because I certainly can't think of anything else.
Meanwhile, this weekend I'm rewriting TenFourFox wiki documentation on Github ahead of the impending read-only status of Google Code. Since this is true Markdown, I'm using Nathan Hill's SimpleMarkPPC since it works pretty well for simple documents of this type and runs on 10.4. I won't be copying over all the old release notes, but starting with 38.3 all future ones will be on Google Code as well. After that we'll work on the MP3 support to finalize it, and I've got a secret project to share hopefully next week.
Let me start out by saying that I understand the need for something like WebExtensions. A cross browser extension API will be a great thing for the future of browsers. I understand why Mozilla is doing it. What I take issue with is the belief that existing Firefox only add-on developers will jump at the opportunity to use this new API. As far as I’m concerned, the only add-on developers that will benefit from this new API are Chrome developers who will find it much easier to port their extensions to Firefox.
Most Firefox extension developers do it as a hobby. Typically they have an itch about something in Firefox and that write an extension to scratch it. Then they make that extension available to everyone. Over time we all build up a set of extensions that make Firefox behave the way we (and clearly other people) want it to. (Chris Finke is a great example of this.) Every so often something changes in Firefox that breaks one of our extensions. At that point we have to make a decision; it it worth the time and energy to keep this extension going. Sometimes we keep it going, sometimes we give up (hence the ton of dead extensions on AMO). Luckily most of the time Firefox changes don’t break all our extensions, so we usually can keep going. With e10s coming up though, lots of developers have had to make decisions as to whether or not it is worth it to rewrite and some developers have gone through that pain (and it is pain - a lot of pain).
Now developers are being told in the next one to two years they will have to completely rewrite ALL of their add-ons. What are the odds that these hobby add-on developers are going to do that?
Let’s be honest. Availability of APIs isn’t the difficult part of the discussion. Availability of time and energy to even attempt to rewrite all of our add-ons is the problem. And when you add in the fact that Mozilla hasn’t given add-on developers the marketplace we’ve been promised for years (which Chrome has had since day one), you’ll end up with a lot of developers deciding that it’s simply not worth it.
But let's talk availability of APIs. I'll use two of my extensions as examples. Keyword Search accesses the wrappedJSObject of search submissions in order to manipulate the submission. Will there really be an API for that? Or what about the CCK2? Will there really be APIs that allow me to modify the built-in preferences pages including removing pages or controls? Or what about disabling private browsing? Or removing sync? Or removing access to about:config? I doubt it. There are just too many things that extensions do (most of them pretty obscure) to be able to provide an complete API.
I'll watch what goes on and hope that I'm wrong, but I'm not very optimistic.
I will say this, though. It's a great day to be a Chrome developer.
Ahmed Nefzaoui: It’s not following chrome, it’s called making the web and the web’s content more compatible
It is safe to say, that Firefox will not be Firefox anymore as far as extensions go, but instead will become yet another Chrome-clone.
A quote from a blog post I read about Firefox as a friend is going to die so I wanted to quickly echo an opinion I have off the top my head without being too technical:
I personally don’t see how implementing a common set of APIs or a spec that the rest of the browser vendors agreed on and implemented is turning Firefox into a chrome-clone.
WebExtensions’ concept is by far implemented everywhere else except in Firefox. So implementing that here is just as beneficial as when W3C publishes a spec about Flexbox or WebRTC or CSS Logical Properties (wink wink) and chrome implements that, and then Firefox implements it too: that. is. not. following. chrome, it’s called making the web and the web’s content more compatible, and if we are to sit in a corner and implement our own exclusive stuff we will only become another Microsoft of year 2000 with its ActiveX technology where the only way to have the luxury of accessing its features is if developers built their websites mainly for IE.
For this episode, Richard Milewski and I figured out the syncing issue I’d been having in Episode 9, so I had my head floating in the bottom right corner while I hacked. Now you can see what I do with my face while hacking, if that’s a thing you had been interested in.
I’ve also started mirroring the episodes to YouTube, if YouTube is your choice platform for video consumption.
So, like last week, I was under a bit of time pressure because of a meeting scheduled for 2:30PM (actually the meeting I was supposed to have the week before – it just got postponed), so that gave me 1.5 hours to move forward with the View Source work we’d started back in Episode 8.
I started the episode by explaining that the cache key stuff we’d figured out in Episode 9 was really important, and that a bug had been filed by the Necko team to get the issue fixed. At the time of the video, there was a patch up for review in that bug, and when we applied it, we were able to retrieve source code out of the network cache after POST requests! Success!
Now that we had verified that our technique was going to work, I spent the rest of the episode cleaning up the patches we’d written. I started by doing a brief self-code-review to smoke out any glaring problems, and then started to fix those problems.
We got a good chunk of the way before I had to cut off the camera.
I know back when I started working on this particular bug, I had said that I wanted to take you through right to the end on camera – but the truth of the matter is, the priority of the bug went up, and I was moving too slowly on it, since I was restricting myself to a few hours on Wednesdays. So unfortunately, after my meeting, I went back to hacking on the bug off-camera, and yesterday I put up a patch for review. Here’s the review request, if you’re interested in seeing where I got to!
I felt good about the continuity experiment, and I think I’ll try it again for the next few episodes – but I think I’ll choose a lower-priority bug; that way, I think it’s more likely that I can keep the work contained within the episodes.
How did you feel about the continuity between episodes? Did it help to engage you, or did it not matter? I’d love to hear your comments!