Oberon Object Tiler May 2026
For any object to be tiled, it must implement a minimal interface:
PROCEDURE Draw(obj: Object; frame: Rectangle);
PROCEDURE Handle(obj: Object; VAR msg: Message);
The Handle procedure processes mouse clicks, keyboard input, and resize notifications. The tiler itself never draws – it only calls Draw and forwards input after adjusting coordinates to be relative to the viewer’s origin.
This clean separation allows the tiler to manage geometry while objects manage semantics.
Rob Pike's Acme editor (Plan 9) is directly inspired by Oberon. Acme uses a tiler for text windows. Developers who use Acme swear by the "mouse chording" and tiling workflow. Learning the Oberon Object Tiler is a gateway to Acme.
Tiling invariant: For any two distinct viewers A and B, Intersection(A.frame, B.frame) = empty and Union(all frames) = Screen. Oberon Object Tiler
Split operation (vertical):
Given viewer V at coordinates (x0, y0, x1, y1) and a split coordinate s (x0 < s < x1):
Merge operation:
Given adjacent viewers Vleft and Vright sharing a full vertical edge:
The tiler does not use constraint solvers. Geometry is purely deterministic and explicit.
Why did this matter? Resource constraints. For any object to be tiled, it must
Oberon was designed to run on hardware that today would be considered a calculator. By abandoning overlapping windows (which require complex clipping algorithms and memory for hidden buffer zones), the Object Tiler drastically reduced computational overhead. It allowed a graphical operating system to run snappy and smooth on processors that would choke on a standard Mac or Windows interface.
At its core, the Oberon Object Tiler is a software and hardware-accelerated memory management and rendering technique inspired by the design principles of the Oberon operating system (developed by Niklaus Wirth and his associates at ETH Zurich). However, the modern interpretation goes beyond the original OS.
The "Object Tiler" refers to a specialized allocator and screen-space partitioner that treats every visual element as a first-class object. Unlike traditional renderers that push vertices in a linear stream, the Oberon Object Tiler organizes the screen into dynamic tiles (typically 32x32 or 64x64 pixel blocks). Each object is assigned to the specific tiles it intersects. This tiling occurs not at the application level, but deep within the rendering pipeline, often leveraging GPU compute shaders.
In essence, the Oberon Object Tiler answers three questions simultaneously: The Handle procedure processes mouse clicks, keyboard input,
In an era where modern user interfaces are dominated by stacking windows, overlapping layers, and complex window managers, it is worth looking back at one of the most elegant and radical departures from the norm: The Oberon Object Tiler.
Developed in the late 1980s by Niklaus Wirth and Jürg Gutknecht at ETH Zurich, the Oberon operating system was a masterclass in minimalism. While most of the world was chasing the WIMP (Windows, Icons, Menus, Pointer) paradigm popularized by the Macintosh and Xerox Star, Oberon introduced a text-centric, tiled workflow that was decades ahead of its time.
| System | Overlap | Resize Method | Tiling Granularity | |--------|---------|---------------|--------------------| | Oberon | None | Mouse split/merge | Arbitrary objects | | macOS/Windows | Yes | Drag borders | Whole windows | | X11 tiling WMs | No | Keybindings | Application windows | | Plan 9 rio | Yes (semi) | Menu-driven | File system windows |
Oberon’s tiler is unique in that tiling is not a mode but the only mode, and tiles contain objects not processes.