[squeak-dev] Community Supported Packages
Andreas Raab
andreas.raab at gmx.de
Sat May 15 03:43:14 UTC 2010
Folks -
I've finally gotten some thoughts together for how to address the
'package issues' in Squeak. This is going to take a while so I apologize
beforehand for the length of this message :-)
First, let's talk about the goals. What I'm trying to achieve is
basically to blur the line between what is 'in' the image and what is
'out' of the image. What I'm trying to achieve is to enable people who
write applications and libraries for Squeak to be seen as direct
contributors to Squeak. What I'm trying to achieve is to drastically
grow Squeak by being much more inclusive while at the same time
drastically shrinking it by having many fewer packages 'preloaded'.
How can we do this? Over the last months I've spent some time looking at
options for package management. I don't really like any of the available
options but since I'm not going to write something new, I've
concentrated on the one choice that appears to be actively supported -
Metacello. It has its weaknesses but contrary to all the other options
it's the one choice that is being supported and I appreciate that.
While looking into Metacello I also spent some time at the Pharo
Metacello repository on Squeaksource. There are many interesting things
to be said about it, both good and bad. Good things about it are that
it's community maintained. Everyone can update everyone else's
contributions and although that's not generally done, it offers a
community approach to making sure things work. Something that for
example both Universes and Squeakmap lack completely. What's problematic
about the repository on the other hand is that for one thing one needs
to unconditionally trust the code even before one has even decided to
install it (this by far my biggest complaint about Metacello). Also, I
don't think that a single repository is a feasible option in the long
term - it seems to me that supporting the cross-product of image and
package versions is going to be problematic before too long. And of
course browsing repositories with several dozen of packages to find what
you need isn't exactly fun either.
However, the problems can be turned on their head, and that's actually
pretty insightful. Here's the basic idea: What if, instead of having a
single repository for all image versions with separate packages for each
config, we would instead have a single package simply called
Configurations in the trunk?
That Configurations package would contain all the "supported"
configurations for Squeak (I'll get to that in a minute). The package
would be community-maintained, just like any other package in trunk
development process. This addresses the trust issues with Metacello,
since the package has the same level of trust that all the other
packages in a Squeak release have; it has been developed using the same
principles.
What that gives us is a mechanism by which we suddenly can include
Omnibrowser, Seaside, Magma, FFI and anything else people can come up
with in Squeak without having to preload it in the shipping image. What
it also means is that we can start removing packages from the image,
replacing them with the proper configurations for how to load them back.
What it means is that somebody with a new application (be that
Stephane's Muo app, Hillaire's Dr. Geo, or Josh's OpenCL demo) can ask
for the configuration to be part of the next Squeak release, thereby
contributing *directly* to that Squeak version.
Most importantly, however, is that we as the community can decide what
we feel we want to support and what not. By being explicit about the
'house rules' we can make sure that the model is sustainable moving forward.
To do that, I'm proposing to create a status of "Community Supported
Package" in Squeak. What is that? A community supported package is a
piece of software where we feel this is an important/interesting/novel
package that should ship with this Squeak version. A community supported
package can be loaded in a 'one-click' process directly from within the
image. A community supported package is a package where we provide
assurance that the package has been tested for this release.
However, that status does not come for free. In return for achieving
this status, the software needs follow the rules for community supported
packages, which (at least) should include the following:
* No conflicts. Neither class names nor -override categories. The
rationale is that all community supported packages can be loaded
together without creating conflicts.
* Tests mandatory. A community supported package MUST have tests. The
rationale is that since we provide the guarantee that the package has
been tested, we need to ensure that testing can be automated to the
maximum extent possible. It doesn't mean 100% coverage but *some*
meaningful set of tests need to be provided or else we can't say if we
broke it in the latest update.
There may be some other guidelines that we may want to establish but I'm
trying to keep things simple and only the above two are truly crucial -
what they allow is to ensure that during ongoing trunk development we
will always be able to load all supported packages, run the tests and
see if we broke something horribly.
So the goal of the process is that if we do this right, we should be
able to tell how good (or how bad) a shape we're in regarding the
supported packages when we get to ship date. We should be able to
encourage people who write libraries or apps with, for, and in Squeak,
to contribute directly to the next release by providing a configuration,
their code, and the tests so that we can keep things running. In return,
we'll help with porting, provide backwards compatibility as required etc.
Code that we want to move out of the default image would be moved into a
configuration so people can load it if desired, and it remains a part of
Squeak instead of rotting away. Since the Configuration package is small
and has no dependencies, there's no problem to include that in
core/basic images and allow people to tailor custom images from there.
Concretely, I'm seeing the following steps as necessary:
1. Establish the status and the rules for "Community Supported Packages".
2. Create the "Configurations" package and start populating it with some
examples (Omnibrowser, FFI, Magma ...) to see how that 'feels' like.
3. Encourage people to bring their packages up to 'community standards'
and include them in the Configurations.
From here, there are a few more things that we should do before we can
ship the next Squeak version:
4. Provide a better installer than these awful doIts for Metacallo.
5. Establish a test server to automatically verify the community
standards for supported packages (i.e., load packages randomly, ensure
no conflicts, run tests, report results).
At this point, there is another clearly defined way to contribute to
Squeak even if you're not a core developer: Develop your software,
provide a configuration, ensure your software adheres to the community
standards. That's it. You've just made the next Squeak release a little
better :-)
Cheers,
- Andreas
More information about the Squeak-dev
mailing list
|