Wookie: A case study in sustainability

At OSS Watch we periodically review all the resources on our main website to make sure they’re accurate and up to date. Last week it was time to revise our case study on Apache Wookie, which is a project I’ve been involved with for some time.

Wookie graffiti

OSS Watch became involved with Wookie while I was working in an EU project based at the University of Bolton. The project as a whole had done lots of interesting stuff, but as with many large projects the whole was somewhat less than the sum of its parts; the central joined-up platform wasn’t really going to take off after the project finished. However, in the process we had built quite a promising system for adding functionality to the core portal shell using the W3C Widgets specification.

Towards the end of the project I went to an OSS Watch event, and spoke with Ross Gardler about what we were doing. Ross explained the Apache Incubator model to me, and from there on I was hooked.

Fast forward to 2013, and Apache Wookie is out of the incubator and a top-level Apache project, and is now on its seventh official release (the last one was in April). Its not a huge project – the team is still small, though its far more diverse than when we started out.

The tempo of development has also slowed in recent years. However, in part thats due to the maturing of the software to a point where code churn for its own sake has a negative impact on the projects that depend on it. Most recent updates have been fixing bugs affecting deployment in various unusual configurations, driven largely from reports by users. So this isn’t necessarily a bad thing!

Something that has also had a very positive impact on the project is having a very active downstream project – Apache Rave. This has driven a lot of improvements to Wookie to improve integration and deployment.

Two major EU projects have been working with Wookie and Rave over the past two years, and are coming towards their end – one this year, and the other in 2014.

Unlike previous projects they have focussed on working with existing software projects rather than going it alone, and have contributed code, user studies and content.  This has been a great experience, and hopefully future projects can learn from this approach.

Wookie stands as an example of how OSS Watch can help take work from within the HE sector and turn it into a sustainable open source software project; and as a beneficiary of this approach I’m keen to offer the same help I received to others.

Do you think your University-based project has the potential to go further? If so, get in touch!

Read the updated case study on Apache Wookie at OSS Watch.

(Photo by Silus Grok, used under CC-BY-SA license)

4 Tips for Keeping on Top of Project Dependencies

Almost any software project involves working with dependencies – from single-purpose libraries to complete frameworks. When you’re working on a project it’s tempting to bring in libraries, focus on meeting the user need, and figure out the niceties later. However, a little thought early on can go a long way.

Photo of a stack of cards

This is because every dependency can bring its own licensing obligations that affect how you are able to distribute your own software. In some cases, in order to release the software under a particular license you may end up having to rewrite substantial amounts of software to remove reliance on a library or framework that is distributed under an incompatible license.

So there is a tradeoff between being agile and productive in the short term, against the risk of needing to do a costly refactoring triggered by a compatibility check before – or even worse, after – a release.

For larger projects, and organisations with multiple projects, this starts to stray into the territory of open source policies and compliance processes, but for this post lets just focus on the basics for small projects.

1. Make it routine

A good strategy is to build good dependency management practices into your general software development practices – similar to the concept of building in quality or building in security.

In other words, given that the cost of fixing things later can be significant, it’s worth investing in the practices and tools that can ensure potential issues are spotted and fixed earlier.

At its simplest, this can just mean developing a greater awareness as an individual developer of where your code comes from,  knowing that what you reuse can limit your choices for how you license and distribute your own code.

So in practical terms, this means being careful about copying and pasting code from the web, and making sure you know the licenses of any dependencies, preferably before working with them, but certainly before building any reliance on them into your code.

It may also make sense to handle any required attribution notices for inclusion in a NOTICE and README as you go along, rather than just rely on a release audit to always pick them up.

2. Let tools take some of the strain

There are also tools that can help make things easier. For example, if you use Maven for Java projects, there is a License Validator plugin that can help flag up problems as part of your compile and build process.

Alternatively, Ninka is an Open Source tool for scanning files for licenses and copyrights. While it can’t follow import declarations or dynamically linked libraries, it can be useful to periodically check builds. A similar project is Apache RAT (Release Audit Tool) which was originally created for use within the Apache Software Foundation for reviewing releases made in the Apache Incubator.

For larger projects and organisations there are also complete open source policy compliance solutions like Protek from Black Duck, or Discovery from OpenLogic.

It’s also worth pointing out that, while tools can be a part of the solution – and can be invaluable for large projects – ultimately it’s still your responsibility to make sure you meet the obligations of the software you are reusing.

3. Remember to check more than just the licences!

If a dependency has a compatible licence, thats great. But what about if the project that distributes it doesn’t bother checking their own dependencies?

This is where it’s good to have an idea about the governance and processes of projects you depend on.

There aren’t just licensing risks associated with dependencies – if you rely heavily on a library that has only one or two developers then you also run the risk that it may become a “zombie” project with implications for the rest of your code, for example, if security patches are no longer being applied.

A zombie

Beware of zombie projects!

The commercial tools mentioned above are also typically backed by a knowledge base that can also flag up other issues with dependencies, such as governance or sustainability problems.  However, just having a check for the project on Ohloh is often good enough for most smaller projects to check that a library is still “live”.

If you need to know more about the sustainability of a particular project, OSS Watch can carry out an Openness Review to check its viability using a range of factors – get in touch with us if you want to know more.

4. Keep track of past decisions and share knowledge with colleagues

Some organisations make use of component registries to keep track of which components they approve on in their software projects. This can save time spent by developers researching the same libraries, but makes most sense when you have a lot of projects that probably need the same kinds of components, in which case focussing on reusing the same set of libraries makes sense.

Another reason for using a registry is where you need to perform more detailed evaluations, for example for security, and so checking a dependency is more involved than just figuring out which license it uses, and that the project isn’t dead.

Some examples of commercial registries are Sonatype Component Lifecycle Management   and Black Duck Code Center. Again, for a smaller project or an organisation with a relatively small set of projects this can be overkill, and just having a shared document somewhere where you can keep note of which libraries you’ve used can be effective.

For example, you could share a spreadsheet with colleagues containing some basic information on each library like what version you’re using, what license it’s under and the date and results of any investigations you’ve done into sustainability, security or risk assessment.

Is it worth it?

Reusing code is good practice and should save you time and expense – so it’s annoying if the administration associated with it starts affecting your productivity.

You can make a judgement call about what level of risk you feel is acceptable; for example, on an internal-only research project the risk of having to undergo a major refactoring should the project be successful may be one worth taking.

However, for a production system, or a component that is itself intended for reuse, you may just have to accept that you have to be a bit more diligent in how you reuse code.

Photo by DieselDemon used under CC-BY-2.0.

Rebooting Open Source Projects

Restart ButtonOne of the most annoying things that can happen to software is for it to become “abandonware”, particularly if its something you rely on.

This is where the original developers of the software cease further development or support, usually to move onto other projects, or sometimes due to a change of employment or other personal circumstances. Whatever the reason for it, the software that was once a key part of your infrastructure ceases to be updated, and over time its going to be less and less viable.

However, with Open Source there is sometimes the potential to “reboot” a software project even when the original developers have moved onto other things.

This recently happened to me with a library called HtmlCleaner. HtmlCleaner is a handy little library that, as the name suggests, cleans up “dirty” HTML and allows you to modify it programmatically. There are other libraries for doing this of course, but HtmlCleaner always had the edge for me due to its light footprint, small number of dependencies, and an API that provided the functions I needed. HtmlCleaner is used in Apache Wookie, for example, to clean up HTML in web widgets and inject additional JavaScript needed for extra features.

Unfortunately, the developer of HtmlCleaner, Vladimir Nikic, had moved onto working on other things, and the last release of the library was in 2010. Then recently we came across a bug in HtmlCleaner that was affecting Apache Wookie.

After some Googling I found that others had come across the same problem, and had forked the project to apply their own fixes. Which didn’t really solve the problem, as you then have to ask yourself which of the forks are viable and up to date, and also run the risk of fragmenting the community.  Wouldn’t it be better if we could get those interested enough to make a fork, to take an active role in the core project?

HtmlCleaner already has a large user community, and the project regularly receives new patches and feature requests; all that was missing at a minimum was someone available to thank users for their contributions, review and apply patches, and manage the releases.

I got in touch with Vladimir, and Patrick Moore, creator of one of the forks, and we agreed to “reboot” the HtmlCleaner project, with Patrick and I getting maintainer access.

I applied a user-contributed patch to fix the bug that was vexing Apache Wookie users, and released HtmlCleaner 2.2.1. Patrick is merging back in the various fixes and improvements that he’d made to their fork, to be released as 2.4. After a gap of two years, HtmlCleaner is back in business!

Of course, in another year or two perhaps both Patrick and I will have moved onto other things too. But if we do, hopefully like Vladimir we’ll be able to hand over to new developers coming from within the community.

Some open source foundations and umbrella projects list dormant projects that can be rebooted;  for example, the Apache Attic is where Apache projects head when they are no longer active, and there are processes for allowing a new project team to restart activity, either by moving the project back into the incubator, creating a fork, or forming a new project management committee.

If projects have been dormant for too long, technologies and frameworks may have moved on so far that reviving them is not a viable option, but in some cases there can be mileage in reviving  one of these projects rather than starting from scratch, particularly if there is still a user community to draw upon.

 (image by _bianconero licensed under CC-BY)

Bad API design: 3 deadly sins

Building APIs into your software, especially when they’re exposed as a web service, is a fantastic way to broaden engagement with your open source software project. APIs allow people to extend and integrate with your software without having to touch your core codebase, which is good for maintainability and for uptake.

Moodle is a fantastic example of this.  As well as providing a wealth of internal APIs for writing plug-ins, it exposes functionality via web services which has allowed the community to develop mobile apps which use Moodle’s data and features without requiring special hooks in the core code.

When designing an API, it’s important that you do so in a way that people will be able to use it easily. PHP aficionado Lorna Jane Mitchell‘s been gathering examples of how not to do it, and has identified 3 deadly sins of API design, to steer you in the right direction:

  1. Using incorrect error codes.
    Many APIs exposed through web services use a convention called Representational State Transfer, or REST.  The idea of REST is to use HTTP as your API’s protocol, keeping your overheads to a minimum. HTTP already has a well defined vocabulary of methods and return codes, so doesn’t need extra data being sent back and forth to provide this information.  If you’re going to write an API that uses REST, don’t return a 200 code (OK) and then send back an error message in the response’s body.  There’s an error code to cover pretty much any eventuality, so make use of them.  This allows developers to write code that identifies the type of error and handles it appropriately.
  2. Being Inconsistent.
    Developers want an easy life.  When they call your API, they want to be able to predict what will happen.  Follow consistent conventions in your vocabulary (especially regarding singular and plural nouns), and don’t change the type of data returned depending on the result of the query.
  3. Documenting Poorly.
    This applies throughout your project, but especially for external APIs as these will be the first point of call for someone looking at integrating or extending your software.  Expecting people to read through your code to work out how to use your API isn’t going to win you any friends or contributors.  Worse than this is letting your documentation be incomplete, incorrect or out of date, leaving people to find the mistakes and work around them by trial-and-error.

Visualising Open Source Projects

Our colleagues over at CETIS have been doing a lot of work on analytics recently so I thought it was about time I had a go at using some of the tools available for analysing open source software projects.

I’ve used Ohloh for quite a while, which is a useful tool for getting a general picture of a project and its committers, particularly its canned “factoids” relating to the overall level of activity, amount of comments in the code, languages used and so on. At OSS Watch we also have some more in-depth tools and methods for looking into how a project is working. However, I was interested in how you might be able to visualise the activity of the community itself; the first thing I found is a very nice application called Gource.

Gource reads the log files from most source & version control systems used by projects, including svn, git and mercurial, and generates an animation showing the interactions between the people and the codebase – so every commit is visualised as a person moving around the code structure and touching the files.

You can also export the Gource output into FFMpeg to create a movie. Here’s one I made showing the history of Apache Wookie – from project startup all the way through incubation at the Apache Software Foundation – in about 48 seconds:

YouTube Preview Image

The actual command used to generate the movie looks like this:

gource -640x310 wookie.log -t 48 -s 0.01 -hide filenames,dirnames,usernames -o - | ffmpeg -y -r 60 -f image2pipe -vcodec ppm -i - -vcodec libx264 -preset ultrafast -crf 1 -threads 0 -bf 0 wookie.mp4

The movie shows the project starting off with one contributor laying the groundwork before being joined by one or two others, and finally towards the end there are parts where you have four or five people working together, some focussed on one part of the project, and some on another.

You can also make the movie much slower, and show the usernames of the committers and the files and directories being worked on to get a better sense of “who is doing what” in the evolution of the project.

Unfortunately, what we see here is only part of the story, as these are all the commits made to the source code, but not the messages on the mailing list, the issues on the tracker, and the updates to the websites. For Wookie, for example, much of the growth of the community is seen in contributions on the issue tracker and mailing list – only a few made the transition into becoming committers.

It would be great to get the issue tracker history from Jira, for example, and include that in some fashion. With Apache projects at least there is also often an explicit link between a Jira ticket and related commits. Given that Martin Hawksey has shown you can use Gource for visualising OER deposits into Jorum using Google Refine I’m sure its possible!

I also made a movie of Apache Rave using the same settings; Rave is a much younger project but started out with far more committers, so the same activity here takes around 20 seconds:

YouTube Preview Image

Finally, here is another video from the Gource team showing a few different projects, including Moodle:

YouTube Preview Image

 

 

Developers in the Mist

In my last post I started dissecting the term “cloud”, looking at Infrastructure-as-a-Service (IaaS) and what it means in terms of Open Source Software.  This time I’ll be moving to the next layer of the cloud stack to look at Platform-as-a-Service, or PaaS.

PaaS provides a way of provisioning development environments and tools on top of an IaaS system.  PaaS allows you to easily deploy the tools required for developing and running applications; languages, runtime environments and testing tools, with the inherent flexibility of resource allocation that comes with running on IaaS.

For example, you might want to start developing a Ruby on Rails application.  Without PaaS, you might create a new Virtual machine, set up the operating system, install a database, Ruby, Rails and all their dependencies, configure remote access to the machine, and so on.  With PaaS you can simply use the provided tools to deploy a pre-configured Ruby on Rails platform as per your specifications.

The key benefits here is that developers can focus on developing applications rather than setting up their environment and managing server resources, and that custom-built applications can scale easily to meet demand.

You can get PaaS solutions from several of the usual suspects.  Windows Azure offers PaaS tools to run on top of its IaaS offerings, while Google App Engine allows you to develop and run your software in Google-land.  Both of these systems are proprietary, purely sold as a service.

Open Source PaaS offerings are also emerging. RedHat’s OpenShift and VMWare’s CloudFoundry are both platforms providing similar features to the proprietary competitors, but are available under an Open Source licence.  RedHat and VMWare bother offer their respective solutions as a supported commercial service, but as is the nature of Open Source, there are other companies selling services based on the same systems.

The key differentiator touted by the Open Source solutions as opposed to their proprietary competitors is freedom from lock-in, although OpenShift and Cloud Foundry present this benefit differently.  OpenShift focuses on support for portable technologies such as Java and Open Source languages as a means of allowing you to take your applications elsewhere if you choose.  Cloud Foundry provides support for similar technologies, but focuses on avoiding lock-in to a single IaaS platform.  This means that Cloud Foundry will run on VMWare’s own vSphere infrastructure, OpenStack, or even Amazon’s EC2. The OpenShift website does make mention of OpenShift running on Amazon Web Services, but most of the documentation refers to running on OpenStack.

Of course, the other benefit of Open Source solutions is that you’re not tied to using a commercial service at all.  If you’ve got a supported IaaS system running in house, or rented infrastructure from an external service, you can deploy your own PaaS atop it and let your staff spend more time developing and less time setting up platforms.

TypeScript – Do we need it?

Last week Microsoft announced TypeScript, a new open source programming language.  The stated goal of TypeScript is to make it easier to write “application scale” JavaScript.

Like CoffeeScript and a few similar languages that have sprung up over the past few years, TypeScript is a language that compiles down to JavaScript, allowing the code to be run in any browser, in node.js, or in any other runtime that supports JavaScript.  Microsoft’s motivation for producing such a language is obvious: the interface of Windows 8 runs apps written in JavaScript, so putting tools in the hands of developers to make writing JavaScript easier is prudent.

Unlike CoffeeScript or other to-JavaScript compilers like SharpKit, TypeScript is built as a superset of JavaScript, so any JavaScript code is also valid TypeScript code.  TypeScript makes several optional features available on top of JavaScript’s syntax, including:

  • Static Types, allowing you to “state your intent” and have the compiler help identify where you might have made a mistake
  • Classes and Interfaces, providing a much friendlier syntax for defining data structures that JavaScript’s own
  • Modules, allowing definition and importing much like in other languages

Some of these features are already proposals for the next version of ECMAScript, the standard that JavaScript is based on, and Microsoft has taken the smart move to try and match the current proposals in its implementation of these features.  This means that you’re getting access to features that are likely to be in the future versions of JavaScript.

One of Microsoft’s real selling points of TypeScript is that having things like Interface definitions and static typing allows for lots of code completion and error detection by editors and IDEs, which in turn allows you to identify and correct mistakes quickly.  No surprises that this fits in very well with the experience of writing languages like VB.NET and C# in Microsoft’s own Visual Studio IDE.  However, other developers haven’t been completely left out in the cold – Syntax highlighting support for cross-platform editors Sublime Text,Emacs and Vim are also available.

In a world of CoffeeScript, Dart and 101 JavaScript frameworks, is there a place for TypeScript? I think there is. Microsoft haven’t overstated their goal – TypeScript is only there to add optional features to JavaScript to help developers write complex applications.  With the plethora of tools for writing cross-platform games and apps with JavaScript, as well as platforms such as Windows 8 and Open WebOS bringing web technologies to the desktop, demand for the features offered by TypeScript is only going to increase.

The TypeScript compiler is released under the Apache Licence Version 2.0, and the source can be downloaded from CodePlex.  The language specification is published on the project’s website, along with instructions for getting started.

Open Development in the Moodle Community

I’d like to introduce you to a bug.  It’s called MDL-16660. Not going to win any prizes for imagination there, I know, but for a long time it’s been the highest voted bug on the Moodle tracker.  The bug was initially filed when Moodle 1.9 was the current version, and a user wanted to import a calendar to Moodle using the standard iCalendar format used by most calendar management software.

There were some pretty serious barriers at the time the bug was filed which meant it wasn’t going to get fixed in a hurry; Moodle 2.0 was being worked on, which represented a complete re-write of large parts of Moodle and completely new components of the system being developed. Moodle had support for exporting to iCalendar files thanks to a library called Bennu which had been written by a developer called Jon Papaioannou for adding this feature to Moodle, meaning it could serialise data into files, but not do the reverse, and was missing support for some of the format’s features.  Jon had since left the Moodle project.

When a member of staff in my institution first asked me if we’d be able to import calendars from our Groupwise system into Moodle, I found this bug and set about writing a proof of concept to parse the files manually and insert records into Moodle’s database.  This worked for us, but wasn’t going to work for everyone.  At this point Martin Dougiamas, Moodle’s founder, made me aware of Jon and the Bennu library, so I set about investigating.  Jon’s implementation of the iCalendar specification was incomplete, but the information I indeed to finish it was available, so I spent a couple of days finishing it off.  Someone had also posted some example code on the Bennu project’s forums for unserialising iCalendar files, so using that as a starting point I added a method for that.  Finally, I managed to get in touch with Jon through the Moodle community, and he agreed to commit my changes to the library’s version control.  I raised MDL-22308 and managed to get the new library included in Moodle.

Unfortunately, this came just before the Moodle 2.0 release.  I wrote a patch to provide an interface to upload iCalendar files, but I had to write it for Moodle 1.9 as this is the version my institution was using.  This code would need to be updated before it could be included in the Moodle core, and general resistance to the major version upgrade meant getting people to test this code wouldn’t be easy.  On top of that, the core developers at Moodle HQ were quiet on the issue while dealing with the fallout from Moodle 2.0, which meant I missed out on much-needed feedback.  In the end, my institution found another solution for publishing out calendar, and I couldn’t justify spending any more time on the issue.

All was not lost, however.  After a period of inactivity on the issue, a client of Moodle Partner company Catalyst IT contracted them to implement the feature.  Johnathon Harker of Catalyst began posting patches to the bug, and published an implementation which can be added to the 2.2 and 2.3 series releases of Moodle.  Once testing has been completed, the code should land in Moodle 2.4 in time for its release due in December.

The key aspects of this scenario for me are how easy it was for me to build on Jon’s work with the Bennu library, and how Johnathon could take my updated library to build his import and syncing features.   What made this possible was that the development was done in the open, documented well and communicated effectively through the tracker.  With minimal intervention from the Moodle HQ team, the community were able to develop and test a highly demanded feature which will soon be released for the benefit of everyone.

Stories like this happen all the time in Open Source Software, and it’s great to hear about them.  If you’ve got an example, leave us a comment below and let us know about it!

 

Reaching out: How funded project consortia can work with open source communities

Its a common dilemma facing a funded project: do you deliver the software you’ve promised in your workplan by building it from scratch, or do you work with an existing open source project? If you build it from scratch, you keep control of the direction of the software, you can plan it according to your project workplan and schedule, and you know how you can report the effort involved to your funders. However, you’re likely to struggle with making that software sustainable after the life of the project.

On the other hand, engaging with an existing open source project brings a different set of risks and benefits; you can benefit from the contributions to the codebase from the wider community, and the software is far more likely to be sustained in the longer term as it doesn’t rely on the project funding. However, the project consortium is only one group of contributors to the community, and so the software roadmap and release schedule is no longer under control of the project.

This was the situation faced by the OMELETTE project, funded under the European Framework 7 Programme. OMELETTE had a need for a mashup delivery platform – in essence, a web platform for combining web apps created by mashup tools into shared workspaces. Requirements had been written, and there was a workplan identifying when functionality had to be delivered. The obvious route would be to go and build the platform, and then make some justification in the exploitation plan as to how the partners would make the platform sustainable when the funding ran out. However, the consortium decided to take a different approach, and work directly with the Apache Rave and Apache Wookie projects, which already implemented many of the requirements identified by the consortia.

Again, another obvious strategy at this point would have been to create a private fork of the software. That would enable the consortia full control over the direction and delivery of the platform; the drawback is that a fork can fall rapidly out of step with the original project, creating additional effort in porting important bug fixes and new features into the fork. This was going to be a big problem with Wookie and Rave, as both projects were evolving rapidly. Rave in particular as a fairly new project was getting new features implemented at a rapid pace.

So the approach taken was to work directly with the communities on the core codebase wherever possible rather than to create a project fork. This meant that the project could set up continuous integration (CI) using the current trunk of Apache Rave, ensuring that mashups developed in the project could be tested with the latest running code.

One immediate benefit was that some of the key requirements of OMELETTE, that could potentially have required considerable development effort, were being implemented as part of the Rave community roadmap. For example, inter-widget communication, a core OMELETTE requirement, was implemented in Rave without needing any real input from the consortium at all; all the project partners had to do was make use of it in their web apps when it turned up in the daily build.

For other project requirements, a more proactive approach was needed. One feature that OMELETTE needed to implement was a way of connecting workspaces with an external repository developed within the project; this could have been done as an OMELETTE-specific module, however when the project partners discussed the functionality it was found that it could be expressed as a more generic feature for connecting Rave with widget marketplaces (for example, Edukapp and Widgr). The internal requirement was rewritten using external language (terminology can be an issue when working across projects) and submitted to the Rave community as a new feature request. Almost immediately, other community members began commenting on their own need for such a feature. (This is now being implemented by OMELETTE partners and contributed back to Rave).

Of course not everything in OMELETTE involves open development; some aspects of OMELETTE for one reason or another haven’t lent themselves to working with existing open source communities, and have been developed entirely within the project. Some other components are closed-source.  However the platform used to integrate the whole project is Apache Rave, including contributions from the project.

So could this approach work for other projects? I think it depends on a number of factors, not least the willingness of the project consortium to make a trade off between control and sustainability.

Realistically, most software developed in funded consortium projects is not sustained beyond the end of funding, although naturally every project claims it will do its best, sometimes for larger projects even setting up their own foundations. However, I think privately most organisations involved would admit that often such claims of sustainability are over-optimistic, and project officers and programme managers are I think increasingly skeptical unless the consortium members have the track record to back it up.

Loss of control might be a problem for consortia, particularly where there isn’t a close alignment between the consortium objectives and how the wider community sees the future of the software. In this case, OMELETTE were using Rave and Wookie in ways that were clearly complementary with the use being made by other members of the wider community, and so the control issue never arose. As a backup plan, if there was a requirement needed by OMELETTE that didn’t fit the Rave or Wookie roadmap, the project could have created a fork, but this hasn’t happened yet – and seems very unlikely.

It helped that in the OMELETTE consortium there was already a partner engaged in both ASF communities, in this case the University of Bolton. Developers from Bolton were able to bridge the gap between the consortium and the communities, bringing other partners to ASF hackathons, and introducing developers from other partners in the consortium to open development.

If there was one clear improvement that could have been made, it would have been to have conducted internal capacity building activity much sooner and with more resources; it can take a lot of mentoring and encouragement to get developers used to open development practices, and there can be plenty of opportunities – and incentives – along the way for going back into a closed way of working. If more effort had been made from the beginning in mentoring developers, the project could have been contributing actively to the community much sooner than it did.

What makes a community led project work?

This guest post has been contributed by Ross Gardler of OpenDirective. Ross is Vice President of Community Development at The Apache Software Foundation and a mentor at the Outercurve Foundation. Ross has been active in open development of open source software for over ten years.

OSS Watch has been participating in the development of Apache Rave, a ‘next-generation portal engine, supporting (Open)Social Gadgets as well as WC3 widgets’. As Sander observes in this blog, the Rave ecosystem is made up of a ‘diverse range of collaborators’ from both the academic and commercial sectors. These partners are sharing resources in order to build a critical piece of software at lower cost as well as to increase innovation around that product.

A few days ago I posted an evaluation of the Apache OpenOffice project’s journey through the Apache Incubator (all code entering the Apache Software Foundation (ASF) must pass through the incubator). That post looked at what makes an Apache project different from many other open source project. This post repeats many of the same points, but rather than examine them from the point of view of OpenOffice I will examine why predominantly academic team behind Apache Rave chose to go to the ASF.

Continue reading