Years ago I was trying to rationalise all the various functionality of Smalltalk/SmalltalkImage across
forks. I also wanted to support a scheme that would handle being bootstrapped from sources.

i.e. the startup process may load in or unload a number of classes from sources at an early stage, and when the time came to think about #startUp they may not have been #initialised, (the #startUp might be their initialisation).

So I vaguely recollect that when I had a go at re-doing the startuplist I removed this responsibility to a class of its own, called StartupManager, and removed the class var that holds the list in favour of a voting system.

I found some code hiding away (somewhat obfuscated)

https://bazaar.launchpad.net/~keithy/cuis/System-Support_StartupManager/revision/1#StartupManager-into-Cuis2/1-System-Support-StartupManager.install/0002/StartupManager-(startup-shutdown)-int.1.st

Looking through the comments I find

StatupManager

New simple startUp shutDown protocol

classes implement #startUpPriority #shutDownPriority to register.
Note: this code could be hosted on a different class, such as SmalltalkImage,

The startUp and shutdownLists are compiled by looking at all implementors of:'

startUpPriority and #shutDownPriority'

Priorities are: #first #earliest #earlier #early #normal #late #later #latest #last'

As you can imagine this was very much a first attempt at resolving these problems.

Keith