There is no canonical schema because what constitutes forward compatible schema is a matter of interpretation.
For example, it may be valid to rename a table field as long as the type is not modified. But it breaks down badly in JSON parsing and a naive schema checksum will also not capture it. Enumerations can also be change.
Assuming harder rules blocking any renames, there are still optional attributes, especially those that only make sense for some target languages.
But once you get this strict, you might as well prevent reordering in the schema as well.
Hence, you can just write a shell tool that strips whitespace and applies an MD5 or sha1 checksum, and even use openssh to sign if so desired.
On binary schema: printing it JSON without space would be the best option, but the bfbs schema leads to explosion due to shared DAG references.
A different binary schema without DAGs would be better, and could also be used by other programs to ready schema without understand FB, which is useful when bootstrapping.
Taking a checksum directly on bfbs is not very precise because it can change from build to build whereas a JSON output is rather stable, especially if limiting the names to ASCII.