There has been talk about "game types" which, as far as I have understood, is a collection of modules that could be selected by the player as a starting point of a Terasology game. However, I would imagine that there would be more to it than just preselecting modules to enable. A game type could specify win conditions, a set of rules, or a set of mechanics that will exist in a world (I am going to call these core mechanics). Then, content that is compatible could be added to the game type at the user's discretion which would create usable game play.
How would the engine determine what content is compatible with the selected game type?
The core mechanics of a game type would have to be unique, otherwise there would be systems added that compete for the same mechanic (think multiple water simulators, multiple vegetation systems, multiple hunger systems). I suppose one could make an argument to be allowed to add similar mechanics as long as they dont interfere with one another. A good case for that would be 2 different vegetation systems. As long as they did not affect the same blocks of vegetation, all would be well and they could have their own growth logic.
How could one only allow one instance of a particular core mechanic and allow modules to be smart about not intruding on another module's stuff? Would it come down to just not enabling 2 competing modules? What happens when a dependency gets enabled that intrudes on the game type's core mechanics?
Content would be layered on top of or beside mechanics. The tricky part would be to find that line that separates generic systems from their block content. In some cases you would want to package together blocks and systems in order to create a nice distributable. But in other cases, you would want to create separate distributables so that a modder is not locked in to a particular organization of blocks.
How far does one take separating content and systems? Forcing a "systems" module and a "content" module for would be silly for small projects. But then on the other side, it would feel messy to build on top of another module's systems without stepping on the pre-existing blocks.