% Generated from content/writing/systemless-translating-the-macintosh-backwards.md by the benletchford.com renderer.
% Any images referenced as images/... can be downloaded from the same
% paths under https://benletchford.com/ (e.g. images/foo.png lives at
% https://benletchford.com/images/foo.png).
\documentclass[11pt]{article}

% Text and mono faces are the site's own CMU fonts (served as .woff under
% https://benletchford.com/fonts/, SIL OFL 1.1; .otf releases at
% https://cm-unicode.sourceforge.io). Without a fonts/ directory, or under
% pdflatex, this falls back to Latin Modern, which is visually near
% identical.
\usepackage{iftex}
\ifPDFTeX
  \usepackage[T1]{fontenc}
  \usepackage[utf8]{inputenc}
  \usepackage{lmodern}
\else
  \usepackage{fontspec}
  \IfFileExists{fonts/cmunrm.otf}{
    \setmainfont{cmunrm.otf}[
      Path=fonts/,
      BoldFont=cmunbx.otf,
      ItalicFont=cmunti.otf,
      BoldItalicFont=cmunbi.otf,
    ]
    \setmonofont{cmuntt.otf}[
      Path=fonts/,
      BoldFont=cmuntb.otf,
      ItalicFont=cmunit.otf,
      BoldItalicFont=cmuntx.otf,
    ]
  }{}
\fi

\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{microtype}
\usepackage[a4paper,textwidth=140mm,textheight=225mm,heightrounded]{geometry}
\usepackage{xcolor}
\usepackage{graphicx}
\usepackage{float}
\usepackage{booktabs}
\usepackage{tabularx}
\usepackage{caption}
\usepackage{fancyvrb}
\usepackage[normalem]{ulem}
\usepackage{titlesec}
\PassOptionsToPackage{hyphens}{url}
\usepackage{hyperref}
% Let long reference URLs break after any character, as xurl does.
\expandafter\def\expandafter\UrlBreaks\expandafter{\UrlBreaks%
  \do\a\do\b\do\c\do\d\do\e\do\f\do\g\do\h\do\i\do\j\do\k\do\l\do\m
  \do\n\do\o\do\p\do\q\do\r\do\s\do\t\do\u\do\v\do\w\do\x\do\y\do\z
  \do\A\do\B\do\C\do\D\do\E\do\F\do\G\do\H\do\I\do\J\do\K\do\L\do\M
  \do\N\do\O\do\P\do\Q\do\R\do\S\do\T\do\U\do\V\do\W\do\X\do\Y\do\Z
  \do\0\do\1\do\2\do\3\do\4\do\5\do\6\do\7\do\8\do\9}

% Palette lifted from static/styles.css.
\definecolor{paper}{HTML}{FBFAF6}
\definecolor{ink}{HTML}{1B1A17}
\definecolor{muted}{HTML}{6F6B63}
\definecolor{rulecol}{HTML}{D7D6D2}
\definecolor{linkblue}{HTML}{2A4D8F}

\pagecolor{paper}
\color{ink}

\hypersetup{
  colorlinks=true,
  linkcolor=linkblue,
  urlcolor=linkblue,
  pdftitle={Systemless: Translating the Macintosh Backwards},
  pdfauthor={Ben Letchford},
}
\urlstyle{same}

\titleformat*{\section}{\normalsize\bfseries}
\titleformat*{\subsection}{\normalsize\bfseries}
\titleformat*{\subsubsection}{\normalsize\itshape}

\captionsetup{font={small,color=muted},labelfont={color=ink,bf},labelsep=period}

\newcolumntype{L}{>{\raggedright\arraybackslash}X}

\setlength{\parindent}{1.7em}
\linespread{1.08}
\frenchspacing
\emergencystretch=2em

\begin{document}

\begin{center}
  {\LARGE Systemless: Translating the Macintosh Backwards\par}
  \vskip 1.1em
  Ben Letchford\par
  \vskip 0.35em
  {\small\itshape\color{muted} 28 June 2026\par}
\end{center}

\vskip 1.6em
\begin{center}
  {\footnotesize\bfseries ABSTRACT}
\end{center}
\vskip -0.4em
\begin{center}
  \begin{minipage}{0.92\textwidth}
    \small Systemless is a ROM-free classic Macintosh runtime for bringing original 68k software back into reach through the modern web.
  \end{minipage}
\end{center}

\vskip 2em

\begin{center}\itshape
Preserving old software as something you can still touch
\end{center}

\noindent The most elegant technology transitions are the ones users barely notice.

By rights, changing CPU architecture should be traumatic. Old binaries stop
making sense. Assumptions about memory, graphics, timing, files, and hardware
turn into historical baggage overnight. Developers have to port. Users have to
wait. Software that worked yesterday risks becoming archaeology tomorrow.

And yet one of the quiet miracles of the Macintosh is that Apple kept moving
the ground under the platform while preserving the feeling that the Mac was
still the Mac (\hyperlink{ref-apple-powerpc-1994}{Apple Computer, Inc., 1994}; \hyperlink{ref-apple-intel-2005}{Apple Computer, Inc., 2005}; \hyperlink{ref-apple-silicon-2020}{Apple Inc., 2020}).

It started on Motorola 68k. Then came PowerPC, then Intel, then Apple silicon.
Each jump could have split the Mac into disconnected eras. Instead, Apple
treated compatibility as a design problem. The architecture changed. The
user's relationship with their software survived (\hyperlink{ref-apple-universal-2009}{Apple Inc., 2009}; \hyperlink{ref-apple-rosetta}{Apple Inc., n.d.-a}; \hyperlink{ref-apple-universal-binary}{Apple Inc., n.d.-b}).

Systemless is inspired by that idea, pointed the other way. Apple used
translation to carry people forward. I am building Systemless to carry old
software back into the present.

\begin{figure}[H]
\centering
\includegraphics[width=0.86\linewidth]{images/systemless/escape-velocity.png}
\caption{Escape Velocity running through Systemless. \href{https://systemless.org/escape-velocity/}{Open it in the live catalog.}}
\end{figure}

\section{Preserved is not the same as alive}

A lot of old software is technically preserved but not actually reachable
(\hyperlink{ref-loc-2013}{Library of Congress, 2013}; \hyperlink{ref-unesco-2003}{UNESCO, 2003}).

It survives as a disk image, a StuffIt archive, a screenshot, a video, or a
memory. With enough patience you can reconstruct the right emulator, find the
right ROM, install the right System version, mount the right image, set the
right display mode, and eventually coax the thing into running.

For historians and retrocomputing specialists, that ritual is part of the
craft. For almost everyone else, it is friction (\hyperlink{ref-kirschenbaum-2008}{Kirschenbaum, 2008}; \hyperlink{ref-meyerson-2017}{Meyerson et al., 2017}).

That matters because software is not just code. Software is behaviour: timing,
sound, layout, input, constraint, surprise. A classic Macintosh game is no more
captured by a screenshot than a film is captured by its poster. Old software
deserves to be played, not merely catalogued.

\section{A runtime, not a museum machine}

Systemless is a high-level runtime for classic 68k Macintosh applications and
games, written in Rust.

The goal is simple to state and hard to do: run original Macintosh software on
modern systems with no Mac ROM, no full classic Mac OS install, and no full
hardware emulation.

Traditional emulators recreate the machine. Systemless recreates the contract.
When old software calls into the Macintosh Toolbox, it is asking for services
(\hyperlink{ref-apple-toolbox-1992}{Apple Computer, Inc., 1992}):

\begin{itemize}
\item Draw this.
\item Load that resource.
\item Open this window.
\item Play this sound.
\item Handle this event.
\item Allocate this memory.
\item Read this fork.
\item Dispatch this trap.
\end{itemize}

Systemless implements enough of those old contracts directly in Rust for real
software to run. That means interpreting 68k code, handling classic Mac OS
A-line traps, and modelling the runtime surfaces interactive software expects:
memory, resources, segments, files, drawing, events, windows, menus, dialogs,
sound, and the small details in between.

At a very high level, the shape is something like this. The 68k interpreter
steps through guest instructions until it sees an A-line opcode. Instead of
jumping into a Macintosh ROM, Systemless decodes the trap and implements the
Toolbox contract in Rust:

\begin{Verbatim}[fontsize=\footnotesize,frame=single,rulecolor=\color{rulecol},framesep=3mm]
fn step(cpu: &mut Cpu, system: &mut Systemless) -> Result<()> {
    let opcode = system.memory.read_u16(cpu.pc())?;

    if opcode & 0xf000 == 0xa000 {
        cpu.advance_pc(2);
        return system.dispatch_trap(Trap::from_opcode(opcode), cpu);
    }

    cpu.execute_68k_instruction(opcode, &mut system.memory)
}

impl Systemless {
    fn dispatch_trap(&mut self, trap: Trap, cpu: &mut Cpu) -> Result<()> {
        match trap {
            Trap::TickCount => {
                cpu.d0 = self.clock.ticks_since_boot();
            }
            Trap::GetResource { kind, id } => {
                let handle = self.resources.load(kind, id, &mut self.memory)?;
                cpu.a0 = handle.address();
            }
            Trap::DrawString { text_ptr } => {
                let text = self.memory.read_pascal_string(text_ptr)?;
                self.quickdraw.draw_string(&text)?;
            }
            Trap::Unknown(opcode) => {
                return Err(Error::UnimplementedTrap(opcode));
            }
        }

        Ok(())
    }
}
\end{Verbatim}

The real runtime has much more bookkeeping around registers, memory handles,
Pascal calling conventions, resource maps, and drawing state. But the central
idea is that a ROM routine becomes an explicit Rust function with the same
guest-visible behaviour.

It is not trying to be a perfect hardware museum. Cycle-accurate emulation is
important, and full emulators will always matter (\hyperlink{ref-kaltman-2025}{Kaltman et al., 2025}). Systemless
aims at a different layer: the guest-visible behaviour that makes the software
feel alive.

\begin{figure}[H]
\centering
\includegraphics[width=0.86\linewidth]{images/systemless/escape-velocity-override.png}
\caption{Escape Velocity Override in the Systemless live catalog. \href{https://systemless.org/escape-velocity-override/}{Open it in the live catalog.}}
\end{figure}

\section{The browser is the new beige box}

The obvious comparison is Rosetta, but the direction is reversed. Rosetta made
old binaries legible to new Macs so users could move forward (\hyperlink{ref-apple-rosetta}{Apple Inc., n.d.-a}).
Systemless makes old Macintosh software legible to the modern web so the past
can move forward with us.

That is why \href{https://systemless.org/}{Systemless.org} is a playable catalog,
not just a demo page. A browser tab is shareable. It works across operating
systems. It can run on a classroom computer, a museum kiosk, a phone, or a
personal website. If old Mac software can reach the browser, it can reach
almost anyone.

Mobile makes the translation question sharper. A game that expected arrow
keys, space, tab, mouse input, and a menu bar should still be treated as that
game. Touch controls belong around the artifact, not inside it. The platform
changes; the software's identity is protected.

\begin{figure}[H]
\centering
\includegraphics[width=0.86\linewidth]{images/systemless/marathon.png}
\caption{Marathon, playable through Systemless. \href{https://systemless.org/marathon/}{Open Marathon in the live catalog.}}
\end{figure}

\section{Preservation has boundaries}

There is an important line here. Systemless is a runtime. It does not ship
commercial games, applications, Mac ROMs, or Apple system software. The goal is
playable preservation, not repackaging other people's work without permission.

Old software deserves a future, but that future has to be built carefully. The
runtime can be open, inspectable, and useful. The software that runs inside it
should be sourced legally, preserved responsibly, and treated with respect.

\section{Why it matters}

Nostalgia is part of this, but nostalgia alone is not enough.

Classic Mac software teaches things modern software often hides. You can see
the economy of memory, the clarity of small interfaces, the personality that
emerged from limited colour, resolution, storage, and CPU time. The constraints
are visible, and that makes the work worth studying.

Students should be able to open these programs. Designers should be able to
feel how they move. Engineers should be able to inspect the assumptions they
were built on. Players should be able to enjoy them without first earning a
degree in retrocomputing.

A screenshot can show what something looked like. A runtime can show what it
was.

Systemless is still early. It is not perfect, it is not finished, and it will
not cover every strange edge case of the classic Macintosh world. But it
already proves the important thing: real 68k Macintosh software can run through
a modern Rust runtime, render in a browser, take input, and be shared.

Apple showed that software can survive an architecture change when the
transition is treated as a first-class design problem. Systemless tries to
honour that lesson backwards: not to move yesterday's users onto tomorrow's
hardware, but to move yesterday's software into tomorrow's memory
(\hyperlink{ref-apple-powerpc-1994}{Apple Computer, Inc., 1994}; \hyperlink{ref-apple-universal-2009}{Apple Inc., 2009}; \hyperlink{ref-apple-silicon-2020}{Apple Inc., 2020}).

\section{Get involved}

Systemless is open source at
\href{https://github.com/benletchford/systemless}{github.com/benletchford/systemless}.
If you care about old Mac software, Rust runtimes, preservation, or the small
historical details hidden in old applications, contributions are welcome.
Compatibility reports, catalog notes, archival leads, bug reports, tests, and
careful pull requests all help the runtime learn more of the Macintosh
contract.

\par\vspace{1.3em}\noindent\rule{0.38\linewidth}{0.4pt}\par\vspace{0.7em}
\noindent \emph{Systemless is an independent preservation project and is not affiliated with
Apple Inc.}


\vskip 2.2em
\pdfbookmark[1]{References}{references}%
{\centering\normalsize\bfseries References\par}
\vskip 0.2em
\begingroup\small
\setlength{\parindent}{-1.75em}\setlength{\leftskip}{1.75em}\setlength{\parskip}{0.45em}
\hypertarget{ref-apple-toolbox-1992}{}Apple Computer, Inc. (1992). \emph{Inside Macintosh: Macintosh Toolbox Essentials}. Addison-Wesley. \url{https://developer.apple.com/library/archive/documentation/mac/pdf/MacintoshToolboxEssentials.pdf}\par
\hypertarget{ref-apple-powerpc-1994}{}Apple Computer, Inc. (1994). \emph{Introduction to PowerPC system software}. In \emph{Inside Macintosh: PowerPC system software}. \url{https://developer.apple.com/library/archive/documentation/mac/pdf/PPC_System_Software/Intro_to_PowerPC.pdf}\par
\hypertarget{ref-apple-intel-2005}{}Apple Computer, Inc. (2005, June 6). \emph{Apple to use Intel microprocessors beginning in 2006}. Apple Newsroom. \url{https://www.apple.com/newsroom/2005/06/06Apple-to-Use-Intel-Microprocessors-Beginning-in-2006/}\par
\hypertarget{ref-apple-universal-2009}{}Apple Inc. (2009). \emph{Universal Binary Programming Guidelines, Second Edition}. Apple Developer Documentation Archive. \url{https://leopard-adc.pepas.com/documentation/MacOSX/Conceptual/universal_binary/universal_binary_intro/universal_binary_intro.html}\par
\hypertarget{ref-apple-silicon-2020}{}Apple Inc. (2020, June 22). \emph{Apple announces Mac transition to Apple silicon}. Apple Newsroom. \url{https://www.apple.com/newsroom/2020/06/apple-announces-mac-transition-to-apple-silicon/}\par
\hypertarget{ref-apple-rosetta}{}Apple Inc. (n.d.-a). \emph{About the Rosetta translation environment}. Apple Developer Documentation. Retrieved June 28, 2026, from \url{https://developer.apple.com/documentation/apple-silicon/about-the-rosetta-translation-environment}\par
\hypertarget{ref-apple-universal-binary}{}Apple Inc. (n.d.-b). \emph{Building a universal macOS binary}. Apple Developer Documentation. Retrieved June 28, 2026, from \url{https://developer.apple.com/documentation/apple-silicon/building-a-universal-macos-binary}\par
\hypertarget{ref-kaltman-2025}{}Kaltman, E., Schwaid-Lindner, W., Jonathan, D., Borman, A., Garnett, A., \& Masinter, L. (2025). \emph{An overview of emulation as a preservation method}. Council on Library and Information Resources. \url{https://www.clir.org/pubs/reports/an-overview-of-emulation-as-a-preservation-method/}\par
\hypertarget{ref-kirschenbaum-2008}{}Kirschenbaum, M. G. (2008). \emph{Mechanisms: New media and the forensic imagination}. MIT Press.\par
\hypertarget{ref-loc-2013}{}Library of Congress. (2013). \emph{Preserving.exe: Toward a national strategy for software preservation}. National Digital Information Infrastructure and Preservation Program. \url{https://digitalpreservation.gov/documents/PreservingEXE_final.pdf}\par
\hypertarget{ref-meyerson-2017}{}Meyerson, J., Vowell, Z., Hagenmaier, W., Leventhal, A., Rios, F., Roke, E. R., \& Walsh, T. (2017). The Software Preservation Network (SPN): A community effort to ensure long term access to digital cultural heritage. \emph{D-Lib Magazine, 23}(5/6). \url{https://doi.org/10.1045/may2017-meyerson}\par
\hypertarget{ref-unesco-2003}{}UNESCO. (2003). \emph{Charter on the preservation of the digital heritage}. \url{https://www.unesco.org/en/legal-affairs/charter-preservation-digital-heritage}\par
\endgroup

\end{document}
