This is a bit of a tangent, but one issue with the POSIX (and underlying BSD/Linux) APIs is that they don't act nicely with mount namespacing (and thus containers). Since every /dev/pts mountpoint has a different set of ptys associated with it, you need to join a mount namespace in order to operate on /dev/pts/... (and the only way to get a slavefd is to open /dev/pts/$num).

This is of particular concern to container runtimes, so I recently wrote a patch that added a new tty_ioctl(4)[1] to make things _slightly_ better (though I think the pty namespacing concept really needs to be reworked -- not to mention the countless lovely problems with Linux's namespace primitives). Effectively it allows you to safely open a slavefd given a masterfd (without needing to worry about mount namespace issues).

Short story, if you're an author of a container runtime I would take a look at using that feature.

[1]: https://marc.info/?l=linux-kernel&m=149649933504954&w=2