Crowdfunding has been utilised to back everything from the construction of potato salad to effigies of Lionel Ritchie. This week however, we were particularly surprised to see a JVM-centric campaign pop up: JUnit Lambda, which is aiming to raise 25,000 EUR to push forward the development of the popular Java testing library.
With no formal paid support in place, a slew of issues have accumulated, and any meaningful way for JUnit to reap the benefits of the features Java 8 introduces is a long way off. The fundraisers hope that by raising enough to employ a crew of dedicated developers and fund an onsite kick-off workshop, they’ll be able to shape the future of testing on the JVM. In this interview, Johannes Link gives us the full story, and explains why he and his co-fundraisers decided to take this unorthodox approach.
Voxxed: This is a pretty unique model for building a JVM project. What made you decide to take this approach?
Link: JUnit 4 is 10 years old and got stuck in a slow maintenance mode. This is mostly due to the fact that no core developer is being paid for their work on JUnit. For the ambitious changes deemed necessary, JUnit needs at least an initial push of a protracted period of full time development. We hope that the combination of 3 employer sponsored developers together with raising enough money to support an additional 1 or 2 devs for 2 months will work out.
Do you hope other open source projects will follow suit? Have you had any criticism of this model?
We don’t consider crowd funding to be the optimal sponsoring model since there are no real tangible benefits for funders; the resulting software will be available to the public anyway.
Being quite famous, JUnit might have chance to get funding this way, because people (and companies) are willing to “give back” for the last 20 years of testing. Nevertheless, it’s an experiment; if successful others could follow suite.
What do you think will be the biggest challenge for this project in terms of tools and IDEs?
IDEs and build tools rely heavily on the current way of running JUnit tests and collecting test results. We have been in contact with most of the companies and developers behind those tools to collect their needs for a better integration. That said, it will need a lot of persuasion to get them integrate with a new, albeit more powerful, API. In the meantime we’ll try to have some backwards compatibility measures available to allow people to use JUnit Lambda from minute one.
Are there any corporate backers in particular you would like to see getting on board withthis campaign?
In the current phase we are happy about all contributions that help us reach the funding target of 25000 EUR. Companies that want to both make a difference and have some influence on the future direction of JUnit should consider the more valuable perks, which will allow them to participate in the kickoff meeting.
For the time after the campaign, JUnit would immensely profit from a corporate sponsor to fund at least a few months of development time per year.
What are some of the key issues you’d like to fix with JUnit?
The basic design of JUnit has remained the same since 2005. Some constructs like Rules were added, but at the same time backwards compatibility has always been a major goal. A number of issues have increasingly slowed down its evolution:
1) No clear and simple way to extend JUnit: There are Runners and Rules, both addressing overlapping aspects of enhancing or changing JUnit’s standard behaviour. Composing two or more extensions will often not function as wished. Moreover, keeping all 3rd party extensions working and doing necessary restructuring at the same time has become a Sisyphean struggle. We plan to completely rethink JUnit’s extensibility story with a focus on composability and separation of concerns.
2) Missing API for executing tests and collecting test results: As described above, we plan to provide a decoupled way for running and watching test execution.
3) Java 8 constructs like lambdas and streams could give us a more concise way of building test cases and formulating assertions. We plan to enhance JUnit with an optional package for those things so that JUnit’s core will continue to be compatible with Java 7 or even Java 6.
Is there any way for our readers to get involved if they’d like to help in this effort (aside from donating, which you can do here)?
Spreading the word is currently priority #1. Tell your colleagues, your Java community and your boss. And in case of a successful campaign: try out the early releases and give us feedback!