RFR: JDK-8202384: Introduce altserver jvm variant with speculative execution disabled
Magnus Ihse Bursie
magnus.ihse.bursie at oracle.com
Mon Jun 11 07:21:23 UTC 2018
On 2018-06-10 15:28, David Holmes wrote:
> On 9/06/2018 7:50 AM, Erik Joelsson wrote:
>> On 2018-06-07 17:30, David Holmes wrote:
>>> On 8/06/2018 6:11 AM, Erik Joelsson wrote:
>>>> I just don't think the extra work is warranted or should be
>>>> prioritized at this point. I also cannot think of a combination of
>>>> options required for what you are suggesting that wouldn't be
>>>> confusing to the user. If someone truly feels like these flags are
>>>> forced on them and can't live with them, we or preferably that
>>>> person can fix it then. I don't think that's dictatorship. OpenJDK
>>>> is still open source and anyone can contribute.
>>> I don't see why --enable-hardened-jdk and --enable-hardened-hotspot
>>> to add to the right flags would be either complicated or confusing.
>> For me the confusion surrounds the difference between
>> --enable-hardened-hotspot and --with-jvm-variants=server, hardened and
> That's the problem: "hardened" is not a jvm-variant as we have always
> defined that! "hardened" is a variation in the same way as product vs
> fastdebug versus slow-debug versus (the old) optimized. It is _not_ at
> all the same kind of thing as server versus client versus zero etc.
> The desire to ship "hardened" in the same image as non-hardened is
> what is causing the semantic conflict here. It is like shipping a
> product and debug VM together. Sure you can do it, but that's not how
> we've categorised things in the past.
I disagree. The "no-speculative-cti" is a perfectly fine JVM feature,
which can be applied to any JVM variant. It is not a JVM feature as a
separate software component (like cmsgc or compiler1) that could be left
in or kept out and that affects the functionality of hotspot. Instead,
it is a JVM feature very much like the existing link-time-opt, in that
it affects all aspects of the JVM; not the functionality, but the
performance (and security).
The way we bundle a certain set of JVM features as a named JVM variant
has always been a bit, well, semantically odd, but it has served us okay
in the past and serve us just as well for this fix.
> I understand the need to make things work this way, so in that sense
> selecting jvm-variant=hardened should be seen as specifying
> "--enable-hardened-hotspot --enable-hardened-jdk". But
> jvm-variant=hardened is really jvm-variant=hardened-server.
Yes, jvm-variant=hardened is actually hardned-server. Despite the longer
name, it might be more clear to use that name. It ties in into a bit
into Erik's original "altserver" proposal.
I think the reason just "hardened" sounds like a reasonable alternative
to the more proper but longer "hardened-server" is due to how "server"
has become the mainstream variant, even for clients, and "client" feels
like it's being put on death row. Nobody really believes that it will
survive in the long term, and nowadays Oracle don't even build it
anymore (we stopped doing that when we stopped doing 32-bit builds). So
"server" is increasingly incorrectly named, and should really just be
considered a legacy name for what should perhaps be "default" or so.
>> making the user understand it. But sure, it is doable. Here is a new
>> webrev with those two options as I interpret them. Here is the help
>> --enable-hardened-jdk enable hardenening compiler flags for all jdk
>> libraries (except the JVM), typically
>> speculative cti. [disabled]
>> enable hardenening compiler flags for
>> hotspot (all
>> jvm variants), typically disabling
>> speculative cti.
>> To make hardening of hotspot a runtime
>> consider the "hardened" jvm variant
>> instead of this
>> option. [disabled]
>> Note that this changes the default for jdk libraries to not enable
>> hardening unless the user requests it.
> That's your call. I don't care what the default is as long as the
> developer has control over it.
>> Webrev: http://cr.openjdk.java.net/~erikj/8202384/webrev.04/
More information about the hotspot-dev