> Java Web Start. This is the canonical way for desktop applications.<p>Not anymore. Java Web Start was removed because the very concept of a JRE, a system-wide runtime downloaded directly from Oracle and managed by the user or their IT department, no longer exists (despite some OpenJDK distributions offering something they call a JRE -- perhaps to maintain a sense of familiarity -- no one actually provides a JRE anymore, although I guess OpenWebStart is attempting to resurrect it). Like any other application, Java applications now only have two parties: the user and the application's vendor. It is the responsibility of the vendor to deliver the application along with any dependency, including a Java runtime. The vendor may choose to supply their own automatic update mechanism, for the application <i>and</i> the runtime, but users need not interact directly with the Java runtime anymore.<p>Web Start, like Applets, was entirely predicated on the notion of the JRE. With the latter gone, the former is meaningless.<p>Why was the JRE discontinued?<p>1. The software ecosystem now discourages system-wide third-party runtimes. On the desktop, the app store model rules; on the server, containers are popular -- both are much more friendly to an embedded runtime.<p>2. An embedded runtime with jlink gives the user a better experience by giving the software vendor full responsibility over their software and not requiring the user to deal with runtime components they don't, and need not, understand (although, admittedly, popular Java build tools currently lag in their support for jlink). In other words, the new way is better, but it does require getting used to.<p>> While it can in theory work with any application, it shines with modularized applications.<p>Not just in theory. jlink is <i>the</i> recommended practice for deploying any Java application, desktop or server, modular or not. While a modular application can help automate more steps of the packaging process (like not requiring running jdeps to find dependencies and automatically generating launcher scripts), jlink is not especially tied to modular applications. It is how <i>all</i> Java applications should be distributed (jpackage internally uses jlink).<p>(I work at Oracle on OpenJDK)