Saturday, March 19, 2016

The practicality of the case for TenSixFox

After Mozilla's announcement that 10.6-10.8 support is ending, Dan Knight posted two articles on LowEndMac regarding whither a "TenSixFox," both for and against.

TenFourFox gets cited a lot as a successful example of a community-driven Firefox fork (to Tiger PowerPC, for those on our syndicated sites who are unfamiliar), and we're usually what gets pointed to when some open-source project (including Firefox) stops supporting a platform. However, even though we have six years so far of successful ports in the can, we're probably not a great example anymore. While we've had major contributors in the past -- Tobias and Ben in particular, but others as well -- and Chris T still volunteers his time in user support and herds the localizer cats, pretty much all the code and porting work is done entirely by yours truly these days. It's just not the community it was, and it's a lot of work for me personally. Nevertheless, our longevity means the concept of a "TenSixFox" gets brought up periodically with expectations of the same success, as Dan did in his first piece, and as a result a lot of people assume that our kind of lightning will simply strike twice.

Unfortunately, even if you found someone as certifiably insane highly motivated as your humble narrator willing to do it, the tl;dr is that a TenSixFox can't be accomplished in the same way TenFourFox was. Restoring 10.4 compatibility to Firefox is, at the 50,000' level, a matter of "merely" adding back the code Mozilla removed to the widget and graphics modules (primarily between Firefox 3.6 and 4, though older code has been gradually purged since then). The one thing that could have been problematic in the beginning was font support, since Tiger's CoreText is inadequate for handling text runs of the complexity required and the ATSUI support had too many bugs to keep it working, but Mozilla solved that problem for us by embedding a font shaper for its own use (Harfbuzz) which we adopted exclusively. After that, as versions ticked along, whatever new features they introduced that we couldn't support we just ruthlessly disabled (WebGL, WebRTC, asm.js, etc.), but the "core" of the browser, the ability to interpret JavaScript, display HTML and handle basic chrome, continued to function. Electrolysis fundamentally changes all of that by introducing a major, incompatible and (soon to be) mandatory change to the browser's basic architecture. It already has serious issues on 10.6 and there is nothing that says those issues are fixable or avoidable; it may well be impossible to get multi-process operational on Snow Leopard without significant showstoppers. That's not a recipe for continued functionality, and there is no practical way of maintaining single-process support once it disappears because of how pervasive the changes required will eventually be.

Plus, there's another technical problem as well. Currently Firefox can't even be built on 10.6; as of this writing the minimum supported compiler is clang 4.2, which means Xcode 4.6 at minimum, which requires 10.8. This isn't a showstopper yet because cross-building is a viable if inconvenient option, but it makes debugging harder, and since 10.8 is being dropped too it is probable that the Xcode minimum requirement will jump as well.

So if you're that nuts enthusiastic, and you have the chops, what are your options?

Option 1 is to keep using TenFourFox on Rosetta, with all the performance and functionality limitations that would imply. Let me reiterate that I don't support Intel Macs and I still have no plans to; this project is first and foremost for Power Macs. I know some of you do run it on 10.6 for yuks and some of you even do so preferentially, but there's not going to be another Intel build of TenFourFox unless someone wants to do it themselves. That brings us to ...

Option 2 is to build TenFourFox natively for 10.6. I currently only support linking against the 10.4 SDK because of all the problems we had trying to maintain a codebase linkable against 10.4 and 10.5 (Tobias used to do this for AuroraFox but that support is long gone). Fortunately, Xcode 3 will still allow this and you can build and debug directly on a Snow Leopard system; plus, since the system minimum will be 10.6 anyway, you'll dodge issue 209 and you have the option of 10.5 compatibility too. You'll have to get all the MacPorts prerequisites including gcc 4.8, enable the x86 JIT again in JavaScript and deal with some of our big-endian code for fast font table enumeration and a couple other things (the compiler will throw an error so you'll know where to make the changes), but the rest of it should "just work." The downside is that, since you are also linking against the 10.4 SDK (regardless of your declared minimum OS support), you'll also have all the limitations of TenFourFox because you're actually porting it, not Firefox (no WebGL, no plugins, no WebRTC, no CoreText shaper; and, because we use a hybrid of Carbon and Cocoa code, you're limited to a 32-bit build). On the other hand, you'll get access to our security updates and core improvements, which I plan to keep making for as long as I personally use TenFourFox, so certain things will be more advanced than the next option(s), which are ...

Option 3 is to keep building 45ESR for 10.6 after 45ESR support terminates by continuing to port security updates. You won't need to make any changes to the code to get the build off the ground, but you'll need both 10.6 and 10.8 systems to debug and build respectively, and every six weeks you'll have to raid the current ESR branch and backport the changes. You won't get any of the TenFourFox patches and core updates unless you manually add them yourself (and debug them, since we won't support you directly). However, you'll have the option of a 64-bit build and you'll have all the supported 10.6 features as well as support for 10.7 and 10.8.

Finally, option 4 is to keep building firefox-release after 45ESR for 10.6 until it doesn't work anymore. Again, you'll need both 10.6 and 10.8 systems to be effective. This option would get you the most current browser in terms of technology, and even if Electrolysis is currently the default, as long as single-process mode is still available (such as in Safe Mode or for accessibility) you should be able to hack the core to always fall back to it. However, now that 10.6-10.8 support is being dropped, you'll have to undo any checks to prevent building and running on those versions and you might not get many more release cycles before other things break or fail to build. Worst of all, once you get marooned on a particular version between ESRs you'll find backporting security patches harder since you're on a branch that's neither fish nor fowl (from personal experience).

That's about the size of it, and I hope it makes it clear TenFourFox and any putative TenSixFox will exist in very different technological contexts. By the time 45ESR support ends, TenFourFox will have maintained source parity with Firefox for almost seven years and kept up with most of Gecko's major technology advancements, and even the very last G5 to roll off the assembly line will have had 11 years of support. I'm pretty proud of that, and I feel justifiably so. Plus, my commitment to the platform won't end there when we go to feature parity; we'll be keeping a core that can still handle most current sites for at least a couple years to come, because I'll be still using it.

TenSixFox, on the other hand, even if it ends up existing, will lack source parity with Firefox just about from its very beginning. It's not going to be the technological victory that we were at our own inception in 2010, and it's not likely to be the success story we've been for that and other important reasons. That doesn't mean it's not worth it, just that there will be some significant compromises and potential problems, and you'd have to do a substantial amount of work now and in the future to keep it viable. For many of you, that may not be worth it, but for a couple of you, it just might be.


  1. This is undeniably a "Where there's a will, there's a way" type of proposition. So perhaps the biggest strength of PowerPC is the love of its fans, rather than the architecture itself.

    The need to be eccentric and enjoy 'different'. In the case of PPC, this has served in many instances; You once called it "Security by Obscurity". And its "don't think about it, do it" way of processing that always feels like it has elbow-room, even if when it probably doesn't. The big question will be does a world of identical aluminum 'Cybermen' IntelMacs (abominations) have the love of their owners, that decades of shiny plastic earned (PowerMac G5's not to be dissed)?

  2. Please Mozilla, stop wasting precious resources on EOLed OS versions. You're doing the same nonsense with Windows XP.

  3. I hope that someone might decide to carry the torch for a "TenSixFox" browser. I know I'd certainly use it (and I'll definitely take my chances with TenFourFox in Rosetta if that's what it comes down to).

    I can only speak for myself, though I suspect a lot of the holdouts running 10.6 even today are doing so because they don't care for "features" introduced in later versions of Mac OS X, such as the removal of Rosetta support or the "versioning" file system introduced in 10.7. I still have some PPC native software that I use (it works and is paid for, or no native Intel version exists) and I'd really rather manage my files myself rather than being exposed to an inconsistently implemented idea of a versioning file system.

    I'm stuck on 10.6 for another reason: that of iMovie '06, Quicktime 7 and the Perian components. My video editing workflow as it was depended heavily on these things, and Apple utterly destroyed what was probably one of the best little video editors ever.

    Right now my primary use 2009-era Macbook is rather broken, so it's out of use at the moment and these issues don't matter nearly as much.

    A sad commentary here is that an unofficially patched Windows 2000 can *still* run contemporary versions of Firefox with Electrolysis enabled. (Whether it really works or not I don't know. I've enabled Electrolysis in nightly builds and have never seen any evidence even on fully supported platforms that it's actually spawning multiple browser processes as Chrome does.)

    Unfortunately, I'm not a software developer and I've never been able to work up the aptitude nor the interest in doing so, so it can't be me.

  4. Option 2, please. I have an old Mac Pro and a Mac mini that cannot go above Snow Leopard, and they are otherwise useful machines.

  5. Fun fact: I'm using the FF Developer Edition (currently v47.0a2) on 10.6, w/ e10s disabled by default, of course, and it works like a charm.
    (Okay, except for the occasional web font that refuses to render correctly, it's always FF on 10.6 that is having such troubles b.t.w, the same fonts will render perfectly on 10.5 with TFF, or on 10.6 w/ either Safari or Chrome.)

  6. I honestly don't know anybody who has the stamina/will to do what you're doing with something as massive as Firefox. I certainly don't have the patience. Many thanks to you for your work over the last 6+ years, and kudos/good luck to whoever wants to undertake the nearly thankless task of holding the torch for TenSixFox.

    1. Yep, While PC users (gamers usually) constantly bash us because we're "slow" because we "can't run past 3GHz", ClassicHasClass, you where always there. You & Tobias proved that having the latest tech didn't matter; What did matter was the amount of optimization in the code. Hell, I'm willing to bet a PS3 with your code optimizations is capable of playing a game just as well as a PS4. Thanks for the many years of service, even if the project will hit a brick wall eventually.

  7. I'm running Firefox Developer Edition 47 on Snow Leopard, with Electrolysis. It works perfectly.

    The only issues I have on 10.6 are rather minor: Memory consumption is a little worse, and the Browser slows down after it runs very long (many days). Restart the browser from time to time and everything works smoothly.

    What are the issues they are talking about? Why should it be impossible to buildt post 45ESR versions for 10.6? They already do it with the Developer Edition.

    Did I miss something? I'm a little confused.

    1. So, here's more confusion: just upgraded to FF46 on Snow Leopard, and to FF47.0a2 (2016-04-25) respectively …

  8. According to Sören Hentzschel's Firefox-Blog, support will end in August 2016. That would be FF47's release date.

  9. Update from Mozilla:
    So everybody who accidentally or deliberately upgrades to FF46 & 47 respectively should keep a backup of his or her FF45 profile, as they'll have to downgrade to 45ESR afterwards ...

  10. I miss the old times a bit, when programs were thought through with a bit more of portability in mind.

    It's some amazing work you do. I wish I knew how to code. =)


  11. Hello
    I have an eMac with 10.5 install mac os ten fox , but can not display pages because the certificate seguriad of them is defeated. I can not see gmail or google or youtube. They know how this feature is turned off
    Thank you

  12. ... one more update: FF48 will still work on Snow Leopard. Which makes sense, given the fact that the FF48 dev edition currently works. But it is going to be the final version.


Due to an increased frequency of spam, comments are now subject to moderation.