What is Spring Extensions?
Spring Extensions is a new collaboration effort from SpringSource to encourage and enable community driven extensions to the Spring projects. It provides infrastructure, process and endorsement to selected projects that are consistent with the best of breed practices, principles and high quality associated with the SpringSource engineering teams.
How do I submit my project as a Spring Extension?
Please read these instructions to learn more about the proposal process.
What's in it for me?
Every Spring Extension is officially endorsed by SpringSource. While not every extension is developed or contributed by a SpringSource employee, every extension has a SpringSource sponsor who is responsible for working with the project lead to make the extension as successful as possible. As well as an official endorsement, SpringSource also provide a development environment and services, including:
- dedicated subversion repository
- personal licensed copy of the SpringSource Tool Suite for each contributor
- distribution mechanism
- continuous build server
- release cycle and (very limited) project management co-ordination
- bug and enhancement management (JIRA)
- mailing list
How do you differ from SourceForge, code.google.com etc.?
SourceForge provides development infrastructure and is very good at it. It also provides a public distribution channel. What it doesn't provide are project management capabilities (release management, etc.). Critically, it doesn't provide any endorsement or affiliation with the hosted code. Spring Extensions provides the infrastructure but also provides the endorsement and quality assurance that is expected from the strong association with SpringSource.
What happens to my extension once it has been created?
Every extension starts off in the incubator, at version 0.1. If appropriate, after reaching a level of maturity and stability, the extension will be released as "live", where it will continue to grow. If the extension becomes redundant (maybe the portfolio projects provide an alternative, or the requirements are no longer relevant) it will be archived. If the extension is of a particular interest to a product lead, it may be incorporated into that full Spring project, or in some cases it might be that an extension represents enough value to the community to become a Spring project in its own right.
Are the extensions purely Java based? What about extensions to Spring.NET? Python?
Spring extensions are not limited to Java. There are currently a number of extensions related to the Spring.NET project, and we even have a Python extension. The process and infrastructure (except for obvious differences like build servers and IDEs) are the same for both .NET, Java or any other type of extension.
How does this relate to Spring Modules?
Spring Modules was developed to serve a similar goal and was very successful. In fact, it was too successful and grew beyond anybody's expectations. As such, Spring Modules isn't really flexible enough or scaleable enough to manage a large number of independent projects. Spring Modules has now reached end of life. The modules that are still undergoing active development may be ported to Spring Extensions.
What restrictions are there for a Spring Extension?
Every extension must meet and follow the development standards of a Spring project. These include:
- build system
- various coding and design standards (recommended programming and design patterns etc.)
- package layout (org.springextensions.<project>)
- regular architecture, design and code reviews
An extension must also meet the following criteria:
- actively being maintained and enhanced by the contributors
Additionally, every contributor to an extension must:
- sign a legal contract assigning copyright to SpringSource
- agree to follow the development standards
Why does every extension require a SpringSource sponsor? What do they do?
The sponsor has two primary responsibilities, co-ordinating that extension with a particular project and quality assurance.
In terms of co-ordination, the sponsor will be a good channel through which the contributors and the project lead communicate, feeding ideas back and forth. Of course, in many cases the sponsor will be the product lead. For quality assurance, the sponsor is accountable within SpringSource for ensuring the project is up to scratch and consistent with other teams and for this reason the sponsor has the final say on any contested decisions related to the extension.
Can I just give you my code?
Not really. Spring Extensions is about enabling community driven development. It isn't a way of "off-loading" code. When submitting a potential extension, you will be expected to define the roadmap and give an idea of your resource availability to develop the extension.
The key point is that while SpringSource may contribute to the code base, it is still your code base.
The other key point is that an extension needs to be more than just code. A good extension (like any other Spring project) should have API documentation, reference documentation, samples, examples, etc.
So can anything be a Spring Extension?
Again, no, not really. Each extension will have an internal sponsor assigned to it, and obviously only projects that are interesting and relevant to each sponsor will be accepted.
What about licensing?
Every Spring Extension, as part of the proposal process, is licensed under the Apache License, version 2.0. A copy of that license is available here.
What about copyright?
Similar to many open source projects, we request that contributors assign their copyright to us when contributing code to a product or project owned or managed by us and this includes Spring Extensions. The purpose of copyright assignment is to clearly define the terms related to intellectual property contributions to the extension and this allows us to properly and completely defend the extension should there be a legal dispute regarding the extension in the future.
What would make a good Spring Extension?
This is very hard to answer definitively. If it is an extension to the framework, or applying the Spring programming model to a new area or environment, is still actively developed and is of a significant size (more than one or two classes!), then it's time to think about submitting a proposal.
To get a feel for extension projects that are already in the incubator take a look at the existing list of Spring Extensions.