> On 17 May 2021, at 21:46, Peter Firmstone <peter.firmst...@zeus.net.au> wrote:
> 
> 
> Yes, you are talking about those who maintain and develop OpenJDK, but this 
> is only a small proportion of the overall Java developer ecosystem.   

Not at all. I’m talking about the millions of developers who don’t get what 
they need sooner because the
OpenJDK’s resources are invested in maintaining components that add little 
value to the ecosystem.

> 
> No, it's not practical, but there's no viable upgrade path, so our only 
> option is indefinite maintenance of Java 17.

I’m not going to tell you where to put your money, but writing a Java agent is 
orders of magnitude cheaper
than maintaining an eight-million-line codebase indefinitely.

> 
> In a distributed system that uses POJO's and Remote Method Invocation, a 
> proxy is used to invoke methods on an object in a remote JVM or any other 
> language for that matter, operating in another node or process.   The proxy 
> implementation is not known, nor necessarily are it's communication methods 
> until runtime.  It is loaded dynamically.
> 
> The proxy is trusted code (each implementation has different bytecode), but 
> we wish to run it with principles of least privilege, rather than an anything 
> goes approach.
> 
> https://urldefense.com/v3/__https://github.com/pfirmstone/JGDMS/wiki/OSGi-and-JGDMS__;!!GqivPVa7Brio!PAF0JUFBtHO0VgRqhSDtRI3p3J-zPmJvmwVDF7p7eXyLj3MoMOHjQfCKUEEqMlozJA$
>  

I’m not sure I understand. If you’re not talking about a JDK mechanism, you can 
change that mechanism
to not use the Security Manager, just as JAAS will be changed.

> 
> If the application needs access control, but the Java platform doesn't 
> provide it, and you must remove it for the application to run, then yes, the 
> software will be less secure as a result.  This shouldn't be difficult to 
> understand.

I understand but disagree.

> 
> No, but it is a useful security layer to control access.

The utility of *this particular mechanism* does not justify the cost of 
maintaining it.
The question isn’t if such a mechanism could be useful or not, but is this the 
best use of resources to improve security?
In other words, the choice isn’t between this and nothing, but between this and 
everything else.

> 
> It is not possible to implement fine grained access control in Java, or as a 
> library, this feature is low level JVM code.

Again, when you say fine-grained level access control you don’t mean 
fine-grained level access control but the
particular features provided by the Security Manager; and those features — at 
least those you sound most interested
in — are not low-level JVM code, and can be implemented in Java with a Java 
agent, at least as an additional, albeit
imperfect layer of security, if you think this is a worthwhile and 
cost-effective approach.

> 
> Developers who wish to develop new applications that require access control 
> should do so using another platform, those who have existing software 
> deployments, need to stay on Java 17 for example, indefinitely until EOL.

I strongly disagree; the Security Manager is not the only — and I would say 
it’s not even the best — way to 
offer access control. This JEP proposes removing Security Manager. That that 
implies giving up on access control 
is entirely your insistence on identifying the two. And if the only way you can 
think of implementing access 
control is with a call-stack code-sourcing mechanism, then I’m afraid other 
platforms are not going to offer it, 
because they also don’t share the view that this is the best, let alone the 
only, way to do this. 

> 
> New developments that require access control might consider the Microsoft CLR 
> for example, however I'm no expert, there may be better alternatives. 
> https://urldefense.com/v3/__https://www.c-sharpcorner.com/UploadFile/84c85b/net-code-access-security-cas/__;!!GqivPVa7Brio!PAF0JUFBtHO0VgRqhSDtRI3p3J-zPmJvmwVDF7p7eXyLj3MoMOHjQfCKUEF_yAtVXw$
>  

.NET have also dropped their analogous mechanism; they, too, have become 
convinced that different permissions 
to different code *in the same process* is not a the best approach to security 
today in cost/benefit. 
Erlang, another platform with a strong emphasis on distributed systems also 
does not provide this mechanism. I am not
aware of any platform that does.

> 
> To restrict operations to the principle of least privilege.

The principles are known, but not every additional layer is worth it at any 
cost. 

> 
> The code is not known at compile time, it is dynamic, such that it is only 
> known at runtime, this means that to use the Java Agent mechanism, one must 
> intercept every network and file system access, then try to determine where 
> the call originates, to see whether it can be allowed or disallowed.

The Java agent can insert the same instrumentation points as the Security 
Manager in JDK code, and the equivalent
of protection domains will be determined by the framework and stored and 
manipulated as ThreadLocals. StackWalker
provides what you need for determining caller classes.

> 
> There is no feature in Java past release 17 that would interest me enough to 
> perform this amount of work on an existing application, nor would it even be 
> a viable option if I wanted to. So I can't pay for it even if I want to, as 
> it is unaffordium.
> 

I am sorry, but asking the majority of Java developers who prefer other 
approaches to pay for it is even less fair.

> I'm looking at how to support existing deployments that utilise existing Java 
> access control features.
> 
> Your world sounds more of a static compile time, everything is known up front 
> environment, mine is dynamic and flexible and unknown until after a process 
> has been running for some time.

I think that instead of working on finding alternatives that would make the 
cost structure of something
few people want, you’ve decided that the existing mechanism is the only way to 
do it.

> 
> However I suspect that you haven't got JEP 411 over the line yet and you are 
> worried that open discussion of the issues it causes may stop it, because it 
> impacts something you are trying to implement.   I apologize if this 
> discussion inconveniences you, but it's still relevant and we should be 
> looking at maintaining a version of Java that supports access control for a 
> very long time, not 8 years.  

You have to convince the relevant maintainers, and this discussion does not 
inconveniences me because I’m just trying to 
see if there’s something we missed. The Security Manager does not harm the 
development of any one particular feature 
because new features have already largely overlooked it with few people even 
noticing. It does, however, take a 
significant toll on resources that could be put to better use elsewhere, 
including features that improve security in 
a more cost-effective way.

> 
> The only other alternatives is either a complete rewrite in another language, 
> or forking Java, but neither seem viable.

I don’t think this is the only other alternative at all, and repeating this 
claim is not something that, I think, will 
help delay this JEP. Evidence that thousands of companies rely on the Security 
Manager for security might, but short of
that I think your time would be better spent on trying to suggest alternatives 
to some critical pieces that might be
acceptable cost-wise.

> 
> I wouldn't recommend a new development that requires access control to 
> consider using the Java platform at this time.

OK.

> 
> I'm unable at this time to advise where people should look as I'm still in 
> the investigation stage myself.   If someone does know of other platforms 
> that do access control well, please inform me.
> 

If by “well” you mean the way that you currently do it and you’re not willing 
to even consider alternative approaches, 
I think you might be disappointed.

— Ron

Reply via email to