Hi Davorin,

Well, once the dust settles, I guess migrating old pier instances
people are using could raise all kind of strange issues. (not that I
am ungratefull for progress :)

That's a great point. One of the issues with Pier is how to upgrade to a new version - I found this  particularly challenging on Gemstone as I ended up with multiple version of the same class (#classHistory size ~= 1) which caused strange bugs with class equality checks in the code-base.

One idea I came up with is to build an exporter which generates Pier kernel creation code based on the data currently in Pier - it's a lazy design as I only have to write an exporter not an importer. I've used it successfully on a few smaller projects but have yet to try it on more substantial projects.

The code is available in http://source.lukas-renggli.ch/pier2addons - package Pier-Exporter-Code.

To use it:

PRKernelCodeExporter exportKernel: (PRKernel instances detect: [: each | each name = 'pier']).

The exporter generates PierKernelCreator 

and the kernel can be recreated with:

PierKernelCreator new createKernel

A Pier upgrade procedure could then be:

1) load PRKernelCodeExporter
2) export your kernel to code
3) try to regenerate your kernel
4) if 3 is successful then export the created code; PierKernelCreator
5) load PierKernelCreator and any of your custom Pier code into a Pier image with pragma support
6) Ensure that all add ons you use have been ported, including any of your own code using the porting guide outlined at the start of this thread.

I will add PRKernelCodeExporter class>>#exportMigratedKernel: which will generate #prototypeInstance initialisation for PRComponents, but first I'd like feedback if people think this approach is worth pursuing in theory and if so, in practice does the PRKernelCodeExporter work on your existing kernels?

Nick