Finally, you can run dozens of multiprocessing Multics instances along side your mission-critical IBM AIX (PASE) and IBM i (OS/400) workloads on IBM Power Systems hardware!
This is the virtualization solution your IT department has been waiting for… well, perhaps it isn’t — but supporting this platform is a great demonstration of both the capabilities of the IBM PASE for i (Portable Application Solutions Environment) runtime for enabling OSS on IBM i, and the excellent compatibility and portability of the DPS8M simulator software.
A short introduction is in order for anyone who may have stumbled here without any idea at all about what any of this is about.
When you hear “AS400” today, it’s most likely a reference to the IBM i operating system and associated software running on IBM Power Systems hardware. The current generation of IBM server hardware is both highly performing and extremely reliable, with the many of deployments achieving actual availability near seven-nines - 99.99999% - rivaled only by mainframe platforms like Stratus and IBM Z.
The story of the AS400 really begins with the IBM 1401 (more 1401 History and 1401 Information) in 1959, the first widely popular computer. By the mid-1960’s, the majority of computers in existence were IBM 1401’s. In 1964, IBM introduced the famous System/360 family of computers, a series of compatible machines covering all possibles use cases, an extremely radical concept at the time. Unfortunately (for IBM), even the low-end 360 systems were too expensive for many 1401 customers (with the 1401 itself remaining available until 1971). What IBM needed was a minicomputer — a midrange system, in IBM lingo — less costly than an entry 360, and competitive against the stubbornly popular Honeywell 200, also released in 1964.
The first IBM midrange system was the System/3 business computer released in 1969, which was made available for less than half the cost of the lowest-end S/360‑M20 mainframe. The System/3 was followed by the System/32 in 1975. This was the system that introduced the iconic IBM 5250 terminal, an improvement on the previous 2260 and 3270 models, and pioneered the fully integrated system software concept. In 1977, the System/34 was launched as a multi-user and multi-tasking System/32 successor, and was quickly followed by the medium-scale System/38 in 1978 and the small-scale System/36 in 1983.
The AS/400 hardware (and OS/400 software) was created in 1988 as combination of the System/36 and System/38 product lines. The AS/400 used a unique layered system architecture based on the “Technology Independent Machine Interface”, or TIMI, which isolates the software from the underlying hardware implementation, presenting a virtual 128-bit instruction set as the abstraction. At the actual physical hardware level, the system was built on top of a custom 48-bit CISC architecture.
The AS/400 platform evolved into the iSeries, which replaced the 48-bit CISC processor with a 64-bit PowerPC-based CPU, the RS64, a superset of the PowerPC incorporating many POWER ISA features. Because of the unique software design, most user applications kept working without modification or even recompilation to take advantage of the new 64-bit hardware.
In 2001, the POWER4 CPU was released, merging the RS64 and POWER lines.
The POWER5 CPU came in 2005, and along with it, a rebranding of the OS/400 software to i5/OS, associating it with the new processor. In 2006, the hardware platform was renamed to System i. In 2007, the System i machines, by now IBM Power Systems servers with specific firmware, were upgraded with POWER6 processors. Finally, in 2008, i5/OS was renamed to just “IBM i”.
Whew! Of course, not everyone is a fan of the latest branding, and many, but certainly not all (archive.today, wayback) users today, when referring to the platform, still affectionately call it AS400 — most often (but not always) without the slash (archive.today, wayback) — and still refer to the operating system as OS/400.
I don’t have enough space or knowledge to write a more in-depth history of the AS400 platform, so if you’re interested in learning more I recommend browsing IBM’s AS/400 History site, and reading Tom Van Looy’s excellent paper IBM AS/400: A Technical Introduction (wayback).
It’s now the year 2024, 55 years after the 1969 release of the System/3, and the IBM midrange platform is still going strong, even as some disparage the system as a “dinosaur” and describe it’s modern-day adherents as cultists (archive.today, wayback).
Of course, none of that should deter our audience of GE/Honeywell/Bull and Multics fanatics; after all, our beloved 600/6000-series computers originated with the GE M-235 system designed for the MISTRAM project — in 1955!
The AS400, while not sharing any direct heritage with Multics, does implement features that Multics users can appreciate, such as single-level storage, an MRDS-like integrated relational database management system, and the goal of providing an always-on high availability computing utility.
AIX binaries running on PASE for i support the direct execution of POWER instructions on the hardware itself, bypassing the usual user abstraction layer. This provides near-native performance for CPU-heavy workloads like the DPS8M simulator, at the expense of future-proof portability on the platform.
Surprisingly, this was not because of any major inadequacies of the ILE compilers and environment (at least not for our use), which provide a (large, nearly complete) subset of C99 and C++0x and some POSIX compatibility as well, but because the ease of working with PASE and the close compatibility with AIX simply outweighed any potential benefit of the longer ILE porting process.
It’s also hard to argue with the near-native performance, and future maintenance efforts are expected to be minimal.
Since DPS8M officially supports AIX (since R3.0.0), utilizing PASE meant that most of the porting work was already done. Indeed, adapting our source code and build procedures to support the PASE for i environment was mostly straightforward. That being said, AIX isn’t PASE and PASE isn’t AIX, but for the subset of AIX interfaces and libraries supported, the runtime behavior of PASE seems to be at least 90% identical. The most noticeable differences are in lower-level OS functionality, like thread and process priority manipulation, filesystem semantics, shared library locations, and memory management.
These differences are substantial enough to require DPS8M be built specifically for IBM i (at least at this time), rather than being able to offer a single binary package that would work on both AIX and IBM i systems.
As a prerequisite to porting DPS8M itself, we needed to be sure that our major third-party dependencies were supported and functioning.
libuv, a portable high‑performance platform support library, with a focus on asynchronous‑I/O based on event loops, originally developed to support the Node.js® runtime, and,
libsir, the “Standard Incident Reporter” library, a lightweight, cross-platform library for information distribution (which will be used in the next major version of the simulator).
We also have an optional dependency, libbacktrace, which does support AIX, but is non-functional in the PASE environment. This may or may not be able to be overcome, but it isn’t a showstopper.
libuv is readily available from IBM, having been ported as a prerequisite of Node.js, which IBM supports on i. The RPM package can be installed with
yum from PASE and has been used to successfully build the simulator. It can also be extracted and used to facilitate cross-compilation from Linux or AIX systems. Our built-in libuv-builder targets (
gmake libuvdev) can be be used when compiling on PASE using GCC 10.3.0 (or later) or IBM XL C/C++ V16.1 (or later) from within the PASE environment. I’ve not yet tested using IBM Open XL C/C++, the new LLVM-based toolchain, but it would likely work as well.
decNumber is highly portable and entirely independent of most OS specifics. It doesn’t even need stdio. While DPS8M includes an optimized subset of this library (implementing only required functionality) that required no modifications, the base PASE for i environment conveniently includes this library and associated header files as well.
libsir required more significant modifications which are available in the current git
master branch, and will be part of the the upcoming v2.2.5 release.
I was impressed with the overall development and debugging experience on IBM i. Anyone who is comfortable with IBM AIX should feel at home in PASE. Just imagine a slightly “weirder” (or perhaps “quirky”) subset of AIX. The PASE environment provides the AIX version of the
dbx debugger, which I have a strong preference for, and the
gdb debugger is also available and seems to work well, although I only tested it in conjunction with
gcc. If you prefer a GUI, there is the (Java-based) IBM i Debugger which provides specific support for the PASE environment as well as the ILE.
For the “classic” side of i (accessed via the 5250 interface), there are debugging tools available that proved very helpful for this project. These include screens where you can easily watch real-time stack traces, see thread details, and monitor job status. I even used the
EDTF editing facility - very strong
XEDIT vibes - and although it is very basic, it was more than sufficient for quick modifications and is, of course, instantly responsive, even when the IBM i host is lagging (or highly loaded), due to the use the block/screen-oriented 5250 protocol. This came in handy a few times when my connection quality was less than ideal. PASE programs can also call ILE (and vice versa) so porting with PASE is a good way to ease into working with ILE and IBM i in general.
Don’t let the green screen scare you away from the platform!
There is IBM Rational Developer for i (for Eclipse fans) and Code for IBM i (for VSCode fans). You can work with the integrated database with IBM i Access ODBC from Linux, Windows, and macOS desktops, and use IBM i ACS to access IBM i completely from a web browser (yuck).
The unexpected thing is that I absolutely didn’t hate this system. In fact, I liked it. I liked it a lot. Probably more than I should have. I’m going to continue to learn more about the IBM i platform (outside of the PASE environment) and look forward to putting some i skills on the resume.
Modern IBM i powers many multibillion dollar businesses today (like Costco, with $245B in annual revenue). Now they can run Multics as well!
While I’m not going to promise IBM i builds in CI just yet, the changes necessary to build on IBM PASE for i should land in the
master git repo in the next few days, and will be buildable under IBM PASE for i (that is, on OS/400) using GCC 10.3.0 (or later) or IBM XL C/C++ 16.1 (or later), and requires a minimum libuv version of 1.42.0. We’ve only tested IBM i 7.5, but everything should work on IBM i 7.4 as well. Cross-compilation is possible and will be documented in the near future.
NOTE: IBM i 7.3 and 7.2 might work, but are unsupported by us, so your mileage may vary. IBM i 7.1 and below will almost certainly never work. DPS8M has always targeted AIX 7 and the PASE environment on 7.1 only offers parity with AIX 6.1.
These binaries are compiled for POWER9, the minimum supported processor level for IBM i 7.5. The
punutil utilities are included. The
punutil utility requires the
popt package to be installed via RPM.
This software provided is experimental, and is distributed “AS IS”, WITHOUT WARRANTY OF ANY KIND, under the terms of the ICU License.
A big thank you is due to Holger Scherer of POWERbunker, RZKH GmBh for donating the resources that helped make this development possible.
If you need commercial IBM i hosting, don’t hesitate to get in touch with them. You can also try out their PUB400 service for limited free public access to IBM i for non-commercial use.