I use Firefox everywhere I can, warts and all, just to avoid the Chromium monopoly. It was actually a huge bummer for me when Edge gave in and switched to Chromium; having a giant like Microsoft support a third browser engine would really have been a boon to the health of the ecosystem.
The real shame is Mozilla cutting back on Firefox development despite being a billion dollar corporation. Google would have had no leverage to push stuff like WEI if Firefox was the dominant browser.
Tbf, they cut back because they thought that, strategically, they needed a competitive mobile OS. Unfortunately, regardless of whether it was the right decision, they then mismanaged development of such OS (particularly on the commercial side).
Not sure in which reality you're living, but FirefoxOS was developed at Mozilla from 2011 to 2016, before any cut back. Mozilla Corp actually grew a lot during that time.
About FxOS being mismanaged, well... you have to understand that if you follow a model where you rely on others for distribution (carriers and open market OEMs), you are bound to their constraints. In that case, it was a chicken and egg situation where selling devices without a WhatsApp app was very difficult, but WA didn't want to develop an app for a new OS until it grew to tens of millions of users.
Then Moz top management lost some key proponents of the project, and the FirefoxOS haters got their wish. I still don't understand why Mitchel Baker didn't agree to support a community based project (like Thunderbird) or try a strong privacy based spin.
> In that case, it was a chicken and egg situation where selling devices without a WhatsApp app was very difficult, but WA didn't want to develop an app for a new OS until it grew to tens of millions of users.
Disclosure: I worked at WA during the FirefoxOS time period as well as when the KaiOS client was developed and launched.
I honestly don't remember the internal sentiment on FirefoxOS, and I don't know if Mozilla ever approached WA to ask for a client. But the public interfaces for apps were insufficient for a WhatsApp client, so that's a bigger issue. The KaiOS client (which afaik, Jio approached FB/WA to ask for) was difficult to build in part because the OS was missing important features for apps, and that takes time and collaboration to get added to the OS and then pushed out to users.
From memory, the major missing interfaces were around access to TCP sockets and ability to run code that accesses the network in response to a (silent) push message that optionally submits a notification for the user. If FirefoxOS didn't have push messaging (I can't remember), then ability to keep a socket open always and post notifications at will would suffice. Arbitrary tcp sockets are needed because the chat protocol is not http based; running code on pushes is required for e2e, so sender names can be populated from the device's address book, and to avoid notification horrors. Horrors include getting a notification about a message you can't read because the client hasn't fetched it yet and getting a notification about messages you've already read; WhatsApps model is the client is the source of truth, and so there's no reason to accept notification horrors that are common with server source of truth systems. e2e was under development for quite some time, so even if the public timelines don't match up, it would be a requirement for supporting new OSes.
For calling, access to UDP sockets would also be needed as well as ability to run native code as the voice codec and data marshalling is in C; although Firefox OS came out before WhatsApp calling. Calling didn't make it to all platforms, and would have been an acceptable thing to defer, IMHO.
Hi! Yes Mozilla approached WA (talks were held with Brian Acton if I remember correctly). We tried various workarounds:
- 3rd party clients. That worked initially, but WA was quite aggressive in breaking them, and once e2ee was added they stopped working.
- we wrote a j2me VM in Javascript (https://github.com/mozilla/pluotsorbet) to run the S40 version :) Perf was not good enough when dealing with java threads.
- we collaborated with a company (OpenMobile) to run the Android app in a container, rendering in a DOM element. That was a pain in term of OS integration, and OpenMobile finally didn't get the distribution agreement from WA.
I implemented the KaiOS additional APIs, basically exposing a subset of libsignal. You're right that there are missing pieces in the web stack for these apps - it's very frustrating that you can't rely on WebCrypto for all the e2ee. Let's hope WebAssembly will fix that!
Yeah, that happened. :/ I was mostly in favor of a light touch, but e2ee would have been a hard cutoff anyway, and we didn't have the desire to make a compliance program for 3rd party clients, so they just got the boot whenever they caused inconvenience. There would usually be a flurry of activity around individual changes, but afaik, third parties saw the writing on the wall when e2ee started showing up.
> - we wrote a j2me VM in Javascript (https://github.com/mozilla/pluotsorbet) to run the S40 version :) Perf was not good enough when dealing with java threads.
Wow, that's impressive! (and kind of terrible!) Were you able to leverage this for other things, I hope?
> - we collaborated with a company (OpenMobile) to run the Android app in a container, rendering in a DOM element. That was a pain in term of OS integration, and OpenMobile finally didn't get the distribution agreement from WA.
I was unaware of this. That's interesting to hear about. I think you're right from your earlier post, that user count would have pushed WA the other way, and that lack of WA support made it harder to get user count. Samsung (Tizen) and Jio (KaiOS) got WA to make clients by subsidizing handsets and leveraging user counts / other business relations; s40 got a client because Nokia was clearly going to sell at least a few million of them (s40 predates WA, of course, but the earlier ones never ran WA); same with WP7, although no client until 7.5, because the platform was missing pieces.
WebOS didn't get a client because the platform was missing pieces and didn't survive long enough to add them (lack of WA support wasn't really an issue, given the timing). MeeGo didn't get a client because Nokia cancelled the N9 before they launched it, and limited the release.