javajlsjsrjep

What is the difference (or relation) between JLS, JSR and JEP?


What is the difference (or relation) between these three?


Solution

  • Some people think that it is simply a matter of what the words mean. I think there is more to it than that, but let us start with the words.

    In the general context:

    As you can see, the plain English meanings of these words themselves don't help a lot. We need more context. In this case, the context is in the pages you linked to.

    Java Language Specification, JLS

    This is the official specification for the Java Language. The JLS specifies the syntax for the Java programming language and other rules that say what is or is not a valid Java program. It also specifies what a program means; i.e. what happens when you run a (valid) program.

    Java Specification Request, JSR

    A JSR is a document created as part of the Java Community Process (JCP) that is setting the scope for a team of people to develop a new specification. These specifications are (AFAIK) always Java related, but they frequently address things that are not going to be core Java SE or Java EE technology. A typical JSR's subject material is a relatively mature technology; i.e. on that is in a state that can be specified. (If you try produce a specification too early, then you typically end up with a bad spec. Other things can lead to that too.)

    Java Enhancement Proposal, JEP

    A JEP is a document that is proposing an enhancement to Java core technology. These proposals are typically for enhancements that are not ready to be specified yet. As the JEP-1 document explains, JEPs may call for exploration of novel (even "whacky") ideas. Generally speaking, prototyping will be required to separate the viable and non-viable ideas and clarify them to the point where a specification can be produced.

    So the relationship between JEPs, JSRs and specifications is like this:

    1. JEPs propose and develop experimental ideas to the point where they could be specified. Not all JEPs come to fruition.

    2. JSRs take mature ideas (e.g. resulting from a JEP), and produce a new specification, or modifications to an existing specification. Not all JSRs come to fruition.

    3. A specification is a common work product of a JSR. (Others include source code of interfaces, and reference implementations.) The JLS is an example of a specification. Others include the JVM specification (JVMS), the Servlet and JSP specifications, the EJB specifications and so on.