In 2004, Matt Katzer started talking about "his" Decoder Commander product. It was finally released in 2005; on his web site, Katzer used to claim:
In June 2005 at the [NMRA] Cincinnati convention we Introduced Decoder Commander. The first XML based distributed programmer.(sic)(Untrue, as JMRI predated this by years) Imagine our surprise when we discovered that he had copied the JMRI decoder definitions for distribution on his CDs, and had provided no credit to JMRI!
In fact, he tried to claim that he created and owned the decoder definitions, saying in the KAM Decoder Commander product manual:
All decoders have unique characteristics. KAM has created a set of Decoder Templates that has these characteristics in an (sic) XML configuration file.
KAM created a tool that copies JMRI definitions and stores them in the KAM format, deliberately omitting JMRI copyright notices and authors' names. Katzer then used this to create the decoder definitions that he shipped with version 304 of his product. He even advertises this tool as a feature of "his" product, without crediting or even mentioning JMRI.
The rest of this page summarizes some of the evidence for all this.
For example, the QSI_Electric.tpl.xml on the Decoder Commander CD includes the content of the JMRI QSI_Electric.xml file. The names are identical except for the ".tpl" modifier added.
The decoder definitions are stored in XML files. XML files contain 'formatting' information, and 'content'. The formatting says what kind of information is being carried, while the content is the information itself.
For example, an XML 'element' to represent a person's name might be
<name first="John" last="Doe" />The content here is the name "John Doe"; the formatting information specifies that this is a name, with specific values for the first and last parts.
That same information, i.e. the same name, could be represented in other formats:
<person-name first="John" last="Doe" /> <name>John Doe</name> <name familyname="Doe" firstname="John" />There are very powerful tools available for reformatting information that's been stored in XML format.
All of the JMRI files contain an XML element that shows the file's author, version number, and modification date. As an example, this is contained in the ZTC_B_Stabilized.xml file:
<version author="Phil Grainger (phil.grainger@ca.com)" version="1" lastUpdated="20030805" />This XML element contains three pieces of information:
<DATE_MODIFIED>20030805</DATE_MODIFIED> <TPL_VERSION>1</TPL_VERSION>This XML element contains two pieces of information:
Every KAM file contains a modification date character string identical to that in the corresponding JMRI file. These dates in the JMRI files span several years, yet each KAM file has the identical date as its corresponding JMRI file. This, it is clear that this was copied from the JMRI file to the KAM file.
Every KAM file contains version string identical to that in the corresponding JMRI file. Note that these version strings contain many different formats: "4", "1.0 beta", "7.1", ".5", "1.00", "1.02", etc. It's highly unlikely that an independent KAM author would choose so many different ways of writing version numbers, yet still have them be the same as those in the corresponding JMRI files. Thus, these must have been copied, too.
The author information from the JMRI files does not appear in the files on the KAM CD. Given all the other information that was copied, this must have been deliberately deleted.
Although not legally required, JMRI includes copyright information at the top of the file, for example:
<!-- Copyright (C) JMRI 2003, 2005 All rights reserved --> <!-- See the COPYING file for more information on licensing and appropriate use -->This does not appear in the KAM files (in fact, no copyright statement is present in the KAM files, probably because they understood these files were not their own work).
Put together, this pattern shows that the files were copied. But that's not all....
<ivariable label="Outout 7 - Forward/Reverse Only" CVname="53.7.0" CV="53" PI="7" SI="0" default="5" comment="QSI" item="CV53.7.0"> <ienumVal> <ienumChoice choice="Dynamic Brakes" value="5"/> <ienumChoice choice="Long Air Let-off" value="9"/> <ienumChoice choice="Short Air Let-off"/> <ienumChoice choice="Mute" value="64"/> <ienumChoice choice="Doppler Shift"/> <ienumChoice choice="Headlight" value="98"/> <ienumChoice choice="Dim Headlight"/> <ienumChoice choice="Reverse Light"/> <ienumChoice choice="Automatic Cab Lights"/> <ienumChoice choice="Directional Mars Light"/> <ienumChoice choice="Mars Light"/> <ienumChoice choice="Strobe Mars Light"/> <ienumChoice choice="Number Board Lights"/> <ienumChoice choice="Directional Headlight + Directional Mars Light" value="107"/> <ienumChoice choice="Directional Headlight + Directional Ditch Lights"/> <ienumChoice choice="Directional Ditch Lights"/> <ienumChoice choice="Ditch Lights"/> <ienumChoice choice="Stobe Ditch Lights"/> <ienumChoice choice="Cruise Control" value="177"/> <ienumChoice choice="Scale mph Report and Status Report"/> <ienumChoice choice="Coupler Effect" value="211"/> <ienumChoice choice="Squealing Brakes" value="215"/> <ienumChoice choice="Squealing Brakes + Air Brakes"/> </ienumVal> </ivariable>The content of the JMRI file element is a definition of a variable called "Outout 7 - Forward/Reverse Only" (sic; note misspelling of "Output") with default value of "5" and possible meanings:
The corresponding KAM file contains the element:
<CV INDEX="53"> <DEFAULT>5</DEFAULT> <MIN>0</MIN> <MAX>255</MAX> <NAME>Outout 7 - Forward/Reverse Only</NAME> <BITS BITS_DEFINED="NO" /> <BIT_DEFINITION> <BIT_0 /> <BIT_1 /> <BIT_2 /> <BIT_3 /> <BIT_4 /> <BIT_5 /> <BIT_6 /> <BIT_7 /> </BIT_DEFINITION> <DATE_MODIFIED /> <BitMask /> <stringList> <BitName>Dynamic Brakes</BitName> <BitName>Long Air Let-off</BitName> <BitName>Short Air Let-off</BitName> <BitName>Mute</BitName> <BitName>Doppler Shift</BitName> <BitName>Headlight</BitName> <BitName>Dim Headlight</BitName> <BitName>Reverse Light</BitName> <BitName>Automatic Cab Lights</BitName> <BitName>Directional Mars Light</BitName> <BitName>Mars Light</BitName> <BitName>Strobe Mars Light</BitName> <BitName>Number Board Lights</BitName> <BitName>Directional Headlight + Directional Mars Light</BitName> <BitName>Directional Headlight + Directional Ditch Lights</BitName> <BitName>Directional Ditch Lights</BitName> <BitName>Ditch Lights</BitName> <BitName>Stobe Ditch Lights</BitName> <BitName>Cruise Control</BitName> <BitName>Scale mph Report and Status Report</BitName> <BitName>Coupler Effect</BitName> <BitName>Squealing Brakes</BitName> <BitName>Squealing Brakes + Air Brakes</BitName> </stringList> </CV>
This KAM element is a definition of a variable called "Outout 7 - Forward/Reverse Only" (sic; note same misspelling of "Output") with default value of "5" and possible meanings:
As an example of another type of match, the JMRI ZTC_B_Stabilized.xml file contains the element:
<variable label="Directional Headlights" CV="61" mask="XXXXXXXV"> <enumVal> <enumChoice choice="Headlights are directional and operate automatically"/> <enumChoice choice="Headlights are independently controlled (F0-Front, F4-Rear)"/> </enumVal> </variable>This JMRI element defines a variable named "Directional Headlights" that can be turned on or off. When off, the feature operates as "Headlights are directional and operate automatically", versus operating as "Headlights are independently controlled (F0-Front, F4-Rear)" when the feature is on. The feature has to either be on or off, so you can only pick one of these at a time.
Graphically, this will be represented on the computer screen by the JMRI program as:
Directional Headlights o Headlights are directional and operate automatically o Headlights are independently controlled (F0-Front, F4-Rear)with two selection buttons at the left that let you pick either the 1st or 2nd values.
The ZTC_B_Stabilized.tpl.xml file from the KAM CD contains:
<CV INDEX="61"> <DEFAULT>3</DEFAULT> <MIN>0</MIN> <MAX>255</MAX> <NAME>Directional Headlights</NAME> <BITS BITS_DEFINED="YES" /> <BIT_DEFINITION> <BIT_0>Directional Headlights Headlights are independently controlled (F0-Front, F4-Rear)</BIT_0> <BIT_1 /> <BIT_2 /> <BIT_3 /> <BIT_4 /> <BIT_5 /> <BIT_6 /> <BIT_7 /> </BIT_DEFINITION> <DATE_MODIFIED /> <BitMask>00000001</BitMask> <stringList /> </CV>Much of this is excess formatting information which is not being used. For example, the DATE_MODIFIED element doesn't carry any information in this element (It's present at the top of the file in another element, as previously mentioned.) But the KAM element does carry the information that there is an option called "Directional Headlights Headlights are independently controlled (F0-Front, F4-Rear)" that is turned on when selected.
Graphically, this will be represented on the computer screen by the KAM program as a single line with a checkbox that can be selected to turn on the option:
o Directional Headlights Headlights are independently controlled (F0-Front, F4-Rear)If the checkbox is left unchecked, the feature is left unselected, as described in the JMRI file.
Note the repetition of the word "Headlights" in the label. The information in the KAM file is just a copy of the two pieces of information in the JMRI file, combined into a single phrase. Again, we see evidence that the KAM files were made by an automated translation tool.
There are numerous examples like this. Every time we look at another file on the KAM CD, we find more examples. No reasonable person could argue that Katzer and KAM didn't copy the files from JMRI. This is a violation of the JMRI license, and since Katzer and KAM therefore didn't have permission, of copyright law.
For more information on that, please keep an eye on our Recent Events page or subscribe to the jmri-legal-announce mailing list at SourceForge.net to get a brief note when things happen.