Oberon OS

From Wikibooks, open books for an open world
Jump to navigation Jump to search

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

This book is about the Oberon family of operating systems for computers, with a focus on technicalities. For an overview, refer to the Wikipedia article. For other uses of the name Oberon, refer to the disambiguation page.

Oberon V5 RISC emulator on GNURoot Debian on Android on an Alcatel 9015B tablet with keyboard and mouse connected by Bluetooth.

Audience[edit]

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 intensive computation, to data I/O and manipulation or to 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.

System Characteristics[edit]

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,[1] security and simplicity. The extreme compactness is immediately evident to a novice installing Oberon S3 (System 3) on a bare PC. The complete system including applications, documentation, graphical interface, fonts and source texts was installed from ten HD diskettes[2].

This Book[edit]

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

Historical Perspective[edit]

Following development of the programming languages Euler, Algol W, Pascal, Modula and Modula-2, Niklaus Wirth proceeded to create the Oberon language with original release occurring in 1986. The language then being viable, Wirth collaborated with Jürg Gutknecht to build a complete operating system written in that 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 have created various dialects of the language with compatibilities and incompatibilities. Variants of the operating system have also evolved, again entailing small incompatibilities. The four most prominent of these OS flavors are

  • ETH Oberon (aka System 3, S3) written mostly in Oberon with some parts in Oberon-2,
  • 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.

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 680x0K and Power PC), AmigaOS, TOS (Atari), OS/2, Microsoft Windows, HPUX, and (of course) Linux. 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 (680x0K and PowerPC), SunOS (x86 and SPARC), and Microsft Windows. AOS 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.[4]

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

System Variants[edit]

The Oberon system runs directly on several machine architectures and as a subsystem in several host operating systems.

Machines and
Host Systems[5]
Softwares Identifiers[6] Installation
archives
Installation
Instructions
Ceres workstation

Ceres-1
Ceres-3

The Oberon System V1, V2  
X86 PC Bluebottle = AOS = A2 A2 SourceForge ETHZ
X86 PC UnixAos installed on Solaris,
Linux or MacOSX (Darwin).
A2 Uni-Bremen Uni-Bremen, G. Feldmann
X86 PC BlackBox Component Builder,
Windows application
BB BB Community download area
X86 PC Component Pascal,
Windows application
CP BB Community download area
X86 PC[7] ETH Oberon, System 3, PC-Native S3 SourceForge ETHZ; diskettes

ETHZ; Hypervisor
YouTube; System wrangling

X86, ARM, ARMv7,
RISC-V and MIPS
Oberon Linux Revival, OLR;
installed on Linux
S3 P. Matthias
JVM and
CLI
Gardens Point Component Pascal,
JVM and .NET applications
GPCP Current project at github
Original site from Archive.org
X86 PC Oberon subsystem in
A2 and in UnixAos
Oberon Included in A2 and in UnixAos
X86 PC[8] Linz-Oberon V4 JKU Linz
SourceForge
Linux
Windows
FPGA RISC Oberon V5 V5 N. Wirth

P. Reed

Oberon RISC emulator

on Android, Linux,
Mac OS X, Unix and
MS Windows[9]

Oberon V5 V5 P. De Wachter
X86 and Oberon RISC Experimental Oberon EO A. Pirklbauer

A context identifier in the name or text of a source module can denote the context [10] where the module should compile and work.

The syntax of ActiveOberon specifies notation.

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

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

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

Alternatively an identifier can 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"

Installing[edit]

The Oberon0 installer for S3 running under QEMU in Debian Linux.

In the table above, a system is chosen. The installation archives are retrieved, and the software is installed and configured according to the instructions cited.

For the novice, V5 as Oberon RISC Emulated on an extant contemporary system is recommendable. A2 on an extant operating system or on a bare X86 PC is another possibility. A2 contains an Oberon subsytem similar to S3.

Getting Started[edit]

The user interface of the Oberon System is quite surprising on the first sight. It is a so called text 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 therefore be used as command input. Commands are activated by a mouse-middle, MM, click[11] 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.[12] 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 makes it a little bit difficult in the beginning. No questions are asked: this is a deliberate design decision, which needs getting used to. Most 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".[13] A short introduction to the user interface can be found on Niklaus Wirth's home page.[14] The later Versions of System Oberon, Oberon V4 (or V4 in short, sometimes also referred to as Linz-Oberon) and Oberon System 3 (or S3, sometimes also called ETH-Oberon 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 S3), 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 Tutorial. An expanded version of this tutorial is published as a book,[15] 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[4]). 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.

Reading[edit]

In A2[edit]

At 2018-02-06 the WebBrowser in A2 fails to open a page. Hypothetically, follow the system menu, Apps > WebBrowser and specify a URL. Alternatively, Mouse middle, MM, click on WebBrowser.Open in an A2 window (not in the Oberon subsystem).

WebBrowser.Open https://en.wikibooks.org/wiki/Oberon ~

In S3 and in the Oberon Subsystem of A2[edit]

MM click on Desktops.OpenDoc.[16]

Desktops.OpenDoc 
"http://www.loband.org/loband/filter/org/wikibooks/en/%20/wiki/Oberon"[17]

Desktops.OpenDoc 
"http://www.loband.org/loband/filter/org/wikibooks/en/%20/wiki/Oberon/Oberon.Sort.Mod"

In V5[edit]

Desktops and Webrowser are not implemented.

In Another System[edit]

Use any browser.

firefox https://en.wikibooks.org/wiki/Oberon

firefox https://en.wikibooks.org/wiki/Oberon/Oberon.Sort.Mod

To see the list of sources available here for a given system, click on the identifier in the third column of the table. Most of the wiki text extraneous to a module Text is eliminated with a click on the "Mobile view" link at the foot of a page.

Oberon Text[edit]

[Section in development.]
An Oberon text can appear to be no more than a sequence of ASCII characters as in other systems. Nevertheless Text is a type defined in the Text module, with capabilities somewhat parallel to HTML. In an instance of Text, characters can have attributes including specifications of typeface, size and color. Furthermore a Text can include non-character objects; an image or a hyperlink for example.

These tables are a dissection of the structure of records in memory representing the Text containing a sequence of characters. Click on a hyperlink to see the module where a type is defined. The characters of the Text, "Word" for example, are placed in memory according to Edit.Open[18], revised according to keyboard input and mouse actions and stored in a file according to Edit.Store.

Example in Oberon V5[edit]

The Type Text
Type Fields of TextDesc Types of Fields Notes
Texts.Text, a pointer to a Texts.TextDesc len INTEGER Length of text, in bytes.
changed BOOLEAN Flag indicating a revision.
notify Texts.Notifier Pointer to a method to notify interested clients of state changes.
trailer Texts.Piece Pointer to the Sentinel node in the list of pieces.
pce Texts.Piece Last found piece. Reference translation cache.
org INTEGER Offset in [0,len) of first character in last found piece.

Example in S3 and in the Oberon Subsystem of A2[edit]

TextDesc is an extension of Objects.ObjDesc. The fields added to make TextDesc are distinguished from the fields inherited from ObjDesc by differing background colors.

The Type Text
Type Fields of
TextDesc
Types of Fields Notes
Texts.Text,
a pointer to
Texts.TextDesc
stamp LONGINT Integer
dlink Objects.Object Pointer
slink Objects.Object Pointer
lib Objects.Library Pointer
ref INTEGER  
handle Objects.Handler Pointer
len LONGINT Length of text.
obs Objects.Library Pointer
trailer Texts.Piece Pointer to Sentinel node in list of pieces.
org LONGINT Offset in [0,len) of first character in last found piece.
pce Texts.Piece Last found piece. Reference translation cache.
Objects.Library in the table above
Type Fields of Record Types of Fields Notes
Objects.Library next Objects.Library Pointer
ind Objects.Index Pointer
f Files.File Pointer
R Files.Rider Pointer
name Objects.Name  
dict Objects.Dictionary Pointer
maxref INTEGER  
GName POINTER  
Texts.Piece
Type Fields of Record Types of Fields Notes
Texts.Piece f Files.File Pointer
off LONGINT Integer
len LONGINT  
obj Objects.Object Pointer
lib Objects.Library Pointer
ref INTEGER  
col SHORTINT  
voff SHORTINT  
prev Piece Pointer
next Piece Pointer

Texts.FindPiece and the cache[edit]

For a given Text, T, and offset pos in [0, T.len), procedure Texts.FindPiece has the task of locating the piece containing pos. At each execution, FindPiece could begin at offset 0 and add lengths of pieces until the piece containing pos is located. In reality better efficiency is obtained by use of a translation cache based upon T.pce and T.org. When FindPiece completes a search, the pointer to the found piece is recorded in T.pce; the offset of the first character of that piece is recorded in T.org. The next execution of FindPiece begins at that cached location. With a result from FindPiece often being near the preceeding result, this caching strategy avoids repeated summation of lengths from the beginning of the first piece.

Dataflow of a Text[edit]

From an Oberon system to the Wikibook and to the Oberon system again.

Oberon
Text
Oberon
MediaWiki.Markup
command
MediaWiki
markup text
MediaWiki
processor
HTML5 text
Oberon
Desktops.OpenDoc
command
Oberon
Text
       

Web
browser
browser
text
Clipboard
or Save
operation
ASCII
text file
Oberon
mouse
copy
Oberon
Text

The displayed Oberon Text, on the right, should be identical to the original Oberon Text, on the left. As yet, Text color and style are not preserved by Desktops.OpenDoc nor by transport of browser text into Oberon. Variations of Text color and style are harmless to compilation.

Compiling[edit]

If a module name matches an extant object file, compilation can overwrite it. To avoid that, the name of the newer or test module can be altered. Prefixed with an identifier for example; "MODULE Sort" could become "MODULE V4Sort". Overwriting is also avoided when the new and old object files are in different volumes or directories. Object files of S3 are installed to the SYS volume whereas the new file would typically be written to a USR or HOME volume. Object files of LinuxAos are installed to /usr/aos/obj/ and a new file would typically be written to a working directory such as /home/me/aos/.

In A2 and Oberon[edit]

Compile A2 and Oberon modules in A2; not in the Oberon subsystem. The compiler in A2 is Flexible Oberon Cross Compiler or Fox. Invoke it with the Compile button in the PET editor or MM on a Compiler command in an A2 window, in accord to Fox.Tool. Builder.Tool from S3 is not relevant to A2.

In S3[edit]

Compiler commands are defined in Compiler.Mod and summarized there following "END Compiler". If a module is opened with Desktops.OpenDoc as described under Reading, it can be compiled directly from the viewer. Select any characters beginning with M in MODULE and MM click on Compiler.Compile @ . Otherwise import to the S3 system and use a Compiler command according to Compiler.Tool.

In V5[edit]

Use an ORP.Compile command in System.Tool.

Contributing a Module or Tool Not in the Book[edit]

  • 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 UnixAos. 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 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; the current Desktops.OpenDoc 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 Book[edit]

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

Editing a Module Source Text[edit]

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.

  • Fix an edit conflict.
  • 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 Text[edit]

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 Text[edit]

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 Pages[edit]

To compare versions of a module, 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 S3.HTML.Mod, when the mouse pointer is hovered over the date in the entry for the original version, ID 3205558 is reported by the browser. The original version of Oberon.HTML.Mod is ID 3205420. The URL

https://en.wikibooks.org/wiki/?diff=3205420&oldid=3205558&diffonly=1

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.

And, of course, Oberon has the Diff module. Pages can be retrieved to an Oberon system and compared as with Diff.Do TextFile1 TextFile2 .

Contemporary Hardware[edit]

Model Name Image Processor Boot Memory Memory Approximate
Price, US$
Notes
Pepino LX9   Xilinx Spartan-6 FPGA 1 MB SRAM 128 MB SPI 100  
OberonStation   Xilinx XC3S700AN FPGA 1 MB SRAM microSD    
RiskFive   Xilinx Artix-7 FPGA 4-32 MB SPI Flash 128 MB DDR3   Motherboard plus FPGA module.

Support[edit]

Developing[edit]

A few open projects worthy of effort.

  • For any system, compile a fresh release, with bug fixes and improvements, and post on a public server.
  • With the existing cryptography modules as a base, build an SSL implementation for S3 or V5. Extend support for HTTP to support for HTTPS.
  • Using HTTPS, automate the download and upload processes. Allowing MediaWiki.Get Oberon.Sort.Mod ... ~ and MediaWiki.Put Oberon.Sort.Mod ... ~ for example.
  • Improve support of Unicode.
  • Improve the HTMLDocs module. Add support for styling and tables, for example.

Licenses[edit]

ETH License[edit]

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

ftp://ftp.ethoberon.ethz.ch/ETHOberon/license.txt

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.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE ETH OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

Project Oberon, Revised Edition 2013[edit]

http://www.projectoberon.net/wirth/ProjectOberon/license.txt

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.

THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES WITH REGARD TO THE SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES OR LIABILITY WHATSOEVER, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE DEALINGS IN OR USE OR PERFORMANCE OF THE SOFTWARE.

Primary References[edit]

(chronological order)
N. Wirth, J. Gutknecht, Project Oberon, 1992.
P.J. Muller, The Active Object System - Design and Multiprocessor Implementation(PDF), PhD thesis, Institute of Computer Systems, ETH Zurich, 2002. Containing the original description of A2.
N. Wirth, Project Oberon, 2013 Edition. Originally published with co-author J. Gutknecht, 1992.
P. Reed, Project Oberon, 2015-present.

References[edit]

  1. 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;"
  2. With contemporary facilities, the base system is easily installed using the Oberon0.Dsk image and a hypervisor such as QEMU. The additional packages can be retrieved via a network connection and installed. Refer to the installation instructions for S3.
  3. These systems comprise hundreds of modules. At present fewer than twenty modules are available here. Nevertheless even one insight can advance understanding and one small bug fix can be essential to success in a task.
  4. a b Matthias, Peter. "Oberon Linux Revival". http://oberon.wikidot.com/. 
  5. "Machine" where the Oberon system runs directly on hardware; "Host System" where Oberon is within another operating system.
  6. A2 and Oberon are context identifiers recognized by the compiler in A2. The other identifiers are merely hyperlinks to system specific pages. See also "New context identifiers".
  7. Including the Transmeta Crusoe 5400 and the StrongARM SA 110 and SA 1110.
  8. Applications for Amiga, Linux, Unix and MS Windows. A native version has not been produced.
  9. The SDL2 library and a C99 capable C compiler are required. GCC or Clang suffice for compiling the emulator.
  10. Friedrich, F., Negele, F., "Proposal for Modules Contexts"
  11. Using the mouse and the keyboard http://www.ethoberon.ethz.ch/ethoberon/tutorial/Mouse.contents.html
  12. 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. 
  13. Reiser, Martin: "The Oberon System - User Guide and Programmer's Manual" - Out-of-print - Addison-Wesley/ACM Press (1991) ISBN 0-201-54422-9
  14. Wirth, Niklaus (2015). "How to use the Oberon System". https://www.inf.ethz.ch/personal/wirth/ProjectOberon/UsingOberon.pdf. 
  15. 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
  16. With an older HTMLDocs module some characters appear as empty boxes. To correct this, install and compile a revised Oberon.HTMLDocs.Mod.
  17. The loband filter allows Oberon to use HTTP while the Wikimedia server provides HTTPS.
  18. Other editors exist. In S3 for example, Edit has been extended to ET.