Well, it might be that the Workshop would require players to upload entire customized DF installation (including exes) and there being some kind of launcher that would handle that (launching separate installations based on which mod user wants to play). That's how I'd do it if I needed money fast and wanted to release ASAP.
But of course, it'd be great if something like mod stack happens.
Yikes, that would be horrible. I much prefer your mod-stack idea.
+1If we are having a mod-stack though, I foresee some structural changes to the raws themselves.
For one, why not simply consider the vanilla raws mod #0? This way most of the code would be the same for dealing with vanilla items and other mods (for mods of mods, or compatibility mods). The vanilla raws could also be turned off fully for total conversion mods.
To allow for maximum compatibility, and easy editing, the mods could use
three different types of object-related declaration tokens, instead of just the existing OBJECT_TYPE (a short I will use for CREATURE, ENTITY, ITEM etc. tokens, that declare a new object) declaration:
[
NEW:OBJECT_TYPE:NAME] - What we have now. To avoid duplication errors, objects declared this way should overwrite objects earlier in the mod-stack. For the sake of compatibility with older mods, [OBJECT_TYPE:NAME] acts as a valid synonym.
[
EDIT:OBJECT_TYPE:NAME] - Allows for the editing of previously declared objects, by adding tokens. Useful for mods that edit the same objects, e.g. adding modded reactions to the vanilla entities, or compatibility mods. Could have SUB-TOKENS similar to the creature variant ones (ADD_TOKEN, REMOVE_TOKEN, something for further editing castes/materials/tissues within the object). Otherwise, simply adds tokens. If no object of the OBJECT_TYPE and NAME exists, returns a compatibility error message.
[
REMOVE:OBJECT_TYPE:NAME] - Removes an object. For those that don't like a certain object, especially useful if the vanilla raws are considered the top mod of the mod-stack, and vanilla objects thus cannot be otherwise removed. May or may not return an error if there is no such object.
The vanilla raws would of course not include any of these two latter declaration types, as they are only useful for mods further down the mod-stack, but I believe a system using something like them would be optimal in case of a mod-stack.