[ANN] Monticello Versioning

Daniel Vainsencher danielv at netvision.net.il
Fri Jul 25 00:08:39 UTC 2003


Obviously we'll have bumps along the way, and a lot of facilities will
still be added to round things out and make them more comfortable for
specific modes of cooperation.

But I've never seen a change management system with a model I've really
liked, until now. Monticello's rocks.

You're actually, truly not insisting on having a Wise and Almighty
Repository, but allowing practically any collection of versions to
function as one. It is sheer audacity :-)

Daniel

Colin Putney <cputney at wiresong.ca> wrote:
> 
> On Thursday, July 24, 2003, at 11:08  AM, Julian Fitzell wrote:
> 
> > Well, to do a merge you want to find a common ancestor (preferably the 
> > most common one).  The nice thing about a distributed repository 
> > system is that you can maintain your own for your company (or on your 
> > laptop while on the plane) but you can push them into a public 
> > repository later.  So it may be a disadvantage to identify a version 
> > by URL.  You certainly could provide a URL to a version, but I think 
> > their could be many URLs that would give you the same version 
> > (uniquely identified by UUID).
> >
> > So it's likely that a project would have a "public" repository of 
> > versions that have been published.  Developers might have their own 
> > repositories and they might list each others' repositories as places 
> > to look for packages, but end users would likely only have the public 
> > repository in their lists.
> >
> > That's the vision we've been talking about anyway.  Not that there's 
> > anything in the MC model that forces that particular view - that's 
> > just what we've been moving towards as I understand it (and I say we 
> > loosely since I've been talking to Avi and Colin a lot about it but 
> > not really contributing much code recently :).
> 
> Yup. The idea is that what we've got in Monticello right now gives us a 
> fairly good base for exploring ways to do distributed concurrent 
> development. As the intersection between the worlds of Smalltalk and 
> Open Source, the Squeak community is in the odd position of not being 
> able to use the established patterns of either tradition to organize 
> its self. I'm really liking the directions SqueakMap and BFAV are 
> taking, and I'm looking forward to seeing what we'll come up with for 
> source code management.
> 
> So here's some of the thinking that Avi and I (and Julian, when he has 
> time) have been tossing around since Monticello got started at OOPSLA 
> 2002.
> 
> One of the key issues is the tension between declarative vs imperative 
> modeling of programs. The really neat thing about Smalltalk, and the 
> source of a lot of its power, is that it's just an environment where 
> objects live and interact. If you want the system to behave a certain 
> way, to fetch and display your email, say, you just add some objects 
> that behave the way you want. The fact that "it's all just objects 
> interacting" - the imperative model - is what makes Smalltalk such a 
> nice place to live and work.
> 
> The down side of the imperative model is that it's really hard to 
> replicate and distribute that email-reading behaviour. The very notion 
> of a "program" gets slippery. We can all see that Celeste is something 
> that we might like to use in different images and different 
> circumstances. To do that, we need to put a box around that email 
> behaviour, define it, name it. Declarative modeling is really handy for 
> that - in Java, for example, there's no question of where a program 
> begins and ends.
> 
> With Monticello, we want the best of both worlds: declarative models of 
> programs (or packages, really) that we can examine, compare, and relate 
> to various environments, without inhibiting the traditional Smalltalk 
> "mucking around with objects" development style.
> 
> So Monticello is organized around "snapshots" of the package. You do 
> your development with all the usual (or new and wonderful!) Smalltalk 
> tools. When you've got it to a state you like, you use Monticello to 
> take a snapshot. Snapshots are a declarative model of the Smalltalk 
> code that makes up a package. Here we throw out all the wonderful 
> flexibility of the object environment and insist that the package be 
> composed of classes and methods, organized in various ways, with 
> well-defined dependencies and initialization expressions.
> 
> Snapshots can be compared to produce patches, or created by the 
> application of a patch to a snapshot. They can be serialized and moved 
> between images, or stored on disk. And of course, they can be loaded 
> into the image - they can manipulate the object environment to restore 
> it to the state it was in when the snapshot was taken.
> 
> Another thing you can do with snapshots is version them, which is 
> another of the key issues that Avi and I have been batting around.
> 
> Versioning a program is really about recording a history of how that 
> program developed. To model the relationships between snapshots, you 
> have to model the development process. Given such a model, you can 
> develop tools that facilitate the process; to use them effectively you 
> have to follow the process they model.
> 
> As it happens, we live in interesting times. With the formation of the 
> Guides, we've started working our way towards a new development process 
> - one that doesn't revolve around Squeak Central, and that hopefully 
> combines the best of both the Smalltalk and Open Source worlds.
> 
> With Monticello we wanted to do two things. On the one hand, we want to 
> support the process that has developed so far and at the same time, 
> provide a platform that can be used to explore different ways of 
> organizing development. We don't want the tool to impose a direction on 
> our efforts to organize ourselves as an Open Source Smalltalk community.
> 
> This first release of Monticello provides the most elemental versioning 
> system we could imagine. A "version" of a package contains a snapshot 
> and some meta information: the author's initials, a timestamp, a 
> comment, and a list of versions from which this version is descended. 
> With this ancestry information any developer can intelligently detect 
> changes that another developer has made and incorporate them into his 
> own image.
> 
> There are certainly many more things we can do with versions, and as 
> our collective development style emerges, we hope we'll see new tools 
> and repositories which reflect it.
> 
> Colin



More information about the Squeak-dev mailing list