The Aleph One app icon

A fork of Aleph One, the open-source engine that plays Bungie's Marathon, Marathon 2 and Marathon Infinity. One Aleph One.app holds four CPU slices and macOS picks the right one at launch. The same download runs natively on a 1999 Blue and White G3 on Mac OS X 10.3.9 and on an M-series Mac on the current macOS. All three games' data ships inside the app, so there's nothing else to install.

The engine and game data are other people's work (see credits). The porting was done with AI (Claude Code) under my direction, and I tested the builds on the machines.

# Get the build

Download the .dmg from the releases page and drag Aleph One.app to Applications, or run it straight off the mounted image. The data for Marathon, Marathon 2 and Marathon Infinity is bundled in. Bungie released it for free, so there's nothing else to buy.

# Which Macs

Slice Minimum OS Covers
ppc 10.3.9 G3, G4, G5 (no AltiVec assumed)
i386 10.4.4 Early Intel Macs (Core Duo/Solo) through 10.14
x86_64 10.6 Core 2 Duo and later, current macOS
arm64 11.0 Apple Silicon (M1 and later), current macOS

Two of those floors aren't proven yet, because there's no Intel Mac on 10.4 or 10.5 to test on. The i386 slice is built for 10.4.4 but has only been run on Lion (#30). The x86_64 slice was meant to reach 10.5 but needs 10.6 as it stands (#31).

It's been tested on a G3 (10.3.9 and 10.4.11), a G4 Mac mini (10.4.11), a G5 (10.3.9, 10.4.11 and 10.5.8), Core 2 Mac minis on 10.6.8 and 10.7.5 (running i386 through arch -i386 as well as x86_64), a 2019 iMac on macOS 15 and an M5 Mac on macOS 26. I've played it by hand on the G3 and the G5.

arm64 uses the engine's current dependency versions. The other three slices use the pinned versions below.

Diagram: one fork builds four CPU slices, ppc, i386, x86_64 and arm64, which lipo fuses into one Aleph One.app
One fork, four slices, one app

# Graphics

OpenGL is the default renderer on every slice. The code picks between two OpenGL renderers at startup (screen.cpp):

  • The shader renderer, when the driver reports the GLSL extensions.
  • The classic fixed-function renderer, when it doesn't, or when the GPU name contains "Radeon 9600" or "GMA 950". Both of those report GLSL support but ran the shader renderer at 1 fps or less when measured.

If the game can't create an OpenGL window it retries in 16-bit colour, then falls back to the software renderer. The software renderer can also be picked by hand in Preferences → Graphics.

On first run the frame rate and texture filtering defaults come from what the GPU reports (apply_first_run_gl_tier). An existing preferences file is never changed.

GPU reports Frame rate Anisotropic filtering
No framebuffer objects, or a software GL 30 fps Off
Classic renderer with framebuffer objects (the Radeon 9600) 60 fps Off
Shader renderer with framebuffer objects 60 fps 4x
As above, with a maximum texture size of 8192 or more Display refresh rate 16x

The GMA 950 is still slow on the classic renderer, at about 7 fps in the Marathon 2 demo on a Core 2 Mac mini.

# Multiplayer

The client has a "Use Custom Server Address" option in the network game setup (network_dialogs.cpp). You can use it to gather a game on your own standalone_hub, Aleph One's headless server, as well as through the official public server list. It's been tested with a PowerPC Mac and an Intel Mac playing through a hub on Linux.

# Dependency pins

The ppc, i386 and x86_64 slices pin two dependencies to older versions:

Dependency Version Why not latest
boost 1.76.0 1.90 fails to build on PowerPC
openal-soft 1.23.1 1.24+ added AltiVec SIMD that's broken on big-endian hardware

# How it is built

The three older slices build on two Core 2 Mac minis running Lion. ppc and i386 cross-compile with pinned GCC 14 toolchains, and x86_64 builds with GCC 7.5. The i386 slice links a static SDL2 2.0.3 so it can reach 10.4. arm64 builds natively on my Apple Silicon Mac, which also fuses all four slices with lipo and packages the DMG.

Changes are made by Claude Code under my direction, then built, installed and run on the test Macs.

# Bugs found on the hardware

Every fix is logged in BUGFIXES.md. Two of them:

The PowerPC build crashed on every launch under Leopard. GCC 14 miscompiled an indirect call in boost's case-insensitive string comparison, which runs on every config file load. The build patches boost to use a plain ASCII comparison instead.

Disk images wouldn't mount on Panther, because hdiutil uses a GPT partition table by default and Panther can't read GPT. The DMG is now built with -layout SPUD, the classic Apple Partition Map.

# Credits

  • The Aleph One project and everyone in its AUTHORS file, whose engine this builds on.
  • Bungie, who wrote the original Marathon trilogy and released its game data for free, which is what lets this ship complete with no separate purchase.

This is an independent fork, not affiliated with the Aleph One project. Report problems on its own issues page, not on upstream's. GPL v3, same as upstream.

# Tech stack

C C++ GCC 14 GCC 7.5 OpenGL PowerPC i386 x86_64 arm64 SDL2 boost Bash lipo