[squeak-dev] [Cuis] Cuis
keith
keith_hodges at yahoo.co.uk
Sun Jan 24 15:11:32 UTC 2010
> Keith, you know very well your main options:
> 1) you take a trunk/pharo/cuis image then reload all your stuff
> (LPF/Installer/Sake/Package SHOULD be helpful). You may report
> compatibility problems in relevant list.
yep, correct.
> 2) you start with an unmaintained image from the past, transform MC
> diffs into change sets and you cherry pick, but you're on your own.
yep correct again.
So points to conclude from this.
a. Everyone is on their own.
b. You can't really start doing either, until the 3.11 is released.
(So a bi-monthly release cycle would be a better thing than a bi-
annual one, I am still waiting for the process that is going to get us
a bi-monthly release, tested and documented)
c. If you do start doing it now, you have to continuously track trunk.
If you use packages form pharo, you probably have to continually track
pharo as well!
d. The packages that you publish which have existing users, you either
have to maintain a dual codebase for, one for the old and one for the
new base images, or you have to restrict yourself to the lowest common
denominator. (if you are forced to do this all the time, then there is
no point in moving to a better api)
> I know very well your problems.
> I played option 2) during seveal years when releasing a commercial
> product in VW.
> I know very well the costs, and I know you are in trouble with this
> path.
You are making the mistake that option 1 and 2 are mutually exclusive,
they are not.
You only have to back port essential API changes, (like for example,
if Pharo publish Author as a loadable package that would load into
Squeak, then a load of compatibility problems will be sorted)
Once you have back ported the API, you can move your own code base
forward, and continue to support other users still stuck in the past,
by offering them the backport patch.
> Not that many experienced people are still supporting option 2).
> Juan still use it because he wants a very fine grain control. The fact
> that Cuis is minimal may help but he knows how much time it costs.
> Sorry, but I doubt you'll attract many people on that path.
And the evidence we have is that purely relying on option 1, leaves a
trail of forks behind it, (etoys, sophie cobalt, and now soon to be an
orphan "beach") for which the cost of porting up to the front is 3
months of unproductive work. Secondly there are now two fronts to port
up to, so which do you choose?
All that is needed is to facilitate a migration path, from 3.x to 3.x
+1. Note I didn't say you need to provide that migration path, just
facilitate it.
You facilitate it by packaging separate innovations separately
upfront. (like we did on mantis, but on a less granular scale). This
is the basis of the packaging model, just applied to features of the
kernel. Then you build your releases by integrating innovations on a
regular basis.
Then the knowledge you need to backport an innovation is there if you
need it. No cherry picking is needed. Secondly you are not on your
own, because if you extend the innovation to provide a backport to
say, 3.10. Edgar can come along and contribute his knowledge (by
conceptually subclassing your work) and extend it to work for
"Minimal" too.
So the model proposed is: you innovate in the latest release, in your
context, but you don't publish your innovation in such a way as to
restrict its use to only your context. (that would normally be called
a changeset (cs), or a deltastreams-delta (ds) You allow others to
retarget your innovation to their context, and you provide a place
where all users of that innovation pool their knowledge as to how to
apply your innovation to all the different contexts. This is what Sake/
Tasks is for, you provide your innovation as one Task, with
dependencies and pre-requisites, and others can subclass that Task to
tweak it for application to other contexts, which have other
dependencies and pre-requisites.
Sake/Packages does this for packages. It collects the data as to what
is needed to load a package into Squeak, Pharo, and any other contexts
you care to add. However it does this, not just for the current
releases, but also past unmaintained releases. The squeaksource.com/
Packages repository becomes a shared resource defining exactly what
loads where. If for example I want to load a package into a released
version of Minimal, then I can add the fix to the the dependencies in
the Minimal packages definitions. At a later date I hope I can
persuade Edgar to incorporate the patch in Minimal, but if there are
any users of the old Minimal release then they will still need the
patch.
> Would I develop an app today, no doubt it would be with option 1.
> Installer/Sake could be used as well for option 1, couldn't it ? You
Yes this is what I use, and have used since 2006.
1. However pier keeps data in image, so the move is not routine.
2. Trunk is still moving, and is alpha so it will not be ready for at
least 6 months and i wont have the time for perhaps a year to do it
(so trunk remains irrelevant to me for all practical purposes until
about a year or more hence)
3. I am not just porting an application to latest, I am supporting
packages that have users in many images. So while I may port my stuff
to latest, I still have to support my users in 3.x-1. So I end up
having to follow option 2 anyway, even to achieve option 1.
The bob process would only integrate release quality finished
innovations into the final-release. Conceptually there would never be
an alpha release, there is always a stable release X, and the previous
stable release X-1, and the 100 or so deltas that move X-1 to X.
> have to think about this option too.
> That's how I see things with option 1:
> - you select an image when you think added value is worth the effort
> (like faster file I/O)
> - you load and run specific Kernel tests expressing the essential
> expectations of your application
> here, you can have a go/no go decision.
> It can also be a maybe: you send requests to developpers or propose
> your own changes in trunk.
Its a bit late, since I wont be starting this until 6 months after
trunk is released.
> - you play your scripts to load your application
> - you run your application tests and ask for support on regressions
> and uncompatibilities.
But meanwhile I still have to support and maintain the X-1 release. So
I still have to back port patches to X-1.
We have a mechanism for patching the current release (its called the
release team), but we don't have a mechanism for patching the X-1
release for my existing package users. (that is what LPF was invented
for, but if no one uses LPF....)
> More over, with bob you could automate the tests and automatically
> know if trunk updates are breaking things or not.
yep you could.
> So the question of an officially "released" image is less relevant.
> If you really want this process, adopt Pharo, they are close to 1.0
Thats what I was actually thinking of doing, until I actually tried
pharo, and discovered they had removed the PackagePaneBrowser.
I find OB unusable.
> (without faster streams and other improvments of course...).
>
> Cheers.
>
> Nicolas
Keith
More information about the Squeak-dev
mailing list
|