/
TechRoadMap.shtml
376 lines (266 loc) · 10.6 KB
/
TechRoadMap.shtml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html lang="en">
<head>
<meta name="generator" content=
"HTML Tidy for Mac OS X (vers 31 October 2006 - Apple Inc. build 15.17), see www.w3.org">
<title>JMRI: Technology Road Map</title>
<meta name="author" content="Bob Jacobsen">
<meta name="keywords" content="JMRI technical code road map">
<!-- The combination of "Define" and {Header,Style, Logo and Footer} comments -->
<!-- are an arbitrary design pattern used by the update.pl script to -->
<!-- easily replace the common header/footer code for all the web pages -->
<!-- delete the following 2 Defines if you want to use the default JMRI logo -->
<!-- or change them to reflect your alternative logo -->
<!-- Style -->
<meta http-equiv="Content-Type" content=
"text/html; charset=us-ascii">
<link rel="stylesheet" type="text/css" href="/css/default.css"
media="screen">
<link rel="stylesheet" type="text/css" href="/css/print.css"
media="print">
<link rel="icon" href="/images/jmri.ico" type="image/png">
<link rel="home" title="Home" href="/">
<!-- /Style -->
</head>
<body>
<!--#include virtual="/Header.shtml" -->
<div id="mBody">
<!--#include virtual="Sidebar.shtml" -->
<div id="mainContent">
<h1>JMRI: Technology Road Map</h1>
This page is the road map
for JMRI's future development, including changes to our use
of Java technologies. It is maintained and updated through
continuing discussion on the <a href=
"https://jmri-developers.groups.io/g/jmri/topics">
jmri-developers mailing list</a>.
<p>There's also a <a href="TechRoadMapOlder.shtml">page
containing the history</a>, particularly the saga of how we
moved forward to Java 1.6 and Java 8 across a series of
platform-related changes.</p>
<h2>JMRI Releases</h2>This section describes the (notional)
plans for JMRI releases in the future.
<table border="1">
<tr>
<th>Release</th>
<th>Description</th>
<th>Date</th>
<td>JRE</td>
<td>JDK</td>
</tr>
<tr>
<td>3.11.*</td>
<td>Development series</td>
<td></td>
<td>1.6</td>
<td>8</td>
</tr>
<tr>
<td>4.0</td>
<td>Production version, culmination of 3.11.* series</td>
<td>July 2015 <b>(done)</b></td>
<td>8</td>
<td>8</td>
</tr>
<tr>
<td>4.1.*</td>
<td>Development series</td>
<td></td>
<td>8</td>
<td>8</td>
</tr>
<tr>
<td>4.2</td>
<td>Production version, culmination of 4.1.* series</td>
<td>December 2015 <b>(done)</b></td>
<td>8</td>
<td>8</td>
</tr>
<tr>
<td>4.3.*</td>
<td>Development series</td>
<td></td>
<td>8</td>
<td>8</td>
</tr>
<tr>
<td>4.4</td>
<td>Production version, culmination of 4.3.* series</td>
<td>Early Summer 2016</td>
<td>8</td>
<td>8</td>
</tr>
<tr>
<td>4.5.*</td>
<td>Development series</td>
<td></td>
<td>8</td>
<td>8</td>
</tr>
<tr>
<td>4.6</td>
<td>Production version, culmination of 4.5.* series</td>
<td>Late Fall 2016</td>
<td>8</td>
<td>8</td>
</tr>
<tr>
<td>4.7.*</td>
<td>Development series</td>
<td></td>
<td>8</td>
<td>8</td>
</tr>
<tr>
<td>4.8</td>
<td>Production version, culmination of 4.7.* series</td>
<td>Early Summer 2017</td>
<td>8</td>
<td>8</td>
</tr>
<tr>
<td>4.9.*</td>
<td>Development series</td>
<td></td>
<td>8</td>
<td>8</td>
</tr>
<tr>
<td>4.10</td>
<td>Production version, culmination of 4.9.* series</td>
<td>December 2017</td>
<td>8</td>
<td>8</td>
</tr>
<tr>
<td>4.12</td>
<td>Production version, culmination of 4.11.* series</td>
<td>July 2018</td>
<td>8</td>
<td>8</td>
</tr>
<tr>
<td>4.14</td>
<td>Production version, culmination of 4.13.* series</td>
<td>December 2018</td>
<td>8</td>
<td>8</td>
</tr>
<tr>
<td>4.16</td>
<td>Production version, culmination of 4.15.* series</td>
<td>July 2019</td>
<td>8</td>
<td>8</td>
</tr>
<tr>
<td>4.18</td>
<td>Production version, culmination of Fall 2019 series</td>
<td>December 2019</td>
<td>8</td>
<td>8</td>
</tr>
<tr>
<td>??</td>
<td>Production version, culmination of Spring 2020 series</td>
<td>July 2020</td>
<td>??</td>
<td>??</td>
</tr>
</table>
<h4>JMRI in the Near Future</h4>The 4.1.* series of test
releases in Fall 2015 started the requirement for Java 8,
also known as Java 8.
This has continued through the following release series.
The December 2018 release, notionally JMRI 4.14 will
remain with Java 8, but may involve other library updates.
This includes doing development, test and production release
builds using Java 1.8.0_181. (We also
<a href="http://builds.jmri.org/jenkins/job/Development/job/VersionChecks/job/JRE%208u151/">test on Jenkins with Java 1.8_0_151</a>
to ensure Windows XP compatibility)
<p>The current long-term-support Java release is
Java 11 from Fall of 2018.
Oracle has
<a href="https://blogs.oracle.com/java-platform-group/a-quick-summary-on-the-new-java-se-subscription">aligned their Java and the OpenJDK from that point</a>.
Because some people will
need to have that on their computers for other purposes,
we ensure JMRI can build and run on Oracle Java 8 through 11
and OpenJDK version 11
by using
<a href="http://jmri.tagadab.com/jenkins/job/Development/job/VersionChecks/">Jenkins</a>
to
<ul>
<li>Build and run AllTest on each of the JDKs for Java 9, 10, 11; and
<li>Run allTest from each of those JDK 9, 10 and 11 builds on a Java 8u181 JRE; and
<li>Run AllTest from our JDK 8 builds on each of the Java 9, 10 and 11 JREs.
</ul>
You can follow the current status of these on the
<a href="CI-status.shtml">CI Status page</a>.
<p>
At some point, the Java version required by JMRI has to move forward.
For example, Oracle
<a href="http://www.oracle.com/technetwork/java/javase/javaclientroadmapupdate2018mar-4414431.pdf">has announced</a> that they'll stop providing standalone JRE installers
by the end of 2020, by which time JMRI distributions will have to contain
the Java runtime components or it won't be possible to run JMRI on newly-bought PCs
(<a href="http://adoptopenjdk.net">will continue to provide independent JREs</a>).
That in turn might require tools like
jlink from Java 9 or later.
<p>
While we don't know yet when JMRI will have to move past Java 8,
we do know that the earliest Java 9 or later will be required for users is Fall 2020.
Allowing for migration and
development time, and depending on development plans, JMRI's December 2020 release
might require Java 11 (in which case it would be called JMRI 5.1)
or stay with requiring Java 8 or later (in which case it would be called JMRI 4.20).
Releases before Fall 202 are intended to stay fully compatible Java 8.
<p>
It's possible that, as an intermediate step,
JMRI development will move to a later Java SDK version
without requiring that JMRI users move to a later Java JRE version.
For example, it's remotely possible that JMRI will require a Java 11 SDK
to compile and build distributions, which would still be able to
work on Java 8. We prefer to do that to keep older hardware working,
but it's not always possible.
(Note: Here, we're talking about using the Java 11 SDK, not about
using Java 11 language features. Java 9 through 11 SDKs
require setting their source version and runtime version to the same
value; you can't compile i.e. Java 11 source code for a Java 8 runtime)
<p>
There are also smaller migration issues. These don't directly
affect JMRI users in the way that Java version changes do, but
they may effect external users of the JMRI libraries.
<ul>
<li>At some point, we have to migrate away from <a href=
"Help.shtml">JavaHelp and JHelpDev</a>. At a minimum, we'll
need to <a href=
"http://weblogs.java.net/blog/brinkley/archive/2004/11/javahelp_v20_02.html">
replace the renderer</a>. There are <a href=
"http://stackoverflow.com/questions/9900110/javahelp-viewers-or-alternatives">
several alternative help systems</a> available. <a href=
"http://www.oracle.com/technetwork/topics/index-083946.html">
Oracle Help</a> might be a good choice. DocBook as a tool
for generating multiple documentation forms is also being
considered.</li>
<li>USB access technology has advanced a lot since support
for some basic libraries was added to JMRI. At some point,
we should replace those early library versions, but it will
break some user scripts.</li>
<li>Our <a href="Logging.shtml">logging methodology</a> is
now a hybrid of native logging (in some included
libraries), Log4J 1.2.17 (our logger) and SLF4J (a logging abstraction
layer). We may choose to simplify that, but at
least we have to move to another logger at some point.
</li>
</ul>
<h3>Java Release and Operating System Support</h3>More
information on Java releases and the operating systems that
support them is on a <a href="JVMCapabilities.shtml">separate
page</a>.
<h2>Migration Notes</h2>This is a section of notes for
various code migrations that are in progress or contemplated.
<!--#include virtual="/Footer.shtml" -->
</div><!-- closes #mainContent-->
</div><!-- closes #mBody-->
</body>
</html>