There's nothing in the proposal that prevents you from creating any runtime distribution, but we aren't making any assumptions about it either. The proposal is intentionally limited in scope to build-time matters, specifying only configuration metadata, basic directory layout for SDK+toolchain bundles, and some CLI helpers to operate on those.
I also don't think we can specify in a proposal the amount of space a runtime for a given triple takes. This feels like an implementation detail to me and not something we could reasonably restrict through Swift Evolution.
Yes, names of toolset files are arbitrary and an arbitrary number of files can be passed. The order matters in that they're "applied" left-to-right, with tools that have the same identifiers in subsequent toolsets shadowing tools from preceding toolsets.
You can't group multiple toolsets with a single --toolset option. The invocation would have to look like this (backslashes only added for formatting purposes):
swift build \
--toolset mouse.json \
--toolset cat.json \
--toolset hound.json \
--toolset fox.json
Let's say mouse.json specifies swiftCompiler, cat.json has cCompiler, hound.json has cxxCompiler, fox.json has linker, they will all be merged together in the end without overriding each other. If fox.json also specifies swiftCompiler, that one wins as it shadows swiftCompiler defined in mouse.json.
You can also view it as a sequence of "scopes" where each file defines a new one that can shadow a preceding one. When "translated" to Swift it would look like this:
_ = { // `mouse` toolset
let swiftCompiler = "/usr/bin/swift"
{ // `cat` toolset
let cCompiler = "/usr/bin/clang"
{ // `hound` toolset
let cxxCompiler = "/usr/bin/clang++"
{ // `fox` toolset
let swiftCompiler = "/custom/swiftc"
let linker = "/usr/bin/lld"
print([swiftCompiler, cCompiler, cxxCompiler, linker])
// prints [
// "/custom/swiftc",
// "/usr/bin/clang",
// "/usr/bin/clang++",
// "/usr/bin/lld"
// ]
}()
}()
}()
}()
I don't think there's a precedent for file system path extensions that are not lowercase, although on a case-insensitive filesystem this wouldn't matter. Primarily, we're following the naming established in SE-0305, which already uses .artifactbundle for binary targets. If the intention is to change that, it would have to be discussed outside of this proposal and provide a migration strategy for case-sensitive filesystems.