# BlackBox Component Builder

BlackBox Component Builder is an integrated development environment (IDE) optimized for component-based software development developed by a small spin-off company of ETH Zurich, Oberon microsystems AG, in Switzerland. The IDE consists of development tools, a library of reusable components, a framework that simplifies developing robust custom components and applications, and a run-time environment for components.

## Programming language

In BlackBox, developing applications and their components is done in the language Component Pascal, a descendant of Pascal, Modula-2, and Oberon. Component Pascal is a strongly typed, compiled language that supports modular and object-oriented programming and Eiffel-like pre- and post-condition testing using ASSERT statements. It provides full type safety, components (in the form of modules), dynamic linking of components, and automatic garbage collection to preserve memory integrity. The whole BlackBox system is written in Component Pascal and is available as source code: all library components, all development tools, including the Component Pascal compiler, and the low-level runtime system with its garbage collector.

## Function and components

As its name implies, BlackBox Component Builder supports blackbox abstractions and reuse, in contrast to whitebox, as defined in the book Component Software by Szyperski. In 1993, it was released as Oberon/F (for Oberon Framework) and was renamed to BlackBox Component Builder with release 1.3 end of the 1990s. In December 2004, BlackBox went open source with the release of beta version 1.5. According to a posting of Clemens Szyperski on Usenet news Oberon/F and in turn BlackBox Component Builder is a re-implementation of ETHOS, which was completely object-oriented version of the Oberon System, which he had implemented for his PhD thesis.
As an IDE it is a quite puristic environment without syntax highlighting and code completion. Some of these tools can be integrated from the community platforms (see external links below, e.g. syntax highlighting can be found in subsystem Master). Similar to most BASIC dialects and Oberon implementations source code files are binary documents. They may contain embedded active elements (see below) and formatting.

## Platforms and versions

BlackBox uses a document centered approach (as all versions of the Oberon System), which is very similar to OpenDoc. It features active elements like buttons, embedded documents, folds, drop down lists, and many more in documents and a fascinating way to create user interfaces (UIs): define the basic UI by exporting interacting variables and procedures from a module, and let the IDE create a draft document representing the UI in a so-called Form, which can be edited in the WYSIWYG editor. This approach is based on a model–view–controller (MVC) abstraction. At its start, BlackBox supported two platforms (Apple Mac, Microsoft Windows) with others planned. After Steve Jobs returned to Apple and abandoned OpenDoc, Oberon microsystems ended support for Apple Mac with release 1.3.3 around 2001. The Linux version was never released publicly by Oberon microsystems, although OpenBUGS a software package for the Bayesian analysis of complex statistical models using Markov chain Monte Carlo (MCMC) methods based its Linux version on it. The group around the OberonCore website in Russia has published the Linux version, and it is available on their Russian language website and on Github.
In 2002, Pepperdine University professor Stanley Warford published a book that teaches computing fundamentals via BlackBox. In 2014, he placed the full text under a Creative Commons license.
There are at least four principal versions for MS Windows and at least one for Linux:
Center version at BlackBox Framework Center.
Center version at Component Pascal Collection.
Core version at Component Pascal Collection.
BlackBox Oberon for MS Windows, and for Linux by A. Shiryaev, I. Denisov, I. Dehtyarenko, A. Dmitriev.
Other versions are on the OberonCore Russian website.