<div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">"3. If the main module requires native access, it is allowed without the<br>--enable-native-access."<br><br>The difference between zero and one is all the difference in the world.<br>Zero flags means that the user is not aware of the risks posed by native<br>code to the application they are running. The whole point of this JEP is<br>to ensure the user is aware of the risks.<br></blockquote><div dir="ltr"><br></div><div dir="ltr">You are twisting my words, please don't take them out of context.<br></div><div dir="ltr"><br></div><div dir="ltr">This is my original words:<br></div><div dir="ltr"><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div>Here's what I want:<br></div><div><br></div></div></div></div></div></div></div></div><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div>1. Allows a module to declare that it wants native access:</div><div><br></div></div></div></div></div></div></div></div></blockquote><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr">```java</div></div></div></div></div></div></div></blockquote><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div>module org.glavo.mylib {</div><div>    requires native; // Check for permissions when loading</div></div></div></div></div></div></div></div></blockquote><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div>    // or</div><div>    requires static native;  // Check for permission when calling a restricted method</div></div></div></div></div></div></div></div></blockquote><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div>}</div><div><br></div><div>2. Allows a module with native access enabled to grant permissions to other modules:</div><div><br></div></div></div></div></div></div></div></div></blockquote><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr">```java</div></div></div></div></div></div></div></blockquote><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div>module org.glavo.myapp {</div><div>    requires native;<br></div><div>    requires org.glavo.mylib;</div></div></div></div></div></div></div></div></blockquote><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr">    opens native to org.glavo.mylib;</div></div></div></div></div></div></div></blockquote><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr">}</div></div></div></div></div></div></div></blockquote><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div><br></div><div>3. If the main module requires native access, it is allowed without the --enable-native-access.</div><div><br></div><div>4. Allows users to declare restricted methods. </div><div>    This will prevent code from masking its true intent through low-level libraries like JNA/JNR.</div></div></div></div></div></div></div></div></blockquote></blockquote><div><br></div><div>I never wanted zero flags. I want modules to always need to declare themselves needing native access in module info.</div><div>The only difference between the main module and other modules is that it does not need to be granted permissions by other modules, </div><div>as I believe the end user has the right to make decisions.<br></div><div><br></div><div>Glavo</div></div></div></div></div></div></div></div></div></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, Aug 29, 2023 at 10:46 PM Alex Buckley <<a href="mailto:alex.buckley@oracle.com">alex.buckley@oracle.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">On 8/29/2023 4:03 AM, Attila Kelemen wrote:<br>
> <br>
>     How, today, can a user know if they use JNI?<br>
>     The point is to make it impossible for a user to be unaware of any<br>
>     JNI uses which *at the very minimum* requires you to declare it in<br>
>     the command line.<br>
> <br>
>     Although *I absolutely* agree that it should also be added to the<br>
>     module-info, so instead of having to specify every module that uses<br>
>     JNI in the flag, you could only specify the Main module, and in<br>
>     there it's module-info will open the JNI usage for every module.<br>
> <br>
>     But i don't think there is a way to make sure the users are aware of<br>
>     JNI usage without at least 1 flag<br>
> <br>
> <br>
> Yes, and now many people proposed basically the same thing, that the <br>
> main module should be able to declare it.<br>
<br>
Other people have not proposed "basically the same thing", because they <br>
insist that modules have a way to enable JNI with even _zero_ flags from <br>
the user. For example, Glavo said:<br>
<br>
"3. If the main module requires native access, it is allowed without the <br>
--enable-native-access."<br>
<br>
The difference between zero and one is all the difference in the world. <br>
Zero flags means that the user is not aware of the risks posed by native <br>
code to the application they are running. The whole point of this JEP is <br>
to ensure the user is aware of the risks.<br>
<br>
Alex<br>
</blockquote></div>