One of the challenges we faced with M2 was coordinating the release of so many components. In the end, it took a very long time to get the release out because we were waiting for Axis2 1.1 to be released - a dependency that only affected some modules but for which we had to hold up everything.

Also, Rick pinged me yesterday as he was having problems building trunk. I tried and ran into (different) problems. The fix was simple (thanks Raymond) but it illustrates the problem that trunk has a whole has become too large for people to easily work with. There's so much to build and it's fragile enough that people are just building sub-sections and that is causing another set of problems.

I think an approach to this is to break the project down into a set of modules along the lines where people typically work and to have a much looser relationship between those modules. Each module becomes responsible for its own code, testing, documentation, samples, releases etc. but organizationally remains part of a single project (one mailing list, one PMC, one SVN ACL). The boundary between modules is technical - interfaces and a commitment to maintain them - rather than social.

We started down this route in M2 with the modularization of Spec, SDO, DAS and SCA; going forward I think we need to expand this down into SCA. I'd propose the following:
* SCA Kernel (the apis, spis and default core impl)
* SCA Runtimes (hosts for the kernel that support users' runtime scenarios)
    Standalone
    Webapp
    Maven I-Test
    Eclipse
    etc.
* Extensions (components that add function to the bare runtime)
    Axis2 web services (axiom, axis2 ws binding, ...)
    Scripting and Web2.0 (script container, json databinding, ...)
    J2EE integration (ejb container, rmi/iiop binding, ...)
    Spring integration
    OSGi integration
    and many many more
* Distributions (things we'd expect a user to download and install)
* Integration test suites
* Sample applications (compound applications that integrate multiple technologies)

Key to this is we should not operate as if everyone is always building everything all the time - let's face it, many people are not doing that now. Developers should be able to build, commit and release any of these modules as needed. For that to work, developers of modules that other people rely on need to make sure that the changes they make cause as little disruption as possible - basically, define a interface to the module, strive not to make incompatible changes, and if you do let people know. To avoid the need to build everything locally, modules can publish snapshots to the maven repo that their downstream dependencies can use.

For example, if we publish a snapshot of the kernel module, all extensions etc. can rely on those jars from the repo rather than needing to build them ever time. If we keep the SPIs compatible, we can make changes to the core impl without disrupting any of the extensions; also we can add features to an extension, or even add a new extension, without changing the kernel or impacting other extensions. This does mean more work on both sides - we have to find ways to add function without making incompatible changes to the SPI - but it means that more people can get things done as each module can move at its own pace.

Technically I think we're fairly close to having this already. This is more of a social change in the project - changing our view away from "build it all" and being willing to do the work to keep the looser modules working together. I think though that we need to do this if we're going to maintain progress.

Thanks
--
Jeremy


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to