That is actually exactly the model that everything is setup for. The toolchain installer is setup as just an envelope for the MSIs, it installs 5 MSIs:
- ICU (runtime component)
- Swift Runtime (runtime component)
- toolchain (core toolchain; e.g. clang, swiftc, lldb)
- x64 SDK (developer SDK - this is meant to be configurable with i686, x64, ARM, ARM64 being available)
- developer tools (spm, etc)
This also helps with the distribution sizes. The ICU MSI is large (previously brought up at ICU usage in Swift) and weighs in at 13 MB (compared to the SDK which is 10 MB). The runtime isn't exactly tiny either at 5 MB. The runtime components basically sum up to ~20 MB. Hopefully we will get to the point where we can start focusing on the distribution sizes to help reduce some of the cost.
My personal opinion is that products should really just bundle the runtime components, and because the runtime components would have the same product id, multiple packages installing it would not be a problem. Of course, there are a few more issues left to iron out still (namely versioning for parallel installation a la SxS). Fortunately, most of the work is just something which requires engineering effort, the solutions to them are pretty clear and simple to implement.
CC: @mishal_shah (for help with figuring out how to host the additional copies of the MSIs for redistribution sorted out)
Thank you