JDK 24 Feature Freeze | Permanently Disabling the Security Manager
David Delabassee via Jython-dev <[email protected]> Fri, 13 Dec 2024 15:43:42 +0000
| Newsgroups | gmane.comp.lang.jython.devel |
|---|---|
| Message-ID | <SA1PR10MB769940E2172847731C009582FC382@SA1PR10MB7699.namprd10.prod.outlook.com> |
--===============1161849566637167154==
Content-Language: en-GB
Content-Type: multipart/alternative;
boundary="_000_SA1PR10MB769940E2172847731C009582FC382SA1PR10MB7699namp_"
--_000_SA1PR10MB769940E2172847731C009582FC382SA1PR10MB7699namp_
Content-Type: text/plain; charset="Windows-1252"
Content-Transfer-Encoding: quoted-printable
Welcome to the final OpenJDK Quality Outreach update of the year!
JDK 24, scheduled for General Availability on March 18, 2025 [1], is now in=
Rampdown Phase One (RDP1) [2]. At this point, the overall JDK 24 feature s=
et is frozen and only low-risk enhancements might still be considered. You =
will find below the final list of the 24 JEPs that were integrated into JDK=
24 as well as JDK 24 technical materials in the last section.
This QO update also covers 3 important heads-ups related to security, integ=
rity and JDK 24.
The next key milestone is early February with the first JDK 24 Release Cand=
idate builds. That means that we have a few weeks, modulo the end of year b=
reak, to find and hopefully address any issue that your projects might enco=
unter. So, please let us know if you encounter any issue with the JDK early=
-access builds.
[1] https://openjdk.org/projects/jdk/24/
[2] https://mail.openjdk.org/pipermail/jdk-dev/2024-December/009672.html
# Heads-up - JDK 24: Permanently Disabling the Security Manager
Introduced to enforce the principle of the least privilege, the Security Ma=
nager was designed to prevent unauthorized code from accessing sensitive re=
sources (ex. files, network connections, etc.). While effective in theory, =
it has fallen short in practice for multiple reasons: complexity, limited a=
doption, maintenance overhead and evolving threat landscape.
In Java 17, the Security Manager was deprecated for removal under JEP 411 [=
3]. In JDK 24, its functionality will be effectively disabled via JEP 486 [=
4]. Key changes include:
- Disabling the Security Manager - it will no longer be possible to enable =
the SM at startup using command-line options, nor will it be possible to in=
stall a custom SM during runtime.
- Rendering the Security Manager API non-functional - the SM API will remai=
n present for compatibility but will no longer have any operational effect.
- Improving maintainability - thousands of lines of code dedicated to suppo=
rting the Security Manager will be removed, freeing OpenJDK contributors to=
implement modern security features.
Developers and enterprises using older Java versions or legacy applications=
relying on the Security Manager will retain access until JDK 24. Beyond th=
at, they are encouraged to transition to alternative sandboxing and API int=
erception mechanisms.
## Call to Action
The deprecation of the Security Manager in JDK 17 had little to no impact o=
n most Java developers. Warnings issued in JDK 17=9623 generated minimal di=
scussion in the Java ecosystem, highlighting its limited relevance. Further=
more, major frameworks and tools (ex. Jakarta EE, Ant, Tomcat, etc.) have a=
lready removed support for the Security Manager, reinforcing the trend.
For applications still dependent on the Security Manager, the JDK offers op=
tions to identify and address its usage:
- jdeprscan [5] scans a JAR file for the usage of deprecated API elements, =
and it helps find code using these methods.
- Messages on the console warnings highlight Security Manager usage during =
runtime.
- Check how you launch your Java application - with the Security Manager al=
lowed or enabled via command line options, or policy files that require it =
to be installed and configured.
These tools give code maintainers the necessary insights to transition away=
from the Security Manager before its complete removal in future JDK releas=
es. By taking these steps, you will ensure a smooth transition from the Sec=
urity Manager while adopting more effective security practices.
This is a summary; for more details, make sure to read JEP 486 [4].
[3] https://openjdk.org/jeps/411
[4] https://openjdk.org/jeps/486
[5] https://dev.java/learn/jvm/tools/core/jdeprscan/
# Heads-up - JDK 24: Prepares Restricted Native Access
Any interaction between Java code and native code, be it via the Java Nativ=
e Interface (JNI) API or the Foreign Function & Memory (FFM) API, is risky =
in the sense that it can compromise the integrity of applications and of th=
e Java Platform itself, for example by causing JVM crashes, even after the =
native code completed execution. According to the policy of integrity by de=
fault, all JDK features that are capable of breaking integrity must obtain =
explicit approval from the application=92s developer. JDK 24, by means of J=
EP 472 [6], prepares that by aligning the behaviors of JNI and FFM by:
- Printing warnings for all restricted operations (with the goal to turn th=
ese into exceptions in a future release).
- Expanding the command-line options `--enable-native-access` and `--illega=
l-native-access` to govern restricted operations of both APIs.
Note that this is a change for JNI, which used to not trigger such warnings=
, as well as for FFM, which used to forbid restricted operations by default=
. Starting with JDK 24, both APIs behave uniformly by printing warnings. In=
the future, both APIs will throw exceptions instead. The intent is neither=
to discourage the use of, deprecate, or even remove JNI nor to restrict th=
e behavior of native code called via JNI or FFM. The goal is to ensure that=
applications and the Java Platform have integrity by default while giving =
application operators the tools they need to selectively opt-out where need=
ed.
This is a summary; for more details, please read the full Heads-Up [7] and =
JEP 472 [6].
[6] https://openjdk.org/jeps/472
[7] https://inside.java/2024/12/09/quality-heads-up/
# Heads-up - JDK 24: Security Properties Files Inclusion
Managing security properties across multiple JDK releases can be a challeng=
e, particularly in environments requiring centralized control and distinct =
security profiles. To address this and starting with JDK 24, the Java Platf=
orm now allows the main security properties file (`${java.home}/conf/securi=
ty/java.security`) or any file specified via the `java.security.properties`=
system property to include additional files. This inclusion is recursive, =
allowing for nested configurations, provided no cycles occur.
The `include` keyword is reserved and cannot be used to define security pro=
perties, as any attempt to do so results in an unchecked `IllegalArgumentEx=
ception`. The inclusion mechanism enhances security by explicitly listing =
files in the main configuration file, preventing misconfigurations by throw=
ing a fatal error if a file is missing or inaccessible. It also forbids inc=
luding directories or URLs, ensuring strict control over which files are in=
cluded. Users must ensure proper permissions for included files to avoid ta=
mpering, such as enforcing secure file permissions. The system supports a c=
lear priority for security property overrides based on the order of inclusi=
on, and updates to a single file automatically propagate across all configu=
rations.
This enhancement offers better control and adaptability over Java security =
properties for developers, system administrators and infrastructure enginee=
rs.
This is a summary; for more details, please read the full Heads-Up [8] and =
the JDK 24 release notes [9].
[8] https://inside.java/2024/12/10/quality-heads-up/
[9] https://jdk.java.net/24/release-notes#JDK-8319332
# JDK 24 Early-Access Builds
The JDK 24 early-access builds 28 are available [10] and are provided under=
the GNU General Public License v2, with the Classpath Exception. The Relea=
se Notes are available here [11].
## JEPs integrated into JDK 24:
- JEP 404: Generational Shenandoah (Experimental)
- JEP 450: Compact Object Headers (Experimental)
- JEP 472: Prepare to Restrict the Use of JNI
- JEP 475: Late Barrier Expansion for G1
- JEP 478: Key Derivation Function API (Preview)
- JEP 479: Remove the Windows 32-bit x86 Port
- JEP 483: Ahead-of-Time Class Loading & Linking
- JEP 484: Class-File API
- JEP 485: Stream Gatherers
- JEP 486: Permanently Disable the Security Manager
- JEP 487: Scoped Values (4th Preview)
- JEP 488: Primitive Types in Patterns, instanceof, and switch (2nd Preview=
)
- JEP 489: Vector API (9th Incubator)
- JEP 490: ZGC: Remove the Non-Generational Mode
- JEP 491: Synchronize Virtual Threads without Pinning
- JEP 492: Flexible Constructor Bodies (3rd Preview)
- JEP 493: Linking Run-Time Images without JMODs
- JEP 494: Module Import Declarations (2nd Preview)
- JEP 495: Simple Source Files and Instance Main Methods (4th Preview)
- JEP 496: Quantum-Resistant Module-Lattice-Based Key Encapsulation Mechani=
sm
- JEP 497: Quantum-Resistant Module-Lattice-Based Digital Signature Algorit=
hm
- JEP 498: Warn upon Use of Memory-Access Methods in sun.misc.Unsafe
- JEP 499: Structured Concurrency (4th Preview)
- JEP 501: Deprecate the 32-bit x86 Port for Removal
## Changes in recent JDK 24 builds that may be of interest:
- JDK-8345015: Remove unused method lookup_time_t_function [Reported by JaC=
oCo]
- JDK-8344352: 32-bit builds crash after JDK-8305895 [Reported by JaCoCo]
- JDK-8344299: SM cleanup in javax.naming modules
- JDK-8343791: Socket.connect API should document whether the socket will b=
e closed=85
- JDK-8343001: Adjust XSLT and XPath Extension Function Property
- JDK-8341551: Revisit jdk.internal.loader.URLClassPath.JarLoader after JEP=
486
- JDK-8340359: Remove javax.naming.Context.APPLET
- JDK-8337199: Add jcmd Thread.vthread_scheduler and Thread.vthread_pollers=
diagnostic commands
- JDK-8313367: SunMSCAPI cannot read Local Computer certs w/o Windows eleva=
tion
- JDK-8341964: Add mechanism to disable different parts of TLS cipher suite
- JDK-8341553: Remove UseCompactObjectHeaders extra CDS archives
- JDK-8333582: Update CLDR to Version 46.0
- JDK-8341975: Unable to set encoding for IO.println, IO.print and IO.readl=
n
- JDK-8342075: HttpClient: improve HTTP/2 flow control checks
- JDK-8326949: Authorization header is removed when a proxy Authenticator i=
s set on HttpClient
- JDK-8245545: Disable TLS_RSA cipher suites
- JDK-8319993: Update Unicode Data Files to 16.0.0
- JDK-8343020: (fs) Add support for SecureDirectoryStream on macOS
- JDK-8335912: Add an operation mode to the jar command when extracting to =
not overwriting existing files
- JDK-8343881: java.lang.classfile.Attribute attributeName() method should =
return Utf8Entry
- JDK-8338021: Support new unsigned and saturating vector operators in Vect=
orAPI
- JDK-8344882: (bf) Temporary direct buffers should not count against the u=
pper limit on direct buffer memory
- JDK-8341566: Add Reader.of(CharSequence)
- JDK-8338536: Permanently disable remote code downloading in JNDI
- JDK-8343004: Adjust JAXP limits
- JDK-8343150: Change URLClassLoader.getPermissions to return empty Permiss=
ionCollection
Note: A complete list of changes can be found here [12].
[10] https://jdk.java.net/24/
[11] https://jdk.java.net/24/release-notes
[12] https://github.com/openjdk/jdk/compare/jdk-24+21...jdk-24+28
# Topics of Interest
- Java 24 Performance Improvements & Deprecations
https://www.youtube.com/watch?v=3DoTc16DAMTqg
- Java 24 Language & API Changes
https://inside.java/2024/12/05/newscast-81/
- Java 24 Stops Pinning Virtual Threads (Almost)
https://inside.java/2024/11/21/newscast-80/
- Detoxifying the JDK Source Code
https://stuartmarks.wordpress.com/2024/12/12/detoxifying-the-jdk-source-cod=
e/
- Better Java Streams with Gatherers - JEP Cafe
https://inside.java/2024/11/26/jepcafe23/
- Java Language Futures - Fall 2024 Edition
https://inside.java/2024/10/30/devoxxbelgium-java-language-futures/
- Ask the Java Architects
https://inside.java/2024/11/14/devoxxbelgium-ask-architects/
- Pattern Matching in Java - Past, Present, Future
https://inside.java/2024/11/11/devoxxbelgium-pattern-matching/
- Monitoring Java Application Security with JDK tools and JFR Events
https://inside.java/2024/11/17/devoxxbelgium-security/
- ZGC Automatic Heap Sizing #JVMLS
https://inside.java/2024/11/09/jvmls-zgc/
- Postcards from the Peak of Complexity
https://inside.java/2024/11/03/devoxxbelgium-complexity-peak/
- Release Your (Java) Projects Like OpenJDK
https://inside.java/2024/10/31/newscast-79/
- Are Virtual Threads Going to Make Reactive Programming Irrelevant?
https://inside.java/2024/10/28/javazone-virtual-threads/
- A Sneak Peek at StableValue and SegmentMapper
https://inside.java/2024/10/24/devoxxbelgium-stablevalues/
- Advancing AI by Accelerating Java on Parallel Architectures
https://inside.java/2024/10/23/java-and-ai/
~
As always, ping me if you find any issues while testing your project(s) wit=
h the latest JDK early-access builds. And as the year-end is fast approachi=
ng, let me wish you all the best for the upcoming holidays. See you in 2025=
with Java 24, JavaOne and Java 25!
PS: Please let me know if you don't want to receive these OpenJDK Quality O=
utreach updates anymore.
--David
--_000_SA1PR10MB769940E2172847731C009582FC382SA1PR10MB7699namp_
Content-Type: text/html; charset="Windows-1252"
Content-Transfer-Encoding: quoted-printable
<html xmlns:o=3D"urn:schemas-microsoft-com:office:office" xmlns:w=3D"urn:sc=
hemas-microsoft-com:office:word" xmlns:m=3D"http://schemas.microsoft.com/of=
fice/2004/12/omml" xmlns=3D"http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv=3D"Content-Type" content=3D"text/html; charset=3DWindows-1=
252">
<meta name=3D"Generator" content=3D"Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
{font-family:"Cambria Math";
panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
{font-family:Aptos;
panose-1:2 11 0 4 2 2 2 2 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{margin:0cm;
font-size:11.0pt;
font-family:"Aptos",sans-serif;
mso-ligatures:standardcontextual;
mso-fareast-language:EN-US;}
span.EmailStyle17
{mso-style-type:personal-compose;
font-family:"Aptos",sans-serif;
color:windowtext;}
.MsoChpDefault
{mso-style-type:export-only;
font-size:11.0pt;
mso-fareast-language:EN-US;}
@page WordSection1
{size:612.0pt 792.0pt;
margin:72.0pt 72.0pt 72.0pt 72.0pt;}
div.WordSection1
{page:WordSection1;}
--></style>
</head>
<body lang=3D"en-BE" link=3D"#467886" vlink=3D"#96607D" style=3D"word-wrap:=
break-word">
<div class=3D"WordSection1">
<div>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none">Welcome to the fi=
nal OpenJDK Quality Outreach update</span><span lang=3D"EN-US" style=3D"mso=
-ligatures:none"> of the year</span><span style=3D"mso-ligatures:none">!</s=
pan><span lang=3D"EN-US" style=3D"mso-ligatures:none"><o:p></o:p></span></p=
>
<p class=3D"MsoNormal"><span lang=3D"EN-US" style=3D"mso-ligatures:none"><o=
:p> </o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none">JDK 24, scheduled=
for General Availability on March 18, 2025 [1], is now in Rampdown Phase O=
ne (RDP1) [2]. At this point, the overall JDK 24 feature set is frozen and =
only low-risk enhancements might still
be considered. You will find below the final list of the 24 JEPs that were=
integrated into JDK 24 as well as JDK 24 technical materials in the last s=
ection.
<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none"><o:p> </o:p>=
</span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none">This QO update al=
so covers 3 important heads-ups related to security, integrity and JDK 24.<=
o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none"><o:p> </o:p>=
</span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none">The next key mile=
stone is early February with the first JDK 24 Release Candidate builds. Tha=
t means that we have a few weeks, modulo the end of year break, to find and=
hopefully address any issue that your
projects might encounter. So, please let us know if you encounter any issu=
e with the JDK early-access builds.<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none"><o:p> </o:p>=
</span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none">[1] <a href=3D"ht=
tps://openjdk.org/projects/jdk/24/">
<span style=3D"color:#467886">https://openjdk.org/projects/jdk/24/</span></=
a><o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none">[2] <a href=3D"ht=
tps://mail.openjdk.org/pipermail/jdk-dev/2024-December/009672.html">
<span style=3D"color:#467886">https://mail.openjdk.org/pipermail/jdk-dev/20=
24-December/009672.html</span></a><o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none"><o:p> </o:p>=
</span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none"><o:p> </o:p>=
</span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none"># Heads-up - JDK =
24: Permanently Disabling the Security Manager<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none"><o:p> </o:p>=
</span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none">Introduced to enf=
orce the principle of the least privilege, the Security Manager was designe=
d to prevent unauthorized code from accessing sensitive resources (ex. file=
s, network connections, etc.). While
effective in theory, it has fallen short in practice for multiple reasons:=
complexity, limited adoption, maintenance overhead and evolving threat lan=
dscape.<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none"><o:p> </o:p>=
</span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none">In Java 17, the S=
ecurity Manager was deprecated for removal under JEP 411 [3]. In JDK 24, it=
s functionality will be effectively disabled via JEP 486 [4]. Key changes i=
nclude:<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none"><o:p> </o:p>=
</span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none">- Disabling the S=
ecurity Manager - it will no longer be possible to enable the SM at startup=
using command-line options, nor will it be possible to install a custom SM=
during runtime.<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none">- Rendering the S=
ecurity Manager API non-functional - the SM API will remain present for com=
patibility but will no longer have any operational effect.<o:p></o:p></span=
></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none">- Improving maint=
ainability - thousands of lines of code dedicated to supporting the Securit=
y Manager will be removed, freeing OpenJDK contributors to implement modern=
security features.<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none"><o:p> </o:p>=
</span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none">Developers and en=
terprises using older Java versions or legacy applications relying on the S=
ecurity Manager will retain access until JDK 24. Beyond that, they are enco=
uraged to transition to alternative
sandboxing and API interception mechanisms.<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none"><o:p> </o:p>=
</span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none">## Call to Action=
<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none"><o:p> </o:p>=
</span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none">The deprecation o=
f the Security Manager in JDK 17 had little to no impact on most Java devel=
opers. Warnings issued in JDK 17=9623 generated minimal discussion in the J=
ava ecosystem, highlighting its limited
relevance. Furthermore, major frameworks and tools (ex. Jakarta EE, Ant, T=
omcat, etc.) have already removed support for the Security Manager, reinfor=
cing the trend.<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none"><o:p> </o:p>=
</span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none">For applications =
still dependent on the Security Manager, the JDK offers options to identify=
and address its usage:<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none"><o:p> </o:p>=
</span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none">- jdeprscan [5] s=
cans a JAR file for the usage of deprecated API elements, and it helps find=
code using these methods.<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none">- Messages on the=
console warnings highlight Security Manager usage during runtime.<o:p></o:=
p></span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none">- Check how you l=
aunch your Java application - with the Security Manager allowed or enabled =
via command line options, or policy files that require it to be installed a=
nd configured.<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none"><o:p> </o:p>=
</span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none">These tools give =
code maintainers the necessary insights to transition away from the Securit=
y Manager before its complete removal in future JDK releases. By taking the=
se steps, you will ensure a smooth transition
from the Security Manager while adopting more effective security practices=
.<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none"><o:p> </o:p>=
</span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none">This is a summary=
; for more details, make sure to read JEP 486 [4].<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none"><o:p> </o:p>=
</span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none">[3] <a href=3D"ht=
tps://openjdk.org/jeps/411">
<span style=3D"color:#467886">https://openjdk.org/jeps/411</span></a><o:p><=
/o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none">[4] <a href=3D"ht=
tps://openjdk.org/jeps/486">
<span style=3D"color:#467886">https://openjdk.org/jeps/486</span></a><o:p><=
/o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none">[5] <a href=3D"ht=
tps://dev.java/learn/jvm/tools/core/jdeprscan/">
<span style=3D"color:#467886">https://dev.java/learn/jvm/tools/core/jdeprsc=
an/</span></a><o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none"><o:p> </o:p>=
</span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none"><o:p> </o:p>=
</span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none"># Heads-up - JDK =
24: Prepares Restricted Native Access<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none"><o:p> </o:p>=
</span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none">Any interaction b=
etween Java code and native code, be it via the Java Native Interface (JNI)=
API or the Foreign Function & Memory (FFM) API, is risky in the sense =
that it can compromise the integrity of
applications and of the Java Platform itself, for example by causing JVM c=
rashes, even after the native code completed execution. According to the po=
licy of integrity by default, all JDK features that are capable of breaking=
integrity must obtain explicit
approval from the application=92s developer. JDK 24, by means of JEP 472 [=
6], prepares that by aligning the behaviors of JNI and FFM by:<o:p></o:p></=
span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none"><o:p> </o:p>=
</span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none">- Printing warnin=
gs for all restricted operations (with the goal to turn these into exceptio=
ns in a future release).<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none">- Expanding the c=
ommand-line options `--enable-native-access` and `--illegal-native-access` =
to govern restricted operations of both APIs.<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none"><o:p> </o:p>=
</span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none">Note that this is=
a change for JNI, which used to not trigger such warnings, as well as for =
FFM, which used to forbid restricted operations by default. Starting with J=
DK 24, both APIs behave uniformly by
printing warnings. In the future, both APIs will throw exceptions instead.=
The intent is neither to discourage the use of, deprecate, or even remove =
JNI nor to restrict the behavior of native code called via JNI or FFM. The =
goal is to ensure that applications
and the Java Platform have integrity by default while giving application o=
perators the tools they need to selectively opt-out where needed.<o:p></o:p=
></span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none"><o:p> </o:p>=
</span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none">This is a summary=
; for more details, please read the full Heads-Up [7] and JEP 472 [6].<o:p>=
</o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none"><o:p> </o:p>=
</span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none">[6] <a href=3D"ht=
tps://openjdk.org/jeps/472">
<span style=3D"color:#467886">https://openjdk.org/jeps/472</span></a><o:p><=
/o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none">[7] <a href=3D"ht=
tps://inside.java/2024/12/09/quality-heads-up/">
<span style=3D"color:#467886">https://inside.java/2024/12/09/quality-heads-=
up/</span></a><o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none"><o:p> </o:p>=
</span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none"><o:p> </o:p>=
</span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none"># Heads-up - JDK =
24: Security Properties Files Inclusion<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none"><o:p> </o:p>=
</span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none"><o:p> </o:p>=
</span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none">Managing security=
properties across multiple JDK releases can be a challenge, particularly i=
n environments requiring centralized control and distinct security profiles=
. To address this and starting with
JDK 24, the Java Platform now allows the main security properties file (`$=
{java.home}/conf/security/java.security`) or any file specified via the `ja=
va.security.properties` system property to include additional files. This i=
nclusion is recursive, allowing
for nested configurations, provided no cycles occur.<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none"><o:p> </o:p>=
</span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none">The `include` key=
word is reserved and cannot be used to define security properties, as any a=
ttempt to do so results in an unchecked `IllegalArgumentException`. T=
he inclusion mechanism enhances security
by explicitly listing files in the main configuration file, preventing mis=
configurations by throwing a fatal error if a file is missing or inaccessib=
le. It also forbids including directories or URLs, ensuring strict control =
over which files are included. Users
must ensure proper permissions for included files to avoid tampering, such=
as enforcing secure file permissions. The system supports a clear priority=
for security property overrides based on the order of inclusion, and updat=
es to a single file automatically
propagate across all configurations. <o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none"><o:p> </o:p>=
</span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none">This enhancement =
offers better control and adaptability over Java security properties for de=
velopers, system administrators and infrastructure engineers.<o:p></o:p></s=
pan></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none"><o:p> </o:p>=
</span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none">This is a summary=
; for more details, please read the full Heads-Up [8] and the JDK 24 releas=
e notes [9].<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none"><o:p> </o:p>=
</span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none">[8] <a href=3D"ht=
tps://inside.java/2024/12/10/quality-heads-up/">
<span style=3D"color:#467886">https://inside.java/2024/12/10/quality-heads-=
up/</span></a><o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none">[9] <a href=
=3D"https://jdk.java.net/24/release-notes#JDK-8319332"><span style=3D"color=
:#467886">https://jdk.java.net/24/release-notes#JDK-8319332</span></a><o:p>=
</o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none"><o:p> </o:p>=
</span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none"><o:p> </o:p>=
</span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none"># JDK 24 Early-Ac=
cess Builds<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none"><o:p> </o:p>=
</span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none">The JDK 24 early-=
access builds 28 are available [10] and are provided under the GNU General =
Public License v2, with the Classpath Exception. The Release Notes are avai=
lable here [11].<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none"><o:p> </o:p>=
</span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none">## JEPs integrate=
d into JDK 24:<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none">- JEP 404: Genera=
tional Shenandoah (Experimental)<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none">- JEP 450: Compac=
t Object Headers (Experimental)<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none">- JEP 472: Prepar=
e to Restrict the Use of JNI<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none">- JEP 475: Late B=
arrier Expansion for G1<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none">- JEP 478: Key De=
rivation Function API (Preview)<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none">- JEP 479: Remove=
the Windows 32-bit x86 Port<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none">- JEP 483: Ahead-=
of-Time Class Loading & Linking<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none">- JEP 484: Class-=
File API<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none">- JEP 485: Stream=
Gatherers<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none">- JEP 486: Perman=
ently Disable the Security Manager<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none">- JEP 487: Scoped=
Values (4th Preview)<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none">- JEP 488: Primit=
ive Types in Patterns, instanceof, and switch (2nd Preview)<o:p></o:p></spa=
n></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none">- JEP 489: Vector=
API (9th Incubator)<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none">- JEP 490: ZGC: R=
emove the Non-Generational Mode<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none">- JEP 491: Synchr=
onize Virtual Threads without Pinning<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none">- JEP 492: Flexib=
le Constructor Bodies (3rd Preview)<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none">- JEP 493: Linkin=
g Run-Time Images without JMODs<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none">- JEP 494: Module=
Import Declarations (2nd Preview)<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none">- JEP 495: Simple=
Source Files and Instance Main Methods (4th Preview)<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none">- JEP 496: Quantu=
m-Resistant Module-Lattice-Based Key Encapsulation Mechanism<o:p></o:p></sp=
an></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none">- JEP 497: Quantu=
m-Resistant Module-Lattice-Based Digital Signature Algorithm<o:p></o:p></sp=
an></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none">- JEP 498: Warn u=
pon Use of Memory-Access Methods in sun.misc.Unsafe<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none">- JEP 499: Struct=
ured Concurrency (4th Preview)<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none">- JEP 501: Deprec=
ate the 32-bit x86 Port for Removal<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none"><o:p> </o:p>=
</span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none">## Changes in rec=
ent JDK 24 builds that may be of interest:<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none">- JDK-8345015: Re=
move unused method lookup_time_t_function [Reported by JaCoCo]<o:p></o:p></=
span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none">- JDK-8344352: 32=
-bit builds crash after JDK-8305895 [Reported by JaCoCo]<o:p></o:p></span><=
/p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none">- JDK-8344299: SM=
cleanup in javax.naming modules<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none">- JDK-8343791: So=
cket.connect API should document whether the socket will be closed=85<o:p><=
/o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none">- JDK-8343001: Ad=
just XSLT and XPath Extension Function Property<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none">- JDK-8341551: Re=
visit jdk.internal.loader.URLClassPath.JarLoader after JEP 486<o:p></o:p></=
span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none">- JDK-8340359: Re=
move javax.naming.Context.APPLET<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none">- JDK-8337199: Ad=
d jcmd Thread.vthread_scheduler and Thread.vthread_pollers diagnostic comma=
nds<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none">- JDK-8313367: Su=
nMSCAPI cannot read Local Computer certs w/o Windows elevation<o:p></o:p></=
span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none">- JDK-8341964: Ad=
d mechanism to disable different parts of TLS cipher suite<o:p></o:p></span=
></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none">- JDK-8341553: Re=
move UseCompactObjectHeaders extra CDS archives<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none">- JDK-8333582: Up=
date CLDR to Version 46.0<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none">- JDK-8341975: Un=
able to set encoding for IO.println, IO.print and IO.readln<o:p></o:p></spa=
n></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none">- JDK-8342075: Ht=
tpClient: improve HTTP/2 flow control checks<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none">- JDK-8326949: Au=
thorization header is removed when a proxy Authenticator is set on HttpClie=
nt<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none">- JDK-8245545: Di=
sable TLS_RSA cipher suites<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none">- JDK-8319993: Up=
date Unicode Data Files to 16.0.0<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none">- JDK-8343020: (f=
s) Add support for SecureDirectoryStream on macOS<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none">- JDK-8335912: Ad=
d an operation mode to the jar command when extracting to not overwriting e=
xisting files<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none">- JDK-8343881: ja=
va.lang.classfile.Attribute attributeName() method should return Utf8Entry<=
o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none">- JDK-8338021: Su=
pport new unsigned and saturating vector operators in VectorAPI<o:p></o:p><=
/span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none">- JDK-8344882: (b=
f) Temporary direct buffers should not count against the upper limit on dir=
ect buffer memory<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none">- JDK-8341566: Ad=
d Reader.of(CharSequence)<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none">- JDK-8338536: Pe=
rmanently disable remote code downloading in JNDI<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none">- JDK-8343004: Ad=
just JAXP limits<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none">- JDK-8343150: Ch=
ange URLClassLoader.getPermissions to return empty PermissionCollection<o:p=
></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none"><o:p> </o:p>=
</span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none">Note: A complete =
list of changes can be found here [12].<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none"><o:p> </o:p>=
</span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none">[10] <a href=3D"h=
ttps://jdk.java.net/24/">
<span style=3D"color:#467886">https://jdk.java.net/24/</span></a><o:p></o:p=
></span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none">[11] <a href=3D"h=
ttps://jdk.java.net/24/release-notes">
<span style=3D"color:#467886">https://jdk.java.net/24/release-notes</span><=
/a><o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none">[12] <a href=3D"h=
ttps://github.com/openjdk/jdk/compare/jdk-24+21...jdk-24+28">
<span style=3D"color:#467886">https://github.com/openjdk/jdk/compare/jdk-24=
+21...jdk-24+28</span></a><o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none"><o:p> </o:p>=
</span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none"> <o:p></o:p>=
</span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none"># Topics of Inter=
est<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none"><o:p> </o:p>=
</span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none">- Java 24 Perform=
ance Improvements & Deprecations<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none"><a href=3D"https:=
//www.youtube.com/watch?v=3DoTc16DAMTqg"><span style=3D"color:#467886">http=
s://www.youtube.com/watch?v=3DoTc16DAMTqg</span></a><o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none"><o:p> </o:p>=
</span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none">- Java 24 Languag=
e & API Changes<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none"><a href=3D"https:=
//inside.java/2024/12/05/newscast-81/"><span style=3D"color:#467886">https:=
//inside.java/2024/12/05/newscast-81/</span></a><o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none"><o:p> </o:p>=
</span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none">- Java 24 Stops P=
inning Virtual Threads (Almost)<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none"><a href=3D"https:=
//inside.java/2024/11/21/newscast-80/"><span style=3D"color:#467886">https:=
//inside.java/2024/11/21/newscast-80/</span></a><o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none"><o:p> </o:p>=
</span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none">- Detoxifying the=
JDK Source Code<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none"><a href=3D"https:=
//stuartmarks.wordpress.com/2024/12/12/detoxifying-the-jdk-source-code/"><s=
pan style=3D"color:#467886">https://stuartmarks.wordpress.com/2024/12/12/de=
toxifying-the-jdk-source-code/</span></a><o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none"><o:p> </o:p>=
</span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none">- Better Java Str=
eams with Gatherers - JEP Cafe<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none"><a href=3D"https:=
//inside.java/2024/11/26/jepcafe23/"><span style=3D"color:#467886">https://=
inside.java/2024/11/26/jepcafe23/</span></a><o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none"><o:p> </o:p>=
</span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none">- Java Language F=
utures - Fall 2024 Edition<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none"><a href=3D"https:=
//inside.java/2024/10/30/devoxxbelgium-java-language-futures/"><span style=
=3D"color:#467886">https://inside.java/2024/10/30/devoxxbelgium-java-langua=
ge-futures/</span></a><o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none"><o:p> </o:p>=
</span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none">- Ask the Java Ar=
chitects<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none"><a href=3D"https:=
//inside.java/2024/11/14/devoxxbelgium-ask-architects/"><span style=3D"colo=
r:#467886">https://inside.java/2024/11/14/devoxxbelgium-ask-architects/</sp=
an></a><o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none"><o:p> </o:p>=
</span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none">- Pattern Matchin=
g in Java - Past, Present, Future<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none"><a href=3D"https:=
//inside.java/2024/11/11/devoxxbelgium-pattern-matching/"><span style=3D"co=
lor:#467886">https://inside.java/2024/11/11/devoxxbelgium-pattern-matching/=
</span></a><o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none"><o:p> </o:p>=
</span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none">- Monitoring Java=
Application Security with JDK tools and JFR Events<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none"><a href=3D"https:=
//inside.java/2024/11/17/devoxxbelgium-security/"><span style=3D"color:#467=
886">https://inside.java/2024/11/17/devoxxbelgium-security/</span></a><o:p>=
</o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none"><o:p> </o:p>=
</span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none">- ZGC Automatic H=
eap Sizing #JVMLS<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none"><a href=3D"https:=
//inside.java/2024/11/09/jvmls-zgc/"><span style=3D"color:#467886">https://=
inside.java/2024/11/09/jvmls-zgc/</span></a><o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none"><o:p> </o:p>=
</span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none">- Postcards from =
the Peak of Complexity<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none"><a href=3D"https:=
//inside.java/2024/11/03/devoxxbelgium-complexity-peak/"><span style=3D"col=
or:#467886">https://inside.java/2024/11/03/devoxxbelgium-complexity-peak/</=
span></a><o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none"><o:p> </o:p>=
</span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none">- Release Your (J=
ava) Projects Like OpenJDK<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none"><a href=3D"https:=
//inside.java/2024/10/31/newscast-79/"><span style=3D"color:#467886">https:=
//inside.java/2024/10/31/newscast-79/</span></a><o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none"><o:p> </o:p>=
</span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none">- Are Virtual Thr=
eads Going to Make Reactive Programming Irrelevant?<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none"><a href=3D"https:=
//inside.java/2024/10/28/javazone-virtual-threads/"><span style=3D"color:#4=
67886">https://inside.java/2024/10/28/javazone-virtual-threads/</span></a><=
o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none"><o:p> </o:p>=
</span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none">- A Sneak Peek at=
StableValue and SegmentMapper<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none"><a href=3D"https:=
//inside.java/2024/10/24/devoxxbelgium-stablevalues/"><span style=3D"color:=
#467886">https://inside.java/2024/10/24/devoxxbelgium-stablevalues/</span><=
/a><o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none"><span lang=3D"NL"=
><o:p></o:p></span></span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none">- Advancing AI by=
Accelerating Java on Parallel Architectures<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none"><a href=3D"https:=
//inside.java/2024/10/23/java-and-ai/"><span style=3D"color:#467886">https:=
//inside.java/2024/10/23/java-and-ai/</span></a><o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none"><o:p> </o:p>=
</span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none"><o:p> </o:p>=
</span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none">~<o:p></o:p></spa=
n></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none"><o:p> </o:p>=
</span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none">As always, ping m=
e if you find any issues while testing your project(s) with the latest JDK =
early-access builds. And as the year-end is fast approaching, let me wish y=
ou all the best for the upcoming holidays.
See you in 2025 with Java 24, JavaOne and Java 25!<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none"><o:p> </o:p>=
</span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none">PS: Please let me=
know if you don't want to receive these OpenJDK Quality Outreach updates a=
nymore.<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none"><o:p> </o:p>=
</span></p>
</div>
<p class=3D"MsoNormal"><span style=3D"mso-ligatures:none">--David</span><o:=
p></o:p></p>
</div>
</body>
</html>
--_000_SA1PR10MB769940E2172847731C009582FC382SA1PR10MB7699namp_--
--===============1161849566637167154==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline
--===============1161849566637167154==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline
_______________________________________________
Jython-dev mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/jython-dev
--===============1161849566637167154==--