VULINX

Free software · GPL-2.0-or-later

The mainframe,
on the hardware you already have.

VULINX runs mainframe workloads in isolated Execution Spaces on ordinary servers: Linux on s390x, and System/370 operating systems such as MVS 3.8j. An engine built on QEMU, and a console that makes it easy to use and to deploy.

Get the source Build it in four steps

Virtual Unified Large-system INfrastructure eXecution

Execution Space · LNX01 · s390x

    
Linx, the VULINX mascot: a lynx in a fox costume
2architectures
s390x · System/370
2.5–3.4×faster batch jobs than the
reference emulator, measured
0lines taken from
Hercules or Hyperion
100%of changes to upstream
QEMU recorded

What it is

An engine, a console,
and an honest description of both.

01

An engine

A fork of QEMU that completes and extends s390x virtualization and adds a System/370 machine of its own: processors, channel subsystems, and the devices a mainframe system expects. Every change to upstream is recorded, so merging a newer QEMU stays possible.

02

A console

A daemon, a CLI and a web console over a versioned REST API. Define Nodes and Execution Spaces, keep profiles as YAML, deploy from them, manage volumes and networks, run the lifecycle, watch live state, and reach a guest's console in the browser.

03

Not a mainframe

VULINX is not an IBM mainframe, an IBM Z replacement or a LinuxONE emulator, and claims none of it. An Execution Space is comparable to a logical partition in spirit; it is a VULINX construct. A laboratory, a development platform, and a way to keep old systems running.

Two machines, one engine

From a 1970s operating system
to this year's Linux.

s390x

Linux on Z, anywhere

Unmodified distributions boot and run — emulated under TCG on any host, accelerated by KVM on an s390x host. IPL from an ECKD volume with no other disk attached.

  • ECKD 3390
  • FBA
  • OSA-Express / QDIO
  • qeth Layer 2
  • virtio
  • SCLP · 3270
  • IPL · System Load
  • cloud-init
System/370

MVS 3.8j, to TSO and ISPF

A System/370 processor with DAT, key protection and its own channel subsystem. The TK5 distribution IPLs from its unmodified volumes, and its batch jobs run 2.5 to 3.4 times faster than on the reference emulator.

  • CKD · CCKD
  • 3215 console
  • TN3270
  • tape
  • printer · reader · punch
  • job submission
  • Hercules config paste

What works today

Exercised by tests,
or shown against a running guest.

DASD that travels

CKD and compressed CKD volumes are used as they already exist — read in place, written through an overlay per Execution Space, so one set of volumes serves several machines.

$ vulinx volume convert mvsres.cckd mvsres.ckd
3350, 555 cylinders · compressed → plain · verified

Profiles as documents

A profile is a YAML document for your version control. Nothing in it knows where it runs: the Node decides how to execute it when it starts.

OSA over QDIO

An OSD adapter the Linux qeth driver binds to, beside virtio. Internal networks ride a user-space switch per network.

Consoles in the browser

SCLP line mode, 3270 and 3215 — proxied over WebSocket, each with its own permission.

Roles that mean it

Sign-in with the host's accounts through PAM, permissions per route, grants scoped to named Execution Spaces, and an audit trail of what was done and refused.

Security you can read

A security model that says what is enforced, where in the source, and which test holds it in place — from disk images that try to read host files to a channel program that never ends.

How it fits together

Separate processes,
a narrow contract.

Web consoleTypeScript · React vulinx CLIprofiles as YAML vulinxdGo · REST API v1 · SQLite Execution Space · s390xengine process · ECKD · OSA Execution Space · System/370engine process · CKD · 3215 Root helpers, each behind its own socketsign-in (PAM) · resource control · host terminal RESTQMP

The daemon links no engine library and shares no address space with a guest. It starts engine processes and talks to them over QMP — a management outage cannot stall a running Execution Space.

Get started

Four steps to a console.

  1. Get the source

    git clone --recurse-submodules \
      https://gitlab.com/kaypel1-group/vulinx/open.git vulinx
    cd vulinx
  2. Build the engine

    cd engine && ./configure \
      --target-list=s390x-softmmu,s370x-softmmu
    make -j"$(nproc)" && cd ..
  3. Build the daemon and the console

    make -C vulinx      # Go 1.25, Node 20
  4. Run

    ./vulinx/vulinxd \
      -vulinx engine/build/vulinx-system-s390x \
      -state-dir ~/.local/state/vulinx

    Open http://127.0.0.1:8676. On loopback it asks for no sign-in; anywhere else it serves HTTPS and requires one. Packages for Debian and Ubuntu build from vulinx/packaging.

Community

Built in the open.
Come and break it.

Take part

Report a problem or propose an idea, read the code, send a merge request. If you run an operating system we have not tried, tell us what happened — that is the most useful report there is.

Contributing

CONTRIBUTING.md says what a change needs: a contributor agreement, the licence tag, provenance, and documentation in the same change. No code comes from Hercules or Hyperion — their licence is not compatible with ours.

Licence

Free software under the GNU General Public License, version 2 or later — the engine, which carries QEMU's licence, and the daemon, the CLI and the console beside it.

The source is one command away.

VULINX Open on GitLab The engine (QEMU fork)