Section II - Background to the dispute
Section II - Background to the dispute
IBM Mainframes
In 1964 the IBM group developed its first mainframe computer, System/360. Mainframes are high performance computers with large amounts of memory and data processors that can process billions of calculations and transactions in real time. The following is a brief overview of IBM mainframe systems for the purpose of background to the issues in dispute.
The main processor in a computer is known as the central processing unit (“CPU”). A CPU is an electronic circuit that operates by executing a sequence of machine instructions stored in the computer’s memory. Each instruction requires the CPU to execute a relatively simple computation. The complexity arises from the volume, speed, sequence, permutations and combinations of computations executed.
CPUs have registers, memory areas dedicated to each CPU where it can temporarily store information. Every IBM z CPU has 16 general purpose registers, that assembler programs can use or can be used for code generated by compilers, to store working data and provide input to CPU instructions.
The CPUs in IBM mainframe computers are based on z/Architecture. A feature of the mainframe is that different parts of the system can access and process data at the same time, so that if one part of the system fails, the data can still be accessed and processed without disruption, referred to as near zero downtime. Mainframes are highly secure in that customer data stored within the mainframe system can be encrypted and subject to a high degree of protection from malicious actors and inadvertent occurrences which might compromise the data. Furthermore, they are scalable in that mainframe users can add processors, memory and storage capacity without disrupting performance of the mainframe; and they have a high level of continuing compatibility, ensuring that technology support remains available for older applications.
Mainframes require an operating system to provide an environment in which application programs can run. The operating system is software that manages the computer system’s physical resources, such as memory, processors, devices and file systems. The operating system most widely used on the mainframe is z/OS, software built on the IBM base control program, composed of many individual components which form layers of capability upon which mainframe customers build their application programs. The z/OS system can only run on IBM z mainframes, or software emulating mainframe hardware.
A machine code program is a sequence of instructions, in binary (ones and zeros) or hexadecimal format (numbers represented by 0 to 9 and A to F using base 16), ready to be processed by a CPU. Although it is possible to write all application programs as machine code programs, most programs are written in high-level language source code or assembly code.
Source code consists of a set of statements or instructions which tell the computer which mathematical operations to carry out so as to yield the desired outputs in response to specified inputs. It is human-readable code written in a programming language, consisting of numbers, alphanumeric characters and punctuation characters, such as COBOL, PL/I, Java, Python and C.
A CPU can only execute machine code programs; it cannot process high-level language source code. Therefore, source code must be compiled into object code in binary or hexadecimal form before it can be executed. The compiler is a software program that reads source code from an input file, translates the statements into optimal machine code instructions and writes them to an output file. Additional to these functions, the compiler calls any runtime library services invoked by an appropriate command in the source code and generates additional executable code that is required to initialise the program for execution.
Assembler language is a high-level language that is used when a programmer needs more precision or control over the program’s interaction with the mainframe hardware. Although it can be written and modified by a human programmer, it uses mnemonics and is closer in form to object code. Each machine instruction is described in text format by an “opcode”, determining the operation that the instruction should perform, and a series of “operands”, specifying the data values and/or memory locations with which the instruction should work.
Assembly code and machine code are closely related in that each assembler instruction maps directly on to a corresponding machine instruction. Therefore, converting from assembly code to machine code is a straightforward process of assembly; an assembly code program is assembled into object code by an assembler.
The runtime environment is a layer of capability which operates within an operating system and enables programs and applications to be executed. It consists of the runtime services required to implement the functions specified by the programmer in the source code of a program during the execution of that program. Runtime services are called upon by a program to facilitate the execution of particular functions. Collections of runtime services are referred to as runtime libraries. The Language Environment is a common runtime environment for applications written in a variety of programming languages for execution in z/OS, including COBOL, C and PL/I.
Application programs often are contained in a number of different high-level language files and require additional services provided by runtime libraries. Therefore, following compilation or assembly, a binder or linkage editor must bind or link the various object modules which make up the object code, together with existing object code files from the runtime libraries, to form an executable load module (or program object). Load modules can be loaded into the main storage of the computer, allowing the program to run.
‘Middleware’ products sit between the services provided by an operating system and the applications, producing application programming interfaces (“APIs”). An API is a functional interface supplied by the operating system (or by a licensed program) that allows an application program written in a high-level language to use specific data or functions of the operating system or licensed program. APIs enable multiple transactions to be processed at the same time whilst preserving the integrity and consistency of the data. IBM CICS Transaction Server (“CICS”) and IBM Information Management System (“IMS”) are middleware software products within z/OS. CICS is a general-purpose transaction processing system for online applications, often used for small but high-volume tasks, such as banking transactions. IMS is both a general-purpose transaction processing system and a hierarchical database management system for online applications.
CICS applications access their data in files, such as virtual storage access method (“VSAM”) managed files, using the “EXEC CICS FILE” family of API commands. Application programmers write an EXEC CICS statement into the source code. Such statements must be pre-processed by the CICS translator before the relevant COBOL (or PL/I) compiler can compile them. The CICS translator replaces each EXEC CICS statement in the application source code with a sequence of language specific source code statements which it generates. The generated sequences invoke (by call statements) the required function in the CICS runtime. The detail of each generated sequence is determined using Language Definition Tables, an IBM proprietary set of algorithms and mappings contained within the CICS translator.
CICS provides functions to facilitate the passing of data between different regions of CICS efficiently. Distributed Program Link (“DPL”) enables an application running in one region of CICS to communicate with an application running in a different CICS region. Distributed Transaction Processing (“DTP”) enables a CICS transaction to communicate with a different transaction running in another non-CICS system.
The CICS translator can also be used for IMS services. In such cases, the programmer invokes IMS APIs and IMS run times by inserting “EXEC DLI” statements into the source code. The IMS database (“IMS DB”), is accessed by IMS programs through an IMS API, known as “IMS DL/I API”. The IMS transaction monitor provides transactional capabilities which are similar to the transaction capabilities provided by CICS.
The ability to store and access information in a database is essential for commercial database processing. Database managers perform many tasks, most importantly providing APIs to allow applications to access, store and share data, to allow administrators to manage workloads and data, and to ensure resilience of the database even if an application program crashes in the middle of a transaction. IMS is a hierarchical database system, storing data in different categories of files, which supports transaction processing. IBM Db2 is an alternative relational database manager which runs on z/OS. Db2 uses tables (catalogs), containing columns and rows, to store, manage and retrieve data. It also uses catalogs to store information about the data stored in Db2.
Programs can be executed in real-time or as batch jobs. Job Entry System (“JES2”) is a z/OS system used to provide an execution environment and manage batch jobs. z/OS batch jobs are created using a z/OS scripting language, Job Control Language (“JCL”). JCL statements can be used to specify how and when a job will run, the name of the job, programs that will be executed, and data files that the job may use.
Since the 1960s, the IBM group has continued to research, develop and market its product worldwide and it is now the only manufacturer and supplier of new mainframes.
- Heading
- Mrs Justice O’Farrell
- Section II - Background to the dispute
- The SDM
- Hercules
- Neon litigation
- Formation of LzLabs and Winsopia
- The ICA
- SDM development and the clean room procedures
- Launch of the SDM
- Project Eiger
- Further development of the SDM
- Audit request and termination
- Section III - The proceedings
- The Issues
- The factual witnesses
- Section IV - Construction of the ICA
- Approach to construction of the ICA
- Scope of licence
- The ICA Programs
- Customer applications
- Licensed Program Specifications
- Independent software vendors (ISVs)
- Debugging tools
- Restrictions on use of ICA Programs
- Legislative framework
- Berne Convention
- TRIPS
- WIPO
- Software Directive
- Copyright, Designs and Patents Act 1988 (CDPA)
- Applicable legal principles
- Conclusions on ICA
- Section V - Alleged breaches of the ICA
- Disassembly, decompilation and translation
- Item 2: Load Module Decompiler (“the LMD”) (Paragraph 11.2 of the Technical Particulars)
- Item 3: CICS Control Blocks Document (Paragraph 11.3 of the Technical Particulars)
- Item 4: EXEC DLI (Paragraphs 27.18 & 28.19 of RRRAPOC)
- Item 5: IBM Binder Software (Paragraph 11.4 of the Technical Particulars)
- Compiler listings – summary of the dispute
- Item 6: IGZCIVL COBOL runtime module (Paragraph 11.6 of the Technical Particulars)
- Item 7: CICS Translators (Paragraph 20.1-2 of the Technical Particulars)
- Item 8: Floating point rounding rules (Paragraph 20.3 of the Technical Particulars)
- Item 9: IBM PL/1 compiler (Paragraph 20.4 of the Technical Particulars & Paragraph 27 of the POC)
- Item 10: XML Parse statements (Paragraphs 33-38 of the Technical Particulars)
- Item 11: COBOL initialisation, branching and I/O declaratives (Paragraphs 27.4&27.5 RRRAPOC)
- Item 12: PL/I Condition handling (Paragraphs 27.10-27.12 of RRRAPOC)
- Reverse engineering through the systematic use of traces, dumps, slip traps, packet sniffing and other debugging tools techniques – summary of the dispute
- Item 13: CICS-to-CICS communications (Paragraph 28.1 of the Technical Particulars)
- Item 14: AMBLIST analysis of CICS Stubs (Paragraph 28.2 of the Technical Particulars)
- Item 15: Colesoft z/XDC and COBOL initialisation (Paragraph 28.3 of the Technical Particulars)
- Item 16: XDC and IMS (Paragraph 28.4 of the Technical Particulars)
- Additional examples
- Item 17: SLIP Traps and CICS (Paragraph 28.5 of the Technical Particulars)
- Item 18: SLIP Traps and COBOL (Paragraph 28.6 of the Technical Particulars)
- Macros and Copybooks - introduction
- Macros (Paragraphs 32.1-32.9 of the Technical Particulars) – summary of the dispute
- Item 19: DR-3246 (Paragraph 32.1 of the Technical Particulars)
- Item 20: DR-10237 (Paragraph 32.2 of the Technical Particulars)
- Item 21: DR-2753 (Paragraph 32.3 of the Technical Particulars)
- Item 22: DR-2771 (Paragraph 32.4 of the Technical Particulars)
- Item 23: DR-2796 (Paragraph 32.5 of the Technical Particulars)
- Item 24: DR-3280 (Paragraph 32.6 of the Technical Particulars)
- Item 25: DR-4281 (Paragraph 32.7 of the Technical Particulars)
- Item 26: DR-4322 (Paragraph 32.8 of the Technical Particulars)
- Item 27: DR-0847 (Paragraph 32.9 of the Technical Particulars)
- Macros - discussion
- Copybooks (Paragraphs 2.1.1.3 and 32.10-32.12 of the Technical Particulars) – nature of the dispute
- Item 28: DR-715 (Paragraph 32.10 of the Technical Particulars)
- Item 29: DR-753 (Paragraph 32.11 of the Technical Particulars)
- Item 30: DR-756 (Paragraph 2.1.1.3 of the Technical Particulars)
- Copybooks - discussion
- Transferring “unscrubbed” materials
- Item 31:Epiphany
- Item 32: Db2 Catalog table metadata
- Item 33: DSS dump
- Item 34: Kednos
- Item 35: CSECTs deliberately omitted from scrubbing
- Items 36 and 42: Unscrubbed CSECTs
- Items 37 and 40: IMS PROCLIB & DLIBATCH
- Item 38: DFHEI1 module
- Item 39: IGZXANE
- Item 41: IGZXNE3N
- Item 43: CEEBETBL, CEEBLLST, IBMPINPL & CEESG*
- Item 44: DR-4617
- Item 45: DR-171
- Item 46: Scrubbing failures
- Item 47: @@TRGLOC CSECT
- Item 48: PARMLIB & PROCLIB
- Use outside Enterprise and beyond Designated Machine
- Item 49: Brad Taylor (Paragraph 44.2 of the Technical Particulars)
- Item 50: Winsopia Pizzabox (Paragraph 44.5 of the Technical Particulars)
- Item 51: Justin Bendich (Paragraph 44.6 of the Technical Particulars)
- Conclusions on technical breaches
- Section VI - Wrongful procurement of breach
- Applicable legal principles
- LzLabs
- LzLabs UK
- Claims against the directors
- Mr Moores
- Summary on unlawful procurement
- Section VII - Unlawful means conspiracy
- Applicable legal principles
- Knowledge of unlawfulness
- Summary on unlawful means conspiracy
- Section VIII – Audit and Termination
- Validity of audit request
- Validity of termination
- Section IX - Limitation
- Contractual limitation
- Statutory Limitation
- Deliberate concealment
- Finding - section 32(1)(b)
- Finding - Section 32(2)
- Actual or constructive knowledge – legal principles
- Date of knowledge issues
- ICA 2013
- Mr Knight - 2017
- Mr Anzani - 2018
- Conclusions
![HT-2021-000363 - [2025] EWHC 532 (TCC)](https://backend.juristeca.com/files/emisores/logo_yJUntHA.png)