Hi all,
I've created the first tolerably usable version of self-bootstrapping environment for Squeak 3.9a that can produce kernel image. It's delivered from http://lists.squeakfoundation.org/pipermail/squeak-dev/2005-October/096029.h... but it's prepared completely from scratch. You can find it here: http://www.comtalk.net/Squeak/uploads/20/kernel.tar.bz2
You need the fresh image 3.9a-6719. Then evaluate
Smalltalk condenseChanges
This step is necessary because of limitation of maximal changes file size. Condensing of changes files doesn't work well because it corrupts the methods that contains WideStrings. So you have to load file UTF8Patch.1.cs.
This image detaches GUI and model of changes so it contains new class named ChangesOrganizer. It has to be loaded before bootstrapping and it's included in ChangesOrganizer.st.
Then load Bootstrap.st. This file contains bootstrapping tools.
The source codes of bootstrapped image are included in Mirrors.cs. The loading of this file will take a while.
For opening of the console evaluate "Bootstrap start". In the console evaluate command "Bootstrap revert". This commnad will merge mirrors of classes, then it removes unnecessary classes including mirrors and recompiles whole image.
The result can be saved using "Smalltalk snapshot: true andQuit: false"
This image is not absolutely clean. It contains some obsolete classes (I've got one clean image without obsolete classes, it will no problem to fix it).
Have lot of fun
-- Pavel
Some modifications:
If you look at mirror of UIManager, you will see some new messages like onEventSensorStartup. The sender of this message is mirror of EventSensor>>startUp. In the original method is line
Smalltalk isMorphic ifTrue:[self flushAllButDandDEvents].
so we need only write the content of the block to the MorphicUIManager -- and so on... This is one set of modifications.
There is one correction of current sources -- class AsyncFile used class variable named Error and this name collided with another class name.
Some methods contain comment " shrinked ". This is removed functionality and we need to discuss next destiny of such stuff. For example the SecurityManager is dependent on cryptography classes. It's possible to remove it completely but it plays important role during Squeak startup. But without cryptography this class is not complete, so it's good candidate for next refactoring.
The last set of interventions are little modifications of souces like in XxxMultiCharacterScanner>>scanMultiCharactersFrom:to:in:rightX:stopConditions:kern:. This method uses class TTCFontSet that is removed. We need to suppose that competent package (with true-type font support) will modify this method or refactor it to enable more elegant way how to solve this. Another example is sLanguageEnvironment class>>startUp etc. I try to have the set of such modifications as small as possible.
AutoStart is currently removed from startUpList...