A ZFS dataset that has the features
acltype=posixacl manually set (they are not defaults) will have issues with BSD/illumos
This explains why pretty well: We should document cross platform portability · Issue #7784 · openzfs/zfs · GitHub
The remarks others made about feature flags are correct. However, there are a few additional, but minor, concerns specific to moving pools made under Linux to other systems.
If you use xattr=sa, you will lose access to the extended attributes on FreeBSD because the IRIX-style Linux-specific xattr implementation provided by xattr=sa is not compatible with other platforms’ drivers. They will still be there, but inaccessible and will do nothing but take up some space. This extension predates feature flags.
Also, the POSIX ACLs are not cross platform compatible. They will just show up on other platforms as extended attributes unless you have xattr=sa set, which makes them invisible.
If you rely on xattrs or ACLs, you might want to recreate them on FreeBSD. It would not be a bad idea to remove ACLs from files and disable the POSIX ACL support while switching xattrs on any datasets with xattr=sa set to xattr=on and then removing and recreating them. It should be possible to script. In particular, I don’t know what will happen if you set xattr=sa on Linux, make some small extended attributes, move the pool to FreeBSD, set extended attributes there and then move it back to Linux. I’d need to look at the code to know, but I do not have time for that right now.
I probably should mention that there is a caveat for the reverse direction too. Linux’s NFSv4 ACL support is so broken that we never implemented it, so NFSv4 ACLs from other platforms will be hidden.
I am not currently aware of other settings that can cause interoperability issues. The default settings are they way they are to maximize compatibility, despite some settings being much better on certain operating systems.
On tangent, when trying to be able to boot from a root ZFS dataset,
dnodesize=auto can cause issues with GRUB, so generally dnodesize=auto is only used on non-root datasets in such situations.