Abstract

Groovy is an object-oriented programming language for the Java platform. It is a language with features similar to those of Python, Ruby, Java, Perl, and Smalltalk. Groovy, if accepted by Incubator, will be a first major programming language developed under the umbrella of Apache Software Foundation.

Proposal

Groovy is a programming language for the Java platform. It is a primarily dynamic language with features similar to those of Python, Ruby, Perl, and Smalltalk. It also has optional static type checking and static compilation facilities. It can be used as a scripting language for the Java Platform or to write complete applications, is compiled to Java Virtual Machine (JVM) bytecode, and interoperates with other Java code and libraries. Groovy uses a Java-like curly-bracket syntax. Most Java code is also syntactically valid Groovy, although semantics may be different. Groovy has long been developed under an Apache License v2.0 under an open governance community management process. However, so far Groovy has been a project mostly sponsored by a single company. This proposal aims at bringing Groovy community under the umbrella of the Apache Software Foundation.

It must be explicitly noted, that a few sister projects such as Groovy Eclipse and others (some of them hosted under https://github.com/groovy and listed at http://groovy-lang.org/ecosystem.html) are not covered by this proposal. It is possible that these other projects will be joining ASF either independently or as sub-projects of Apache Groovy in the future. For now, we are only proposing groovy-core.

Background

Groovy 1.0 was released on January 2, 2007, and Groovy 2.0 in July, 2012. Groovy 2.5 is planned for release in 2015. Groovy 3.0 is planned for release in 2016, with support for a new Meta Object Protocol. Since version 2, Groovy can also be compiled statically, offering type inference and performance very close to that of Java. Groovy 2.4 will be the last major release under Pivotal Software's sponsorship, which is scheduled to end on March 31, 2015.

Rationale

Groovy is a pretty mature language. After 12 years of development, it has grown from being primarily a dynamic scripting language on the JVM to an optionally statically compiled language allowing the same performance level as Java applications. With the release of Groovy 2.4, the language targets the largest pool of mobile developers with native Android support. Groovy has been integrated in a large number of applications, including well known open-source projects like Jenkins, Gradle, ElasticSearch, Spring and more.

There are multiple alternative languages on the JVM: Scala, Clojure, Ceylon, Kotlin, JRuby, Golo and others but Groovy is the only one which has proved to be very easy to integrate with Java in both ways: Groovy code using Java code, but also Java code using Groovy code. Groovy even provides a joint compiler which allows interdependent Java and Groovy classes to compile together. Groovy also supports dynamic code generation, that is to say classes at runtime, making it a perfect fit for scripting. With a very lightweight and malleable syntax, it is also easy to build internal Domain Specific Languages (DSLs) which integrate smoothly within applications.

Groovy provides a number of unique features, like builders (Java 8 has lambdas but still has syntactic overhead and no notion of delegate), AST transformations (compile-time metaprogramming) or type checking extensions (which allows the developer to bring the compiler to levels of type checking and type inference that go far beyond what other languages do). Groovy also provides powerful integration options and customizations which set it apart from other languages. Groovy is also unique in the way it allows the developer to choose between various paradigms without compromise: functional vs object-oriented, statically compiled vs dynamic, scripting vs applications, etc.

Despite all those advantages, and the fact that Groovy is widely adopted (4.5 million downloads in 2014 for Groovy alone), only a few Apache projects include Groovy and not a lot of them leverage its full power. Some developers tend to choose Scala for example to build DSLs without even knowing that the learning curve is much easier with Groovy, or that they can leverage powerful type inference in their own DSLs.

Android development is also a domain where the weight of Java and old-style APIs is heavy. Groovy 2.4 has proved that Android development could benefit from its closures, extension methods and static compilation to build applications which are as fast as Java, but with code which is much more maintainable and decoupled from Android APIs. Code generation libraries like SwissKnife illustrate what Groovy can offer for Android development. However, without full-time development on this topic, Groovy has a very tough competition with languages like Kotlin being intensively (and privately) sponsored to target this platform. With Groovy joining Apache, we hope that more developers would be able to join the effort and help reduce the footprint of the language, build libraries that leverage the full power of Groovy while fostering the long-term future of the language.

Initial Goals

The initial goals of the Groovy transition under the ASF umbrella are to establish a new home for an already fully functioning project and also make sure that the entire development community governs itself in the "Apache Way".

Please note that a sister project of Groovy -- Grails -- is not part of this proposal. If Grails community makes a decision to join ASF it will do so as an independent, albeit related, project.

Current Status

Currently Groovy provides a fully functional implementation licensed under ALv2. The project home is at http://groovy-lang.org/ and the majority of development is coordinated via GitHub https://github.com/groovy. The project sports a very mature documentation and ecosystem of projects leveraging it. In fact, quite a few existing ASF project have various plugins or subsystems written in Groovy (Bigtop, CloudStack, etc.).

Meritocracy

Groovy, up to this, has been run by a few core project members with a lot of contributions coming from a wide community of participants in the project.

We want to expand our diverse developer and user community and run the Groovy project in the Apache way clearly signaling not only the licensing, but also the governance choice.

Users and new contributors will be treated with respect and welcomed; they will earn merit in the project by providing quality patches and support that move the project forward.

Those with a proven support and quality patch track record will be encouraged to become committers.

Community

There are just a few core team members with over a hundred contributors to the project. If Groovy is accepted by the Incubator, transitioning the community to embrace the Apache Way of governance would be a primary initial goal. We would solicit major existing contributors to become committers on the project from the get go.

Core Developers

Core developers include folks who are extremely skilled in working in the openly governed communities on code bases license under the ALv2. The core developers are NOT currently affiliated with the ASF, although quite a few contributors are.

Alignment

Groovy has been integrated into Apache Bigtop, Apache CloudStack, Apache Ofbiz and quite a few other projects.

Known Risks

As noted above, development has been sponsored mostly by a single company and coordinated mostly by the core team so far.

For Groovy to fully transition to an "Apache Way" governance model it needs to start embracing the meritocracy-centric way of growing the community of contributors while balancing it with the needs for extreme stability and coherency of the core language implementation.

Groovy has historically been hosted at Codehaus. While the project has started to migrate off the Codehaus infrastructure, some critical tools of the project are still hosted there: JIRA, the mailing-list, and the deprecated wiki. Codehaus has announced end-of-support for mid-April, making the migration critical.

Orphaned products

The community proposing Groovy for incubation is a strong and vibrant open source project. Even though the sponsorship of the core team by Pivotal is ending on March 31st, the sheer size and diversity of the community is a guarantee against the project being orphaned.

Inexperience with Open Source

The majority of the proposers here have day jobs that has them working near full-time on open source projects. A few of us have helped carry other projects through the Incubator. Groovy to date has been developed as an open source project.

Homogeneous Developers

Now that Pivotal is ending its sponsorship, the initial group of committers is going to be extremely heterogeneous when it comes to corporate affiliations. The Groovy community is also extremely diverse in terms of geography and backgrounds of developers.

Reliance on Salaried Developers

Most of the contributors are paid to work in the Java ecosystem. While we might wander from our current employers, we probably won’t go far from the Java family tree.

Relationships with Other Apache Products

Groovy currently has a few ASF projects as optional dependencies but otherwise doesn't depend on any ASF projects. A few ASF projects already depend on Groovy.

An Excessive Fascination with the Apache Brand

While we intend to leverage the Apache ‘branding’ when talking to other projects as testament of our project’s ‘neutrality’, we have no plans for making use of Apache brand in press releases nor posting billboards advertising acceptance of Groovy into Apache Incubator.

Documentation

See documentation for the current state of the Groovy documentation.

A mature project website is also available at groovy-lang.org.

Initial Source

Initial source is available on GitHub under the ALv2 groovy-core

Source and Intellectual Property Submission Plan

We know of no legal encumberments in the way of transfer of source to Apache. In fact, given the series of corporate due diligence procedures performed on the source code during two of the acquisitions we expect the code base to be squeaky clean from an IP perspective.

External Dependencies

Embedded dependencies (relocated):

Module or optional dependencies:

Build only dependencies:

Test only dependencies:

Cryptography N/A

Required Resources

Mailing lists

Git Repository

https://git-wip-us.apache.org/repos/asf/incubator-groovy.git

Issue Tracking

JIRA Groovy (GROOVY)

Other Resources

A build server is currently sponsored by Jetbrains (TeamCity): http://ci.groovy-lang.org?guest=1 The CI server has a number of build plans including multiple JDKs (5 to 9), 3rd party joint builds and integration with the Groovy website (automatic deployment upon push).

Means of setting up regular builds for Groovy on builds.apache.org

Initial Committers

Affiliations

Sponsors

Champion

Roman Shaposhnik

Nominated Mentors

Six mentors is plenty, we are not looking for more mentors at this time.

Sponsoring Entity

We would like to propose Apache incubator to sponsor this project.

GroovyProposal (last edited 2015-03-12 17:40:29 by CedricChampeau)