It doesn't need to be internal because it doesn't expose unsafe operations