ducasse at iam.unibe.ch
Sat May 20 19:50:51 UTC 2006
Colin I want to thank you for all the cool stuff you are giving us.
I still had no time to look at MC2 (I'm in painting and boxes for my
move + all the other mess)
but I would like to use it.
> Hi Daniel, Ralph,
> I think Daniel is absolutely right in his focus on cyclic
> dependencies. The difficulty in decomposing Squeak is because of
> the interaction of three factors, IMO:
> 1) It's awfully difficult to collaborate, especially in ad-hoc,
> distributed communities, without good version control
> 2) Monticello doesn't deal well at all with large, monolithic
> bodies of code or cyclic dependencies
> 3) Squeak is large, monolithic body of code rife with ill-defined
> and often cyclic dependencies
> As a point of comparison, look at the Seaside sub-community.
> Seaside2 has been under version control for its entire life, and
> the Seaside community has generally adopted Monticello for their
> Seaside projects. The issues we've struggled with and repeatedly
> debated in Squeak have been resolved without much discussion or
> effort in Seaside. The code base is modular and generally-well
> factored. Most packages are reasonably well maintained, but even
> packages with absentee maintainers tend to get fixes and "hacked"
> versions are available in one place or another. This works because
> the Seaside community just treats the underlying platform as a
> mostly opaque substrate and builds everything on top of it.
> More comments inline:
> On May 20, 2006, at 6:42 AM, Daniel Vainsencher wrote:
>> Package system:
>> I believe that the management of the code of Squeak in tool
>> supported packages is a critical component of any solution - this
>> is the only way to keep the boundaries up to date. So the
>> existance of MC exists makes this task somewhat feasible, but
>> there have been various problems with its use to manage the whole
>> - Performance (loading updates to the image using MC is much
>> slower than loading changesets).
> There are several aspects to this, but the primary one is that MC
> doesn't version code so much as packages. Because of the dependency
> issues in Squeak, packages are either really big, or a "small"
> change touches a lot of them. Either way, it means moving a lot
> more data and doing more work to update image than what is required
> for a change set. In practice, that makes it too slow everyday
> MC2 actually versions code, so it has a lot more flexibility. It
> would be possible, for example, to create an update stream of
> "versioned changesets" that wouldn't carry too much overhead
> compared to the classical update stream.
>> - System changes (like introducing Traits) require going through
>> various intermediate stages, but MC itself only model merging the
>> code in order to reach the final stage to be loaded.
> Yes. It's surprising how little this has affected at the higher
> levels of the system. (For example, MC can usually update itself
> without problems.) To manage all of Squeak, though, I don't think
> we'll be able to escape having some kind of update stream based on
> filing in arbitrary code.
> MC2 can help with this part as well. It can do atomic updates to
> the image, so the cases that require carefully orchestrated
> migrations should be very rare. I'm imagining only issuing updates
> every year or two, and having stuff stay pretty compatible in
> between updates.
>> - Workflow:
>> -- Support for cherry picking is very basic in current MC (which
>> MC2 should improve).
> Yes. Cherry picking is surprisingly important, and MC2 should do
> merges in general better than MC1 does.
>> -- MC is quite workflow agnostic, but maintaining Squeak does
>> require some workflow (people write fixes, other people merge
>> them), and maintaining it as a set of packages requires even more
>> of it (coordination of entry of package changes into the official
>> release). Right now we use a combination of SqueakSource, Mantis,
>> and email, glued together by (what seems to me like) lots of
> Breaking the dependencies is hard work. Monticello is making it
> even harder, because it's really meant to work on systems that are
> already decomposed. It expects to work on packages with stable
> boundaries and acyclical dependencies, and ties versioning very
> tightly to that model. It's too early to say yet, but since MC2
> does versioning without requiring packages, I'm hopeful that it can
> help with the modularization workflow more effectively than MC1.
More information about the Squeak-dev