Why have the System object?
This repository doesn’t seem to mention any rationale for it. It would be good to document it.
For reasons explained at https://github.com/tc39/proposal-weakrefs/issues/22#issuecomment-491097466 we no longer need a System object, or a standardized whitelist of globals.
In that case, would getStack and getStackString be able to live on the Error constructor, or for compartment reasons, would they still need a separate global?
Still need separate globals. As you pointed out, with System, we'd only need one global, rather than two for error stacks and another two for weakrefs. I would still prefer that. But I am no longer arguing that System is necessary. We can live with four new globals instead.