[jsr294-modularity-eg] Simple Module System Proposal

Alex Buckley Alex.Buckley at Sun.COM
Mon Aug 17 16:19:14 EDT 2009


BJ, Richard, Peter,

Thank you for sending this proposal, which carefully points out where 
the existing proposal is satisfactory and where you believe changes are 
needed. I will need some time to consider it fully.

Alex

BJ Hargrave wrote:
> Please find attached a proposal for a simple module system for Java. You 
> will have to excuse the formatting done by my e-mail client. I have 
> attached an html file which provides better formatting of the proposal.
>  
> 
> *JSR 294*
> 
> *Simple Module System Proposal*
> 
> 
> 1.        *Executive Summary *
> 
> This document proposes a simple concrete module system that supports a 
> subset of Jigsaw and OSGi as a replacement for the current proposal, 
> which creates a “black hole” where source files can only be understood 
> with the assistance of a specific module system. For example, at 
> compile-time, the module membership of a type is unknown without the 
> assistance of a specific module system. Additionally, the /syntax/ of 
> the module-info source file is module system specific, forcing 
> developers to make an upfront decision for a specific module system. 
> This proposal therefore seeks to define a concrete and simple module 
> system for Java that will have a fully specified syntax, define a 
> concrete module membership model for compilation, and provide consistent 
> and predictable visibility rules for dependencies. This simple module 
> system will allow developers to author Java standard source code and to 
> create Java standard modules which are “drop-in” deployable into Jigsaw 
> and OSGi runtimes. It is expected that the capabilities of this simple 
> module system will address most user’s modularity needs, although it 
> will defer support for more advanced modularity use cases to other 
> module systems.
> 
> 
> 2.        *Introduction *
> 
> The current JSR 294 proposal is the result of the expert group agreeing 
> to disagree on module system specifics. Since the expert group did not 
> agree on either OSGi’s or Jigsaw’s version numbering scheme, it was 
> decided that the version numbering scheme was a module system specific 
> detail. Only a specific module system could understand format and 
> natural ordering of version numbers. A developer creating a versioned 
> module, must chose a version number scheme and is thus bound to a 
> specific module system.
> 
> Also the Jigsaw and OSGi module systems have different modes of 
> accessing dependent modules. OSGi has package-based sharing 
> (“Import/Export-Package”) with a module-based variation 
> (“Require-Bundle”). Jigsaw has module-based sharing with variations for 
> friendship (“permit”) and selecting the defining class loader (“local”). 
> As a result, it was decided to allow module system specific information 
> to be written into the module-info source file. Additionally, it was 
> decided to let the module system decide module membership via a compiler 
> plugin, making module access decisions depend on the chosen module 
> system. The end result being a proposal that is breaking the Java 
> promise of write-once, run-anywhere.
> 
> This proposal aims to concretely define a specification for a */simple 
> module system/* for Java that will be supported by both Jigsaw and OSGi 
> as well as provide basic support for other module systems. The result is 
> that end users will be able to create Java standard modules which are 
> "drop-in" deployable into Jigsaw and OSGi runtimes, along with any other 
> module system implementing the simple module system specification. 
> Success with this proposal will require compromises on the parts of both 
> OSGi and Jigsaw stakeholders. But success here also means fulfilling the 
> promises made to the Java community by both Sun (Jigsaw) and OSGi to 
> work together to do the right thing for Java. This document is meant to 
> be a starting point for a new, simplified JSR 294 design and is offered 
> in the hope of cooperation and compromise. There are many details to be 
> worked upon, with the expectation and hope for substantive discussion 
> and improvements on the ideas and goals herein laid out.
> 
> 
> 3.        *Goals *
> 
> 1.        *Reuse from Current Proposal *
> 
> To build upon the work of the expert group, the simple module system 
> will use, from the current proposal, the module keyword specifying 
> module accessibility for types and members, as well as the use of the 
> module-info source file to specify module metadata. The specification 
> must continue to support exploitation of the module access modifier by 
> other module systems such as Jigsaw and OSGi. For example, a module 
> system must be able to assign module membership of types at 
> ClassLoader.defineClass() time so the module boundaries can be defined 
> by the module system.
> 
> 
> 2.        *No “black holes” *
> In order for this proposal to be truly valuable, it is paramount to have 
> no “black holes” in the specification, where black holes are things in 
> the source code which can not be understood without the assistance of a 
> specific module system. The specification must specify the concrete 
> syntax and semantics of the simple module system including version 
> numbers, dependency expression, module membership, etc. The Java 
> language specification does not allow one to define their own language 
> keywords or operators. The same must be true for module information in 
> module-info source files and for module membership rules.
> 
> 3.        *Extension through Extra-lingual Means *
> Since there are no “black holes” in the specification, in order to 
> express features of a specific module system, such as Jigsaw or OSGi, 
> extra-lingual means must be used. In this context, extra-lingual refers 
> to things such as manifest headers, text files, annotations, etc. For 
> example, OSGi can continue to use manifest headers to describe 
> OSGi-specific features. Jigsaw can annotate a module dependency with 
> @jigsaw.Local. The use and appearance of such extensions makes it clear 
> to the observer that more than the standard simple module system is in use.
> 
> This specification must allow annotations on statements in the 
> module-info source. Then, if desired, module systems can define module 
> system specific annotations to overlay their additional semantics on the 
> statements in the module-info file.
> 
> 4.        *Simple Visibility Model *
> The simple module system will define a single visibility model. When a 
> module requires another simple module, all the contents of this other 
> module are made visible to the dependent module. There is no 
> proscription against splitting packages across modules. This is what 
> Jigsaw currently does and is what most people, unfamiliar with OSGi’s 
> more expressive model, are likely expecting. It is very much what most 
> people experience today with Maven based build systems and the current 
> runtime classpath model. OSGi must update its specifications to provide 
> support for this simple visibility model, which is almost identical to 
> Require-Bundle on a bundle which exports all its packages. The simple 
> module system must also define a search order when looking up types in 
> dependent modules.
> 
> 5.        *Single Version Numbering Scheme *
> A single, shared version numbering scheme is necessary. The simple 
> module system must define a version numbering scheme and Jigsaw must use 
> it and OSGi must change to use it. The version numbering scheme must 
> define a natural ordering so that compareTo() can be used to order 
> versions. Currently, OSGi defines a 4-part version numbering scheme and 
> a natural ordering over it. Sun has stated the OSGi scheme does not meet 
> Jigsaw’s requirements. These requirements must be collected in order to 
> design a version numbering scheme and its natural ordering which can be 
> shared by the simple module system, OSGi and Jigsaw. OSGi must update 
> its specifications to support this new version numbering scheme.
> 
> 6.        *Module Membership*
> For the simple module system, the compiler must assume that module 
> membership corresponds to the membership of the module artifact, for 
> example a JAR file or directory. At runtime, each module artifact will 
> have its own class loader that is associated with a single unique 
> module. All types loaded from a module artifact will be loaded by this 
> single class loader and made members of this single module.
> 
> Other module systems must be able to define different relationships 
> between artifacts, class loaders and modules to provide additional 
> runtime functionality. For example, Jigsaw could use one class loader to 
> define types for multiple modules (“local”) and OSGi could use multiple 
> class loaders to define types for a single module.
> 
> 7.        *Compile-time Fidelity *
> For the simple module system, java compilers must provide compile-time 
> fidelity with the runtime for module and default (“package private”) 
> access.
> 
> 4.        *Non-Goals *
> 
> 1.        *Define Jigsaw or OSGi Metadata *
> This proposal leaves to Jigsaw and OSGi how they will define the 
> metadata for using their module system specific features.
> 
> 2.        *Compile-time Fidelity for other Module Systems *
> Enabling compile-time fidelity for specific features of other module 
> systems is out of scope for this specification. For example, OSGi 
> visibility rules or Jigsaw friends. To date, OSGi has not had 
> compile-time fidelity and, in general, it has not been a major issue.
> 
> 3.        *Address All Uses Cases *
> The simple module system is not intended to cover all interesting use 
> cases for modularity. It is intended to be a simple module system which 
> will likely cover the majority of the modularity needs of most users. 
> Other module systems such as Jigsaw and OSGi can be used to address 
> modularity use cases not supported by the simple module system.
> 
> 5.        *Summary *
> 
> While there are details to be worked out, this proposal to concretely 
> define a simple module system for Java is in the best interests of the 
> Java community. Hopefully, the expert group will seriously consider this 
> proposal and OSGi/Jigsaw stakeholders will work together to make the 
> necessary compromises for maintaining the write-once, run-anywhere 
> promise of the Java language.
> 
> 
> 
> 
> Jointly submitted by:
> 
> Richard S. Hall
> BJ Hargrave
> Peter Kriens
> 
> -- 
> 
> *BJ Hargrave*
> Senior Technical Staff Member, IBM
> OSGi Fellow and CTO of the _OSGi Alliance_ <http://www.osgi.org/>_
> __hargrave at us.ibm.com_ <mailto:hargrave at us.ibm.com> 	
> 
> office: +1 386 848 1781
> mobile: +1 386 848 3788
> 
> 
> ------------------------------------------------------------------------
> 
>  
> 
> *JSR 294*
> 
> *Simple Module System Proposal*
> 
>    1.
> 
> 
>         Executive Summary
> 
> This document proposes a simple concrete module system that supports a 
> subset of Jigsaw and OSGi as a replacement for the current proposal, 
> which creates a “black hole” where source files can only be understood 
> with the assistance of a specific module system. For example, at 
> compile-time, the module membership of a type is unknown without the 
> assistance of a specific module system. Additionally, the /syntax/ of 
> the module-info source file is module system specific, forcing 
> developers to make an upfront decision for a specific module system. 
> This proposal therefore seeks to define a concrete and simple module 
> system for Java that will have a fully specified syntax, define a 
> concrete module membership model for compilation, and provide consistent 
> and predictable visibility rules for dependencies. This simple module 
> system will allow developers to author Java standard source code and to 
> create Java standard modules which are “drop-in” deployable into Jigsaw 
> and OSGi runtimes. It is expected that the capabilities of this simple 
> module system will address most user’s modularity needs, although it 
> will defer support for more advanced modularity use cases to other 
> module systems.
> 
>    2.
> 
> 
>         Introduction
> 
> The current JSR 294 proposal is the result of the expert group agreeing 
> to disagree on module system specifics. Since the expert group did not 
> agree on either OSGi’s or Jigsaw’s version numbering scheme, it was 
> decided that the version numbering scheme was a module system specific 
> detail. Only a specific module system could understand format and 
> natural ordering of version numbers. A developer creating a versioned 
> module, must chose a version number scheme and is thus bound to a 
> specific module system.
> 
> 
> Also the Jigsaw and OSGi module systems have different modes of 
> accessing dependent modules. OSGi has package-based sharing 
> (“Import/Export-Package”) with a module-based variation 
> (“Require-Bundle”). Jigsaw has module-based sharing with variations for 
> friendship (“permit”) and selecting the defining class loader (“local”). 
> As a result, it was decided to allow module system specific information 
> to be written into the module-info source file. Additionally, it was 
> decided to let the module system decide module membership via a compiler 
> plugin, making module access decisions depend on the chosen module 
> system. The end result being a proposal that is breaking the Java 
> promise of write-once, run-anywhere.
> 
> 
> This proposal aims to concretely define a specification for a /*simple 
> module system*/ for Java that will be supported by both Jigsaw and OSGi 
> as well as provide basic support for other module systems. The result is 
> that end users will be able to create Java standard modules which are 
> "drop-in" deployable into Jigsaw and OSGi runtimes, along with any other 
> module system implementing the simple module system specification. 
> Success with this proposal will require compromises on the parts of both 
> OSGi and Jigsaw stakeholders. But success here also means fulfilling the 
> promises made to the Java community by both Sun (Jigsaw) and OSGi to 
> work together to do the right thing for Java. This document is meant to 
> be a starting point for a new, simplified JSR 294 design and is offered 
> in the hope of cooperation and compromise. There are many details to be 
> worked upon, with the expectation and hope for substantive discussion 
> and improvements on the ideas and goals herein laid out.
> 
>    3.
> 
> 
>         Goals
> 
>          1.
> 
> 
>                 *Reuse from Current Proposal*
> 
>             To build upon the work of the expert group, the simple
>             module system will use, from the current proposal, the
>             module keyword specifying module accessibility for types and
>             members, as well as the use of the module-info source file
>             to specify module metadata. The specification must continue
>             to support exploitation of the module access modifier by
>             other module systems such as Jigsaw and OSGi. For example, a
>             module system must be able to assign module membership of
>             types at ClassLoader.defineClass() time so the module
>             boundaries can be defined by the module system.
> 
>          2.
> 
> 
>                 No “black holes”
> 
> In order for this proposal to be truly valuable, it is paramount to have 
> no “black holes” in the specification, where black holes are things in 
> the source code which can not be understood without the assistance of a 
> specific module system. The specification must specify the concrete 
> syntax and semantics of the simple module system including version 
> numbers, dependency expression, module membership, etc. The Java 
> language specification does not allow one to define their own language 
> keywords or operators. The same must be true for module information in 
> module-info source files and for module membership rules.
> 
>          3.
> 
> 
>                 Extension through Extra-lingual Means
> 
> Since there are no “black holes” in the specification, in order to 
> express features of a specific module system, such as Jigsaw or OSGi, 
> extra-lingual means must be used. In this context, extra-lingual refers 
> to things such as manifest headers, text files, annotations, etc. For 
> example, OSGi can continue to use manifest headers to describe 
> OSGi-specific features. Jigsaw can annotate a module dependency with 
> @jigsaw.Local. The use and appearance of such extensions makes it clear 
> to the observer that more than the standard simple module system is in use.
> 
> This specification must allow annotations on statements in the 
> module-info source. Then, if desired, module systems can define module 
> system specific annotations to overlay their additional semantics on the 
> statements in the module-info file.
> 
>          4.
> 
> 
>                 Simple Visibility Model
> 
> The simple module system will define a single visibility model. When a 
> module requires another simple module, all the contents of this other 
> module are made visible to the dependent module. There is no 
> proscription against splitting packages across modules. This is what 
> Jigsaw currently does and is what most people, unfamiliar with OSGi’s 
> more expressive model, are likely expecting. It is very much what most 
> people experience today with Maven based build systems and the current 
> runtime classpath model. OSGi must update its specifications to provide 
> support for this simple visibility model, which is almost identical to 
> Require-Bundle on a bundle which exports all its packages. The simple 
> module system must also define a search order when looking up types in 
> dependent modules.
> 
>          5.
> 
> 
>                 Single Version Numbering Scheme
> 
> A single, shared version numbering scheme is necessary. The simple 
> module system must define a version numbering scheme and Jigsaw must use 
> it and OSGi must change to use it. The version numbering scheme must 
> define a natural ordering so that compareTo() can be used to order 
> versions. Currently, OSGi defines a 4-part version numbering scheme and 
> a natural ordering over it. Sun has stated the OSGi scheme does not meet 
> Jigsaw’s requirements. These requirements must be collected in order to 
> design a version numbering scheme and its natural ordering which can be 
> shared by the simple module system, OSGi and Jigsaw. OSGi must update 
> its specifications to support this new version numbering scheme.
> 
>          6.
> 
> 
>                 Module Membership
> 
> For the simple module system, the compiler must assume that module 
> membership corresponds to the membership of the module artifact, for 
> example a JAR file or directory. At runtime, each module artifact will 
> have its own class loader that is associated with a single unique 
> module. All types loaded from a module artifact will be loaded by this 
> single class loader and made members of this single module.
> 
> Other module systems must be able to define different relationships 
> between artifacts, class loaders and modules to provide additional 
> runtime functionality. For example, Jigsaw could use one class loader to 
> define types for multiple modules (“local”) and OSGi could use multiple 
> class loaders to define types for a single module.
> 
>          7.
> 
> 
>                 Compile-time Fidelity
> 
> For the simple module system, java compilers must provide compile-time 
> fidelity with the runtime for module and default (“package private”) access.
> 
>    4.
> 
> 
>         Non-Goals
> 
>          1.
> 
> 
>                 Define Jigsaw or OSGi Metadata
> 
> This proposal leaves to Jigsaw and OSGi how they will define the 
> metadata for using their module system specific features.
> 
>          2.
> 
> 
>                 Compile-time Fidelity for other Module Systems
> 
> Enabling compile-time fidelity for specific features of other module 
> systems is out of scope for this specification. For example, OSGi 
> visibility rules or Jigsaw friends. To date, OSGi has not had 
> compile-time fidelity and, in general, it has not been a major issue.
> 
>          3.
> 
> 
>                 Address All Uses Cases
> 
> The simple module system is not intended to cover all interesting use 
> cases for modularity. It is intended to be a simple module system which 
> will likely cover the majority of the modularity needs of most users. 
> Other module systems such as Jigsaw and OSGi can be used to address 
> modularity use cases not supported by the simple module system.
> 
>    5.
> 
> 
>         Summary
> 
> While there are details to be worked out, this proposal to concretely 
> define a simple module system for Java is in the best interests of the 
> Java community. Hopefully, the expert group will seriously consider this 
> proposal and OSGi/Jigsaw stakeholders will work together to make the 
> necessary compromises for maintaining the write-once, run-anywhere 
> promise of the Java language.
> 
> 
> 
> ------------------------------------------------------------------------
> 
> _______________________________________________
> jsr294-modularity-eg mailing list
> jsr294-modularity-eg at cs.oswego.edu
> http://cs.oswego.edu/mailman/listinfo/jsr294-modularity-eg
_______________________________________________
jsr294-modularity-eg mailing list
jsr294-modularity-eg at cs.oswego.edu
http://cs.oswego.edu/mailman/listinfo/jsr294-modularity-eg



More information about the jsr294-modularity-observer mailing list