Oberon Computing Systems

                " ... simple as possible, but no simpler."   ... A. Einstein

"Computing Systems" includes multiple aspects.[1] For an overview of these systems, begin with the Wikipedia article. For authoritative documents see Bibliography and References. For other uses of the name Oberon, refer to the disambiguation page.

The Oberon subsystem in UnixAos on an XO-1.5.


A novice interested to learn computing from the foundations will appreciate the freedom from overwhelming and unnecessary complexity imposed by other systems. The more advanced user will find an efficient tool with complete sources allowing study in depth. The system engineer might adapt Oberon to specific requirements such as intensive computation, big data computation and automation.

Typical usage progresses through these stages.

  1. Installation
  2. Configuration
  3. Production
  4. Bug repair
  5. Customization and development

The reader should install and use at least one Oberon system. As preparation, an introductory course covering programming basics is advantageous but not essential.

Most of the wiki boilerplate is eliminated in the "Mobile view" available with a link at the foot of a page. This is particularly helpful if taking a copy of a source Text.

System CharacteristicsEdit

Oberon was developed as a stand-alone personal workstation and remains viable in that capacity. The system was designed to attain compactness, comprehensibility, efficiency, reliability, responsiveness,[2] security and simplicity. The extreme compactness is immediately evident to a novice installing ETH Oberon on a bare PC. The complete system including applications, documentation, graphical interface, fonts and source texts was installed from ten HD diskettes[3]. For the contemporary perspective refer to Use Cases.

This BookEdit

An Oberon system comprises a collection of modules and this book presents one module per page[4]. An example is Sort.Mod from ETH Oberon. Additionally there are Tool pages, each of which is a template of executable commands. An example is Sort.Tool. A system building Tool is a template for rebuilding the entire system, including system installer and module packages.

Contributors are listed in the Hall of Fame/Contributors page. Also linked under Local Pages below.

Historical PerspectiveEdit

The Rechenzentrum (RZ, Data Center) at the ETH Zurich, birthplace of Oberon.[5]

Following development of the programming languages Euler, Algol W, Pascal, Modula and Modula-2, Niklaus Wirth proceeded to create the Oberon language (language report) with original release occurring in 1986. The language design was driven by the wish to design an operating system similar to the OS of the Alto and the insight that Modula-2 did not have the required language construct, which we would now call type inheritance. Wirth chose the other viewpoint and called it type extension. Beside other syntactic differences, which were mainly simplifications, type extension is the major difference between Modula-2 and Oberon. Having met at Xerox PARC, Wirth collaborated with Jürg Gutknecht to build a complete operating system written in the Oberon language. This system was also named Oberon. The distinction between language and system is usually obvious from the context where the term appears.

In subsequent developments, small syntactical changes created various dialects of the language (Oberon-2, Component Pascal, Active Oberon, and Oberon-07), with compatibilities and incompatibilities. Variants of the operating system also evolved, again entailing small incompatibilities. The four most prominent of these OS flavors are

  • ETH Oberon (formerly System 3, S3) is written in Oberon-2[6].
  • V4 Oberon (aka Linz-Oberon) basically written in Oberon but with many extensions in Oberon-2
  • AOS (aka Bluebottle and A2) written in Active Oberon, and
  • Oberon V5, described in Wirth's Project Oberon, 2013 Edition and written in Oberon-07.

With reasonable effort, incompatibilities can always be resolved to allow shift of source text from one system to another.

Oberon genealogy. Click to enlarge. SVG is rendered from the DOT source.

Beside being a stand-alone operating system, Oberon has been implemented as an emulated operating system atop other systems, decades before virtualization became a buzz-word.

The most prominent of these emulated Oberon Systems was Oberon V4, which was implemented on top of SunOS 1 & 2, Ultrix, Irix, AIX, MacOS 7,8,9 (both 68K and Power PC), AmigaOS, TOS (Atari), OS/2, Microsoft Windows, HPUX, and (of course) Linux[7]. Oberon V4 was sometimes also called Linz-Oberon, due to the fact that it was maintained by the group around Hanspeter Mössenböck, who joined the faculty at JKU Linz in 1994. But also System 3 was implemented on top of another operating system for MacOS (68K and PowerPC), SunOS (SPARC and x86), and Microsft Windows. A2 is running as an emulated OS on Microsoft Windows, Linux, and Solaris (x86). In 2015 Peter Matthias revitalized System 3 under the name "Oberon Linux Revival" (OLR) as a multi-platform proof of concept running both in framebuffer-mode and in the X-Window System on X86, Mips, and ARM hardware under Linux.[8]

Refer to the articles about the language and about the OS for further details and to find references to the extensive literature.

System VariantsEdit

The Oberon system runs directly on several machine architectures and as a subsystem in several host operating systems. Order of rows is approximately chronological. For each variant (row), a link in the second column leads to additional information.

Host Environment[9] Software Source dialect Installation
Ceres workstation

preserved Ceres
preserved Ceres
photo of Ceres 3

The Oberon System; V1 and V2 Oberon Hypothetically, a Ceres system can be built with a FPGA and wire wrap.[10]
X86 PC with MS-DOS or compatible OS Oberon for PC on an MS-DOS Base(PDF), Dis93 Sourceforge
README.TXT for System 3, Release 2.0 at Sourceforge,
and at Github
Bare X86 PC[11] ETH Oberon, formerly PC-Native Oberon or System 3.
Oberon-2 SourceForge ETHZ, actual diskettes

Hypervisor using diskette images.
Oberon Tutorials at YouTube[12]

X86 PC with MS-DOS or compatible OS DOS Oberon System3, Version 2.0, Dis93[13] SourceForge
X86 PC with MS Windows ETH Oberon for Windows[14] Github[15] readme.txt
HP Alpha [aka DEC AXP] with OpenVMS 64 bit (Linz-)Oberon System, V4 modulaware.com OpenVMS Alpha
X86, ARM, ARMv7,
RISC-V or MIPS with Linux
Oberon Linux Revival, OLR[16]; sources following ETH Oberon closely. P. Matthias
X86 PC with Linux, UltraSPARC with Solaris or Sun3 with SunOS Ulm Oberon HTTP server at UUlm HTML page and manual pages in the downloads
X86 PC with Linux[17] Linz-Oberon, V4 olymp.idle.at[18],
JKU Linz and
INSTALL at olymp.idle.at,
X86 PC with MS Windows[17] Linz-Oberon, V4 JKU Linz and
X86 PC with Windows or with *nix and Wine BlackBox Component Builder, an IDE for Component Pascal BB Community download area
.NET and CLI Gardens Point Component Pascal, GPCP application for .NET and CLI[19] Current project at github
Original site from Archive.org
JVM Gardens Point Component Pascal application for JVM[19] Current project at github
Original site from Archive.org
Linux-386, Rasbian, Windows Ofront Oberon to C translator github
Linux, OS X or MS Windows Eigen Compiler Suite Releases Florian Negele: User Manual
Subsystem for Blackbox Ofront+ Oberon to C translator various Oberon dialects github
Bare X86 PC A2
Bluebottle = AOS = A2 in Wikipedia
Active Oberon SourceForge Contemporary instructions[20]
X86 PC with Solaris,
Linux or MacOSX (Darwin).
= UnixA2
Uni-Bremen, G. Feldmann Uni-Bremen, G. Feldmann
X86 PC with A2 or UnixA2 or WinA2 Oberon subsystem of A2 Included in A2, UnixA2 and WinA2
FPGA RISC Oberon V5 in Wikipedia, V5 page here Oberon-07 N. Wirth
P. Reed
Android, Linux,

Mac OS X, Unix or
MS Windows on a wide variety of machines[21]

V5 Emulator written in C. P. De Wachter
Unix command line Norebo, a software allowing
execution of an Oberon
command without the Oberon
system and interface.[22]
P. De Wachter
Oberon RISC processor or emulation of it[23] Extended Oberon A. Pirklbauer
Web browser Emulator written in JavaScript. Michael Schierl
Web browser Emulator written in Java.
Linux or Mac OS Integrated Oberon with an emulator written
in the Go programming language.
Charles Perkins
or MIPS running Linux
Project Oberon Linux, POL;
installed on Linux.
P. Matthias
JVM Oberonc compiler for Oberon-07.[24] L. Boasso
Any system capable of running QEMU qemu-risc6 fork of QEMU Charles Perkins.
Any system capable of running BlackBox Component Builder Oberon-07 compiler written in Oberon-2. Alexander V. Shiryaev
Linux, OS X or MS Windows oberon-riscv-emu Rikke Solbjørg
Linux, OS X or MS Windows with oberon-riscv-emu or a bare RISC-V machine. oberon-riscv Rikke Solbjørg

In A2, identifiers "A2" and "Oberon" in the name or text of a source module denote context [25] where necessary. This is the syntax in ActiveOberon.

Module := "MODULE" Identifier "IN" Identifier ";" ...

Where context is not formally recognized, an identifier in a comment is possible.

Module := "MODULE" Identifier "(* IN " Identifier "*);" ...

An identifier can also be prefixed to the module identifier.

Module := "MODULE" Identifier Identifier ";" ...

As the Oberon filesystem does not support folders, name conflict can be avoided by prefixing a file name.

NameOfModuleFile := Identifier Identifier ".Mod"

The name of a file containing a module source can differ from the name of the module. Within the scope of a module, the name of an imported module can be aliased. Out := OutStub for example. Syntax is in the Oberon-2 Report.

Use CasesEdit

Educational WorkstationEdit

Oberon is used as a workstation OS in the course in System Construction at the ETHZ.

Embedded SystemEdit

Currently a strong interest in Oberon development is in embedded systems. Astrobe provides a MS Windows based integrated development environment for producing Oberon source text and executables for industrial controls. Radiar uses the A2 Swiss Industrial Controller in a pigment blending system.

Personal WorkstationEdit

Of all Oberon systems, ETH Oberon, V4 and A2 have the broadest range of application level development for a personal workstation. Nevertheless capabilities are limited in comparison to familiar commercial systems and Unix-like systems. By using an Oberon subsystem in one of these familiar systems, benefits are combined. The subsystem can be installed as an application such as UnixA2. Alternatively the subsystem can be a guest of a hypervisor as when ETH Oberon is hosted by QEMU. The subsystem can also be emulated; the Oberon RISC emulator being a prime example. Refer to the table of system variants.

Current leading workstation machine development is at SkuTek Instrumentation. RiskZero and RiskFive machines are listed in the Computers section.


The Oberon0 installer for ETH Oberon running under QEMU in Debian Linux.

A system is chosen and, using the link in the table of variants, an installation archive is retrieved. Instructions for installing and configuring the system are linked in the last column of the table. For some systems, instructions are also available in a system specific page linked in the second column.

ETH OberonEdit

ETH Oberon can be installed and run on a bare PC and is similar to the Oberon subsystem of A2. In comparison to V5, ETH Oberon has relatively advanced application level capabilities including the Gadgets GUI. Discarded desktop and laptop PCs capable of running ETH Oberon are widely available, typically at no cost.

A2 and UnixAOSEdit

A2 can be installed and run on a bare PC and as an emulated OS on various platforms. A2 contains an Oberon subsystem very similar to ETH Oberon. The compactness and speed of user level tasks such as email, makes a striking comparison to analogues in the host system. A2 also works well on many desktop and laptop machines considered obsolete for commercial operating systems.


Archives are available from JKU Linz and from Sourceforge. Specific installation instructions are available for Linux and for MS Windows. The instructions should also help with Amiga, HPUX, Macintosh, MIPS, PowerMac, Sparc and UV4.


For installation on FPGA machines, refer to the documentation of N. Wirth and of Paul Reed. Oberon RISC Emulators work on contemporary MS Windows, Unix-like systems and macOS. Refer to instructions of the author of the emulator of interest. Additional notes are available for Android. On some machines the size of block random access memory (BRAM) may constrain development objectives.

Getting StartedEdit

The user interface of the Oberon System is quite surprising on the first sight.[26] It is a so called text based user interface (TUI) and combines the point-and-click convenience of a graphical user interface (GUI) with the linguistic strength of a command line interface (CLI). It is closely tied to the naming conventions of the Oberon language. Any text appearing (almost) anywhere on the screen can be edited and can be used as command input. Commands are activated by a mouse-middle, MM, click[27] on a text fragment of the form Module.Command (optionally followed by parameters, which are terminated by ~). A command is defined by a procedure, which has an empty argument list. Parameters to the command have to be defined before executing the middle click and must be explicitly scanned and retrieved by the procedure. There are no checks nor any questions asked during command execution. This is sometimes called a "non-modal" user interface (UI). Nothing like a command prompt is required. Although radically different from a command line, the TUI is very efficient and powerful.[28] Active elements can be embedded in Oberon texts: a clock showing the current time, push buttons, or graphical elements visualizing data. Most user interface elements are realized with the help of documents. A steep ascent in the early learning curve can be somewhat challenging. No questions are asked: this is a deliberate design decision, which needs getting used to. For example, most familiar editors ask the user when closing a modified text: this is not the case in the Oberon System. The usage of the TUI and programming interface is fully documented in Martin Reiser's book "The Oberon System".[29] A short introduction to the user interface can be found on Niklaus Wirth's home page.[30] The later Versions of System Oberon, Oberon V4 (or V4 in short, sometimes also referred to as Linz-Oberon) and ETH-Oberon (sometimes also called Oberon System 3, S3 or Spirit of Oberon), enhanced the basic interface with different but incompatible implementations for buttons, drop down menus, and other active elements. V4 used for that purpose a dedicated control character embedded in normal text in contrast to System 3, which extended the kernel by introducing persistent objects. Both extensions include a large set of user interface elements.

Mastering the Oberon user interface, both the purely textual and also the so called Gadgets System (under ETH Oberon), is absolutely non-trivial. Therefore it is recommended to proceed after a successful installation of Oberon System 3 to André Fischer's Oberon System 3 (ETH Oberon) Tutorial. An expanded version of this tutorial is published as a book,[31][32] which is now out of print. Although the book has a standard copyright, it is available in electronic form under a single user license in every installed version of System 3 (Windows, Linux or Native, i.e. also with the Gadgets toolkit of OLR[8]). If you try to read it in System 3, you are confronted with the classical chicken and egg problem: You have to master the user interface to have access to the documentation of the user interface. Therefore some detailed instructions for reading "The Oberon Companion" – after a successful installation of the Oberon System can be found by opening the file Book.Tool with the command Desktops.OpenDoc. If this command is not present in any of the windows/viewers, which are opened by default when you start the Oberon System, you can click anywhere with the left-mouse button (ML) in any viewer and type the command Desktops.OpenDoc Book.Tool ~. Then move the mouse over Desktops.OpenDoc and do a middle-mouse button (MM) click. This will open an new viewer with a table of contents of "The Oberon Companion". All lines with blue text are hyperlinks to the chapters of the book, which in turn can be clicked with the MM button so that the chapter will open in a new viewer. The license in Book.Tool gives the user the right to print a single copy for personal use. I had good results in print with a GhostScript based free PDF converter. If you want to print an open document in Oberon, i.e., the contents of a window (or viewer in Oberon terminology), you have to set the star shaped mark by hitting the F1 key (see Tutorial) and then issue the command Desktops.PrintDoc Default * ~ by a MM click on Desktops.PrintDoc. In an Oberon command the * is not a wildcard, but symbolizes the marked viewer.

Oberon TextEdit

Confusingly for a novice, three forms of line ending can be found in text files in contemporary computer systems.

  • In Oberon and some other systems, a line of text ends with the carriage return character, denoted CR.
  • In Unix-like and some other systems, a line of text ends with the line feed character denoted LF.
  • In DOS, Microsoft Windows and some other systems, a line of text ends with the two characters, CR and LF.

This multiplicity poses no difficulty in Oberon; most Oberon systems allow convenient editing with any of these line endings.[33]

Also confusing for a novice, an Oberon Text[34] can appear to be no more than a plain text comprising a sequence of ASCII characters. Nevertheless Text in Oberon is a type defined in the Text module. A Text of this type is a sequence of characters including non-printing characters. A character in a Text can have attributes including typeface, size and color. Furthermore a Text can include non-character objects; an image or a hyperlink for example. Consequently two displayed documents, one an Oberon Text and the other an HTML text, can have the same appearance and the same behavior of links.

Editing a TextEdit

Each Oberon system has an Edit module. If Edit.Open Example.Text appears almost anywhere on the screen, a MM on Edit.Open will open a viewer. If a file named Example.Text exists, it's content will appear in the viewer. If no file with the name exists, the viewer will be empty. The caret can be set by ML and characters can be inserted using a keyboard. In addition to Edit, ETH Oberon has ET and the Gadgets subsystem. Commands ET.Open <aFile> and Desktops.OpenDoc <aFile> are available. ETH Oberon also has the Hex module providing a hexadecimal editor with command Hex.Open <aFile>.

Programmatical Access to a TextEdit

In addition to interactive editing just described, a Text can be manipulated using procedures in the Texts module; visible for ETH Oberon and for V5. Also summarized for ETH Oberon in DEFINITION Texts.

To read a Text programmatically in any Oberon system, the first step is to open a RECORD termed a Reader on the Text, at a specified offset. (A Reader is a RECORD; not a pointer or procedure.) With reader open, procedure Read(reader, ch) retrieves a character each time it is executed.

   T: Texts.Text;
   R: Texts.Reader;
   ch: CHAR;
   Texts.Open(T, “Texts.Mod“);
   Texts.OpenReader(R, T, 0);
   Texts.Read(R, ch);
   WHILE ~R.eot DO
     Texts.Read(R, ch)

In ETH Oberon, the font of a character is referenced in the Objects.Library of the Reader. This assumes that the object read was a character as evidenced by (reader.lib IS Fonts.Font) being TRUE. In V2, V4 and V5, the font of a character is referenced by the „fnt“ field of the reader. The Reader also has fields „col“ (the color of the character) and „voff“ (vertical offset of the character). After an execution of Read(reader, ch), the freshly read character is available in ch and attributes are in the components of reader. Each execution of Read() advances reader through the Text by one character until the end is reached and reader.eot becomes TRUE.

Additional DetailsEdit

Types pertinent to Text in various systems can be compared in the Text page.

System StartupEdit

Brief remarks here are intended to guide the student toward study of the authoritative documents.

Booting and Multi-bootingEdit

Boot Manager runs on the PC hardware independent of the operating system. In this case Boot Manager ran on a virtual guest machine provided by QEMU. The screenshot is grabbed by the QEMU host.

ETH Oberon, A2 and other systems working directly on x86 hardware offer the further possibility of multiple operating systems requiring boot management. Boot Manager was written by André Fischer according to Oberon principles and is now maintained in the SVN repository at the ETH. These pages have additional information.


For V2 running on a Ceres machine, system startup and the core are described in sections 14.1 and 14.2 of Project Oberon, 1992(PDF).

ETH OberonEdit

In ETH Oberon, the inner core comprises basic operating system functions including storage management, file system, loader, compiler and etc. The outer core comprises management of display, keyboard and mouse. Inner and outer cores together are somewhat comparable to the kernel of a Unix-like system. Structure of the sytem can be understood from the system building tool, Native.Tool.



From Joerg Straube in http://lists.inf.ethz.ch/pipermail/oberon/2021/015938.html,
"The functionality of UEFI is somewhat comparable to BootLoad.Mod in FPGA Oberon. BootLoad resides in ROM and is the first code the RISC-5 CPU executes after power up. It loads the inner core from disk to address 0000 and jumps to 0000.

The inner core then loads the outer core. And the outer core loads the Oberon system."

In V5, Project Oberon, the inner core comprises only the modules Kernel (memory mgmt, disk storage mgmt, traps, timer), FileDir (directory handling), Files (File handling) and Modules (module loading). The authoritative exposition is in sections 14.1 and 14.2 of Project Oberon, 2013 Edition(PDF).

Contributing a Module or Tool Not in the BookEdit

Firefox and A2 on Wayland and Weston on Debian 10.
  • Initialize a Module or Tool page from a published release. Preferably the latest. Oberon.Sort.Mod, for example, is taken from the Oberon subsystem in UnixA2. Indicate the source in the wiki edit subject line.
  • Use Oberon naming conventions.
  • Avoid page duplication. If two systems share a source module, a page redirect might be preferable to duplicate pages.

Addition of a Text is the first two steps of the dataflow diagram above. The first step is performed by the contributor. The second is performed automatically by the MediaWiki server. Retrieve the MediaWiki module (ETH Oberon, Oberon subsystem of A2) to your Oberon system and compile it. Open a viewer with the module to be contributed and * mark the Text. Translate to MediaWiki markup with "MediaWiki.Markup * " and save the <Module>.Mod.mw with Edit.StoreAscii or ET.StoreAscii.

To add the page to the book, a browser capable of HTTPS is necessary; Desktops.OpenDoc in ETH Oberon is inadequate. Being logged in to a Wikimedia account is advisable. In the table above, click on an identifier to open the system specific page. There add the name of the intended module and "Publish change". The new entry will be colored red. Click on it to open the page for the new module. Copy and paste the text from <Module>.Mod.mw and "Publish change".

Editing this BookEdit

All progress is welcome. Correct errors in grammar and in algorithms. Present unrefined ideas in the talk pages.

Editing a Module Source TextEdit

A source can be edited directly using a browser capable of HTTPS. Alternatively it can be edited on your Oberon system, translated using MediaWiki.Markup and applied to replace the existing version, as when adding a new module. If replacing, take care to avoid over-writing a previous edit. The latest version of the page should be retrieved to a working Oberon system and compared using Diff.Do. Alternatively, a registered user can put a new version in the user sandbox and compare as in the following section. Be aware that the non-zero time interval between retrieval from the book and installation of the new version allows an edit conflict.

  • If an edit conflict is inadvertently created, fix it, please.
  • Avoid breaking compilation.
  • Avoid breaking interfaces. If an interface is changed, adjust all modules which connect to it. An idea clearly expressed in a discussion page is preferable to broken interfaces.
  • Avoid breaking functionality.
  • Avoid introducing a bug. If a bug is introduced, the change might be reverted, however brilliant the intended improvement.
  • Prefer more recent syntax over older syntax. Remove LOOP. Where possible remove RETURN.
  • Optionally, color changed text, green; text disabled by commenting, red.

Formatting a Source TextEdit

Various formatting conventions and preferences exist. Refer to the Oberon Mailing List, 2017-07-22 through 2017-07-26, and search for "indentation?". No particular format is essential here. Any reasonable format preferred by a contributor is welcome.

Styling a Source TextEdit

Various stylistic conventions also exist. Refer to the Oberon Mailing List, 2017-07-29 through 2017-07-30, and search for "Italicization". Editors such as PET in A2 and the "pretty printers" mentioned in the list automatically style a source Text to highlight syntax. Therefore direct syntax styling can be unnecessary. Color to distinguish a revision is optional and relatively harmless.

Comparing Versions and PagesEdit

Oberon has module Diff. For example, two pages can be retrieved to files TextFile1 and TextFile2. Then MM on Diff.Do TextFile1 TextFile2 .

To compare versions of a page within the book, open the history using the button at the top of the page. Choose two versions and "Compare selected versions".

To compare distinct pages, ID numbers are specified in a URL. In the page history of ETH_Oberon/2003-01-05/HTML.Mod, when the mouse pointer is hovered over the date in the entry for the original version, ID 3702511 is reported by the browser. The original version of A2/Oberon.HTML.Mod is ID 3504568. The URL


produces a side by side comparison. "Compare" works well where a fraction of lines differ. When most or all lines in the compared pages differ, comparison has little or no value.


Oberon variant
Image Processor Boot Store Memory Persistent
Price, US$
NS320xx 32 kB ROM 2 MB DRAM 40 MB Hard disk drive Rare and collectable; price unpredictable [35] [36]
Intel 80386 PC and descendants,
ETH Oberon
ETH Oberon on a Tatung TWN-5213 CU tablet.
i386[37], i486, P5 and various successors Hard disk drive SDRAM Hard disk drive Negligible for a disused machine ETH Oberon is installed and used routinely.
A2 Swiss Industry Controller [de], [en] FPGA based A2CPU 16 MB flash 1 MB battery-buffered RAM,
128 MB DDR3
Oberon mailing list at 2021-11-11
Digilent Xilinx Spartan 3 Starter Board,
Oberon V5
Xilinx Spartan 3 SD[38] 1 MB SRAM SD 100 Used and NOS boards on the market
Pepino LX9,
Oberon V5
  Xilinx Spartan-6 FPGA 128 MB SPI 1 MB SRAM 100 Discontinued
Oberon V5
  Xilinx XC3S700AN FPGA microSD 1 MB SRAM microSD Website unreachable September 2018.
RiskZero   Spartan-6 FPGA full size SD, microSD 4 MB ZBT full size SD, microSD refer to Design files and cost. Prototyping.
RiskFive   Xilinx Artix-7 FPGA 16-32 MB SPI Flash 4 MB ZBT microSD "expensive" Motherboard plus FPGA module. Available.
Radiona ULX3S,
Oberon V5
  Lattice ECP5 LFE5U-85F-6BG381C (85K LUT) FPGA 4–16 MB Quad-SPI Flash 32 MB SDRAM 166 MHz microSD 60-140 Boards with 12K LUT also available. [39]


Q. Are Oberon and A2 fundamentally the same while having different interfaces?
A. Both systems respect the "simple as possible" principle. Otherwise they differ widely.
Central in Oberon is the task loop implemented in procedure Oberon.Loop. A procedure installed in the loop without backgrounding, executes to completion in one pass of the loop. A long-running procedure can appear to the user as a queuing delay. During the long-running procedure, the only activity visible to the user will be output which the programmer has deliberately arranged. To avoid queuing delay, the programmer has the responsibility of implementing background execution. Backgrounding is achieved by dividing a large task into smaller portions which are inserted between other tasks in the loop.
Central in A2 is the active objects system (Aos). Processor time is allocated to active objects by time-slicing. This avoids queuing delay by limiting the time interval which a processor devotes to an active object. Time-slicing removes the responsibility for backgrounding a large task from the programmer. Refer to Wikipedia and the thesis of P.J. Muller, section 4.2.3, page 35.
A2 has many aspects and capabilities not in Oberon. Refer to the mailing list at 2022-01-07.
Q. Why do some Oberon systems have a flat file system? Isn't a tree structured file system indispensable in highly productive contemporary environments?
A. The tree structured file system came into prominence during the 1950s and '60s when computer memories were miniscule in comparison to memories now available. The tree structure of those early file systems helped with organization of the operating system. Typical memory access is far faster than file access. With current hardware, a data structure can be composed and used in memory with much faster performance than a data structure in a file system. With some focus on choice of meaningful names for files, most users will find the flat file system entirely adequate. Also, most Oberon subsystems have access to a tree structured file system of the host. Additionally, ETH Oberon running on a bare PC supports the FAT16, FAT32 and ISO 9660:1988 file systems, all of which are tree structured. In reality, a flat file system in Oberon is a benefit rather than detriment.
Q. In ETH Oberon (or A2O) MM+MR opens a viewer with Edit whereas I prefer ET. How can that be fixed?
A. In ETH Oberon open TextFrames.Mod. MM on Edit.Open.
Edit.Open TextFrames.Mod
In the Oberon sub-system of A2.
Edit.Open Oberon.TextFrames.Mod
OpenCmd = "Edit.Open"
OpenCmd = "ET.Open"
, MM on Edit.Store, recompile the module (TextFrames.Mod or Oberon.TextFrames.Mod) and reboot. TextFrames and all modules which import it could be reloaded but rebooting is simpler.


Also refer to the glossary in the Wikipedia article.
.GofU, For A2, the file name extension denoting "Generic object file, Unix, x86, 32 bit". Refer to the A2 page.
Active Oberon, the dialect appearing in system A2.
BRAM, Block Addressable Random Access Memory, as used in the FPGA machine[40].
Columbus, a software tool in ETH Oberon used to inspect and modify gadget attributes and to add a new attribute to a gadget. Usage described in the tutorial
Definition ( or Module Definition), a summary of a module presenting constant declarations, type declarations, variable declarations and procedure headings.
fixup, the conversion from address relative to the base address of the module, to absolute address.
fold, a functionality of Text in V4 and BlackBox documents similar to collapsible in HTML. Several folds in a file can be grouped by name and their state can switched together; this allows for maintaining different source versions in one file.
Gadgets, software infrastructure in ETH Oberon providing graphical entities and a graphical user interface. Usage described in the Gadgets tutorial pages.
gadget, an end-user object in the Gadgets system. A button is a simple instance of a gadget. A text gadget is a more complex instance.
Inner core, a significant architectural entity in an Oberon system. Refer to System Startup.
INTEGER, an integer type in every Oberon system.
Interclick, a click of a mouse button while holding another button. MM+MR below is an example. The mouse tutorial has additional details. When editing a Text at least six interclick combinations are meaningful.
Lola-2, a hardware description language developed by Niklaus Wirth.
Juice, an alternative to Java based on a portable representation of the abstract syntax tree and on the fly compilation also known as OMI (see below). The source code can be found at Github and three forks of it (as of 11.Aug.2021).
LDPSR, Load Processor Status Register, allows software to establish whether the processor can handle interrupts. Refer to https://people.inf.ethz.ch/wirth/FPGA-relatedWork/RISC-Arch.pdf , Section 5, Interrupts. Discussion in the mailing list begins at 2021-03-30.
LinzOberon, an implementation of V4. Ref. mailing list, 2020-11-28.
LONGINT, an integer type in ETH Oberon. Synonymized to INTEGER in the current V5.
LUT, look up table of FPGA. Referenced when quantifying the size of a FPGA device.
ML, the left button of the mouse or a click of that button, depending on context. Ref. Mouse support and Mouse tutorial. Abstract meaning: specify a location. Example: locate an insertion point in a Text.
MM, the middle button or the wheel of the mouse, or a click of the button or wheel, depending on context. Abstract meaning: invoke an action. Example: execute a command.
MR, the right button of the mouse or a click of that button, depending on context. Abstract meaning: select an extent. Example: select a character sequence in a Text.
MM+MR, a click of the right button while holding the middle button or the wheel of the mouse. MR here is termed an "interclick". In a Text, take the word under the mouse pointer as the name of a file and open the text editor on it.
MR+ML, a click of the right button while holding the left button of the mouse. When editing a Text, select characters and delete them.[41]
ML+MM+MR, nullification of an inadvertent mouse click.
MT, in ETH Oberon, the mouse type configuration string.
MT, in V5, the constant address of the module table.[42]
native, modifies the name of an Oberon system to indicate that it is installed on bare hardware; distinguishing from a subsystem such as UnixA2 installed atop a host system.
Oberon.Text, a file in ETH Oberon and in A2O specifying system configuration.
Oberon Trilogy, the three books Programming in Oberon, The Oberon System and Project Oberon; the first three books in the bibliography.

OMI/Slim binary (Oberon Module Interchange), a mechanism created by Michael Franz and Thomas Kistler allowing efficient portability of any module between differing systems. The language from this work was named Juice. Compare with Apple Fat binary. Slim binaries are mentioned in compilers page in the section "Compiler deployment in ports no longer updated".
Outer core, a significant architectural entity in an Oberon system. Refer to System Startup.
.odc, the conventional file name extension for a BlackBox/Oberon-F file (short for Oberon DoCument) quite similar internally to Oberon Text format.
(** any comment *), appears in some module sources. It means that any comment is an exported comment. A tool named Def produces a module interface file with this comment included, thus enhancing internal documentation.
PICL, a programming language for the PIC microcontrollers.
(** portable *), this comment in ETH Oberon marked a module where OMI/Slim binary code was portable across platforms. More generally, it means there were no SYSTEM dependencies or machine specificities. This exported comment appears in the documentation created by the above mentioned browser, Def, which was integrated into a tool called Watson in ETH Oberon.
Registry, the content of Oberon.Text specifying file system aliases, sound adapter parameters, LinkSchemes, MIME types and etc.
SB, in V5, the static base address. The base address for variables in the current module.[42]
SHORTINT, an integer type in ETH Oberon. Not in V5.
SIZE, a signed integer type pertaining to memory address in A2. The difference of two addresses can be negative. New numeric types appeared in rev.9475.[43]
SP, in V5, the stack pointer address.[42]
Symbol file, a linearized excerpt of the symbol table of the compiler. The file contains descriptions of all exported objects. Ref. section 12.6.2 of Project Oberon, 2013 Edition. See also Symbol table in the Wikipedia.
Watson, a tool capable of extracting a module definition from a definition file, module file, module Text or object file. Usage described in the tutorial.
WTS, Write To Script, refers to Write and Script variants of Text document and conversion of a Write Text to a Script Text. Write is in V4 and Script is in ETH Oberon.



A few potential projects.

  • For ETH Oberon, compile a fresh release, with bug fixes and improvements, and post on a public server.
  • Make a TUI for A2.
  • With the cryptography modules in ETH Oberon and in A2 as a base, build an SSL implementation for ETH Oberon.
  • Improve support of Unicode.
  • Using HTTPS, automate the download and upload processes. Allowing MediaWiki.Get Oberon.Sort.Mod ... ~ and MediaWiki.Put Oberon.Sort.Mod ... ~ for example.
  • Improve HTMLDocs in ETH Oberon and in A2O. Add support for styling and tables, for example.


ETH Oberon LicenseEdit

For compatibility with Wikibooks open the archive of Media_copyright_questions and search for "ETH-Oberon".


ETH Oberon Copyright (c) 1990-2003, Computer Systems Institute, ETH Zurich All rights reserved.

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

o Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.

o Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.

o Neither the name of the ETH Zurich nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.


ETH Bluebottle LicenseEdit

For compatibility with Wikibooks open the archive of Media_copyright_questions and search for "ETH-Oberon".


ETH Bluebottle (formerly Aos)
Copyright (c) 2008, Computer Systems Institute, ETH Zurich
All rights reserved.

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

o Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.

o Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.

o Neither the name of the ETH Zurich nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.


Project Oberon, Revised Edition 2013Edit


Book copyright (C)2013 Niklaus Wirth and Juerg Gutknecht; software copyright (C)2013 Niklaus Wirth (NW), Juerg Gutknecht (JG), Paul Reed (PR[/PDR]).

Permission to use, copy, modify, and/or distribute this software and its accompanying documentation (the "Software") for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies.



Approximate chronological order. Also refer to the Oberon Bibliography from ETHZ.



  1. The Oberon programming language with multiple dialects, various Oberon operating systems, computing hardware where the operating systems have been used and the hardware description language, Lola-2, used to configure a FPGA.
  2. In the preface of The Oberon System (Pub. Addison-Wesley, 1991) Martin Reiser commented "It is the most responsive system by far known to the author. This responsiveness substantially improves user productivity;"
  3. With contemporary facilities, the base system is easily installed using the Oberon0.Dsk image and a hypervisor such as QEMU. Refer to the installation instructions for ETH Oberon.
  4. An Oberon system contains hundreds and in some cases thousands of modules. Only a small sample of modules are presented here. Nevertheless even one insight can advance understanding and one small bug fix can be essential to success in a task.
  5. The Rechenzentrum, Clausiusstrasse 55/59, is approximately 500 m north-northwest or right of the domed Hauptgebaeude in this view. See also http://lists.inf.ethz.ch/pipermail/oberon/2021/015854.html. Additional information and photos are at https://www.tg.ethz.ch/en/contact/contact/.
  6. With Oberon-2 being a superset of Oberon, much of the source is Oberon while all is Oberon-2. See language report.
  7. Sources of Oberon V4 at SourceForge
  8. a b Matthias, Peter. "Oberon Linux Revival". http://oberon.wikidot.com/. 
  9. In some cases the host environment is a bare machine. Otherwise it is a machine running another system.
  10. Pertinent information is in the NS32xx site. See FPGA example and wire wrap example. Modules not available from the original book must also be obtained or written and sources must be compiled. A V5 system will be a helpful precursor.
  11. Including the Transmeta Crusoe 5400 and the StrongARM SA 110 and SA 1110.
  12. A PC can boot from an Oberon0 diskette in an internal drive. In that case installation of ETH Oberon can proceed directly without involvement of DOS. Oberon Tutorial Part 2 includes a helpful explanation of the user interface.
  13. Sources for Release 2.0 are available. ASCII sources can be read with any contemporary editor. The Text sources should be read in an Oberon system; otherwise display by Linux gedit may be tolerable.
  14. Also referred to as "ETH Oberon Plugin for Windows" and "Spirit of Oberon System3 for Windows".
  15. A server at ftp://ftp.ssw.uni-linz.ac.at/ remains accessible to an FTP client and installation archives can be retrieved. The Firefox browser is unable to navigate into the subdirectories.
  16. Note "Current state ... network not working."
  17. a b V4 can also execute on obsolete systems 680x0 MacIntosh and PowerMac with MacOS to version 9 inclusive, Amiga, Atari ST, DECstation, HP-UX, IBM RS/6000, SGI IRIS and SPARC with Solaris. Refer to https://sourceforge.net/p/oberon/oberonv4/ci/master/tree/ and ftp://ftp.ssw.uni-linz.ac.at/pub/Oberon/. A native version has not been produced.
  18. olymp.idle.at has verion 1.7.02. The last version at JKU Linz is 1.5.
  19. a b GPCP provides a compiler for Component Pascal; not a full Oberon subsystem.
  20. During the summer of 2019 work was underway at the ETHZ to improve portability and other aspects. Until the work is completed, the user may encounter difficulties with the native variant of A2. The Oberon subsystem remains available in UnixA2 and WinA2. A notice is in the mailing list archive at 2019-07-03. Patience is advised.
  21. The SDL2 library and a C99 capable C compiler are required. GCC or Clang suffice for compiling the emulator.
  22. The Oberon compiler, for example, can be executed at the Unix command line.
  23. EO does not modify the RISC processor; it modifies only the Oberon system which runs on it.
  24. The TypeRules document is noteworthy. Specific aspects of types are discussed in the mailing list beginning at 2019-12-07.
  25. Friedrich, F., Negele, F., "Proposal for Modules Contexts"
  26. Video Tutorial 2, produced by Andres Ramos, illustrates salient features of the interface in a readily digestible manner.
  27. Using the mouse and the keyboard http://www.ethoberon.ethz.ch/ethoberon/tutorial/Mouse.contents.html
  28. Franz, Michael (2000). "Oberon - The Overlooked Jewel". in Böszörmény, Lászlo; Gutknecht, Jürg; Pomberger, Gustav. The School Niklaus Wirth - The Art of Simplicity. Morgan Kaufmann Publishers. pp. 41–53. ISBN 1-55860-723-4. https://pdfs.semanticscholar.org/d48b/ecdaf5c3d962e2778f804e8c64d292de408b.pdf. Retrieved 2017-12-14. 
  29. Reiser, Martin: "The Oberon System - User Guide and Programmer's Manual" - Out-of-print - Addison-Wesley/ACM Press (1991) ISBN 0-201-54422-9
  30. Wirth, Niklaus (2015). "How to use the Oberon System". https://www.inf.ethz.ch/personal/wirth/ProjectOberon/UsingOberon.pdf. 
  31. André Fischer & Hannes Marais: The Oberon Companion. A Guide to Using and Programming Oberon System 3. vdf Hochschulverlag AG (1997). ISBN 978-3728124937, out of print, for a personal copy, see notes in text
  32. Citation in the ETH Oberon publications page.
  33. As a point of interest, each case is easily displayed explicitly. In an Oberon system with the hexadecimal editor, Hex, MM on Hex.Open <aFile>. In ETH Oberon a file with lines ending CR LF is edited by ET.OpenAscii <aFile>.
  34. With Text being a fundamental type in an Oberon system, "Oberon Text" is considered a proper name. Hence the capitalization "Text".
  35. Photo at the ETHZ and the Oberon system.
  36. Ceres-1 and Ceres-3 at the Computer History Museum
  37. ETH Oberon includes floating point calculations in software, allowing full functionality in absence of a 80387 coprocessor
  38. Visible in vertical orientation adjacent to the green PS/2 adapter, in the photo on page 5 of Project Oberon
  39. Installation data and instructions
  40. Explained further in the Oberon mailing list at 2019-02-09.
  41. A Text can include non-character objects. Any object in the selection is also deleted.
  42. a b c Refer to section 8.1 , page 104 in Project Oberon, 2013.
  43. Renaming of numeric types in A2