Item 8: Floating point rounding rules (Paragraph 20.3 of the Technical Particulars)
Item 8: Floating point rounding rules (Paragraph 20.3 of the Technical Particulars)
The IBM C language runtime contains functionality used to round floating point numbers (non-integers which contain a decimal point). Arithmetic and conversion operations performed by the mainframe produce an intermediate result correct to infinite precision and with unbounded range. Unless that intermediate result can be represented exactly in the target format, it is replaced by a value that depends on the rounding mode used. There are various rounding modes that can be used and the mathematical operations used to perform rounding are set out in a published standard of the Institute of Electrical and Electronics Engineers Inc, IEEE-754.
The IBM mainframe provides a floating point control register (“the FPC”) that enables users of the IBM C language runtime to specify the rounding mode to format the results of their calculations. The format of the FPC is published by IBM in publicly available documentation, namely, the IBM Principles of Operation manual.
In the IBM C language runtime, a data structure called “_FP_fpcreg_t” (“the FPC Data Structure”), is used to identify the rounding mode specified by the customer application, using IBM supplied APIs to view and modify the FPC accordingly. The functions of the APIs are set out in publicly available documentation.
The experts agree that the IBM XL C/C++ compiler provides a header file that provides C language source code that maps the FPC data area, which is made available to z/OS customers but which is not publicly documented in full. The z/OS language environment APIs take this data as input and provide it as output. The use of this structure is partially shown in IBM documentation but the internal code is not shown.
The allegation is that Winsopia used reverse engineering to test the APIs that modify the FPC, ascertain the effect of different values on the API rounding functions and determine how it performed number rounding.
On 17 February 2021 Peeter Joot of LzLabs created DR 520, requesting Winsopia to run test programs to discover the rounding mode selection data structure and the values corresponding to four floating point number functions. Subsequently further versions of the test programs were supplied to be run on the mainframe. Winsopia compiled and executed the programs and provided to LzLabs the program output, compiler listings and scrubbed load modules created.
On 18 February 2021 Mr Joot made a commit to the SDM source code, adding parameter structures for the SDM replacement FPC data structure, citing as the source of the change DR 520. On 1 March 2021 Mr Joot made a further commit, modifying one of the fields of the data structure, again citing DR 520 as the source.
The experts’ second joint statement contains the following agreed statements:
The SDM has its own file mapping the FPC. It is plausible that the contents of this file could have been created from publicly available IBM documentation. However, evidence indicates that information from Winsopia was used.
LzLabs made modifications to the SDM from the information obtained to support the setting and retrieval of rounding mode to match that provided by the IBM z/OS language environment and XL/C compiler.
Source code material from the IBM mainframe was not copied into the SDM.
The disputed issues are:
whether Winsopia’s analysis of the FPC Data Structure was in respect of an ICA Program within the meaning of the ICA;
whether Winsopia’s analysis amounted to reverse engineering in breach of clause 4.1.3(a) of the ICA;
whether Winsopia’s analysis fell within permitted observation, study and testing pursuant to Article 5(3) of the Software Directive;
whether Winsopia’s analysis was necessary in order to achieve interoperability of customer applications with the SDM and, as such, was permitted by Article 6 of the Software Directive;
whether Winsopia’s supply to LzLabs of the compiler listings, including the format and values of the rounding mode selection data structures, constituted breach of clauses 4.1, 4.1.2(b) and/or 4.1.3(b) of the ICA.
IBM’s case is that the FPC Data Structure and the IBM supplied APIs are component parts of the IBM C Language runtime, part of z/OS v2 Base, an ICA Program.
The defendants’ case is that the information sent by Winsopia to LzLabs took the form of compiler listings and scrubbed load modules. This was interface information, comprising material output by the compiler and not an ICA Program.
Winsopia provided output data, printing out all the bytes contained in the requested configurations of the FPC Data Structure. As such, this amounted to reverse engineering of the C Language runtime, which was an ICA Program within the meaning of the ICA and a transfer outside Winsopia’s Enterprise.
The defendants’ case is that Winsopia’s actions amounted to permitted observation, study and testing of the interfaces that modify the FPC register, in particular, the format and values of the rounding mode selection data structures inserted by the IBM C compiler.
I reject that submission. Winsopia did not confine its actions to examining the input and output of the test programs to determine the functioning of the C language runtime. Winsopia’s production of the compiler listings disclosed, not just the output of the program but the data structures and how the C language runtime dealt with rounding modes or changes to rounding modes specified in customer applications, that is, expression of the program, rather than its functioning.
For the reasons set out above in respect of the compiler listings allegations, production of the compiler listings was not indispensable to obtain information necessary to achieve interoperability so as to engage the Article 6 exception.
Although it is common ground that Winsopia did not transfer to LzLabs any IBM source code or CSECTs, it did provide the values and configurations for the FPC Data Structure. This amounted to a transfer of an ICA Program in breach of clause 4.1.3(b) of the ICA.
It is common ground that LzLabs requested, and Winsopia supplied, the information required in DR 520 for development of the SDM by LzLabs. This was in breach of clauses 4.1 and 4.1.2(b) of the ICA.
In summary, on this issue:
Winsopia’s analysis of the FPC Data Structure was in respect of an ICA Program within the meaning of the ICA.
Winsopia’s analysis amounted to reverse engineering in breach of clause 4.1.3(a) of the ICA.
Winsopia’s analysis did not fall within permitted observation, study and testing pursuant to Article 5(3) of the Software Directive.
Winsopia’s analysis did not fall within the permitted exception in Article 6 of the Software Directive.
Winsopia’s supply of the compiler listings, including the format and values of the rounding mode selection data structures, to LzLabs constituted breach of clauses 4.1, 4.1.2(b) and/or 4.1.3(b) of the ICA.
- 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)