[squeak-dev] Let's push it
Andreas Raab
andreas.raab at gmx.de
Tue Jun 30 03:58:18 UTC 2009
Folks -
I truly love this discussion and I think it has generated enough insight
that we can try pushing a few things. As a first step, I would like to
propose a slightly different development model for Squeak, because I
think that is one of the fundamental bits that is wrong. Here we go:
1) Agree on MC as the core development tool/model. This is painful and
consequently the decision has to be made consciously. However, from my
perspective there is really no suitable alternative [1].
2) Decide on the canonical repositories. I would suggest that
http://source.squeakfoundation.org/trunk is a fine starting point [2].
3) Decide on who gets commit rights. I would suggest that the board
decides that (equally for eventual access removals). The "masters" list
from Squeak-people could act as a starting point.
4) Implement an update model for MC. I would suggest to adopt a similar
model to what we've been using for Tweak in the past: Use MC config maps
to mark points in the update process where order is important and
otherwise update the packages in a well-defined order[3].
These four steps are intended to achieve the following: I can propose to
the board that Eliot should be given access to the kernel repository so
that he can commit any fixes to the compiler or other changes required
for Cog directly without the need for an intermediate. I can propose to
the board that Nicolas gets commit rights to the kernel repositories so
that he can commit any fixes for numeric stuff he has or comes up with
in the future. If the board agrees, they can do that, period. If they
screw up or abuse their powers the board can retract commit rights.
The main difference to what we've done in the past is simply that we
have an inclusive list of committers instead of a select few and that we
do understand the image as truly being "work in progress" inbetween the
releases. In other words, be more active, change things faster, make it
possible to report, devise, submit, and deploy a change in a matter of
minutes.
For people who don't have commit rights, there is both Mantis or
commit-by-proxy which reinstates the SqC model of having a champion for
your change. I.e., to commit something you can ask someone else to
commit your change but that person implicitly takes responsibility for
your change and will be the person who gets blamed for it and is
expected to take care of it (and they may loose their commit rights if
the change they commit is complete crap). To me, that is a useful
intermediate state because the proxy acts as a mentor to teach the
original author about how to provide changes, make sure it's okay etc.
For Mantis, Keith just added a bunch of wonderful scripts that allow us
to pull changes from it and build images (and hopefully soon run tests
like the integration tests that I've been working on earlier) which
means that we can build images with those changes included, test them,
and if they pass those tests (and possibly other review), commit them to
trunk. Again, I think having a champion who does the commit would be a
good model. Obviously there is still a manual element involved here but
the idea is that the regular committers would be able to go straight to
the repository without requiring further approval.
For users of Squeak there would be an update process which (although
much slower than the update stream of the days of yore) would allow
people to keep track of the ongoing changes and (for forks) merge those
changes as desired along the way using Monticello.
What do people think about this as a straw-man? Obviously, I want to
enable people to contribute in the most straightforward way possible.
Allow development to be more fluid, make mistakes faster, fix them
faster. It does not address the issue of controversial / strategic
changes but I think we're mostly loosing out on the most basic level and
if we want to fix the processes we must make simple things simple and
complex things possible, not the other way around.
Cheers,
- Andreas
More detail on some of the issues above:
[1] Why I think update streams don't cut it: When you do distributed
development it is necessary to know if there are conflicts with what you
are working on. If you only get to spend two hours a week on development
you need to be able to quickly find out if anything changed in an area
that you've been working on since last week. If you want to provide
backwards compatibility you need to be able to reflect about what has
changed, etc. Monticello is pretty bad but it's still the best we got.
[2] http://source.squeakfoundation.org/trunk: The idea is to use the
version specific directories (Squeak39, Squeak310, Squeak311 etc) as
branches for released versions. The "current" version is always on
trunk, the specific ones provide updates after a version was released.
[3] MC based updates: The basic idea is that the config maps define load
order and intermediate stages where required. There is an
update-<version>.mcm in every repository that is consulted by the update
loader process. The update process loads the update.mcms in order and
uses the order in the last loaded update.mcm to update all the remaining
packages. In other words, as long as the packages load with the last
defined order, we change nothing. If Bob finds a problem we issue a
(series of) configurations that get past that update bump. Yes, there is
a certain element of risk to it but if Bob runs test builds of the image
for us we can simply update to the last version which Bob was able to
build for himself (and Bob can notify us that there's a problem).
More information about the Squeak-dev
mailing list
|