Right now, we have KernelPid which is i16 internally (and converts into an i16 without preserving the implied "it is positive and not zero" property), but also interface identifiers which in GNRC are inherently PID bound but expressed as NonZero in gnrc::nib because the underlying gnrc_ipv6_nib_nc_get_iface returns a C unsigned int (which, remind you, is not usize but basically an arbitrary type, and 32-bit long on some 64-bit systems)
It may be worth considering whether we can and should unify those. Practically, I don't expect interface identifiers to exceed 127 anyway on RIOT systems :-)
Right now, we have KernelPid which is i16 internally (and converts into an i16 without preserving the implied "it is positive and not zero" property), but also interface identifiers which in GNRC are inherently PID bound but expressed as NonZero in gnrc::nib because the underlying gnrc_ipv6_nib_nc_get_iface returns a C unsigned int (which, remind you, is not usize but basically an arbitrary type, and 32-bit long on some 64-bit systems)
It may be worth considering whether we can and should unify those. Practically, I don't expect interface identifiers to exceed 127 anyway on RIOT systems :-)