IBM i, the i standing for integrated, is an operating system developed by IBM for IBM Power Systems. It was originally released in 1988 as OS/400, as the sole operating system of the IBM AS/400 line of systems. It was renamed to i5/OS in 2004, before being renamed a second time to IBM i in 2008. It is an evolution of the System/38 CPF operating system, with compatibility layers for System/36 SSP and AIX applications. It inherits a number of distinctive features from the System/38 platform, including the Machine Interface which provides hardware independence, the implementation of object-based addressing on top of a single-level store, and the tight integration of a relational database into the operating system.

History

Origin

OS/400 was developed alongside the AS/400 hardware platform beginning in December 1985. Development began in the aftermath of the failure of the Fort Knox project, which left IBM without a competitive midrange system. During the Fort Knox project, a skunkworks project was started at Rochester by engineers, who succeeded in developing code which allowed System/36 applications to run on top of the System/38, and when Fort Knox was cancelled, this project evolved into an official project to replace both the System/36 and System/38 with a single new hardware and software platform. The project became known as Silverlake (named for Silver Lake in Rochester, Minnesota).

The operating system for Silverlake was codenamed XPF (Extended CPF), and had originally begun as a port of CPF to the Fort Knox hardware. In addition to adding support for System/36 applications, some of the user interface and ease-of-use features from the System/36 were carried over to the new operating system.

Silverlake was available for field test in June 1988, and was officially announced in August of that year. By that point, it had been renamed to the Application System/400, and the operating system had been named Operating System/400.

The move to PowerPC

The port to PowerPC required a rewrite of most of the code below the TIMI. Early versions of OS/400 inherited the Horizontal and Vertical Microcode layers of the System/38, although they were renamed to the Horizontal Licensed Internal Code (HLIC) and Vertical Licensed Internal Code (VLIC) respectively. The port to the new hardware led to the IMPI instruction set and the horizontal microcode implementing it being replaced by the PowerPC AS instruction set and its implementation in PowerAS processors. This required the VLIC to be rewritten to target PowerPC instead of IMPI, and for the operating system functionality previously implemented in the HLIC to be re-implemented elsewhere. This led to the HLIC and VLIC being replaced with a single layer named the System Licensed Internal Code (SLIC). The SLIC was implemented in an object-oriented style with over 2 million lines of C++ code, replacing some of the HLIC code, and most of the VLIC code. Owing to the amount of work needed to implement the SLIC, IBM Rochester hired several hundred C++ programmers for the project, who worked on the SLIC in parallel to new revisions of the VLIC for the CISC AS/400 systems. The first release of OS/400 to support PowerPC-based hardware was V3R6. During the development of the port, IBM's Workplace OS project proposed reimplementing OS/400 as a "personality" running on top of its microkernel; IBM Rochester rejected the proposal in favour of completing the native PowerPC port.

Rebranding

The AS/400 product line was rebranded multiple times throughout the 1990s and 2000s. As part of the 2004 rebranding to eServer i5, OS/400 was renamed to i5/OS; the 5 signifying the use of POWER5 processors. The first release of i5/OS, V5R3, was described by IBM as "a different name for the same operating system".

In 2006, IBM rebranded the AS/400 line one last time to System i. In April 2008, IBM consolidated the System i with the System p platform to create IBM Power Systems. At the same time, i5/OS was renamed to IBM i, in order to remove the association with POWER5 processors. The two most recent versions of the operating system at that time, which had been released as i5/OS V5R4 and V6R1, were renamed to IBM i 5.4 and 6.1.

Along with the rebranding to IBM i, IBM changed the versioning nomenclature for the operating system. Prior releases used a Version, Release, Modification scheme, e.g. V2R1M1. This was replaced with a Version.Release scheme, e.g. 6.1. Beginning with IBM i 7.1, IBM replaced the Modification releases with Technology Refreshes. Technology Refreshes are delivered as optional PTFs for specific releases of the operating system which add new functionality or hardware support to the operating system.

Architecture

+ Diagram showing the architectural layers of the IBM i operating system, and their relationship to hardware and user software NativeApplications S/36 and S/38EnvironmentApplications UNIXApplications XPF PASE TIMI syscall Interface SLIC IBM Power Hardware The core of IBM i is divided between two layers, the hardware-dependent System Licensed Internal Code (SLIC) and the hardware-independent Extended Control Program Facility (XPF). These are split by a hardware abstraction layer called the Technology Independent Machine Interface (TIMI). Later versions of the operating system gained additional layers, including an AIX compatibility layer named Portable Application Solutions Environment (originally known as the Private Address Space Environment), and the Advanced 36 Machine environment which ran System/36 SSP applications in emulation.

IBM often uses different names for the TIMI, SLIC and XPF in documentation and marketing materials, for example, the IBM i 7.4 documentation refers to them as the IBM i Machine Interface, IBM i Licensed Internal Code and IBM i Operating System respectively.

Technology Independent Machine Interface (TIMI)

The TIMI isolates users and applications from the underlying hardware. This isolation is more thorough than the hardware abstractions of other operating systems, and includes abstracting the instruction set architecture of the processor, the size of the address space and the specifics of I/O and persistence. This is accomplished through two interrelated mechanisms:

Compilers for IBM i do not generate native machine code directly, instead they generate a high level intermediate representation defined by the TIMI. When a program is run, the operating system carries out ahead-of-time translation of the TIMI instructions into native machine code for the processor, and stores the generated machine code for future execution of the program. If the translation process changes, or a different CPU instruction set is adopted, the operating system can transparently regenerate the machine code from the TIMI instructions without needing to recompile from source code. Instead of operating on memory addresses, TIMI instructions operate on objects. All data in IBM i, such as data files, source code, programs and regions of allocated memory, are encapsulated inside objects managed by the operating system (cf. the "Everything is a file" model in Unix). IBM i objects have a fixed type, which defines the set of applicable operations which may be carried out on them (for example, a Program object can be executed, but cannot be edited). The object model hides whether data is stored in primary, or secondary storage. Instead, the operating system automatically handles the process of retrieving and then storing the changes to permanent storage.

The hardware isolation provided by the TIMI allowed IBM to replace the AS/400's 48-bit IMPI architecture with the 64-bit RS64 architecture in 1995. Applications compiled on systems using the IMPI instruction set could run on top of the newer RS64 systems without any code changes, recompilation or emulation, while also allowing those applications to avail of 64-bit addressing.

There are two different formats of TIMI instructions, known as the Original Machine Interface (OMI) and New Machine Interface (NMI) formats. OMI instructions are essentially the same as the System/38 Machine interface instructions, whereas NMI instructions are lower-level, resembling the W-code intermediate representation format used by IBM's compilers. IBM partially documents the OMI instructions, whereas the NMI instructions are not officially documented. OMI instructions are used by the original AS/400 compilers, whereas NMI instructions are used by the Integrated Language Environment compilers. During the PowerPC port, native support for the OMI format was removed, and replaced with a translator which converted OMI instructions into NMI instructions.

The storing of the TIMI instructions alongside the native machine code instructions is known as observability. In 2008, the release of i5/OS V6R1 (later known as IBM i 6.1) introduced a number of changes to the TIMI layer which caused problems for third-party software which removed observability from the application objects shipped to customers.

SLIC

The SLIC consists of the code which implements the TIMI on top of the IBM Power architecture. In addition to containing most of the functionality typically associated with an operating system kernel, it is responsible for translating TIMI instructions into machine code, and it also implements some high level functionality which is exposed through the TIMI, such as IBM i's integrated relational database. The SLIC implements IBM i's object-based storage model on top of a single-level store addressing scheme, which does not distinguish between primary and secondary storage, and instead manages all types of storage in a single virtual address space. The SLIC is primarily implemented in C++, and replaced the HLIC and VLIC layers used in versions of OS/400 prior to V3R6.

XPF

The XPF consists of the code which implements the hardware-independent components of the operating system, which are compiled into TIMI instructions. Components of the XPF include the user interface, the Control Language, data management and query utilities, development tools and system management utilities. The XPF also contains the System/36 Environment and System/38 Environment, which provide backwards compatibility APIs and utilities for applications and data migrated from SSP and CPF systems. The XPF is IBM's internal name for this layer, and as the name suggests, began as an evolution of the System/38 Control Program Facility. The XPF is mostly implemented in PL/MI, although other languages are also used.

PASE

PASE (Portable Applications Solutions Environment) provides binary compatibility for user mode AIX executables which do not interact directly with the AIX kernel, and supports the 32-bit and 64-bit AIX Application Binary Interfaces. PASE was first included in a limited and undocumented form in the V4R3 release of OS/400 to support a port of Smalltalk. It was first announced to customers at the time of the V4R5 release, by which time it had gained significant additional functionality.

PASE consists of the AIX userspace running on top of a system call interface implemented by the SLIC. The system call interfaces allows interoperability between PASE and native IBM i applications, for example, PASE applications can access the integrated database, or call native IBM i applications, and vice versa. During the creation of PASE, a new type of single level storage object named a Teraspace was added to the operating system, which allows each PASE process to have a private 1TiB space which is addressed with 64-bit pointers. This was necessary since all IBM i jobs (i.e. processes) typically share the same address space. PASE applications do not use the hardware-independent TIMI instructions, and are instead compiled directly to Power machine code.