i guess a better way to ask this question is then: why is ClientBootstrap a reference type in the first place?
of course i don’t know the details of how it’s implemented, but it seems to me at least that a ClientBootstrap is just a bag of settings and initialization functions, and shouldn’t really have any shared mutable state to begin with.
i can’t really think of many situations where it would be useful to add a setting to a ClientBootstrap and have those changes become visible to every other reference to that object.
You are right, ClientBootstrap should have been a struct. Sadly we can't change this without breaking API. Note that this would need some more redesign in the current implementation but AFAIK nothing fundamentally impossible in a new major version.