Development of the TestLab software (version 1)
102 Mr Feeley stated in his third affidavit that he is the architect of the TestLab software and that the source code for the software was written, to his design, by Mr Li, who was engaged informally for this purpose by Pavetest. I accept this evidence.
103 All, or virtually all, of the source code for the TestLab software (both version 1 and version 2) was written by Mr Li.
104 Mr Li commenced working for Pavetest in September/October 2012. He worked effectively full-time on writing version 1 of the TestLab software from that time until it was completed in early 2015.
105 Based on Mr Feeley's evidence during the hearing, it seems that, for a period of about one month in September/October 2012, Pavetest hired Mr Li through Celltek and paid Celltek for his services. In November 2012, Pavetest engaged Mr Li as a consultant. Mr Li has provided services to Pavetest as a consultant since then. He has a continuing relationship with Pavetest; he continues to work full-time for the company. Since November 2012, Mr Li has issued Pavetest with weekly invoices for his work. Although the early invoices were brief, from February 2013 the invoices contained a more detailed description of the work carried out during the relevant week.
106 In about November 2012, Mr Feeley gave Mr Li a computer to use for the project. At or about that time, Mr Feeley copied parts of the UTS software onto this computer, including the whole of the system library and a number of test modules.
107 I will set out the evidence of Mr Li, then the evidence of Mr Feeley, and then make some further findings in relation to the development of the TestLab software.
108 Mr Li stated in his affidavit that in about November 2012, Mr Feeley showed him some source code, and said it was from his previous company; Mr Feeley and Mr Li referred to this as the "old code"; Mr Feeley provided Mr Li with a computer for use on the project, on which Mr Feeley installed the old code; specifically, Mr Li received the system library code and test modules numbered 001, 002, 003, 005, 006, 018 and 019. Mr Li said during cross-examination that he still had the computer but the old code was no longer on it. He said that he was asked to remove it by Mr Feeley at some time during 2015.
109 Mr Li also stated in his affidavit that Mr Feeley told him that he wanted to create a new Pavetest product, to be called "TestLab", which had a similar purpose to the old code, but would be better; Mr Feeley explained that he wanted to create a 'universal' piece of software, which would handle all types of existing tests, and all potential tests in the future.
110 Mr Li stated in his affidavit that he had previously developed applications in Delphi for companies in the building intelligence and home automation, industrial automation and telecommunications industries; those applications had a significant feature in common, which was also significant for the TestLab application, namely real time data acquisition and transmission; as a result of his earlier experience, Mr Li believed he could understand and implement Mr Feeley's design. Mr Li also stated that, as he was new to the industry of materials testing, he did not have any knowledge about the material tests carried out in that field; he considered that he needed to understand what a materials test was, and how software could be used to create and manage a test. He stated: "I found it useful to read the old code to learn something about this general issue".
111 Mr Li stated at [22] in his affidavit that, in his view, the old code was not written efficiently; every piece of the old code was able to perform only one type of test; as a result, a number of projects were created to cater for all types of tests; this seemed to Mr Li to have caused problems with code management; first, there was code for many different projects and tests, that all had to be separately maintained; secondly, customisation and variation to some tests, seemingly as a response to requests from clients, resulted in more copies of the same code for projects. Mr Li accepted during cross-examination that he studied the old code closely and, in particular, closely enough to be able to make the observations he made in [22] of his affidavit.
112 Mr Li gave the following evidence in his affidavit:
(a) The part of the old code that he copied was the "communications and protocols part" which was within the system library.
(b) There are two layers of protocol for communicating between the software and the interface of the materials testing machine's firmware - the lower layer, called SNAP, and the higher layer, which is the application protocol.
(c) The application protocol layer specifies the precise format in which data must be exchanged between the software and the interface of the materials testing machine.
(d) Mr Feeley specified the application protocol data format for Mr Li; that format was "based on and very similar to" the application protocol data format for the old code.
(e) Based on the format that Mr Feeley specified, Mr Li designed the internal data structures for the system library of the Pavetest system. (It is convenient to note at this point that the TestLab software also has a system library.) Mr Li "used data structures of the old system library as the base for writing the internal data structures of the TestLab system library". Mr Li added: "However, those data structures followed from the application protocol data format".
(f) In version 1 of the TestLab software, "many functions for converting data from the data structures used by the system library to the application protocol data format (i.e. the functions for packaging data), and many functions that accessed those structures, were also based on corresponding functions in the old system library code".
(g) He made significant improvements to the design and implementation of old system library code.
(h) By reusing data structures used by the old code, and system library functions, instead of developing these from scratch based on the application protocol, Mr Li estimated that he saved himself "about a couple of months of development time".
(i) Other than code in the system libraries, he did not copy any of the old code.
113 Mr Li said during cross-examination that, although he did use some content from the data structures of the old code, the communication aspects were "totally redone".
114 Mr Li stated in his affidavit (as corrected during the hearing) that Mr Feeley gave him a document titled "Notes on TestLab Test States, Acquisition and Loading"; and that Mr Li read this in about March/April 2013 and used it as a guide when he was writing the TestLab software. Mr Li said during cross-examination that Mr Feeley gave him other documents as well, but this was the most important.
115 Mr Li stated in his affidavit that, once he fully understood how the new system worked according to Mr Feeley's design, which was in early 2013, he only rarely referred back to the old code. Mr Li said during cross-examination that, from about April 2013, he only rarely referred to the old code. He said: "I wasn't referring back to it every day. So only when it comes to a part where I'm not quite sure, I would refer back, and after a quick look then I will not be continuing looking at it". Mr Li accepted that the purpose of reviewing the old code was to see if there was something it could tell him that would be useful in creating new source code.
116 Mr Li accepted that his invoices dated 7 June 2013, 17 June 2013, 4 October 2013, 18 October 2013 and 23 January 2015 contained references to his consulting the old code as part of the description of the work covered by those invoices.
117 Mr Feeley gave the following evidence in his third affidavit about his conceptual approach in developing the TestLab software. He stated:
(a) Although the TestLab software would necessarily have the same general purpose as the UTS software, he conceived a different core architecture and design, which he believed would be superior to that of UTS.
(b) UTS had grown to include code for about 40 different tests, as well as code from supporting libraries. Although code for the various tests was often shared, and the tests used the same common libraries, each test was a separate module and, as such, the code for that test was separately developed and maintained.
(c) The result was that every time a materials testing standard was revised, or a new materials testing standard was specified, a skilled developer had to be engaged to write or modify the relevant test code to implement that standard.
(d) Mr Feeley wanted to take a different, and more efficient, approach to the design of TestLab, which he considered would reduce costs over time. His vision was to have a truly "universal" piece of software, which could be used by a customer to implement any materials testing standard, whether new or modified, without the need to engage a skilled developer to write a new application test module each time.
118 Mr Feeley stated in his third affidavit that before Mr Li started any coding, he specified to Mr Li the required message format for information exchange between the TestLab software and the Pavetest CDAS; that format was based on the IMACS message format that he had earlier developed; Mr Feeley considered it to be preferable to make the IMACS and Pavetest message formats incompatible (among other things, there would be features of TestLab that could not be supported by the IMACS firmware); accordingly, the TestLab software's application layer is designed to be different from the UTS software application layer, in a way that prevents the TestLab software from communicating at all with IMACS firmware (or UTS with Pavetest firmware); to achieve this design, Mr Feeley specified a different way of processing the cyclic redundancy check 16 checksum on the network protocol.
119 Mr Feeley stated in his third affidavit that he had retained copies of the UTS source code (in circumstances where he had taken them home as a back-up before leaving Old IPC); in or around December 2012, he gave Mr Li access to parts of the UTS source code; he specifically recalls supplying him with copies of Delphi 7 versions of the source code for the application test modules UTS001, UTS006, UTS018 and UTS019 and the UTS system library. Mr Feeley stated that he supplied Mr Li with UTS code as he did not have prior experience in the problem domain, that is, the real world context in which the TestLab software would need to operate. Mr Feeley also stated that he wanted Mr Li to understand what some of the requisite tests were actually seeking to do, and how users needed to conduct them, so that he could understand the fundamental technical requirements of software in this field. Mr Feeley stated: "I did not consider this to be an improper or illegitimate use of the UTS source code. The problem domain of materials testing is not confidential, but consists of published international materials testing standards that stipulate the required tests and largely determine and detail the necessary calculations, and data acquisition and control requirements of those tests, along with the loading control (i.e. material stimulus) requirements." Mr Feeley also stated that, while he appreciated that Mr Li would inevitably gain some insight into the particular software solution of UTS, he intended to implement a different core architecture and design.
120 Mr Feeley said in his third affidavit that he could have communicated his domain knowledge to Mr Li in a series of face-to-face meetings, but Mr Li did not have strong verbal English. Mr Feeley said during cross-examination that Mr Li's written English was very good and that he (Mr Feeley) could have prepared documents for him to read that 'downloaded' his knowledge and experience of materials testing and software for materials testing. Mr Feeley said in his affidavit that he thought an efficient way to bring Mr Li up to speed in the problem domain would be for him to read UTS source code.
121 Mr Feeley stated in his third affidavit that when he reviewed Confidential Schedule 4, filed as part of IPC Global's claim, he "was surprised to see the number of the similarities that existed between the source code of functions in the UTS system library and of corresponding functions in the TestLab system library". Mr Feeley also stated: "It was clear to me that Mr Li had used some UTS data structures, and had copied functions in the UTS system library that used those structures".
122 Mr Feeley also stated in his third affidavit that, while he expected to see some similar data structures because of the similarities between message formats, he had not expected to see similarities between the source codes. In evidence admitted on a limited basis (in connection with issues under s 115(4) of the Copyright Act), Mr Feeley stated that he believes Mr Li copied some source code in the system library because of a miscommunication on Mr Feeley's part, perhaps due to a language barrier; and that he (Mr Feeley) had not made his intentions sufficiently clear to Mr Li.
123 Mr Feeley wrote and provided to Mr Li a number of documents relating to the design of the TestLab software. The documents were listed in chronological order, and described, in Mr Feeley's affidavit dated 11 October 2016 (Mr Feeley's fourth affidavit).
124 Mr Feeley gave the following evidence during cross-examination in relation to his giving the source code of the UTS software to Mr Li.
(a) It was put to Mr Feeley that it was not right to give Mr Li access, for the purposes of working on TestLab, to source code that had been written for a rival business, namely the UTS source code. Mr Feeley responded: "I considered it actually fair use. I considered that as architect of the software … I had some right to at least look at it. And the reason I gave it to Mr Li was to research an approach that I had taken in the past or that I had been involved with in the past. … And that we were looking to do something completely different." He said that his view that it was "fair use" was a view he reached about an aspect of copyright law; that "fair use" was terminology that explained his thinking at the time; and that he did not pay close attention to the requirements of copyright law at the time. He accepted that he held the view that the source code was confidential and that he understood that the confidentiality of the UTS source code belonged to Old IPC. The gist of Mr Feeley's responses to further questions as to the propriety of providing the UTS source code to Mr Li was that, as he was involved as the architect of the whole of that software, that gave him certain rights, and the provision of the source code to Mr Li, for research purposes in the context of developing completely different software, was fair use.
(b) Mr Feeley said that he believes he said to Mr Li, "We should not use any of this code. Any code we should write should be our own."
(c) Mr Feeley said he had no reason to disagree with Mr Li's evidence as to the files of UTS he was given. Mr Feeley said that the application modules from the UTS software he gave to Mr Li were a sample representing the different application modules that you might find out of the set of 40. Mr Feeley accepted during cross-examination that giving Mr Li the UTS source code gave Mr Li insight into the types of tests that Pavetest would need to address.
(d) Mr Feeley said that, when he received a letter from IPC Global's solicitors during 2014, he advised Mr Li that they should not be looking at UTS source code.
(e) Mr Feeley said that Mr Li's invoices were provided to him by email and he forwarded them on for payment. Mr Feeley was taken to a number of invoices showing Mr Li reviewing the old code. Mr Feeley said during cross-examination that in 2013 and 2014 he told Mr Li on a couple of occasions that he should not be looking at old source code. It was put to Mr Feeley that the invoices show that from early 2013 until an occasion in early 2015, when Mr Li encountered issues of some sort with the task he had of writing software for Pavetest, Mr Li went back and consulted the UTS software for some reason or other. Mr Feeley said that, if Mr Li's references to "old code" mean the UTS software, then it appears that way.
(f) Mr Feeley said that the data structures and the message formats were specified by him to Mr Li. These were very similar to those present in the UTS software.
(g) Mr Feeley said that there would be probably only two to three weeks' work in coming up with a message protocol. He accepted that, rather than do that work, he used the work he had done before, at Old IPC (and before 2003, when he was an employee).
(h) Mr Feeley said that he did not consider the communications protocol to be confidential. (As set out in [78] above, I consider that the communications protocol document was confidential to Old IPC.)
(i) Although Mr Feeley said that the communications protocol was set out in a protocol document, he accepted that the format was embedded in the firmware and software. (In re-examination, Mr Feeley explained that by "embedded", there are two parts to consider. The first part is formulating the message to send and the second part is in decoding the message to be received. "So if we take the decoding part first, when the PC software received a message or a packet, which contains a message, it needs to … interpret that message into a data structure for use in the rest of the program. In the transmission side of things, there is a similar process but, typically, the information comes from the application that defines or sets parameters in a data structure, and then a function is called that takes that data structure, produces a packet or a message, and sends it to the control and data acquisition system.")
(j) Mr Feeley said that he also loaded onto a laptop being used by Mr Li the executable code for parts of the UTS software. He said that he did this to educate Mr Li about the different types of tests. He said that he assumes that the parts of the UTS executable code that he gave Mr Li were the same parts as the parts of the UTS source code that he gave Mr Li. Mr Feeley accepted that, as at the end of 2012 and the beginning of 2013, he understood that the copyright in the executable code of the UTS software was owned by Old IPC; and that he did not think he had Old IPC's permission to reproduce that software.
125 To the extent that there were differences between the evidence of Mr Li and that of Mr Feeley, I prefer the evidence of Mr Li. His evidence was given precisely and he is the person who actually did the programming and, thus, the copying. However, as noted below, I do not accept all aspects of Mr Li's evidence. Having regard to the evidence of Mr Li and Mr Feeley set out in [108]-[124] above, I make the following findings:
(a) In about November 2012, Mr Feeley provided Mr Li with a computer onto which he had copied UTS source code and object code. Mr Feeley told Mr Li it was from his previous company. Mr Feeley and Mr Li referred to this as the "old code". The parts of the UTS source code provided by Mr Feeley to Mr Li were the source code for the system library and test modules numbered UTS001, 002, 003, 005, 006, 018 and 019.
(b) Mr Feeley told Mr Li that he wanted to create software with the same general purpose as the UTS software, but with improvements; in particular, Mr Feeley wanted to create a 'universal' piece of software, which would handle all types of existing tests, and all potential tests in the future. Thus the overall architecture of the TestLab software is different to that of the UTS software.
(c) Although Mr Li was an experienced programmer, he was new to the industry of materials testing. In these circumstances, he found it useful to read the old code to learn something about materials testing.
(d) Mr Feeley specified the message format for information exchange between the TestLab Software and the Pavetest CDAS. The format was based on and very similar to the IMACS message format.
(e) Given that similarity, Mr Li used data structures of the UTS system library as the base for writing data structures of the TestLab system library. He also based many functions for converting data from the data structures used by the system library to the message format (ie, the functions for packaging data), and many functions that accessed those structures, on corresponding functions in the UTS system library code.
(f) Mr Li referred to the UTS source code frequently during the period November 2012 to April 2013. This includes, not only the UTS system library code, but also the source code for the test modules he was provided with. This helped him generally with the development of the TestLab software.
(g) After April 2013, Mr Li consulted the UTS source code from time to time, as needed. Although Mr Li said that he "rarely" referred to it from about April 2013, he also said that he "wasn't referring back to it every day". This implies that he may still have referred to it several times each week. Mr Li's invoices dated 7 June 2013, 17 June 2013, 4 October 2013, 18 October 2013 and 23 January 2015 show that he consulted the UTS code in the weeks covered by those invoices.
(h) I do not accept Mr Feeley's evidence that he told Mr Li, "We should not use any of this code. Any code we should write should be our own." The fact that Mr Li used the UTS source code suggests that he was not given any such instruction. Mr Li did not give evidence of any such instruction. There is no objective (eg, documentary) evidence to suggest such an instruction was given.
(i) I do not accept Mr Feeley's evidence that, when he received a letter from IPC Global's solicitors during 2014, he advised Mr Li that they should not be looking at UTS source code. The fact that Mr Li continued to look at the code after 2014 suggests that this instruction was not given. Mr Li did not give evidence of any such instruction. In any event, Mr Feeley did not take steps to delete the copy of the UTS source code on Mr Li's computer until 2015.
(j) Although Mr Li said that, other than code in the UTS system libraries, he did not copy any of the UTS code, there is evidence (discussed below) that version 2 of the TestLab software contains a number of unusual names that may suggest copying beyond the system library. Whether or not Mr Li copied parts of the UTS source code beyond the system library, I think it is likely that he consulted and derived assistance from the UTS test modules that were provided to him.
(k) I accept Mr Feeley's evidence that there would be probably only two to three weeks' work in coming up with a new message protocol rather than using the work he had done before at Old IPC.
(l) Mr Li gained considerable assistance in the development of the TestLab software from consulting the UTS source code. Mr Li said that, by reusing data structures used by the UTS code, and system library functions, instead of developing these from scratch, he estimated that he saved himself "about a couple of months of development time". This does not take into account the benefit he gained generally from consulting the UTS software. I think it likely that the amount of time saved was considerably greater than two months.
126 There is a factual issue (although nothing seems to turn on it) whether the version of UTS copied by Mr Li was a Delphi 7 version or a Delphi 2009 version. The expert evidence filed by IPC Global (discussed below) shows correspondence between a Delphi 2009 version of UTS and the TestLab software. Mr Fernando gave evidence in his fifth affidavit that certain features of the TestLab software appeared only in the Delphi 2009 version of UTS. On the other hand, Mr Feeley stated in his third affidavit (prepared after much of the expert evidence was filed) that, to the best of his knowledge, all of the copied code was from a Delphi 7 version of UTS. He stated that the similarities between Delphi 2009 UTS and the TestLab software code (discussed below), in his view, merely reflect that much, although not all, of the system library code in Delphi 7 UTS can also be found in the corresponding libraries of Delphi 2009 UTS. Mr Li said during the hearing that the old code was written using Delphi 7 and, when he was writing the new code he first used Delphi 2009 and, later, XE3 (a version of Delphi). He said that in most circumstances it is possible to cut and paste source code from Delphi 7 code to Delphi 2009 code. An exception relates to Unicode conversion: in simple terms, English characters (supported by both Delphi 7 and 2009) use one byte, whereas non-English (or Unicode) characters (supported by Delphi 2009 but not Delphi 7) use two bytes; more room is therefore needed to save the extra string. In light of Mr Feeley's and Mr Li's evidence, it seems that, at least in the main, the version of UTS that Mr Li copied was a Delphi 7 version.
127 Mr Sinadinos stated in his second affidavit that, although he was not involved in the software or firmware development, it was his understanding that Mr Feeley had a copy of the firmware source code. In relation to the software source code, Mr Sinadinos said that he knew Mr Feeley had made copies from time to time and taken them home by way of back-up while he was doing work for Old IPC. I accept this evidence.