Sorry, let me correct some of my mangled grammar
On 27/03/2023 17:06, Andrew Dinn wrote:
On 27/03/2023 13:37, Volker Simonis wrote:
The JEP itself is rather ambitious because I noticed that most of the
strong encapsulation JEPs lacked a substantial motivation section
(largely because they had been written before that became the norm)
and so strong encapsulation has not been motivated in JEP form, and
this is an opportunity to start rectifying that. This is important
because some, even in this discussion, are under the impression that
integrity is about security. Although security is certainly one of
integrity’s impacts (albeit not in the way hypothesised in this
discussion) other major impacts are on performance (including, though
certainly not limited to, link-time optimisations that are of
interest to Project Leyden) and code evolution (the lack of integrity
has been, by far, the biggest cause of JDK upgrade issues experienced
by many applications an libraries).
Thanks for pointing out that "integritiy" and "security" are two
different things and that this discussion is mostly about other
aspects of "integrity" like performance and code evaluation. This is
actually exactly why I already tried to ask several times about the
"real" and/or the long term background of this change. Currently the
JEP only seems to propose the change of the default value for dynamic
agent loading. It is obviously not hard for other JDK vendors to use a
different default and I agree that it is probably still manageable
(though inconvenient) for administrators/operators to change the
default at launch time. BUT, you rightly mention that once higher
integrity is the DEFAULT, this opens the door for future optimizations
(you listed some of them) and even completely different execution
models / semantics for Java applications (e.g. as explored by Project
Leyden). Once such new optimizations will be in place (and only work
for the default, disabled dynamic agent loading setting) it will be
much harder for users who depend on dynamic loading to enable it,
because it will either impact their performance or it will limit their
ability to use certain platform features.
Red Hat's team had discusssed this issue and we did think about raising
it in the previous reply. It is perhaps better left for the JEP
discussion but we certainly consider it as important an issue as Volker
does.
Personally, I will note that this is a point I have been concerned
by since the associated dilemma was raised by Mark Reinhold during the
original discussion. Indeed, the possibility that retaining agents might
necessitate a divergence in JVM (or even JDK) behaviour from the status
quo when no agent is, nor can be, installed struck me very hard. My
take-away was not an immediate abreaction. Rather: the opportunity
agents provide for dynamic adaptation of the runtime is provisional and,
needs to be balanced against the benefits that might accrue from them
not being the picture; in the longer term some of the capabilities
provided through the use of agents may be unsustainable.
As an example of that I considered my agent, Byteman. It is immensely
useful for injecting faults, validity assertions and monitoring
capabilities into app code during unit system testing, avoiding the need
for that code to actually appear in the product. The precise targeting
of Byteman rules to specific code locations means that the injected code
only minimally perturbs the whole code base.
Notably, Byteman does not support bulk (online) transformation. Too much
transformed code means you are effectively testing a very different app
to the one you deploy, at least as far as execution speed, timings,
resource use etc are concerned, and possibly even because of too radical
a change to the app semantics.
Clearly, if simply loading an agent removes opportunities
for the runtime to operate more
efficiently and, as a result, causes a significant change in execution
speed, timings, resource use then a tool like Byteman becomes much less
useful for this sort of testing. So, for me the writing was already on
the wall back in jdk9 time. We may well have to trade off of some
build/test time benefits against the undeniable impetus to improve
deploy-time performance.
My main concern with the proposed change is not the current proposal
but the impact it will have on the evolution of Java. Java's dynamic
features are one of its biggest strength and a major reason for its
success. Sacrificing some of them or making their usage increasingly
expensive requires a broader discussion in the community and shouldn't
happen "under the hood". I'm happy to continue that discussion on the
actual JEP proposal.
Amen to that.
regards,
Andrew Dinn
-----------
--
regards,
Andrew Dinn
-----------
Red Hat Distinguished Engineer
Red Hat UK Ltd
Registered in England and Wales under Company Registration No. 03798903
Directors: Michael Cunningham, Michael ("Mike") O'Neill