I am afraid this mail is going to be too long, but I feel it needs to be written. I will
start with the conclusion, so you can skip the mail if you feel it does not interest you.
Please keep the discussion on the Moose list, as there the discussion was started.
I am very happy that versioner is being built. We need more and better software
configuration tools, and versioner will make our life easier. That being said, I am
getting a bit nervous about how versioner is released. It should aim to improve the way
people can work, and not to create a single workflow for all people working on pharo
projects. I hope my fears are unfounded.
Software configuration management (SCM) is in my opinion an undervalued topic within the
software world. One cannot find very many good books on them, and I am afraid this lack of
knowledge shows in the way people go around with their SCM. So I would like to write down
some observations of the SCM processes in Pharo that I believe we should keep in mind.
The main target of SCM is to keep the impact of changes as minimal as possible. Good SCM
allows all people working on a certain project, to make their changes, without causing
trouble for other project members and people using this project. Open source projects are
(in SCM terms) rather complex, as they involve a lot of people, including some people we
do not know.
1. One of the best things of Metacello is that it does not require you to follow a certain
workflow. It is very flexible and supports a large range of possible workflows. Within the
Pharo community we have at least 3 different workflows:
A. For Pharo core, we have a pharo inbox, where suggested fixes for reported bugs are
put. These fixes are reviewed and, if accepted, integrated into Pharo. This ensures that
the changes in Pharo hold (most of the time) to quite some quality standards.
B. For the “cross-platform” projects (Grease, Seaside, Magritte, etc.) all suggested
fixes are put in the main repository on smalltalkhub. The fixes are, after review and
tests, released by putting them in a “released” version of the configuration. Since not
all fixes should be in all versions, and sometimes only concern a certain platform, the
process for Pharo core would not work: releasing fixes are more complex because of the
cross-platform issues.
C. For the “moose” projects all suggested fixes are put in the main repository and are
accepted by default. Since most projects evolve very fast, quality assurance is done
afterwards, by submitting bug fixes.
I can say a lot about why I believe these workflows are appropriate for their different
projects, but the point I am trying to make here, is that these workflows have come to
existence because of the different demands on them. And to stress my point about the
flexibility (thank you Dale):
When there was a problem with the workflow in the cross platform projects, I could find a
solution (using releases) that Metacello supported.
2. Unfortunately Metacello does not have a good UI. And for large configurations like
Seaside, it is a lot of work to keep them maintained. I dream of a tool that acts as a UI
for Metacello: this tool is flexible as Metacello, while making the simple things real
easy (hitting a button and done). Does versioner aim to do this?
3. I always get very nervous when someone says: They do it like this, and that works very
well for them. So we should do that too. I do not believe that is always a good idea. The
conclusion should be a question: Can we use that too? And now I cannot find the mail about
the java SCM practice, but I do not think we can apply it to all our processes ...
4. Modularity is very important. Also for performing good SCM. And yes, we lack sufficient
modularity in Moose. It should be better. I.e. because of the lack of modularity, it is
sometimes hard to distinguish between where the change needs to be put in. So there is no
clear group to point out who should accept the changes. So this is also an SCM problem.
Cleaning up the configuration will help here very much. Thank you Steff for the good work
here. And maybe you also have a point that the people working on Moose should have more
focus on keeping things modular, because it makes the system better maintainable in a lot
of ways.
5. Forking things will only make SCM worse, as it adds a complexity. So I very much hope
we can come to an agreement how the process works, without resorting to drastic measures.
Regards,
Diego