An Overview of Oberon
![](S3.gif)
Contents
1 Introduction
2 The Oberon Programming Language
3 The Oberon System
4 Oberon Applications
Introduction
Oberon is the name of a programming language and an operating environment
created by the Institute for Computer Systems, ETH Zürich. Originally
designed for computer science education by its implementers N. Wirth and
J. Gutknecht in 1986, Oberon teaches modern programming language and operating
system concepts to ETH students on proprietary computer hardware. Although
Oberon is a complete operating system capable of running on bare hardware
(as it still does at the ETH), it was ported in a many-year effort to most
commercial hardware platforms where it is hosted as an application running
on top of the host's operating system and is free available for many processor
architectures. This was necessary so that students all over the world can
use Oberon. In addition, the history, concepts, design and implementation
of the Oberon language and system has been documented in a series of books.
Today Oberon is taught at many universities all over the world and has found
acceptance in the commercial world with commercial versions of the programming
language.
Since 1986, many people at ETH have improved Oberon. It was lately extended
with a modern document-based user interface, a software component framework,
and transparent network support for distributed documents and transportable
objects - features that still have to find their way into commercial systems.
In an effort to make the newest ETH research results available to the public,
the Spirit of Oberon distribution was created. This distribution of the
Oberon system contains the latest developments of the researchers and students
of the ETH integrated into a convenient package for popular operating systems.
Some improvements have been made to the ETH release, and some experimental
tools are included.
The Oberon Programming Language
Created by N. Wirth, Oberon is the successor of the popular Pascal and Modula-2
family of programming languages. It was specifically designed for systems
programming, and was used to create the Oberon system in cooperation with
J. Gutknecht. A few years later, the Oberon language was extended with additional
object-oriented features to result in the programming language Oberon-2.
This is the version included in most of the Oberon distributions. A short
summary of the main features of the Oberon language follows:
- Separate compilation of modules with interface checking across module
boundaries. Definition and implementation modules are combined in the same
source text.
- Strong type checking.
- Type-safe with no possibility of dangling pointers or memory leaks.
- Run-time type checking.
- Run-time checks to catch overflow and out of range errors. ASSERT
statements for programming by contract.
- Architecture neutral with types CHAR, SHORTINT, INTEGER, LONGINT,
REAL, LONGREAL, BOOLEAN, SET, POINTER, RECORD, PROCEDURE, open ARRAY and
ARRAY. Mixed expressions and string operations.
- Type-extension for object-oriented programming, both instance- and
class-centered. Type-extension can be used across module boundaries without
requiring the source code of the base type. This allows programmers to extend
a software system they did not write themselves.
- Messages realized as extensible RECORDs for programming message forwarding
and message delegation.
- Type-bound procedures for implementing methods.
- Support for low level programming through module SYSTEM.
- I/O operations realized by standardized libraries.
- Fast compiler that generates portable and native code. No separate
linking required.
For further language information please refer to the Oberon
language report.
The Oberon System
The original Oberon System was designed, implemented and documented by N.
Wirth and J. Gutknecht. The current version is called Oberon System 3 and
includes a graphical document-based user interface. Right from the start,
the Oberon System incorporated a number of innovations that only later found
its way into commercial systems. Its component framework puts it at the
cutting edge of system technology. The features of the Oberon distribution
include:
- Dynamic and run-time linking of modules.
- Clearly structured in a modular fashion. Includes modules for several
useful data-types like text, fonts and pictures. A very large degree of
code reuse results in very compact applications. Standard I/O modules.
- Integrated and fast garbage collector to collect unused objects. Object
finalization is supported.
- Single-process multitasking with support for non-critical tasks running
in the background. Shared 32-bit address space for modules.
- Exceptions cause a stack trace to be displayed. Possibility to directly
inspect the state of a running module.
- Possibility of calling "command" procedures directly from
the user interface.
- Completely modeless graphical user interface with support for graphical
primitives. Both overlapping and tiled windowing systems supported concurrently.
Possibility of configuring the working environment.
- Support for the underlying hierarchical file system (Apple HFS, DOS
file system) and WYSIWYG printing through the hosts printer drivers. Clipboard
and TrueType font support. Direct printing to postscript and encapsulated
postscript possible.
- Support for persistent objects. Objects and datafiles are portable
between all Oberon systems. Support for attaching code to objects so that
they become transportable between different Oberon implementations.
- Component framework allowing the interactive construction and modification
of graphical applications without programming. A large set of useful and
extensible components are included. New components can be written or existing
ones extended. MVC model support.
- Dynamic configuration of components through Inspectors. Possibilty
to "unlock" existing applications and modify them for own purposes.
- Standard text and document editor with support for embedded objects.
User configurable keyboard macro facility. Compiler compiles directly from
the text window.
- Modern document-based user interface with the possibility of generating
dynamic documents.
- Complete integration with TCP/IP networks with support for network
documents.
Oberon Applications
Oberon contains several interesting tools and applications. Many of these
were developed as productivity tools by ETH assistants and students. Other
tools are of a more experimental nature and are still under development
at ETH. An incomplete summary of applications in the Spirit of Oberon distribution
is:
- Internet tools supporting Mail, FTP, News, Telnet, WWW, and Gopher.
These tools allow you to open a remote document as if it were local. Mail
and News support transmission of Gadget components.
- Several tools and example programs related to the Gadgets GUI, including
a tool for the management of public libraries of reusable components.
- In addition to the Oberon-2 compiler, a symbol file browser, a source
code profiler, an analyzer of Oberon source code, a hex editor, and a smart
browser called Watson for exploring the hypertext module documentation of
the system.
- In addition to the document editor, a tool for writing text outlines,
a keyboard macro facility, and a string search tool.
- A tool to compress and encrypt source modules for further distribution,
and a tool to attach code to documents so that they become transportable.
- A bitmap editor called Rembrandt, with associated image manipulation
tools, and a tool to create textured wallpapers.
- A tool to make backups on MSDOS diskettes, a tool to prepare files
for mailing, an archiver to compress multiple files into a single archive,
an interface to the underlying operating system clipboard, and a tool to
manipulate the color palette.
- Several electronic tutorials with embedded code examples on all aspects
of the system, an Oberon-2 language reference, system programmers guide,
and a large collection of sample programs, including the source of selected
parts of the Gadgets system.
Johannes L. Marais and Thomas Kistler, Institut für Computersysteme,
ETH Zürich, 1996
UCI, Information and Computer Science
Comments to Thomas Kistler<kistler@ics.uci.edu>
8th May 1996