There need not be changes to the way vocabularies are loaded: instead one can make some words that change the vocab roots according to some configuration files. One could have a FACTOR-ROOT/cache directory in addition to work, core, and extras, where packages are arranged by version. Then some machinery could set the right vocab-roots based on a specification.
One would need
- some words to create structure that describe packages (Maven-like). This would allow to declaratively say that my project, at version x, consists of this and that vocabulary, and relies on project foo at version y and project bar at version z
- some words to automate fetching the dependencies of my project recursively from common repositories (one could start with github)
- a word to set the vocab roots according to my dependencies
Ideally, I would like to write a configuration file that lists my dependencies and then do something like
USE: my project.config
myconfig set-deps
On top of this, one could develop GUI tools to automate writing specification files, or even suggesting officially endorsed packages. See for instance the GUI tools in Pharo for a great example of this.The advantage would be that we would not have any changes to the way vocabularies are loaded, and the change would be much more incremental