Open source & building

Building HighWire means building for a platform nobody ships binaries for any more, against libraries that mostly assume a little-endian machine with a modern libc. Several of those libraries need patching before they work at all on a 68k — and those patches lived, for years, scattered across one developer's disk.

This organisation exists so that everything needed to build HighWire is in one place, at the versions it was actually built against. If you want to change the browser and rebuild it, you should not first have to rediscover which libpng release we used, or work out for yourself why AES-GCM fails on big-endian.

The forks, and what we changed

Both are published as forks so the diff against upstream stays visible. Neither has been submitted upstream.

mbedtls — branch highwire-m68k-bigendian

Mbed TLS does not work correctly on big-endian platforms. Three separate bugs, each breaking a different stage of a TLS 1.3 handshake, all still present in upstream 3.6.6:

FileFunctionSymptom
library/bignum_core.cmbedtls_mpi_core_read_le() MBEDTLS_ERR_ECP_INVALID_KEY — X25519 key exchange fails
library/gcm.cgcm_mult_smalltable() MBEDTLS_ERR_SSL_INVALID_MAC — every AES-GCM suite fails
library/bignum_core.hGET_BYTE() RSA certificate signatures verify as garbage

Two of those break the default modern TLS 1.3 configuration, so this affects any big-endian target — PowerPC, SPARC, s390x, MIPS BE — not only m68k.

There is also a trap that is not a patch: 3.6.6 changed the default of MBEDTLS_PLATFORM_DEV_RANDOM from /dev/urandom to /dev/random. On FreeMiNT /dev/random blocks until the entropy pool fills, and a machine idling at a splash screen never fills it — so the application hangs inside psa_crypto_init() with no error and no log line. See HIGHWIRE-BIGENDIAN.md on that branch.

nanosvg

Altered source version, marked as such per the zlib licence. Adds <clipPath> and clip-path="url(#id)" support carried through to the rasteriser, which previously ignored clipping entirely; nested <svg> viewports, so sprite sheets render as intended; and a fix for objectBoundingBox gradient coordinates, which were resolved against the wrong box and came out flat.

Building

You need the m68k-atari-mintelf cross toolchain — GCC targeting ELF for Atari. Thorsten Otto builds and hosts it:

gemlib and cflib come from the FreeMiNT project and are installed separately rather than mirrored here.

The browser source is not yet public.

Credits

HighWire is the work of The HighWire Project.

The browser engine — parser, scanner, renderer, scheduler and layout — and the network overlay modules are substantially the work of Ralph ("AltF4") and Dan ("Baldrick"), built on the original Project HighWire source release by Robert Goldsmith.