5 TechNotes
Cameron Kaiser edited this page 2019-08-24 21:29:57 +00:00

TenFourFox "10.4Fx" was designed to be as close to Mozilla sources as possible, for as long as possible, and in general pretty much anything that applies to Firefox 45 applies to 10.4Fx. However, because of limitations in earlier versions of OS X that we still support, there are some omissions and changes in features that should be noted by users and porters, and 10.4Fx also adds new PowerPC-specific features that are unique.

(This document covers only low-level and system features implemented or different in TenFourFox; new HTML5 and Web-facing features in the FPR releases that don't fall in those categories are not enumerated here.)

  • 10.4Fx only partially supports the Mozilla IPC system, and only insofar as it is needed to build. The actual IPC internals only work between threads and not processes. Electrolysis multi-process support is not implemented due to limitations of the core operating system.

  • Telemetry and crash reporting is disabled.

  • Because of increasingly poor plugin support on Tiger and PowerPC, plugins ship disabled in 10.4Fx 6.0, and no longer function at all in 19.0 and up. This is both for reasons of security (particularly with Flash) and the use of incompatible later OS X APIs. Bug reports related to plugins will not be accepted. See our document on plugin non-support.

  • 10.4Fx, as of 4.0.1pre, uses a modified libvpx with AltiVec to accelerate WebM VP8 video playback instead of the baseline C version in 4.0 and earlier versions (issue 28). The baseline C version is still used for the G3 build, which lacks VMX. The AltiVec VP8 implementation was lifted from an early libvpx build which we have maintained and ported forward.

    • Custom VP9 AltiVec support was added in 45.5.0 (issue 324).
  • MP3 audio support was added using the minimp3 library starting in 31.2 (but due to various streaming bugs was not officially supported until version 38). Starting in version 45.5.0, this support is implemented as a full platform decoder to integrate into Mozilla's MP3 parser-seeker (issue 325).

  • H.264 support (and MPEG-4 video generally) was added using modified ffmpeg libraries starting in FPR14 (issue 550). This support is distributed separately.

  • WebP image support (except, currently, animated images) was added in FPR13 (issue 501).

  • Support for AppleScript automation was added in FPR13 with custom code (issue 164).

  • OpenGL support is disabled in 10.4Fx. This is Apple's fault, as Mozilla requires non-power-of-two texture sizes, which require OpenGL 2. Unfortunately, PPC Tiger does not support OpenGL 2 at all, and only a subset of cards support it in PPC Leopard (the really irritating part is that Intel Tiger does have OpenGL 2, and OpenGL 2 came out in 2004!). Note that many graphics features will work just fine; they just won't be hardware-accelerated.

  • Because there is no OpenGL 2, there is no WebGL. The Linux version of Firefox has a fallback to libOSMesa, which is a software OpenGL rendering library, but this is not a feasible option for 10.4. Furthermore, the libOSMesa that is built-in to 10.4 cannot be used, because it is not OpenGL 2.

  • 10.4Fx offers JavaScript just-in-time compilation with its custom PowerPC backends.

    • Versions from 4.0b9 ending with 9.0 defaulted to a custom PowerPC-enabled nanojit for JavaScript acceleration through tracejit/TraceMonkey (issue 15) using code written for Tamarin by Adobe. This compiler was gradually decommissioned in 10.x, and completely disabled in 10.0.6.
    • Versions from 9.0 ending with 24.0 used its own PowerPC method compiler for JavaScript acceleration through methodjit/JaegerMonkey (issue 96); it became the default compiler in 10.4Fx 10.x, and later fully supported type inference. Methodjit support ended with Firefox 24.
    • Versions from 24.0 ending with 38.0 used PPCBC, a PowerPC-specialized form of Baseline Compiler (issue 224, issue 245). PPCBC introduced improved type guard code and used some components of the previous methodjit macroassembler for regular expressions (through the end of 31.x) and general code generation, but did not support the full IonMonkey compiler.
    • Versions from 38.0 on use IonPower, a PowerPC-specialized form of IonMonkey (issue 178). IonPower uses the PPCBC Baseline Compiler improvements and adds other PowerPC-specific performance modifications to irregexp and other compiler subsystems. It does not support asm.js due to concerns over its utility on big-endian platforms, but is able to run asm.js code in the regular compiler and supports all other features of IonMonkey.
  • 10.4Fx uses a hybrid-endian JavaScript engine to facilitate running asm.js-based code (issue 326). This engine uses little-endian typed arrays by transparently byteswapping integer access, but retains native endianness for jsvals, non-typed arrays, floats and doubles. Support for this mode was added in 45.5.0.

  • All text rendering in 10.4Fx uses Apple Type Services (ATS) and HarfBuzz, an OpenType font shaper. While some portions of code leverage Tiger's private CoreText framework (yes, CoreText is in Tiger too), Tiger's CoreText does not support enough font features to allow Mozilla's built-in CoreText shaper to function correctly. HarfBuzz actually works just fine for the vast majority of cases, and appears to be faster overall to boot, so this is a net win.

    However, installed fonts and scripts that require Apple Advanced Typography features to correctly render, such as Indic and Arabic fonts, may not have correct ligatures or glyph substitution or reordering depending on if HarfBuzz can interpret AAT information encoded in the fonts that come standard with OS X. As a result, although the characters will appear on-screen, they may not be linked or ordered properly; if the site provides an OpenType or Graphite equivalent, however, many scripts may be able to display correctly. Most European and other Asian characters and scripts obviously work fine, of course. For more information, see issue 5.

    Because of the underlying use of ATS for font instantiation and enumeration, certain fonts that may be otherwise compatible with CoreText are filtered using a built-in series of blocklists if they trip bugs in ATS. Starting in 38.0, the browser also implements a font directory cache of installed fonts for higher performance during enumeration.

  • Bitmap-only fonts cannot be rendered by HarfBuzz. 17.0 and up filter them out and select a fallback.