though it seems that you're right that file handles do not normally have mach ports on Darwin (which is surprising to me):
a program which does nothing has 11 ports opened. modify that program to open a file and it still only has 11 ports opened.
🤷
@ariadne @marcan @nicolas17 there is a semi-public way to wrap an fd into a Mach port (fileport) that you can then send to another process via Mach IPC, and then unwrap to receive an fd in the new process (kind of like SCM_RIGHTS). But this is just that, an explicit wrapper.